pax_global_header00006660000000000000000000000064126513706720014523gustar00rootroot0000000000000052 comment=b3229998436eac8526c0a2a7b6b632855b4d5e61 qtpass-1.1.0/000077500000000000000000000000001265137067200130355ustar00rootroot00000000000000qtpass-1.1.0/.appveyor.yml000066400000000000000000000012041265137067200155000ustar00rootroot00000000000000install: - set QTDIR=C:\Qt\5.5\mingw492_32 - choco install -y InnoSetup - set PATH=%QTDIR%\bin;C:\MinGW\bin;%PATH%;"C:\Program Files (x86)\Inno Setup 5" build_script: - qmake qtpass.pro CONFIG+=static - mingw32-make after_build: - cmd: copy README.md release\README.txt - cmd: copy LICENSE release\LICENSE.txt - iscc qtpass.iss artifacts: - path: Output\qtpass-*.exe - path: release\qtpass.exe deploy: provider: GitHub auth_token: secure: YfscG1DR0+kApThPXxQSr+ZEjUOUlIG0Tqc5+90IFsUInyICRRMdbJsbxR2qhq/p artifact: /qtpass-[0-9]+\.[0-9]+\.[0-9]+\.exe/ draft: true prerelease: false on: appveyor_repo_tag: true qtpass-1.1.0/.gitignore000066400000000000000000000004111265137067200150210ustar00rootroot00000000000000Makefile debian/qtpass* debian/files build-stamp qtpass QtPass.* qtpass.pro.user qtpass.xcodeproj/project.xcworkspace/xcuserdata/* qtpass.xcodeproj/xcuserdata/* qtpass.xcworkspace/xcuserdata/* .DS_Store .qmake.stash *.o moc_*.cpp qrc_*.cpp ui_*.h localization/*.qm qtpass-1.1.0/.linthub.yml000066400000000000000000000003361265137067200153050ustar00rootroot00000000000000platform: linux | osx build: - qmake - make analyzers: - cpplint: true include: ["*.cpp", "*.h", "*.hpp", "*.c"] path: ./ filters: - -whitespace - +whitespace/braces style: google - markdownlint: true qtpass-1.1.0/.travis.yml000066400000000000000000000017541265137067200151550ustar00rootroot00000000000000language: cpp sudo: false os: - linux - osx compiler: - gcc - clang addons: apt: packages: - qt5-default install: - if [ "$TRAVIS_OS_NAME" = "osx" ]; then brew update; fi - if [ "$TRAVIS_OS_NAME" = "osx" ]; then brew ls | grep -wq qt5 || brew install qt5; fi - if [ "$TRAVIS_OS_NAME" = "osx" ]; then export PATH=$PATH:/usr/local/opt/qt5/bin; fi env: global: secure: WaZq3f6KIAc0dnR4WOXYWDvUYiqlrzsZC/PQse47FnvC0oQC65J5w3kJOj/P26DgsUEqKQF3ukXogkM2mp5pS4+CMgivEmQmAbgQTtwcKpC5HPZxgI+8FgkCjcalJKWGWYoxlScNVNiKMs+89ApcSQE9kH9PZeUS9dukN2Php1U= addons: coverity_scan: project: name: "IJHack/qtpass" description: "Build submitted via Travis CI" notification_email: brouwer@annejan.com build_command_prepend: "qmake; make clean" build_command: "make" branch_pattern: coverity_scan script: - qmake -v - qmake -Wall qtpass.pro - make -j$(nproc) notifications: irc: channels: - chat.freenode.net#IJhack on_success: change on_failure: always qtpass-1.1.0/CONTRIBUTING.md000066400000000000000000000013661265137067200152740ustar00rootroot00000000000000# Contributing Make sure you have read the [FAQ](FAQ.md) Thank you for wanting to contribute to making QtPass awesome. ## This document This document is stil in a very early stage and needs a lot more work. ## Translations * Add you language to the `qtpass.pro` file under TRANSLATIONS and in the `resources.qrc` file. * Next run the command `lupdate qtpass.pro` which will create the localization files. * Edit your file with (let's imagine your language is sv_SE (Swedish) `linguist localization/localization_sv_SE.ts` Qt Linguist has very nice in-context translation options [for translators](https://doc-snapshots.qt.io/qt5-5.6/linguist-translators.html) ## IRC For questions or brainstorming about features please join #ijhack on freenode. qtpass-1.1.0/FAQ.md000066400000000000000000000054371265137067200137770ustar00rootroot00000000000000# FAQ ## Issues ### Can't save a password * Is folder initialised? Easiest way is to use the [Users] button and make sure you can encrypt for someone (eg. yourself) * Are you using git? If not, make sure it is switched off. ### I have an issue with GNOME keyring * Disable GNOME keyring * Create a `~/.gnupg/gpg-agent.conf` containing: ``` enable-ssh-support write-env-file use-standard-socket default-cache-ttl 600 max-cache-ttl 7200 ``` Also, the following is useful to add to your .bashrc if you are using Yubikey NEO on Ubuntu: ``` # OpenPGP applet support for YubiKey NEO if [ ! -f /tmp/gpg-agent.env ]; then killall gpg-agent; eval $(gpg-agent --daemon --enable-ssh-support > /tmp/gpg-agent.env); fi . /tmp/gpg-agent.env ``` * More info: [issue 60](https://github.com/IJHack/qtpass/issues/60) and [issue 73](https://github.com/IJHack/qtpass/issues/73) ### I don't get a passphrase / PIN dialog * You'll need to install pinentry-qt (or -qt4 or -qt5 or even -gtk) and possibly set the full path to that executable in your `~/.gnupg/gpg-agent.conf` for example: `pinentry-program /usr/bin/pinentry-qt4` * On some esotheric systems it might be necessary to create a symbolic link `/usr/bin/pinentry` to your pinentry application of choice eg: `ln -s /usr/bin/pinentry-qt5 /usr/bin/pinentry` ### Git doesn't work on Windows git for Windows comes with an `ssh-askpass` compatible command, git `gui--askpass` (located in `/mingw64/libexec/git-core/git-gui--askpass` on PortableGit version, presumably some place similar for the installed version). ### Where can I ask for help? * Create an [issue](https://github.com/IJHack/qtpass/) issues on github. * Send an email to [help@qtpass.org](help@qtpass.org) ### Can I import from KeePass, LastPass or X? * Yes, check [passwordstore.org/#migration](http://www.passwordstore.org/#migration) for more info. ### I don't see icons on the buttons You do not have the Qt SVG library installed. Please install using your favorite package manager. ### I get icons that do not fit my (X11) default On some WindowManagers (Cinnamon for example) Qt doesn't know what icon set to use, a trick ``` export DESKTOP_SESSION=gnome ``` ### I don't like the design, what gives? * It's all on github, clone, change and send a pull request. * Open an issue and point out defects or better yet propose changes. ## How can I help improve QtPass? ### I would like to donate! * Time: * Read [contributing](CONTRIBUTING.md) documentation. * Fork, clone hack and send a pull request. * Find an [issue](https://github.com/IJHack/qtpass/issues) to work on.. * Participate in our bug bounty, you submit an issue and help us fix it, I send you a bounty. * Money: * IJhack takes donations in [bitcoin](https://blockchain.info/address/146dqz8zXn9iNZMv5s7JVqwZKjrmumHBfb) qtpass-1.1.0/LICENSE000066400000000000000000001045131265137067200140460ustar00rootroot00000000000000 GNU GENERAL PUBLIC LICENSE Version 3, 29 June 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 General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is 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. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. 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. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. 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 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. Use with the GNU Affero General Public License. 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 Affero 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 special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU 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 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 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 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 General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that 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 . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". 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 GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . qtpass-1.1.0/README.md000066400000000000000000000074471265137067200143300ustar00rootroot00000000000000QtPass ====== [![Build Status](https://travis-ci.org/IJHack/qtpass.svg?branch=master)](https://travis-ci.org/IJHack/qtpass) [![Build status](https://ci.appveyor.com/api/projects/status/9rjnj72rdir7u9eg/branch/master?svg=true)](https://ci.appveyor.com/project/annejan/qtpass/branch/master) [![Coverity scan](https://scan.coverity.com/projects/5266/badge.svg)](https://scan.coverity.com/projects/ijhack-qtpass) QtPass is a GUI for [pass](http://www.passwordstore.org/), the standard unix password manager. Features -------- * Using pass or git and gpg2 directly * Configurable shoulder surfing protection options * Cross platform: Linux, BSD, OS X and Windows * Per-folder user selection for multi recipient encryption * Multiple profiles Logo based on [Heart-padlock by AnonMoos](https://commons.wikimedia.org/wiki/File:Heart-padlock.svg). Installation ------------ ### Dependencies * QtPass requires Qt 4.8 or later, preferably Qt5. * The Linguist package is required to compile the translations. * For use of the fallback icons the SVG library is required. On most *nix systems all you need is: ``` qmake && make && make install ``` On Mac OS X: ``` brew install qt5 brew link --force qt5 xcode-select --install qmake && make && macdeployqt QtPass.app ``` Currently seems to only work with MacGPG2 Security considerations ----------------------- Using this program will not magically keep your passwords secure against compromised computers even if you use it in combination with a smartcard. It does protect future and changed passwords though against anyone with access to your password store only but not your keys. Used with a smartcard it also protects against anyone just monitoring/copying all files/keystrokes on that machine and such an attacker would only gain access to the passwords you actually use. Once you plug in your smartcard and enter your PIN (or due to CVE-2015-3298 even without your PIN) all your passwords available to the machine can be decrypted by it, if there is malicious software targeted specifically against it installed (or at least one that knows how to use a smartcard). To get better protection out of use with a smartcard even against a targeted attack I can think of at least two options: * The smartcard must require explicit confirmation for each decryption operation. Or if it just provides a counter for decrypted data you could at least notice an attack afterwards, though at quite some effort on your part. * Use a different smartcard for each (group of) key. * If using a YubiKey or U2F module or similar that requires a "button" press for other authentication methods you can use one OTP/U2F enabled WebDAV account per password (or groups of passwords) as a quite inconvenient workaround. Unfortunately I do not know of any WebDAV service with OTP support except ownCloud (so you would have to run your own server). Known issues ------------ * Filtering (searching) breaks the tree/model sometimes * Starting without a correctly set password-store folder gives weird results in the tree view * On Mac OS X only the gpgtools MacGPG2 version works with passphrase or PIN Planned features ---------------- * Re-encryption after users-change (optional of course) * Plugins based on field name, plugins follow same format as password files * Colour coding folders (possibly disabling folders you can't decrypt) * WebDAV (configuration) support * Optional table view of decrypted folder contents * Opening of (basic auth) urls in default browser? Possibly with helper plugin for filling out forms? * Some other form of remote storage that allows for accountability / auditing (web API to retrieve the .gpg files?) Further reading --------------- [FAQ](FAQ.md) and [CONTRIBUTING](CONTRIBUTING.md) documentation. [Documentation](https://qtpass.org/) [Source code](https://github.com/IJHack/qtpass) qtpass-1.1.0/appdmg.json000066400000000000000000000006061265137067200152020ustar00rootroot00000000000000{ "title": "QtPass", "icon": "artwork/icon.icns", "background": "artwork/icon.png", "icon-size": 80, "contents": [ { "x": 64, "y": 64, "type": "file", "path": "QtPass.app" }, { "x": 448, "y": 64, "type": "link", "path": "/Applications" }, { "x": 64, "y": 448, "type": "file", "path": "README.rtf" }, { "x": 448, "y": 448, "type": "file", "path": "LICENSE" } ] } qtpass-1.1.0/artwork/000077500000000000000000000000001265137067200145265ustar00rootroot00000000000000qtpass-1.1.0/artwork/icon.icns000066400000000000000000013730031265137067200163430ustar00rootroot00000000000000icnsic08fGPNG  IHDR\rfsRGB pHYs  @IDATx $Wu&Uի7%X eIv3??Ɔ16< ч230ǎ 6 $F BVVW/U,7NDFԚU*{{s̲4h q(aM٠h& p`ړ6o'N\tG_>C{"I -ئA2B npc:fAۃ&@6o=L" 2??.E2d=kjjJòBͮ,:cr19܎>qh:@3'c6c{o'BJv^ /CCw]BN "7c8ں_}ӛ(2h&1>FXUyll/.6&'*!iq^_DێGȉumd[}}yd1)cf%ڏc^;M& =nq8e=9 Din^OZ(A? OlDp~Mdo$ij$>b='?-^'N iLXXwٗ{]M 4^~5zoouDri= /I| ۋ'9N#w^D跀gT~ky?֮/2VH ߀b: ä/Ø3GH7%TJ;!qߘ#$^@u;n7s0j3ۡ-$Kov''>^ M{29Xz%>'|Ľ>P6>~z Ѷ;!wcoH-L$O|\#' ]6&|ę\q#ߡK;š%i$|BO;-&?N,2R=LCvG3_71QLz&y'H>'tmqҼ4euFܓ4#$^8&|/o}[OEc  `(n-E?! +ed< }ҖZ<)IN7m1):x>!$7Dw~w/=XyH3Lj_\<0i1DrғiLrOxNs/oƍϤD2? S~&̌lLr1Z[)S'N(>Ѱ]$!exd9 @ɘ^gϞGnᆯb\hf¼~Iw ~Oj9qayГq+L\n<;4_#=҈Ǎrmw駿 oxܔ{9C$!WX'4NDI`K8Vway`%8{Ϟ=qzS3 1׳ # `&m9c=&^'d21ACؽNrW9^z|UW]u'?B3 șXEп b. b5VQI"?='ONyvW19 ,g"`?ع /88k<[]F+y8m/2''ː4⾭46 ''Im:,'),]om}x_:?!x5&}Km@3fIAɤ.''O 9,%DLrW%L2N1ďII݁uL>yy=BP&_p3 _Sޔ%z訟ٟ9餓މ~ /җWyD/r/VzWA&R N9#kcgLLܺB2}Lw>3} …X@k'=I|ak$A_[ bO:{,ˤ#29zb\,w{17Ҝ8!Bh4p`ؑNPj6ȣ˛~{~:י8['3x}'%;^ 8|s]ӑLIu-4lGP&{ Gjzgv2ؾ9RgM1F8}uBGH}Bip,'UtYD?q+A*<0l"?(N XϏ1b/6,%șq[h`>Dǂ I]Hς=5;:ïK*z׻fxy!{/B~7wsLl':!ia7d(c~Kt燐m~HB`!!+] `u WEOB#_=S}M%n_7{яBW'/ܘtLn ՛xY}c~䳸=%, zwP[Qnvhj]eHӑP!K110 / 0xeH^< Q>B=UYV`|ѳ`?[&?7!Y@rkNt}C|'#߹◡Wo~~o,5?OΎKF>R U&1=wOxOlh^&z?8%?lj" XbcQ+L< s`/fmJM ;t'1PqŊu^j]ikLnO*> ~/~YRW^)-c;@BL@!  .a|qHqºW@[|nk=c<@$P~+~,E܎|6Wu&&",yוx|:~6<z;$yBSK0] [d iW3@ #NZy>jWՏDY߿>r_:>cq:~l<_ `j"L@r8UE(6b6#ѼN̖TGKCPwX:7?&~@ YegRi'迲"xUY9zfk&SLm'</ȗCR낃A={-uv&gWO J*xY@ aBw>Ηxn er[4%y}V[y`buv܀QggR=5QHA4 B7f2Vg|q*ޅϾߜxX7Odz/~sph18,@$x7<8ߜW8cY+T' 8vΉI' p_38|u ,yqL8]D]L/|X 簌{|w7ONADbD<ʔy0;ͧߚR|H$sXRq &@& !{`xx|łՃ4 W ϋZs}2uJt$& +/H,?>ZAxn*G,UjKMtA}Uhmr2ub(0x_ztOhǣp#oRI quAb2[Οt?.yr\wHF|}3wB r8L^{Ɨ<*O$fmb${9ߌ}=L&0G{&>L `~3@3L|4d4$ffh0h&I>'0!8`=L|O `Cq${&7cx4Xb;|X!w@oQUn <;=bu;w藃/7~T_)3=%o]% ^]515@; i;gz,;G?=~hv.& -赳Mԭd[PW<=NM͛6e[6oNھ-yҶ۳SNޞqiȶc}9X3}!f 6OY7ޖ޺OcW7܏|vfE~^6uQ;78&]Nr&˰#Gəؽڟ} SSَ[]v?yWs:4ϟ `tpC;;us^VLMջINX|:]G7+ wW \v ku?0g¡3x#ZqJ D]L`a\m7ȮtL>'d\MwDxw+Fpi/y^>6L8g Iү0W+mzZ^?j3벛ox|Ge{N1{ Nz~#yƄ_౉8GrɞgO33vn{>sen<5mGxLpFպQjrdtA6mPǾvl׾dnyg<6cOu[>[~RSBKRrD})=q}4:6qiO=꾠u%Վt3^vTaWfgkONRZ"LYrGêBTf 6>;taMnwd7{37![SYӻ7B[C" % ^!C6UUJRJѦqo'&2KZ?SGdЖ`OI {[hS'95OPm3ѐ֒yO/ʸPnkHc8xӟqT v\Cg3SBRacOj'Ѿpg:"/rJӖhGٕ38;:+뵞1|(;p]>.|֙?u)=ʱ%wJX J.Pŀ|*zd;A Ɉ YHi{->W&"c]iFԖBua_YeyZך9ONi2&jLw4޽3w?=v_oGث4ZWe_'^Yרg2*PVD w1-q71ZZ;%-Ў#@ɧK lqI)F6Դ_gұ>:rS?6_G[ضyjA߮Aϖ:v2;3Kd)<P4Y XvTi`"_D㹞v dmx"pߺvƲWk<6Nj:NB&=KMt'шP,B  R9yU^EIֆFh^8s9_;t5Ċ5HwJ[νbLpkK]h^Sy籮,#+rI]Qh'&dSxjUzSVg<n ;7(>Jo4 WXZIQ#-'B"KoTes^NK}wն>]މ^4σ]i3 IbG(g|M~uLOWYoqy{xĪ~ڱl߾ngnO+I(gX@AªP\UF*$򕗋3qV@y⹌gdi`Hnz#W!~]iLA˰GT$U@VUEyjNvh#㯽QZAƮF<:ϕ~ǟ#|Wb1])Ϧ\uhWF:E |q=`⁝c(:$ >q[g0dOvoȺdx)!41 Aǀ8tJ~] BmH)OaQU"nb>nkx|[ gWR YR{){pAh)hŠ򘈢pY]ٗdzA t1hO؛g"z-BNOR~PK~v̞G?ДAG SL_ra_]ts!N}4݄[3 B"\F>{ryE S\Œ):J= 0Y&f$(_i,pCEYVleV,DR|mbsU]$msg< }76eKّe%#u%CAf~KՈ㒼DEœI ;I\❤'"7ІEzOTړ6|~O; ^A;lئ۫H'{52fmZOɘqpHPZ#s A/M:gl =5e}AaGZ FS x_)+aEο%_ cBacq:BL̾v=IZl S ȟЬ^L?_\z}xo!!O{>&d'Q>@KuA1x37QTv4@>v КڙMu^n676hʦ|f37࡟]iz/0 4=E)Zr&0VEN Pn9d@lt^ZT5(&!J0' @tW MomQl ={Ê0~ ~Gꈓ_,%$j?&w;~.4b Ҩ6`,+Hrfs%%$ӠƗM]i9*d6q#ևdj=ӛg.Jmp'{^VgAŠtbiAh-p_Io \6Gm V: }RB>Udxx9#va]3M#4!dʍhjm=ͧnjY(YjpvC%Ez1h]N!fiB0 1%m4 xʕ4k/IJ'T1a7er^i0݅&0d~C&+1jPDBa岧mgjfvnmOLtXc N*J /ЃG }A赴W)d2>G E!U߹?\&щg󥟢$*gHg^w{͎pP2g<<% rL <TIֶ vLFmnk(M5Dsgºϩ.w%XtԽmGjnFE\|纵/ErOفw~dAJB0pe٥Xn!g#.Gdxa 'XE1Is$iȞ1i,\FENxL3X'7Z ڥ^ٖ5c|(8}6" .}$mhPE =uڔ\%`F"vs^Ṷ%_ձ9枂gR,I'DBL f&u86Rׅ54"tB# Q Gk>,ގ3$$ HTx%[x>9N`1]PhQQx u@0eƵ5vmOHh[`9ªJ+BOk J#ٙS`y߀LSgnA71 X8Vh m ٜ {ޟNyU "ˡHg)TT$"eM-drP̪y `'?>fQ.@4[)9}a/Iz;AưJ{S/dxx0_$IQ7H1Qla^g]0Z1nÓٔEHet)yU/6_AWU. 3fRvF , Ly+%LLD]ڭ&h7 YlC8"}?J9,iOmOe]nA]=^8A3H:ƒ,%@6WMr ]Gv!]ĔE ۦr(8-JIVdo~՚}7z c1t:s'ڼ X,{8h:$چ (r%@G͞TK4a9#]A#l"P{h9'̎}ܡ |mҞٖ͜zvIfN kM㹕.~- @ۂ )2/K!RA e_cR]ۮ4,}E!܌ФTUb鵶t:I4*Sc1[[0 Dڰ ( a$dCEnZI=AtPC܎0W]iA:j48;xo6{Jҝ͎?t{vǦ˶_pY6}ڹ: xXn%I $9( 8sӗՖDy҄ve^R JCD`m +2JY\}`,05ڜMo(GP+X@!.\1U ͫN3(|%$RxW\7}^cѻuq҂Iāq@ʶ|4_˕ڳ?-<(Om;M,arP4فl$)32˺gnupD־WiG/ Ѐ i%(A0"n]Π&}H&H7G[N#4!{eoDvdV+8K;оHhN'w"a%s{qOаE_zMLM)ڀ0x_f'xHgsTۗ0<ԉG:'6DNHMfއIW>+w{'o>6o{|AU TہV)mOTJ4D,6=NsxpzoG )6}ޖC䠧Ý ),ȥ` Z!"D(guwlvcGh8 '}nbǾEI!ϝ @ܞG<ɑaQ *zMlg"ix՛i =ښώaSG\&%D ă̈́;BQUAdK+Y?M&`-_%jOM˵] Ç e1IC83w)<͉ qFѝH&&:(U1co9JCS3N8F;Vu#:&hEfVL8a6]+TT*`Vȝ7[&uNH{7 0݇H!=l ɤ*zf7oO944w,yZYQ|lba)^L \Eb-!JX"d􈋤)چ,=rYG+qk,ieO<_"HqV."ĝ9G QDAscyo="g4kgZC+72Xͱfo^Q5I ω-9WY@"r|}!?[chOS|ª TQ{. 9BcҖ$^*B2ಮdcEH@cG@UbMU2?T lă*Qa0I2;BQ-dCex=Ay7=Bdb# f;Rw0USL?IN.Xe=7Ds42+l`1 RnsʚKnvW6Z >:^dLN} 1lQVHzjLH6vL_WC Gŵ?>_gؾ&zP5Μy1?e1drn(mMݒˮ"n XA|{IiZ@AKZ($ jDU PDhMJ|V;ȷڷ ҸOeDSmO@ 'B;c3D,/ʷe)q :oR:@+M`b4dD>)$:uYM蹘bNAzRS9 r 6~= 4+`S]A2. cVDbltH[!o^PfZAMՎ`JPV٦UMG׃"SjNlT5%P5kێna 28GkY'>!_4rl+cňԔ)D)Mv ?U)ҤV#_!YK >>26{];%ǎO/Nn𪞚h46)t͈ 9$Yq9#r?zOoC) U/(=@HRYn);wY%fQ;d;(IR)U )8 ݶr% s(I.P7ײxuli(>DO~i0q}L)`B}AL_0VQZ*v|J*˯\*) ZruD@,0$>]}p85f6Ǟ)/poN2QhNĢWq_)"/U>B$7m KXMp D50XbJ:5zId2ǭ\=r:}Wf7gS[v >e'^'IƗ5u&H:.r2dE[[ 3lSIUV ,\g޽։ZXpܱ;>[,Cr߅r/EzĀD< 8BfaxUI\xM o{G%IDAT\#ɀC R#HJDシ;nD%~R~^P\eR84<\G> !Ӫ300U(WpHL$c IKF]YoKMپ/}#>D:Cԩ̔[ef [~ރ;Ji2(ՌMFՙ/lm\/x;}2@@xNM FSh qEjY[RֿZpt/cnpZFPiF'@dMؕm4b7Li߻bU,&躣EXNM7 *n +_jݛ`'}!RN|/6?ᩁ8' ,`Pa5߇e+ik/z=)?U@jdz4b{CPA;C>0c;d7| ;po>Cj?p)SS.}BVʛJa{եղտ=)q`G!;=|w &9!ѕ*"iNQBy|EX{xYDƷ5?1Bޓԉ"/o, Tgj.9lcw<~Ǎc:Go=c,?/udz^际+x$1[G$a2y>IhҬJ@ݮ$l^=&~^/tlCxYUBz3 wKztɣc';\7ƽ7bkht/pXuFHW^GJV!P4Q7 ;'fK6W>-#Dzl"MfxQ77A,:zQ*袸 3C^&ݬ.&zroCR, X&DJZ%@2 F]0/*f1rruo'5N~@ ZEd$RB*pnID"-&pYy DZr? ӂ>Br\hIt@/WvNbzLoiw{?wxMVop@[kpU0$Dѡ}\TLZb|+[NIEsb_%).m~AP}&iG~.t棏{:LaC2OVf@ŸϷ\7 (lKR( z1"&$%{1}m9c}arv:3=azdұ,DXz}dT\=nT6@bS[!<@%7;s#vhON/O YSZI d@V9tCIvP0 !YIɏG1}"v}uD L~T@{5~v $tD~}eJbIHj vN2q?(^=W[X:;ۑ elΙZ=jHAuVt:A{7&)ʆ}0g]zg g jH]VC@U;R0#1>^Nz.wC`u&GWsh/=RmY~x/GU\]%fzEQ1[-h/pIm#prT*d $2q߇HZeO<w LpQ r@sziBXaK)@Y%rBN^VO27D27pV$tF]INގ%ƺsxF/o]&)=A# ⤼bI홂V2 BG}"^xr7tOx{-*|:Ob-DUQc5>Im)\|ʱ(^WL\/MjD`=~x`%ӆAق4i;'OtB&:9}>4>MP'Ds_2<'9& @#̍U۰Lk g@`#Dh[ң-J A z(º A1=vj6 /Ճm\+vTSGs^tB}6^-f̞ 'EK(e|Ǹg򋯰 @ 7=PAh6 B0&m #OrjGmuj*0WLSVeC-؎Ř}}~zEDtQDE]7+tWv}Yyh@xÏC> 5DM<C8 ا-lWEYR(K$@2iKAI=%JT;|%.ofg_hQD Ü"'jXsY=yѾyߘXe2s(6q-|> (G%@<9B*4UnG#=倶tJ3;B5(mw7/1Y%Re>]k*| pQ#*hb_|#6)¢Js{p*s90Z;߽ajo@ HpB>M ~8Cz쭓'&:[Cx%;[yEx$\*%X$!Җ8ʱ˟ȇkxuw>p +鏎UX?n.s2 ryeHIЄ$v:">>wWd8g~go]G,{ "|p9Ir%["-T.;>vmc[,hg7b_!NB6=ʣІM4ɘ/Ԇxɏ jSf0`3cPzDpXo$S\xQ"lܾ4e@( dѲo:Xeu$b%ܜ-} j&VH~~I CZmTY)&3$Q4KE}@\nuOGRfPy1, D^Ne5y͖$Gr ~}VKʱ/gcK䃒TY%ϕI~zi2G6ܱw nkMj'8G 3/(Ash j,ML?/<|YkVTW$wLOt `̆ԝLUW~|Ώ뚽cO-R3ED6!?#9 ZSf%nZ$a+wo+{ pŲէ1M\?eeyI{9cH|cVGATjQ1q\pkǚ'  wGx @Q+=]WE$ l'HUi.? HSdq)A8ODq%á*y]ȸ*D?xszxs}%s}z[Z֋[$b`PIY'T㵿`8_ѝp#nm.\ex`jVf%kٜpMo5sYKh=+8bf#b|Vo|y[fi0s'0. +:m$@Sh@: \ˢO!>ƞY%L|>~tSɓԖ`2 zlJ㠙VٯC1 $S2c]pib\Ԡy" rM5*h_XH&lIQQm =!?ԬⷕWh mݸ K ưPVc1\8=0|h I /p֚$MF,/˳ !#AA?^.&9mN F+mUPXITq@6ݭv;$^|s^fZ9|^1 TBF/)$#$XRqKJVUU8xA{:ko1 \'e=$MYM~dzWn/VBa&Zo3_Hwg2 7%8]n@aC\VUpy"L1zMBRT@+%fJTJ4 hx'ri 0Q/݌ +?%fݪ=| jn;[F՚ڮAk]|p^HXZsx)nH 5ͤđo9qY)Ӥn:" m&ꦗNY)P Mә@Ư`,lBe)(ⴒdEe|M a/&؆,TrFn~/h_<<]3 ӻ[L $$O{PF$>K@BVٔ`)OhTXwY&'uw@3 Ϸ26yѭ \[ ]~I!nP LCvpy^lum: \9%Ggfx{)=[- Vqh:6?"y@/T!ʲ_N)U!w}-;ns7+iLa3nλ93\Dw%<Βw|O~_ؤ܇3n$ ]Hqf%hl)[.s$Eۉ@$xv{&i&?FC=8p&)l)R1x.D'W7+0(LISI鉙T +M\Vw% X?ݜ]>fTfN;;SsjY3C$Vz4a6ra.ŕwbXs: 4:8H.bms3d/OL"$ReSK{W}ﴮGH3aYSs;s9{z9Py+gvUb=I^wLsڿT\3AYj{&{N7GPR76?fwG`['s! [,tof!^ϟ!$wc!Qn&Qz{ma]~^7?8r0rA-htPg$Xn&Z7?c `-?e8 d?k]3{WPfXC0G+Rw_9Ba8 +RnC9.dh /: `k Lp/<cL6wH'Q?xǯ y݁iϰyg_'6 `At3M|H'Ko46֏ `T'E||+pc:ݗbEW~cy:n큭OAl5h\}mjϞ=OĦ 2硞;nڴ[s')Ϸh3g|/]7J'>Cp/nƸo)ŀbKGWWh@|E=C{MeG97~Yߜ"|{M#PGm᪛]r|bԧ>}nTxHo&^:K-϶Ҥ} Igm⛨d<+K1<w | 8^eb##оZJn7]M8ꙨmsU7u+[^,:܍NdKR3e:mqSཨD/ :: @(n^WmشiӓѼH*~|Ѧ|#mS6Q7YO-+] 5R3 e@9WcAgWVB/#! ./3ݻwI§O [s8elyTq7YjyQҤ6li6Mre{q`Ȧ٤W|X_駟/{G^G ">|O/GGՊݨKge ʖWlNG}/Wu*M:ٚ(7ּH'J&ju9OV  _=':.-~07ϡvv[ڼa[GDigt,VOYvMȳ(_)oVDsiI/6u:9/1j&-<#_5 -~0~ll?ু9<6\ˊaFYvw+⛨G(Fr-VDs]FϼMzƲj#s>g̑oBypOfs`hp 8RoQT9xI'*[^OnlM:YH&j҇:WTnmV&/YTqv,ীgPƍ;]tpPGwy% Aݘ6inVv1ɟ[Z^vicQRjFk⥳GVAvn斗e#/ e?t.^{-z؋#0P;󦧧(\'pSd}'NdjS1Qk#)4mn7f7lk#omfe3>^V^gozӛcl:V6HMW1PWqs6&*bHU;ؖ?#u-&n-V/J?-m 4,SgeQBg>x  yqC;{}ĆS$ΰhhJsn䖗)>cV]6x+|⸁v+["=e>kSml~Vol_qNAC/x`&$,oD}= `'>⩗-yr|rJ_d6+'/Kک >%se,_n^A70O+lz[d>F׷9rGGG=6hj.ڴ[[nWy8:Q2'&J cpEr:ٲH׉O1sȩ>l}f]n݇^l.:'4m?lrB;?`oaױ "@ mDc+cs8Xڷ '44}7>?7Um(em+NTO|NsN~,'ލkSlon}ox}dX?< 8>K?.hqE/NC~ǎ9,ܯ[-"ڼ-*Y9sYij?֗<|->8 7XҼRM6,mW4Llsȟ}oxZp1o@e]_FM_MmS-uVI'&N4o'/ڱ+XNr0Eqz+t.w7oV07\=6޳|*> צo̍,>msMEiRGmջsXwdҜo+ۢΔc}ո;0 sXhǰ~?-"йɊF\&^:Q_ЦSm[^t>ґtMz~;/[. C_C$'{ߎz&u*66dnݪ/4){?tUYk#^얊>ґtM|PB͛7 ȸgV<11JoD=:nvO:W&n}_F|d2ycWbksהGc-+!?> .:+X;%mMz.o̹~4Gp%♹1F܉WNv7.SA X8 މ&9{=lu|h㵴}܍`7!! uؒtKI;C=?e5PuW>GdpD`%o͟+?x-MAOJ<\fSZP8ƕV(Lp1{;9"b,{5jؙh/*bR]d0gniu֦QnTJsآ[jmڪx Y:^98w/@>}D9{m9n؜~s Wks7f Uԓ_b7TA7Q#bs|VDdbVW˱xQE;ewϼ  s8,v܇X|şW#7m̤M~t^T}Yj Tm5Q#ϢRqbeMwmsܖj]rT0cY8`)_x.R}ڬE+RG&D6&ē|,RB:ɖgB)-ͫ.D֩WwSse~"OO'tݲ#P_aG?pa0 niuֿ>oC1"G6|#̶+F'eoc/&:&K9|{ڼ܈.,>9o7}`팵k|aЯ]μA""wLOXO~nn$,^4k#]ꍈT:mB9/ҜʣxA0/K.;,'~`9>/?wv7&;cmM>Y?ꖪ Ӿ^y~,)*~wffe򒛨tS(C*YP}/_䉧,S6d ck׾ſ'`獀7t8_ X_k7mUVVfXyK=66m4MVgym.9>{|V׉W~e˩gB)-Ϋ.0mکe\XG|$~;p'XWG`y {[Ї>j߾}? ^Q kQKu76m\hgMzm֤S|7jm\MzHYl\)_g-bͼjm9 cvs"-BKo^G`hw}?h$Ÿiuz~vīŢشY[Y:Rk?q܍Z[Fiv(!;ے,,d#*ʟ瓾"*=xQ;=v2Vwߌ,'~`9? [ڠs&/=i'r6+Ţv'WmhM"3tMt=)澒xKedgoXnmce|l>y?>(Or(.S?X`9P6Wb >S&$koIroHCהxHsIRSbF"sGl gN6/^4!YvKWSG` FX (~5}MRk6M-_rXx6|/[7m~lғW隨(!ϒ?XQœZMl^82bRga|p'_t8wu捀_:>wС_+P{aFR򒵑w)OgsQ&čVe'ڋOXۥ˩s^Ŧ6SG`;#q?Rh^vH'*|,j֦l)yUYw)h^n6U?_* bHe&_=8'zk^>Zٌk>> e}wXlD=_@w6|AY7̭I'l6l(kӵr)7HKje[&%qxxm6ɖA[?T9Des+,QDOA4>>k@8]|`1Fc\Qw 7wɴ36zQis`s5*~6xZ]O)ڜC]qYMrtOY$>KCjꫯ}cˁ>}!}]JmMW6_z8wc']nZs/Ƨ\ln|qdz幣b=/uA瓨3?E^li"dR't/t^h|/}|Ynz~@7#n踭_Esmݨ6&;pnJV&MJ[7Y>/)KKG":.{P}E=NMe#k Qwnf7@TG=_]vaO, O?R|W:uec?ēr1| cOTQ^,<)7d#&5E#{q 3^+':+U։2La!'{/Ð|[򖽰W;SdsV ѱcrr<`+Lu&Ul1qb[}gi7y[_Ǎ3'k6ӯsv9,X|L?{-طwZjnl^. )\lEY܇$['iw~c\hݼzjnرe{<>+چ>=}ݟsPyAx٪c)eMz[|l:هK8%+e,|7F9^Na:tG`AٳH+ag2wx_Hŵvɿ1Pn(NUl_;~J܀%5jsG߯Q@]4'8NV;+SGCzEd'bґZ=y+˯^(G[wȋZN6γcJkgX( [Eںǟ`g EKtZ^qs鲅QD@k#'ջ3k>V׍WH IϠ7 'O\Myag<d׼~޿^eG Rs?.L0zØuC{g`| 7`-~̷bk.Z%we >9.vo|Bxt3REWuJ!A|`!󊱜,+^ztMثQ_{X [MҲǞVE  FHmim;lBj.z7&^x?)sJgy(f(Ƴyo?r 7÷CQ2ڳ<<ުVR-ƑgNRǖ#sN].?L>̛;YGoo<A0|K bGv1傪Eto.ϷhctZxebnuj347 \7 ]d1!ֻӰ['D8s.䔺~+hiYjy37/mީ#Hwj?o,j<^7nq?xRh\;?#_v?PGb|xozӛxB.-O\t>1VUy\E0VR˳;rdC~m%יϋ#0 D#G 6jؙ}7%IG1ixrջnDžZƿM?,*Bdr(ѤM9N>ԱF?v!/pnan/@THJ`;5@ ={tV)\$7&6֔C9n{Em;?+iKk+揵[9,di.9l|8睙k~8}!P^C 0qA0S:k6ߢ mvmvZ#ě]wKO?͟V1EOӿBM1ޖc#^^?ivL{@jۚv.]uYytߟ\tzB &w"X )YXTrͯa+U zsAK';}sk|֝W⯴|G>23~v/bQdnAFm y++Vzkcl\coKkuz1?*/-0],EG+~+P_M7tS*ێp?~sx ںō+){VN/e7>k_|͜^;=N9'`\HEQ}wBN\o}F?M&yfeC~ߪU^+}{G~׾9J@?ǂ$?NcIxK.IfeCzRS;11#;̉_ ;`cB2,8|B;(+[^qz-\bݍ7RgV| <Dbq.7>uq|hv|Oip }{]shD/aq%z)tKu<.P~]l.g_sPoY ,60x'~sDΗjs@PӇ+ߞ芀_tgxЇVa@`PX)VZ\z֫XSoǠ5q8#|b{3_Y<|j_|Xa?_}F C_GW?cnyI;e})ϧz4=EOPЧ]hC/ qx:eR-\狵;>M?Ƙ߅vsB|}+wmni^=VG߲.  ? _ coo],G_+YU bDS#Eqc|VsDnނc;}d+IG|bO6hD/a^%?_paQByrkbۅ[rXJ_S>v?jJcwAǐsu9@kՂ+9N^_צ56gO@x,1wy꾝fyYdWP{ngNT>j|}:i#;$ A J 3l\Pv.~ ]@/&o}m|v|9;㜯czPY9dsqS9akg\s5/gKgBB`Ν8iԩ26Qפ=E[,c$ˇ ֭SN~~ái.P'憝+&&/r:/rҦnxkkZMD~կ~!svvBeV\^xOmJ!^T9$w/:vm/@ 1|vݶx~x1+2~K.kR8L./bdu#\fz*:?DΝfE/^ c[/~ $rA 0"’/2VNiO"Wud]8Xӗ/?kæ`<" ]\">wS16\]TkY@9ӹ8`x|瓍c\mtzSx듵w!lt.9~0 BA!~h~ǘdꝙn6Q5rg~ '@^c9'87IknZOA{GixGYG(n+,hv,v[*{?T(cœSv؛2C=Kv%ZS/o}xq~B e*򕏥Sh7lhof: ́QvCs]pŞ;g *3=I~N9W_&-0ZtOMN:-ۅUPw 2,'0{|斍aʢ⃢SO:My_AF/7n܄ɂA+oʡEZ7oxqG-79uMTL?;򳾶^x{.<U;];OGdΞ}ni diXLo]dKi]s>aW̍`<'5<}(ˏ|e1A}~%~O;=h߾}<磦w\,T,/i$wM QpJ/:]~^SuX0W>9tv<}ծܽRCml'=}iB t2]vb[N KoՂʘVz')Kn'&&῀4 piu mvT5C &zܷ!~0]C}MHG^MytI:E1~~}:'@Bsscx5dQX^-Rߤu7vg~0LG}bHwh2mUzJr\_Us7$;uj}b˦6H(cEvf:ƒ!c;|V0N]dk)^-}ȫHo|Ў~ݶf͚r9ur1wiglcw;A巶G^ ET ?SB"g-2^~]PB*4QS:G@ppHD;9aY魮Snz{WzY8Xd^:ɲ?yD/sAylAw\ eK&\u~<߅y=E/r]s >ڑht^zɤ,c2_-8Cƒ!}A"h)H !!o<~:an||4PheT~0lG< ˒l]8-gO?}ƻ"9ӣ=>0s}X6W|2 2˒ ӊXi_Ol3sWTK8~UCiQ#snʔ(9HC~'3m:2x3Fn@׹invskγURxDlf׀&c])ƻ?\T)*;)}j o{H'Y:P9νninv\!Os4/Oni hu`"08XG(J^c _ !:#8@;&qGpCtGp vL\8# <~08##호pGx`pGhG/1q#8#0b#8#Ў_cGpG` ?>@GpGh5#8#}#8@;~ЎkGpG/Gpv8#8_ !:#8@;&qGpCtGp vL\8# <~08##호pGx`pGhG/1q#8#0b#8#Ў_cGpG` ?>@GpGh5#8#}#8@;~ЎkGpG/Gpv8#8_ !:#8@;&YfZdUcC2wћs| 65IG` 0B ͻ(fgYg陙b&bıCQ->Zp`Ё_TN@BWo>mh1Miz#P\>px_S9W%ܪi@IDAT*]rsvúŶo)Nݱ8mԓ7n(c>/vpvqxqX ,GR,!l쇊/v={->?lΟ$f Wg) ȱ}`+^v];7Ncg}53򝩱ٻNo^q!Ck̜>6:wvdDqL1qLuޱ_&lg(0<6嬇T ۷m*8SVmsmˆbŚcB^"Enx} ~{[~p6aߏwK'쿼PKj~)Kb(ȲXwR_LζfvN~gC]W}~Y[o+YэNo+f[W̎^YN_OΛm͞}갥# |X S:w*%Ihεo^tiF͛;p`.NÝOQyv)X+m ]9ۍq+}o߳=žPg\b,n+Z,X5kX`}pýS__L}fldl׾;o>_B\v՛fNo;=2s^nC~WSuyۿ+|6]]lE:Sm,V~w1CCxл  ?{*{+i AMe-630+D16d1M>fkfގGNqEoh[&Wcg@E [tYxuC߼l+.:Q3pҖx.fuNþ %J> ]G^T£8#K? \ ̾`6^;E[/|vd" Vyz;bSwRi󆵼 ;6.w!Cae2d[zl`{Q ا0|o8-kfƯOo1]oբɿv=pnIO 7 TK^_rO ?33;ul>$mm9[gϘm<0-~5;$h h~ pM<6uWq~Bw_ԳqyKqa<?fq]Wۅ{ha( !{333zf3}CĐ :ZC692?'͇xaQT?ke2?SLbj~{۷^3G.-f+|ةAy~$RmՅUۏUү?8v'] (M׀uhZ?2[<ӆf]zIQOE9E9Sx"~5sӁoZ 56=z|lZ9߿Ö}0!e9'61[3ՄW/Y\:\@1? aG[[}>u~ڙA}1hԆwNBH鉩OqF6i_Guw+15S\[\@e6^i'&b5UM@\&+iTbTo1~w: Zax؆/mM@+zKʝ6fNlb)M\E9VBnS35k>ߊ983ZgL4֦Qs*}}iv' {]LLl&SPծ4Uؑu1V_ ,~'N6nm9"QNTmmLf#?iĝc1ï֦ ⬧۰v1_FDOfub -|jPd~G!<x_r#c}],lOMZX#Aպ)r1OĔywZ#ۇˉ= j+҉=}kϼhzx%ND~áTf#`+2YH)1ZT&{!MI:|ƣ3k_/X~6K1o(mۅ@rL\Wf3~1C㱙 ps";u߆^li3b+6ҴǒIp3~s162Ow]iMUH14x@Kv;䎉Pr fϿ7_U"EmQb(>eE|ki ʝTe &40tά'ǭ~;b.lV0vFw2ή%VnfB}bG)%T5!ҕ⪍L^F?^ZT~lMM;\8~/{ĔWkRj"X#*1/um(}E1;x'JNAm>۰9"wiLYc-T2rR%'e2mM JFcQ6 l MC}So~`dpq'_~Ƒ n'D1ydBRUL@p3r$Ubʌ\ A$З_/:mݶ3vNw b Q }Thxnu͊w..iM , /D>"XB1FCn3))ٶ |(nXkzS. 8qm7㈼>5& (! #f4tAc ))Gm[BpE}m9-~dOXOrEX[Gh NWj痨_>.l z#QQv |JsK"| _ˬ1>(Jmp@_3I 5E1U WNfY>w\W~#/8ڱպ.DFHѲ!C !4G̊!5MTfKJLb;DĪ}Qg)O]}}6ệ.V xUk~ʯ{g..c B+mږw͵G6P~au#+c0Zm_G[@ؒOo |p'V5g[ǯ={&ɻ#[b7[0QⓎǘKxh2f7pyRJCs()t [cWJcp3WrӾRoc6*ls93c *7 ]̙*F>ˤ1_+P Z}Xkt|y{5+t~̖:v5?:gXaѭ>k3WdNLypSRn IBQ\eTJL+EWnqIkۨǕ_8ih=sѵm;osvx̶j}:](¡R"VJf5*EUQS<:ƣ"A-k_fy. V^zȖ 2] +~B~ 풙@w]aQ aBZm?MM 㖢x*G A-GlKq t]j$堳xcfx>Xkl_Y)|Hr-c*3Nj01]ʼ!Jh| O1e14/R_E}2>)g>E1ykOyԗ'~sMXcϸxfx?T0CZET(`"[RibL1qEb.նWIMG m6 |k6'rcrLUGV:~j| c>&db%JIg|P2[F䒂 >%^iIe:yّn}'+q>{cY@<]gCZ@521ݙJl҆$Iؒ/Q_ u?$= e^[u\2Ҧ6Wo`{̺/8j|5ۧGuhtK9ĬAw >ƒ(D]4 j|KF|ғXjǹUI,*µBGO>?JF̕4%=u\fdi(ԑD^zJSB?[ZapGCo </xUΎ̼k7!}KB( ҆$&&.JK=j /zJd)c_m A6ʹf86'Ė6Lk fWMm=Q\u+W-(mߪ81Ƒ0&yPJkGc+z|O bUT^B | XZ^ >?n88s8o_[r>Ϳ\M#ZVV@QiԗWE07Vr/}CJd, .(}Ck*wr{hS T>HISՇ'.y?wiIt嬧]̱_m4o]80H$[ XeH9{sbE[\9jU|0@O9,3v?Nۿ:8yXfמsّD#7 tרO~טO0UIT1}bR%-j+)krZP*]R/iYe×+h+=IW|x`qZY -k-INt5Z+E!yLZ;0֝qmQj_i}}O|OhHI.*8ko0SJJsr-Q2WXJ!$).Sx& (<~Hc<"~ u%w~oJS;,vU., 2Gf y- K/%bAOVQQb?JTZ J|Y>$}hgwןqgڹU>YCékK}챿Kb_I+}a@s!=U1ڢ ]hWU6p veHDŽbt)S K;_-ǭ?c!q_,1/K#W1X/4a#ҫ):h2Le.I `LDԷ2ڡ4C2 D_(QN6gYpO陙D@\'$g)/Cfn{J#"+>h"\311R)%< 'hU&@i΅2[LY Wo9s/ ZKqry/x.jm)XfWNjHNA<@Zhbr&Pq94~l4!t|6jrLu]4?6r6IS,j.-|z'.>}R[5gq ji]=w[4yn67l5 jPC1lM/E2Ϩ'1.1ɜWKJ`uFc˜RZƗ3Cا|'=|a`9K6y VAC3iAKKdD<\׸0Y)"gfQMKt0Gy 'Ub6#ȔBPӔ`.SV`7/U$`Qc*PU!(5G7}yb2dl{sG )esYoZZ'k_-dJy=Er9QF U566PDJ%K-Q?|^]58 ]-M?{-Ӎ3ip~#rn\̼+?7-p핛k/1bkk8sYO}_yk-WiW󪽲JJe{OYe!S5W>U.4]KslG9j~JE# h-xb`􏪒aH0c;^\e}-|MQ[6)Q =c@~Ź<kGz/bly'4HEL{bJkTd%F҂d9i~5&BZHB0I]XdC bL`%JRp*l78aɐtcɗNM#3?њ-^71HUWs)T *#'&yw$n sbJM$T,Ħ2Ur,OpOİÖm{\ 5&5YԴ+>NӰ`q+䒋C!m!&`2Ab$ql(>++I=zm"O_0)OC*ZfO/TUPIqvmOy l}mW_YFN$}ƞ FLC*^4t?o/A17ëP~&hClh6C/>eC&GVv f8ȏ[=!%<"mOI>C\bdpdړSQVrx *imU_&%SƦx1K=Ҝ"ƀ >=*䢞֪͑{æ.;kx5g&W՚1Qk+)#bhBlJsy9{Oki˒Z |e")T5pFMiSZQ4D0LWZ_:{AqEB~%O>ip}֢`aL*bߦ+B"k[1oԇ&P)m )CpChcB(_sv") l&&w,6W[(N 9GWJMȔZ..|Ӷ(`q@oMOS߿8N,qAҢJBZ9ʸȚ;8kR`h}4ҏPBRnr% TB_U6kNV _Lc+mnԑf4b [aQ)y2mGѭ $$Qom7Ůwgof4Tt0u rŬcPm5ךoݯ2IZGґ5|rh%m$ .BQV1Soy96`h V#U߫B?.i#Å\rf Zmt:NL]nS\MŰlJb@g9AAuBmP&+ БBؒ:%?Eg?ϟs[ݘr@vZ6cJD+6 mT!|#`=1):1$A: huؐ OT1ϸs@?8Gylq o kW= W|JuNEs҂d"|ў=:i!AIcRծo#5ćFBxfbb3-]= )qbRqQT<b^q4|Y=}D2&Li/9tAG-[6#.x26k&ֆ) a\Tv :5E|Ap?GBNbοްz#kK30e&gNM>&%AaVӦݖRDžc@"o7J@c,eӊ K~UU^bncpj(ӫ*PV>R% \ThȔiST[ƞؒI"w$$&ɏrrL I΀ORWJQW%dR5-Gl1$b{O.o{v45=5#8}tu.*&(iϛT/>E1&JLeŠ2Z,3F[#)5K 1aO*Ŕ4ب ^ؑ԰U\I})R[|Tn8q'e1riDljl1'1%[;r]5E&%et!_AC} >qŊfqA6t5wjȐZwW2'PF֖`*9v8uES)I'Z3BzVÜL%11ɟel](wٙk)e+֯ GE-P3_}jjӹ[[/%jG.v\jm*ll,xR}KKbLBLeL&ڂXl̟Tmݒ3xC[.~g~E5%2XxC 4b5 5r_bLHnO!Uб$&̝}}㊶@b|\QMǔɥMl2&y,6SMjL_F b 'ER"8yL>\A_% U񯔦hL?6r Tl2ID_ 4*}nXKt M8o0l"aTS]}y*w6-acue&gjƱ'c۔շ䚘fE8V%Wuw-WwnI -!@\&Pl\N5ÎQT9$ r\"]p!C @Э[M~wsZ{scs׺971>{'ȗZ=;Ih(`E)` >b m2^^n7vlY$\9O'9ܩLiz`eS@M'T?!_4,|3_a'&yNC]! zMOh}:JrPTsELI[YS\k$5R}8v$D; $%`$/fѰCl܋lN0 ԕf`)i!n#U!M5o0fFOgyf߽'`9= p[vp|C/(†;Fǁ$_^ݻ<} Woɵm{t?vAw㘞v0,32g:xGAc=EpP(hExi7x5"+VO$gʫ D̟F># k*&tTj~=m23qvpD2R3\9U84C&g> Ćߣ% |96ԣ;">qy}hoqo~N$5=ң.i;H# #w.6Xy!c}dh2F;PG{1,VeX8j͇i& u3vƕO)r .B[*P'2CcaTk?m%\=M^Me1d jfb2$54Fl#2ninyXq mYĢdªG4+t8[v3_9ɩOaXsOQ.?FLA:t5@,Dr\e~\tԝf[hƕ&_rF76sӕ|Wb1ԃkjHB\7(H12j?X5B! &u.=|Mg3]?L/ȚAm.fHC3dXŊ Kp*0UX6 t.]w>39IL,?|`q=}'9~Át_2 9?-1 A FJI0 )1xd~Z x- KkF+ws915v-~Y[t`)L8Q>12'&U}˓5t ~?\7ϳHĘ+Bsy|æXׂ5;1q:^?SF5>Z·\$Z)pJ8ql eIapOr#4k\䑇ߓ:Oۗ,KӾ8_@IŐ& bܐ}ι?~fKnf'4U D3<*n6:`(R8*k @+ #eiVK]hDvm X gsOLΩ5k&?, $WpC3LUT6•8H01+]- QdNcU2g;Wv4Lؐ\qB4V9HqJ,j805VqEtԵ|R`Fz qkiCW] $/Zͮ &ԊØ@m X0A^T\*]U)j1M.)b!Z#%!GwڣYGo%UkX~ݛ޿q?Aw?(eO<^W`ýF| 6l0襮凌A#f.1U):gAOl|Ͻ3:vO۪.FVhkIC>JyFbp`0E}OCCVG:$0Gs`(2'y,=܎z8lYF@n #,r^&p2#}d '8D5sMER%"1Nnz5pxg2;<д^©>] ,>?~3@)gDAu #,cLOjX D7_\R ]+ZGV|'EPi ƍf@r5_sj8nGgf/gJ'3``]o]zr1 lF4 EuF1[yE,V"4b#GBҧ@ 1<&&1̐Qc~"va{dCh=ѣ]YdGwe= D,px,6,4C)^XN0H0#6L9ͳt|kr9J5 (M˫%awqoݞw?] ptyf 0/feWŊtj.|zF#Lt}Lq8ģa2MrAI(^D(b?GЕ% ld%c4Wf^ oZ\=,x9\Ϸ鴱47溠n$`)oA-1%auqeAHxυm Z?fxgA>Z 3bM1WMi~l#Fq,F1| o=I\@H3Ogt9g|Eª'X7xDqT6BKƜELV֮zsA)/DP֕cϣl->s).zO ZF mɒ9"Z.90fڑKt/ޏAYEyAؕ;>\Xts8Oz90LC8gx}?T\Ӏ A\k.FxHqrM+tUP8e\iqD-V>rp!c bkaEս1Tz~[cU{_x"V_ʐ-u!56/КgPEA] 2}\I_K)=mJ_& @21%m.z9>7d7H3@IDAT&Ɠ%TdE;)e 49>_)l3~>\.[^B w镀Ϲ@_ux`rb?vb8 -)_ bA,9 lj9fˆ;dr,bΪa:C9IRi'S6h2?]3MWc"IPZO(Mg^i=q7C4&?#,J# F;XsvƧ{.z{TԭkBjDŬ9 ) 60Quu!L#Sk Q6]Ix/?ȏ#e{ L;C06e CyD"2}M,#1'D60AqA zd##r E'_^RZOs?}~cu\쿧-];Noc; !W4^>DHCpҐ苍na6Vd>9?h`'D7 r*b`f<&>Ql |f7pW|d+qu=@BɸxeW*{-c8jX$ekjlQ@O<% n3>c;]%o ffwe1;|բ +9 s2T'jt YVdR`;/DRJ Dpڂ, lFq.߀G>x kDPtǣe !'4mJg֩ygq).<c O~; _" EzyD0I2Gfjo<>N>1ެ $hyd}>bVZEJwl[.ߺ(fl\՛XKo n @R p@I]0XT$Txqlax1"\pGMg8čNmk˫u^:=`}mP\nj^pJLtۀ9EȴcrIyTjSoW!1RG喌bE.t{c7oLow1rw w{w_T Z*ׂ |-F„ccXg;4 LQ9ES_IS:D10>FHTO[ӧ‚./^f~Xu됨"PT#4x@"Rc]r9ds 0Hp X6O:9dUZb)Ei n(5vdyftx »=8Bc_gŅީ.H0:FAXǐާ0)YDך7T} n=Vl>-VK>>\,hh@Xnǿ7&Cl'S!e~Ie~LFhU\@2@^CtՒ.N-V 2wNDJX82xq0IHɷV%r2~fK;15_>& kPP4:8%lF֡w DhU&|"+}$OzFcL/:(\c!H>rX}⚶^pɟ_~ ֱʏZ~&"%ڠHo(6u}d1N%}eLĤ0OBН"#b&b2-2?RQrq 0$\FȦlzXcq_4آHZ;F" 7ͨ4f-X2I; /;vtoAȏP5HbQ ]1c^ey9rX{a"mXd%p 20A[ҕf^`.Z| 1hopʓ $rKLWehEs;ŝnyp[.0x^7wcci||Bnd_V#|MzTlɜئ#yDc#r@"s-ɔܧ%|Ӹd&oPyqТ…kf-'n/@}ŹIjC41ėdA |hа{c|s@٦ ,k͗w[Û?>:VMG\@~zb_]o`%JRytV8&F<\A8@O#<<uo~^^v > z&/gvRwng=ol8iXM@ 䫈LA1r3͐"S٭gH 넘.NvqIǣt5bMk"U"yZ>0{:RX%S^{czɻ٦ ,ͧwD|&RsAt,bՑA?HM| 2`Xu !@#LtL'Lqd~ƸE'=$ g_&׫nutҿݽ׿$Q>}t\~:p_g旯vSb`#tNR|@?6W}p 瀏s̴3<֫xchgotdJϮ5s:\,pH$aѶ$b5+.4e͛͞>K3uvLXU>4ڝq}a!; Tv+4”R`1RPL7NEйȵ !7 Tq崭 >UJKW)OPMhqFw?Bwͯ#}:sF{7sw":l*+'޳|-ʰS.5~ǥM;&<ݑ8n)m [OXb/kvq?+p/{ ]ywKOi~r@s 7|a_Gd|˕A`<"1M S`q4y%X`F=P8mCdR.u~c|7yMOޛgpoI>8` 1NJ`Gr!mvw'tm[\`2" c -'|<7H+R.G^}OEׄqֻK,ĵWG?.'Z#Nut k[ yɛIȇB f{4d|[,z 'rhR},]7 и*Rĉ}ǹd#43&]7-t`y'nL@yd@dy^hÓ1@03+pHLʥ:ŠJ2 !IK6$hdGL>T7 dwl==tӅiXj(ȏi%$'h %a`&iT1u U#4И܂{q=\֛ݍ?=VBw^i9dBHlqg6!1{y Nbu }FçG{zA Yx5Џ ']YޓQU;2Dd❽DWVr*x* jW{4`$F*:y#8 ӣӻmݡ_Kzʝ{ߖz!7*v!&VO|dqu'#$#r1"hn~WCVsQ`*=<5@b@<ka2Aք%sNҚS7/:}yJc]|O[/|~ZȂ6`?0FIc"(#b3?EG0rŅ!w^ґgl "J}MC!iC ԥX]k{ {f?!Apd.pZWF9VLOpā`kccLIJ~H1 j= ɭ^#Tva"~ @8Nz;|~!w/~?O-t4'C(q lx|I1`=6b`J)mhMB l[Vpk^!i ʉNHӈpH8Y]yҴ*>}ߡNfi r܅Scƫ;utv#e[Uc7ݰ6nvmjfhZ6%aobZs݅A#Lc\$&#Oٗ]jHL X*RX[`ܘmւtc t~ z`IW&Oj,j p9!޹op\hѪ={('q,8h8DPkZF-!Ls<y<&rw+sjUOz?@sO_s%k w" 0f?c>%hq!(`\eשmp9$!xǸlfJ#::?ȩ8B Ϡr H֖nto^ߡ7ӜjNXWc6ܝ2qӍj-UiG:I bm2 ԸBf7~}04t "I|SpnC~C>EsUks롡ҵ4J|N%82Vxb`.c >C8-!,Q6_cn@uMX+5='$I-n !F^5p% R$练kXbkpng]6\05&i%8͖C)))9Ą_rsW2r=3B}$)m5L?-3 \/:>O[Zcp.th[xg{u^՚LĎv/EfD@8 {*9ʍh[B‰G3|SM<~Oߥu{$s. X&*.0azp[1 4Lx 9%ȱEKe)DBb?$40e2ȼz^U]yN[\,_%w˟k[XQV[c!qk-gG&6Sa`D yܛK8:QIK6}LN} ;==k2 ,"ێ-4 E 85^iq[j~Vew(3*e p,oUލ->hwxtۍ07`:wd(|8|"cP `}^@n)ڌӏ %r r Y6:Id!d.Š/o̻+>s]!+L'5[KZE8\">8'GFRٚ|3uPX뺃^oćj;Fwvu7kpރdEU_u: \eŶ5u,u[-̒c(ڍpHp #S-<;Pp7ޭrX[fo=BxSpDlяA*_ 9GF9nHw" `2W ,:d}`wpx9ߣ ^%Zt7bܢ!6r XUףzr< kF}d$tCٟݟonݨ6]t8{)@[jҝmE05ɾ),U8+LiQ=ACT瓯ps7HX ^2 |L !e_spr/ vW⇎պ5Ųa!yd1i-a&OƗ<OPNαFIɦ!/pXdJzqK"V @>gt{m}S1/v4XM2.#XŪ͏p϶Wmw÷O|,Cvt ]Z߰}M@NX5J BRV/.2ԂH$ӄHa)#̋ Wn4<iŗ`wI5C279kau ([0X1}+0]T2?XKF_5QMʱV"D'>GN MɘvY4D=pp[ܝ^5Xҧ |h²UN1yn`%hQة^Egyr/R+ݘmQ}UH/JFt3~\:M#Ws6]T7//v`#Lr4k^+J"%ډ^8cpDka-dD}E=>Fˌk_"ŖwTH^bzk %Q B<"-1'GSpKjZXC?))5HvٳOsWmn@c_ξeGhíӭfb@ PK#xlOk/O6{M; LL8r-"!"9]^>cUBBĖa dHNV&s+CHeEB5!U$FţR 5嚠 bEm7Blq[' D4j=~7j׬*jVՊCbG -l$6FGZoKZ#6F:S gϴ-/>]4nܰ|{g1 cQ-"Pm(=2ZX->j[0q#fD3Xc~V@.'>!O!lM{exZHj[Ĵx ECVX6eI'9턄f23yc6oc{;.͍]|["h;ޚFsǂa#PWpZZ65Pb>X=%;@gg{Qi {|V4XX[5cГ+>-oS!b1,v#P]+q*ّgrOeAE t'(D/RnÖhctԙdL⬰EhA{|,?;Unh\~Bћwl,ƘX q `6B1iD- z\[sj4hĚ#߽ <_ ^![Y+_UkQky-.a6cnSuRr0c1H ]`[T~ <]+blyUzg7}먱"qd(_bqOj 3͋`xiIeM#_vF4]ct\+[m`kITOwbnQ`N*Ka~J& n8cEֈ5)MQ!~ueד_u*Ltқos~`{x -xFlX6Eyl[Gꗳ]*G Pj\~*1\7߿] C;]JkqM׬Z7_G1kc93{HNqi <V0O*nًx&agslc G_~xm>^L 1kejܓ#֢<gvr72]`vRYx*E>G NUn$5S 3HIc*$Ŧ!;Out ߝϦ`d-Jӡ_8;o^^1 ["\tRaFs虥n;荀n@Yˈ WYu8`u f;rccI`$4r(6 P+V@'&ASg7xh= 06kWl91N۫RV `n+¸D 7,ִtU?'Ol]s uY" 8[ƞd UrxӪs]6^t0vSHق? p%{> O6/6&hi#$968F#RPC N꽺N s3bs#aD(pC_G{WC7+btNִZϡuaz ǹs0F="4MRb[144r#i5Nk{%.V,` B9.Tk2 QcU wVs -&48#`gNL<#yg|".M$,aQ֯Ŝ`$1c9GIXN#]-A۴EG3RO팯(@官seh@G/BUrq#3BNgB8 "|jNVkK3d [*&q}='s@|izbU}} RʝXh 8 Py0A!{бGFCn>́0cJ(N#(5@P O| d?o.=6׼&y,Jۢ<5ܕLx8a-8E>lKj6A3 +Q&l WaSXQ5)MpEGc9UL܂ %/3FCt7U13@snzAsش&MDG VnJY-U 0Vl$XcM+ϰ42`g}GwފGPa1NƤG#s=u/ka uvD[}鼸%.b CdQ*&bX@lι{yX{N0]y{^7-5G_loi4nV[ nN&*c& Vϙe@npt獵H'qټ1jvA&ܜyB 5_ o_zpKaXC/{ӿ:[?l_x'~0~Õg}7Ȝ#FlpKf i5jRݜ)v=]lطWz㔂o-s} 8"W S㗞@)sάKO9z۳5q;ؘJCn_xX9]l/t˔f5jӲ- <*VR7r(i=O xU͸Sݣn^ ͑EXy:{_V{pݮ/w>oJ;g68"91H<@Z:c͍3 z.~x^}ϣ܎>53Ϣy#'}ys&?7L'o.])ܝbO=ÿfV`GUG:6λ+R#K/_;\y}aMn| W"у3u9]6ry;!uGR6<ˬe,2T&/wO}fCkqlڴfci*gQsнqu00L/u;ӾRS]#xIc9;x0=g7יvp4ܿoMow?M=W>SCt軺ǿo3TlezwuŸwҽc{mC}'gާwlu8oݦSJ{8gUl.~_d''+}W?c8?rQ?ch[t7ŭ~Oo$qFYΠ%7~ ;=,1<]~mtdSϏH{٢]PFb#ZTE؆1Y=G_52ћc~%_˾F[Lv/ӻiLoU+6XYsJ"1-o< WĂ#_@/ ?ՖQh&ڶü1~ei)1`M]T-^f_\ʸR |Eu+Nog*.^LsضY5~#t:xkG} __Kkt-6IdUOy76SnQngB[ Iwn?kt#M/%)6l<|+#;Ѡǿovހˏ;%ksW'ɏ z V43$3 E+9X 6&><]%i;.a!so-L ǰKb'lx7?N=p~OQmA>MCB/k l⯽}gyʓ.ioO͖#\ NJŎiOJ&Ś&h%VJVF; 60( xr-ɍCnB, Cc͏ŎyZ\nЫeC/7]߯R)|7=l$ԛ&\Nƒr;cަ::##N#Ћm{Tl2p͵ܘ֚@AmbpGAT{qIO ~DN؃41jRRc؆e@W#"+@JA.:sbAF,Bdm6WYÒzjS^}>%5H%V$a9- =X`j I9 qjXcmNDɬtpz }K? 7Y:,~ ko_ߕ'jjrn$KC>?pM{u)+:ǰXIyX-Mp֦V} >pOЄ LDZYcqeA??zؽl,v-Ԧڈ_"4TFeRv7ޠ8޷4r܋oGņT"r`H)nƘcޘ7hNυrlŎ4f_~>ŏ9L.NF}EN@^%G!}Z P|XO~E`x0 [X$Ctz4.6=1)L#001'"@a-?=/CFy/}g*gm:9 `$861L|Luۍ(`vIZ1 <Bf %싄m[.=Ԕ>s?)O';gt _ VđCv"eX0=>C%!*1#Ān f{K(-51 SlNW1L63 Co~qpu<$_(p ]O'EX+#Enʼn!XPqF;9/bdǼ*̋t ^뉷[4^Xޣ3kM'|§-/v=/VR0/B X,W,S%F7^ RXh0jN¹@tpqߣlrpkڍ蝣>74>C9Ss #mI`x0@%JXgw>fQ]n[?w{JiӺk1ձ^0xٓ O!;&{97ν8 9=:Q/jvx$mx,`b+TU+ڛQ43J{[9?7{7WI`.^#^7̗M*[ֱ{횱1ZKkH+7L^V`M&[$BYQ"EKߤ?>vWD:?QLSs=rnH` R֠P '*wX%sz;/^ɩtp׿ߢG9|'G.%[Vy\$F * nS()0,f_y68qbFۜ1yGz.RɊ<5|釋55ؾ!&/X2)]-Kgm.amIΜD6OI f nI)c!ṟ8+rլ~2@IDATB ¿Ke D9.yAW-o~,?EWppUtĨcܨhbXS=!4#~ C XÜ@܅*3? &Qa;0"lmzFc3ڷ[\"}&R񓛜fv#P֏XX,jMO|_#ddW#tp;jowW݂E@o4 ZsM4Hc1)=0wpe{>TXƿ8v+0]w=wp[Do|i:M/#wx2"5֩*NxuƒoYZ"qXЅA⹖Vӧ\c9I4s7s+WyV21lqjwd(,*ete{7n9(ړ.bGi?Xmab=J@BmY1m[4"5Vűpt]/Părx'%Z@>Iv[_IHa H,boPͩ}Ωc A0wp\@6_hXiP[7xšX:.bQߺ}omn q?P8@X (9 #R!._<\GǾڄ Lj|pi7z9qgsȍ~cC5R]6J۔!vFUH3>z3g 0u \f?=Lܛ|ECe65d8X- @Hۀ;^=E|>ZW7.mYt p4uH=F"hbG d<ĂpO1sJgגtŜ\$>r/R,-;>)`\3tHe$k7%ӓel|޼98Bs%j$pB'@_++~D2$!ˤSĐtkA8~zN?+Ǹi2gMg|xy~&G)2~9\ښ&X%&HI.ǃsb5>dKZ B!X&g=Y[C@QF ^-h w&&ԫ-uԣ19kBkyEiǺ~QVXt{v?4q56aک b"vp+ ,`I~0?Ic~N6^Ph-.av{дk(H5g)s) g &08麻7Co%Ekh\ma,75"4 >J&8&vQv9Ph7Zbm7jG5cVR SXJ{f?Cy"_w|WG#L/,x3=D Z4NAj`jo9!RDBC-a#r n0)4 u%-#̍|Q|?} p7"]*χ-s֐4A8}m ɹ1Q1cmy:HzE3XC)УHsb| =@FxBR cTcH˦n9]lЛdn޾O/=mePbu"IX˜ pӮ8>Hv0 [`aDf3^c p33;rpz"&Xs- l2l]% } ycgG-c-5BSʠ\s ڑhU^[̖?ǰD[N[vx;r*P>"/g VC͵ JL7\Ȅ]xd/%R,;Lۍk$qW jZcN.,R5zk}z 5+.%\,- y#m't &JNd^qS($kk eO5c_^m.w¿+fo ,G~ RN:V u"`4?=;Ǎ< 1Z/qОשf8 Ѩ k6nloI6$eeGqڜŕ$v\E]5x`jyt Y+rEhȖ4f VQ +ǘXu_chӸ+M ӗ/ݢCG<+Cd06j_xf@lOG(i1W68,,uhD-\4AFh1qFT,[HHZ%_ kj,΍]O_\#un;蜢'9O2dטPp!&K}Q6<'!5y94O"@CFrC>SaDs"Eud! F38@/U.5[7obgw5L!5gvܺ} 8=DwQ;@B-|`pж۪eL/9c%EE&jLRtöѹhNp Oŝ܉d1`<L?pxueehc2$WESGq9+q;9\{PtLc::V+0]lMS5Fo }?u@}U:T\=y`- 5PskjLQ}t:.ңam&p}}uyrސˬ%]Y6&Asc%Fg,Fk۷Z&4F U>&iz%%-!j^8x=?CrجOfxza @Ul8ԕX+e4RYunGrЇH5e؇cȠaAW?/2q_|t t ' Bq?ƌUĹ4NR<&8ȍ"I$6M"kGI ̗dd~Lgɏv_wkXgvƒVo[ؙ!%| ޲5:N&Hh-b~b*5pʈ<68jp}KRRɪdv %^6-K0J؂'K5T5ESKGկќ2Jf|1fܵR٫}}1_M~͟I%>Y.Z|", Ȱg,{uzc1ar#j֠8Cqs q1& D(!S̕\T v t[UsF@M7U礵"r\[R fR Z[ʄ C]P:vL̉OLNuFA-c0s G~z뷛t[ዀn.}ud񞎼Ʊ^c8qڸ1p{5nzP)? # ]ӆ >O\gǶN4ۼdxA'?ҼbA)JqLqߋbT($<@5z6 +2cyr$@kn/g޼~W>1}/n:wfS?w_XG={%$>-Vx}](K`JKNH7}z0?<"8y !-ӷɟgzpzu2keJ1 1T2V4-4a2G,j^ԀX#f\)>LOWkt7o ^7G=hF<1 `kpJhFɱDχu]FaR?bz`ci$ s_vwvq 󲴟k1U3MߋkݖA9`8$P G8NېگJp6 AM_c c7uygz `oB}Dg>{;LGo O+d36eSim&õfL^95mǥbg\KekCfW˚5W|QT!_Jꬻ@'z.n4 O<_F^O,zN'u0&K*.C*qJqYJzp~XFq$1mR\#viq~ncдo+гNn;gt)Ai)#τ(UWϑY4k\ILQSAH#1<./u%\Q ?V؊FE v} 3hn4p`{ӿLǼ0_7-(),V_L"] ?.f|]}oN>|0(hi` "dj< CLgq4fؓPh_|\Nmo7/?q` *|;`m;w t<,\ Z!HpoTjiΙS>^+Q$4v t1VRmXS!> gg4J*@U3:Dq<c}RM<3ec^&9]Dj6*hֺP)1үskgrИL,m.l)A=b%CB`L-ZU#))ҡ|b%%&۩`rMa{?~`ލ&(Zr%e-51E5mőTƒUlq( &`'c{aQ>njlXхU?c0Vv 3x%3]|WAe^b*]|aqP}xN㓮`і6ѕR&cFYꍭ 8k<-<Wp_. 17e˗`Y Vclҏ4n\IT][%;]x4GQms>gZ=te Y|&qyq8gDVTrx\]k~yq<_9>0:[ak:w1-e–!#cS7B"NQgvqi|Kj ;R(nL/Z9n_aTI3=ظp] 44%鉗ATඎ}O3ܻdշ_mi aݿ_?8"p@;1QU4ɚ`n Ͻ/zn {y*kmK[ٝf: /Am3!ѽ dS-@$ѻ_l1KW^  (]< 9-jВ(%x >LAY9B':r6iyn&&pdCHnKPӾ#(qf)mftdi~f`/ 5 un$h3a;Knn^"(Ƃ lut| DLpk^'vb;Bfڽ[\̖fx4pjɐ?0f*u162zM*B@ު;b :jWNf!٦v /Ϲĩp@}a .r+U8C: ̸hD_iː%7W1FX8B&'$RW&㰽5|5@\c{zA~^W [LngÀ aI.5a] Ou6i/3FcHe5ŠUQb(BIؙ4WA\kn4 _k+[eq:Ȧ0ͤ*`:fҝwDmyIeno|ގO4J%)ıp&HRG>;Y^hqԬ61#}+7A{!+HNrKZYOA WG]\<Nl7EX (MNN>_G:l'C ޛgs5fuɄw!R+׉)>4SE_%kaPXH쟺*㕺 z,bRWv̽c_'Q3 `&i<җlE];+^P~ ɇy^t x_|'$7^H!3(?:Q"}p nF,Cm6?My$;T ž@!jSRc5N ЀI0+|r1N\Z\3yhLiկUZΦJIC9rLf뮯}p]^݇z_mxl ^G#H|j\Ƿ,5^V?m~w\X?R?MMc3 #evH (AR b(xؙĤ~,10 +ď\Q~R0VU8')6MȝHpio7>7O9>Lp𫀋Om?!RrN@q5 'BEU+mbqYc8Zg$$ha?YqpuYgaMo;f &;(zc뗇S+ I늠a%9pΗRW>m2-)?7 > ;;!|e_d(b/<~ &rL~;ttܲ<l+TFd53S|D 6Aa誸\6Dl#-c8H*Ȕ.; 2m>Mce*e &W1DpG6 rgZpE HIMEkө@hڹ(3 2lwu m3xwN6>/zV`YݴBYT_0o֧kUDYdYq#&Jվ ٔjxg>1{ N͝Fǟ{h{ij~E⯜@!Z若ܦv r)٨k84b||a{+LϜ6-3[>,x[q=FJ@FdġgqT C Q[q C)$N<;PϬ.ٸoTd%Խ@L.3iG}Ⰱ73n-x\IRbV4 nfB,}_u<,O_È.tTGSUVE&3 f.} X~+PVDŚFXuC1 ".v'e>jT+G|\ '~ҷmNݻ}?Ce@Ph+߸A `ϝ fUd\8PIϨ*P@9jcC>_ac?r̓1Գ7f@Tƥ@a2䗊r\i/ImѪ҇;U\O4'wbp;``; *tVD+UɍVhUGЪ c@؂S8?q8['3F g~c7sGNnGI=BӅM5:}IuWbCmFţݰ1%+Z=91xF/"86@G,=+~X]yQ:9:Ϟ7x[R4X7U!I=Ao@$JP@'Dو渽<DZJl'2L|]_>ZCMdB DjI[A|;iݣ `a DpweA:`Y-usV-lQW-6vrk@L:~^u&ԶK'(&(x 2#g\")w!6&%{6mWJ ۅr_m _z_ue-.{d~Wka<$CR#$?qK+[PeAjE9|1҂c Ъ@K y\bdW@F=<(Z@__<5sd2;Dd٬IasF=[ʗHUL?Ӷl)w'}}zBޗ `_A)p;'ˋM3Ծ\c(JA‹NVqC-) #XJ?]L1SSokUzf[yK9LX-ZTjugs0ͬτEMG08`\Ƅ%\~&(0;b2/l|xzd`r-Lf&+g#J*D0dh%5)^m?ӫ;U?LZGb8<}/~ _*hQj:ZUGRsL{%_\LwdpNC=nGXbvf陗UJB_,֢yrvq}1?W#Elxx6'|?n~ɛ=v_=VmŕA;j!Ƃ\@ӝR1kb^٫^!Q/>@:m5j<)H 9ͲC'W8ӏkO_x?)>8g=ug=\ >'8» ֳ~VoB9K0h" \VE a"A*%@<0LjX6L1AZ艘|ZXy| `9'ˀ'!?;-h+lV%(5:SjXo> QU8IgŁ5WeF`픾>&Y g^i hTN&q3~2qbBcU0Hv:7x_Pcb]q虀_7fMZ̊j0:$)8qRk3y~/Ќdވ|K0XJDRuF+BI1߂@T\A&6KV _LH?1x91@x0pys`US@Q+fTpw`BQ&qXmxA#o7~MO)3B\<,Ockyf EIBpO :Oz G1* g /K|zB~ cOythi`;I WUOΎ&RS=$sr"d}$HIvLfoջ[^ ˊ`SS r։41?߇61o>mFk1Hyq5&ɹTAg/E[ϡ\s Į/c/|gtt. G)$:]mN 0 T.U 3IPz<:IiPD\aޔo˸VŪT̈́qV犎SX8LŊ)$:=2n[q3 )ʑ03wﭝ7Uy2X,v &&X"E#Eʯǵ8h@t:IgIsl߷ 4O&dfT2@LVU#c,?G&z"SpV^Y?QeaDbp C 3 d||^WP*C9y.5}Wp.& ic;Q[ ey0`'lOeԏۃc#'_ }c`gZbGrazq% R1JQ@:`Z`d `9ЋSREO3NBշp 7sOVڣ|zoⲿ&5 _}o^t^/L#y)bf, Tt4 lF{ MHRMr_s[>1Ё1Mv`|P^v֏a|P=acnsSuc8 >814,hs^ e @r բ'-5Q&bMw:$ 2,v &(1&9#Щp;?IEЎH-0 #X>}8 ,as?C> A>:16<n߂ WWyu&t98Zb 򸑱79k5=z1BnV ebxTh +S@-td%bˁ 8Hg nQf &\v,925ov,ˏ|h?18(F(%/|0M(D~TٴIaQ9p71țqˉ\/bZL2Ţ? NS;Ect<l38SVJ.a6:BfL*d<ߞːKbpXT3@o |$`He/~"xVSR{`W}l88 .nCz9d8>LU`/ Y-ELM K'eJYɓh| [2p 3`8DA>0!; =v3;rp/EX07ZP ey @gqW'3f ,~`߉RxJ5ZIJ)+,n4d0=ſ\UVD.o/K$ 1d`GD X" WSLfTsr"mtLMDf\lR ~c_{j=jcXs`&XF`1N=; x'ބKVϭXgG0Øƣc a9Q\k}5, LBp *8ٙԡzn;&Tq7Q7U2(SB(sc$ 6< w.E[X78suHU/18|,F2p&r;'p%_4Fc=CATtB+E X ͚s+ %E,@R G2 R?ZkEp۠?)a?pٿ9Ү8|o 2)8 x;Ή^ @WL8 ]\gP0rLcE4=8=TY k TP͍/AEc䰞j|aO4`chʅ_]{h!1@7WD %Ĵq lO_{kF3AXQ1Ă.bW EM qlX9/ԟ~Wpe¨>wﭿKa q*28zc hAxcCWDI4PE6Nlg20n&UH B!@fݫU+'9jg|hEfdP ]&D$j m'}-!LSb0MG3Vˣhv>ʼ`D )ɖL KB̔)%d ̜faT@ha,/3:NljkVIDATdN nJ #te &uy̚HȒ+}2WL5!_GS +|Fpc?NWl31:{NKmdś&m @,${2'LYY̜)I2+:IKn:;dB^3'YFpv1Jhޱs_K8ñ `JlVC,$RP3Y/!/U|EcZU)Ԫ 2&Cᓩ\H*#XgDqٕO/8Tg &S}xcvWͭ-@o n X4\D6 םX).s!:?M%C)R f&ܚ~?HW)<OSL፝ zc\ %`LYeeJSBDT;Q>_X+2sKZ`X⦰1~g?[qٿr `jm1W.ǯ=g.'=:Ul 'V!'ɤ$VZͱOx Mb eߎ4SLgy`pvW,TLֺ!N? j \\2;̉VFsVFnoxzeq !20# M-\yݍ xcM(@5$§.$F*SILʆV;c jvKܮpMpa ۚP{gU?g'1c{*s3/}ҰmFM+X-6yMA‡<LB,t1c|u|bbة=1365ф;E ӏعu[]h}2le &uco%k~8|sv<)V'M/Kh K}%VZZta:VrɯjBĢMj$ܚ4gF篾_d:@Lfx޺ _`W&=ȳi{WOkW K[ωƉ[cU )@0gb}`MO?udO_f &3{c1Dk0 b VX+&y»DT.}fV@XAwflR ֵe1(qe<@LfǞKp.o$"K;}zk]lD EܑuR+.@EM=sҹtx2\3[ @+ @v_=X؄Z$Aq02)&R+Ԫ~ebc_eixv#+C!t)ӝkF(/nXW|NB*uD$…tݧNpF_;ߏ~>!G81 ;w0z=?boBOo -ꄀRspb;bVf&F2*d;܉ĘsnϿ\<ſ"?@L6h %6-D\\: >,j"$Ɍ,P(լ&DpISচQ,3'n,o.]!F HH> Kh@r-*-F)cy2*Ȃgf+Ƚ{okZwԯ^21(3zdeԉ^ٞ%:Ʋ^.v&vh yzUޫ>)Eu(Y9ntgIfZbPJ`7~q]jBͷAWpYt0ٜ rӬ#Ly3|quS|Q5_Fv@LvQ0" >ڟ< !v;RSoϥ(ؙ)E [dPw$t] [1wlNdBQ+#rmO߻~~->620Qb0Q 3?ꥭm0h十}\&ɼ+ ==P5c(+נ: n݀)㓾)!E&@L<"pWlϡT+=>0wۭ]ᩅ2`~xßOȑ 3 Ȁfnpqyi~>_ jl1b~2v[Hz._Y{ř"@LvF4_677@|c -U\'I^C'x_O=Eg^~Z$,H{}дg=~jd 2 ` jdg"x/^nJ_,)Z\f;؁etp/$,z-Sb + O/8iV (=|M ۵vssqٿ"2^X/I62 ~d5bF 9\9yqiii v@͒߹|А_;T;&9vgr@L*'2PO4 X\7鍁5bOG>88ٌW5؇XB D%1ؗFȀL?>WV. y十Z{DE=sJ9-BԄ `3#p/]noy&j' 5䴉5W"\-G{e0)v_&2e &3K+3;,, tFHUϽ^Q2:k~ 42o 6G*'^|=+.9S{w~xO x&{+x| u {hkK5I5u#m翰e)l}@L9>2P-<Kau&pvy%P`7^{xPg &S|pcxp.--o`o=o <1ekgo32/ 5F&1/xv ?ٱNib06vdƒf 8y{ၿs@Dd28%L}@4-p?i1@@LR.B < v{cѣp\< g &{ӈx z&:ؓuO~Ov({d 2P@LjY ,23 K߅%CDמY[K࿣:2SbSx%|pL4~ON414S < |^,{}ٙx8ٗGe &{ˈ ܿǍx% 6< ߞ3({ F%1ؗFf _:7pٿ?h8귇>BE31F^e&ǟ{ .~ߋ78Ǒ<,G=Ȁ-l[Ri\KGc@Ls£d<< Xל][_~QhF\br=G.Dċ_4j'1 x  @Dd`woy]"nemoA vde &p"f|[!y_s}?=d-2p2t0b(]gVxK[`xm<Xc# *r;Vv]_:.A  _d` |O J1p&Xa["(Ò# Z"]7$`/VR?/!a  rd7Kp% xo=U8ߛ0Dubp_ >2^ %GLLpY $205 ؑ@ʀ,ggWXRd`3i ܹs [l-+]lݺuz׍x|Ub(bX] ,X hb(e`zzzٻw+Wl|؆ ^~'&U7Q7n4'fm#n?Ҍ>uKjO+絑7fm_kKiYako}sӳR @1P :JL (b`1?UWʱo]AF}ŋG0;FjS൱իS׮]}6cho}ڸom\l mcf]{mVߜ[vEnvy6lWuRƍ]āpcbbbӚ={?~Z\Mej@1P "h(b(O=Ts^[瞻N<9yw]_^y]AR!mޫNIomvLұdNW6T7S'Fs[՛y`lw\Wl7lx|\=KƩwawJ|o uExMk|;vOܹs]7{aUb(b@^@1P tzǏ7;uuۻ x;ƴyݛ{_ߨ1EzSyS@'ks9,=>8er5'?m[:W='|A͝ͽO\Q}MEŽ*&kkZwE\7.]tqrrs=w7t'AsbСCq|JQ(b(z1,bzW @1P ##?fmFGuuzn|\Q]}RwIn|&m[Hxߢ7-ykn7VՅ͍֗Gn|nffbجdpl`k<O@T|ec'=OzA .Ĕ(bX7 xc~3gΌ*F{[ǵo{ d7'dۢztا7iS+|K>+]{p% 7>|@ |['F Y88u۶mַ5=kW0 Ub(|H)b(}~|ǎU'u`66m&9MI{nRr6O.~T~a}B{^F\^h0O~O4wA+Y4w႗%}'D_X+Gm_Qɇܕfb(b`xX+=5b(u<9r NڠǾ6ONܫͦP{JwɾE{@>}%߹}u.o-'|p2E 'U/K;]l%E=3{:ui}]N42x嗯Wz0J1P @10T JewM(π6z?Qh6y-ݛx?Wߡڜ抾0ͭ7\ٗt_FZ8f1e^ ]LmX͟q_)hJ$oUm{S~:s^?9Q^Wh*}:R @1P EZl(bha;鑇zht߾}M~_pVF=6;t%6w{ |^C-y@] CmPItm[ e??VN,s`% 7τt}iF_7?p02R @1P fj>:5b(@?{ܾQOߩ~꾟UQjvU0cAg{3^ʦV_֠Fq;fy^ii-`3j8y|E\֝"ߑ~U=rZkz~g4_m0c(bX&L4@1P @``'mO>Mڤ6f&ηڛS}{}~Km/a}ftKv:[tͱ2\Zr;2ۻ~vSf>~m~ sn_+O5Wu钞~uʣ>:AJR(bX)W>+5(bhaЭ#}{;{?Mٻ$7icvPU}W};O^%S\K׆`Y"mo5hc;/b؎u58xShs誄6+$J_O >1]U?\^x֭[7_1R @1P jW7z5b(̀9sf\i{6^~jksYj?oU}2`6icM{roy+Vlc\tұ[:VYG>ё|\'mv,sGiy37oCw |C1+W}v/J^WT́*@1P dNR*b`xІis=7|dRO~o}ڪEa~~:H7KrR!AGj,nq,/K!/NJKϷ j9'\FLlׁE1T8#mm?WN<~N$c~f͛?쳗xig:h+b(n#u6[b(??tJ(o?C~oǵn}v]~ɛ66YXqNl9.;[Ԟqln9~$8b9xدIiӷC}w^;`A?3m۶]Ig+"J1P e[(b J;룪[T} .m6k#uTHݣU?Kaif@7M$ʜǺ+?㳞f5VRr6orwͿ8G^1Jߝyg# o(g{Kݭ½y=~R#d΋={Yv#f%歭t##6Eg2l{Ȝ{1m?yr\7%OHSό$yQ'^׳~߾r!?+8)b5*(b`3ȓO>W_M=]Md߬M_EtJspn˼dٌU_ 6ȃcTY`9(bd\id:2q[ntKH0y@oϨ[YO>' 4wHR @1P n^aݖn*i1P zg@W0iybrr~jo6<jC'韐_$ ѳyuO?֖7yK.Ro†lW\?{68%2Yy=˶<ڤƭ?zJ|ES:ξCܥK^d@0)P(bXV5u%+bQnkޮ[R6:[e!UֿUv_7= mAe~?;|ץomj-Ɯ-[b7c{ז/ӏe̫D|?@79AOj41Ub(:<S?_iKU}ϝ,p9^c\Ƶ!|Yg1Gv ǵ\b =Kggiq ;+q$y{I#=q_k/ߑ'Ω^QPb(b +b(Mڜ}=,Bv9ڣ|%`ܛ2a$n-K6Ӕwۛ(lj&`/,#͇kăCbҾFA:~_ǵБ9gqE[>c7sc^M/v$qyȧו\ W}ۯz¼k^SGyY꣏>zQriMUb(WbG;(bfb~|^ڭФf?_V_Gk'[⍕KmyciOraG'xɇކ3+/q9OֻpdoƱq~&ؠ.¥eG2ʛq9uWuM׻x]'/]Upb׮]?"J1P ` x*T1P ooL9sfBwir6D{eSK.ؤ]T޹Mco;A`lۆ1:8sҖLW>]yk'JKVgor س$·/ođ2nEi/vYmoT=#O4ڧoÇ_~}R`Q(b Fb(``~&zSN6)m>Ц?1?"s~@guI6*f߁9.gLCvB<H =mv261س${ֳ}pql?O х'mty?|[K}rjjޟlr]Wn> 1ib(:0/"( <cSL^xh?(.LO?: G6Ķmmhw;aCq|m?464ƅ~fuQ:߈kk2*Fs6pYfLK:}pI?]6{2onsx9'O^U}MR_{᤾;v\3|@b(bZ@1P C€?~ ?Ao6ߛ\ .m,>Nm4> z^7gX6حFL;I1ʸ3ۭeWz[ %ޖ#6F9ё䏺'%ُ;zW~M sCMR ^{'+#xv#J1P @1Rb(m';6MThSO抿+6YAvG[e=+<G?Yype\rܠyd\ɡFF۞O6tdя9o89X$>Kl?ۻ#svsQl纤hy.F2-U}bot"X' d1P ]b(dGU˗/oUMϟ?nջ/fT=w_%8Wn$IBjLgLg~#QG;σ<셵oP\<7/Jƫm-w~r^zi\!Ynl:wkUN}~Ό_'m(!c`i!#[ zb`6 ;t৴ثOk۴+?o\$E9qi|#[v<ǁ|z8^kc,2w,1m<$qaHr/xd?<ᄚ/6;俢8-o\5WsM sT(b`uk@10 op۟`=MIBϧ^6vllư#suWh~ȁݲ-c~]CtǩWa11cm]:sws<>!=zw.^ӆcZh0IiY }6q9?eQ_L\oϒ#~|6y#gQGݮ6ڲdz9ˏ=mAx=Ǒ7㲞|[",OCJ?#WμKo~+(u@XgS SO=5/9sbaGrܪB 0X(c2{e/p`#%9OE(| gm3ctYvWvږ 9~y#':q؎8ۣXqG_lC~(wYp'?CtN0x_}gLd1P `NX(af@W6jt%oҥKSZZV>$[9K۬m;wɮ;romW#AOơ6Hmlj/ۖ\1.n>)].{16=ohI,gWгxd8g?_GmƋ=9~d~rZW UM鿫<ϒŐ 7D@e.b`2w!FU.b`(?fa6?~MbcjoR{D9^h#";e@Gc_,A2x$%ys^:v$~d}P?Wcϒ\حyG[젲-/} 'o$_d7C7626觭›qo%,̹o|oԯ*@1P WdB5b(]\]wh] ?oڟܮU6N`"8{& #YxHH{ቋ'"2cs>rzDXr##[oΊپXXlx=˜/sy0H`$vˈ~t$}qyEq7d=ߕ|C+i=ũ+g!ҋbX 5xj@10 !b`R?#Z只nRݮ(K m6H얮od܈;G‘c#Ώݲ Yvs>nk<YK: T-[rLɇeߕ9Cx6ُ+yqΙ3 y391̗|߅>b~M蔤5I?wTҳEb˖-sM*@1P k@ (aa@ o_wݡf-?w#êIv҂ o܀Ǧ Ѝ =(HƁ5<q'<Ȝ';2|y0b[K;T|سyI~<;~b,p>-_9ɷ4ߑ|C(Ϋ}F>|@b(5@ qM[ zf=kk׶=?#C Zi;F,7&.H6H]@qb#%sٞBmnjoi,Ğ\?X\mg OLėO:Rnc|_sG\1?8$<8f_']k?|$_UOOfJ1P kѵ5m1P Cŀw#=Ĺs&7mڴOZT6kS ~_ӟ]7.m9(.s>d\G6z&|$,OcG:OxpدK)u }ҳ/s~e=ƻM~99#E|3-W[qG|[?1/}e\^8r!C#uw{\3'{>.Cܒ cb([ bX |󟟸x⸮K=ZU?T7E 5ϓaXwKYwmK60֕ 1HneE贙7v$y ұ䋶''s?RJTtnq ,}4-_; Γm񹿮8tǾc;泝|HP⺤<[_W@1P r|vJ1P *bk8N8Ur69}jUݫEN -pR"6ox΋^x|9o[8~; [/ڈWy_\JcZl\bRbGۼ6~cޜo@kׅg|Y}ۖ2s>tǎ$Gkh_<_~ZJ?o뺓~.0Vb(V u`G1P -Z86~.-oݦm򫛙M3cd16p6M?n2G>t$vbOw!6"clCnw3̧n孖سd~/%N]9&WǸ?n;}X|C \g_.|l7>+_pzM[?Sz^z'4_ JR(b`y輒<+K1P @F:4K.+-\ln߻[SaGzbۖp1_>g1XtpoE|G89;ё]y#T^ktt]8ބu]m]y#G^ѿe~۾AFy|gi uA',}?+Y *`}5 VC(b`3SO>H ZL#-}{U'U7x!\\ @8ԓx'G~Ѝ8]qC"q]ұG~Ř n9~1-[A1O|W+q:K}#~n?$725rQ/{C_{.=u"rK@1pw(?99Yߢ11+̻վ[uLe|)ӨlXƆ4-iG'o0ؑlg[9s!6=_8A7 ڳtuAqeس$c.}ܯ+qe\qc?|~mz{E5淥k鯫~I_ 8;Ϋ}C (cb(cNS1P wyV-jZ8TGfo>΢ߒ5KcYf?D\ߋyKĐz7I~p㷍6 /Kc҅)1WtI6Γ1q;f809V&8s`\.._WTi)WuwV}g$R bpnb`SדhAKk|DL|Pe?߷o(A mn[v.q] /F;xd3?KO6,8_;2{cgskB|W1%bui1 pM釳?Ϗ8?pmCCKQU5RT=Wt^/ .g[e1o6A^%|^C .+.w xpe$6yG]9-Sߋd5?YcCM~?ceBw.bxlYy,3o96ǒ'ګ= p- ,}vW^KxtFR&>-c;3I7ȇq2/~~xl_bړ.+S1P 7#_ǿmz>Du?o'"UmWDžsٷ?,Whwu۽wܱMl9O3(cٖ?1997G{`׮e.ز C$._y8Ȝ7<8Ƈo9->oK^S/tB<υ?رc__:ojb(e`X+E1P 'XQg[ZN߂Ϳ!,JlŹcsl8kq؈Gz,Ud^|Mb57`6~-!{m˕8Ƀs,΅g ԰;(~0ȵk~ֻ;vi޽wn: ɫv1P Kd`TX1P ȀT5>>SWvhO}ZZR Yh_[3(g5Fǟ;UzNgUb(@}`U\1P %_WUuEjOiwWu~ڿFp͂iLGwW_#m8ߡ`9r>?{O1eާ__|3_މҹ]>6. $џ8~a]>pՖi'PT.}]|_>yݻw_*@1P ,`iUT1P !9rd8=,|o߬ūo';{Maэ~'m~7^!]r6IzT ui7]Y\A{Kn?jDuTs3Tޏ~u',b` K Bb`ܫ )ӒYB?oxȕy$~$AKb.]Y>πyrs%ciU:m CK]qmn#'|xO^&,z'XZu}˻~#`@1P ,'M-&@1P z?+D= FܦnQXx"0,ȭDzR~i6ıo>`-JͿm,r\X3_dm=m7E\$OM~A2jlXauv}'#<+|F\b( ,\}(bW?wPG4y1Uߞ:UMa+.^~XƑG 2Χx8K p-)m:\?ϱ?xd[ +@p:ظ,Yƶpyzcȑ㭃c|#|ׅ~ܶu7%DW[7_{gT(b'(_߷o߄6G(U'Pϻ%Ϳ]Q7ƶJ\~;Xi3^?#A?lP,oY]=.ᥫAkr JВ6;e{:%f̛YF y8./UoLMMկO*@1P aCPb`8_6{EpHퟔ$}\r? Y$ oAlGچ_nK;VpE\2^pHp̫I2d;O?+m7ƥ>o?|ڍ};s}mL+zO%ԳY޼|u3Y( )o1P !;wnbwkqy@ ʿ8Ed3]mZv %mc vWW?wxd/81kxyYLםV(vv^Z C@HW~BMj7WF;J|ξ'qxqxri~mzpgɕӼqAGC?\h7v]1]z=^ɻe ilu% ~ǓxşXo`<.gUݵzUb` @10| p||n"O (ݦq6f۲j38&=GZ\xisb3.nokX?[Rm_ s$g/.6;)exmcǼy7rgNY|'E >co'O}S~gd(b 2P?٨v1P -~jWW~QZx~Tp,gsjnnb5~w?mɒ LJ١gƺbl#.Yn1g6q\c<˕hs,z`D_3y?Zmss u?pD G@}̺C\y!Fْo%y.aQ65Ĺ 7H{'.ȇĎvtdaGq,G%=\vf9&gl[_sqaN~bvf^]<\.?}7J`,hz(y]Kלޣ>6޽?:f1P k:^(nzʷ_xѷ𠪟pw,.@b=bc?Hr38j/,xf|xcc?_m<_ ay5JL+_À] Yf Ao3rXM\bmqGL6tm;k.޽111qѣu UbjC}k2+bTkq+s1 (YٝWң4x;żē~r~bt% 8s\?J8#>mbvxxt.~=\mn^'.K^1wn78Pvs"ϛIҒV?}=X|߯nW^ٹsܳg[ y駟sT(adƣ^s.}?Ϳ7](UT{.^fiq|[81 2&=>W{f*l˶<:v$~nw/ALiwI<n\~}e=t|9&Oɘՠ3>X|ǶA7V]a_\#gs![ 9?A'1x& :@\j@1~X}ͬ(gvjAK H_w?U)U:,xWXqu֠M*q8"5R5_c%~]q I>|>VGqD<1>pٿܺV=:~=h-yc>zs|$ /GXjnc8Fq<ƑPUH/TO둱J1P @}`Xtͳ(ZBIٚ]%xՋUđ+R]%yƲzI(di?&.m`xl`-ɇ 2ˎNɮMxmk;\sϼ8+c;bdq!=|sŖc_nSz"wsD=7<ם"J1P u`y͸J{Ƿl۶mxXQɟ&Iu?Q6Q=~h W[Đ75D~.G8_5O3K\xlis?x7կگ$R @=`wͶVfn-:пcZ$=o?!5u(Q܎6uc'ϠxـV/=.\uI288l`-x`tdξEGroW~sqhOm3H\' dd m.d?qQmVo$>˸v mw{'ߠ27h̭h/o|,{'ڌ N(DƂGޅυ8qC176qQw;-ǝyloR/=||q~1^qONl0o~mk[̛ؖ82st^utuI ~&y*HR 뛁i}s\+g`'o>?h_ {S{/,]cpO'2R e`bM(]{m>-ƵQ\gaʻ~nÏݶXcāOuxؑؑػ̀fF>K(>H8'k΃}xp!uInz.wIa&-OW\~1Z:W?Eنsmn;r?/,s>ۨ |8uK^s^?b{b(%u<5b`8Тm< 3Z.FlP ,mLlщ4m^<1Wlkߝ.^x{<ض }\̃ ak OmuƁ=.Ƒ陃6Lͱd=h3^td8ȇh4>e/|~z|]xr2;%8&> {W^=.wŹ?qN%ҶYo+__y㓟 2*P(unz5bW9>];G4)7E!mza2~+aﲓ8/xXW_\Ö7tgL܈DvlpՕ7≱tqL_q$/vtd_߶ ea0td}q_'{9cmdw鱟ߟ'C:j*p_;\i벓ˏ9hތw?q6Nl.1/e___h?@1;ѬCʀi9ixTZ}B ZS] : uKbu@xE]qAُlkq.v vc\,iGv,oOވu;_l?j\HY8|ب\m3~qei-o|qo~~bq}%[f {,6txBwl+XF{W\mb^pΣѸ/=!.ǎ pDb(0 Wkx"5bNf7[^sbbjvDgO=MϹ&+z4o;Wߖ_\gўb;g,/c?]ذ[:ض~mwAmŞƹdu߶|/Ler+vt`+syЉ#vo c|A2Gv$췝㻞O>dΛxqDӏ*:>e;o~ҥKɜO1P 6Ib`xxFoբm|:%FU6m 7:e68]9/oW_m9cv,X?x7v[8$d7~pd>⏯^xƑcl˯>mrŃE:?K^q`s0Nt]ixF.c+bNHɈ"ؘ/sc|ؓtN(X}<@1_ib`x'^}Uo?Q-AWGb(: gS/a@m}f]XۦEffg2+nvvF\lDžyxth=q""%.bkgn#?X{#DcѣdKWƩ?9Ok_72׫Ar\|O$}8.]v| Hr?#N,&gdO@1P +k b`!^=SZ}Hc!iSr*sA^ ^G|s%?ĎޖKvvq~Z :bqNm~+غdē~?6_81zc9+?&+b#.K<>Dug~y8xtŹq' 2_ؙ/~@rc~>"؈ym%d8>g:q6;i6W@o\T(5@Xc[ ;<Șt6PEcRݤEWlsyiW,xf7smnc'L_x$~ͷ pxl=.׬g~$,+sj蟼  \q?6p~yسyt}my mHrG}c۶8hcy'8Lc ˎ?g]mF{TQ˗7w}gկ֯*@1&kՠd?Z ?>/bAgAjպK;s=툍vO(qr%xojIcv}nm-]?5ض|Ϡ%c8&Ͽ m1Xb$mg|`m  2$L̇9y_F?D.sKۖ/cl[hk?gI.cƎdg|_9'>ch'oGmp!֗G}n8խ[uر<@1Fk@0ag ??ڪ^qIqɟqcqQudxtu1Ow qHYw<;cXo1n=W6Q NȘO6UUm~n ׏;vN*@1CV.~xz-h1O I`bbzl/YL^q]c ^{ qq:8,9B vA Gb,Xˈ80lKrL8l?Ӗ|1m1&0|=c;#>W9Gq\ĴcO6H۱Ks %+_~ȅ|@eSמ{J@1\KP1Og!LW?zEc[\BRË5QG!p,k\|ؑqeE4# ۝$v+6ؑrۉmoɃ&mc<XI\ֱ# *=^%ѳt<>|1/,{?丬~ݕqd:K8b󂷤op|[_jǮtaڼ,#ovޟXđov !w]q=?$c`~}غڙgFغr,~4 -tP'wG-@1gQc)x&zZ?+=?؏ {G:WҬ犿4>Ɂ~r%_vyNJ78ezeҕ>09O1~b2!{_]#맃[)ގ8꾰~l﷮xHBdF^'~dW>Օy;.m% /1.ىύl4 ,,Uܭ~5b:zQ]eׂ߽ܯNm"b1FL-vۜ7VpЗGޜK&%võun_K6\[f192&$cFX#uuge6Xdѐ7lS)=w/Ԁ-Y jg`qW CŀT[luʕ}ZGS}hX-"YLrE a|e~zBvlo<bq.7cYٿm/ٌb+.w!Mh/9؉CbG~HY:}mN,z淭`%/>~s<~lH޷`xƸ?m-#}g?Ϸ8V0vK #$w08*xKې&|Ͼ.;9F:{۸'m\(O\ :[3'\(U@=`V10 ?~|~vS ZdƴZ87/Dw_ ;,ɿ@W|GMfEeOqhw<cg\/bx{6pٟdg vI8@ҷ%ž1N|<.1D[?|Wm94'!δ+;U/vZNdJ/Unt5bJtߡ?n]-l ?J:6KH\lg .JwN{k_םOf"8ⱭtToD\ؑؑأ˒xǺ\W'2vrq3fz ݐ2&lZ>d0ͭ.lon(n#oY C: ~_E;~KWކ}ns~#y˵->bz[,)ϐ=|%;xtn1eW#3#㑯W=U.ˆ* K9:XQۣWa;qzY/^ %Hkr`"Q=:_Jxy2i>@g)(Zκ&}۷W0^qm7, &OݶPtm'+ex+~zŵm\; QSVqXEnUqKN&7ubiN`[@֩qlHP(hbi%7ء0P9~(W^FȪܢ#[nH墸jk]6Ɩؔ~#.]xmq1Yloq ڶ-8]'Gۢ1b1>m:'%H]9T"kɤoUT_CJθY%iNԜp:r*rSqzoU'6["m|7.OrSiLP_)2 4S8?ەۦufUzNdE%Y8ω^Wl ,r_QɸyC5V.bՉYPO)Mu:6!.MN Q<9)9oB }nF?nKB(ZqT㩔nC귢QM?6qK8t桶o?S|(tUbMmc"۟Gz\ħx|.P=#o cȒ$]@uY*HF~3KZT+ڣĪI rhp͸â`Eƌ~:Yiĸ+T/cigJkud]]rBoj}.;W,zNɯ!WݻwVP{Q \---Hz_}NJSS'I/v״bpNŨ㠟s5l'0hudpGVEumf[n8:G8T{/)yQJ,7-rdPm:O9.=Ne?_Xpn}f^X=sOD.@ OB!H>۔0yX wpq5SEHqWmtCi;,^(.މvqLQΘhoDjQѶ jyIK۶m[dڥ=2mW;\u#wn _T痗/HmNcX6pN: ۥ:x[nfff*ȧ+WTGuС[=o߾[:_=Xebbbط|˷ܺx K~5˗2999F]VwksZ 8":y紖띒U3' wHV[@6N>*b\AEfw~nk9*{Ƿs.㶵zqҟv =~sxㄚtXɭ+-"deSt*|U9ҝ8zWַrι< $]@P"0'ʭ4ʝ(:@)Q*/crNco3O\5zB)xV=W˸ѧOL"10}EI˨íJ kҽ&:/zA:޲y{=yϬNU|7S<uwtn- Hi-`EiGMSѱTM.sҶ,UkS:*Z&{wZڸuvXϚtuvϾ11zP rO*gIXC8XWZr6}.l'G;;>@".=ܸnܯO #ߢUn!ADZ־وܶP[W=>~wp@B4IIl7ζPz/ z:lc9i_qmb|/K?%s- yV2T׮]_U~JW՛։gy'drβ|rIc=ի;[@w.)z_o${*p>ջsu*rTWs\϶s|6hix+-8nJEMz/w, ze91>m['GFqW<״ qN)j\cǎ]Ծm'$@"p '",c:Xح^HUW X9ʛx'F;ۚ۬܉c9N)wBȀ:-Y߂=}6og;U?Scz3 1zP rmD}e>QKoǸ/_U^ã>Sڷ.3O.,@"ihD 9t[HOUV"E.1,A4W_k.(w<DZ1~˅n }saJn3>侲fOo;9.?Q&8~ݮ斈]~Q+Z?e&e=VttRШ={>}@8&_N{32#|%;vI T.onSco;chm0ioi{|6c(K-Zv['Go;Ss~~,7ȹcqx.;sr5O/ZOѶ/k?W{rID ND;JSNzG+YjA%XU$T hur4u/f髮(}x"۶Y?}}[l)eUi8qپGHUvFI9Deٟк;gϞ+GO}nkkխNx9 -kĉšx`*U Sn+v zhk Aصӫ~>ƂV Aӈ+'"AS?c,-?뾡Xl$c}< ʗ:j^59Ŋ©%H;@=a$*c[GH?|D>18Foj9(VÖ́:Mx'57ԣZ=)ܿ^tݯ] _?!}V}7QoϬ/.nvq-|g;aj9_R~Mwܮ>.qF$޶16Ǐzˡ?ω+z|qApqmȒ$@ g@"gv3cӼ_ }Jp(aa՛ "vy3Mc2 _Lni7[O<ȗqfcv8U˪<B5nu]k^(Պ^6 _`\ `*' H~0):&Yhw[o>{]KmG81Fė؆EݏJA~x/s9:ezz;Zcc@"l3y`D`?J# 4.)Ckio][ҾIDkWg9~a R4`yJʳqYoUq*XP^PwUc}/^%dj+,}C+ːX/Ύ}΀q`41oݯh(9Q :^/L=|m],j{۱kZrS;㳟2vj1hy_[|UB$cqb#/|J~I5>K"$wu;;9;HF=堟zo xU$`.Q>()~?O~~Xdc/K9aƦIno6Ql?T~>^_=/7 =Ugw޽Dϭ4u!Np%u1 C?9sLuɼG4ÈKƩFfE1Vۇ}ǀ6>]zz*24 Ihcn2E[PcY_u~d 6%W[cZo:'u@"l/;-Hq8WyPWTOoW3i_r %2EO)ho?58-s,uD ?-,'HonB_xycc }E`ח[zTsGy3;_ ,w_]7HW[6cn}n ݎq[)Fn[8}C73PDZ'>WDJ$ێ۾Xa"܍"y!Yo"o_C[&ȆYW| EN)Mrl2b4ˡzJ]WQ_U"/ϫWumYW9)pSWV8ew#ġLztc\U?6]u:oS|C=o!îU=w0ݯi{xZ^rck=Ck"+q7j=]Pq@"lyv}$mȻxfW}T%LS;/r\I*oW\jlO'1vLFK=:MM~M:qLgIys?➒%?SzߵGyn'u{;w=+˺K`@8yg^΃se9/ p : MIv[AOF[[>+ٰ3&0,!@Y/RPX!DZ:FN4#$"~D 1?c*>?\<'N+XM[n{P8/y,Pۗr_ǫCq_P_@E>3-3~1ġM+eVV?hkSSSK=z˷C]??0ZӺp@۴_hqhxP]Z_j?EM1BYy# B_;_oÎ.eF>⾠TePܙKepۗrǵg,8;GIO~U؞҉>YAD H `~G@=rad2@IDAT*(%]եN:S,ޑ c&ʭi9 *f?9y,"vjvPofz#Rd<zCู $zZ=/<[1 'xn^zqV=0֋y gMՉmMm6;_~cćvE1Mٖ]%,s P/mۺ$uia};b^ÝmCD`[Xm2;IQC=g|T2ij랽%#a'X69zJKЦC:BK)FOuUS)Q]cr٪}BcBqY |DHgn?o߾|68bN9_Ѽח|Z S$ m:XWeWm_򭶅`UPNz ąSׯe_zqM״66tUZ?1^Dɺuַ/h]\:wC)ò"@^اywx䥏m1 )1],!R. yx< X@"0TɆ}O{8v7*êOr.>U%{+\iS,GWK{8ˢm8~?Uߔ~fy֕+Ӧ`omo6ǏqTx6sU?֡A[l$YZx? (>|vZ-Z}BP1obQrmTo?Sii:!ܴZmXė$@"-sv,cJy!%:<_t*C$D߶0DP&މ'v&؈__=:J\p^59]O>3䭵u l>Aϯ| _Xԁ C\NpL^ƽSm Xg걏߲oc_x@61}n.(C;twL N2UpBMel'@"0@YJB`#ɓ'J?Ӓ?*KDB rhC} ܆v\T\يĈqoyN^:c0)} r(mJcO:j)ǦwL-7rSME:B˲pF?P}uffN8<zS'=;Kvk}u#Zk=/e30CP.(Gb݈וyx~Ώ8Qv/Ge<! ߘ/6ɱx>,홿\2qi{_IR‰ˏ&y+,@"0tw`C9;H{=_;[mv0.Z7-l#ee61lyc v*,KpF˶}J}iMh6c/֒%3_{~rrn߾?ʸrsq`8vPcC_q,cSDy);mMyNeM uɷ$/,j/ئ(H"h $b AaqHUX;:/@"s O 'vgێuRWڸmzˇEcēGc&>E(rңsޫﺸ_Rb {>,j_T=)IO>8{ f{bbc]Ok;GPxOE4^:zuuMm%EG&}>u㰮8kTvCF!:7m܎zluTiX;;dˌNMD H@0,d3n"0tJ+J"$:'Q2dܲ:o?mHcqَ7ϼPN=.hG?nljjVݧm?~U9C71]UWD`|+ܞUYEg.]}^se۝,dbێ2h\c!hc:ݼw],V,&O3Jxk;cZW {u^PA,>u(lt9n>|uRgW哔4hy[Fm,vG+.ѯol]b<Msn}umrp9G(^<9lmW:f;H pۙ@"0k:&% D tX*WLbHc[ȱ m~;L6;&wDvڏgq/[[NDj=-s]T%%kG8gI _|~.kz>qE'+ZGkw0$GvyybU~ævX8ho9tإ_o4"`e6dn"wGg=zǀJzurKj=[v'@"0HAD`ٳ;vP!q?ژFfy1⯰ܼ(6( $BxP룼[x[÷,[oщ >#/Ɗt~E*PN//ѧ'~O>ݟOe2,u}ܭMξ[QSZ&b(2 %ˑ~s\bk?cE})'ް1R)3yqqGA;<(wlJ92 r(rM{w}YS@ʒ$G`5x $Ο??+bJ]oO~#>N(-syGa련pBA#nJ'RJU/6~NoK+oOU$+'tB^uԩSsZ:K} pg]W2?99yuW21w\Ҷ0:κs7}M|]bk\S~r#V n'=Bc,sb#XsNfZ瓲D H@>U?H*.\0J2y7)y@JF{޺hy'gs_}Ga&q;&w<_rǍzgh?:GCsod'??a޾%`]}v铺3OVzIUj8hۅ5lu;X C2yo,\ϱi;._tn"6vcʸc(Fq-rǏl-E#҉=ڧrw?eID`3%c=CBri!1)ژFVXءzY4&Iv-Q燬,“B\ge{zgu^v D.F:tH>{W>|NskZΤK&ư?G'N1|J+D 2y!h#xKW?$QCJvVV I|%YsvMY"uQ֦?bSTtU2_ӗ{r۴I/X~_;^q4sۡ7pkiW?//G?WjNLެ|z:+ZWUv&wɸކ][?ysv93:'O>NˉN=x>1"=ۚK<6 koeOrlݷA=7f˰X8Tqw3: 5su%H@>08,3R"0oUoįu5YXnFd+ 2뭳cbG}Lj;LD9&焺ve^<+wGCp-FTG򽦻G_`dxgX\E5UWޑ=ۤ1*lui#s6ʉ:0)&}u֗e}״?M폽xGU*n|^$@"0@` h"Zrnc=dgwrbӄ 66剱ׇV"fFu}um@<_l|m(w(v6귓jLBFm+G.U;(=u-ͳ$qޔw:%"|ffJTS}F@,YD ;MID 1:pݣhnm6<0cg[SˡAW 7&>vttQF;(q=㋴mK⹺yFcD|g~g˃Z- pM'Nk6;Gd󥌞x5GA<<MK9y> rm ,'R>s7@"4"h&@" }m\WvީQ%xo-ϲ)\ J7G?K_˱:ˇIݧ(cNcҼoTΝ "vY|| mѓ9ʭYGmA^}!@C߫}XQTμl\Z+2P(kc?9q}OS6آm:c>Rl[nT>юetrۚ?}Hw}`rrǎw)ߡb&f;6Z$#/< %/ܚ=SDȜGy>5J|5~k*0$kJgQN](QW;z2%9:l%[sss`V#'N i[$~Y7lqu(1 \kcgaˠuqE9c~8MD`lvMD 5{ӧOQ-߫]8|E+=ib!M2Yn긥])ǞR˸$fIh]Xnjm-ٗr9K9miPS͉uj_<$ c`Z_^^N*zPD9˴?ˡFXc}?o7wcl 0g]d~_2}wĞ6iGe#G, $Ea#"YD 0yqÐC"0;uΛ)9($Tl7' N,_ w6h@2hxN2c=HCUKJPO<Ǭy}Oٟyj+':ۂFݠxݝ[)m EVїaжrsr5NOq\ڻw/W$\'ugzARݯ+~A9s |u:YS l=ĸb21c 2O8,F{,+?|c?v!:)'OO /"h'@+V0Q"J@)=J @58(EY䱡]JyԷK.?Ǫ~ԉB"WFcnુ0&-M_OZVpdD`-ٳg^Wzg|;i{[Gs+u]^}n䎃]?~2(EzlZ2ۧރfHYD`,E`RyGT M@ehF]G]t(ZڤkU_ }dXmo;(zˣwme|Y`N>/>^+Q%>쒮^|ꩧ@'_V#In}9ۯK)InOio垻L'[okP1߈qƸ9^M7|2w|ff攚@ɒ$B6yP4NQ@`Ly(8dDZVYdq uhoտmܲcb׏Gkٗum\H6EYBK sʗB~2^J!iTѫQoצA82ڦuJٱcCgmo٠hӼQy9a1w 0;=%PNV V0Q"0SzgOP"=J@PA$W5zmiKgj?M-nW!饒TS.S˶mʂz6-ew(,%/-95az l&  g.36E׆mM-RE}\O&2 6D H!CYD hD~7%\uGoUw@{IU#]ESC)lgy/4ʷzՀC?.$T ՜vβm'榶w&? P堃M_|^Z%H/x+&_}gg}5TC ғhN4!UǞe;^v֛ZϿ~E ['G6yuuo)G 7^Rguy%Kyo&ۃ۞i<6ɶ9IA}9k]̱QnX1Ec[l7_.|r4d5.$@/+I]"E|+q{T~Cw!RfUMvMGaNx6 y Qo;Gx+Ͼ810%Q^>Ƴǯӗ9r~xYD f>]G>_[}wE'D'g]C.QܡE|el~slSgl;URe2:V݇=ggm@"E ( E@ک DžW*$ AIQ 'ڔ.ݮw~bR f]}?ˎ;oC??ʻID`;6ȶy*ۨ:f[m]b4cbn!~|]!6|96>Ѧ/ _×x+o/hեmD hB hB&#Mw;|T~(Wo+vX^RlJخNĴն@ƃsǷ6h[6|7E{˛-w?Ugk?Z; ĹO~ :X \" A-k׮1??^UӪko|rdQ7v~M菍}S :~IO/)>t)싿QG铑%H@H6Hxt mSs ѩKvY6|_ 6|96>ðio_y333/B&%`Nlll:0mU,',Rv >uvMr܏~fL/}U~رc+_֟"K"$ |"T([ZZጒQua# mJ}zte_Ѷom'kGmL( _č.-p:zNn'KQ"AFU5g *S/BFe<~}.5_h:lz_cZF;ڸdgy-UeÏD腐Ν;'@"dDB`LoQߡGD M-6YV-/ieqZ;_-E Is8s/gI?W}qϞ=,@"p#k-.]m/UZS/%嶷mM䖙ڶ0(R@o9%ҮlXu2m̤ vx޶yi 1Β$@@(f"03Bc;PpK>%!|k+&mK|iԎ>m8q+;SD |`NI]ն|Fq׎7N;.mTn6hӶ?"_ڕ`;Qu˗wF,Kl'@"y ׃D XZ\\>dcBH>b]@zű}ic0(}BUx!2ۘ6vG?LzFj[㆒Gn}3<<HY[??9w?UovK "獮qz/K)_/}Mm6T;:vؔίIϷxރׯ\xq $Ib=JF2/L+i$+= w]uxц nꁰ$.x,ɵ@[WҠWWԾ$Ϋ^'8`X[9ۉ@"p7"pK/o]]l]_ҝ\W5j|CMocZ4Wm%ȢԵӴzS#꓀쫧Ou6I$mp0K"$] ]GT1M5#]DUhcgZDyazu10xS* 2ʼnr)w֛Fym:fsc~xnw^_|*DM^|z%}5G47U=r,)urV)ri C=Zݮqy5{YrbF r]sx7ϴs'xC|ykdDD (v"}J$q%nG6; wi7e7~ߠhL]Ko/c KyQY]9:G&igsDnEᱬ.j |mi[[o]|MlR&l nuxѦ죹SUudDvr$n%_'^Ү2!q;3oM7")1ƃ:]eSW]}2AVɾ^SNѵKC6DGmW^ӶIk쑮;Eiԙ/Q|#1etۧx_uQy1u v|OSOݢYD hD O4BD`xw]J0% fhͨ|iԎ>o\xtC}6M."d'g_s.]B1ۉ@"AmY'f5_Ѡ/h$]q|Q׆/mbE8}KƏ>/.]VxdnzӺk} VD@N](IF9>%GLOAm* 7KygmƘY+xNKz^__ק V7!lz怯jD/i^. Q?yh198?VǴ]'/1u^qJjRN[:>wT~=,LC*e@"y ׃D 0;tJBSJ(&L?ڵ(ɈK-36L|nȗ㈺[[ O74yD/D*ۉ`^=TįT,]Ikaiۮ0vD]i'LФ]oiD H@ A" O𭺕Q 132Wˠegb[hum/n6[oɗ6.|A>#o*(YD x#w^mU?yH=<7x0v9#çN_'xe\ ckcΎrd?&vȖW y/OD\DB@WCѕ'9MT.}E]|[n혈mǏm]ho61[qH~eE`œ^$kR#K"*9mWD400'*mcffft¥D]fyw{t"?s|%HnGf)I{% (q8lF^1ѕ deEavQ,bSoARYƴn4#~{'u`c;1!zqy=v@cq(miGQy9W!sEwԾ,@"0s#\c7sB<ú6Q'+#_G]~em'kGRVƍȗQG"趩InL՟os;u_ԜzgN]bUՏGV\ Oo^w䢓`TiQ5uchco+ MHcjۦQD*x5/`>==_{h|"ܛ_hS-U@9ŲҸH2MKyٶݰiܯ0QoH:Ƕ,0_P|/..NK<%Hu upd#Mկ _[r]"_"uok}"_ߩvL"v<ѧ /.1 EyNK}"po ;~4Ty 7#ږhۆjܶö6|9&ڕ~n?QWգh߆玗4HMR%x߿ŋ/--= TIn+$1e"cY/ZnGjiԕmMKuſ-v:Ex]W˗/;w%M7#{ z9AaG◀V[^G^:[X綩hivO~X `}>D Mhԉ@ooO'Wy̱zKn|]Ӷ~.[VF.cѸwG;vl<'$@=:"pʕ1%"6;ƕP}f H7H ȗQv'f1/.uv‰|/ˎg~+c`e;!|: ;.j~`^Xf7A9VIcȗvw-]G+DȗnQҮlc+gN6)ۉ@"0r s.c9BKI7I2I^4bvQoԾ.F},].u4Ʒ \Y_Q yub%HFZrr3gth[0Ah%*!&0/;o֮ۮ1k×jik_nvNu|^xMߊ]b6jse[>K;Վȗ㉺o֮ l_Z\\|?l"00k@."gA9؟A!?% ANW'm6ضj|}Xi k?eM-m;m_EP*=JmD`g@'tU՗4O|Vu9DzK\|jyQ_ڔawS-vY涩h?{롊ŋߡ W2GD`D#b'/^56>>ΕiUpx|dEȗQnmO~wUW:th~a4'݋s>z]'#- Ѵ6[hۋsmL-6o93eܨ.E@"0 s#+JRů%Qy6ocSm_?A?ucNRʭs>؆8‡ W׿}~;:S#K",~~lID Mhԉ[N:5W>(NN1:~&}٧LwaS^mSlsa۷5,P]Wu糺jsB K"$~/hjn:.Z9YJǞcn,Yvݰ;mS˛LKKڊ—곏{٦,HF<0zy.q"P!pر1O HP]!4$).lP4ƎoWW[fumx #ݚ:+{sv׳k0i"<.]|ssH0wUmqi)vE~㎱#߲)̧׳of@"p#'?8/C@ OSҁ*Bm@+1c"G;&'6ʱj|O(k>eyYl[GKN{E;677w楗^ /@D H!O|qJqՓ2hn7oCmjy[gvи̑rV5~ 1vʖ>c}|" y`d\D`=Jv앦Z+&'_X.mOKa|O~.6:(r?S=7?/D)D (xgn,h~< ХRV!#Yo/j×7l֮->a˃:R FpsG@;Vbv(W x`UD ߫X_[g,ӸKߨ3oSz]GRfSl o}&gT.fID'׮][ڷog4Ӽ^Q.qrʷOXJu;kySrcAS/AD>/iBlӪoONh?v`YF ??}PBk\cĘ/ȗvnd]׍%#_F]`G~CE/O}$#]CTKϰFUK .Ï8e؎|ϰqߨ|iٶcrLuِ$y=g$mЋvOܯd~QJbE &m"}[ϱ,w{.,ejmkYmLs;PIe%'?NdID''N~ȑWt"OW< E=h(Av"0bt'[\D`8}4Wx6Zݣ!밉ȯ3@#ƈ|'md,_Ej;Ǝ|WX/.@٧%} ^D ]+^RBb3ԂoAcG u/6ێȷ}"ֿ1"o;DٷsYD QأCM|ZW0U' 92ܶu&3o;hAy*+0&#qm1'KD/;=W~%OԤ@"Јs}-ݻgĿ5u_c*On6V3<񘬃Zn>%Ovzbq:$#{ξ?'$#@?=yvힻB&>>EUIF]mcGgm']ߨfz+䲮ݘ%c]ZKl'@"- h.*ZC׼Eۮ?v״|.gODD Oܛk.U"ЈmG*)zn*! qmLm[< xinZe.Gf{h,&.qM's^K]}gGD s!/ini|^n~~ehytrM-7|Xzq|gy;ƲҾ.mc̶}lBuJz3o `%(9 ܣl.V"ЄSƦ'$ @IR\"oFi٪}L"_ƍ6|[ҮOU;_[˜R$zniЗDݬEmKa)7ƈfuǏv[ @"D` ssԉh"gϞ]KKK)x}SJjOJY]ΈG^v>J J|2۽lSDy?+5T=vD H y2 W4z1_QLtF; c?i+uu|2n)wvu&})}>O?'}D*D`X?{&Ȱ& Hx&uqҁC[x:Ycؑ/#"?l;X$_]y_@dI!ܡKzegITE5"?l2>~CuEXtNgfeW}"oiEq_fJN[rvH8|pYD`TP?*r&8x@8#J ֎e"S&bm]d}ߍ%ګb49&(#.% c#wґh:>K)qD\<"p(Rf֬"FțTEU="cPXYXɏ(2'-gFΘ0t!- D`, % uǧ>X&u+zȤ7dԵYeDZ/ڞMKL&vpe |OOO'wִH`z p`z sFBhHgGG@X |:m{Pvm]4$۞M-oen m [´ $WJىѶgӵlEel{6;̶g*?2PYu1 K"ezO fd`Y(h1y2&ܘYIM|L0Ǥ?L3Oք3O7)g<|w _¹f2$X0 )PGˮpb97W(.eMޤyQY9OAF]4I N t4xK@^Ϙvm7yI"FMțx y D'.- PτRH3el|;̶g>oM#c :we 4M2^ 3, 7f6{薆?Ӱ5qi湍 S}#9 fM$@ ^RGf`?^2&z./\mn51ܴgM9L~qF.?OGo~6@;v # vY܅'T*E3; @l܊3 lݶ=#vN1f/:#HK:YAHEgI掀%R`HLjtimjom/:_n~tQhZdqI?'K%/r/SC`:@ zP$o6Fme..;\n˫3ncls|"ݧϱ+r`ћH`|R`-%kƪ_X֝ͅ 74k3]%i˶A.odi7idU>__*g |?X:XOod3D7 \\N . HAOO 5ٍ)$c˛pcJöK3{ ʞŝMS6(n#cLf܃L#cL1-o9$L>XV[dK/ 8/)cއ{ /{rYFyaMya6cehl?zM[gy\6GH`˿X]`sx9Xr@;ad"u>;̶gr qgM7OwVrҚibl_v6IH` XlaXuRK>s 4e;N91}BcۿU=Yqݶ۞_#L̑7 d| /ú"4`8uICeE%?^iXڟ΋o?y5VCp6 0_Bߌ}+_ꚞyV6~֝3oZx{ޗ8[YL|S= L [nVLK|Bi/ LN@[q9f@;/ % `Ao}p,Q'v1]m"k³ayYrgMس2yD"=lՎlH? sWC>R R6卜10>*ܖ{V>_[~]>(-Ʉ_ YFU[N/XD/]gg.ۍO^TF'Li8+R݁ Ҥ $ zAEu"Xt]r`嘜ċH`A px{Nf+(~0Y4OM\In$5iiJ>쏍˿+OSh~@ZrD; @!p-ym;Xy4h0c/!^el1z ,G4ˇ%,HS~e%&mb 'Y #2 *i~l{9f۳űlY7TG m҉9M$pvRH#Ι@۞͑f*7nҶo0ZGJ%WE "0twܒ #.!#dcgYZv2b7aYqgoF YgO9LO6&=Oı aOgp?G8N$P[M00kD}#vtL5g/N,ߘgёyn_crAlnglmaOiH[ x{a )'t Fm?k6l}L}rz#sYk'3 ,8[0بscFny7-"vE:eFFfeRA$0{80{9&3@@ǿ$f i+zrCM.d#ȵ3rϱsmmmM:4IH`B!YezH"3Gۘ=:.ZY:+җ? cţ )KD bi7lE;'Q.Ks[ywX, 4>Es+,WͶ_v^}I֬PMpyaz$@WO+0$piY1/}%< !4H堶}{I~O6&Ɇ=>4"=縗Xgx$@(UFX]:(7L8Lf0ϘٸyYpyW7_^_E6&  )  \4Dql{tBöOfшe4̛ro/H UqQh˅z+&Dn դ۞ O"  9's~Y<0=zVWW2'UՐȆCG& ~^c 7rƴERu}t3+VtW* 3@d •fs 9@!GF4̋c'gk}ʟUט5rypcrY݃d 7I$``n8dhKml m[l|40 i%or$@GG6~?d呸-"#ȶBvZ}J#+&Viq{U '/ҐH0 fFƻ*;2#^fڣCxS4掫o1ѫ."]RF@#o xF:eggU6m7~f&\C9\\YȋH`1 p`1;KNNNt?frnfG>yȼ![`qg.2M&XX196uMX">8La:I@akK` pLf5\'(},þ}hGϞ=[xXH 1kz&^>IH28B' L3ib@^ݼẏy#(1R@/u%`+'f2$pn87B* ! ?VNa,^$@$0OpHZ{RYh0slEBrYN +!`+ % 3h4 UD=f& $@$@GǖI`ȿ\Ӗ1fLr؅09#k勶 f6̴H>2IWg#c2g/8F# q[jssSjB03rFv%Nz^.#o.17eIӄ<=']{ǜM]2a7B0۞ͬfeeF6';?\l*j#q \ƹ\;K/ L?L=bI`a؍0)+u',4 3vz^tqS:j5_[M @W3[Ҁŀ@?z1 90 :3\4@w @&2%@NDO'Aɴ{hz뭒R!,DTƄ?/ @u1/֫US+Θ6?RI #WW]V8IˆԛR?Ù H*5:feitZp#S~|z; =Um#y h?33%KurI_:-!"R/-!|$,3nM;(W' J& GY]*JGqôw܀˕q WEzkz|{{uvS<NS-/[Ih pɉy+A+Z?ol~G`jtzOf30Eʪx5ˀ&JkLmd'C%Uz'IRNH, F]ק "\oWΠMđJ1J\S%1VT 6VQ7jsuEުVぅ iYy`$x1={B \!\!|&ML@Fm ICM:rEQ<4D_:hLQd>1h 1iƝ،[f뀬ӏemICUOA[0<Wl$bKwaA뙫rGw[eO`-8-]?8D i,qQc,c Z(wzdx ,z5GGz:*SG*8UUjǫ7V0&;rtJ͒zpxx9n tOQ[&J*@}muKwԕF6òjTf]SJ)]Y " -Y#/:/embX (sZj2 +- d=bǶ \\x&KD43q}i(7{tPwOjH`ʌq]74;!+s؞ƠK#1vWf5b?o`xt썬1S1+_"b\v4P%]PMZP,6[S' (J{UoOPP궣,՗ [ҺJ,T]_I;8-3]XHaXM/Fg7*^9 %3E^LK^![zZlnad֗z`iI \\+ q\ 7pJ' %%fR$&%dGqCP'3)m2=::2c3~G=;~Hf0/3MЮZYN8orEG5`rxH0J1I\xp6AM`@\5<7@G#jeP^PEC0uV/~TZ /JRldi  kO˪t_RGGXoU|UqbM00;avPTP@huB Q|ɕTg|t)w^iL>f@I qR1;&PeU&2,-f`$\X) ?-')vq" phG N4jf/%'~?H&Ke)KgEQ</{ Yf]؊b ptCں;Q;̓'jg'To@o"q KuNxRNwC.y/a:U_t  !b[ FǾQ L3f$ݢ#ZBG==_B2 ʒ67Vʀ%=@͍8l!0As4I..*u3(stإ) 8ѨN-=KXarQ= 8J/4nsifaT\ /~2%b@!8H}LGn(!hb7z9N OYe`tX+Uҷbt$bPG$p}ިΉxpTٿ2jS.;˫%Qm֑[Y>Т̎r)7+p$RMoɛ^;x U+ g ,uG@NHH8p~@ C@71+ICG>!>Y/{VSt^/x2,h=Щӑ@iwo.`"_ `Fҩ;F0cXo9;wƱkzT:Ouу%E$Ps_ɥi;K' qfh~ q%2:*V^V^0mxszaٜoE$W:.դi=+rؠjl& +U=0qmMo-X] @~9; HH& `* PH` Hc48/WI i`td9x=dO d_/2,d_.Ӑ60 |mP)rR"jn=Kq@Aꭥ2X0QOae@o'f0DE$pnIEx&fw˪-:N_FM~o[v.* _{wՉԩ9\f٢p.7P^-r g ʀ>'e Tabe@<܌0Hrp  IYFL?|2f?NG^^$>i}mʤq+%2`cv>@Ax/pఴ~ŋpo[wQyʀc/ Inp^hݪگ{D=,' %uO g$ <_{,7Ә&ʧ U|lçX mr5e@V܉Wlh^ BV^YNjH!q(QОH8Hqr*3:3 Y)!uϭV?$@$0a ,*~z,ߓa+Иeq6 4p :@2^Fۊׂl rwakHvïa)Qgkk~tr=Wf!`/{OJ+N{iُO3޷ዸڎowwwҫ?X"sIf2!7S,jce}2]`g}Y\X& ֗k>O&H` p`o/ G. H,>wt[fONu~?A:Cf'#X 'u( c[V DG: ;#uwTE_‰XwNUwNtk%w՟GVz&N_ ]ON_#Z`O o\>7,,*X}E8nE~ce@Vx%,X|xB\JH` p`o? h!ݐΡq ͎?^DYޡ6Lˊ9_fcў"]^A:T@IDATS\F<@x$4Y?%؅~j+x@G7sYj=ʿ9Lم^ C@dνK^q;͏um#76Nı+mXڏ/ )4%`~cXdu߻3o 36WkzME@^3(+d@RYz@~1z`&&D jдDR/חAcBA!K~f[N<&'Cȴf∀9|pǬ"62G%XE7dׂd|O{Z7nu6Tༀtߙ[/u2ً*Of󡘸Tzeb@tѯW+eU ē@ Ey ,,,gjm)!zC@^fu}M/T-te!n]KH ^=\NU42qxG(|ѐnTKjzqsgRTڵ@ 5?POVoCw?ެ)⏓zid߅[zjr~ð7<[koҹw[ӆ>'k>#Ϊ>HpwkMp ,GH@~dx 3i3车Ê2֧ˌ[zv0}%LqAl0mTǑ (ٷ] ֽ |N94jeNॺR@@!wJVm vső}+FD&y2.Uږ0)YwE7l(wx8<)3|eU<礩W{*Ρhw(Raˇ 0(*H G@.^Ω \Q b`Y{咙e̅#gd~"2ήpnfU)yſ#ɨ?3s|x{[- RC,᾿/tZ Y?hnQ*6 Q}͖3zZz윯Aw,0c &`MP.s' -<|zVii9z[ml -vP L%L HCQWTfKhƜӦ {2K`N?sjH)ȆTxX6Z+XB+*P{a'UTm.9Aac4$b!M;1st8RY^&".Kp?/=upx,UEC*(7n;N{r.:Rm< 􀰨C`ď%!& Lx7VsꇷP0ſe|Ȭ?t_KnD\n ћ|(ZB:Z/`KMo΁zê%[?&LqH `,pb5lvv1e+Q&u "SQ0ٔO1_»EfL?ikȶ)R ㉏WQSs. ,iνu?--s8 @`/ `I` ;zv:jl~qw:9t0VnYnOT΋\g>ex#֧8.XZ,PE=q_C?8I+ZJ[o0+ b܍ZY.;Woa[pc5ZhILr%$@>&n9H$'B'yk@bˡE'oS);GZ}O`H`N ģsZ8f|7}.J}m}o0=X0WP^ B ӑ8$0ڍ_˖Iho#7@&EGQ}f[d˕Z91C^ ~3l^p{ " OUʿ]+W^s RĻ_yr <{_]ݑϫh˘F>-(iYyޥ!^eu}vgi~k|Գ8^$00wy[Tg_tګzs(w񻺁YΏ bsctQI *<.iqmϻD$M~ Myk@Yg8+߁*E,5ԗh_b",GlUVTtpaChOcFxvrڽhG~>)G=dn&[Vd8E# o ,o }|1Z|ttg_| .1i@U歨8.4nE)bz,=^$IoSѕq$dWBӘ37<9*%Ğg=qėklX]PF \-w+QmxSQQj89nΆrfbU.ijwEοCYŸhHgL]a晀U\ʒl/{c&ޱ{x 9Y׷g8,(T4viI#M/qvK$Π$K-u@gd`Mk'o=|U ;^m6-GavwJ/T*5Z@4zKsq/'pIEq>sQr3C@(zLy[us۫Oj>d};3W`^r4pKUhi/6dAe?0-SS.Gz 4y 9HcC䌘I@}}cI6;uwSҸ,Xj1Rmt:X-g9cUϞ|8rY` uLr앮}QnO+põbG:((jlypq%F7)>lDV+i\q Op*Z4d3O DFpgK?<7>>DW/6g, (E$pd{ ZtFAɘwa܂} 2N^LA̼kXX^q3Q L֨<)'V&y{8AY}zGê4gLѮLز݊z+ж ytr:&k3a_˩ B࣎v?=Awo6 T?+/Q_W8O3:2ή8 7(w[㏳D/u#Hs1 `~xO۟ 5{GNjPo%2/ $ rH# zW5ʫX-t*vF_H^7pL>2FMJ@:Ҁ6Ϫ8GrYUϒl*i!pjecHV|MQ}=5qXފ,pLJgYD X| U+m^J;rn').^`mQY?wvMB&x _hM|6Y%.ZB[h;9,8S^N wfiBZ>K- T4- DT#s_;+G_ r` p%fRL@*< 8eQ7hEi +NeFwL&t t}-:x[sG8@ꁼB)"(@^M^`TEN{O#lG^4Z CTx&T}5nG/#<>5}eӛܙm}}tqaqo].tZ:Hz8W`<, S ϗaƍ !5) 34;gx].+4a}bx9 uzC|w/+e@/ p@Q$g t{~]L;ml vY""]2Ve߄.X >,YxdUn= )8;90p)v}{wuin H]K1>贃uԳZa{~̅>IIG!d /Mc=ؘ'`Ҝ_x;^ﴏ x|n9{q&bϒ]l}Y`$0'#^ Ow]EQ(&S~f;ϙ۞q>\l_J7(J&f?%Hf2rgD;cs3cdAf"X^c|_cq,@uoOvΆU~:k;at ϱ 71 z6:;ʀ\q@~pnH"`z$}{n[{dBw0vScqJ}&܅|6X pYr@n H Uۛ8\Je"7<~nKfpn3[q eCmYo1m3u1}D2cUrtZk뉛zaĴ?4aiQ9FMaUyXh>DZn)p=uz=:Ev{^޹vlj> CFC)ug̳h?öpDlItJDȄDAA+&q6J+ WN=U5 v,9I`B'F&/o-UaDvHS9៧/#>Sjo _L-9ԭp-A1sߍյDOSKOpO/'ӗNcH{`{_7⻫G=KUar^~?e>ͻxt7+$o"{O{%}b}Z1K`='`bJ9 [xy9U^X H,[.w͌CE@Z2X( om'{O-رŅiueerԚ(PoToK`6!nt0#=Ì=pF6zN~W}Fm,c@^ D p}ޮ.VYPNG+VAq<%ylwfl&[̪ޯWJ_svY!ÕZgnfD<߿V-4DкS867g !`ZbfA~YIm y.LڣW*N}ܣ:k3=u^ʼnwl_zΓOjg@P7ܽxjIU[ {i3qrs_!9lc7qXv}ةFjs5&HΝW_^ߌg@kq0_=c%`n33Nݵ3փo&D u_2(Yw,Dѽr#tEhGx9a9;Z Q_%y?cxYzaha` n6y/4oǿ<}gH` 1;'>0P R;4͞q2`"B^>ʛdkoUnm66H=CoV2 -t|wj]Cy .eKC \Уe7f6gN(4fa?xht[l8g-; 7p z(y5oQfV}m;? MU!:Cڷ=LcCqF>uL!&A238H$~OL-|8{őSlL]w@O2@eϑF)b*P` j>S ꃶ7Օc͹ujHr&A#:=:h]ﮭw-wȊg鴬FrD$|@P7y_x'.gZc[&`P>QGx `9vc àts`o;T("u}VNm';7* )i$aL35QGd B3MlzݺÊQ(D!UPݥ rŕQ~oWA?p(J`:W2-c Oba̬3'o(>BÂZrQiDQC"QAϞGPzG%;+lM{V=G3L@f[[q~&ǫQYFctgIWCy:7֊XFuF>u#˴u>E93뒣WZŞ9|'/7=UiiQr"$9Gil\?f?hgz[rW3ͣRGV? [T018787 s2rL@FK9=H>+ ?H 2aO-!!_:zvmM223AOLJ9?J%zmNF4 L٫FAxD}gLOGCL~F ;ى]IKb:JZfa'͇Nt_V-/|ߗlD`]a$Er'|V 2~ŨJUJI;.GntzGE$`mGa /[H;vv?c&䯢/r t$yh2Ɍ-c",,Tֲdfػ]8{ҳV_y)xcGTyou3ύRť'ώxQ+ݭgk55 *GcvSb%~y瑣8#hÀH^H?(~#Wde""ߏ' =+aigi[rXWKL%K%g?}Sd/Xxi_G`Q`4xjoc؉n$fQ6>1D4a#tL[ו I΄]Ps0eR"YX͵ tnwqÓz V<׿HxQ?çϣl IWy:{č1d33VHbA2s7 (ǿ_$:SKħ'X2y"fOܙkiM7xdG*8[3X3Jý78ytv|r\Fȹ(Wׯ?s_Gܒ>Lx3fY[#X-Y˚8>^^$$A9, җ*N*[dRgjEۼħo p\U{_3\ qIQnN${ѶH@;\|1LDL#) R5QlU&&nMu~m&xek6нU퍓y^  XuΆ9-u6c^x=9Ip^1"H `fTg?s+BSFr.a iQəx%mnrLz)3Et8՝V+qg9H_^åߓJ0}wCgP! m2i1-,TVw]]O֒clT$|X[FDLs8S2R LOj|&ÍxnW4;on,G} yY(+>|Rj8CO_Er??|p{} ^sJUFy ?p[2XYa4JgDoأ߻' K~ = s+HI|z9(A\sY>Wg p, CF{1={ 813su,iΛUѩJ0ɪY8PbCW:V+9UK7xc;r@UϬPw[q`3wЙy wwaBH#I-8nFfT.ï)+\azyP0 OQÏ&|=@𛝹() A05Q(JFƉv[B ;Oy&U^_e^۴VMY=9 {3I'ue tK3HR(&ܘgb嚓-*</XbX*oP{uկxz[*{Wgr^zˏ?Y-8_Q- zlG (A/:(ɒ?7'PZҠ\"j֗zL2?cHѭM8C# D? N-:L27|W& u(mJ@n6U? rR'Ͼr`^o;˕G+^x;fkNб?/wr ɍ 5F L%<:kW*1 o8ⱌq\o ([أQGd%vIGOV\b?`z&:ik* }=?>x`e, R36o'gXϞ 4%`.&9c;YȘ_F@vc6e%?U@V_" `j̅(, pONyAs60(WG@{3yr9-5mAr/2j-KE{AXߌȋ' N=RI(cf3ήpn@WDl^$Hç_l,9KNROvT~{u*A߫pDFˊ<~._kv o">c"/s˴^=.sΘ6hFۄ9H|.[lM+T5/+1Q&Pg6%|! ҥJ +?22"8ꘜZ:L3 &ʲZ)KCTJWTK\[a$eQ[X쿮B{Ќ%d1s#cfvDEv@F: cr\PM24sd"cYHs> H[7 #yTv;@=sޑ'oVC,ե֔(! &n|rX݉G}t1&)9'Rgj)?%Lbɋux鼙h7V>tl WQy_hZ-{&</߉8y4b}}%ry$|*#w~[?R>~AJsikja;C' ^`O\+7ڀsuSPnѶg3)fqކ%D:-#'| rtu&9ro1, 53k׈#kE'vtskKHg#0f6T~1M'g̊LDI@ڂU, ctZӲtȓ'^$0^^$07keU֗nl7h̽nyF>xQF(Hz&:WYrb5cEǚ6J4#`"-]&}cfM45cIG6Ǒۤc^oI,Ƀ+1m-cM~,_ߕ'"FX97pPG{kntztM}ve^Ey/c CV(Ȗ?åCMͰ=Ӓ!ψ#f)l9Jhʓ7)%f_Nb䯸2u59|dhɧJIVX=qYwHa"+HלI%:>}嵽v7's&8WCWÝ^ G5eU*aMae/?Ḥ, f 3'|EyMʭ;k1$85%7~h-|v&p]4uEzYTjh~|Pk?u3dsa2?{+Mef~uO8>$ dž-v,2 lxW\yx!l,d6<2L"E69aOLǽ2}ND|'#NDTf}8;9q"̪,bX3ZޝyĜ.y:]άhHAwkzrVu [y vK/sYO͛Ϳv7Tw4(`= ft {̐M L~l0S0FVI@WzT+L?Y)]E l jA*^}G",G3De:]>uFHRC_b3Y%քx+#"%p-oV2܍N8F9ϫҴ79w7]f!(ސ(e,Ձ:hO趮{}o' l׾9vT8z: B'.i-<3f[@kJI=zz@xHߩҳöUE:+:ϝo´zLoI8vW`߁HS `: 0oHTy" @zQ_0E^1/LIYOi2Ôt`g:gP5>y"8@Sz~L]v||kw &d$gm/61:aG gh!WzHL2ҸAG^1] ӓW<֕_Θ/@Q!P@sq\v+>i\ۛtoa镝xgNM/>]1{cRwNWV|6^nB'ʜq;2Ze|{^$`vԼq©a>*|?쵠l]?7LxbsdqȞpF!+gNO wA8{9MI~.;~|U&߈l;ӁhgNAy5Ԯ{@ԎB`7n~(|0HO'4Hy9iNtYw֒ƶ]~uE,_@IDATu>@_^k/'twg>Tsy}{ܫ5#z=e8奐}M2&,:=l Ҏsps V4;OJ0H&tHǎ| ǒ5݌-~Aj-.EoJ=6e%J t? '_xDtʾ@G'px܅31#8@=7Gp9U8H}^3N)DB>|_ )EApC *2wd"R6F3=0Gv3H*}v`#I:gXD=i>}Qԩս/~BWoÓ{v&_kߠ# <9'pHc>! ;ob=Na̽(' MK1Q!,Jb4gW~kA ܿs4_drvvkZWO=[v[Л#ZR@c `Sua4/[} @ SmA&X>}awA8oWO=nM.%^mɾXӯ~_L.Q*}t폡.֯݋2WiodwC3xp(8~jcp/"qeH<@dp|e,^؆t\rl9oŵ@?6_2.@H 5ݥ>wgH~Nxzңߥ;7oտNIjտA% t63:@{dRqu7Θ7\N&`l>>8 _@gG0$}f?[`=YVbJ¨BC-Y0> @(t5t#=W{{wg?W4we;݁[N/M\խIk[~{l-o3Mf>:1@a gCׇ6,OffsUe&IuMUtj^^T?<뀴դA xnj͵u K11R3]Uەak蹿ϽÁx[SQU}wv)Zt|Z,L~㠺{qb[t 4C>_wfe"/1JqH|?nkcy$a8 Ɛ+W B]X6q9@,4D UI KfVe_ NAgjLiaFWjók蟖>&5~a2&u6Rźj iHkOg:z~|a=i/P oP-tc,UcFw fz@=Np¥2ޜ̑F95,Rm@ CNTQ>RxA~HϘ}8HFf끌JH XctV-,(ǚw{>&b;W]s.j@J۹n׵:Wܬj? [um7F``-CӡxV•&SԒG<0J^1Yr+) :u^Ѝ{o on/KͤTJDݿ[,rþ M':"0yIQ+G. ͝NMEF91/$cz;^LoU\?;HJxۺKװoNL?^'YNdg*e0Cj5GU4 |)Dcoqʳ1JPE8\؀?@gց)<?&PLCӃX|H،ݐxAeNtzU}fGMه/i?{+v;_ޖ X]E}m gZ>>o<9ʷI}$SՒ9A>3EH*Č]Aoن1uIn rj1hu@{@mԝMS=32fV [OOt IN?r\r I5 2r&fD-YωCAbepEu/M)sұ'N=cҪcӲla=pѮ_oٻ?qpRqz=zENSz*'vspGq8I*+j#N̬q޸tXG˚C=? !6GΛX;XŤv5;ONv{>`G:p8 CyVA!a%DSCuv][??e P?|MӪinDwk3#*96eo.^hgRaּ %L hhIds C:,C(;^3YX H <*3N|,ɪoN)>⃋o83ᓛg߿O7^nEzzmzk'TO]jjufÿZ߭]e ,-جgԣ룂ǀ@Xl 5!=-[=Y姻XfOׇwL'PgU{/醨 vwtfz~m5"z99sYu0+!Focnhz[g MOS &(s1h] WՃIYꭜhswcMg^Nҋ0얟[+.|!Rh.|_r=,:]E1y0f,^ `62XOOIX;J+Í#M#" ! x a=1CF ŧ>;~M'\w~|y YV:(WPbk/?iV#z}H໱\]]x`"3qD+O0O1 `UpPoc6t\"J#ֲ04OiS?zI?wU;1VȌؙgo3 ML`UëCl,'CS%*V|: pX/$WZ8PX]>'ČzCZK֓F Bǣf⼑Z46|l/Y̲ƧNj)O߬wo^3zOo}jx{{yM^N}BIC: u4A79 ``3)ܛy_x8g7 } 27Ox]>!n| ==<e}ݡ~c^>Y Q\w;}k]}?iKK)M`W^N\ޮyT{qwWV!lׄJt GU<&Δ"j:zi2SҬ棆VDɲg}Wz:0tYȦ=8=rFKU{V}p=WށԄ8(ֻIqd*7<7SD6ȱlc׈D u_gk,vjL + ӂra"Lȭn?[UKWӳ]U1V:X;};Rv?Atvgh>|;R^Nswe6~:8!$;X,Tc@]͕sl,R ցyBH k,c'1DdOdA.Z̤ٳ3Utmfh a"kM}I,3t]mi|||z/_|ߚu?ɿUVivo̤YM/Xo JIވi]GIdj&8SȦ0UP $"1&I/& \'z % xX(gͨIC1ȋ(B?\X 5JHu0$I( o~>r>s09}7>[=Rw`x&Hw?ڻ8ߵ.ѓ+h?¯e6rO?HCAc4|ͰFvҍIotXqe=cٙyu{<+g>軩9߬خs,s~Mܺ'\sv&BlD* r,cSxƆ!7vWxn׏4 ӂ`MFv"QXӋ/1,U[_m䒕Ё tMGtҁˍH'Qq*B!LQ23!EI*Y\0vg\"<j`,'J>1L۠nf\$_ܽpvhZH]@%0A =:B'szT?x? 85dv{*@^u:9kM7=bJhf!h dz$2`Yͧ`1;!P֣ s 'vO`~36. :pí2vd 'U*vm1m  N:{mTG};_:O\6ML&o=?{sçntڕ܍y][sm+:7#gGKGMYϨG,Iυ|fxPk҃ir]uɾ/kbж mDf&߸wusZkVGUoW^?Y= t Md$3J^!Wؗ\]asFs`P9`}} wUY*tcG~#!vie.;ҁ YF]=|v+D7I~=It8/)ʺ1@fsRW]Uq7`sE$gN]^Ab\_&1C%;M=Vp9A> Йs+C>Mwc+ q$Kl}Ð-x_apve>46:5zs<|R/ZC_OSTث^飽O}ޡ纪o_ck:灹ߒo֒ڄ o.u.+\Oc5q;헱 K*W> PG b(8p}0 2l2'Yy$E1)4BĤ[k;+}]7ŭw>y.+۽~;Tj>XK)MWoJ^hs,*IAH,S VBZA:`ʇ3Ayeà5jvt_пݴ6ӗ|q{)ޣ7cwtS+K;ac j d΀#ԕW.LrE\vv~+;U?چRcڪzvVUKe+جj*\o/_Kz"Y;'G̐Iя[*v3q=ib4n` =@}+Dv,CQdf0eJ[.O&]L,Jrpg0B||gps` "_R:a[M~;߫^]TϚÿCW?Tߠ&oZT|0P 8+}@.M!arYYU0~/W8Ij2:Ga~v`gz7 Wu%Hdi}9Xn@Ϡ>[w^LU5Q+U;:T8GNvE4q1P ԉеIUڴn5\[i dy o ]_TU7>y;SFIs=7<t_\_x#3־ICd>z!(R Qa E-B6?6Kl´ \hɔ+/^]wً> In? NzE*iwN.L~㠚ݞLIU?߰jkU :c!qzMtʴ`=B , z$vGlBb{m{\A.2gv.a72Uή8Q5h# 2X A_ڠ|A}(zΦ -Wٜ=F3n5OkgpW2cFl:Oa_GѶU|zO7VOջjUJ߱;[6~;tDVm?زyr8$KgZ{F!P҃)[XGiRl}E"u > T4GmUO&iU7G;:؇Џ(HxgGu A"%If[0O` u.M43m׬ፗO t`%('VBP>ݿUޘݯktžN$,mGCdh쿜 V+1}tY+ȭ ңVТDLd@^s}$@t ĉYp٢H^'$X=H9"g¸ 6Q%:ۜiKtٿ[tE<2~|5}@ N o:={VR1Qq| ɄWkD!;6g&!"1r[:(C{D-s`+t~ _ՋH(I Sdp//G'l|~I8U^qQvgn+|qg?ߩ}| `~VNljVM~uGG7S[-It:<0KbR{J3d,k#[֬ jly⃲2D0u: @woyUlޟǾCws! RG4jc78i(ӹJ3M@᐀-Y/  X@C'NҺܧlϫ1/}Oˬ3Ӗ\܁4wz?x__4v]I_9݁Wh" #J0;{E,Nqc+Cp :Գ8M 2 QyP cÎe(UgϹ Zzcq ld( 9|_n\XCf J(FŖ d``"73b6@/׭֐̤+Y! HJ1ceXNaPG`3Ydv#g`UroP|!mKc#!^3qѕzCMxtYE󰓯`(.nV6֧2q!FSI~U8XY)z;P>K_}IuqZU}fgF˛\yQ&Kl[F.5jtǪ`TÕ I}-oD_Đz{%Fνh}EoxWGaM+Uyref&>@ s!rn|mųc=Ǹ/&{ɫ٧*@J'~I}V״{Q}:A':kܛ[ÙKI@\v5VW{ s \=._<Ŋ xhK< Rz 2XG2/bX8mN_%J@p `]62ɗ#y{ͧ}- ѕ.W4n͇_{[8b{: {)ɤM1w CǢ_%߉G8'3.8lWc< "u~ύu:Uʔ>;PHn, Z@m'Ãܴ #^ Ep ;2=_{ՓIo=¹w-vL~OA谇~x1R%ʘbeGa xvڹ Ϳ\)(R%l]C:RxV/X2e:}s58!F{ A䢜 v؅ihoq} ;{mO ˧vVyಕ\Z&737(/ѵA?^/h?'zfe0Ck)?G<`Tc#^3lƯ0&sU6 ,n2lAL K=x4Q&y 6@: E1qha;a{'B-U}>G{G|}G*9rZ`ǮZr֊/8U4rab{Cv"`"K(*b)B1~pqޣz y!`v~ akDDfkԿq=/ }Ei* }^w/}:O?\z'.9[嫓tzN]zfP*W/>hcɗ ϷČ<!&sh} .@zwq~s:>oѧU> tK('_͜Q[}&oUߧQm{p,# tIXIf^35QNuB&XQh%xu+_;1!0Xˮ<UA2uH0!:b<\oE#8*$8$P<g 85,[Œ3]ȝ{(ef$]|.{sڻ|KpH p@#qB~9޳wmAm=yp&4xOw<2L>JN(>3!JG-xQ3[/qįx^Aӵ_{ךzW>~5۷[_q9K5TWt忣U$^f"y;K x .~`/SZ`TuVI3Dvc^5l>䆜^ދ x Y0H]F8Q gw cn 籆JD_NAM. S:dyo-UM84^4 Z뭘 "_W⿢'77nW{ gQiwHq⡭XA&p86. ғT k@P1At)<+P` 6bnJ(߲QZabZuXE ^#359P_';b4KO, 3fu<,3+gv|7tk}zx Μc~ ((ĵ\yx<&PTb{{ҩD'r; V>qBu$&g,era!xF 3OS} Ge@;,Jkƭ}HCӂؗL9^ΤAai#}!XMf\*2f?x\W"Z8"xVbs>Ƅh׻' 96g`{bK#O2"rĹ|.eIRUT:avu>wkb=ƯOwW o ޤiw߯~X}BS(_؞uJ˛_:A>=?R}}^]ǫ~!=-5äW2FYnL/8Cf<75sB(P1AHdHO(hx Q$if=xo kH hdzwaetf~UiiuͰSiQya_FoW{D/k?K'?G(w}Rω~8xq+8Q2TqfJ= gd3WR8X!;2#?P.EqjC) I~(3qX9WmBte3$b!a.Ʋ80p}#ۻp9KxMmڥ&_+cW{lM_5aնtclq܎5* ^-G AOt*ƫ_ Ku@/[8G-zL>c+8ABzJCBjU9~4\x }Dס<h2ώ>/$5P쭽 oJ*$0a˭& }gDaȃfflre8,Rw.^oG-(c5ncR8 R8.q;]y,1 1^.4@Bٍ+ D1Y{D#t.u#pf)GvWOv~롬S46eP2\?sBj00(i{o t=<ANՇiA_ƅ0ƣ^UWŌY[%kA$\.\1[+=jm/r|!fW{Q[PƐSt3S7 1B׫~Z k?B~lʳ2?a]-"+1W؁n/ڝN'_}¢JkЁr,%O^MOw^5^+%WSҭ|/D8˳'|z=`[cAD"Bdr̳$ˆR/3r,m  d.ߎ!1,^H C4+H,o6YW0r2Rï.2k0z%uAt|vn?chJΟn/v)7?~3=z,GN^kL_W\U5v*+|`@p}Gh.#ݎ{Gʪ Q4TNjlQb%٬Fջ9S.^3'Qy>%K=d0#3A9v0_*%,2x>txo=@Zcd`+KY?&r $S!)ˀ\^2줆N|b~SW<6̓|5JǍ{ߨ~oLEԕ -_M+C:wyN;tFFGhƣb`XuTsyT]9ay Ҫ6,.P1eؠE@XFvk9Hsœ2+42LK{* EQnd#,}0C\#,28fw$\z`L"XRq _ScXPo@L8vX{ZāI49Lk6B9lqj1rE$aitzWVl)|}48G&v :wͭiumjGj*ؑi<{vPnrtے55oҩv3GoK2/c 3 p}")IB^.Jb5cϘ7_A{ yvC=d!.(822SbzJs}2cYOńLgTqj8?X9@BtwT2Dt18C+?8$+ˆ ])La=l}R;\ʌ*D  aJyt%xEr8#qUI=ctf#3 ΣτY n@zq7tL#iI -@S'ڪA}{ճgmSWnqA,I S oS_jA),?.dApA>Hd-ҁ%\v(4],4+tb[(24R>`_ ,3wd:YuzE?+6~K@%7|G5'_]z^|}WؖN+>pq C+E1{A1\[X h.se+.( _g&i2D3;?QxdpdGY Ey:8Aㇰ#D2@I7L((B^a bM2Ft ᢌ$蟏ݳZOL6.&U'c8$81̮>ʾ,s@ FC6eC-޻'շ? tWA(ؠRޮ?N_ )}k{TU 6u=I|}4%<<V&K1WuTDJQy f )ҁT KUP?hzqMGY?kk*`,_W8,`_ŲUT'uݜg?QUoު%܎b'c6'KovʏD@IDATǗ^K.TtoXX|ih"g(HcMJUFxnjc \(ڌ879wy/aZmDZ>\l#l37{oєCdYdO NQMڡ7,^QdHEm k P_J~^+ʅW<@-"%o ] v5@N08i(e.e.> \y !No_7l}O8SԆQ󢿈wqPل`WDN:@[7(r;0iݤLw^>yw ('p6䳣I{;߮T|G'G{gZU7'j/-E٩ۊzOqX,[te6._u8IeȹEs<* ( Pp՛ Qf<<]@`3sPUP/!L_åX#~A8X#$F2iAÄK3<[cl=+sv(z#VV$rz g_YMR(RO/h및hr$o,fvvv;tSi kt`('VkHUW/nL۶M'o _mʶ&C}} ,v#˵Z$r )|=N/{|=F^%lr ߖ ,ҁK쀿Oα0K>N K_yVd`%[ŰE< (*룂 h3;&]ck>cm*,fVVU˶)E??&o9'dzm;^G^NnqGW?ߧf>4+Akk<]]$<ߍYEt7R)d 5E]-* ̀>KG8x^_HG9JweOK eo P?/LWs߹sPR_0EI> P^^V\e7)|% 2AA6Pܢ) EGe`~ƎP|@;/swgM%BqQp9=tek.?&_cOu*۾WYWv-_AW:]ee%Bұ2ayOzH7o,)+Ya!4i8ޏ}Zff;^:P܏spYy @C͛{^bt/oӚ\ճ0kK]E:U=i;~X޳-w\Q:ͽ󟢓om#rx5h+Hvg0AxܘUs1Ƹ(ce&#\}DXx%>KQZ:7A6R.L21E!-DcS6q8{vHy4 2Xbqi3^OBH97qFE2(fHfVx}CP9vMNRo9)gwg#IJ(W  D,@<+ ]W+~Lȕf)yJnCx//'sFm9GWVd>BM׉tZɍ zM#| WS{ l^jB}ڧɤio߫w_m^m@957Սvrk[O/v6 V>@C}} , #|=^\C `3;@jm픎O?cm3k*غ%ۈ{_}|/ѓgۮ;180$#hr?AW!५&+/2`27(*ڮ4g 8 ?j iD*ATz7Dݐ̉@ů7(N313 ~Мdl9]Jջ+Xh>rES{x\^CpreYǹٯHJz8I8\*P&8cY4΅ ܿ`x'U9'~Z$B`hG1p2+^5CG8Q6pU[\!7{JQ{zo?|?*s{FM('6wm6{S%/zq9rVr@ 6Yyͤ!}eL5髏_VM\:c߆sp L~ Ӆ F:$s3', \(6ktrsh9ï=~j-lW Z ^izu}_^TFg]1Q6.X /+C^_InV_҈"6"D>#͇+YvCT&A@Cnl^HXPIrDa'J' NՐcP.3ҏ죁bl!q99,rE^FHpD.EvĉH\[B\#a@Y*2JIA#Ang:Ծ炕KԾM|=pM~oX?^F.ir wOs“)WbWPZ"IDFLOt> `:@8~q}Wt Y%j۸jW]7&wsմ~^sPIW.3׋_JA0_P | SSC ɔJ[L5%gw#HXd~|.G؏<{C/fу6", ZYMWgH'nQ~kf43ؙ<( ("p㰀~dmDPyp`K#q@7F/haHHpqnl.\ivnD3ey<%CY(\KՅynj9}S8<$DȭhF5йGA)&W! *,r:0ԓuC;n _ؼڪ Z(Ώ'u;=Ӯޣue?ڈ~V83  Gl:Pf&N3]B&H$@,S6߿K:5װU2\ ;aC?!1g!30'Q%2ZAH1oaI@A]Mс(c]Gm}T/,/jJ@yPۮmP'??[_.!= 6fs'&B!n(  ~WlS(u0*2~{^51:p8x Ez%̋pV6L @pXSu(a-4FzHArhz(62`U?{hT*+c b'̀9 K*\X  -h"CH]0_ ZWs#WqzYWo ܿ=ed8ƕŨzeHp@Ka,{o{4Q8&(ӶE`[I<oq{8L^Aᆅ8]5 ͥ40[}uj+~'QĆuU<{mV[o ('6xq6oY&5x-zKI3;/x}MVNN3hUu!=-( =Ŧ(C[ ",a\X*="2f0n3y4v c.˖w@xZoS#5oP0'QdX#DDH7+8XdM.u,۶u[|n"nX-ȆSٞV/&mez)y Wʶ_M!yH9|$z< (>ӕW.聖7bJ\>I fa WZƁ|>ҳ|OCHx[;>kB3ϠL+ ʕsƔ Od}4ʇ'Lcy%*Pvz,j(|Eٜto'o{_Rqts,lSʯlj]yovQG@OFW&W{.av1X:NL} XYzX(ntSѻ>ÿ}s$l}K92X<$`itzWs 2'slA MPp@C'^q[:E]o¾s(ع%]xs7,ê)ri-_:J_N EPIǕ*R^8䉁Yp'JW B͋H!B 6>0T*2dz0DJ2 4$Y"_l#CXnНʃyBböY|Vo,axKTNz*]m8h5Lh4 @}% c(y-,`'@HvvDp~XOI+"92qY0ߨ.ETFIg4DF rp`Q";yXuOїUvm:o^~{շ,ۻv_y{V)M:IN;^~-%}uW:|%I8@^__\x*-A@Do5T@žאC5nDj~pCf`0^"1%ȹH'9$(癛qUqnX ;@31~[57I?>.('h3?94Oы6W/!so5c {(+nΞCH"^sv']bquhzdSbŲ pBY>B)$]Fʮ&GDZHAs.<Z״(4f*B #I+C=?8r >' MKgožWߢej:j)IGW:-Q,6VGTZL; Wⱟ #0$/0[SpnЦ0 48~5Oz^f'lpcogF:q\am8q@F7!ԝiYp= ᅁbT%l@sM-uktTvcn>W;}pY5u9+wu_W{joҫM@klB>( {!a D~n_#cQuc lfJaaZJDAp9k>҃@c_UVO!a sam 6nC;?05!30W/2VлjwV~Cg'g 9Qؒ3 Oԣp(Zc9.@ݪ :6/[('h5 #߯@8g3$3ׂKpC8I+4B\a}65VCD2$yuɥbMp5zz Hz^x=N e@IyC-nY<Q$ͬ8"  $FNhi8 9v]>=n ]ڟF6\>T lO~_jv8!A ?Z_ay{TK#5YKc0gh CsdKJG}x~h|֣4ڠǎdDKWLG9KP`CFYDw XՍq]KGt`t ѭtM?/#%y6}Ϩp3BCʈBڹG3trbn*Ai3w!=39n|/_2+)Oc~N%. 9Ƽ 3YK#1dXwl$ɳ6lz(r#r4 xvs`ٶbMcz<><zbj?ۖKӁr`sb+ykV3ymsc^}*\_^3054q.֤G%*jH !ޫz@PryŬf=Sj|츂 ib'"~4ҹ>2 Qe(Pv7쭽i'Ί' qIZFQdobFP(s}ܿ:9`*EifoUJ4Xtvq18QfY\wEѨ;n8Gy%B%]'tvy,&h+|fhǡnzR0c: ÔNuGNٟ^LR@ UFqPW؁Iti;k'GwκOpQ1u9v5nf^MiWK$j0bǂa1ʈb,#%6_mAi)֧u𭾾`0N1*hP+恒.H9`+(_JCnHq̩`_SӜQ8$ < 32[aH&2Π1$Ήze, q(h:Y8p=(T t{t뎧msD(@#{H9p1r״7mz<Ykf-WRs/0Q⋣ōYgKv A`Ӥ4(2Ǖnwǥ&ć (^x8`, %Dv=vi,s@(ʕZ4x~'K }O`I6d) SaEZߴN_7;carE:lj%4qBREFP<0qlZw_<w!vIix ME\Ј"LFU85c  (@cJPhh250#"΃Dy4V5E3ȫhO(=\M7kW$ۙuܪo6][t]O/.w̆oH -CYf7!#%6_mAi)֧H=v if0YYKԶYDks"!}ʫC#*fn5WQP^== TRc'XAV:{:<K51x #5A!o asRlnqYhF쑺 @nZ?©xf3dZE>q"4.VxY0S<2uJ6^%!fcb؝4z#~Kg .vk0ػrIW<^#vͫOW 'e8CT=lQ*|\=[]AB# vz:\icjnJ@90gî!.n_W|h+vYI&JM =}`.qˢ*`!F3e[Gsw 1&݌Jk x?z9oXz^eB 5b uQ?$hUpC*7V/YpwHRLz.jfSrtde :@ǥ}eB\1; j*[ׁFnR _~:89=įw]gWK-$SV#4#-z%f-aOr ~Nx1"l'pQFٌ<]h5ؤqu!sqHp8'eHJH`sK_s}gW&8,BJV<\Vb|Q17!^jѣoˣp>E@;TDFoV?늶`ŌςLbPuN>7v@ܰ߉ԟ1БƬȀx'?tn,fQ@:N|D=xߙ#Ƴ$$d G R5\UZ}zyLy>p\=Ɓ[ݲ[`^_6>}?:b`>7ђ4$ }{J5`R_N_f@,}}Me)җ5pi[羾֞pˍ [8$b!3<UA ./S:ғN9i 6GeCGK;5oOpF-w`5}˃WO.}WU͋ A('6h16iw|@O0uҋ@h-*9bќ9y&#WA.'Y̜חLjGH?QЙ?Z)t)`#7@GmfR)rӔe`9-sA;Aꀕ%+nHU/̐Ȫ`0//6ak2pvrP3 >js\FSJ|^t快jr֤W,@9Pv|~ݾS{Aw^ҋa@cdgW9qyn>7@>Cd#D[%]༔b"37B'%ؤa!\!\2ĺă!K?rDqgޛ4ɒ#gf˽dl#"32ҧq~%Fnse6YJ֒/wQ)[<PB 03L+2_.B~"D!`><:6L40gB]۹;c3U9t% $Bul( #FbFG@,A3ne0S 1h =[`$ۅNF±|0MgKI23Rh 3B'+OEοsHJ!x/hw6I 6 }qsxW4%"ɋ2XG<388rr ~p|7+_Uf}WwVA瓁r2w>}uH7A_eJy{aة3PZE<[k:o1>ў=O@2s!A9w;UTI)!xAɩc5T2 l09:}ŹMV͈waKG?2@#"SiSMgaE5Y?nC3(KJk >4 L80G|[zf\z>"ZF_u ƬA\`D-ua:z: U[{!Ƅ:rlc}l;8(@Mf@1ƛllZ~B|xSYVDn (BU@C )!{v*Ҿ!; G.8&1~4mWh:O+H]Q@qՈڰ@WJD0A L蘼~Qo6m.O tZu[5kz @E{Kʼnz/bD {+A{:ty.t7C>2+Np@`gG?}KlC M% Kĉ 6J#9#!N0J>fD  ArQ\d27un/VG 3P.r<^lŏ_ФŸ*^jT>3>9 v":(ꀆtD]4L@ CT% /M&/#4ˋx .fbzXOHzsapRSBwJ"BQI7ƀ`$x/G̅*Duv--VRݩs񰘅ȓWoj)Ī KzD^ !ޡдCQW̪F%W8 I?~>ɜ>A%||eu,`b[9 _=mao=؎K@E\3 ,Rq3Kc$>$FN7 .!%Q zV=!@|-?(^'@q-oi0F.y+jX!U}M?U'?o)5Sqy(Π#ć۷gj}C?`0!LTAzd쪊):šz/]8 q:G9Ka8nKW#>8)ME?jCLp҈3ƶloqejB%DĞlx_pƥd@Y>bbqA]vT3&=2@ig[hz<)eo\}çۻ ]cԻ4<AQVyr}ȇ@xG*jl4?,,P\Se;m@ RE>h׳l=%TٖyTfa34(]*Bۥ㴒U%uoPv dCfĝ@G #|8`01pru]G4A.}IgqqmLEPht?z^~mE=B g\8\&^^_?}_]ľ`u p {?6}Bq)Ywku s!XD6 Ȣn uvue86.73alD|(MfoL/=Gw(npk/~م dA_]Џ+CwU=fwSօ䔲7@oz.VX߼}bk~NYUeYc8h/|0`֪RO?f" {[f2΄aѥn8nCR^URE=Na$y0r1Z=C@,\ Gaj8 d^uP2f, ho5^;Aˈ1)*0*X72SmuE!?!h[ ]YPȗOvJS̃/AY7ChTK% aCm{DۄXkgn›O ~ێəƧpsyA:DjYUe3Wu׫'W?>#we=@9;[*vu"z{ @٠,q6^#N>5= eENXYw0A>#ӵpiL/#Cg/c\?VW]I#RܝSs#J'fS]bOw y3{ -`u4~fId/-E\:&McMYgO\j;#%%6'Jk{F4Sq1!`\a_k76ޥqfZ\[EГ95˱tPJa T9J'!>1/2 `d8FI+$\1UyC$r# ה# oZgVf YO",ׯ2Sm# Dc)r/IAs7J2X O˺# &(BJ, 9:RfM!wN|EU|0F n G&Ÿ?!V9gFZ<8 _^{7ٙL{utG#(0J|S?~XXoW1GQ<]ʲŦR"%W٠'#VY+n5OW?.KPn!5Wӭ,ִkE r8M &A'ܰC8b z'?0<:l|w/= ƚ)k`UMheMe3@A6;:nҊݿ+lΟzY$qF|r]}5_5/%E3x4\fg.磢JQP1dJ`'aڧ3o nbjq]jBP`Fu8iu)x\K`1Uk\K6(T@cFyE'DjOiOdIMLey==:ok(L&sB_%Ѧ!ptp+3/lm[ՅmU&N6 h#n^ X1GbRɭGQ@o".uyihF)OAРZ!g֐Y$~jNA nY5_?X~ {٬n;˾-mه3>3y6tb^I MEHm y|;@f *>Pm5=Kjz"xu8RhE2}y WFӓjcMOpF4=s8V!`Dh`Nl0aE w+ZvA-O8e=g^>~Eyܽ'd1ogHE_דfl#0Uu$dB=1r\\b3Ty~_ϔ&wQr73?qGj&Ea8ǡTj(7-̦2+5QKξe(.rbl,f B3{sr32:CЖcfa k*zo7N`p~PsA)LB8sFϣ%H(kgMM -^u@'tb߮ K+µ/0+J4Վ-P$X4u}|U_o e\8;J_nk:N5w>/6Pת4:Efh+BflG@w ֘%knf cYB-xZAY]]i;pBN0-Yv$||Hp>$^ @N`e>VG5O+fw7;<1<"l!)ba0Vt%ځr3l~Uܦ^;zW_`d\ҿU뫇z0:Eup%BeGRKL[D1 ^jT0sq xQ'%>#j@w.҈*EeO0ٚJBUH"::?ߠԕC"3lZ9tdTt4| Q;᧓-l@۪: ;jҎ6T=$?ޥռ. nSxϨV"WI^ 490%Ĵ(ʠAQP23&8npä/Kx_!na?N{f=f9`#P`}`/ph o-f!|GDɉiߕ@єV]8e?/m»k- aa[pB! )hV *|Qhud@IDAT=\U|,_| wEVh3f#ܛީ/1G (SNLxaˀ@^z, */!B<\OL0ts qe8'їxhp't]z.Sn}>ӷ^3_jo]+@P1Yq><''h[֐s2.g J@NvB3:.Ī\ dn\`:38!a&iLљ#uE|JFd I(_Ugt?g- kD/* 'XU#qR>>Ql9&jOa`/ =ɹH?t|U]_yBز_d:NctDZtqP0Ӫ5Z1|083|Nyomo߸ n>],\R8ft 1%.;3k A l|Oxm_-N +ƺ?uV>7(LqNl4 C(xB~itX D8`,P1`KW;7|[wϭ#r1~>SUm_+o>CJC~J}( b5HRN3<qJkPף"J L#gFpqR mAU* +T=!-$QN #JaZ28lFiwi8?"M{ygھo}}2ۤg9`.@vKqwSeo~Z)n>s}Z B+n32`}CNF%i (#a{IAU 8a Uf?asp /0~ ==~/Ҏ}g=y:\3P.k-ڿiwmu(-8;!Y'w0yɬie7hj;0fJqCWMJpZxdS7U'd1x&^۟IWE;ԣsI?2PCnCiSS<' yHґMEmMⲞ-CzCr_{fîݟg=%d\^͎7; ucnXGj%`w3BizvM.B(Xz`<3Q#.ZCG3G=䟟] \Xӊ|R A:[A~}0vP"Bި2W'E7,P 49uā63}`(e/PœEL?> k ^fE }?Oz"(HG֌]\5|S'Uiو̖$1#i+qsi0Y-b(7 sHPpi ua щhqHRѴf2 |9IܿN x"M (*x24<艺^qcAo-|h)n]hafQ͙e-,hFLec5g`;~b?oݲWe^@ÿܭ^ pngVg=T=Kmg^kʿQ0ƣnf䵁S c PHCč Bd@:?qCǡNC>ȑWK ZPq-Nx|BKv\\{Y'3.}9+\G?3r9 qu}@Y3`V2R}CͶc'r uMiVtP8oRƛ} 8v½]{Bpr}kz2]qjB<]01_v9:qڐ~?{^4?g˟'l}^[HQ{wVm-7Rh r2< Q"@0M ówFR?.c“:Z q7~*w5¶~{%Wq|0d%fd쐗\ۧwœZ!KQI*?ʶIwiD5ga`C.h`1U_bgHnJ ws{CWT`3P.<ݿi|%rJ7XND{P{' =(4#bؼdq$7oo@a%>orH l?O'-Jǟg݌?~ChOH.x(/~3\I+jZO(0&p(2C\4hav;Fs;g z_@ތ@CY^v*}8P,b@` |! fAM ~fsOTϺu}=ohdtͣ%@SMK5S0ZdڷhG_ 8rO =fvow-O }wĿ- y$TteM*( 'D'FP7mAdX6&7g ba71[wr'w2d-+k1rgP(\vӫDm}:Evh>SPD8* BCŨg>t9i@NhKz\\+ G;㼤 :P|<a[\ğ)s&"Bʶ9~X'hkp`ʜ*Ddp_ 6w;'F%DP6tTwfwwi%g?ʀg4l_Nn7?lmbQa6/w.4xKT{=C7cӬ?=Ѿ=t{?Z^x5wo[BtErDc˙'d5hP!`/^n.b>LG4d#6"\Z"^O}v 6ME)Xk<ސ|L,4%8FG3 3׳KUi̺p`0`׊[!UIxE1բfb*"d+`7cJOs`{:CZ_%9<|}{% =aWk]_`~ /"Hн 7 {@$/Œ.eAbO,B8;L d%c(d!3Pu ;I a9$@PeLPta4VswO޹w3K譪H]{ d3'm'*0ȞqK|4 r1ɑd x柟ZO/?wg-` [^ @9swezM t+\?86nOπC9ٳr;XA]=10!]P(>tUB=( =lk'LqY[Vn=]iC|zTUT{72nB*HQSNdTb-jB/cvZjVd+~v(ήˎ0!酀 'ؕ4wzi6>%> %`X fM;ŀ5 fK}=ݛγӪj tu ?.Wb wLP Jcɰ0VY%(sqRjHWtOG4rq Xa⓶7Wz&NJ*OؤCWXBxlA 5!>Tl BSW5^.p+ݤM1kMnhB]B_2ttq!5-iQX/.5=LX]#S5pTq9|yOniu sUwX p4Wzknhz\jzp&d8MxLcM 8PL׾4=?nǙ@YpxjXw;ZJO]~r#M(ŲtbЭG|X*#GFy>mݨAުű`$j MTA၏paEPLhT^k<FKO<ԄaHUh 2(e/ ZnQBZB1j<½-_ bŸez:aNM~_`u\ߚE~xD=%eabJBx*`(> #7UhMiO(9`x^72|9'u͹ɠh^C3MզZK/.'-VN)3;Uv;X_[Ÿnk-e>1eCT %i:*Q0ꞆJcK^fcU|uf @gy`@wku0Q} rL&:JƏm p0Dg;_?،L',(M{ xX#%2`BBXp>~ʩ|m+~Ok~h+誹M6 P$NK싅pqY)yHMT #/5uS5u$q=S%'8;Oz]rj$p0PowipʠClǍ{-( D!\U89G!MN'샟&G=>t'w=̜:W+%B@xEԸ Ϫ'_Pb><+. c 5fF؆ a'op pNu :N{j=X,A]pbcY7 8tⱎ 6 /Am7)C C}]6&D0&BCFaQ&jk`:PɻRR 4~ʧd lj.Wp>Pr3rb-^0G쩨}izOfڗGt+KMfjZ&hz-TY^A481y%g~&J@o]jG{~U]WMwaX1hMhz4ťfizOo@YTs^yhڗSN6tra;nT[S20`0E݋^'6(h;_|sthu0u0`c:QZkzfG9V4bMKX4%U iV59CZ-␦zIN uˆ,y~f@?o?fz̸"RLoJpoXӛ&0[f [4`%|?1Ab`H[HV[n^A}n(PǗ4}Hףn)8K @Suv|7jpZ%@YL37t mDn.}Dћ-GR0w3Uv3O8g_7^je9qTfa`FJ;:D HOW =77߻t&BifUMl~` Ў;N/L>AAVW06qA~S_ ,P\ok-%Đ܂ɹoאr2zCTcpR4wܸ@*zB:zd3 ESZXzHN4}:f"m<\^2|/`%t8hwN pÃu02:M lA8AÙOMѾZ&1'L9iاEˈr^"~eZw3:=]IerxDCrUgSZ!V)5/on$([λ)J;}ݝt% ~`' eܸi1Dȅ"E`TEH(`d^JL= DRX$s"lu!+n֕hv-4^{&Wf)[76ϫV7UWLwc0 /2o L=` Bq۵a@}xHF!`rϮñ# \ p[ܴU~(_q@+Io{p]( n| GMR}v[-w'+| dIŊ5=fRewx*Ψ; e`Iy@bMǵXr6E@ZUfXk:<.GB; ' 2Xz7Yvngs^5Bh_Y}Rb' Ϫeʼv^ۯҴEVŬt苌(Hk -hEuMU'r!ZF#6ą*doڼm+dJ yjs1&@z:7lHP(B+ucDc>`k. HE7YX}Vsfrp:X[LjCSI9Ԑ^p!CTFT5RITC3Pӫ^[zUqb'rIw枖P,3{E|4 +u5g35@c Rb HLGjXӭq)AY~iKZOt9?n/-@rg:gp_70"ME,l t Ds#۶t;tvb95(YM#ktEUҒ$0l@+M~KLecz?`*nr PoUz`$ a- [i;CfkH;cF9~{f* X[@ 'R5+հ"<IT^"D5'zo^}K+qV8sfp+;_m 0=]d`Xꖭ9+j#@,UOH5k9EOS7i5g(|!~]LcqCrff1B\vyjqS 0mMzS={I;c)f\Ȧnh‹/8O鼷GW[iw(M%>Аμ#!Fj_0ժ0;}1åA$އ{y>܇b)2o| 37&00Y: MbSMʚ6jW/E+rZ;;^N1ǏKduّcy u7ճ/5 (\lS~ir }}}4񜱸CzCrT}kzNT;9*'e1›R B|˳kZE2lݺP)cX[~2z>mi?8+xtxP>U/ ,ۚN]UP5f$vpK ?>vFf10QG,.b!P'cCCu2430b pSqpǖcpkmFV Pណ۫!6I*8e@R \=kq"t%T `g@kMglmaՁĭ5MO5 J>=BёˆKMYQ@i|i*=xʿ࿙OYf] }/Lcsx};V_j nLV1Ə7@ݿ 2bSVàL57F⁜UӪ?<gk(lZ*(x+ x3yfI<[5◕ N2v&N-c w}Dත5S+@|X=`' nm='3Uΐ ?0@HYL$I P2Y}ݬެjiY0=gQV\\hh~Ej+hNG3_dDMg4kz)v m`xɥ,ǟ}? *w@Ĭcbkc.u+ ր} V Q$#7RM5N.[$ !&W ;7]iUMM{)&!OC%T7~]Uk3 Wa?w{n7zӗ,8;t5 N4CCEھ!y {O,My@ 7+\ܮ7]nLcKCˀ\97jw-Qesnϥǎ+Aӗ)Ht0U5=`֊[PͥArAż<L߆3AXs}~ڡh0c1MGhz\+kzpYu4xM{{xx_Opʌp.PnuWo?Pt!/,ehߡKG;+F7mmvQ.FOs!#r$N3SQ>~}LcӼ-jXcވڮiVնosZUz--5e|*`Mo=9I}O[A9{sc M <}izloOPMK}izVY*ƚN5߮\:-?oMNӤCS߻^!G?Z$AoMO EjzF+kz@Kžn TR}iRNoV15S f^h4znt }MIS*T<h9/c}l'78~J60Qi anԥT&!bW;<1~e1U_]~"3BtZ0iY"gzhGb'DrqԵ>6囝5=ҬGeϫ%c2Qv{[vkz 5v<R0c~ot/+L1> ?13uu1'gqDZ!\Z:UaA&:Y?0Nma@`JgF]~+;ډWpi [zqʳ:vk;zL9%!_P`¥̊͡4|~}yFl˃E k݀\HLUB0܄ ?ӭrS@nH![7rS.>3&TF@Tg]o][gvtB%(st/z-zOK@x@|4 `4=hA *fyD!'o31fʻ?5t|DsN|pثz jz/!4=Rj: 45XVC^5XKAYoKFui1n{zs9Y(-+{Bi|A3}Nכ I<'C7LkMO mX=/`=6zG?jiUMTa§X}l]jd4R{ %lAZ~?M4ApsQp}oxXUW76> ¸X4:mz\G}0(D}Ȁc6̢8 G듢?1/DP 1VuH! 3V2 `|{ 6^#=jۼ}QV9* =ɹxꦩۇz8Ko/>E&NvE!qcT]aZCj:H 'A4=:8q*jDj(hMLʞŘ1ǢZ8lSafNъ\&n9%gn2ܕ:.jCmJ Q2PVǀ> PqaHc\+ N?G@ I ae ,ҴS Z ψq.RT}&$cJȥC@l {xrrQZ;8Jfn]W?Ojs}s~Y}mmQ \Wt軣VUxcbL/g]McIxҴ hEm>VOQRc¡{"{ <= =c\tR\x1i tOMυ*8mi_tKpMYC3U}uC6yrr}vRѕ '̯M}Co#8aǨx'w}ǐgÎvA•QLAic̙ _"S164a yTϮX?1'0iօ"a@ =VKn1lv{+'{4 = y5sɰ d\8z8us@O%KɮqB+^O6GzcttD nݞ n'}mx֗g3 Ǣ;G#hM/Kъ6K3?W Ψ cqZ@Ϟs%@y@}ؽ?OJԻf[0})+{6.<hzoX z3;hoGϋkkHd6:PLܧ] sdwlziCw0Jr%BІinv 318ڍE0a\}?}XX<bH/5J9U];nG:/@81@#@cf P nq*g[:4{q}__o~#@T )B-n0v%Mf;]F^fDAj0IqRba/M*׾4*ΨlmTs^|qI_W ={On7_-[i|2y +<6hz{`el`DYsLK3gani/=&)!j1czy˵4qyuT޹O SuwCoYGyzF_6({>{W2}T$/  @#vj\,[nFD?aa(!G[ꝉ xepOf#ch"c~b"b ƒ "P\>4/_k [AhLa3 9f _06YxtB60 6@p >vUW&8گwKF5 &oqş'ZcBUv}2McIqmY}A`K3jl}]ԅZeXCk#wBM-N /c@0KUtntJd`0e`BY]u'G'b@M/P`HN#ډE؄BqhUMbmVc ^("JX=<cB&`}d/>M}6Rԯz4ܿ>|Kg@Y0sB$w-xhR^~gҖ/<ɶ.(\Ӌ83>/CR͜WǬ"P5 [+i:k0@R"ML^y8p݇vvqV5Q}6fwuU{լw'ϴa ͼsi1BE4s$DgcfPjzA?݌!O./*zH>(p؛( _'jh]WjwbX \JZ7.aG"@4l쳟77{Ezr#;lعp9ݧi k 75EPfA\L-h{^Z[Vԑ>^V۫͋շC\ʒ(fUuۦ蠠Gkx#>oR~ viv~UMXKth6h=/MuObV2p $6a)h~F tZJYv|lӺᄵe}4U}s{}}QB{ g<~C7շ^x^}C+jzM3)z7ɰ[yfn'ܽkr#>TFT"ꗍ1]]HkR҇0Ľcu еZc}XԞr1c#aE`zxm߲-_ !}xvaĬz0o9 @hwOQ8ODiS7ͷuS]wp"t1ѷ;fשgw7zzGoxGc,Ne% 8,M/v 4*ΨXyY%pɥv]5obxca@s~;jSMO Bj: 45XVCB^ M/^h{G-իz_h*J@p`/Vj[OhGO!e.?Kf0#'BQ`$|sd+Ky緸Y=D~VR֭WQvYQ"F@!| f{EM' L3҅-ˍO': \;)G%N'%aW4K 뫊<&$EƑ 7-Df{q"1"cRHrԲ:)뇔r,5\,U"0#* ن[өQl)fj-PD]ֈŌlٍնZ{ſ4ZW+>6/=2P.쑴5y|WoyK[}z|4xRkzk'^B;zFN5hך)@{'4FjMvhDYs]hz!w Ӎ\"J|O =`zZT^ךΥ%Γ@ytTxuiC}Aݧ7L/QWo0ug؋+,'0M91$7Սsu/NtWԟBx%=UŇ@j pS9(Ag"މx067x/}\9>64K =xoO;gU 8'^r؍ k!owꇫ'K7MvU>zެ҆,9LZJǪEP<i>tq M0Nz$>u| 30ғˀ< R050ph!/M[R? .IұjZr 4tMOzuazXU羲O`L3P.i=Nk_X>_Ӗ=):x#zZˆPcuDBA8HwĥXZQ=䀝CkHLU4 _B';g MCN ?ѷ,Zҙ<ƃsܳd1t+ȸ .5i"}wAzpQ3늧[10o TȄŵ G+`Lј2~X}ALvaF+X_WOk6XUSn}J]|䶔 GNk֟\?<\oA$z@YSމi.Mx+4 y)e@>4=a?MⒾxZfw˾Cm.ގ>҃NC#D8P'c/MGG>Xl##BӋD'M/XR);j~pϳU%@ycf|7?jWϯ-*UFx~~M9FĔ!ٟTF8N{.aˑѴC}}8&O6nJl9(X vXâzi7ZζލGsV}WWRM=;)Ըk/ 1?0ڑRq3Ocfꭥ?G>F|Zݐ#]'^X/r ?at¥̉v.D c1nL~.+kNyԼDy1d:^BRhtG{N7}T2V20"e$@S={TWz mmbvt5_M|b$Cӱ|5Cyx\$&M/W43` ~{܌7W~ $GډjWGtNPCqO^IKŧ}h[*'WevuC+o{}s|B*+ΧN#_~>=dnh xiGxOfd>b7ӽʦSUͣ%ʼ%E]V6 5רKU ?VWoP; [f R]Ԗ[4W'[ n{eEwѺ 8X?979~W07  rZi;nnj=I{lYج`81 Ï ̞d n[֛UTUC˧d` r-o>߭uӼ[*yC^nJnWsiKyp˷9s^HO+3̀;M/CK+\/sfph'B'}2=LzR8PT` &\q\/UX@--(ϥdo>@,Dl`|̐ސc&0+5,SG# Yc9`};aq=6Bgy74¿jvu}}[o˧d R?o--1hU^GrɶG@MHuH>0tDj?3f{:@zd^/w2ƒ>pO> \lܱuSQv>W7w;fmxY0k:/ۗW@[N{WTB%ހ݀8z~tazT ƂqMi܃&n%%h Go^TfWmys=g_Vpcѩ($la#$~:B9B&qtO=#{XͿ67~ؼxINNkL_`Ypy}>G7ꚏ7t@oyIR(]V`ɀ+> 6եn!// ҷ\^*'cnocd'-uf.Oʸ'kֆ-"[6KW^i+F gf?lsA^%=Jۑ$0zPJ˽gwG$j 堛ӓȰѬUYZ @V?{o4;r%PUrݔ> rĄCE(bd}-GgF[KPҐ4-h{(6id}}wߪ sy dj~o 4V po׏l%=V X ȃZ}*}? `_;aqn6N8[ ǀ6P3N!C¯g+ѽ;JI~iZǖmTtc¢ovѬU%'*nZZ(UcW#ƶX҃λ &핸IĴ |M` ެVln{-5iy(4#BA;?Ngc:+N{K6Vl]mn,gtF] C 8 2pqn"lDmFaf:G9UEicP5F$Kr*龂>$?$b~tD+AR#7~R~*IkU^[<<jj?0:޲HOi0уf,m_Q8N1vm]1,w*+e/i_fW-1YI dSPF.R,88TYK@T$}J%–}hvX?Jh%J,XcS |/v?Fwv>'|@CZGATeOHLtVq)bW7. eŒZm8?kjJn TzʘzU~Q\g8'<1T)@O@+n,'+'.:YѯՎ~Ǐ/!}Hz%]aQO IudHn4tc5Wm []qrJ|OI4Obi决ro8WN:oJw [7>Yy9oC;oVcE?D#<~}(DS͕*6#C s 9yKXe)4f#l=F/NfUkKdw*췙GOIh|^w3 W kJ|?S cޣG'd sgCu8\E*9iWI0]Hz5I"8n[Ľp,|5q=d@={j7zp:c,P Xw@һIzZ[_'4F!ܭΕ+WhFN?.v)y-=;cү`pCkk3?Tz@p#?6Ui\;ן6b(ZLf#s!ՙlˌ"92i\ҍ;|Fc1{Ѿ5҆Uk=V2ǟ/vy6'.'1c~E|"낲2X %L]@3&cjNiJ;h5khfUFpv@ܾXKtѝu_R;$Ս@'|Cҳ|vt̵kObu@hBZ|Wv׫ 6 a0 kmڠa;^;«?Jq/7,~+֯O65T'4>صTW8e;ڛ!3 tO u^zf0Ekafz%x>g%z3Ҫ[ŠU@*+=ya_T62[ڵTn O˶l\'?B R釠@ *t4\ă {`uL]vpX & KofB-kgi uQz222 $4fƽȣ >/z?/vWXcosߝ`5~7~+h/Z7~qo\g`&`_z3gZcƊ53qh b?z#JU?R`%@x#@.Z?%l7s]5|m5@Fx @?޴|tң[4yWr\b4ԯI6,A}7|ѣ8U?:~5@=}GiVa`2Vl]Arg\ߨ8zH^ ˘V-}@Ȁ' P/?l?fu_ ?6dr \hLcWGJ^U;w,[C)o^ `USi qCui\pjLa2K6EeJœ$,EdNV.E~>P&##K^n<|SVYOE6yg4+q,Vҥ+2ϱ\~VGn*VAiqL/ɽxǥ_tk4SmXX&$ZjL2MrJC33;@3M"Ѭ`Kq67msjsjJ8i]^-agEhځ΂Z6X`^ \͝[ 0kMlmF*J%II4$~zrm !oPl;E\S4ɀIHOk8 @zB9l/Apa>>>e/>t_->$ݗ22FH9v:ãD=5m %=v7>>l4h:maD~ ʥ|%f1 m0 -`"\,_S{/?PՉ?*0^~JJȡM>|CHj :+4a4Am3:}c ~|:9:cc+]rVRo/>_{qWX4?lh>ȓCZ:JHڣ^fK#I5t7e&Ig#iX<*²hVvWʅϚg^}g= @ot@ɑt'5:,4Iw> :g4P)RIEkҵ{w kq ˾TZMt4&i{lZmJ/N՝NGxiF/Fk1AoXiIMßn|4])tϐ0'Q2i ð Hذ`uSgW&$=fX2S It5\CY(o C |s0cdܜ呡e=dUTtJ*5Hh֫ͻ吁*Vyi8a$SS֬bہOEQ 1c?޾t^+DS #ܽ1tLO@Sx<:Gj3d5œN?^X%sI{*HeN9ҕ;uR&]K-3;<+FX 0=K ʊC Oh}?cFlb(/K@3I7t,M$5J#%ݏPeC@ZI>Aƣ#uY/viv39ՋfQk?h10{ʓ)[r|ĬWg׭9`{wmKutGqJ<A@@EД63䴑\|p@PHEH`tT4@ Z3?# C@@wI'L.!iI?S6di?F_"iq%LT@3Ȇ%[S?BfFVنKRbKs,etMW2Ɵ͉mU2:( cfNJm|6ŶVBq @M z~?"7e'lop98u<DkU9Q X͝Idf-X6omЦ1ŏGJ?$OTw4z/VX[VuNRtW6~VV2f|~ nC" 3.wt M&|TV%>VgD=?Ah%f'd0@B0ųA<3?OO(6пk6g32 o}Aݶ8Ch0TYޜdrU'~3@X ܞ py^و4Qᵳ-b㢍M uS}7ʧ!K@層^|zx1J_`vbMlLVeh9Ȏ '86h?ZO{' Y^}}]<-3M4ӗC2P HhL_|\ n_Tf{ု3pw''>=A{4bw6mfJjҀTq4,S2;SӺl#E_zL2Q,,dn}|Gj ڪb bKs,2& t:_6>1 d N0ǺBf) qJ& W:XvFygu . gn[#e!>I~&3, ?>~40#ܪ~xm>]` xާk5zmzM/Y8}:jR# lǟ=jj^Cs䚠ڼAMk!>y ~/Jߺ9?][AUV0P$5'^`m،r| Te ɲ(}F1^97-IĩJa7[+`t@~S\ qE xx>SjMuJuhdQ2Ø;Uuc aOiq zjYk<7eR kmڠ/>n旅X e`.ko^}R:/1V>haov<9z%4dҍ Zc%i^V btP?\h9\SM!=]RlyLHzBݦ `l1.ƺ^rx+=10m lKx`;mC;wq|GbY oy_ GDmۅvL|y}1swϼUvXxAoJn._\_dwm#%Y>n USi7Y{T^q7WE':^Nt ڙKGqt;zG'd`7V]_:VtɞgHT*L wX}`h9\}t!u'X#lYwqtka@K,]E+R/]iT-+ ٟE .``%BϰS?o_P/f3oV$8~tt\Z{4hWv.c8=F_${ _Eƒv{W4_OѽA4<3@y LI'w+&kvV`:f#lnn*>tAK4ӽsw͓xX?@  S] mޥ,V2I/L{a1hL|0Fջ{O}p4a@L>20=P~'1&x>?U[x 8a0;<] <zuϛ%G^ c}1`wGx7jzo)'0S7gqϝ#9\]6Q_9o۲2{TZLpn?éE4>1Y }e LEـ4Sukpx>J%y2 iWgG%@ҫ_w'K@Hڣ^fK#I5t7e&Ig#2NSD14 1.bXp`f5ЯaϸӦvz%wCA) ʉ tr-Tyգk,>7n@H:色΀/RI^~ҵUyH]f@S8:Qӄzn^.sZ8a) f UO~=o?*_4~wQo/Ea^ϰ)}B4PҢY 3aƟ.|LUf Hwq$U/)*J= 5]uu-Z }J%x#7TsX1F_> '9Ex,@gsjS@y iP2X)z'4즃쯤  USzv:1iMe]^ kMkGWqb{VsKt |B*Zu FWg7{#1vM=٠kwrB؅^e3?]?H)Z5T7vliC:D [@f!RA|JU.*:sA%}hƟ>IU2_*lO=ZFcgF)u Gs[мy75no` 30W 'xo0 +ZװBH@8!ܯbԝɛH"FʟMuCe/`a<74gwUZNc{bw?tu>>!k`;gGC s1ZEןR/bN|Yk QGUN[50Ӭ/\v3 @IDAT49mA g] kN~v~O]28KHvl"'z~lzs7gv|ܱY!oAs}sy[ڵTo}ύ;ad׽ėJSأ/3//oSd Xa2ϧS ] 'd d d`9Iy `VvFzH%O'*<> otNaoPPoPрWg֛!΀B9ƕt* \alf7]ۮW tKyt ǰmm6~^C !!51(J`O=ފi|j5A2 +Mp>;_﫻?*~+I9ױ1خ , UN~_ܺy)vmL_K ~/m caT$p39fnCqq͵J._aίЫ @N@E#ٯS皺#:gA*sLDkKty*FumS쪣_[imڠv~+kz/AE|s?8}|:=ƫMTm^bjI69 *Oq}K4hLQB[07!^3 IIЅ7WXҳH%ZNkOovCQ.K-ʌIzI$I/:uBs@3`&v(A;d cRxcOng軻z5˭os\ <׫v5KdZNu\ՉJ*Q˴w_]`$ݩ&}HZHRHZ̤g- tv @52mtf,9nMJlD !o:S<:/Y)rB)r!]t6! Cvq$WҹFz}/j&S"iT`A!aGN8Cv[=Ks8*?{ldf@Qd` gO'9!@&{??&곃(ǘe,69D6?rWgl33Jg#W&U<[m\?5ɋ)QZerT9X|%~Ơ;'~n=oaF1>ɗXsKdB}QjUǍr mMYE*xh}-}7DH;Iҍz yѩiN-H}]Sf^ \a-_uk¥׸% Χ4U&jM a g QX ;o|^>z$$@x3>T-wWE`X5;1-O]d-Q%@9hG p!L-TˇW\߉2V,ʳY @?7K'$ڣMm KʑrV'w&-b][Q,چQC.Wb0HEYX֖?yVUswhI5GDXuKġ6k)K*7x㗇Xn8ڠ6+֦+B 2/p'vwbG a.~'dYCͬV vaZ+v4[Yـf?^ r97EL!%;\IPZ%F'nf'!"S2+OG41hoŠ+ֲ[BP33~;jûml'?Fk8Y߅?*C*3Ώy絫l]δePMqqPF$ Sbt=?Z +^`KGLH;^P.t^R̫MfÑhdIrr86TeY`5eSz5Jbwz 'RZc2TzC0=~JǓ&z?omocX=KՓkuryGXJc,:å=%-ξ *XtW}Ș%ݙ_RE,!Z3jH%+,USl%)-s ,B rsڮAfhRt(Ș%&04XE'i`u+ Q<|9 @XVn^Lo^N[xErhO%+eY$.34FHDTs*bј]΍V֌oDC%j%RnDYoi,Jv4R-ݒZ!AT&:~_{\=s<7+DY3FF\a}>~rGڃՑ^*UYHh2Rc0U;@ Id$K3L5̄ё E`ڍ@RtjEƫSr±N@B nI=3"a,%jWk0 KdN2+:-}>ڀfe4>X¥cOҧxWp|9Nr/T'wã=.9ub:E8k&gb<7+\oie`'`w:_G p/M wfwS̀~ V&ca%P'Ayq¹-ZϬ J5f:h*,)1"Fo]MR6A3[CldNG{g8!p`C;.3>{s~:O''p~3p!6&;~F%NΪ[ to^NC/lOG[^QS#O2FڥgQ&@BXpnL*1'b# JH+L&hIӕquKu򒁇1 #R4 b©2kSZ dw1km4ڮ[H(ik8=Q;_Ҏ!;t0l{SѶ'Oo'jG{6^Ѣ³Z[W}5Rt_WPj)̿Hqt~} {8JT,ƈȑBtd$0 DҹJ:藒>%ݯE9t_->$ݗ Pg^-q4ԇ$z5F'4Ƅ,t:"YN 9x7Ro744 .~ 'wmsk9[64Ϗxv(?tPc|YKd8>7`4Jwܡ8ڟOAtU شE :t3r`G_9|r,鷫0}5w@?NGs%rB+rFy9sgkᶁɮmNTmIl &.P3$h4:x>:S.73C2n4Sڈ ;yH}bz|w$dd=XShm >A }xfKÞGЙ&@[ o.sRM{cm +* =S-%iF+=\,L EԐf?rҩZ'gk0'˷E( ^5@_myg9JY8LRu#Y.fV׽W09f#ǟ1.iEq&h le[٭ܨw'u<{{[1^'^B,#|%W҇{]pWsV+'>$ݗ?ƕ@;Uꯜ퐥TJ61NOI~{b젂 )Kԗ֥Re}DeN8҅KNԃ,g`#5lAHXg$K_wBcC܈{j8xF{i -yX+TBz6-|B,ϒWu~_fZxGX\f3)|qULev@dP!,g8Ǝ*p86y;bFXuK>׹4 !tij` Oƀce=k;c r )Bڳ/1#)3Kc(˰Dk|ǽiGΘ\~s+!L?\99QǟZ* 0-YyibiRð|f35~=bv{zH-F9=[!FHeˬɞ \0xsd҃ks*eٖ0ǘ;m~()jse[Vc3p"Pv T s p#Jiw3|Kdp?fo9pP+s9WceQ@J ?~YEVb]& #P|׀ {(#5' ߜ]>M#;?|B:=\muB6#zF /"%ScyW ؗJ!\J=>x$ݗ?;W!iHcF=v\׆_g U}LŽz0.1 :@{?` F kWf^yꛒix=V!Wr𝪅|KXQ5TںKj5n5%㶱JV3d̙ dD}.)XӌTޜu #天P7*F_MxCùr ʦ2TY+/= |xm(= Mtrjy昳jeS/K2B|+X(x^94mJh^FqN42ߒGÿU[hEB.up2,zz޿u4z/`z?z˒V4 ~&--yIzqh:۶ iLe]mrU 6aMHDJ.1zr®ʯGT ~QPcCBz)7V.HLkeHNLn3L9~R!C~8"cg1û eoH!ϚfrL;S&ߨ+55_ݎ*!"Y$ˎy\& t?LʩðL_[hwF@tIU0f%u08%qɩ'W OOY#g{$g~ڮĭD4Ճ`Zb8"r´|K\UsJO;%t%T^3J g 3qjwC,> @MN:vSjbN+o"/}XM{@-&=mG0ZVF-TEWK_ǿ㐥\rӡ2+\+e)WОb7/誌VOF)E ahw%"-l;A6UW!.]g@m[2mmo''wc~ hwt&*4\fݪ [՝1x=z wrowvpoo+}x4[mXe8r2[5/+'DkA]IMUD&pF[ 0>w]m|VuzurWɎ̲3%j\σal%@q=EA`ųIr#Ɨyͦ(W2ި(ك QfoA-2Nkg Y$f'YEOku8urFs֬.qlƄ1뀕5kَ{G' nOz 7n_81;&Vf n @~Vo)7aԉ=_NyG+5ӏ)}kykon:0zvq zRlw{{䡤/˜bʋhzcY @$PiJNե\}afd}VG W#Gx9ԞG3Zi-Qtlse ::vrO`ȢtYHt*8 ,d6 K5ի{h^ܳ*hP9< ~?JHxWtR̙}A27ֻBte~T]qC 9k!Z- % %'cjPKr `\c(J菞ar:rHWPggmq*/ؚ6X0©@/Ƀgs:=˳'d d@g .g8~j0D+Ǎ> J YDvr,JXoŀ  P4 R>9W⫓3NM[h£W&piYG3(! 0PuruWxNhirwfy1-E߃uh%);dFQ6 WQ!(#V9`:y&ee]Op" ѩr岱bt8N;?ƊU4/;*G_=,,ǪZl př'gz؃x;X4|[oe~BUX}٘qICM吳lUl6P/#?Pla8ye)8q؋gt =&x=n1oPshXZ_Jo A7[0[[ݸ/>Fڜ}pIIb@k%9!p鄋gU?[;9@mO%22T<>‡A2;WML6HLpI&%(m>Pi-Agu;iŖ %c='Ð6a깂L韌UR ,*q ζ2+`\fLǢZSKm ?,<|YY;bO|DdNѵ5\XP0JC3 S2uTeX9 XuܪY!*qYeI|$a +5>ޢ nO `x /d`2d+ͨg֬L'FP%׮ ri%sR2p}rf9֛S6w MK$eֳC8r'.V.jI_fmv YЖ$+16[h,)Т"F]4hW5, TҮmSt*)z6oOn^_}[=#% 7TÅ;leF͙'ɛ=ۋxsL;B}7m`Lc h;Oz_e^; .Ϭ"gXU0D-kz26܌[~]xuG~DQ`p;S]WqIvњ\`cGر 놲6.* J7>V/(Hiݜr˄7+gʼpjhҴמG=UTln-yq5>mtVb9K!:wavWO;jz͐$d`2࿐Y8C4!`$1ď[^g+ȟ\IGBH^*3P^te%${8JI t/^4,<AdH[]IX!:-˦KzfJΩn:d3zL1Z4<һ̿:%2 +I{p+?_V(+wc77c%ȿy4S͘U|0DS=׮|,Zx`W{,=r ~q]'gLYYs\M[DSƳ[p9N5vNݩt"lژL.U2>Tr'i>sf^;yS5A| s |/y܁euc_b voD QefpT IQCUs͜*.0XknLTkK\6Vs\_8>c6p/K N)vWd-B، O!g~s[~oNd;U47h9@u>GK:ɍ+mg \HDkJؓ7[8O?{g P)W{l?b.kKc/1]>%mM 0 ޥݝj.Et%军g2?:%0B3n(hr{v::~뷾KߜĘb%8iH_e_W:ȋni <؉;h RlvDz,S`E tjb}.sP3:8V;ƒts |BBf hH=Wv$ߡo [ ]0@cO/H8WM;~'ڑ+Y0;j KOUdȋxE.V]sC._ce,u2Q@;ip^MO^rހsDܔEk [мas:!3щ:nD@e 3 4|DFUԣ3i|sVmT]>e%w%["WZnEjxgeE9hc4|gW)\/`Lghg~wL" }V䏨Kҥt/!$]D%sZS36Iׄ+U%]cVKcI5Hj?>g(zx2YA%zH r+]j7IG熙۰lZjQt60+|c-`z,] yK]22Po֗iO{#$EX & |d[X XͭpX¶9` 1ibV,s˜ /΀n3DS‚#wx3$9 ̌W ';{2ѯT{ X \ri=@:% |ɀ!r9<Ų*S :tGg( \_5 BӜe-%r,ܩt@d,|Zʆ7ax:+C5iHY@1pC8_Rl`CZ>ſ5<_ai/ZZ@ 3D!~z,C{ƴ@Y&$]%JtIqkՒiTtYY,%]c|PiX7Ϫx@MqяҒ\3P-3syӾcJy9̈/n4t-TtV(Kz+FȬIZ:/{:T40?xpZ?OZK@ x2Vx!33KXǟxrp#z;sx;z  6*"ߌLm(gk*}44@\qOܖ_jUY%2Cj, 3윛SlQ(kޭ83g_:]5ur V-a3u/p<yk"oA 9>Cx{kd&7=9a4UdЧNSǘfEͰc/"Swlg^ߧXFo+kK t}jmgh Tϵ[s[{|_˻(ݱnn Q3_$TCBf@ikCv:\M8Nc 6uΔՃHۖC6IvvSIנKUIטXe~8J)5-Q̼>Ekeд }N=gTjpikFATAKҝak T$ ڙ˶Iz]0 6IkXc01[aZ1Ղ=U>!!fٳ:ytO}tNjO~K`ZL?͑{SLM!T3iͤ+Rrd2'28 e5昒8,̜IE,aN]ěiYƲ2"1fy{%R >c[×25ϯ/—Se* ,* f0~e XU|!̪N0%rbQ\ r\NΏTru?[U,"5d) mpf4zN~ ߊ-7|MWx؉02Vfq؃72G)I-VU%;)h iUDr \J on/C0J0EFVSa!{qm9?dg*y:~[?RϞU 2V,`2`2q.8zAV`%j%&d%W҇3lyK |_.gffeD"˚rطiSվ5(1&hzI36ghV6D{<ˀ7k ,[ !؄JIךKeIv> NЂ쎜f Z)ffz,1ت3q0d da Bfd }w~ϱuRћw>;?|=rf0hDMfsA)3G2sk-UK8䕁9UaV ߺ;켚SPV.w"AنK֡^jf2OETקj:Obz `9M1^c.(tfC@24 suGkь\nya ˩ce0U,uĺZY61tgVXVS~j>0'a}f?+|Ɓ)EOq=ǝ>Q(m<ݐ.H,V Bv95;bh)L}Ot_W47Kچ/ =җkIUIטXe~9J)5;uٳeRyrWYUsA#΁݉ @`n .M%] #%]k%i+Y^e;K}>,-f#n;ꄀ2`3VT"d < PɯY'oO1}L#~;@Д3^Y[Ae~UIX%*zs/g9K:ejnu˜fyhbģ=p)FzdLOzce@b1_ C{5|u}hЌDnd`EbT$")ֈ.íXR QUMEIluzur ԒhۤƭD&0U YӲ6j3KnQ:лoFz(́ )a@O ;o8N"z;@%laV9Uh *[x$XƇ.$\btEbtWAЉR)UE,c$(<-/NmǮXgÅ|ylcE9\g +T?h3P3\%ijf[7~bZm&TspfAHzf%jISI[J8b,ޘg1Fc%؉P 7-nFB=d | iYɜ fK> J0<8DDXl.+PӌĪYKӬs e 6:O[dUBX(d܌ꬃI27`N+ll3eaDpE2j<Itm$> TðUKd; f<x ^?LXtvHDX0gTy;]Ie yeu*{u2Wji Ϗmb̔xtXUn0^8}[X2U/]@kgenhBfF[:aq֝e;wxHnArf,9WQ X{ᘈ"b.-)j:zUHSK;܂kE?ǃ4~毞EooQ&+!f <kzg U3u!?yKWSmvqnp֠D1]ȕ KJZJřsӬog@e8)EhⰠiwz {0r3sKgKO3 DgQN4Yˆ|*g*rܜb4㖗6ϖqH88l^+ F٪%rĘ&:_թ !y}\?dTw İ8ٗC>s'ErԬ%* rrq 9JNJ|( 7wЌ5m)rSڠ2 g ǫV-֤_"r ΞG8?_ǧI_  T@@7h (f~5AIk/+ne+"VO; 6tG/WЉ[?Ȝ~ٌKH">|<&h(Abf(ǔkλa:Ӫ(} fѕt|y5<.HI6֏a׫TsR8q6Wa 5>3gS4OOD6C7&tUt3߽F_&ozdz;@fE` }^5h?[otF<$gЖ2x2^] חsFߚ}1)~4uvlp3F[b8)fp 1%hC?wKH0Ap8UaYAt۪@IDAT%t,~3Xph>d@!xj 07 _4+0!u*ւjq]D+`Gyե\8l:c-9en-3ǩZo [#p[!ZV,J-QoU9i!9Nha? GQ>< zg P ,1\tqsu9;GXfJ+^b%X{տ@-G&ڎyW.9ӬMg@e8) &~4?=#.FƔcۼlfkPA-G0sŊmm؁nO{4?Vgu'd d`%7Vtg3Kx 5L_|k(vzjrCN$gm TCi_W'gue[vVN8e#xK D JUDQî+—pJvQm4׺QqɝeCwmN@Me |xRf_aNhYw03!!}e@\h" 8HJI<rx clq8U+qdE}ζ__1p9;b-n`ZTac*%]Z~MZ$DE1Z542+C5f%?*ܿ;_$4m*gmLd2xγѹzN21Y.1y班cikYx\7E%~glkh3nu~xhB I 5Ng U)-utcʨy;r3ӫǛb,/r$dA_iq߂*>Fϊ- }n^rl%3k,1 'Ã:6,/3,GgW0_#RTs[ rsjz}'j8=.Ӽ|Ր9mt^)mٱ׸sąj SwV^3޻4IgYﮮIΠedXWdEpaw>mxT7@!Hp! aS whHg(ʬW~j/|wW>>US4w37/E.[xwF_Y_Ji0a"ޡ&L}_}C;z濥yn3?R3kƴ ̽efһ^]N`儥Sze ˔^G,Nة( #׊4=~-IʆK<;9 4mB{qW1ysWtns<\lK!&.SzaB 7UNDed3)X\MƔ-иL-7H) iiBc?1͈ l, LƵ X^K~ۙ{oNgWo׺;w9-Cq[KT$j\*TD*f„T@q$3 >c-#1DGpq0DWRB(OP}(Eq)t&TOU A^LHCQz)8֡^[f/ٵɳO:v\\пo}J^!"*ϼ W J,AW@Q2u( gOfp%qWg Fr%Je(5 /|Hb@R+08Y&SRpB\(V~K%--t7nBn͚ht_o7 X.iKzb,Z{͛vE;F_=oGXgm^B^P}# O4f@`4  58Pn XD]{v~2<|2<&ىO*qn 1f l섕t6 W HHWYw4v~H4?=O߻g| 2 md0-e@xqkNyHop?iCLH93.b`I+]a V䫀XDTha7LϨY5I'i@QEVv[sF^KWPݷK!EeN X攪D_ | 40i1l73v\l|g' 7ߚ~9%#.:rq51PO͔IJlI]:bbJGnL2M$5U5BGʋoD.Ҫtk"Z( }ծ0=i鴒*[ j]ӑ @|œF$Dv.Ͽ~tḓf \ Kq,@=w#GGvgwHGL*[r/qK*F?Țaص Pn Q$'/y(Ny8"|B86q4xx7DzAhK+ ts+[ʨOaw{j=%g$X :׳7Gy a+ߤi_usf2e!y6$hXWy oCyPaIgYIOtag 7a._O̡B1+HqXSHC:ZTv6jsL^^Mn b1e2p2`7.x,]a%CZ p>~8)yh%@fd%@2{/T;Xgfyp CgXX?G mdP,~?iyiVr#%/ɹn=7Ei&8( =%>DhI/1Ah`Q?_  qM|;TDA k6wݜ=?? z=s \+cй9ᾱC+$h/,Uig>^Ab*gpTBϔ2a"AS/i~R.raR^(QK,$YG N^UA%C͟;`YB>oϏ\3~gwA+ XZU;cM V4'j@ziVaEmFrߪ~(] Ta0A6s|^%"@߀?;^o)B{?~wrW0#z_.GQ"8,=*zTS)LMc*D&_^iULPO0+įheuPu%H긔CM>n9kM +5O@<'uVҳ3unmzJ:=sA@7AP4_JRJ1Me?W%$9'XTNQ1p yUN% b1vx5lC',*'U1QI2dWb/r' 3Rtl \ s., _fZ {vy)1JuMx;F{ c ? q&Z(;kOuYml b мn#QVM.CA:3|Cכ>t.|ߢ}5JZptIO`mK.xpF5bJrX1@祥tS@hUP` Q"Bw |ժ&@R\|*1RU0JݬZ jqѾZ!'wZjD~g9Zv?.5fh޼&t3৶iZl=u Ŏox4 /@E?E]%4Fs݀"+oB>|E[xʲjJ,p|I3J~oCwWrfl;Ƶ \ 6vX,W>>O?:9Ym{ָfn|4Ome+ țq)4Xê1U׊r\X<ѿN_,ʵS<[axf}D 8EVZI)8p{!#01 u@= v+x@+*V s깴 ޡ׭<Ump2 A_ETDm^0x&DHfRaj_h`j&g z@vmzXll"97iN;t7mf~99E 2e2p3`7.,e`u%'{f^ @лGwȆɹo~۪__ >%Fo\x!RYa0G9z:rt>9~Y6?>Ml8\O?n9:W|Fֲ>6A9<8[iKX"^]ei" )En:CzXeto<'CRާ3v$& \ ~-~@_[y;`Z IϏ2\8W.20"3jjC{ E8yAZVTR^ #JJ.zzzJ5ġ@/p~-wt<.τKOފlw pJx9j/i]lK4"2@W1'Ǯ5+?Qyv}*$ܴ0`v"S9?ֈaoy D TDXԃ^vGwRL/࿂E@k̄_~ axŎv:8yBwv}_Y e2p3`7 -=?o$h ճQtuL63a!Avj(90X1\fu `X1Ne%c w U.,8O>T6k|@}4р=D+$_3T OOi܈K +5ɹWx|W9ϔv, ~4 x|-e)7rR^+`bѢ"VO[G?':kܝ߶Ti)7L[;orZ*ڟп`Ɨ7'ḑo=0:x^L^NuiL`\UKMx%G^@گvi>paWPJhWhA<^>hX$`>'ʕ3'(E, ))wܫ#Ng;.cܴLJ 9]{wpjvڇ~Ƣ(u%|H* AՕ>/:ũZ z]G%UT S3jbqDŽOf/COvow2uV ܐ r7><"o)͛ERVt"s ^x (t@Ahv%LWJ?RLI"0A9za/򜞘#Kiojey'J]GFd_u q1`AUxu#@\W0AG֋t`J/$P\\,ü=g no_%}3օzl\)(Q3^y+U%MRO;8=ȧ]E) T 6sCiV Itojv)4J kȻ+F_A/jGkUX҇+ L/ЭD+ATT-JNmњooPPaZmI/#Jˀefno;ెgѳ2鰄t<¯bSpKaklJ3#(ƈ% {Bw Zu (K vϐ7aγLyK_ :w|נ* ' }Z P]TM}sCTpO8ct LM /@ȡՙ?vsb~,W'tˀefهsG;_NgSZCKffB՗jcG%Hn#[ .__T p٬__dS65%BYwns}DlT@]^ʾxk/-rB26>|) WPiׇ?Vܝ>up#b1M=gj\3Fzp˲G%HDe'u˶N?V h[L Vc F Xl q2*>CypDJ4xǥR"Ua$0D}cn??C^de2`_HKe2p33C-U{<">hxqf9^0AɃ(ktHx~: s ārx`1 [=L;R G١Җ,z+ЋZZT5jݎM]mð8-ه ӎo;mcĽˀz" E/=wkCw|.97}vq`LT]1CSw ҋH|wuG؈*`._uRtn3/3^:_+:O¿ګF 8 /B\ ThH<|IV䇜w\HBU%EE*k͵ZƧr%r]0!';JFQkRQI+I/B)xaG>`,g6nmze}9p?3Epbe2p2`7nɶZdsms| $!]*h%nxm'#!"yf6qKY.B\(9Lי`XyAD}{iPrf+7:&kvZ͍: R^)-(#>kx;Z, &7Z򰁋a?on<.s>wߢkSӲ ܼ wέŖ Ϟoxx@+\34BZ @70*|Ӏa)ދBޅG>#Џ*ER]0oGr;RC1g?%zM\EQEYKFY}r,>pRR͙LJ2B$}' D/zl!R,sz|~J7Лl%s:gs[n{ʹnv\l%<"!)(2@ z&IP%n:uEa#fl8U#J%b$XL\V6O H9 O v]{t~8C+-pθ28<`з4 |)V V+PT SI3\{|Ξ7\;T^Vf2zmXgr3KC*覗$GRdfptj)VCJHRעŤlG \b%x@b! +P\8Z pe_>S7^ *jfxR%rKiAfş}Es/nIތ Xz3`+zSc@=&i%|:ݧ NT:z":]͢ %尐ps sF;e(+BYq\3>,Ycy~<пSY[gy8wtK>=6:}h~P_TķDs8dQJ;`*`boM(z6[t밥ɬݛ43x?M. 2`Z,#d:=ig.3~&iyD's2Qx bU)1r?3 /3l"BЖMT`)Ol*t 9cx>cW& TACU#ᣃ^.5Py{Ը,V[)F /. 5gΩ2O\oɗώ}ڪ/UuQ̭45>[S0x2`F)9R/ʕ@%OUR=1Jk)Rz< L?Dj>r)vOWT$mڗm*3p;/yr>ڹ(`j X "!V X dFz vfXp+AſJGp!xhā% D\(Gp(ź|Q++/o9dk񻙂tmqgV :-WfiCꜴ<<gv6g/09tsc l-v`k5`@1W07OIa[i<$<棬n\"]9 JpaV鯨<*V2}z]9 H.|>¤I|QAPRxlr hL@3>=?~vNi;@KoZ' 2.70o'l\ārbą 8f[~ngd#N+Fh#XzVD[Tv`#`Tvkx`D\X[mpp;z73xwNi^gˀe204Le2h;[KoMCvG D`$If<)5d 11rOȅZ-N1L#K]EM։UH'ԕ[[bxđ;POkQ𵪄j43 ^]{:">Oq2@ܺK݀6)ywh]Q u|_ p2.RY;q!X+rct0J拸rnftˀ"c#MɭC͇.vڌ'U*@I:*v)q~DnU{=Sax˴"פg'8| ˿:c XVπX=gfa4yd.b%SRA+4HbUx~qCK4 2jP|xo<*[Q8]+y +h#$|WOH֥ y+$]b8Mڼ(JF4S(gاMިZ//]n`v6_ʪf,79a%ΗG+>3zI_ 46Zx;%*fufGt!%wAK + 8ȹ' c{sdFpo?*.F$<`:| (ZePJL-ڕRuۇPlUSB!E/'/isw״sמ1GC/tN4Avߡ~hET=U\@ô?/T]b6{v`WRΘaP\' SXO]wDJQsx`SujpůWB,N \"|Y$DXaQ"Xt۲O74ߟﺻ~q󿴙Jˀe` gƖ)z.g&z;rFܴ8:xZA4E:,cgDepD,Wpuć׌0(W/x[e\ΡP.jʞgKZ%x;6^ppȈ1p#'r@ -ISuH]i3ۻEZ*-kpO52 ܿ_N?+wv4p4^Y~>|C#cJ~Uȣa+?kư(@x]oUPHgO&re)'#ҰHo(>#BsW,o /ݰ5P$"'ʑ,7gi_wO.c й @>-\ˏzz }@G* 5z!YptXHv\Hý?Sߥ)M}'?^p֚e2`=#X,g v.@KkJgÈrGN4RWPrb v̅P0IR qR!-ԕfYQ2(kU$GʨG0کh2 ?}N%#dSٹڙ"-yZ:IڂEzH .5 CYª@IDATIzW;5IqM77ʓfgAqPН\\iͻoV e+!H%iwiN&O+<Y,2`+V˗i[,Jx;U3i|< c6 ߏim.HRA$LXEӭ'rXHP츌nPB^JD(˰6]qNoRtf+݁)[@Jc]Fd]$.qX]c\;Px*gdyg4oc X:2`+:b,ˀe` Jў_Yx}ަ\#Rg ab% T_ !v' RKL*̷zjOh.S,>Ta8T T( *E) TC{!2')Ta)"_O-tmw΃96& lWK{.<;gJ2\e^1ĩ+qЪWߗn027,% uFTy @R'(@_+ۨ{'ͶBW KUKy~Vm'MvO3ie2 -%`-74<ѷLΚ=c9- /hOǿ;雹:A:C:8 /~Ș/'AnV["`u|S?'λ̀jcgK.J7v֙@B?j"YEwx/vX:Bp7,w =nnoB7m-$v I(o4|MntO\;HZR}'S U!F.pYW} _+$H.3 }dZ/zcZ >5ul^R8#eJV X,keV63 Xf4;ߦ͛v:ٗܧAŬC+M)*1gÓ%Z%*P@٫%+7ʾ1>.]<9gǵʀ+3uxo IJV/[/B=IƏqkth*O7wBZ*f6d\ˀe2`+.(2p3o/>,Ȟ5!yVaxCxj"=As5e d52@'nTpHwhT0IR(ԽTSwLHf@c iOuRjie+)sZ,h}z;;^v\ ywԵi_ j_@@ʼ"3QM ^8]n* A ,^`cTM^؂{չ%puS+`WK$ED1 7DU {rQؑwFd!q.G7;{׾wOܛpC{HΒeV\\͓e&gFs7M_IKơYz[\ Jȴ 'I`h$7{ WnWKZ"~=a`Nn9jcc쫗yI-sYR\ƔcZyqktsS.o_5Doܳɬݴ= obCP[2` l)`K5Xˀe#~2w:vV||{;6{4. bӋ-ѬTFE0%*oGRWZɏvY K_jSq\V~ E_H52) W!ؽFHEȄٙ;}}v\ Fn?z6uyЮDpeX_*Зjv.zItWzb4$^+7C t-_GovB|uo^ļ %ۿ۟Nϧﺝ8Ox?3`#;,EdV\D͇e2 gf2;- ryoHZD1R5C%LP^%Ou^OR% Z3yMxo gcwh@5 Ws -T*>jd}w{;;'oޚW 3e2pof 8oE8k7̈́`iMG4>xXHҁT )7%Ռwןhne8.kG:G;E/^D;;ú485OϛbW8l=%|jï!rU8YKp 3?ԺV}LqMF zB8*}A9N$t^(~cK}?m|-Lǽ"PNRֺvŻn^໋G}M릷ܯg|/iF[,-fnl1m fGLsͫ)7dσ ] T{][ Nt-J3@(U\r? ]>^. _Ҵ)- T^=-n# f]7~snSw;НFƙ5Lˀe` ,,2?_{;3ޥ/w\glQ*z^//. ak^S|3%Vxi I _%N.vp2@SYmсj`wdE}UB=D +;T~WVVΣI&n2x^0ӚI(~VDaPD}سGwZ象TSuZJ|jԄz QGQ |F.%NYOu+m~ >ߣgiɉE5v_ [2` l-`k5`ˀe`@x@Tҝsa;Uݧ1X>.OgQ_x5{\T;NTwqJgi߿ޖ_XhŇ?8_V )vKC-ExUxeQ?OIKgv'te2p2`+nZ.iv/V>=0zm^DDނ!3^ U` P VVо~zuJuaWEh%2]aC5BA)[ T_sҳɌ_rqm3Pݺߵz+@r{#P's~0B7) ҡՅS.|5 VNq)D`zJql z1{KV"`Qe ]R.)` mv+G X.Ul:ef\w˃)Vx;@3-v>t*NJ,,ě5kRjMHF-KnKEDkQR-]tYȀ?y߆11_;Uv.izc]< }TOf=-78fj l5`5pˀe` ?'w -ٝJ]]c(Kvy5罹$eR힩\SAX*HΜ fH;4ɗs?%Jz ?NjС|AKكV#}?;s#w~[3|Qfɽ7\vE& ? 1rU;S첟 {R@h(CAL/u&+?+ZĨ]\4CjT$vRn@+ѭ|DN?;ߡ[[>x߲3@ge2`x72`3.f.yW`>rEhW\#B (5PB=Q*5ԓl|^r{TvAܡxeWaZ#DG è#8Q?O=?O>MnmzgYP #,%ʀD'B X|Z:}o?~t_C{{e~D#7INc.X$!\xj$졬,he /S( qcM($0%?-K+E* NgnOJoQV, AFځ%}@5w:4- hQQ8?Zו@̗aVKL: 5_EoB,G{+&"\%]޲:b,;W$~T C)l)nL&'ԃv&ɝC']'52`XTka~L'9~aA0C)P:h!,ґ` o(e(5=J w(K* (Aŗ|o ,.G.> xqO:ᦏE퉿/仴H f:X]ԎiwYK:Rc`/yC:e&.݅uCw>Kbe2`Xܥ X{}8wӞ{ܛ6Ya;~ܴw(h@ȄΈ|k {Kljr;JMlF^k2#ȼA2ǚPP;DfB<NKpXhq~O_V o<6] Я\E􍷨${̀w5KR-sK^/w(wë <T %]YXAT" EZU"x'Îs!l9am?J|wڸ;xW{ݳU"1sFY,< 2p3C{fYItN[~cB*&0Ĩcn75G -)CZܧkVK?[ui-~]7Mo^Xv{8-ROԺPuR0Lkԑ= Y3G7{W詻5}[,2`+JY,atpJ+nOh'm>OU9\<̨ B/U]GJ -=]"z/ZUkƚP!H Óe)4@VWPRsρ:pg 7(zbȭ_]VSD=otNh>LΠ.^%zR@hPCJB RƲ*/9 \"ԩAA,YD/j ߾j>sӟ= U,eˀlg X2[pMiO7xw# 2}`cLcMX[7In,Q*gyπ!@m:K$.bK@ibm|fޭ[DS ,πGˀe` WCz鬝7;|4x/1I&(.0@TgQBvAyLD!bOa& yKa(_ˏ8uێUI6?}F]fO K+}Rף"nEA"+=|a/}h_X)-J L% >~$T 5! %zDSʭ5Cj](JN\{p]t X,8v 2`2vS˳?.fotPHtzQ"x7Yb[&;B Cۄ0P,PD`h$K?d]S19:\>? =qCJRz*GoqG\K[)hW5sˀerd XVӏN^}G{4!ue+*Ѹ TM:R׵Hp@!?^Y(!)Yef( Uj)͊A(y? f=ծ{.!ɝ7|{ yhqI+ȍTA*. YQ#Ry9ﮎ =G$*EK *V"F+*b+O9#~Y'.\Nħ9@3T rZPOx;ȸI5‚ slQFDP\v8H4<8l_X$0RLed\ YfT\1ޱ=O?w7/ԧ;wJ_ ͅV FnQb?h>K21Qh5Zevf pN%nrzk=,bn]+,~b(&tg;H,@6af'Mm/mJˀeZdV\h N09ov7og?Oh~vgmͳuˀngcyoCw quߟ#G>t<+HǀGɑQ)?&!1}`dn+ V PތU-pk<@QK(MբX᪁B_huibIY`kXƅ|aGx3vLhc73t#>fSR*9չB_қ"NN Bb]fHy`T%9 FHdW#JC}7 \hJɑr}8sPD(Q*rfboܝߕ2Y,W=vટA2` o~#6x?Jq`1elXe([ZR" `raAt7[X&e=@o% Y5 -Vd^8 heC3pOƵ{{m~9#`ð X,cd#a \ |[=o5oIh@ F+tQG(KB}eF|G\/WA_꫚ pʼnDK"4+TCܝ7V,T#cOUݭC}VܹO%-K=%>&dș찃 XZwة S *u`p3S} xq(Qi!5*j Ce/O&wi07}zV(҇d|ˀe2p3`+Y- .`~woBc P%cfHPemVKt P~֟fy]#Q7>VP]euv0 ]ht|Ċ (ʺ]*ĨE-?O?shɀ2 Xgه3G';_ߜ%N4/zmZF(^H-Hǫs cӋqID= ʕyY© $JϷ|Aܝg37;-]E7<pMl#pУQ/@˾Ʃ[p!IeY/쵪kJP0z},ASYcy4+QbC Z"RhZЦRx*RBt29i^ɧ͎{2_z?nܳyˀe2p3`+Yntڷ=8ڟSG}sZ uױ1М`VXN E(kwr Ʌ %/ (a(gDox.Uab՛Ȏ},w.gKfjCb7JƑ?>>x/\2` \ kxRI@0;}ӝwpɿ:"M>{!|+3;ȸI5 _RWP$)^!cE8C5"%@fUhd(~Zfv]+hv 3ӝ;zm @]ׇω\_4Sv ©C-'/F~ZPfJP޹5R`i) DKO{ڶw3}<9^J`5ˀe2p2`+X,yxD8{|׽<&JؓJ8LD"l2lL KA4[:Oc O!_o<˻+Zq3 +_H? Ñ +ӥ:ja:`q+g'9{m~.h]1^S X,[mՉ[,י|0;͇vݓiOiv|n꼚.39dR&ը&RG.(&$y4?e1l%FEjI6YLϳ3מ-4'h'w5snRsZUWlD"NMIWZ~bMJNu KIA`T+ 2uN餥w8̝1-[pϮ2`@x$k F utcc[1.,6-e;h~ h\HPNxfwyn%olP}_)Bޯ%%o(:.Zk@{BFߛv]57Ba~y ]j(q :!;w}=oIx\A9챨C+ }*E_FPeCKAf@ܝ>$D:g"{we|7;.@}W#>NJb˔T #T3N7!c p޲Ǎ* \q VMXz)-ѣ @CSz]w<;5YFX,70tkegso}z;;@K{#߆{`Ta@ƩKǽ^qun=P^favWoe="Ms*r}|j}]g?_@ҨY *ӣ^kns'+z~*uM.B(C)|+Q.f 15E ~"e+j%OysgԝzF~\~ۍd˷~&K7n"M?T dVGl%:b*UM Z^!ME!z2}y/yIqc XnD_q"kNW؝?~tM-J |&#/.z'%-TÞ; ҏVz-}NC3)sE~jk*8Ek?-kJQ*\@vEujm"  b r`C}M9' F Q ^C#YO_6d\8ʸ8DΥZnݯtqcCE]Jza=[{۹{~_ee2`@ʿv[i XnRxd9n甮Ӟ`Է JUxvEu9w[H|"c[ը7bc> q4P_ 4K*ӊjw> Xt%n["F]).ME> UF%H*Y3.uf[ps?+4uˀe2p3pYFW?ˀe:d'opJk^%o(Bl%z@8Il#TWK=/%~Aꧾ Vj/T@(BF+̨Om4X Ţ\N`w\1fr1@e1ºHQ,ѫdĨāQV$ 0Q0BADXZ7Ǧ׿Wf%#3.W`"J=|D,}7?3I% X,[`}2` 1y;V(r2ߗW7GxƦRb9>'+Aa"TgMpU-! rQȾfp_CV*6#.v]n^c] ihl"5ZZi sI ^"Ko;JVEv/Do.*p>~%;>kޓmNq,@[Pˀe;{ssjZ .RFZ lcp,%fϰ""#E4 zfܟ>Ub$7fH0׶F%\7l5cM@,UWzDohgou}p|}xދoˀe2`̀L1-@~hrNNͧ90q%b4J ;l ezиR^Ƽ`~\>j>=2o'no޾<~;!ka X.uˀe20,?O/|[oƀgoxH}_Z{0 'rL9~h?Wfd?uq\}f4Kqdk5[ez4SZFwz~CRR/w1-Я笨S9HѨLӜJ-K8ת,Мԟd崮"gZuc%jIƼ#Μ~%?;@zL+FRXː%#r׊%P>0bogVFo짦{piK149" @ &ocqLу0_vH_|3y2]zwo֞:Scu͛_[ 3/fÉ+f-T*iԂ|&%ZkhhnhiZZД X(^6wT˶Z@HEdsgz;r*$ KI"nP!q`5AX(VbV˔y!#zyn{ri?*+s@w%wm v8$gqd :^(t=;&EًU7G9N6i;i{4sMkE[diݝe\ez,L1.s 5)YgA6C ~}M@?S;G?'`uwd,\c<4q.#=ZF"sw悍©*V?TԎ_OK"KRɛyצ^Y'xQ+-hu̻Z_ x𛮕NZ跧%VjƎxyE/;EᬞR e2,+lefbY"+JI~bN؁S]=<4ڿNf!@ Yh! @`2}aե#{&mW%Pm{gNiYWo`rd4v N#_3>kOۯUo}Fd/2o%J<=uRȿ,Ϯ @'+~ @`;@$ا~Hՙ}grf g!9FUƽ qilVvT f0q$;)7YqYY MJN[}fjfL3Nxսe98=L>:ݼ?: WO `Rb@L@ߐǏ{Wfd0 ` w^ ^SoaCw hi}8}+9>±( `ed 4V\HJ#*IVNU!4jU^EВwKm5ibuUR(^|[ŚYXBܵcZFKص?Sog X9Vʳ,QwIyIJOܭ2OIc%?;YM4+!k?&^. hM~ @`l؇ ;u1=4WrH@ʗ oLrэVg85\lZkm8}Xb+J]3,ۭYZIkD gXyO56Kdkh;wd?4$ ­UBX= L[ p ?Ҙȼot6]/6Q^9uvqdOwQlo,&T+dFS^&&Zڸزv;.-+w 'sxnʈk'MeUݒN=>6< zړK㔌۾2ۮLvz-#{2?`@`VT(}S)3_LpN;Cޙq3{wHN|NmG\w=n98y-Mw4v"ZS:{Qk;Jd~oAYlqgȿ4H#{2M08X pv @`gpawHbUILdw׭{ %hzL}ō"{4[BqS k 'Y9ruͩ4З|So!ѻڷ?uWG3t3/ѤBuCza9-rnErZ0iBIMOBJZ٦D%P).D.&jDOs AA@;G@_ 09v|!2A]1&x 84ܼYlZ{7ZÜ WjaSZAtW"Uh!B!taK^h؃ pwvb~dxAwLcci&@ߢ}gJ+iȧNDu3"iZ=YIiW[P6L++VjjEK LJq$Y4ⴻ f!9]cfVv SL,K8G.S]Xw"iS,U#Fw?hcWTȬ `zS+ "}AKy_ILcsy^Lbi.STTOv&nظuw؁]fR(É oMC%vPPX-cѭ^aߜKS/LOK9@+$PyS[aT@UxvbF'cA;V}d9 f򮴖 ciF:'EӢb-vA0N{e2jTnZJJ3b,bze9_yΤM'YijDVԜUNsoA,_ȥo9C L[gJ4-/8Gk\R5 `IY@% v@E<_T|ŻWLwX9%cYN+ά';̔+ji]VZ5 69  e2 +Ms?y095U_re?_i 'Py#^I@Xl.~$ߕ/̑UdgD@_9ڭ(K*?uP*ʞlK)ͯx=Eu[ 9 ެz4Bz*-hqGՓ]lc,ڜ[oLWeI@N~h U;F2\w/cwwLiug9?VqfYq3/Pdi'ȿ|KYoeͿ9n'X AUBr6~FfD%( 34F`Gym}&%<O˽bvsv 9B"W9H)ϪV'w6P(bͲ\zкb[ԳĔ_╴·l'WgY"W)Xc,Ջ!Gv^/|~.R+1`^Z@@_ѳAtpjN6YGoCi3݌t,鑟Y {ݜ*FMp||8JF^$fj :xA0HwGc){屔$?G}qľ]Ѩ&*W%켤'[%j3 jJ+uVJͫ^0C5˛ 73%f^^1t5f;節6Tc~J I:Q5x?tr{!eZ1P  l 5B4 v?{gw]Qp{niLY#/vJ.QqVG'ۖ) Lab.EWb5.KE!WdO gKdz@ed>Wj,;K*TZ^>$Usɬ"ۗAhNg~\zP Ui81@`%;@(3$&| 揍 %&@q=~'Yqp}e{ż~TqNU' %ZTV8U£M wJR7R@h~vhBX7 />o%3>LfDiszP_{R2ᲵX-,r%q=qNX&'Kd='70)բR[Z0Wש)VVŲ^LOr2f2,QThHW*+JF :o y==q@c jVh@?72od?z.́ 8-% ~o^>9n>֘ؖwe&@)ɑ% dZ&{dEJj9ky=P\oN=,'{Jѝ T-W[0eԄf*B 8:k4ȊSX~*i=:?IYwpx9ErQ2!@` 0`/  J@_Cݛ_Uv1v whk*|wlw^y2VC@FkB{8íNp[GߜDY2ߖH;!DWp! @` gz;@7XOڥP=@,QTjHr^qoA-Ɋۭ:kk)nh0cN[/pَr~*ZGuyfYX9O*i(&vBYF5KFdB_p'vvؓFbD[w]&0HM#,c.+pN_(Ԫ$O@c*LL£- ߗ˚D«I!C`7yL@k"LNxUBEѦtf%/#jނTQ\3XQ+N!h>/)VAhvsSw ' L7Ky9OvRT*V5Y׹fs/- }a)0 @`g}?}2DfFL( P{"2ݞ8JV%kgi.-ER6Sڤܒ7̯b>z&-r&") ӞFղkE#t*ϳTA9Oʄt߆u˫_LG&@`'0`'.3vsu9vlOř 3TN}#+wNgT&!W^@J;pGswfqgw&Odeڿd_i^r5xh  o:{v0= :# 4ILikOZF{iyX%W,+z|i]URQ}'k*T8߉\1k#ew5ڢ_+e(y`V%ŒP(eOYoOñ4]ͫBv3vjW@` S(WWݯրfh:2^(^Lj5 "x+ `2|+46 `dw kOZFSkVP(%ڿ>M}FL0OdCV`V_>@`.ddwk :B 3\=v@];v|7w\uֽnR Vۑ ;~)gz 2N!"}@I@LcYT2H`@tT ՞ ;MZX*=캑3iۖ}%՜SnzbO{*Sg)WV:fYT\?UNy͌o dX'ש@` 0`2,vm: gKI ɜIAxd_<ڿhOF %i {%9 g݇ FR X I}d)}-2Jc8Z-Nuc`Y,tvgMFW7:5KYEi]gu-UB?T7֗_בs-Do`G ( 8dwۃ^{)ۆ BF_vlC'v:ң}J&o3Uտn7՟6%v3M@ v0= :GQdl$X&F% oH2eY&Lf(6dJg?֜j) p>^悊ʩөgsl阉eRq~RXz4L /C8e3uðIysV@ @ 9vzh7CuOe"2x #I4s;:Ή5o#&п7R-lh,;y_^woǽΕ|+_E9 dx#P >G;=Ot& |_6 <6cF͸%\597bI-.)ZrjgYfi1 3Yuba<5[ɋ`sk==IeZI(Ӄ:p`%ڿ~#ѵyٻ"V@` %v7_:7gB8d&'v?GDv/?ΑqGsz#$m[Ip˸W"yӑ۹f 8m) ! 3sgo ooNc R 1:Kғŝ|feʊLhl6wխseԚGEuV3qmN=vW"gt?k 8p$8B@z%ǽU?v=5΃Z NI$gԤBݫzEGtͿ1wwj=vnY?+l!< /m; g{>|g8<dg(ѱD!?1];R 3dwH'S bɀk@:b-%=IVYzVUݬgpI.(FBbrZxŊ1 5&^onwk{/z{W_>5@s`9@1mnR+Q%EW7%NZEg\wmq.lw'6ԛPVQdߘqo$8KY@;I`v"i@N@%hx{r`nʳju-SkLA\3&3+T*SxOa&qw')U*V%^ K(3Y_E+k5~ؔ@0'8 @ #x?ر})6iL݉]rǬ6XepOv=]iEvI|f(?8 $syrpĚ%, ]'ͮ3cdw#G_'?%j=4?TU&>{ DM˜3h՟9ɬ_Prg[==el"*k<m3Q\z.Б  Ts BJ@'>8٫k EȜokewc@sܱ\;|Ƭru}^Auq3' #?h|%Tdg.hOπQ@ƽ|!@` % `n?]0 Ah}r-zN#F1鎍܀&:k;ZؐU(-$˂峂KfY•x9/Wӷaknm ;D$Gc%@HǓSҔs (3ԙK]QϻUEzڶo6 SMH05}KF˚qY_EG`Yo k1!@`[3s5D(  jȚc8cS***,U9ׅ{t}Yoi)ΑgT-մ&ThDSNdd?s[A8z&~>c){$NT%@k|M3U_dg:lff3_ (oOP̯̼iP\wнisX9BJ 0` NP*|?10 Am&@.m|;{k_:\:o{ ;= pO tO/,݂ S`LgR 3B@Uȼy8slgW߱u%&{˓Kgh#y[ҠYz"mTp%56h՗ԑJ?~ @k! `R@;M@xw~ih%F>1ubgLjv_zov^3w[mό;]/#VFnu' -z 0- % @`F *Pot& _L2ꜶivG]]CS;2zˮf` ?"TP{&x֒VeL2'&:m;Ҏ WmwK>v8 iRHLLp%H3E  l$fleQvzZL`9 %d=`;ILE;Sr;&g]aqffI96/equXEE[YoO B !! Mw͇R 1B pGW[0=+5Lkv3[!QB=di$_ȕhhux@`_ @` 'Б HfDX|HwɑHVڨ@FQ2oey-[?~ @`+0FBis=:y4~,adw&ٔ>WZJ'\Fcwm-d-̠Ov%(ґ$&٠t/ͯB$4d-&@Xf,$v @`Yc+3[;uLMYTHr7 -4lښ55VF9Qpfzߋ8E =h{R@X8}fuWoXv0ih$&NeSF ? p0>]M@`WW p&3d:%4ܑ m% mruLS鎮M?jWvn[?:fXĹ'ڿ5i 5:@>:G[4DYYu]^Fsϳ4.ͨ W:rviosy/5Xy-sd!@Dt5h  ܅:lǽ=spLqt&@K`4aZ][z,1}5ȿkO7p o2@-Z) l}v?cDRp,k<x{0CSTu=mNvNi,h@JdͿF7'DBf܋H' @@@=2 tв;@V&tbimą4jY6 ]%@K%S! ?=aWߒI"όgAUf鏎kk?L?n{\a(ƖڀY, @`Y6`䲺]@q1t}J4 `%;kw^5/`Wn @Jྍ7pU!@U~ Ó( >(PU[=7r]Fgv{Wrۜ!@`RT@k +/JA?HG~5 mx @-`ȚoAt&s7<Bˁ?'\= @K# 0 l pcȬ K| p36GGGQd_g?3KsБ] ߌH Br% LK@}ĄGx7XLfi7}oMx6.߬Ek @`bT@k'3 Lq5BȗG[#ףDɵߢKIS!@`Y,؅ M'8{ d?>o `ӱ}MDIr)6366@X&x&Qgop= غ\L,_Um15}|#   p Rs*} Y3㓽ۏALY(G6m2Iosy/ϥI_uV@Po C @`e{W#A쩕=5҈]_fH5ȿ\;z-8uh  lflE  ?[&;@< Hvtw|#hWr}h _t䟭v 4 @ @` LЌd뱱ev@`wF&#Ƽ=3Wȵ_ :2@X??tg;osvO u\8JcZFc? 7Asn.0f9@ @ PȂ &举;ְ;zn{`o5* @[E\4VH@phNGgqL|(Rx( L;K'b!c v#u- O en'F?w(z? `푘K5CEWȿ ߳Aw׹4_\Y_E 0%fL 1@yLyݗԊ/TFvHn̮Hsj{f?8w6 4^Rvy@@<w~ȞGч& 3xVTOGM<zcn7|7)g>hAbF F > :׷cce]c `c%\%ڿ̩(ED{h" @h I @Sg,&x*뒘& sv "R>Y?< @`  3Lvdw\g8#*,s$?k8 ܙ#wF@qLG, `w \N߻ ڿ% y 0`^rA3vK${x be&@ tF?iFheTAC@@<3p7Ea?<~'"ڿ 0`~vhBG[cE{`o翀$ @`XX Tf ?JfHc)<D(F||ۗ/t #@VF+CME #J3̞9GWǵ/wtw8ڿHSFw䯂nBFO# @^g?FOOxwcIw9,߀DuF? t636J@ofko눷<ؑY?ב\Ɍa{@Lmi 'pa^2USB@=} #W2"O^7ss]( `O@ @iL{?:x/}.ݓhG]}+eLNiy@X5:j@h#x~c4'QL㧡1qwbtϻ?B9 @`  4g[e&%_woý íA @`5@p?z <>NfHcqDp[򍆮7?G'fwawp 3*!@` 3;|`́L 'odͿͣK7= # AV@'8 IDAT_=?nE2 z,Lm 4QU`O{{׿ @Xf, % @3ghDkYY gР恤KM>Y/-> ;Ǐ^5 6b# @ 賸7!@& E @`6\LM^V,H ۉNegHCVJ`^&Vy* lx&w{gx> Ï$ИPNG5ڿ}!Oo} .^?I;YA7M 8p$8BK p\ oE 087;r <68zǚC@H`SF&6B@g-s3|r4$ xwc u=囈h sust}_KߡB`]3Z @@<뾱( `5f$[V}W;@5p/ @ 3\L(z&# @ $#{Uq_2|ƚ%^uLCHKi@3\LI@+L* /hOs{U@Z,a-R@="yȯL ;C)_\рDGy홋7zYn4@35 Agz(IfhIPF8 o]E!@`' ,k`'ai@ 3DKcW nͿDUs/b Xd ,@<yw8&fݚZ{J\AL@LkT@@<{vd?0: ҙ޼w=o?O{{׿.kgXC6@I- g? q9W]uE݌cb+)KZ5!@j;BQ  @>L?hem| .^??w @`{t1  $x&Qgop55F2 Б >7@}$`ośտIOuC' Y! @Là3x=g$&՘/q+o~g-m ܉3e@Hfgɾ} QIt@/zuc^t;_Uz^F@Xf,% @D <6G2 o_J&]3@X*f,/!@k'|'f|ĭw_\H:E? fE &|0i u @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 5sr3IENDB`ic12[PNG  IHDR@@iqsRGB pHYs%%IR$IDATxZlU?/ZZA SP49'l!?!lM Eec,-:\V M"?ZBKi__ߏ{>k^%I;{|?si/t߰aC̙3BkU뺧FFFnݺ$L 6mZD^ŪѨԶmJx]Bן۶mj&{ڪ\ r d2*N˕L&P/_SO=ua26opuufVuuu&K[ɂVҥK [ly}*H8>`tܹ;f̘5X]Ś$ @ɠ7'p&HJÕbd[.ƇԬYY2c[}B` t<%wW/[w޽o*QW-={bdG'`XR]xQAn<ϒU@1!.=dXx+V~)b!1 #3,ti '?+c#Oa` y# W}}}B۷HHƍ?*Θ78/vW!ܐq9|!qA3dC Ux?vEB஻ \=ds+SpuvvnعsQpj틣ҥKKH&JnF>8;ZD&AI&+}-NEp>;>RcDWn&h $%ȍ{RVԨ1Z7B7PIƯq}XßCD#qm,<)EoĈGydf+XSHZ!@Wea6&cǎ 2lIg1#y%fd %n{qKĠ O>޴^0 Hm7My,A.`lR1+] f/kgS&eq.^wd) t#B%=2P?${O6TAI6)E[I HI߅Aj*{S^j|)]ɾ@@)UɍO)0J7eP/#;C*L);)}T(H T$Vgԩ 喲hkk?xzisO]RqYUkx)0ԮHGw4J:>›ưϰ!j՜F`lT)I[n-7XVq5d0C24PC!,WX[ak/ꎀ֕U3bCXG -`_Ẏ|cՀdpXtgܴ>|ꍏ$u W|&ނEV BEJRYͲv7jnhL ?\NPh![@: dLމ`յܶ V(H)B>H IRxBj9/tjM7ID-tm8AY >lАb}ybL]T&ֶh0k/ LƄ"|%JĹB|`#!^`@Z8T\%NCeyzε>щO(`aP.2yqɞ/*5kF8ՀݖM% @^ ̔L`T@iE2!p8㹿x'Qa<%@SZ=s~HE찋.fbQB+{m} ;tqòα|͒ :psL:}V))vRs|Έ/ɻ7<ӗۇu-&ݾe9-/Ov&&kVuqvZ<5Qv-fρcLIX;29^-{:OɖCj:$ zc4GH}ymmE婎mET_OnP(L7@CsNqS)~nhGW&DE9 $rEa^08I ̥tm9AH9 1 Q# kG;n @c!PjFIxX'(XϹvxtIrs!<8I"/Əy$@muO90;L8Q/!!nHeD8 {&lyI@#= @pXP5V/3w^gH/ hKk' +=lav|UȊpMDrJ^ŚBI poH`n` mNM'[A*\=zBR\$@7;j#*vB oخ T JnnBV^%HfJ_%pCC|<یC/W<dn m~ a,yhDVȨCP"~ ANsQZҰx{78M" [^a/Gوu8` ,`wV5tj`8 0Ʒ;_Xwʹ_׊P!rBK7 \IW{mY߹kXwSKxu@II @Z@_{%^Oqe+SJ'Mr0ch4 9#9@iON=Ƈ'8 :/ОH_+QbeZ ';M$]PH@ zM G1Op.Mx4p<g}|<1Y$\};r?ONi]ۖ>0otzIENDB`ic14PNG  IHDRxsRGB pHYs%%IR$@IDATxdGu&|79FY( %xXk[^ۋqLƀlͮ׻$/N,ke$ A !13F#M~o^n}uϭݯy}jSU߭[u}EpGpGpGpGpGpGpGpGpGpGpGpGpGpGpGpV #,M133j? :VVD'< iLN-.wpV~h@oݹs*F6lڻwUV]MRdž}*6-kCuf5c#2 u,S%)J~}G? ~pqp۱cn?餓&: ni^G`#+y #k֬211 <7'>\}mjϞ=OĦ 2硞;nڴ[s')Ϸh3g|/]7J'>Cp/nƸo)ŀbKGWWh@|E=C{MeG97~Yߜ"|{M#PGm᪛]r|bԧ>}nTxHo&^:K-϶Ҥ} Igm⛨d<+K1<w | 8^eb##оZJn7]M8ꙨmsU7u+[^,:܍NdKR3e:mqSཨD/ :: @(n^WmشiӓѼH*~|Ѧ|#mS6Q7YO-+] 5R3 e@9WcAgWVB/#! ./3ݻwI§O [s8elyTq7YjyQҤ6li6Mre{q`Ȧ٤W|X_駟/{G^G ">|O/GGՊݨKge ʖWlNG}/Wu*M:ٚ(7ּH'J&ju9OV  _=':.-~07ϡvv[ڼa[GDigt,VOYvMȳ(_)oVDsiI/6u:9/1j&-<#_5 -~0~ll?ু9<6\ˊaFYvw+⛨G(Fr-VDs]FϼMzƲj#s>g̑oBypOfs`hp 8RoQT9xI'*[^OnlM:YH&j҇:WTnmV&/YTqv,ীgPƍ;]tpPGwy% Aݘ6inVv1ɟ[Z^vicQRjFk⥳GVAvn斗e#/ e?t.^{-z؋#0P;󦧧(\'pSd}'NdjS1Qk#)4mn7f7lk#omfe3>^V^gozӛcl:V6HMW1PWqs6&*bHU;ؖ?#u-&n-V/J?-m 4,SgeQBg>x  yqC;{}ĆS$ΰhhJsn䖗)>cV]6x+|⸁v+["=e>kSml~Vol_qNAC/x`&$,oD}= `'>⩗-yr|rJ_d6+'/Kک >%se,_n^A70O+lz[d>F׷9rGGG=6hj.ڴ[[nWy8:Q2'&J cpEr:ٲH׉O1sȩ>l}f]n݇^l.:'4m?lrB;?`oaױ "@ mDc+cs8Xڷ '44}7>?7Um(em+NTO|NsN~,'ލkSlon}ox}dX?< 8>K?.hqE/NC~ǎ9,ܯ[-"ڼ-*Y9sYij?֗<|->8 7XҼRM6,mW4Llsȟ}oxZp1o@e]_FM_MmS-uVI'&N4o'/ڱ+XNr0Eqz+t.w7oV07\=6޳|*> צo̍,>msMEiRGmջsXwdҜo+ۢΔc}ո;0 sXhǰ~?-"йɊF\&^:Q_ЦSm[^t>ґtMz~;/[. C_C$'{ߎz&u*66dnݪ/4){?tUYk#^얊>ґtM|PB͛7 ȸgV<11JoD=:nvO:W&n}_F|d2ycWbksהGc-+!?> .:+X;%mMz.o̹~4Gp%♹1F܉WNv7.SA X8 މ&9{=lu|h㵴}܍`7!! uؒtKI;C=?e5PuW>GdpD`%o͟+?x-MAOJ<\fSZP8ƕV(Lp1{;9"b,{5jؙh/*bR]d0gniu֦QnTJsآ[jmڪx Y:^98w/@>}D9{m9n؜~s Wks7f Uԓ_b7TA7Q#bs|VDdbVW˱xQE;ewϼ  s8,v܇X|şW#7m̤M~t^T}Yj Tm5Q#ϢRqbeMwmsܖj]rT0cY8`)_x.R}ڬE+RG&D6&ē|,RB:ɖgB)-ͫ.D֩WwSse~"OO'tݲ#P_aG?pa0 niuֿ>oC1"G6|#̶+F'eoc/&:&K9|{ڼ܈.,>9o7}`팵k|aЯ]μA""wLOXO~nn$,^4k#]ꍈT:mB9/ҜʣxA0/K.;,'~`9>/?wv7&;cmM>Y?ꖪ Ӿ^y~,)*~wffe򒛨tS(C*YP}/_䉧,S6d ck׾ſ'`獀7t8_ X_k7mUVVfXyK=66m4MVgym.9>{|V׉W~e˩gB)-Ϋ.0mکe\XG|$~;p'XWG`y {[Ї>j߾}? ^Q kQKu76m\hgMzm֤S|7jm\MzHYl\)_g-bͼjm9 cvs"-BKo^G`hw}?h$Ÿiuz~vīŢشY[Y:Rk?q܍Z[Fiv(!;ے,,d#*ʟ瓾"*=xQ;=v2Vwߌ,'~`9? [ڠs&/=i'r6+Ţv'WmhM"3tMt=)澒xKedgoXnmce|l>y?>(Or(.S?X`9P6Wb >S&$koIroHCהxHsIRSbF"sGl gN6/^4!YvKWSG` FX (~5}MRk6M-_rXx6|/[7m~lғW隨(!ϒ?XQœZMl^82bRga|p'_t8wu捀_:>wС_+P{aFR򒵑w)OgsQ&čVe'ڋOXۥ˩s^Ŧ6SG`;#q?Rh^vH'*|,j֦l)yUYw)h^n6U?_* bHe&_=8'zk^>Zٌk>> e}wXlD=_@w6|AY7̭I'l6l(kӵr)7HKje[&%qxxm6ɖA[?T9Des+,QDOA4>>k@8]|`1Fc\Qw 7wɴ36zQis`s5*~6xZ]O)ڜC]qYMrtOY$>KCjꫯ}cˁ>}!}]JmMW6_z8wc']nZs/Ƨ\ln|qdz幣b=/uA瓨3?E^li"dR't/t^h|/}|Ynz~@7#n踭_Esmݨ6&;pnJV&MJ[7Y>/)KKG":.{P}E=NMe#k Qwnf7@TG=_]vaO, O?R|W:uec?ēr1| cOTQ^,<)7d#&5E#{q 3^+':+U։2La!'{/Ð|[򖽰W;SdsV ѱcrr<`+Lu&Ul1qb[}gi7y[_Ǎ3'k6ӯsv9,X|L?{-طwZjnl^. )\lEY܇$['iw~c\hݼzjnرe{<>+چ>=}ݟsPyAx٪c)eMz[|l:هK8%+e,|7F9^Na:tG`AٳH+ag2wx_Hŵvɿ1Pn(NUl_;~J܀%5jsG߯Q@]4'8NV;+SGCzEd'bґZ=y+˯^(G[wȋZN6γcJkgX( [Eںǟ`g EKtZ^qs鲅QD@k#'ջ3k>V׍WH IϠ7 'O\Myag<d׼~޿^eG Rs?.L0zØuC{g`| 7`-~̷bk.Z%we >9.vo|Bxt3REWuJ!A|`!󊱜,+^ztMثQ_{X [MҲǞVE  FHmim;lBj.z7&^x?)sJgy(f(Ƴyo?r 7÷CQ2ڳ<<ުVR-ƑgNRǖ#sN].?L>̛;YGoo<A0|K bGv1傪Eto.ϷhctZxebnuj347 \7 ]d1!ֻӰ['D8s.䔺~+hiYjy37/mީ#Hwj?o,j<^7nq?xRh\;?#_v?PGb|xozӛxB.-O\t>1VUy\E0VR˳;rdC~m%יϋ#0 D#G 6jؙ}7%IG1ixrջnDžZƿM?,*Bdr(ѤM9N>ԱF?v!/pnan/@THJ`;5@ ={tV)\$7&6֔C9n{Em;?+iKk+揵[9,di.9l|8睙k~8}!P^C 0qA0S:k6ߢ mvmvZ#ě]wKO?͟V1EOӿBM1ޖc#^^?ivL{@jۚv.]uYytߟ\tzB &w"X )YXTrͯa+U zsAK';}sk|֝W⯴|G>23~v/bQdnAFm y++Vzkcl\coKkuz1?*/-0],EG+~+P_M7tS*ێp?~sx ںō+){VN/e7>k_|͜^;=N9'`\HEQ}wBN\o}F?M&yfeC~ߪU^+}{G~׾9J@?ǂ$?NcIxK.IfeCzRS;11#;̉_ ;`cB2,8|B;(+[^qz-\bݍ7RgV| <Dbq.7>uq|hv|Oip }{]shD/aq%z)tKu<.P~]l.g_sPoY ,60x'~sDΗjs@PӇ+ߞ芀_tgxЇVa@`PX)VZ\z֫XSoǠ5q8#|b{3_Y<|j_|Xa?_}F C_GW?cnyI;e})ϧz4=EOPЧ]hC/ qx:eR-\狵;>M?Ƙ߅vsB|}+wmni^=VG߲.  ? _ coo],G_+YU bDS#Eqc|VsDnނc;}d+IG|bO6hD/a^%?_paQByrkbۅ[rXJ_S>v?jJcwAǐsu9@kՂ+9N^_צ56gO@x,1wy꾝fyYdWP{ngNT>j|}:i#;$ A J 3l\Pv.~ ]@/&o}m|v|9;㜯czPY9dsqS9akg\s5/gKgBB`Ν8iԩ26Qפ=E[,c$ˇ ֭SN~~ái.P'憝+&&/r:/rҦnxkkZMD~կ~!svvBeV\^xOmJ!^T9$w/:vm/@ 1|vݶx~x1+2~K.kR8L./bdu#\fz*:?DΝfE/^ c[/~ $rA 0"’/2VNiO"Wud]8Xӗ/?kæ`<" ]\">wS16\]TkY@9ӹ8`x|瓍c\mtzSx듵w!lt.9~0 BA!~h~ǘdꝙn6Q5rg~ '@^c9'87IknZOA{GixGYG(n+,hv,v[*{?T(cœSv؛2C=Kv%ZS/o}xq~B e*򕏥Sh7lhof: ́QvCs]pŞ;g *3=I~N9W_&-0ZtOMN:-ۅUPw 2,'0{|斍aʢ⃢SO:My_AF/7n܄ɂA+oʡEZ7oxqG-79uMTL?;򳾶^x{.<U;];OGdΞ}ni diXLo]dKi]s>aW̍`<'5<}(ˏ|e1A}~%~O;=h߾}<磦w\,T,/i$wM QpJ/:]~^SuX0W>9tv<}ծܽRCml'=}iB t2]vb[N KoՂʘVz')Kn'&&῀4 piu mvT5C &zܷ!~0]C}MHG^MytI:E1~~}:'@Bsscx5dQX^-Rߤu7vg~0LG}bHwh2mUzJr\_Us7$;uj}b˦6H(cEvf:ƒ!c;|V0N]dk)^-}ȫHo|Ў~ݶf͚r9ur1wiglcw;A巶G^ ET ?SB"g-2^~]PB*4QS:G@ppHD;9aY魮Snz{WzY8Xd^:ɲ?yD/sAylAw\ eK&\u~<߅y=E/r]s >ڑht^zɤ,c2_-8Cƒ!}A"h)H !!o<~:an||4PheT~0lG< ˒l]8-gO?}ƻ"9ӣ=>0s}X6W|2 2˒ ӊXi_Ol3sWTK8~UCiQ#snʔ(9HC~'3m:2x3Fn@׹invskγURxDlf׀&c])ƻ?\T)*;)}j o{H'Y:P9νninv\!Os4/Oni hu`"08XG(J^c _ !:#8@;&qGpCtGp vL\8# <~08##호pGx`pGhG/1q#8#0b#8#Ў_cGpG` ?>@GpGh5#8#}#8@;~ЎkGpG/Gpv8#8_ !:#8@;&qGpCtGp vL\8# <~08##호pGx`pGhG/1q#8#0b#8#Ў_cGpG` ?>@GpGh5#8#}#8@;~ЎkGpG/Gpv8#8_ !:#8@;&YfZdUcC2wћs| 65IG` 0B ͻ(fgYg陙b&bıCQ->Zp`Ё_TN@BWo>mh1Miz#P\>px_S9W%ܪi@IDAT*]rsvúŶo)Nݱ8mԓ7n(c>/vpvqxqX ,GR,!l쇊/v={->?lΟ$f Wg) ȱ}`+^v];7Ncg}53򝩱ٻNo^q!Ck̜>6:wvdDqL1qLuޱ_&lg(0<6嬇T ۷m*8SVmsmˆbŚcB^"Enx} ~{[~p6aߏwK'쿼PKj~)Kb(ȲXwR_LζfvN~gC]W}~Y[o+YэNo+f[W̎^YN_OΛm͞}갥# |X S:w*%Ihεo^tiF͛;p`.NÝOQyv)X+m ]9ۍq+}o߳=žPg\b,n+Z,X5kX`}pýS__L}fldl׾;o>_B\v՛fNo;=2s^nC~WSuyۿ+|6]]lE:Sm,V~w1CCxл  ?{*{+i AMe-630+D16d1M>fkfގGNqEoh[&Wcg@E [tYxuC߼l+.:Q3pҖx.fuNþ %J> ]G^T£8#K? \ ̾`6^;E[/|vd" Vyz;bSwRi󆵼 ;6.w!Cae2d[zl`{Q ا0|o8-kfƯOo1]oբɿv=pnIO 7 TK^_rO ?33;ul>$mm9[gϘm<0-~5;$h h~ pM<6uWq~Bw_ԳqyKqa<?fq]Wۅ{ha( !{333zf3}CĐ :ZC692?'͇xaQT?ke2?SLbj~{۷^3G.-f+|ةAy~$RmՅUۏUү?8v'] (M׀uhZ?2[<ӆf]zIQOE9E9Sx"~5sӁoZ 56=z|lZ9߿Ö}0!e9'61[3ՄW/Y\:\@1? aG[[}>u~ڙA}1hԆwNBH鉩OqF6i_Guw+15S\[\@e6^i'&b5UM@\&+iTbTo1~w: Zax؆/mM@+zKʝ6fNlb)M\E9VBnS35k>ߊ983ZgL4֦Qs*}}iv' {]LLl&SPծ4Uؑu1V_ ,~'N6nm9"QNTmmLf#?iĝc1ï֦ ⬧۰v1_FDOfub -|jPd~G!<x_r#c}],lOMZX#Aպ)r1OĔywZ#ۇˉ= j+҉=}kϼhzx%ND~áTf#`+2YH)1ZT&{!MI:|ƣ3k_/X~6K1o(mۅ@rL\Wf3~1C㱙 ps";u߆^li3b+6ҴǒIp3~s162Ow]iMUH14x@Kv;䎉Pr fϿ7_U"EmQb(>eE|ki ʝTe &40tά'ǭ~;b.lV0vFw2ή%VnfB}bG)%T5!ҕ⪍L^F?^ZT~lMM;\8~/{ĔWkRj"X#*1/um(}E1;x'JNAm>۰9"wiLYc-T2rR%'e2mM JFcQ6 l MC}So~`dpq'_~Ƒ n'D1ydBRUL@p3r$Ubʌ\ A$З_/:mݶ3vNw b Q }Thxnu͊w..iM , /D>"XB1FCn3))ٶ |(nXkzS. 8qm7㈼>5& (! #f4tAc ))Gm[BpE}m9-~dOXOrEX[Gh NWj痨_>.l z#QQv |JsK"| _ˬ1>(Jmp@_3I 5E1U WNfY>w\W~#/8ڱպ.DFHѲ!C !4G̊!5MTfKJLb;DĪ}Qg)O]}}6ệ.V xUk~ʯ{g..c B+mږw͵G6P~au#+c0Zm_G[@ؒOo |p'V5g[ǯ={&ɻ#[b7[0QⓎǘKxh2f7pyRJCs()t [cWJcp3WrӾRoc6*ls93c *7 ]̙*F>ˤ1_+P Z}Xkt|y{5+t~̖:v5?:gXaѭ>k3WdNLypSRn IBQ\eTJL+EWnqIkۨǕ_8ih=sѵm;osvx̶j}:](¡R"VJf5*EUQS<:ƣ"A-k_fy. V^zȖ 2] +~B~ 풙@w]aQ aBZm?MM 㖢x*G A-GlKq t]j$堳xcfx>Xkl_Y)|Hr-c*3Nj01]ʼ!Jh| O1e14/R_E}2>)g>E1ykOyԗ'~sMXcϸxfx?T0CZET(`"[RibL1qEb.նWIMG m6 |k6'rcrLUGV:~j| c>&db%JIg|P2[F䒂 >%^iIe:yّn}'+q>{cY@<]gCZ@521ݙJl҆$Iؒ/Q_ u?$= e^[u\2Ҧ6Wo`{̺/8j|5ۧGuhtK9ĬAw >ƒ(D]4 j|KF|ғXjǹUI,*µBGO>?JF̕4%=u\fdi(ԑD^zJSB?[ZapGCo </xUΎ̼k7!}KB( ҆$&&.JK=j /zJd)c_m A6ʹf86'Ė6Lk fWMm=Q\u+W-(mߪ81Ƒ0&yPJkGc+z|O bUT^B | XZ^ >?n88s8o_[r>Ϳ\M#ZVV@QiԗWE07Vr/}CJd, .(}Ck*wr{hS T>HISՇ'.y?wiIt嬧]̱_m4o]80H$[ XeH9{sbE[\9jU|0@O9,3v?Nۿ:8yXfמsّD#7 tרO~טO0UIT1}bR%-j+)krZP*]R/iYe×+h+=IW|x`qZY -k-INt5Z+E!yLZ;0֝qmQj_i}}O|OhHI.*8ko0SJJsr-Q2WXJ!$).Sx& (<~Hc<"~ u%w~oJS;,vU., 2Gf y- K/%bAOVQQb?JTZ J|Y>$}hgwןqgڹU>YCékK}챿Kb_I+}a@s!=U1ڢ ]hWU6p veHDŽbt)S K;_-ǭ?c!q_,1/K#W1X/4a#ҫ):h2Le.I `LDԷ2ڡ4C2 D_(QN6gYpO陙D@\'$g)/Cfn{J#"+>h"\311R)%< 'hU&@i΅2[LY Wo9s/ ZKqry/x.jm)XfWNjHNA<@Zhbr&Pq94~l4!t|6jrLu]4?6r6IS,j.-|z'.>}R[5gq ji]=w[4yn67l5 jPC1lM/E2Ϩ'1.1ɜWKJ`uFc˜RZƗ3Cا|'=|a`9K6y VAC3iAKKdD<\׸0Y)"gfQMKt0Gy 'Ub6#ȔBPӔ`.SV`7/U$`Qc*PU!(5G7}yb2dl{sG )esYoZZ'k_-dJy=Er9QF U566PDJ%K-Q?|^]58 ]-M?{-Ӎ3ip~#rn\̼+?7-p핛k/1bkk8sYO}_yk-WiW󪽲JJe{OYe!S5W>U.4]KslG9j~JE# h-xb`􏪒aH0c;^\e}-|MQ[6)Q =c@~Ź<kGz/bly'4HEL{bJkTd%F҂d9i~5&BZHB0I]XdC bL`%JRp*l78aɐtcɗNM#3?њ-^71HUWs)T *#'&yw$n sbJM$T,Ħ2Ur,OpOİÖm{\ 5&5YԴ+>NӰ`q+䒋C!m!&`2Ab$ql(>++I=zm"O_0)OC*ZfO/TUPIqvmOy l}mW_YFN$}ƞ FLC*^4t?o/A17ëP~&hClh6C/>eC&GVv f8ȏ[=!%<"mOI>C\bdpdړSQVrx *imU_&%SƦx1K=Ҝ"ƀ >=*䢞֪͑{æ.;kx5g&W՚1Qk+)#bhBlJsy9{Oki˒Z |e")T5pFMiSZQ4D0LWZ_:{AqEB~%O>ip}֢`aL*bߦ+B"k[1oԇ&P)m )CpChcB(_sv") l&&w,6W[(N 9GWJMȔZ..|Ӷ(`q@oMOS߿8N,qAҢJBZ9ʸȚ;8kR`h}4ҏPBRnr% TB_U6kNV _Lc+mnԑf4b [aQ)y2mGѭ $$Qom7Ůwgof4Tt0u rŬcPm5ךoݯ2IZGґ5|rh%m$ .BQV1Soy96`h V#U߫B?.i#Å\rf Zmt:NL]nS\MŰlJb@g9AAuBmP&+ БBؒ:%?Eg?ϟs[ݘr@vZ6cJD+6 mT!|#`=1):1$A: huؐ OT1ϸs@?8Gylq o kW= W|JuNEs҂d"|ў=:i!AIcRծo#5ćFBxfbb3-]= )qbRqQT<b^q4|Y=}D2&Li/9tAG-[6#.x26k&ֆ) a\Tv :5E|Ap?GBNbοްz#kK30e&gNM>&%AaVӦݖRDžc@"o7J@c,eӊ K~UU^bncpj(ӫ*PV>R% \ThȔiST[ƞؒI"w$$&ɏrrL I΀ORWJQW%dR5-Gl1$b{O.o{v45=5#8}tu.*&(iϛT/>E1&JLeŠ2Z,3F[#)5K 1aO*Ŕ4ب ^ؑ԰U\I})R[|Tn8q'e1riDljl1'1%[;r]5E&%et!_AC} >qŊfqA6t5wjȐZwW2'PF֖`*9v8uES)I'Z3BzVÜL%11ɟel](wٙk)e+֯ GE-P3_}jjӹ[[/%jG.v\jm*ll,xR}KKbLBLeL&ڂXl̟Tmݒ3xC[.~g~E5%2XxC 4b5 5r_bLHnO!Uб$&̝}}㊶@b|\QMǔɥMl2&y,6SMjL_F b 'ER"8yL>\A_% U񯔦hL?6r Tl2ID_ 4*}nXKt M8o0l"aTS]}y*w6-acue&gjƱ'c۔շ䚘fE8V%Wuw-WwnI -!@\&Pl\N5ÎQT9$ r\"]p!C @Э[M~wsZ{scs׺971>{'ȗZ=;Ih(`E)` >b m2^^n7vlY$\9O'9ܩLiz`eS@M'T?!_4,|3_a'&yNC]! zMOh}:JrPTsELI[YS\k$5R}8v$D; $%`$/fѰCl܋lN0 ԕf`)i!n#U!M5o0fFOgyf߽'`9= p[vp|C/(†;Fǁ$_^ݻ<} Woɵm{t?vAw㘞v0,32g:xGAc=EpP(hExi7x5"+VO$gʫ D̟F># k*&tTj~=m23qvpD2R3\9U84C&g> Ćߣ% |96ԣ;">qy}hoqo~N$5=ң.i;H# #w.6Xy!c}dh2F;PG{1,VeX8j͇i& u3vƕO)r .B[*P'2CcaTk?m%\=M^Me1d jfb2$54Fl#2ninyXq mYĢdªG4+t8[v3_9ɩOaXsOQ.?FLA:t5@,Dr\e~\tԝf[hƕ&_rF76sӕ|Wb1ԃkjHB\7(H12j?X5B! &u.=|Mg3]?L/ȚAm.fHC3dXŊ Kp*0UX6 t.]w>39IL,?|`q=}'9~Át_2 9?-1 A FJI0 )1xd~Z x- KkF+ws915v-~Y[t`)L8Q>12'&U}˓5t ~?\7ϳHĘ+Bsy|æXׂ5;1q:^?SF5>Z·\$Z)pJ8ql eIapOr#4k\䑇ߓ:Oۗ,KӾ8_@IŐ& bܐ}ι?~fKnf'4U D3<*n6:`(R8*k @+ #eiVK]hDvm X gsOLΩ5k&?, $WpC3LUT6•8H01+]- QdNcU2g;Wv4Lؐ\qB4V9HqJ,j805VqEtԵ|R`Fz qkiCW] $/Zͮ &ԊØ@m X0A^T\*]U)j1M.)b!Z#%!GwڣYGo%UkX~ݛ޿q?Aw?(eO<^W`ýF| 6l0襮凌A#f.1U):gAOl|Ͻ3:vO۪.FVhkIC>JyFbp`0E}OCCVG:$0Gs`(2'y,=܎z8lYF@n #,r^&p2#}d '8D5sMER%"1Nnz5pxg2;<д^©>] ,>?~3@)gDAu #,cLOjX D7_\R ]+ZGV|'EPi ƍf@r5_sj8nGgf/gJ'3``]o]zr1 lF4 EuF1[yE,V"4b#GBҧ@ 1<&&1̐Qc~"va{dCh=ѣ]YdGwe= D,px,6,4C)^XN0H0#6L9ͳt|kr9J5 (M˫%awqoݞw?] ptyf 0/feWŊtj.|zF#Lt}Lq8ģa2MrAI(^D(b?GЕ% ld%c4Wf^ oZ\=,x9\Ϸ鴱47溠n$`)oA-1%auqeAHxυm Z?fxgA>Z 3bM1WMi~l#Fq,F1| o=I\@H3Ogt9g|Eª'X7xDqT6BKƜELV֮zsA)/DP֕cϣl->s).zO ZF mɒ9"Z.90fڑKt/ޏAYEyAؕ;>\Xts8Oz90LC8gx}?T\Ӏ A\k.FxHqrM+tUP8e\iqD-V>rp!c bkaEս1Tz~[cU{_x"V_ʐ-u!56/КgPEA] 2}\I_K)=mJ_& @21%m.z9>7d7H3@IDAT&Ɠ%TdE;)e 49>_)l3~>\.[^B w镀Ϲ@_ux`rb?vb8 -)_ bA,9 lj9fˆ;dr,bΪa:C9IRi'S6h2?]3MWc"IPZO(Mg^i=q7C4&?#,J# F;XsvƧ{.z{TԭkBjDŬ9 ) 60Quu!L#Sk Q6]Ix/?ȏ#e{ L;C06e CyD"2}M,#1'D60AqA zd##r E'_^RZOs?}~cu\쿧-];Noc; !W4^>DHCpҐ苍na6Vd>9?h`'D7 r*b`f<&>Ql |f7pW|d+qu=@BɸxeW*{-c8jX$ekjlQ@O<% n3>c;]%o ffwe1;|բ +9 s2T'jt YVdR`;/DRJ Dpڂ, lFq.߀G>x kDPtǣe !'4mJg֩ygq).<c O~; _" EzyD0I2Gfjo<>N>1ެ $hyd}>bVZEJwl[.ߺ(fl\՛XKo n @R p@I]0XT$Txqlax1"\pGMg8čNmk˫u^:=`}mP\nj^pJLtۀ9EȴcrIyTjSoW!1RG喌bE.t{c7oLow1rw w{w_T Z*ׂ |-F„ccXg;4 LQ9ES_IS:D10>FHTO[ӧ‚./^f~Xu됨"PT#4x@"Rc]r9ds 0Hp X6O:9dUZb)Ei n(5vdyftx »=8Bc_gŅީ.H0:FAXǐާ0)YDך7T} n=Vl>-VK>>\,hh@Xnǿ7&Cl'S!e~Ie~LFhU\@2@^CtՒ.N-V 2wNDJX82xq0IHɷV%r2~fK;15_>& kPP4:8%lF֡w DhU&|"+}$OzFcL/:(\c!H>rX}⚶^pɟ_~ ֱʏZ~&"%ڠHo(6u}d1N%}eLĤ0OBН"#b&b2-2?RQrq 0$\FȦlzXcq_4آHZ;F" 7ͨ4f-X2I; /;vtoAȏP5HbQ ]1c^ey9rX{a"mXd%p 20A[ҕf^`.Z| 1hopʓ $rKLWehEs;ŝnyp[.0x^7wcci||Bnd_V#|MzTlɜئ#yDc#r@"s-ɔܧ%|Ӹd&oPyqТ…kf-'n/@}ŹIjC41ėdA |hа{c|s@٦ ,k͗w[Û?>:VMG\@~zb_]o`%JRytV8&F<\A8@O#<<uo~^^v > z&/gvRwng=ol8iXM@ 䫈LA1r3͐"S٭gH 넘.NvqIǣt5bMk"U"yZ>0{:RX%S^{czɻ٦ ,ͧwD|&RsAt,bՑA?HM| 2`Xu !@#LtL'Lqd~ƸE'=$ g_&׫nutҿݽ׿$Q>}t\~:p_g旯vSb`#tNR|@?6W}p 瀏s̴3<֫xchgotdJϮ5s:\,pH$aѶ$b5+.4e͛͞>K3uvLXU>4ڝq}a!; Tv+4”R`1RPL7NEйȵ !7 Tq崭 >UJKW)OPMhqFw?Bwͯ#}:sF{7sw":l*+'޳|-ʰS.5~ǥM;&<ݑ8n)m [OXb/kvq?+p/{ ]ywKOi~r@s 7|a_Gd|˕A`<"1M S`q4y%X`F=P8mCdR.u~c|7yMOޛgpoI>8` 1NJ`Gr!mvw'tm[\`2" c -'|<7H+R.G^}OEׄqֻK,ĵWG?.'Z#Nut k[ yɛIȇB f{4d|[,z 'rhR},]7 и*Rĉ}ǹd#43&]7-t`y'nL@yd@dy^hÓ1@03+pHLʥ:ŠJ2 !IK6$hdGL>T7 dwl==tӅiXj(ȏi%$'h %a`&iT1u U#4И܂{q=\֛ݍ?=VBw^i9dBHlqg6!1{y Nbu }FçG{zA Yx5Џ ']YޓQU;2Dd❽DWVr*x* jW{4`$F*:y#8 ӣӻmݡ_Kzʝ{ߖz!7*v!&VO|dqu'#$#r1"hn~WCVsQ`*=<5@b@<ka2Aք%sNҚS7/:}yJc]|O[/|~ZȂ6`?0FIc"(#b3?EG0rŅ!w^ґgl "J}MC!iC ԥX]k{ {f?!Apd.pZWF9VLOpā`kccLIJ~H1 j= ɭ^#Tva"~ @8Nz;|~!w/~?O-t4'C(q lx|I1`=6b`J)mhMB l[Vpk^!i ʉNHӈpH8Y]yҴ*>}ߡNfi r܅Scƫ;utv#e[Uc7ݰ6nvmjfhZ6%aobZs݅A#Lc\$&#Oٗ]jHL X*RX[`ܘmւtc t~ z`IW&Oj,j p9!޹op\hѪ={('q,8h8DPkZF-!Ls<y<&rw+sjUOz?@sO_s%k w" 0f?c>%hq!(`\eשmp9$!xǸlfJ#::?ȩ8B Ϡr H֖nto^ߡ7ӜjNXWc6ܝ2qӍj-UiG:I bm2 ԸBf7~}04t "I|SpnC~C>EsUks롡ҵ4J|N%82Vxb`.c >C8-!,Q6_cn@uMX+5='$I-n !F^5p% R$练kXbkpng]6\05&i%8͖C)))9Ą_rsW2r=3B}$)m5L?-3 \/:>O[Zcp.th[xg{u^՚LĎv/EfD@8 {*9ʍh[B‰G3|SM<~Oߥu{$s. X&*.0azp[1 4Lx 9%ȱEKe)DBb?$40e2ȼz^U]yN[\,_%w˟k[XQV[c!qk-gG&6Sa`D yܛK8:QIK6}LN} ;==k2 ,"ێ-4 E 85^iq[j~Vew(3*e p,oUލ->hwxtۍ07`:wd(|8|"cP `}^@n)ڌӏ %r r Y6:Id!d.Š/o̻+>s]!+L'5[KZE8\">8'GFRٚ|3uPX뺃^oćj;Fwvu7kpރdEU_u: \eŶ5u,u[-̒c(ڍpHp #S-<;Pp7ޭrX[fo=BxSpDlяA*_ 9GF9nHw" `2W ,:d}`wpx9ߣ ^%Zt7bܢ!6r XUףzr< kF}d$tCٟݟonݨ6]t8{)@[jҝmE05ɾ),U8+LiQ=ACT瓯ps7HX ^2 |L !e_spr/ vW⇎պ5Ųa!yd1i-a&OƗ<OPNαFIɦ!/pXdJzqK"V @>gt{m}S1/v4XM2.#XŪ͏p϶Wmw÷O|,Cvt ]Z߰}M@NX5J BRV/.2ԂH$ӄHa)#̋ Wn4<iŗ`wI5C279kau ([0X1}+0]T2?XKF_5QMʱV"D'>GN MɘvY4D=pp[ܝ^5Xҧ |h²UN1yn`%hQة^Egyr/R+ݘmQ}UH/JFt3~\:M#Ws6]T7//v`#Lr4k^+J"%ډ^8cpDka-dD}E=>Fˌk_"ŖwTH^bzk %Q B<"-1'GSpKjZXC?))5HvٳOsWmn@c_ξeGhíӭfb@ PK#xlOk/O6{M; LL8r-"!"9]^>cUBBĖa dHNV&s+CHeEB5!U$FţR 5嚠 bEm7Blq[' D4j=~7j׬*jVՊCbG -l$6FGZoKZ#6F:S gϴ-/>]4nܰ|{g1 cQ-"Pm(=2ZX->j[0q#fD3Xc~V@.'>!O!lM{exZHj[Ĵx ECVX6eI'9턄f23yc6oc{;.͍]|["h;ޚFsǂa#PWpZZ65Pb>X=%;@gg{Qi {|V4XX[5cГ+>-oS!b1,v#P]+q*ّgrOeAE t'(D/RnÖhctԙdL⬰EhA{|,?;Unh\~Bћwl,ƘX q `6B1iD- z\[sj4hĚ#߽ <_ ^![Y+_UkQky-.a6cnSuRr0c1H ]`[T~ <]+blyUzg7}먱"qd(_bqOj 3͋`xiIeM#_vF4]ct\+[m`kITOwbnQ`N*Ka~J& n8cEֈ5)MQ!~ueד_u*Ltқos~`{x -xFlX6Eyl[Gꗳ]*G Pj\~*1\7߿] C;]JkqM׬Z7_G1kc93{HNqi <V0O*nًx&agslc G_~xm>^L 1kejܓ#֢<gvr72]`vRYx*E>G NUn$5S 3HIc*$Ŧ!;Out ߝϦ`d-Jӡ_8;o^^1 ["\tRaFs虥n;荀n@Yˈ WYu8`u f;rccI`$4r(6 P+V@'&ASg7xh= 06kWl91N۫RV `n+¸D 7,ִtU?'Ol]s uY" 8[ƞd UrxӪs]6^t0vSHق? p%{> O6/6&hi#$968F#RPC N꽺N s3bs#aD(pC_G{WC7+btNִZϡuaz ǹs0F="4MRb[144r#i5Nk{%.V,` B9.Tk2 QcU wVs -&48#`gNL<#yg|".M$,aQ֯Ŝ`$1c9GIXN#]-A۴EG3RO팯(@官seh@G/BUrq#3BNgB8 "|jNVkK3d [*&q}='s@|izbU}} RʝXh 8 Py0A!{бGFCn>́0cJ(N#(5@P O| d?o.=6׼&y,Jۢ<5ܕLx8a-8E>lKj6A3 +Q&l WaSXQ5)MpEGc9UL܂ %/3FCt7U13@snzAsش&MDG VnJY-U 0Vl$XcM+ϰ42`g}GwފGPa1NƤG#s=u/ka uvD[}鼸%.b CdQ*&bX@lι{yX{N0]y{^7-5G_loi4nV[ nN&*c& Vϙe@npt獵H'qټ1jvA&ܜyB 5_ o_zpKaXC/{ӿ:[?l_x'~0~Õg}7Ȝ#FlpKf i5jRݜ)v=]lطWz㔂o-s} 8"W S㗞@)sάKO9z۳5q;ؘJCn_xX9]l/t˔f5jӲ- <*VR7r(i=O xU͸Sݣn^ ͑EXy:{_V{pݮ/w>oJ;g68"91H<@Z:c͍3 z.~x^}ϣ܎>53Ϣy#'}ys&?7L'o.])ܝbO=ÿfV`GUG:6λ+R#K/_;\y}aMn| W"у3u9]6ry;!uGR6<ˬe,2T&/wO}fCkqlڴfci*gQsнqu00L/u;ӾRS]#xIc9;x0=g7יvp4ܿoMow?M=W>SCt軺ǿo3TlezwuŸwҽc{mC}'gާwlu8oݦSJ{8gUl.~_d''+}W?c8?rQ?ch[t7ŭ~Oo$qFYΠ%7~ ;=,1<]~mtdSϏH{٢]PFb#ZTE؆1Y=G_52ћc~%_˾F[Lv/ӻiLoU+6XYsJ"1-o< WĂ#_@/ ?ՖQh&ڶü1~ei)1`M]T-^f_\ʸR |Eu+Nog*.^LsضY5~#t:xkG} __Kkt-6IdUOy76SnQngB[ Iwn?kt#M/%)6l<|+#;Ѡǿovހˏ;%ksW'ɏ z V43$3 E+9X 6&><]%i;.a!so-L ǰKb'lx7?N=p~OQmA>MCB/k l⯽}gyʓ.ioO͖#\ NJŎiOJ&Ś&h%VJVF; 60( xr-ɍCnB, Cc͏ŎyZ\nЫeC/7]߯R)|7=l$ԛ&\Nƒr;cަ::##N#Ћm{Tl2p͵ܘ֚@AmbpGAT{qIO ~DN؃41jRRc؆e@W#"+@JA.:sbAF,Bdm6WYÒzjS^}>%5H%V$a9- =X`j I9 qjXcmNDɬtpz }K? 7Y:,~ ko_ߕ'jjrn$KC>?pM{u)+:ǰXIyX-Mp֦V} >pOЄ LDZYcqeA??zؽl,v-Ԧڈ_"4TFeRv7ޠ8޷4r܋oGņT"r`H)nƘcޘ7hNυrlŎ4f_~>ŏ9L.NF}EN@^%G!}Z P|XO~E`x0 [X$Ctz4.6=1)L#001'"@a-?=/CFy/}g*gm:9 `$861L|Luۍ(`vIZ1 <Bf %싄m[.=Ԕ>s?)O';gt _ VđCv"eX0=>C%!*1#Ān f{K(-51 SlNW1L63 Co~qpu<$_(p ]O'EX+#Enʼn!XPqF;9/bdǼ*̋t ^뉷[4^Xޣ3kM'|§-/v=/VR0/B X,W,S%F7^ RXh0jN¹@tpqߣlrpkڍ蝣>74>C9Ss #mI`x0@%JXgw>fQ]n[?w{JiӺk1ձ^0xٓ O!;&{97ν8 9=:Q/jvx$mx,`b+TU+ڛQ43J{[9?7{7WI`.^#^7̗M*[ֱ{횱1ZKkH+7L^V`M&[$BYQ"EKߤ?>vWD:?QLSs=rnH` R֠P '*wX%sz;/^ɩtp׿ߢG9|'G.%[Vy\$F * nS()0,f_y68qbFۜ1yGz.RɊ<5|釋55ؾ!&/X2)]-Kgm.amIΜD6OI f nI)c!ṟ8+rլ~2@IDATB ¿Ke D9.yAW-o~,?EWppUtĨcܨhbXS=!4#~ C XÜ@܅*3? &Qa;0"lmzFc3ڷ[\"}&R񓛜fv#P֏XX,jMO|_#ddW#tp;jowW݂E@o4 ZsM4Hc1)=0wpe{>TXƿ8v+0]w=wp[Do|i:M/#wx2"5֩*NxuƒoYZ"qXЅA⹖Vӧ\c9I4s7s+WyV21lqjwd(,*ete{7n9(ړ.bGi?Xmab=J@BmY1m[4"5Vűpt]/Părx'%Z@>Iv[_IHa H,boPͩ}Ωc A0wp\@6_hXiP[7xšX:.bQߺ}omn q?P8@X (9 #R!._<\GǾڄ Lj|pi7z9qgsȍ~cC5R]6J۔!vFUH3>z3g 0u \f?=Lܛ|ECe65d8X- @Hۀ;^=E|>ZW7.mYt p4uH=F"hbG d<ĂpO1sJgגtŜ\$>r/R,-;>)`\3tHe$k7%ӓel|޼98Bs%j$pB'@_++~D2$!ˤSĐtkA8~zN?+Ǹi2gMg|xy~&G)2~9\ښ&X%&HI.ǃsb5>dKZ B!X&g=Y[C@QF ^-h w&&ԫ-uԣ19kBkyEiǺ~QVXt{v?4q56aک b"vp+ ,`I~0?Ic~N6^Ph-.av{дk(H5g)s) g &08麻7Co%Ekh\ma,75"4 >J&8&vQv9Ph7Zbm7jG5cVR SXJ{f?Cy"_w|WG#L/,x3=D Z4NAj`jo9!RDBC-a#r n0)4 u%-#̍|Q|?} p7"]*χ-s֐4A8}m ɹ1Q1cmy:HzE3XC)УHsb| =@FxBR cTcH˦n9]lЛdn޾O/=mePbu"IX˜ pӮ8>Hv0 [`aDf3^c p33;rpz"&Xs- l2l]% } ycgG-c-5BSʠ\s ڑhU^[̖?ǰD[N[vx;r*P>"/g VC͵ JL7\Ȅ]xd/%R,;Lۍk$qW jZcN.,R5zk}z 5+.%\,- y#m't &JNd^qS($kk eO5c_^m.w¿+fo ,G~ RN:V u"`4?=;Ǎ< 1Z/qОשf8 Ѩ k6nloI6$eeGqڜŕ$v\E]5x`jyt Y+rEhȖ4f VQ +ǘXu_chӸ+M ӗ/ݢCG<+Cd06j_xf@lOG(i1W68,,uhD-\4AFh1qFT,[HHZ%_ kj,΍]O_\#un;蜢'9O2dטPp!&K}Q6<'!5y94O"@CFrC>SaDs"Eud! F38@/U.5[7obgw5L!5gvܺ} 8=DwQ;@B-|`pж۪eL/9c%EE&jLRtöѹhNp Oŝ܉d1`<L?pxueehc2$WESGq9+q;9\{PtLc::V+0]lMS5Fo }?u@}U:T\=y`- 5PskjLQ}t:.ңam&p}}uyrސˬ%]Y6&Asc%Fg,Fk۷Z&4F U>&iz%%-!j^8x=?CrجOfxza @Ul8ԕX+e4RYunGrЇH5e؇cȠaAW?/2q_|t t ' Bq?ƌUĹ4NR<&8ȍ"I$6M"kGI ̗dd~Lgɏv_wkXgvƒVo[ؙ!%| ޲5:N&Hh-b~b*5pʈ<68jp}KRRɪdv %^6-K0J؂'K5T5ESKGկќ2Jf|1fܵR٫}}1_M~͟I%>Y.Z|", Ȱg,{uzc1ar#j֠8Cqs q1& D(!S̕\T v t[UsF@M7U礵"r\[R fR Z[ʄ C]P:vL̉OLNuFA-c0s G~z뷛t[ዀn.}ud񞎼Ʊ^c8qڸ1p{5nzP)? # ]ӆ >O\gǶN4ۼdxA'?ҼbA)JqLqߋbT($<@5z6 +2cyr$@kn/g޼~W>1}/n:wfS?w_XG={%$>-Vx}](K`JKNH7}z0?<"8y !-ӷɟgzpzu2keJ1 1T2V4-4a2G,j^ԀX#f\)>LOWkt7o ^7G=hF<1 `kpJhFɱDχu]FaR?bz`ci$ s_vwvq 󲴟k1U3MߋkݖA9`8$P G8NېگJp6 AM_c c7uygz `oB}Dg>{;LGo O+d36eSim&õfL^95mǥbg\KekCfW˚5W|QT!_Jꬻ@'z.n4 O<_F^O,zN'u0&K*.C*qJqYJzp~XFq$1mR\#viq~ncдo+гNn;gt)Ai)#τ(UWϑY4k\ILQSAH#1<./u%\Q ?V؊FE v} 3hn4p`{ӿLǼ0_7-(),V_L"] ?.f|]}oN>|0(hi` "dj< CLgq4fؓPh_|\Nmo7/?q` *|;`m;w t<,\ Z!HpoTjiΙS>^+Q$4v t1VRmXS!> gg4J*@U3:Dq<c}RM<3ec^&9]Dj6*hֺP)1үskgrИL,m.l)A=b%CB`L-ZU#))ҡ|b%%&۩`rMa{?~`ލ&(Zr%e-51E5mőTƒUlq( &`'c{aQ>njlXхU?c0Vv 3x%3]|WAe^b*]|aqP}xN㓮`і6ѕR&cFYꍭ 8k<-<Wp_. 17e˗`Y Vclҏ4n\IT][%;]x4GQms>gZ=te Y|&qyq8gDVTrx\]k~yq<_9>0:[ak:w1-e–!#cS7B"NQgvqi|Kj ;R(nL/Z9n_aTI3=ظp] 44%鉗ATඎ}O3ܻdշ_mi aݿ_?8"p@;1QU4ɚ`n Ͻ/zn {y*kmK[ٝf: /Am3!ѽ dS-@$ѻ_l1KW^  (]< 9-jВ(%x >LAY9B':r6iyn&&pdCHnKPӾ#(qf)mftdi~f`/ 5 un$h3a;Knn^"(Ƃ lut| DLpk^'vb;Bfڽ[\̖fx4pjɐ?0f*u162zM*B@ު;b :jWNf!٦v /Ϲĩp@}a .r+U8C: ̸hD_iː%7W1FX8B&'$RW&㰽5|5@\c{zA~^W [LngÀ aI.5a] Ou6i/3FcHe5ŠUQb(BIؙ4WA\kn4 _k+[eq:Ȧ0ͤ*`:fҝwDmyIeno|ގO4J%)ıp&HRG>;Y^hqԬ61#}+7A{!+HNrKZYOA WG]\<Nl7EX (MNN>_G:l'C ޛgs5fuɄw!R+׉)>4SE_%kaPXH쟺*㕺 z,bRWv̽c_'Q3 `&i<җlE];+^P~ ɇy^t x_|'$7^H!3(?:Q"}p nF,Cm6?My$;T ž@!jSRc5N ЀI0+|r1N\Z\3yhLiկUZΦJIC9rLf뮯}p]^݇z_mxl ^G#H|j\Ƿ,5^V?m~w\X?R?MMc3 #evH (AR b(xؙĤ~,10 +ď\Q~R0VU8')6MȝHpio7>7O9>Lp𫀋Om?!RrN@q5 'BEU+mbqYc8Zg$$ha?YqpuYgaMo;f &;(zc뗇S+ I늠a%9pΗRW>m2-)?7 > ;;!|e_d(b/<~ &rL~;ttܲ<l+TFd53S|D 6Aa誸\6Dl#-c8H*Ȕ.; 2m>Mce*e &W1DpG6 rgZpE HIMEkө@hڹ(3 2lwu m3xwN6>/zV`YݴBYT_0o֧kUDYdYq#&Jվ ٔjxg>1{ N͝Fǟ{h{ij~E⯜@!Z若ܦv r)٨k84b||a{+LϜ6-3[>,x[q=FJ@FdġgqT C Q[q C)$N<;PϬ.ٸoTd%Խ@L.3iG}Ⰱ73n-x\IRbV4 nfB,}_u<,O_È.tTGSUVE&3 f.} X~+PVDŚFXuC1 ".v'e>jT+G|\ '~ҷmNݻ}?Ce@Ph+߸A `ϝ fUd\8PIϨ*P@9jcC>_ac?r̓1Գ7f@Tƥ@a2䗊r\i/ImѪ҇;U\O4'wbp;``; *tVD+UɍVhUGЪ c@؂S8?q8['3F g~c7sGNnGI=BӅM5:}IuWbCmFţݰ1%+Z=91xF/"86@G,=+~X]yQ:9:Ϟ7x[R4X7U!I=Ao@$JP@'Dو渽<DZJl'2L|]_>ZCMdB DjI[A|;iݣ `a DpweA:`Y-usV-lQW-6vrk@L:~^u&ԶK'(&(x 2#g\")w!6&%{6mWJ ۅr_m _z_ue-.{d~Wka<$CR#$?qK+[PeAjE9|1҂c Ъ@K y\bdW@F=<(Z@__<5sd2;Dd٬IasF=[ʗHUL?Ӷl)w'}}zBޗ `_A)p;'ˋM3Ծ\c(JA‹NVqC-) #XJ?]L1SSokUzf[yK9LX-ZTjugs0ͬτEMG08`\Ƅ%\~&(0;b2/l|xzd`r-Lf&+g#J*D0dh%5)^m?ӫ;U?LZGb8<}/~ _*hQj:ZUGRsL{%_\LwdpNC=nGXbvf陗UJB_,֢yrvq}1?W#Elxx6'|?n~ɛ=v_=VmŕA;j!Ƃ\@ӝR1kb^٫^!Q/>@:m5j<)H 9ͲC'W8ӏkO_x?)>8g=ug=\ >'8» ֳ~VoB9K0h" \VE a"A*%@<0LjX6L1AZ艘|ZXy| `9'ˀ'!?;-h+lV%(5:SjXo> QU8IgŁ5WeF`픾>&Y g^i hTN&q3~2qbBcU0Hv:7x_Pcb]q虀_7fMZ̊j0:$)8qRk3y~/Ќdވ|K0XJDRuF+BI1߂@T\A&6KV _LH?1x91@x0pys`US@Q+fTpw`BQ&qXmxA#o7~MO)3B\<,Ockyf EIBpO :Oz G1* g /K|zB~ cOythi`;I WUOΎ&RS=$sr"d}$HIvLfoջ[^ ˊ`SS r։41?߇61o>mFk1Hyq5&ɹTAg/E[ϡ\s Į/c/|gtt. G)$:]mN 0 T.U 3IPz<:IiPD\aޔo˸VŪT̈́qV犎SX8LŊ)$:=2n[q3 )ʑ03wﭝ7Uy2X,v &&X"E#Eʯǵ8h@t:IgIsl߷ 4O&dfT2@LVU#c,?G&z"SpV^Y?QeaDbp C 3 d||^WP*C9y.5}Wp.& ic;Q[ ey0`'lOeԏۃc#'_ }c`gZbGrazq% R1JQ@:`Z`d `9ЋSREO3NBշp 7sOVڣ|zoⲿ&5 _}o^t^/L#y)bf, Tt4 lF{ MHRMr_s[>1Ё1Mv`|P^v֏a|P=acnsSuc8 >814,hs^ e @r բ'-5Q&bMw:$ 2,v &(1&9#Щp;?IEЎH-0 #X>}8 ,as?C> A>:16<n߂ WWyu&t98Zb 򸑱79k5=z1BnV ebxTh +S@-td%bˁ 8Hg nQf &\v,925ov,ˏ|h?18(F(%/|0M(D~TٴIaQ9p71țqˉ\/bZL2Ţ? NS;Ect<l38SVJ.a6:BfL*d<ߞːKbpXT3@o |$`He/~"xVSR{`W}l88 .nCz9d8>LU`/ Y-ELM K'eJYɓh| [2p 3`8DA>0!; =v3;rp/EX07ZP ey @gqW'3f ,~`߉RxJ5ZIJ)+,n4d0=ſ\UVD.o/K$ 1d`GD X" WSLfTsr"mtLMDf\lR ~c_{j=jcXs`&XF`1N=; x'ބKVϭXgG0Øƣc a9Q\k}5, LBp *8ٙԡzn;&Tq7Q7U2(SB(sc$ 6< w.E[X78suHU/18|,F2p&r;'p%_4Fc=CATtB+E X ͚s+ %E,@R G2 R?ZkEp۠?)a?pٿ9Ү8|o 2)8 x;Ή^ @WL8 ]\gP0rLcE4=8=TY k TP͍/AEc䰞j|aO4`chʅ_]{h!1@7WD %Ĵq lO_{kF3AXQ1Ă.bW EM qlX9/ԟ~Wpe¨>wﭿKa q*28zc hAxcCWDI4PE6Nlg20n&UH B!@fݫU+'9jg|hEfdP ]&D$j m'}-!LSb0MG3Vˣhv>ʼ`D )ɖL KB̔)%d ̜faT@ha,/3:NljkVIDATdN nJ #te &uy̚HȒ+}2WL5!_GS +|Fpc?NWl31:{NKmdś&m @,${2'LYY̜)I2+:IKn:;dB^3'YFpv1Jhޱs_K8ñ `JlVC,$RP3Y/!/U|EcZU)Ԫ 2&Cᓩ\H*#XgDqٕO/8Tg &S}xcvWͭ-@o n X4\D6 םX).s!:?M%C)R f&ܚ~?HW)<OSL፝ zc\ %`LYeeJSBDT;Q>_X+2sKZ`X⦰1~g?[qٿr `jm1W.ǯ=g.'=:Ul 'V!'ɤ$VZͱOx Mb eߎ4SLgy`pvW,TLֺ!N? j \\2;̉VFsVFnoxzeq !20# M-\yݍ xcM(@5$§.$F*SILʆV;c jvKܮpMpa ۚP{gU?g'1c{*s3/}ҰmFM+X-6yMA‡<LB,t1c|u|bbة=1365ф;E ӏعu[]h}2le &uco%k~8|sv<)V'M/Kh K}%VZZta:VrɯjBĢMj$ܚ4gF篾_d:@Lfx޺ _`W&=ȳi{WOkW K[ωƉ[cU )@0gb}`MO?udO_f &3{c1Dk0 b VX+&y»DT.}fV@XAwflR ֵe1(qe<@LfǞKp.o$"K;}zk]lD EܑuR+.@EM=sҹtx2\3[ @+ @v_=X؄Z$Aq02)&R+Ԫ~ebc_eixv#+C!t)ӝkF(/nXW|NB*uD$…tݧNpF_;ߏ~>!G81 ;w0z=?boBOo -ꄀRspb;bVf&F2*d;܉ĘsnϿ\<ſ"?@L6h %6-D\\: >,j"$Ɍ,P(լ&DpISচQ,3'n,o.]!F HH> Kh@r-*-F)cy2*Ȃgf+Ƚ{okZwԯ^21(3zdeԉ^ٞ%:Ʋ^.v&vh yzUޫ>)Eu(Y9ntgIfZbPJ`7~q]jBͷAWpYt0ٜ rӬ#Ly3|quS|Q5_Fv@LvQ0" >ڟ< !v;RSoϥ(ؙ)E [dPw$t] [1wlNdBQ+#rmO߻~~->620Qb0Q 3?ꥭm0h十}\&ɼ+ ==P5c(+נ: n݀)㓾)!E&@L<"pWlϡT+=>0wۭ]ᩅ2`~xßOȑ 3 Ȁfnpqyi~>_ jl1b~2v[Hz._Y{ř"@LvF4_677@|c -U\'I^C'x_O=Eg^~Z$,H{}дg=~jd 2 ` jdg"x/^nJ_,)Z\f;؁etp/$,z-Sb + O/8iV (=|M ۵vssqٿ"2^X/I62 ~d5bF 9\9yqiii v@͒߹|А_;T;&9vgr@L*'2PO4 X\7鍁5bOG>88ٌW5؇XB D%1ؗFȀL?>WV. y十Z{DE=sJ9-BԄ `3#p/]noy&j' 5䴉5W"\-G{e0)v_&2e &3K+3;,, tFHUϽ^Q2:k~ 42o 6G*'^|=+.9S{w~xO x&{+x| u {hkK5I5u#m翰e)l}@L9>2P-<Kau&pvy%P`7^{xPg &S|pcxp.--o`o=o <1ekgo32/ 5F&1/xv ?ٱNib06vdƒf 8y{ၿs@Dd28%L}@4-p?i1@@LR.B < v{cѣp\< g &{ӈx z&:ؓuO~Ov({d 2P@LjY ,23 K߅%CDמY[K࿣:2SbSx%|pL4~ON414S < |^,{}ٙx8ٗGe &{ˈ ܿǍx% 6< ߞ3({ F%1ؗFf _:7pٿ?h8귇>BE31F^e&ǟ{ .~ߋ78Ǒ<,G=Ȁ-l[Ri\KGc@Ls£d<< Xל][_~QhF\br=G.Dċ_4j'1 x  @Dd`woy]"nemoA vde &p"f|[!y_s}?=d-2p2t0b(]gVxK[`xm<Xc# *r;Vv]_:.A  _d` |O J1p&Xa["(Ò# Z"]7$`/VR?/!a  rd7Kp% xo=U8ߛ0Dubp_ >2^ %GLLpY $205 ؑ@ʀ,ggWXRd`3iAA=;840+&$"#&$%*/48D@EC=82-'$$&#$%(.4:?EHJD?93-(%$#&(.4:?EM>DKD?93-(%%@$)-39>CK8?IC=82-($3(-17<@H%-G@;61,&3+049=BC<830*3-2598 ;841+ 3-242441- +-12566510-++--..--++()(()'+%&%$+$$3kq}} j tU y~z~bC]WLD@BA@FMY\;>>;:>=>>=>DJNSYXWYRNIC>=?=>@=?=>DKQW[_``^[VQJC==@=?>==BJQX_dhnmhc^WQIA=>=@=>FOW_fmmORole^VNE>=?><@=AJS\dmt+7vkc[RI@=?<DNWajtz(}si`VMC?<9=@DNWakth ssi`VMC?<@=FMV_hq~_k|pg^ULD=3CMS\emy=Kxld[RKB3HRX_gp!.qf^WPHfKUY`_c_XSL 3MUYU1003XXSM +MRTZ\\ZSQK+HMMNNMLG+CFDDEB+=@?>+==l8mk;͎/  n*K^Sob &BOW BC-=%lNsUQ6 uYqtpass-1.1.0/artwork/icon.ico000066400000000000000000013226261265137067200161660ustar00rootroot00000000000000 ( f ( @@ (B(00 %j   h.( >& +>& +>$ 6=$ =$ >$ 6>$ 5=$ =$ =$ =$ >$ 5=$ 3=$ =$ =$ =$ =$ =$ >$ 3=$ 4=$ =$ =$ =$ =$ =$ =$ =$ =$ 4=$ 6=$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ 6=$ 3=$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ 3=$ 1=$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ 1=$ 5=$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ 5=$ 4=$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ 4=# 1=$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =# 1=$ 3=$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ 3=$ 4=$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ 4<# 1=$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ 1<# 1=$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =# 1<# 4=$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ <# 4<" 2=$ =$ =$ =$ =$ >$ >$ >% >% >% >% >% >% >% >% >% >% >% >% >% >% >% >% >% >% >$ >$ =$ =$ =$ =$ =$ <# 2<# /=# =$ >$ >% >% >% >% ?% ?% ?% ?% ?% ?% ?% ?% ?% ?% ?% ?% ?% ?% ?% ?% ?% ?% ?% ?% >% >% >% >% >$ =$ =$ <# /?& 2>% >% >% ?% ?% ?% ?% ?% ?% @& @& @& @& @& @& @& @& @& @& @& @& @& @& @& @& @& @& ?% ?% ?% ?% ?% ?% >% >% >% @$ 2?& 3?% @& @& @& @% A& A& A& A& A' @' B' B' B' B' B' B' B& B& B& B& B' B' B' B' B' B' @' A' A& A& A& A& @% @& @& @& ?% ?& 3?' 2@& @& @& A& A& A' A' B' B' B' B' B' B' C' C' C' C' C' C( C( C( C( C' C' C' C' C' B' B' B' B' B' B' A' A' A& A& @& @& @& @& 0@' 3@& A& A& A' B' B' B' B' B' C' C( C( C( C( C( D( D( D( D( D( D( D( D( D( D( D( D( C( C( C( C( C( C' B' B' B' B' B' A' A& A& @& A% 2@' 5A& A' B' B' B' B' C' C( C( C( D( D( D( D( D( D( D( E) E) E) E) E) E) E) E) E) E) D( D( D( D( D( D( D( C( C( C( C' B' B' B' B' A' A& @' 5C( 3B' C' C( C( D( D( D( D( E) E) E) E) F) F) F) F) F) F* F* F* F* F* G* G* F* F* F* F* F* F) F) F) F) F) E) E) E) E) D( D( D( D( C( C( C' B' C( 3D( 1C' C( D( D( D( E) E) E) E) F) F) F) F* F* G* G* G* G* G* G* G* G* G* G* G* G* G* G* G* G* G* G* G* G* F* F* F) F) F) E) E) E) E) D( D( D( C( C' D( 1D( 4C( D( D( D( E) E) E) F) F) F) G* G* G* G* G* G* H* H* H+ H+ H+ H+ H+ H+ H+ H+ H+ H+ H+ H+ H+ H+ H* H* G* G* G* G* G* G* F) F) F) E) E) E) D( D( D( C( D( 3D( 4E) E) E) F) F) F* G* G* G* H* H* H+ H+ I+ I+ I+ I+ J+ J, J, J, J, J, J, J, J, J, J, J, J, J, J, J, J, J+ I+ I+ I+ I+ H+ H+ H* H* G* G* G* F* F) F) E) E) E) D( 4D( 0E) E) F) F) F* G* G* H* H+ H+ I+ I+ I+ I+ J+ J, J, J, J, K, K, K, K,K,K,K,K,K,K,K,K,K,K, K, K, J, J, J, J, J+ I+ I+ I+ I+ H+ H+ H* G* G* F* F) F) E) E) D( 0E) 2E) F) F* G* G* G* H* H+ H+ I+ I+ I+ J, J, J, J, K, K,K,K-K-K-L-L-L-L-L-L-L-L-L-L-L-L-K-K-K-K,K,K, J, J, J, J, I+ I+ I+ H+ H+ H* G* G* G* F* F) E) E) 2F) 4F) F) F* G* G* H* H+ I+ I+ I+ J, J, J, J, K,K,K-L-L-L-L-L-L-L-M-M-M-M-M-M-M-M-M-M-L-L-L-L-L-L-L-K-K,K,J, J, J, J, I+ I+ I+ H+ H* G* G* F* F) F) E) 4G) 1G* G* H* H+ I+ I+ I+ J, J, K, K,L-L-L-L-M-M-M.M.N.N.N.N.N.N.N.N.O.O.O/O/O.O.N.N.N.N.N.N.N.N.M.M.M-M-L-L-L-L-K,K, J, J, I+ I+ I+ H+ H* G* G* G) 1G) 0G* G* H+ I+ I+ J, J, J, K, K-L-L-L-M-M-M.N.N.N.N.N.O/O/O/O/O/O/O/O/O/O/O/O/O/O/O/O/O/O/O/O/N.N.N.N.N.M.M-M-L-L-L-K-K, J, J, J, I+ I+ H+ G* G* G) 0H) 3G* H* H+ I+ I+ J, J, K,K,K-L-L-M-M.M.N.N.N.O/O/O/O/O/P/P/P/P/P/P0P0P0P0P0P0P0P0P/P/P/P/P/O/O/O/O/O/N.N.N.M.M.M-L-L-K-K,K,J, J, I+ I+ H+ H* G* H) 3G+ 2I+ I+ I+ J, K, K,K-L-L-M-M.N.N.N.O/O/O/P/P/P0Q0Q0Q0Q0R0R0R0R0R1R1R1R1R1R1R1R1R1R1R0R0R0R0Q0Q0Q0Q0P0P/P/O/O/O/N.N.N.M.M-L-L-K-K,K, J, I+ I+ I+ H) 2G, /H+ I+ J, J, K, K-L-L-M.M.N.N.O/O/O/P/P/P0Q0Q0Q0Q0R0R1R1R1S1S1S1S1S1S1S1S1S1S1S1S1S1S1S1S1R1R1R1R0Q0Q0Q0Q0P0P/P/O/O/O/N.N.M.M.L-L-K-K, J, J, I+ H+ G, /H, 1I+ I+ J, K, K,K-L-M-M.N.N.N.O/O/P/P/Q0Q0Q0Q0R0R1R1S1S1S1S1S1T1T2T2T2T2T2T2T2T2T2T2T2T2T1S1S1S1S1S1R1R1R0Q0Q0Q0Q0P/P/O/O/N.N.N.M.M-L-K-K,K, J, I+ I+ H, 1G+ 3I+ I+ J, J, K-L-L-M.M.N.O.O/O/P/P0Q0Q0Q0R0R1R1S1S1S1T1T2T2T2T2T2U2U2U2U2U2U2U2U2U2U2U2U2T2T2T2T2T2T1S1S1S1R1R1R0Q0Q0Q0P0P/O/O/O.N.M.M.L-L-K-J, J, I+ I+ G+ 3I, /J+ K, K,K-L-M-M.N.O/O/O/P/Q0Q0Q0R1R1S1S1S1T2T2T2U2U2U3U3V3V3V3V3V3V3W3W3W3W3W3W3W3W3V3V3V3V3V3V3U3U3U2U2T2T2T2S1S1S1R1R1Q0Q0Q0P/O/O/O/N.M.M-L-K-K,K, J+ I, /J, /J, J, K-L-L-M-N.N.O.O/P/P/Q0Q0R0R1S1S1S1T2T2U2U2U3V3V3V3V3W3W3W4W4W4W4W4W4X4X4X4X4W4W4W4W4W4W4W3W3V3V3V3V3U3U2U2T2T2S1S1S1R1R0Q0Q0P/P/O/O.N.N.M-L-L-K-J, J, H, /J, 3J, J, K,L-M-M.M.N.O/O/P/Q0Q0R0R1S1S1T2T2T2U2U2U3V3V3V3W3W4W4W4X4X4X4X4X4X4X4X4X4X4X4X4X4X4X4X4X4X4W4W4W4W3V3V3V3U3U2U2T2T2T2S1S1R1R0Q0Q0P/O/O/N.M.M.M-L-K,J, J, J, 2I, 4K,K-L-L-N.N.O.O/P/P0Q0R0R1S1S1T2T2U2U3V3V3W3W3W4W4X4X4X4Y5Y5Y5Y5Z5Z5Z5Z5Z5Z5Z5Z5Z5Z5Z5Z5Z5Z5Z5Z5Y5Y5Y5Y5X4X4X4W4W4W3W3V3V3U3U2T2T2S1S1R1R0Q0P0P/O/O.N.N.L-L-K-K,J, 1I, 0J, K,L-M-M.N.O/O/P/Q0Q0R0S1S1S1T2U2U2U3V3V3W3W4X4X4X4Y5Y5Y5Z5Z5Z5Z6[6[6[6[6[6[6[6[6[6[6[6[6[6[6[6[6Z6Z5Z5Z5Y5Y5Y5X4X4X4W4W3V3V3U3U2U2T2S1S1S1R0Q0Q0P/O/O/N.M.M-L-K,J, I, 0K, 3K, K,L-M-M.N.O/O/P/Q0Q0R1R1S1T2T2U2U3V3V3W4W4X4X4Y4Y5Y5Z5Z5Z5[6[6[6[6[6\6\6\6\6\6\7\7\7\7\6\6\6\6\6[6[6[6[6[6Z5Z5Z5Y5Y5Y4X4X4W4W4V3V3U3U2T2T2S1R1R1Q0Q0P/O/O/N.M.M-L-K,K, J, 3K, 4K, K-L-L-N.N.O/P/P/Q0Q0R1S1S1T2U2U2V3V3W3W4X4X4X4Y5Y5Z5Z5[6[6[6[6\6\6\7\7\7]7]7]7]7]7]7]7]7]7]7]7]7\7\7\7\6\6[6[6[6[6Z5Z5Y5Y5X4X4X4W4W3V3V3U2U2T2S1S1R1Q0Q0P/P/O/N.N.L-L-K-K, K, 4L+ 1K,L-M-M.N.O/P/P/Q0R0R1S1T2T2U2V3V3W3W4X4X4Y5Y5Z5Z5[6[6[6\6\7]7]7]7]7^7^8^8^8^8_8_8_8_8_8_8_8_8_8_8^8^8^8^8^7]7]7]7]7\7\6[6[6[6Z5Z5Y5Y5X4X4W4W3V3V3U2T2T2S1R1R0Q0P/P/O/N.M.M-L-K,L+ 1K+ 1K,K-M-M.N.N.P/P/Q0R0R1S1S1T2U2U3V3W3W4X4Y5Y5Y5Z5[6[6\6]6^8_8_8_8`8`9`9`9a9a9a9a9a:a:b:b:b:b:b:b:a:a:a9a9a9a9`9`9`9`8_8_8_8^8]6\6[6[6Z5Y5Y5Y5X4W4W3V3U3U2T2S1S1R1R0Q0P/P/N.N.M.M-K-K,K+ 1K, 4K,K-L-M.N.O.O/P0Q0Q0S1S1T2T2U2V3V3W4X4X4Y5Y5Z5Z5[6[6\6\7V2D) C( D( D( D( D( D( D) E) E) E) E) E) E) E) E) E) E) E) E) E) E) E) E) E) E) D) D( D( D( D( D( C( D) U2\7\6[6[6Z5Z5Y5Y5X4X4W4V3V3U2T2T2S1S1Q0Q0P0O/O.N.M.L-K-K,K, 4K+ 2K-L-M-M.O/O/P/P0R0R1S1T2U2U2V3W3W4X4Y5Y5Z5[6[6[6\6]7]7]7^8M-  M-^8]7]7]7\6[6[6[6Z5Y5Y5X4W4W3V3U2U2T2S1R1R0P0P/O/O/M.M-L-K-K+ 2J+ /K,K-M-M.N.O/P/Q0Q0R1S1T1U2U2V3V3W4X4X4Y5Z5Z6[6\6\7]7]7^8^8_8V3  V3_8^8^8]7]7\7\6[6Z6Z5Y5X4X4W4V3V3U2U2T1S1R1Q0Q0P/O/N.M.M-K-K,J+ /K, 2K, K-L-M.N.O/P/Q0Q0R0S1T2T2U3V3W3W4X4Y5Y5Z5[6[6\7]7]7]7^8_8_8`9\6!!\6`9_8_8^8]7]7]7\7[6[6Z5Y5Y5X4W4W3V3U3T2T2S1R0Q0Q0P/O/N.M.L-K-K, K, 2I+ 2J, K-L-M-N.O/O/Q0Q0R0R1T2T2U2V3W3W4X4Y5Y5Z5[6[6\6]7]7^8^8_8_9`9a9`85 5 `8a9`9_9_8^8^8]7]7\6[6[6Z5Y5Y5X4W4W3V3U2T2T2R1R0Q0Q0O/O/N.M-L-K-J, I, 2I+ /I, K,L-M.N.O/P/Q0R0R1S1T2U2V3V3W4X4Y4Y5Z5[6[6\7]7]7^8_8_9`9a9a:a:b:d;F* F* d;b:a:a:a9`9_9_8^8]7]7\7[6[6Z5Y5Y4X4W4V3V3U2T2S1R1R0Q0P/O/N.M.L-K,I, I+ /I+ 0J, K,L-M.N.N.P/P0Q0R1S1T2T2V3V3W3X4Y5Y5Z5[6\6\7]7^8^8_8`9`9a9a:b:b:c;d<R0  R0d<c;b:b:a:a9`9`9_8^8^8]7\7\6[6Z5Y5Y5X4W3V3V3T2T2S1R1Q0P0P/N.N.M.L-K,I, I+ 0I+ 2J, K, K-M-N.N.O/P0Q0R0S1T2T2U2V3W3X4Y5Y5Z5[6\6\7]7^8^8_8`9`9a9a:b:c:c;d;e<[6[6e<d;c;c:b:a:a9`9`9_8^8^8]7\7\6[6Z5Y5Y5X4W3V3U2T2T2S1R0Q0P0O/N.N.M-K-K, J, J+ 2I+0J, K,L-M-M.O/O/P/Q0R1S1T2U2V3V3X4X4Y5Z5[6[6\6]7^7^8_8`9`9a:b:b:c;d;d;e<e<f<e<..e<f<e<e<d;d;c;b:b:a:`9`9_8^8^7]7\6[6[6Z5Y5X4X4V3V3U2T2S1R1Q0P/O/O/M.M-L-K,J, I+0H*.I+ J, L-L-M.N.O/P/Q0R1S1S1U2U3V3W3X4Y5Y5[6[6\6]7^8^8_8`9a9a:b:c:c;d;e<e<e<f=g=i>=% >% i>g=f=e<e<e<d;c;c:b:a:a9`9_8^8^8]7\6[6[6Y5Y5X4W3V3U3U2S1S1R1Q0P/O/N.M.L-L-J, I+ H*.H*1I+ J, K, L-M-N.N/P/P0Q0S1S1T2U3V3W3W4Y5Y5Z5[6\7]7]7^8_8`9a9a:b:c;c;d;d<e<f<f=g=g=j?M.  M.j?g=g=f=f<e<d<d;c;c;b:a:a9`9_8^8]7]7\7[6Z5Y5Y5W4W3V3U3T2S1S1Q0P0P/N/N.M-L-K, J, I+ H*1G*1I+ J, J, K,M-M.N.P/P0Q0R0S1T2U2V3W3W4X4Y5Z5[6\7]7]7^8_8`9`9a:b:c:d;d;e<e<f=g=g=h>h>j>\6\7j>h>h>g=g=f=e<e<d;d;c:b:a:`9`9_8^8]7]7\7[6Z5Y5X4W4W3V3U2T2S1R0Q0P0P/N.M.M-K,J, J, I+ H*0G)-H+ I+ K, K-L-N.N.O/Q0Q0R1S1T2U2V3W4X4X4Y5[6[6\6]7^8_8_8`9a:b:c;c;d;e<f<f=g=h=h>i>i?j?j?j>$$j>j?j?i?i>h>h=g=f=f<e<d;c;c;b:a:`9_8_8^8]7\6[6[6Y5X4X4W4V3U2T2S1R1Q0Q0O/N.N.L-K-K, I+ H+ G)-F)0H* I+ I+ K,L-M-N.O/P/P0R0S1S1U2U3V3X4X4Y5Z5[6\6\7^8^8_8`9a:b:b:c;d;e<f<f=g=g=h>i>i>j?k?k@m@7 7 m@k@k?j?i>i>h>g=g=f=f<e<d;c;b:b:a:`9_8^8^8\7\6[6Z5Y5X4X4V3U3U2S1S1R0P0P/O/N.M-L-K,I+ I+ H* F)0G( 4G* H+ I+ J, K-L-M.N.O/P/R0R1S1T2U2V3W3X4Y5Z5Z6\6\7]7^8_8`9`9b:b:c;d;e<e<f=g=h=h>i>j?j?k?k@l@m@K,L,m@l@k@k?j?j?i>h>h=g=f=e<e<d;c;b:b:`9`9_8^8]7\7\6Z6Z5Y5X4W3V3U2T2S1R1R0P/O/N.M.L-K-J, I+ H+ G* G)0G) 1G* H+ I+ J, K, L-M.N.O/P/Q0R1S1T2U2V3W4X4Y5Z5[6[6]7^7^8`9`9a9b:c;d;d;e<f=g=h>h>i>j?k?k@l@m@mAmAnA`9  `9nAmAmAm@l@k@k?j?i>h>h>g=f=e<d;d;c;b:a9`9`9^8^7]7[6[6Z5Y5X4W4V3U2T2S1R1Q0P/O/N.M.L-K, J, I+ H+ G* G) 1D( 1F* G* I+ J+ J, K,M-M.N.P/Q0Q0S1T2T2U2W3X4X4Z5Z6[6\6]7^8_8`9a9b:b:d;d;e<f=g=g=i>i>j?j?k@l@l@mAnAnAoBk@k@oBnAnAmAl@l@k@j?j?i>i>g=g=f=e<d;d;b:b:a9`9_8^8]7\6[6Z6Z5X4X4W3U2T2T2S1Q0Q0P/N.M.M-K,J, J+ I+ G* F* D( 1E) 3F) G* G* I+ J, K, L-M.N.O/P0Q0R0S1T2U2V3W4X4Y5Z5[6\6\7^8_8_9a9a:b:c;d;e<e<g=g=h>i>j?j?k?l@m@mAnAoBoBoBnA2 2 nAoBoBoBnAmAm@l@k?j?j?i>h>g=g=e<e<d;c;b:a:a9_9_8^8\7\6[6Z5Y5X4W4V3U2T2S1R0Q0P0O/N.M.L-K, J, I+ G* G* F) D) 3C) 2E) G* G* H+ J, K, K-L-N.O/P/Q0R0S1S2U2V3W3X4Y5Z5[6\7]7]7_8`9`9b:c:c;d;e<f=g=h>i>i>k?k@l@l@mAnAoBpBpCqCqCqCI+I+qCqCqCpCpBoBnAmAl@l@k@k?i>i>h>g=f=e<d;c;c:b:`9`9_8]7]7\7[6Z5Y5X4W3V3U2S2S1R0Q0P/O/N.L-K-K, J, H+ G* G* F) D) 2C( /D( E) G* H* I+ J, K,L-M-N.O/P/R0R1S1U2U3V3W4Y5Y5Z5\6\7]7^8_9`9a9b:c;d;e<f<g=g=i>i>j?k@l@l@mAnAoBoBpCqCqCrDtE]7]7tErDqCqCpCoBoBnAmAl@l@k@j?i>i>g=g=f<e<d;c;b:a9`9_9^8]7\7\6Z5Y5Y5W4V3U3U2S1R1R0P/O/N.M-L-K,J, I+ H* G* E) D( C( /D( 1D( E) F) G* H+ I+ K, K-L-M.O/O/P0R0S1T1T2V3W3W4Y5Z5[6\7]7^8^8`9a9a:c;d;d<e<f=g=h>i>j?k?l@l@mAnAoBoBpBqCrCrDsDtEg=g=tEsDrDrCqCpBoBoBnAmAl@l@k?j?i>h>g=f=e<d<d;c;a:a9`9^8^8]7\7[6Z5Y5W4W3V3T2T1S1R0P0O/O/M.L-K-K, I+ H+ G* F) E) D( B( 1C( 3C( D( E) F) H* H+ I+ K,L-M-M.O/P/Q0R1S1T2V3V3W4X4Y5Z5[6]7]7^8_8`9a:b:c;d;e<f<g=h>h>j?j?k@l@mAnAnApBpCqCrDrDsDsDuEoA..oAuEsDsDrDrDqCpCpBnAnAmAl@k@j?j?h>h>g=f<e<d;c;b:a:`9_8^8]7]7[6Z5Y5X4W4V3V3T2S1R1Q0P/O/M.M-L-K,I+ H+ H* F) E) D( C( B( 2A' /B' D( E) F) G* H+ I+ J, L-L-M.N.P/Q0Q0S1T2U2U3W4X4Y5Z6[6\6^7^8_8`9a:b:c;d<e<f<g=h>i>j?k?l@l@nAnAoBpBqCqCrDsDtEtEuEvFvFB' B' vFvFuEtEtEsDrDqCqCpBoBnAnAl@l@k?j?i>h>g=f<e<d<c;b:a:`9_8^8^7\6[6Z6Y5X4W4U3U2T2S1Q0Q0P/N.M.L-L-J, I+ H+ G* F) E) D( B' A' /A& 0B' C' D( E) F) G* I+ I+ J, L-M-N.N.P/Q0R0S1T2U2W3W4X4Y5[6\6\7^8_8`9`9b:c:c;e<f<f=g=i>i?j?l@l@mAnAoBpBpCrCrDsDtEtEuEvFwFzHS2S2zHwFvFuEtEtEsDrDrCpCpBoBnAmAl@l@j?i?i>g=f=f<e<c;c:b:`9`9_8^8\7\6[6Y5X4W4W3U2T2S1R0Q0P/N.N.M-L-J, I+ I+ G* F) E) D( C' B' A& /A& 2A& B' C( E) E) F* G* I+ J, K, L-M.N.O/P0Q0R1T2U2U3V4X4Y5Y5[6\6]7^8_8`9a9b:c;d;e<f=g=h=i>j?k?l@mAmAoBpBpCqCrDsDsDuEuFvFvFwGyHb:  b:yHwGvFvFuFuEsDsDrDqCpCpBoBmAmAl@k?j?i>h=g=f=e<d;c;b:a9`9_8^8]7\6[6Y5Y5X4V4U3U2T2R1Q0P0O/N.M.L-K, J, I+ G* F* E) E) C( B' A& A& 1@& 0@& B' C' C( E) F) G* H* I+ J, K,M-N.N.O/Q0R0S1T2U2V3X4Y4Y5Z5\6]7]7_8`9a9b:c;d;e<f=g=h>i>j?k?l@mAnAoBpBqCqCrDsDtEuEvFwFwGxGyHzHqC%%qCzHyHxGwGwFvFuEtEsDrDqCqCpBoBnAmAl@k?j?i>h>g=f=e<d;c;b:a9`9_8]7]7\6Z5Y5Y4X4V3U2T2S1R0Q0O/N.N.M-K,J, I+ H* G* F) E) C( C' B' @& @& 0@& .?% @& B' C' D( E) F* G* H+ J, K, K-M.N.O/P/Q0R1S1U2V3V3W4Y5Z5[6\7]7^8_9`9a:b:d;d<e<g=h=h>i>k?k@l@nAnAoBqCqCrDsDtEuEuFwFwGxGxGyHzH|J6 7 |JzHyHxGxGwGwFuFuEtEsDrDqCqCoBnAnAl@k@k?i>h>h=g=e<d<d;b:a:`9_9^8]7\7[6Z5Y5W4V3V3U2S1R1Q0P/O/N.M.K-K, J, H+ G* F* E) D( C' B' @& ?% @& .>% 1?% @& @& B' C( D( F) F* G* H+ J, K,L-M.N.O/P/R0R1S1U2V3W3X4Y5Z5[6]7]7^8`9a9a:b:d;e<f<g=h>i>j?k@l@m@nAoBpBqCrDsDsDuEuFvFwGxGxHyHzI{I}JK-L-}J{IzIyHxHxGwGvFuFuEsDsDrDqCpBoBnAm@l@k@j?i>h>g=f<e<d;b:a:a9`9^8]7]7[6Z5Y5X4W3V3U2S1R1R0P/O/N.M.L-K,J, H+ G* F* F) D( C( B' @& @& ?% ?$ 0=$ 1>% ?% @& A& B' C( D( F) G* H* H+ J, K,L-N.N.O/P/R0S1T1U3V3W4Y5Z5Z6[6]7^8_8`9a:b:c;d;e<f<h=h>i>j?l@l@mAoBoBpCrCrDsDtEuFvFwFxGxHyHzH{I{I}Ka:  a:}K{I{IzHyHxHxGwFvFuFtEsDrDrCpCoBoBmAl@l@j?i>h>h=f<e<d;c;b:a:`9_8^8]7[6Z6Z5Y5W4V3U3T1S1R0P/O/N.N.L-K,J, H+ H* G* F) D( C( B' A& @& ?% >% =$ 1>% .=$ >$ ?% @& A& C' D( E) F* G* H+ I+ K, K-L-N.O/P/Q0R1S1T2V3W3X4X5Z5[6\6^7^8_8a9b:c:c;e<f<g=h>i>j?k?l@mAnApBpCqCsDsDtEuEvFwGxGyHzHzI{I|J}J~KuFvF~K}J|J{IzIzHyHxGwGvFuEtEsDsDqCpCpBnAmAl@k?j?i>h>g=f<e<c;c:b:a9_8^8^7\6[6Z5X5X4W3V3T2S1R1Q0P/O/N.L-K-K, I+ H+ G* F* E) D( C' A& @& ?% >$ =$ >% .>% /=$ =$ >$ ?% @& A' C( D( E) F* G* H+ I+ K,L-M-N.O/P/Q0S1T1T2V3W4X4Z5Z6[6\7^8_8_9a:b:c;d;e<f=g=i>i?j?k@mAnAnApBqCrCsDtEuEuFwGxGxGzHzI{I|I}J~K~K~K--~K~K~K}J|I{IzIzHxGxGwGuFuEtEsDrCqCpBnAnAmAk@j?i?i>g=f=e<d;c;b:a:_9_8^8\7[6Z6Z5X4W4V3T2T1S1Q0P/O/N.M-L-K,I+ H+ G* F* E) D( C( A' @& ?% >$ =$ =$ >% /=$ 1=$ =$ =$ >% @& A& A' C( D( E) G* H* H+ I+ K,L-M-O.O/P0Q0S1T2U2V3W4X4Z5[6\6\7^8_8`9a:b:c;d;f<g=g=i>j?k?k@mAnAoBpCqCrDtEtEuEvFwGxGyHzI{I|I|J~K~KKLF* G* LK~K~K|J|I{IzIyHxGwGvFuEtEtErDqCpCoBnAmAk@k?j?i>g=g=f<d;c;b:a:`9_8^8\7\6[6Z5X4W4V3U2T2S1Q0P0O/O.M-L-K,I+ H+ H* G* E) D( C( A' A& @& >% =$ =$ =$ >% 0>% /=$ =$ =$ =$ >% @& A& B' D( D( E) G* H+ I+ J, K-L-M.O/P/Q0R0S1T2U2W3X4Y4Y5[6\7]7_8_9`9b:c;d;e<f=g=h>j?k?k@l@nAoBoBqCrDsDtEuFvFwFxGyHzH{I|J}J}JKLLM`9`9MLLK}J}J|J{IzHyHxGwFvFuFtEsDrDqCoBoBnAl@k@k?j?h>g=f=e<d;c;b:`9_9_8]7\7[6Y5Y4X4W3U2T2S1R0Q0P/O/M.L-K-J, I+ H+ G* E) D( D( B' A& @& >% =$ =$ =$ =$ >% /># 2=$ =$ =$ =$ >$ >% @& A& B' D( E) E) G* H+ I+ J, L-L-M.O/P/Q0R0T1T2U2W4X4Y5Z6[6\7]7_8`9a9b:c;d;e<g=g=h>j?k?l@l@nAoBpBqCrDsDuEvFvFwGyHzHzI|J}J}J~KLLLMtE  tEMLLL~K}J}J|JzIzHyHwGvFvFuEsDrDqCpBoBnAl@l@k?j?h>g=g=e<d;c;b:a9`9_8]7\7[6Z6Y5X4W4U2T2T1R0Q0P/O/M.L-L-J, I+ H+ G* E) E) D( B' A& @& >% >$ =$ =$ =$ =$ <# 1=% )=$ =$ =$ =$ =$ >$ ?% @& A& B' D( E) F) G* H+ I+ J, L-M-N.O/P/Q0R1T2U2U3W4X4Y5[6\6\7]7_8`9a9c:c;d;e<g=h=i>j?k@l@mAnBoBpCrDsDsEuFvFwGxGyHzH{I|J}J~KKLLMN{I(({INMLLK~K}J|J{IzHyHxGwGvFuFsEsDrDpCoBnBmAl@k@j?i>h=g=e<d;c;c:a9`9_8]7\7\6[6Y5X4W4U3U2T2R1Q0P/O/N.M-L-J, I+ H+ G* F) E) D( B' A& @& ?% >$ =$ =$ =$ =$ =$ ># (=% "=$ =$ =$ =$ =$ =$ >$ ?% @& A' B' D( E) F) H* H+ I+ J, L-M-N.O/P0Q0R1T2U2V3W4X4Y5[6\6]7^7_8`9a:c;d;d<e<g=h>i>k?k@l@mAoBpBpCrDsDtEuFvFwGxGzHzI{I}J~K~KKLMMNLA' A' LNMMLK~K~K}J{IzIzHxGwGvFuFtEsDrDpCpBoBmAl@k@k?i>h>g=e<d<d;c;a:`9_8^7]7\6[6Y5X4W4V3U2T2R1Q0P0O/N.M-L-J, I+ H+ H* F) E) D( B' A' @& ?% >$ =$ =$ =$ =$ =$ =$ =$ ;' =$ =$ =$ =$ =$ =$ =$ >% ?% A& B' B' D( E) F) H* I+ J+ J, L-M.N.P/Q0R0R1T2U2V3X4Y4Y5Z6\7]7^8`9a9a:c;d;e<f<h=h>i>k?l@mAnAoBpCqCsDtEtEvFwGxGyHzI{I|J~K~KLLMMNOPY4Y4PONMMLL~K~K|J{IzIyHxGwGvFtEtEsDqCpCoBnAmAl@k?i>h>h=f<e<d;c;a:a9`9^8]7\7Z6Y5Y4X4V3U2T2R1R0Q0P/N.M.L-J, J+ I+ H* F) E) D( B' B' A& ?% >% =$ =$ =$ =$ =$ =$ =$ <" 8 =$ =$ =$ =$ =$ =$ =$ =$ >% ?% A& B' C' D( E) F) H+ I+ J, K, L-M.N.P/Q0R0S1T2U2V3X4Y5Z5[6\7]7^8`9a9b:c;d;e<f<h>i>i?k@l@mAnApBpCqCsDtEuEvFwGxGyH{I{I|J~KKLLMNNOPi?  i?PONNMLLK~K|J{I{IyHxGwGvFuEtEsDqCpCpBnAmAl@k@i?i>h>f<e<d;c;b:a9`9^8]7\7[6Z5Y5X4V3U2T2S1R0Q0P/N.M.L-K, J, I+ H+ F) E) D( C' B' A& ?% >% =$ =$ =$ =$ =$ =$ =$ =$ ;# ;$ =$ f=$ =$ =$ =$ =$ =$ =$ =$ >% ?% A& B' C' D( E) F* H+ I+ J, K, L-M.N.P/Q0R0S1T2U3V3X4Y5Z5\6\7]7^8`9a9b:c;d<e<f=h>i>j?k@l@mAnApBqCrCsDtEuEwFxGxGyH{I|J}J~KLLLMNNOQvF#$wFQONNMLLL~K}J|J{IyHxGxGwFuEtEsDrCqCpBnAmAl@k@j?i>h>f=e<d<c;b:a9`9^8]7\7\6Z5Y5X4V3U3T2S1R0Q0P/N.M.L-K, J, I+ H+ F* E) D( C' B' A& ?% >% =$ =$ =$ =$ =$ =$ =$ =$ =$ d?& =$ ==$ =$ =$ =$ =$ =$ =$ =$ =$ >% ?% A& B' C' E) E) F* H+ I+ J, K,M-N.N.P/Q0R1S1U2V3V3X4Y5Z5\6]7^7^8`9a:b:d;e<f<f=h>i>j?l@m@mAnApCqCrDtEuEuFwGxGyHzH{I|J}JKLLMNNOPPN7 8 NPPONNMLLK}J|J{IzHyHxGwGuFuEtErDqCpCnAmAm@l@j?i>h>f=f<e<d;b:a:`9^8^7]7\6Z5Y5X4V3V3U2S1R1Q0P/N.N.M-K,J, I+ H+ F* E) E) C' B' A& ?% >% =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ ;=# >$ =$ =$ =$ =$ =$ =$ =$ =$ >$ >% ?% A& B' C( E) F) F* H+ I+ J, K,M-N.N.P0Q0R1S1U2V3W3X4Y5Z5\6]7^7_8`9a:b:d;e<f<g=h>i>j?l@mAnAoBpCqCrDtEuEvFwGxGyHzH|I}J}JLLMMNOOPQSK-L-SQPOONMMLL}J}J|IzHyHxGwGvFuEtErDqCpCoBnAmAl@j?i>h>g=f<e<d;b:a:`9_8^7]7\6Z5Y5X4W3V3U2S1R1Q0P0N.N.M-K,J, I+ H+ F* F) E) C( B' A& ?% >% >$ =$ =$ =$ =$ =$ =$ =$ =$ =# <" <# =# =$ =$ =$ =$ =$ =$ =$ =$ =$ >$ >% ?% A& B' C( E) F) G* H+ I+ J, K,M-N.O.P0Q0R1S1U2V3W3X4Y5Z5\6]7^8_8`9a:b:d;e<f<g=h>i>j?l@mAnAoBpCqCrDtEuEvFwGxGyHzI|J}J~KLLMMNOOPQSb:b:SQPOONMMLL~K}J|JzIyHxGwGvFuEtErDqCpCoBnAmAl@j?i>h>g=f<e<d;b:a:`9_8^8]7\6Z5Y5X4W3V3U2S1R1Q0P0O.N.M-K,J, I+ H+ G* F) E) C( B' A& ?% >% >$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ ~;(>$ E=$ =$ =$ =$ =$ =$ =$ =$ =$ =$ >$ ?% ?% A' B' C( E) F) G* H+ I+ J, K,M-N.O/P0Q0R1S1U2V3W3X4Y5Z5\7]7^8_8`9a:b:d;e<f<g=i>i?j?l@mAnAoBqCqCrDtEuEvFxGyHyHzI|J}J~KLLMMNOOPQRa:  b:RQPOONMMLL~K}J|JzIyHyHxGvFuEtErDqCqCoBnAmAl@j?i?i>g=f<e<d;b:a:`9_8^8]7\7Z5Y5X4W3V3U2S1R1Q0P0O/N.M-K,J, I+ H+ G* F) E) C( B' A' ?% ?% >$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ C>% =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ >$ ?% ?% A' B' C( E) F) G* H+ I+ J, K,M.N.O/P0Q0R1S1U2V3W3Y4Y5Z6\7]7^8_8a9a:b:d;e<f<g=i>j?j?l@mAnAoBqCrCrDtEuFvFxGyHzHzI|J}J~KLLMNOOPQNV4X4OQPOONMLL~K}J|JzIzHyHxGvFuFtErDrCqCoBnAmAl@j?j?i>g=f<e<d;b:a:a9_8^8]7\7Z6Y5Y4W3V3U2S1R1Q0P0O/N.M.K,J, I+ H+ G* F) E) C( B' A' ?% ?% >$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ >$ =# c=$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ >$ ?% @% A' B' C( E) F) G* H+ I+ J, K,M.N.O/Q0Q0R1S1U2V3W3Y4Y5Z6\7]7^8_8a9b:b:d;e<f<g=i>j?j?l@mAnAoBqCrCsDtEuFvFxGyHzH{I|J}J~KLMMNOOQ}KA&  B' ~KQOONMML~K}J|J{IzHyHxGvFuFtEsDrCqCoBnAmAl@j?j?i>g=f<e<d;b:b:a9_8^8]7\7Z6Y5Y4W3V3U2S1R1Q0Q0O/N.M.K,J, I+ H+ G* F) E) C( B' A' @% ?% >$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ b=$ !=$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ >$ ?% @% A' B' C( E) F) G* H+ I+ J, K,M.N.O/Q0Q0R1S1U2V3W3Y4Y5Z6\7]7^8_8a9b:b:d;e<f<g=i>j?j?l@mAnAoBqCrCsDtEuFvFxGyHzH{I|J}J~KLMMNOP{J7! 8! {IPONMML~K}J|J{IzHyHxGvFuFtEsDrCqCoBnAmAl@j?j?i>g=f<e<d;b:b:a9_8^8]7\7Z6Y5Y4W3V3U2S1R1Q0Q0O/N.M.K,J, I+ H+ G* F) E) C( B' A' @% ?% >$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ >$ !=!=# k=$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ >$ ?% @% A' B' C( E) F) G* H+ I+ J, K,M.N.O/Q0Q0R1S1U2V3W3Y4Y5Z6\7]7^8_8a9b:b:d;e<f<g=i>j?j?l@mAnAoBqCrCsDtEuFvFxGyHzH{I|J}J~KLMMNO~K=$ >% ~KONMML~K}J|J{IzHyHxGvFuFtEsDrCqCoBnAmAl@j?j?i>g=f<e<d;b:b:a9_8^8]7\7Z6Y5Y4W3V3U2S1R1Q0Q0O/N.M.K,J, I+ H+ G* F) E) C( B' A' @% ?% >$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ >$ i@$ ?$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ >$ ?% ?% A' B' C( E) F) G* H+ I+ J, K,M.N.O/P0Q0R1S1U2V3W3Y4Y5Z6\7]7^8_8a9a:b:d;e<f<g=i>j?j?l@mAnAoBqCrCrDtEuFvFxGyHzHzI|J}J~KLLMNNR1T1NNMLL~K}J|JzIzHyHxGvFuFtErDrCqCoBnAmAl@j?j?i>g=f<e<d;b:a:a9_8^8]7\7Z6Y5Y4W3V3U2S1R1Q0P0O/N.M.K,J, I+ H+ G* F) E) C( B' A' ?% ?% >$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ ;$ =% p=$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ >$ ?% ?% A' B' C( E) F) G* H+ I+ J, K,M-N.O/P0Q0R1S1U2V3W3X4Y5Z5\7]7^8_8a9a:b:d;e<f<g=i>i?j?l@mAnAoBqCrCrDtEuEvFxGyHzHzI|J}J~KLLMNk?  l@NMLL~K}J|JzIzHyHxGvFuEtErDrCqCoBnAmAl@j?i?i>g=f<e<d;b:a:a9_8^8]7\7Z5Y5X4W3V3U2S1R1Q0P0O/N.M-K,J, I+ H+ G* F) E) C( B' A' ?% ?% >$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ m=$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ >$ ?% ?% A' B' C( E) F) G* H+ I+ J, K,M-N.O/P0Q0R1S1U2V3W3X4Y5Z5\7]7^8_8`9a:b:d;e<f<g=i>i?j?l@mAnAoBqCqCrDtEuEvFxGyHyHzI|J}J~KLLMK6 6! LMLL~K}J|JzIyHyHxGvFuEtErDqCqCoBnAmAl@j?i?i>g=f<e<d;b:a:`9_8^8]7\7Z5Y5X4W3V3U2S1R1Q0P0O/N.M-K,J, I+ H+ G* F) E) C( B' A' ?% ?% >$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ <% =$ S=$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ >$ >% ?% A& B' C( E) F) F* H+ I+ J, K,M-N.N.P0Q0R1S1U2V3W3X4Y5Z5\6]7^7_8`9a:b:d;e<f<g=h>i>j?l@mAnAoBpCqCrDtEuEvFwGxGyHzH|I}J}JLLNc;  d;NLL}J}J|IzHyHxGwGvFuEtErDqCpCoBnAmAl@j?i>h>g=f<e<d;b:a:`9_8^7]7\6Z5Y5X4W3V3U2S1R1Q0P0N.N.M-K,J, I+ H+ F* F) E) C( B' A& ?% >% >$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ Q;" =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ >% ?% A& B' C' E) E) F* H+ I+ J, K,M-N.N.P/Q0R1S1U2V3V3X4Y5Z5\6]7^7^8`9a:b:d;e<f<f=h>i>j?l@m@mAnApCqCrDtEuEuFwGxGyHzH{I|J}JKLLA' B( LLK}J|J{IzHyHxGwGuFuEtErDqCpCnAmAm@l@j?i>h>f=f<e<d;b:a:`9^8^7]7\6Z5Y5X4V3V3U2S1R1Q0P/N.N.M-K,J, I+ H+ F* E) E) C' B' A& ?% >% =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ ;& =$ .=$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ >% ?% A& B' C' E( E) F* H+ I+ J, K,M-M.N.P/Q0R0S1U2U3V3X4Y5Z5\6]7]7^8`9a9b:d;e<e<f=h>i>j?l@l@mAnApBqCrCsEtEuFwGxGyHzH{I|J}JKLrD#$rDLK}J|J{IzHyHxGwGuFtEsErCqCpBnAmAl@l@j?i>h>f=e<e<d;b:a9`9^8]7]7\6Z5Y5X4V3U3U2S1R0Q0P/N.M.M-K,J, I+ H+ F* E) E( C' B' A& ?% >% =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =# ,<# ]=$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ >% ?% A& B' C' D( E) F) H+ I+ J, K, L-M.N.P/Q0R0S1T2U2V3X4Y5Z5Z6\7]7^8`9a9b:c;d;e<f<h>i>i?k@l@mAnApBpCqCsDtEuEvFwGxGyH{I{I|J~KLd<  f<L~K|J{I{IyHxGwGvFuEtEsDqCpCpBnAmAl@k@i?i>h>f<e<d;c;b:a9`9^8]7\7Z6Z5Y5X4V3U2T2S1R0Q0P/N.M.L-K, J, I+ H+ F) E) D( C' B' A& ?% >% =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ Z=$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ >% ?% A& B' B' D( E) F) H* I+ J+ J, L-M.N.P/Q0R0R1T2U2V3X4Y4Y5Z6\7]7^8`9a9a:c;d;e<f<h=h>i>k?l@mAnAoBpCqCsDtEtEvFwGxGyHzI{I|J~KLV4W4L~K|J{IzIyHxGwGvFtEtEsDqCpCoBnAmAl@k?i>h>h=f<e<d;c;a:a9`9^8]7\7Z6Y5Y4X4V3U2T2R1R0Q0P/N.M.L-J, J+ I+ H* F) E) D( B' B' A& ?% >% =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ ># >$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ >% ?% A& A' B' D( E) F) H* I+ I+ J, L-M.N.P/P0Q0R1T2U2V3X4X4Y5[6\6]7^8_9`9a:c;d;e<f<g=h>i>k?l@l@mAoBpBqCrDsDtEvFwFwGxGzH{I|I}J}JG* H+ }J}J|I{IzHxGwGwFvFtEsDrDqCpBoBmAl@l@k?i>h>g=f<e<d;c;a:`9_9^8]7\6[6Y5X4X4V3U2T2R1Q0P0P/N.M.L-J, I+ I+ H* F) E) D( B' A' A& ?% >% =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =# >$ K=$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ >$ ?% @& A' B' D( E) F) H* H+ I+ J, L-M-N.O/P0Q0R1T2U2V3W4X4Y5[6\6]7^7_8`9a:c;d;d<e<g=h>i>k?k@l@mAoBpBpCrDsDtEuFvFwGxGzHzI{I}J{I?& @& {I}J{IzIzHxGwGvFuFtEsDrDpCpBoBmAl@k@k?i>h>g=e<d<d;c;a:`9_8^7]7\6[6Y5X4W4V3U2T2R1Q0P0O/N.M-L-J, I+ H+ H* F) E) D( B' A' @& ?% >$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ <$ F=$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ >$ >% @& A& B' D( E) E) G* H+ I+ J, L-L-M.O/P/Q0R0S1T2U2W4X4Y5Z6[6\7]7_8`9a9b:c;d;e<g=g=h>j?k?l@l@nAoBpBqCrDsDuEvFvFwGyHyHzI|JzH=$ =$ zH|JzIyHyHwGvFvFuEsDrDqCpBoBnAl@l@k?j?h>g=g=e<d;c;b:a9`9_8]7\7[6Z6Y5X4W4U2T2S1R0Q0P/O/M.L-L-J, I+ H+ G* E) E) D( B' A& @& >% >$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ <$ ;$ :& =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ >% @& A& B' D( D( E) G* H+ I+ J, K-L-M.O/P/Q0R0S1T2U2W3X4Y4Y5[6\7]7_8_9`9b:c;d;e<f=g=h>j?k?k@l@nAoBoBqCrDsDtEuFvFwFxGyHzH{IzIA' C' zI{IzHyHxGwFvFuFtEsDrDqCoBoBnAl@k@k?j?h>g=f=e<d;c;b:`9_9_8]7\7[6Y5Y4X4W3U2T2S1R0Q0P/O/M.L-K-J, I+ H+ G* E) D( D( B' A& @& >% =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ @" <# =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ >% @& A& B' C( D( E) G* H* I+ I+ K-L-M.O/P/P0Q0S1T2U2W3W4X4Z5[6\6]7^8_8`9b:c:c;d;f<g=h=i>j?k?l@mAnAoBqCrCrDtEuEvFvFxGyHyH{I{IL-M.{I{IyHyHxGvFvFuEtErDrCqCoBnAmAl@k?j?i>h=g=f<d;c;c:b:`9_8^8]7\6[6Z5X4W4W3U2T2S1Q0P0P/O/M.L-K-I+ I+ H* G* E) D( C( B' A& @& >% =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ @# =# ?=$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ >$ ?% @& A' C( D( E) F* G* H+ I+ K,L-M-N.O/P/Q0S1T1T2V3W4X4Z5Z6[6\7^8_8_9a:b:c;d;e<f=g=i>i?j?k@mAnAnApBqCrCsDtEuEuFwGxGxGzH|J[6\6|JzHxGxGwGuFuEtEsDrCqCpBnAnAmAk@j?i?i>g=f=e<d;c;b:a:_9_8^8\7[6Z6Z5X4W4V3T2T1S1Q0P/O/N.M-L-K,I+ H+ G* F* E) D( C( A' @& ?% >$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ ># <=$ a=$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ >$ ?% @& A& C' D( E) F* G* H+ I+ K, K-L-N.O/P/Q0R1S1T2V3W3X4X5Z5[6\6]7^8_8a9b:c:c;e<f<g=h>i>j?k?l@mAnApBpCqCsDsDtEuEvFwGxGyH{If=  f={IyHxGwGvFuEtEsDsDqCpCpBnAmAl@k?j?i>h>g=f<e<c;c:b:a9_8^8]7\6[6Z5X5X4W3V3T2S1R1Q0P/O/N.L-K-K, I+ H+ G* F* E) D( C' A& @& ?% >$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ ^=$ ~=$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ ?% @& A& C' C( D( F) G* H* I+ J, K-L-N.O/P/P0R1S1T2V3V3W4Y5Z5[6\6]7^8_8a9a:b:c;e<e<f=h>i>j?j?l@mAmAoBpBqCrDsDtEtEvFvFwGxHzHsD./tDzHxHwGvFvFtEtEsDrDqCpBoBmAmAl@j?j?i>h>f=e<e<c;b:a:a9_8^8]7\6[6Z5Y5W4V3V3T2S1R1P0P/O/N.L-K-J, I+ H* G* F) D( C( C' A& @& ?% =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =% z=$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ ?% @& @& B' C( D( F) F* G* H+ J, K,L-M.N.O/P/R0R1S1U2V3W3X4Y5Z5[6]7]7^8`9a9a:b:d;e<f<g=h>i>i?k@l@m@nAoBpBqCrDrDsDuEuFvFwGxGzIK,L-zIxGwGvFuFuEsDrDrDqCpBoBnAm@l@k@i?i>h>g=f<e<d;b:a:a9`9^8]7]7[6Z5Y5X4W3V3U2S1R1R0P/O/N.M.L-K,J, H+ G* F* F) D( C( B' @& @& ?% =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ B) =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ >% ?% @& B' C' D( E) F* G* H+ J, K, K-M.N.O/P/Q0R1S1U2V3V3W4Y5Z5[6\7]7^8_9`9a:b:d;d;e<g=g=h>i>k?k@l@nAnAoBqCqCrDsDtEuEuFwFwGyHj?j?yHwGwFuFuEtEsDrDqCqCoBnAnAl@k@k?i>h>g=g=e<d;d;b:a:`9_9^8]7\7[6Z5Y5W4V3V3U2S1R1Q0P/O/N.M.K-K, J, H+ G* F* E) D( C' B' @& ?% >% =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ C"<% =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ >% ?% @& B' C' C( E) F) G* H* I+ J, K,M-N.N.O/Q0R0S1T2U2V3X4Y4Y5Z5\6]7]7_8`9a9b:c;d;e<f=g=h>i>j?k?l@mAnAoBpBqCqCrDsDtEuEvFwFwGxGI* J, xGwGwFvFuEtEsDrDqCqCpBoBnAmAl@k?j?i>h>g=f=e<d;c;b:a9`9_8]7]7\6Z5Y5Y4X4V3U2T2S1R0Q0O/N.N.M-K,J, I+ H* G* F) E) C( C' B' @& ?% >% =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ <$ <# =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ >% ?% @& A' B' C( E) F) G* G* I+ J, K,M-M.N.O/Q0R0R1T2U2V3W4X4Y5Z5[6\7]7_8`9`9a:c;c;d;f<g=g=h>j?j?k@m@mAnAoBpCqCqCsDsEtEuFvFvFwGqB(*qCwGvFvFuFtEsEsDqCqCpCoBnAmAm@k@j?j?h>g=g=f<d;c;c;a:`9`9_8]7\7[6Z5Y5X4W4V3U2T2R1R0Q0O/N.M.M-K,J, I+ G* G* F) E) C( B' A' @& ?% >% =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ >% !=$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ >% ?% A& B' C' D( E) F) G* I+ I+ J, L-M-N.N.P/Q0R0S1T2U2W3W4X4Y5[6\6\7^8_8_9`9b:c:c;e<f<f=g=i>i?j?l@l@mAnAoBpBpCqCrDsDtEtEuEvFwG_9 a9wFvFuEtEtEsDrDqCpCpBoBnAmAl@l@j?i?i>g=f=f<e<c;c:b:`9_9_8^8\7\6[6Y5X4W4W3U2T2S1R0Q0P/N.N.M-L-J, I+ I+ G* F) E) D( C' B' A& ?% >% =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ <$ &=$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ >% ?% A& A' B' D( E) F) G* H+ I+ J, L-L-M.N.P/Q0Q0S1T2U2U3W4X4Y5Z6[6\6]7^8_8`9a:b:c;d<e<f<g=h>i>j?k?l@l@nAnAoBpBqCqCrDsDtEtEuEvFvFS1  T2wGvFuEtEtEsDrDqCqCpBoBnAnAl@l@k?j?i>h>g=f<e<d<c;b:a:`9_8^8]7\6[6Z6Y5X4W4U3U2T2S1Q0Q0P/N.M.L-L-J, I+ H+ G* F) E) D( B' A' A& ?% >% =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =# $=% '=$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ >$ ?% @& A& B' D( E) E) F* H+ I+ J, K-L-M.N.O/P/Q0S1S1T2V3W3X4X4Z5[6[6]7^8_8_9a9b:b:d;e<e<f=h=h>i>j?k@l@mAnAnAoBpCqCqCrDsDtEtEuEuFvFU3V3uFuFuEtEtEsDrDqCqCpCoBnAnAmAl@k@j?i>h>h=f=e<e<d;b:b:a9_9_8^8]7[6[6Z5X4X4W3V3T2S1S1Q0P/O/N.M.L-K-J, I+ H+ F* E) E) D( B' A& @& ?% >$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ %=% $=$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ >% @& A& A' C( D( E) F) G* H+ I+ K, K-L-M.O/O/P0R0S1T1T2V3W3W4Y5Z5[6\7]7^8^8`9a9a:c;d;d<e<f=g=h>i>j?k?l@l@mAnAoBoBpBqCrCrDsDsEtEtEuE[7#$[7uEtEtEsEsDrDrCqCpBoBoBnAmAl@l@k?j?i>h>g=f=e<d<d;c;a:a9`9^8^8]7\7[6Z5Y5W4W3V3T2T1S1R0P0O/O/M.L-K-K, I+ H+ G* F) E) D( C( A' A& @& >% =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ "<% =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ >$ ?% @& A& C' D( D( E) G* H* I+ J, K,L-M-N.O/P/R0R1S1U2U3V3W4Y4Y5Z5\6\7]7^8_9`9a9b:c;d;e<f<g=g=i>i>j?k@l@l@mAnAoBoBpCqCqCrDsDsDtEtEvFh>>%   ?& i>vFtEtEsDsDrDqCqCpCoBoBnAmAl@l@k@j?i>i>g=g=f<e<d;c;b:a9`9_9^8]7\7\6Z5Y5Y4W4V3U3U2S1R1R0P/O/N.M-L-K,J, I+ H* G* E) D( D( C' A& @& ?% >$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ <$ =# =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ ?% @& A& B' C( D( E) G* G* H+ J, K, K-L-N.O/P/Q0R0S1S2U2V3W3X4Y5Z5[6\7]7]7_8`9`9b:c:c;d;e<f<g=h>i>i>k?k@l@l@mAnAoBpBpCqCqCrDrDsDsEtEuErDc:;#   <$ c:sDuEtEsEsDrDrDqCqCpCpBoBnAmAl@l@k@k?i>i>h>g=f<e<d;c;c:b:`9`9_8]7]7\7[6Z5Y5X4W3V3U2S2S1R0Q0P/O/N.L-K-K, J, H+ G* G* E) D( C( B' A& @& ?% =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ <$ =# =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ ?% @& @& B' C( D( E) F* G* H* I+ J, K,L-N.N.O/Q0Q0R1T2U2U3V3X4X4Y5[6[6\7]7^8_8`9a:b:c;c;e<e<f=g=h>i>j?j?k@l@mAmAnAoBoBpBpCqCqCrDsDsDsDtEtEsDj?S1=% .&$$&/=% S2j@sDtEtEsDsDsDrDqCqCpCpBoBoBnAmAmAl@k@j?j?i>h>g=f=e<e<c;c;b:a:`9_8^8]7\7[6[6Y5X4X4V3U3U2T2R1Q0Q0O/N.N.L-K,J, I+ H* G* F* E) D( C( B' @& @& ?% =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ <% ==$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ >% ?% @& A' B' C( D( E) F* G* I+ I+ J, K,M-M.N.P/Q0Q0S1T2T2U2W3X4X4Z5Z6[6\6]7^8_8`9a9b:b:d;d;e<f=g=g=i>i>j?j?k@l@l@mAnAnAoBoBpBpCqCqCrCrDrDrDsDuEvFsDl@j?j?l@sDvFuEsDrDrDrDrCqCqCpCpBoBoBnAnAmAl@l@k@j?j?i>i>g=g=f=e<d;d;b:b:a9`9_8^8]7\6[6Z6Z5X4X4W3U2T2T2S1Q0Q0P/N.M.M-K,J, I+ I+ G* F* E) D( C( B' A' @& ?% >% =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ 6/=$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ >$ ?% ?% A& B' C' C( E) F) G* H+ I+ J, K, L-M.N.O/P/Q0R1S1T2U2V3W4X4Y5Z5[6[6]7^7^8`9`9a9b:c;d;d;e<f=g=h>h>i>j?k?k@l@m@mAmAnAoBoBoBpCpCqCqCqCrCrDrDrDrDsDsDsDsDrDrDrDrDrCqCqCqCpCpCoBoBoBnAmAmAm@l@k@k?j?i>h>h>g=f=e<d;d;c;b:a9`9`9^8^7]7[6[6Z5Y5X4W4V3U2T2S1R1Q0P/O/N.M.L-K, J, I+ H+ G* F) E) C( C' B' A& ?% ?% >$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =# w=$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ >% ?% A& A' B' C( E) E) F* H+ I+ I+ J, L-M-M.O/P/P0Q1S1T1T2V3W3W4Y5Y5Z5[6\7]7^7_8`9`9a:b:c;d;e<e<f<g=h>h>i>j?j?k?l@l@m@mAnAnAoBoBpBpBpCqCqCqCqCqCqCrCrCrCrCqCqCqCqCqCqCpCpBpBoBoBnAnAmAm@l@l@k?j?j?i>h>h>g=f<e<e<d;c;b:a:`9`9_8^7]7\7[6Z5Y5Y5W4W3V3T2T1S1Q1P0P/O/M.M-L-J, I+ I+ H+ F* E) E) C( B' A' A& ?% >% =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ u=$ Y=$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ >% @& A& A' B' D( E) E) G* H* I+ I+ K,L-L-N.O/P/P0R0S1S1U2U3V3X4X4Y5Z5[6\6\7^8^8_8`9a:b:b:c;d;e<f<f=g=g=h>i>i>j?k?k@k@l@m@mAnAnAnAoBoBoBoBoBpBpBpBpBpBpBpBpBoBoBoBoBoBnAnAnAmAm@l@k@k@k?j?i>i>h>g=g=f=f<e<d;c;b:b:a:`9_8^8^8\7\6[6Z5Y5X4X4V3U3U2S1S1R0P0P/O/N.L-L-K,I+ I+ H* G* E) E) D( B' A' A& @& >% =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ W=# 9=$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ >% ?% @& A& B' C( D( E) G* G* H+ I+ J, K-L-N.N.O/Q0Q0R1S1T2U2V3W4X4X4Y5[6[6\6]7^8^8_8`9a:b:c;c;d;e<f<f=g=h=h>i>i?j?j?k?k@l@l@mAmAmAnAnAnAnAoBoBoBoBoBoBoBoBoBoBnAnAnAnAmAmAmAl@l@k@k?j?j?i?i>h>h=g=f=f<e<d;c;c;b:a:`9_8^8^8]7\6[6[6Y5X4X4W4V3U2T2S1R1Q0Q0O/N.N.L-K-J, I+ H+ G* G* E) D( C( B' A& @& ?% >% =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ 7<# =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ ?% @& A& A' C( D( E) F) G* H* H+ J, K,L-M.N.O.O/Q0R0R1T2T2U2W3W4X4Y4Z5[6[6]7]7^8^8`9`9a9b:c:c;d;e<e<f<g=g=h>i>i>i?j?k?k?k@l@l@l@mAmAmAmAnAnAnAnAnAnAnAnAnAnAmAmAmAmAl@l@l@k@k?k?j?i?i>i>h>g=g=f<e<e<d;c;c:b:a9`9`9^8^8]7]7[6[6Z5Y4X4W4W3U2T2T2R1R0Q0O/O.N.M.L-K,J, H+ H* G* F) E) D( C( A' A& @& ?% =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ :& D=$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ ?% ?% @& A& C' C( D( F) F* G* H+ J, J, K,M-M.N.P/P0Q0R0S1T2U2V3W3W4X4Y5Z5[6\6]7]7^8_8`9`9a:b:c:d;d;e<e<f=g=g=h>h>i>i>j?j?j?k?k@l@l@l@l@m@mAmAmAmAmAmAmAmAmAmAm@l@l@l@l@k@k?j?j?j?i>i>h>h>g=g=f=e<e<d;d;c:b:a:`9`9_8^8]7]7\6[6Z5Y5X4W4W3V3U2T2S1R0Q0P0P/N.M.M-K,J, J, H+ G* F* F) D( C( C' A& @& ?% ?% =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ 2 ?" ># v=$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ >$ ?% ?% @& B' C' C( E) F) F* G* I+ I+ J, L-L-M.N.O/P/Q0R1S1S1U2U3V3W3X4Y5Y5[6[6\6]7^8^8_8`9a9a:b:c:c;d;e<e<e<f=g=g=g=h>h>i>i>j?j?j?j?k?k?k?k@k@k@k@k@k@k@k@k?k?k?j?j?j?j?i>i>h>h>g=g=g=f=e<e<e<d;c;c:b:a:a9`9_8^8^8]7\6[6[6Y5Y5X4W3V3U3U2S1S1R1Q0P/O/N.M.L-L-J, I+ I+ G* F* F) E) C( C' B' @& ?% ?% >$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ t=$ ># ?=$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ >% ?% @& A' B' C' D( E) F) G* H+ I+ J, K,L-M-M.O/O/P/Q0R1S1T2U2V3V3X4X4Y5Z5[6[6\6]7^7^8_8`9`9a:b:b:c;d;d;e<e<f<f=g=g=h=h>h>i>i>i>j?j?j?j?j?j?j?j?j?j?j?j?j?j?j?j?i>i>i>h>h>h=g=g=f=f<e<e<d;d;c;b:b:a:`9`9_8^8^7]7\6[6[6Z5Y5X4X4V3V3U2T2S1R1Q0P/O/O/M.M-L-K,J, I+ H+ G* F) E) D( C' B' A' @& ?% >% =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ <>" =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ >$ ?% ?% A& B' B' D( E) E) F) H* H+ I+ K, K-L-M-N.O/P/Q0R0R1T2T2U2V3W3X4X4Y5Z5[6[6\7]7]7_8_8`9a9a:b:b:c;c;d;e<e<e<f<f=g=g=h=h>h>h>i>i>i>i>i>i?i?i?i?i?i?i>i>i>i>i>h>h>h>h=g=g=f=f<e<e<e<d;c;c;b:b:a:a9`9_8_8]7]7\7[6[6Z5Y5X4X4W3V3U2T2T2R1R0Q0P/O/N.M-L-K-K, I+ H+ H* F) E) E) D( B' B' A& ?% ?% >$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ ;# ?" =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ >$ >% @& A& A' C( D( D( E) G* G* H+ I+ J, K,L-M.N.N.P/P0Q0R1S1T2T2V3V3W3X4Y5Y5Z5[6\6\7]7^8^8_8`9`9a9a:b:b:c;c;d;d;e<e<e<f<f=f=g=g=g=g=g=h=h=h=h=h=h=h=h=g=g=g=g=g=f=f=f<e<e<e<d;d;c;c;b:b:a:a9`9`9_8^8^8]7\7\6[6Z5Y5Y5X4W3V3V3T2T2S1R1Q0P0P/N.N.M.L-K,J, I+ H+ G* G* E) D( D( C( A' A& @& >% >$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ >$ O=$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ >% ?% @& A& B' C( D( E) F) G* G* I+ J, J, L,L-M.N.O/P/P0R0R1S1T2U2V3V3W4X4Y4Y5Z5[6[6\7]7]7^8_8_9`9a9a:a:b:c:c;c;d;d;d<e<e<e<f<f<f=f=g=g=g=g=g=g=g=g=g=g=f=f=f<f<e<e<e<d<d;d;c;c;c:b:a:a:a9`9_9_8^8]7]7\7[6[6Z5Y5Y4X4W4V3V3U2T2S1R1R0P0P/O/N.M.L-L,J, J, I+ G* G* F) E) D( C( B' A& @& ?% >% =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ <$ N=% %=$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ ?% @& @& B' C' C( D( F) F* G* H+ I+ J, J,L-M-M.O.O/P/Q0R0R1S1T2U2V3W3W4X4X4Z5Z5[6\6\7]7^7^8_8_8`9`9a9a:b:b:b:c;c;d;d;d<e<e<e<e<e<f<f<f<f<f<f<f<f<f<f<e<e<e<e<e<d<d;d;c;c;b:b:b:a:a9`9`9_8_8^8^7]7\7\6[6Z5Z5X4X4W4W3V3U2T2S1R1R0Q0P/O/O.M.M-L-J,J, I+ H+ G* F* F) D( C( C' B' @& @& ?% =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =# %=!=$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ >% ?% @& A' B' C' D( E) F) F* H* I+ I+ K, K-L-M-N.O/O/Q0Q0R0R1T2T2U2V3W3W4X4Y5Y5Z5[6[6\6]7]7^8^8_8_9`9a9a9a:b:b:b:c;c;c;d;d;d;d<e<e<e<e<e<e<e<e<e<e<e<e<d<d;d;d;c;c;c;b:b:b:a:a9a9`9_9_8^8^8]7]7\6[6[6Z5Y5Y5X4W4W3V3U2T2T2R1R0Q0Q0O/O/N.M-L-K-K, I+ I+ H* F* F) E) D( C' B' A' @& ?% >% =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ @!=% G=$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ >% ?% @& A& B' B' D( E) E) G* G* H+ I+ J, K,K-M-M.N.O/P/Q0Q0R1S1T1U2U2V3V3W4X4X4Y5Z5Z6[6\6\7]7]7^8^8_8_8`9`9a9a9a:b:b:b:b:b:c:c;c;c;c;c;c;c;c;c;c;c;c;c:b:b:b:b:b:a:a9a9`9`9_8_8^8^8]7]7\7\6[6Z6Z5Y5X4X4W4V3V3U2U2T1S1R1Q0Q0P/O/N.M.M-K-K,J, I+ H+ G* G* E) E) D( B' B' A& @& ?% >% =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ <# E;$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ >$ >% @& A& A' B' C( D( E) F) G* G* I+ I+ J, K,L-M-M.O/O/P/P0R0R1S1T2U2U2V3W3W4X4Y5Y5Z5[6[6[6\6]7]7]7^8^8_8_8`9`9`9a9a9a:a:b:b:b:b:b:b:b:b:b:b:b:b:b:b:b:b:a:a:a9a9`9`9`9_8_8^8^8]7]7]7\6[6[6[6Z5Y5Y5X4W4W3V3U2U2T2S1R1R0P0P/O/O/M.M-L-K,J, I+ I+ G* G* F) E) D( C( B' A' A& @& >% >$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ <$ <$ Z=$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ >$ ?% @& A& A' C' C( D( F) F* G* H+ I+ J+ J, K-L-M-N.O/O/P/Q0R0R1S1T2T2U2V3V3W4X4X4Y5Z5Z5[6[6\6\7]7]7^7^8^8_8_8_9`9`9`9a9a9a9a9a:a:a:a:a:a:a:a:a:a:a9a9a9a9`9`9`9_9_8_8^8^8^7]7]7\7\6[6[6Z5Z5Y5X4X4W4V3V3U2T2T2S1R1R0Q0P/O/O/N.M-L-K-J, J+ I+ H+ G* F* F) D( C( C' A' A& @& ?% >$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ <# X<& =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ >% ?% @& @& B' B' C( D( E) F) F* H* H+ I+ J, K,K-M-M.N.N.P/P/Q0R0R1S1S1T2U2U3V3W3W4X4Y4Y5Y5Z5[6[6\6\6\7]7]7]7^7^8^8^8_8_8_8_8_9_9`9`9`9`9`9`9_9_9_8_8_8_8^8^8^8^7]7]7]7\7\6\6[6[6Z5Y5Y5Y4X4W4W3V3U3U2T2S1S1R1R0Q0P/P/N.N.M.M-K-K,J, I+ H+ H* F* F) E) D( C( B' B' @& @& ?% >% =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =# B$ =$ \=$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ >$ >% ?% @& A& B' B' D( D( E) F* G* H* H+ J, J, K,L-M-M.N.O/O/P/Q0R0R1S1T2T2U2V3V3W3W4X4X4Y5Y5Z5Z5[6[6[6\6\7\7]7]7]7^7^8^8^8^8^8_8_8_8_8_8_8_8_8^8^8^8^8^8^7]7]7]7\7\7\6[6[6[6Z5Z5Y5Y5X4X4W4W3V3V3U2T2T2S1R1R0Q0P/O/O/N.M.M-L-K,J, J, H+ H* G* F* E) D( D( B' B' A& @& ?% >% >$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ X=+?$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ >$ >% ?% @& A& B' C( D( D( F) F* G* H* I+ J+ J, K-L-M-M.N.O/O/P0Q0Q0R1S1S1T2U2U3V3W3W4W4X4Y4Y5Y5Z5Z5[6[6[6\6\6\7]7]7]7]7]7]7^7^8^8^8^8^8^8^8^8^7]7]7]7]7]7]7\7\6\6[6[6[6Z5Z5Y5Y5Y4X4W4W4W3V3U3U2T2S1S1R1Q0Q0P0O/O/N.M.M-L-K-J, J+ I+ H* G* F* F) D( D( C( B' A& @& ?% >% >$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ >$ =$ R=$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ >% ?% @& A& A' C' C( D( E( F) F* G* H+ I+ I+ K, K-L-L-N.N.O/P/P/Q0Q0R1S1S1T2U2U2V3V3W3W4X4X4X4Y5Y5Z5Z5[6[6[6[6\6\6\7\7\7]7]7]7]7]7]7]7]7]7]7]7]7\7\7\7\6\6[6[6[6[6Z5Z5Y5Y5X4X4X4W4W3V3V3U2U2T2S1S1R1Q0Q0P/P/O/N.N.L-L-K-K, I+ I+ H+ G* F* F) E( D( C( C' A' A& @& ?% >% =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ O<# =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ ?% ?% @& A' B' C' D( D( E) F) G* H* H+ I+ J, J, K,L-M-M.N.O/O/P/Q0Q0R0S1S1S1T2U2U2U3V3V3W3W4X4X4X4Y5Y5Y5Z5Z5Z5Z6Z6[6[6[6[6[6[6[6q\6s\6[6[6[6[6[6Z6Z6Z5Z5Z5Y5Y5Y5X4X4X4W4W3V3V3U3U2U2T2S1S1S1R0Q0Q0P/O/O/N.M.M-L-K,J, J, I+ H+ H* G* F) E) D( D( C' B' A' @& ?% ?% =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ A# =$ 2=$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ >% ?% ?% A& A' B' C( D( D( E) F* G* G* I+ I+ J, J, K-L-L-M.N.N.O/P/P0Q0R0R1S1S1T2T2U2U3V3V3W3W3W4W4X4X4X4Y5Y5Y5Y5Z5Z5Z5Z5Z5Z5Z5[4[6Z5Z5Z5Z5Z5Z5Z5Y5Y5Y5Y5X4X4X4W4W4W3W3V3V3U3U2T2T2S1S1R1R0Q0P0P/O/N.N.M.L-L-K-J, J, I+ I+ G* G* F* E) D( D( C( B' A' A& ?% ?% >% =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =# 0=$ =$ g=$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ >% ?% @& A& A' C' C( D( D( F) F) G* H+ H+ I+ J, K, K,L-M-M.N.N.O/P/P/Q0Q0R0S1S1S1T2T2U2U2V3V3V3W3W4W4X4X4X4X4Y4Y5Y5Y5Y5Y5Y5Y5EY4HY5Y5Y5Y5Y5Y5Y4X4X4X4X4W4W4W3V3V3V3U2U2T2T2S1S1S1R0Q0Q0P/P/O/N.N.M.M-L-K,K, J, I+ H+ H+ G* F) F) D( D( C( C' A' A& @& ?% >% =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ e=$ ?&>$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ >$ ?% ?% @& A' B' B' C( D( E) E) G* G* H* H+ I+ J, J, K-L-L-M-N.N.O.O/P/P/Q0Q0R0R1S1S1S1T2T2U2U2U3V3V3V3V3W3W3W4W4W4W4W4W4wZ0X4X4zW4W4W4W4W4W3W3V3V3V3V3U3U2U2T2T2S1S1S1R1R0Q0Q0P/P/O/O.N.N.M-L-L-K-J, J, I+ H+ H* G* G* E) E) D( C( B' B' A' @& ?% ?% >$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ >& <$ .=$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ >% ?% ?% A& A' B' B' D( D( E) F) F* G* G* H+ I+ J+ K, K,K-L-M-M.N.O/O/O/P/Q0Q0Q0R1R1S1S1S1T2T2T2U2U2U3U3V3V3V3V3V3V3W4T2V2W3V3V3V3V3V3V3U3U3U2U2T2T2T2S1S1S1R1R1Q0Q0Q0P/O/O/O/N.M.M-L-K-K,K, J+ I+ H+ G* G* F* F) E) D( D( B' B' A' A& ?% ?% >% =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ >% -=$ I=$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ >$ >% ?% ?& A& A& B' C( C( D( E) F) F) G* H* H+ I+ J, J, K, K,L-M-M.N.N.O/O/P/P/P0Q0Q0R0R1S1S1S1T2T2T2T2U2U2U2U2U3U3V3W3,V3-V3U3U3U2U2U2U2T2T2T2T2S1S1S1R1R0Q0Q0P0P/P/O/O/N.N.M.M-L-K,K, J, J, I+ H+ H* G* F) F) E) D( C( C( B' A& A& ?& ?% >% >$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ H@=$ i=$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ >$ ?% ?% @& A& A' C' C' D( D( E) F) F* G* H* H+ I+ I+ J, K, K,L-L-M-M.N.N.N.P/O/Q/P/Q0Q0Q0R0R0R1R1S1S1S1S1S1S1T1U2KQ)[5T2NT1S1S1S1S1S1S1R1R1R0R0Q0Q0Q0P/Q/O/P/N.N.N.M.M-L-L-K,K, J, I+ I+ H+ H* G* F* F) E) D( D( C' C' A' A& @& ?% ?% >$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =# fE"?" >$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =% ?% ?% @& A& A' B' C( C( D( E( F) F) G* G* H+ H+ I+ J, J, K, K-L-L-M.M.N.N.O/O/O/P/P/P0Q0Q0Q0Q0R0R1R1R1R1S1S1dU3Q3S1fS1R1R1R1R1R0Q0Q0Q0Q0P0P/P/O/O/O/N.N.M.M.L-L-K-K, J, J, I+ H+ H+ G* G* F) F) E( D( C( C( B' A' A& @& ?% ?% =% =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ <& <$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ >$ >% ?% @& A& A& B' C' C( D( E) E) F) G* G* H* H+ I+ I+ J, K, K,K-L-L-M-M.N.N.N.O/O/O/P/P/P0Q0Q0Q0Q0Q0R0R0vS1N.S0xR0Q0Q0Q0Q0Q0P0P/P/O/O/O/N.N.N.M.M-L-L-K-K,K, J, I+ I+ H+ H* G* G* F) E) E) D( C( C' B' A& A& @& ?% >% >$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ <# <% =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ >$ >% ?% @& @& B' B' C' C( D( E) E) F) F* G* G* H+ I+ I+ J, J, K, K-L-L-L-M.M.N.N.N.O.O/O/O/P/P/P/P0P0Q0Q4 O2 Q0P0P0P/P/P/O/O/O/O.N.N.N.M.M.L-L-L-K-K, J, J, I+ I+ H+ G* G* F* F) E) E) D( C( C' B' B' @& @& ?% >% >$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ >% >% ?% @& A& A& B' C' C( C( D( E) E) F) G* G* G* H+ I+ I+ J, J, J, K, K,L-L-L-M-M-M.N.N.N.N.N.O.P/|S. Q2 P0~O.N.N.N.N.N.M.M-M-L-L-L-K,K, J, J, J, I+ I+ H+ G* G* G* F) E) E) D( C( C( C' B' A& A& @& ?% >% >% =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ <# =# =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ >$ >% ?% @& @& A& B' B' C' D( D( E( E) F) F) G* G* H* H+ I+ I+ I+ J, J, K, K,K-L-L-L-M-M-M.M.N.O-vQ- Q. N/wN.M.M.M-M-L-L-L-K-K,K, J, J, I+ I+ I+ H+ H* G* G* F) F) E) E( D( D( C' B' B' A& @& @& ?% >% >$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ ?% =" =$ ~=$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ >$ ?% ?% @& @& A& A' B' C' C( D( D( E) E) F) G* G* G* H+ H+ I+ I+ J+ J, J, K, K,K,K-L-L-L-L-M,`O,N0M.bL-L-L-L-K-K,K,K, J, J, J+ I+ I+ H+ H+ G* G* G* F) E) E) D( D( C( C' B' A' A& @& @& ?% ?% >$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ |<$ :$ =$ c=$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ >$ >% ?% ?% @& @& A' B' B' C' C( D( D( E) E) F) F* G* G* G* H* H+ H+ I+ I+ I+ J, J, J, K-L,OO0O+L-QK-J, J, J, I+ I+ I+ H+ H+ H* G* G* G* F* F) E) E) D( D( C( C' B' B' A' @& @& ?% ?% >% >$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ b>';# =% D=$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ >$ ?% ?% @& A& A& A' B' C' C( C( D( D( E) E) F) F) F* G* G* H* H+ H+ I+ I+ I+ J+ I,0I&G1 J+ 1J+ I+ I+ I+ H+ H+ H* G* G* F* F) F) E) E) D( D( C( C( C' B' A' A& A& @& ?% ?% >$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =# D:% ?+ <# =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ >% >% ?% @& @& A& A& B' B' C' C( D( D( E) E) E) F) F) F* G* G* G* H* H* I, xJ+ J+ I+ zH* H* G* G* G* F* F) F) E) E) E) D( D( C( C' B' B' A& A& @& @& ?% >% >% =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =# =$ B ?' >$ `=$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ >$ >% ?% ?% @& @& A& A' B' B' C' C( D( D( D( E) E) F) F) F* G* G* G) CA,I'G*DG* G* F* F) F) E) E) D( D( D( C( C' B' B' A' A& @& @& ?% ?% >% >$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ ^A(?" =$ +=$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ >$ >% ?% ?% @& @& A& A& A' B' B' C' C( D( D( D( E) F) yG( G* F) yE( D( D( D( C( C' B' B' A' A& A& @& @& ?% ?% >% >$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ >% *:#># =% B=% =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ >$ ?% ?% ?% @& @& A& A' B' B' B' C' C( C) D) .F) E) E( .C( C( C' B' B' B' A' A& @& @& ?% ?% ?% >$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ >% B># <' <$ L=$ =$ <# =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ >$ >% >% ?% ?% @& @& A& A& A' B' C( 7D) C( C' 8B' A' A& A& @& @& ?% ?% >% >% >$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ <# =$ =$ =$ K># 3 Q?.iZK=G1=% =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ >$ >% ?% @& @& @& ;C) A' @& ;@& ?& ?% >% >$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =% G2ZL=Q?-h0 8~}|uqlh]SS@.C,>& <# <" =# =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ >$ `?% (A& =# >$ (=% `=% =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =# <" <# ?&C,S@/h]Suql~}}88|wl`SXF4L7!B+;" :!;" <# <# =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ >$ m?# ,<" >! <% =% >" -=# n=$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ <# <# ;" :!;" C+M7"XF4m`T|w88xnreWgVEYF3L6 B*<" ;" <" <# <# <# <# <# <# <# <# <# <# @(@(=$ =$ =$ ~=# R># &;6<# '>% S=$ ~=$ =$ @(@(<# <# <# <# <# <# <# <# <# <# <" ;" <" B*L6 ZF3gVEseXxn88{viwj\rdUk[LgWGdUEbSB_P@aRCdWJfZOh^Tle]dZO1># ># 1dZOld]h^TfZOcWJ`RC_P@bSBdUEgWGk[LrdUwj\vi{88ll88ll88ll88ll88ll88ll88ll88ll88ll88ll88ll88ll88ll88ll88ll88ll88ll88ll87ll78ll77su7664􁁁󀀀41쁁Ȁ!"ˀ뀀1,၁倀./灁߀+#̀89ˁ"dg lރ߁l`񂂂RS񂂂_J灁倀H$ƀЃ(,ԁĂ!sv!U큁^`삂Rցɂ̀Շr~~~wc9<_'끁~~~遁%`큁Y[[0Ҁփ=?׀ρ.ʄ33ʀI偁10偁IÃ2~~~6ŀS􁁁MNЀ󀀀QÀ倀t u怀[&+XˁY eрV큁󁁁=>뀀S}}} 뀀Q  N쀀 6ぁmn退 6|݀b+  ,dހy򀀀րs[VQJGGJQV[sׁ򀀀Hက뀀뀀₂F{} 'ˀ&R聁怀Po󁁁򀀀n }}}  ~~~ "~~~  v퀀큁y b܀`~~~=:뀀ꀀyyy _π΁] ,󀀀* PÀF sррq/~݀܁|.'؀׀%s񀀀񀀀s}}}\܀ہ\ /Rက󀀀󁁁Q. |||~~~ LՀՀI $`Ҁ退退с_$1ERX]pp]XRE1  ???????????????????????????????( =% =% =% C' >$ Y=$ >$ YC' ?$ >% U=$ =$ =$ >% UA& ?$ =$ W=$ =$ =$ =$ =$ >$ VA& ?$ =$ W=$ =$ =$ =$ =$ =$ =$ =$ W?$ @$ >$ T=$ =$ =$ =$ =$ =$ =$ =$ =$ >$ T@$ =$ =$ U=$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ U@$ =$ =$ V=$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ V=$ ;# =$ U=$ =$ =$ =$ >$ >% >% >% >% >% >$ =$ =$ =$ =$ =$ U<# @! =$ T>$ >% ?% ?% ?% @& @& @& @& @& @& @& ?% ?% ?% >% >$ >$ S@! >( @% V@% @& A& A& B& B& B' B' B' B' B' B' B' B& B& A& A& @& @% @% V>( =' A' UA' B' B( C( C( D( D( D) D) D) D) D) D) D) D( D( C( C( B( B' A' A' U=' ?#C' SC' D( D( E) E) F) F) F* G* G* G* G* G* G* G* F* F) F) E) E) D( D( C' C' SA% >$D( TE( D( F) F) F* G* H* H* H+ H+ I+ I+ I+ I+ I+ H+ H+ H* H* G* F* F) F) D( E( D( S>$G,E( UF) F) G) H* H* I+ I+ J+ J, K, K, K, K, K, K, K, K, K, J, J+ I+ I+ H* H* G) F) F) E( UG,E)G* SG* H+ I+ I+ J, J,K-K-M-L.M.N.N.N.M.N.N.N.M.L.M-K-K-J,J, I+ I+ H+ G* F* SC)G(H*RH* H+ J, K, K,L-M.M.N.O/O/O/P/P/P/P/P/P/P/O/O/O/N.M.M.L-K,K, J, H+ H* G*RG(G&I* TI+ J+ K, L-M-N-O.O/P/P/Q0Q0R0R0R0R0S0R0R0R0R0Q0Q0P/P/O/O.N-M-L-K, J+ I+ I* TG&C-I+ SJ, K-L-M.N/O/P/Q0Q1R1R1S2S2T2T2T2T2U2T2T2T2T2S2S2R1R1Q1Q0P/O/N/M.L-K-J, I* SE&J, I,QJ, L-M.N.O/P0Q0R0S1T2T2U2V3V3V3W3W3W4W4W4W3W3V3V3V3U2T2T2S1R0Q0P0O/N.M.L-J, I,QJ,K, K, VK, L-N.O/P/Q0R1S1T1U2V3V3W3X4X4X4Y5Y5Y5Y5Y5Y5Y5X4X4X4W3V3V3U2T1S1R1Q0P/O/N.L-K, K,RK,K, K, WK-L.N.P0Q/R1S1U2U3V3X4X5Y5Y5Z6[6[6[6\7\7\7\7\7[6[6[6Z6Y5Y5X5X4V3U3U2S1R1Q/P0N.L.K-K, UK, J) K, TK-M.N/P/R1S1T2U2V3X4X4Z5[6\6]6^7^7^7_8_8_8_8_8_8_8^7^7^7]6\6[6Z5X4X4V3U2T2S1R1P/N/M.K-K, TK* I* J, UK-M-O/P0Q0S1U2V3W3X4Y5Z5\6Z5N.M-N.O.O.O/O/O/O/O/O/O/O.O.N.M-N.Z5\6Z5Y5X4W3V3U2S1Q0P0O/M-K-K, TI* I* K, VL-M-O.Q0R0S1U2W3X4Y4Z5[6\6^7U2                 U2^7\6[6Z5Y4X4W3U2S1R0Q0O.M-L-K, VI* F( J, UL-M.O/Q0S1T2U3W4Y5Z5[6\7]8^8`9[6[6`9^8]8\7[6Z5Y5W4U3T2S1Q0O/M.L-J, UH( H* J+ SK,M-O/P0R0T2V3W3Y5Z6[6]7_8_9`9b:`9--`9b:`9_9_8]7[6Z6Y5W3V3T2R0P0O/M-K,J+ SH* H* J, UK, L-N.P0R0T1V3W3Y4[6\6]7^8`9b:b:d;e<B' B' e<d;b:b:`9^8]7\6[6Y4W3V3T1R0P0N.L-K, J, UH* F( I+ VK,M-N.P/R1T2V3X4Y5[6]7^8_9`9b;d;d<f=h?Q0Q0h?f=d<d;b;`9_9^8]7[6Y5X4V3T2R1P/N.M-K,J, UH* G) H* SJ+ L-N.O/Q0S2U2W3Y5[6\6^8`9a9b:d<e<g=h>j?\6\7j?h>g=e<d<b:a9`9^8\6[6Y5W3U2S2Q0O/N.L-J+ I+ RH* G* H* SH+ K, M.O/P/R0T2V3X4Z6\6]7_9a:b:d;f<g=h>j?k?g=**g=k?j?h>g=f<d;b:a:_9]7\6Z6X4V3T2R0P/O/M.K, H+ H* SC* A* F* UH* I+ K,M.P/Q0S1U3W4Y4[6]7_8a9c:d;e<g=i>j?l@m@oB;# ;# oBm@l@j?i>g=e<d;c:a9_8]7[6Y4W4U3S1Q0P/M.K,I+ H* F* UD* B$ E( SG) I+ K,M-O/Q0S1U2W4Y5[6]7_8a9c;e<f=g=i?k@l@nBoBrDL-  L-rDoBnBl@k@i?g=f=e<c;a9_8]7[6Y5W4U2S1Q0O/M-K,I+ G) E( SB$ @& D' QE) G* I, L-N.P0R1T2V3X4Z5\6^8`9b:d<f<g=i>k@l@nApBqCtE^8  ^8tEqCpBnAl@k@i>g=f<d<b:`9^8\6Z5X4V3T2R1P0N.L-I, G* E) D' Q@& =$ B( TD( F) H* J, L-O.Q0S1U2W3Y5[6]7_9a:c:e<g=h>j?l@nAoBqCsDuEoB!!oBuEsDqCoBnAl@j?h>g=e<c:a:_9]7[6Y5W3U2S1Q0O.L-J, H* F) D( B( T@& =% A' SC( E) G* I+ K-N.P/R1T2V3X4Z6]7_8a:c;e<g=i>j?l@nBpCqCsEuFvFxH3 3 xHvFuFsEqCpCnBl@j?i>g=e<c;a:_8]7Z6X4V3T2R1P/N.K-I+ G* E) C( A' S=% ;" ?& PA& C( F) G* J+ L-N.Q/S1U2W3Y4[6]7`8b:d;f<h>j?l@mAoBqCsDuFwFxGzHJ, K, zHxGwFuFsDqCoBmAl@j?h>f<d;b:`8]7[6Y4W3U2S1Q/N.L-J+ G* F) C( A& ?& P=" =" =$ R?% B& D( F) H+ J, L.O/Q0S2V3W4Z5\7^8`9b;e<g=i>k?l@nApCrDtEvFxGyH{Ic;  c;{IyHxGvFtErDpCnAl@k?i>g=e<b;`9^8\7Z5W4V3S2Q0O/L.J, H+ F) D( B& ?% >$ R<" =" =$ S>% @& B' D) G* H+ K, M.O/R0T2V3X4Z5\7_8a9c;e<g=j?l@mAoBqDsEuEwGyH{I}IvF  vF}I{IyHwGuEsEqDoBmAl@j?g=e<c;a9_8\7Z5X4V3T2R0O/M.K, H+ G* D) B' @& >% =$ S=" >" =# Q=$ >% @& B' E) G* I+ L,N.P/S1U3W4Y5[6]8`9b:d<g=i>k@mAoBqCsEuFwGyH{I}J~K}J. . }J~K}J{IyHwGuFsEqCoBmAk@i>g=d<b:`9]8[6Y5W4U3S1P/N.L,I+ G* E) B' @& >% =$ =# Q<" :$ >$ T=$ =$ >% A& C' E) H* I+ L-N/Q0S1U3X4Y5\6^8`9c:e<g=i>l@nApBrCtEvFxGzI|J~KLLI,I,LL~K|JzIxGvFtErCpBnAl@i>g=e<c:`9^8\6Y5X4U3S1Q0N/L-I+ H* E) C' A& >% =$ =$ <$ SC' R=$ H=$ =$ =$ >% A& C' E) H+ J, L-N/Q0S1U3X4Z5\6_8a9c:e<h=j?lAnBpCsDuFwGyH{I}JKLNc;c;NLK}J{IyHwGuFsDpCnBlAj?h=e<c:a9_8\6Z5X4U3S1Q0N/L-J, H+ E) C' A& >% =$ =$ =$ >$ D=$ /=$ =$ =$ =$ ?% A' C( F* H+ J, M-O/Q0T1V3X4Z5]7_9a:d;f=h>j?mAoBqCtDvFxG{H}JKLMOsD  tDOMLK}J{HxGvFtDqCoBmAj?h>f=d;a:_9]7Z5X4V3T1Q0O/M-J, H+ F* C( A' ?% =$ =$ =$ =$ >$ -<% <$ =$ =$ =$ =$ ?& B' D( F* I+ J, M-O/R0T1V3Y5Z6]7`9b:d;f=i>k?mApBrCtDvFyH{I}KLMNP}K,,}KPNML}K{IyHvFtDrCpBmAk?i>f=d;b:`9]7Z6Y5V3T1R0O/M-J, I+ F* D( B' ?& =$ =$ =$ =$ =% =% 3;=% r=$ =$ =$ =$ =$ ?& B' D( F* I+ K, M-O/R0T2V4Y5[6]7`9b:d;f=i>k?mApBrDtEvGyH{I}KLMNPM8! 8" MPNML}K{IyHvGtErDpBmAk?i>f=d;b:`9]7[6Y5V4T2R0O/M-K, I+ F* D( B' ?& =$ =$ =$ =$ =$ >$ o?$ <% 1=$ =$ =$ =$ =$ =$ ?& B' D( F* I+ K, M-O/R0T2V4Y5[6]7_9b:d;f=i>k?nApCrDuEwGyH|I~KLMOKK,  L-KOML~K|IyHwGuErDpCnAk?i>f=d;b:_9]7[6Y5V4T2R0O/M-K, I+ F* D( B' ?& =$ =$ =$ =$ =$ =$ <" /9$=$ =$ =$ =$ =$ =$ =$ ?& B' D( F* I+ K, M-O/R0T2V4Y5[6]7_9b:e;g=i>k@nBpCrDuEwGyH|I~KLMKB' C( LML~K|IyHwGuErDpCnBk@i>g=e;b:_9]7[6Y5V4T2R0O/M-K, I+ F* D( B' ?& =$ =$ =$ =$ =$ =$ =$ ; =$ 9=$ =$ =$ =$ =$ =$ =$ ?& B' D( F* I+ K, M-O/R0T2V4Y5[6]7_9b:d;f=i>k?nApCrDuEwGyH|I~KLMQ0 R0ML~K|IyHwGuErDpCnAk?i>f=d;b:_9]7[6Y5V4T2R0O/M-K, I+ F* D( B' ?& =$ =$ =$ =$ =$ =$ =$ <$ 7?" =$ =$ =$ =$ =$ =$ =$ =$ ?& B' D( F* I+ K, M-O/R0T2V4Y5[6]7`9b:d;f=i>k?mApBrDtEvGyH{I}KMpCqCM}K{IyHvGtErDpBmAk?i>f=d;b:`9]7[6Y5V4T2R0O/M-K, I+ F* D( B' ?& =$ =$ =$ =$ =$ =$ =$ >$ |B& =$ =$ =$ =$ =$ =$ =$ =$ =$ ?% A' C( F* H+ J, M-O/Q0T1V3X4Z5]7_9a:d;f=h>j?mAoBqCtDvFxG{H}JKU3V4K}J{HxGvFtDqCoBmAj?h>f=d;a:_9]7Z5X4V3T1Q0O/M-J, H+ F* C( A' ?% =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ H=$ =$ =$ =$ =$ =$ =$ =$ ?% A& D( F* H+ J, M-O/Q0T1V3X4Z5]6_8a:d;f=h>j?mAoBqCsDuFxGzH|JzI9" :# zI|JzHxGuFsDqCoBmAj?h>f=d;a:_8]6Z5X4V3T1Q0O/M-J, H+ F* D( A& ?% =$ =$ =$ =$ =$ =$ =$ =$ >$ F=$ =$ =$ =$ =$ =$ =$ =$ =$ =$ >% A& C' E) H+ J, L-N/Q0S1U3X4Z5\6_8a9c:e<h=j?lAnBpCsDuFwGyH{IwF++wF{IyHwGuFsDpCnBlAj?h=e<c:a9_8\6Z5X4U3S1Q0N/L-J, H+ E) C' A& >% =$ =$ =$ =$ =$ =$ =$ =$ =% =& ># =$ =$ =$ =$ =$ =$ =$ =$ =$ >% A& C' E) H* I+ L-N/Q0S1U3X4Y5\6^8`9c:e<g=i>l@nApBrCtEvFxGzIvF()vFzIxGvFtErCpBnAl@i>g=e<c:`9^8\6Y5X4U3S1Q0N/L-I+ H* E) C' A& >% =$ =$ =$ =$ =$ =$ =$ =$ =$ @$ >$ "=$ =$ =$ =$ =$ =$ =$ =$ =$ >% @& C' E) G* I+ K, M.P/R0T2W3X4[5]7_8b9d;f<h=j?m@nApBrDtEvFxHvF2 3 vFxHvFtErDpBnAm@j?h=f<d;b9_8]7[5X4W3T2R0P/M.K, I+ G* E) C' @& >% =$ =$ =$ =$ =$ =$ =$ =$ =$ ># !=% F=$ =$ =$ =$ =$ =$ =$ =$ =$ >% @& B' D) G* H+ K, M.O/R0T2V3X4Z5\7_8a9c;e<g=j?l@mAoBqDsEuEwGxHI, K, yHwGuEsEqDoBmAl@j?g=e<c;a9_8\7Z5X4V3T2R0O/M.K, H+ G* D) B' @& >% =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ D=$ a=$ =$ =$ =$ =$ =$ =$ =$ =$ =$ ?% B& D( F) H+ J, L.O/Q0S2V3W4Z5\7^8`9b;e<g=i>k?l@nApCrDtEvFyHc;  d;yHvFtErDpCnAl@k?i>g=e<b;`9^8\7Z5W4V3S2Q0O/L.J, H+ F) D( B& ?% =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ ^=$ s=$ =$ =$ =$ =$ =$ =$ =$ =$ =$ >% A& C( E) G* I+ K-N.P/R1T2V3X4Z6]7_8a:c;e<g=i>k?l@nBpCrCtEvFuE=$ >% uEvFtErCpCnBl@k?i>g=e<c;a:_8]7Z6X4V3T2R1P/N.K-I+ G* E) C( A& >% =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ p=$ }=$ =$ =$ =$ =$ =$ =$ =$ =$ =$ >$ @& B( E) F* I+ K-M.O/Q1T2U2X3Z5\6^7`9b:d;f=h>i?k?mAoBpCrDtEvFj@&(k@vFtErDpCoBmAk?i?h>f=d;b:`9^7\6Z5X3U2T2Q1O/M.K-I+ F* E) B( @& >$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ z=$ ~=$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ @% B' D( F) H* J, L-O.Q0S1U2W3Y5[6]7_9a:c:e<g=h>j?l@nAoBqCrDsEuFf=+,g=uFsErDqCoBnAl@j?h>g=e<c:a:_9]7[6Y5W3U2S1Q0O.L-J, H* F) D( B' @% =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ >$ |>$ w=$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ ?% A' C( E) G* I, L-N.P0R1T2V3X4Z5\6^8`9b:d<f<g=i>k@l@mAoBpCqDrDtEl@F* $  $G* m@tErDqDpCoBmAl@k@i>g=f<d<b:`9^8\6Z5X4V3T2R1P0N.L-I, G* E) C( A' ?% =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ u=$ h=$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ >$ @& B' D( F) H+ J, L-N/P0R1T1V3X4Z5\7^8`9b:d;e<g=i>j?k?mAnAoBpBrCsDtDi>X5N.I+ N.X5i>sDsDrCpBoBnAmAk?j?i>g=e<d;b:`9^8\7Z5X4V3T1R1P0N/L-J, H+ F) D( B' @& >$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ <$ f=% Q=$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ ?& A' C( E( G* I+ K,M.P/Q0S1U3W4Y4[6]7_8a9b:d;e<g=h>i?k@l@mAnApBpCqCrDtDtEsDtEtDrDqCpCpBnAmAl@k@i?h>g=e<d;b:a9_8]7[6Y4W4U3S1Q0P/M.K,I+ G* E( C( A' ?& =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ O=% 1=$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ >% @& B' D( F* H+ K, M.O/P/R0T2V3X4Z6\6]7_9a:b:c;e<f=g>i?j?k@l@mAnAnBoBoBoBoCoBoBoBnBnAmAl@k@j?i?g>f=e<c;b:a:_9]7\6Z6X4V3T2R0P/O/M.K, H+ F* D( B' @& >% =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ /<% =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ ?% @& C' E) G* I+ K,M-N.P/R1T2V3X4Z5[6]7_8`9a9c;d;e<g=h=i>j>k?l?l@m@m@m@mAm@m@m@l@l?k?j>i>h=g=e<d;c;a9`9_8]7[6Z5X4V3T2R1P/N.M-K,I+ G* E) C' @& ?% =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ ;" =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ >% @& B& D( F) H* J, L-M.O.Q0S1U2W3X4Z5\6]7^8_9a:c:c;e<f=g=h=i>i>j?j?k?k?k?k?k?j?j?i>i>h=g=f=e<c;c:a:_9^8]7\6Z5X4W3U2S1Q0O.M.L-J, H* F) D( B& @& >% =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ @$>$ b=$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ ?% A& C( E) G* I+ K, L-N.P0Q0S1U3W3X4Z6[6\7^8`9a:a:c;d<e<f<g=g=h>h>i>i>i>i>i>h>h>g=g=f<e<d<c;a:a:`9^8\7[6Z6X4W3U3S1Q0P0N.L-K, I+ G* E) C( A& ?% =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =% `=( =$ +=$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ ?% A' C' E( G* I+ J, L,N.O/Q0S1U2V3X4Y5Z5\6^7^8_8a9b:c:c:d;e;e<f<f<f<f<f<f<f<e<e;d;c:c:b:a9_8^8^7\6Z5Y5X4V3U2S1Q0O/N.L,J, I+ G* E( C' A' ?% =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ +=$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ >$ @& B' D( F) G* I+ J, L-N.P/R0S1U2V3W4Y4Z5[6]7^7_8`9`9a9b:b:c;c;c;d;d;d;c;c;c;b:b:a9`9`9_8^7]7[6Z5Y4W4V3U2S1R0P/N.L-J, I+ G* F) D( B' @& >$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ >% >% R=$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ ?% A& B' D) F) H* I+ K-M-N.P0R0S1U2V3W4X4Z5[6\6]7^8_8_8`9a9a9a:b:b:b:b:b:a:a9a9`9_8_8^8]7\6[6Z5X4W4V3U2S1R0P0N.M-K-I+ H* F) D) B' A& ?% =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =% Q<$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ >% ?% A& C( E) F* H* J, K-M-O/P/Q0S1T2U3V3X4Y5Y5[6\7\7]7^8^8^8_9_9_9_9_9_9_9^8^8^8]7\7\7[6Y5Y5X4V3U3T2S1Q0P/O/M-K-J, H* F* E) C( A& ?% >% =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ X=$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ ?% A' C' D( F) H* I+ K, M-N.O.Q0R0S1T1V2W3W3Y4Z5Z5[5\6\6\6]7]7]7]7]7]7]7\6\6\6[5Z5Z5Y4W3W3V2T1S1R0Q0O.N.M-K, I+ H* F) D( C' A' ?% =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ V9! >$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ >$ @& A' C' D( F* H* I+ K,L-M.O/P/Q0R0T2T2U2W3W4X4X4Y5Z5Z5Z6Z6[6\7k[6Z6Z6Z5Z5Y5X4X4W4W3U2T2T2R0Q0P/O/M.L-K,I+ H* F* D( C' A' @& >$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ >$ 8" <$ -=$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ ?% @& A' B' D) F) G* I+ J, K-M.N.O/P0Q1R1S1U2U3U3V3W4X4W4X4Y4Z4k;"Y5mX4X4W4X4W4V3U3U3U2S1R1Q1P0O/N.M.K-J, I+ G* F) D) B' A' @& ?% =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ ?% ,=!=$ Z=$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ >$ ?% @& B' D( E( G* H* I+ K, L-M-N.O/P/Q/R0S1S1T1U2U2U2V2W3X2Y5W3V2U2U2U2T1S1S1R0Q/P/O/N.M-L-K, I+ H* G* E( D( B' @& ?% >$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ Y:$?% =% }=$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ >$ ?% A& B' C( E) F) G* I+ J, K,L-M.N.O.P/P0Q0Q0R1R1S1S1T1%U2&S1S1R1R1Q0Q0P0P/O.N.M.L-K,J, I+ G* F) E) C( B' A& ?% >$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ >$ z;" >& =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ ?% A& B' D( E) F) G* H+ I+ J, L-L-M-N.O/O/P/P0Q0Q0Q12Q14Q0Q0P0P/O/O/N.M-L-L-J, I+ H+ G* F) E) D( B' A& ?% =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ <' =' =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ >% ?% @& B' C( D( E) F* G* H+ I, J, K,L-L-M.M.N.O/P08O/9N/N.M.M.L-L-K,J, I, H+ G* F* E) D( C( B' @& ?% >% =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ ?! <" =$ y=$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ >$ @% A& B& C' D( E( F) G* H* I* J+ J+ K, K, L,M-0M.1L-K, K, J+ J+ I* H* G* F) E( D( C' B& A& @% >$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ >$ x># =$ =# R=$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ >$ ?% ?% A& B' C' C( E) F) F) G* H* H+ I+ J+ K+ I, H+ H* G* F) F) E) C( C' B' A& ?% ?% >$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ Q>$ ?" >% (=% =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ >% ?& @& @& A' C( C( D( E) F) F+NM+ I)G* PF) E) D( C( C( A' @& @& ?& >% =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ <# '<# <$ =# O=$ ?&=$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ >$ >% ?% A& A& B' C( qD) E) C' rB' A& A& ?% >% >$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ ?'>% >$ N=% UE4iaX[L>H3A)>% ;";" <# <# <# <# =# <# <# <# =$ =$ =$ =$ ?% @% dA% $@% F% A& $?& e>% =$ =$ =$ =$ <# <# <# =# <# <# <# <# ;" ;">% A)I3[M?jaXVD4 {rji[KYG4R<'K5G/C+B*A)B+D-D-=$ =$ <$ w;$ 3=% A<%;% =% 5>$ y=$ =$ D-D-B+A)B*C+G/K5R<'ZG4i[K{sj uukwndsjapiamg`78$<$ A$ 8%6mf_piasjawnduku           ˆĈ 9;ۉ}}}m]^򊊊kDy{C87+ۈEE򉉉ڀ+ qEE툈pNꊊ退M ꁁlk쇇(߈恁hh円ހ&쀀}~솆.燇>~~~?傂,܀3~~~6݃+˅b# #c(b퀀րׂ` ||| ~~~"Ƅ~~~!;؄׃9I߀IP䅅ぁNH܄݁I>Ƀˀ@22k܃ۀh+脄)N胃灁LCׂڀCMԀ恁怀Ԁ~~~T}}} 7nn}}}6}}} |||  ??????????????(@ @=% =% =% :$=$ J=$ =$ J9( >$<$ B=$ =$ =$ <$ B>$8$>$ A=$ =$ =$ =$ =$ >$ A8$9=# A=$ >$ >$ >$ >$ >$ =$ =# A=?& >?% @& A& A& A& A& A& @& ?% >& =C( ;C( C( E) E) E) F) E) E) E) C( C( B( :F(F( % -.....->% Z5[6X4V3S1P/M.I+ 4K- 3M-P/S1V3Y5\6_8]8-.]8_8\6Y5V3S1O/L-K- 3I,4K-N/R0V3Y5\7_8b:f=A' B' f=b:_8\7Y5V3R0N/K-I,4G*3J, N.Q0U2Y4]6`9c;f=k?Q0  Q0k?f=c;`9]6Y4U2Q0N.J, G+2D) 1H+ L-P0S2W4[6_8c;f=i?nAa9a9nAi?f=c;_8[6W4S2P0L-H+ E) 1C( /E* I, N.R1V3Z5^8b:f<j?mAqCpB,,pBpCmAj?f<b:^8Z5V3R1N.I, E* B) /@% -B' F) K,O.T1X4\6`9d;h>l@pBtEyH?% ?% yHtEpBl@h>d;`9\6X4T1O.K,F) C' ?% -<$ ,?% C( G* L-Q/U2Y5^7b:f<k?oBsDwF|IU2  U2|IwFsDoBk?f<b:^7Y5U2Q/L-G* C( ?% =$ ,=$ -=$ @& D) I+ M.R0W3[6`9d<h>mAqDuFzH~Kl@  l@~KzHuFqDmAh>d<`9[6W3R0M.I+ D) @& =$ >$ -=% =$ =$ @& E) I+N.S1X4\7a9e<j>nAsDwF|ILL##LL|IwFsDnAj>e<a9\7X4S1N.I+E) @& =$ =$ ># <&=$ =$ =$ A& E) J,N/S1X4]7a9f<j?oBsExG}JMO2 2 OM}JxGsEoBj?f<a9]7X4S1N/J,E) A& =$ =$ =$ A( =# D=$ =$ =$ A& E) J,O/T1X4]7b:f=k?oBtEyH~KM[6  [6M~KyHtEoBk?f=b:]7X4T1O/J,E) A& =$ =$ =$ =% B:'=$ =$ =$ =$ A& E) J,O/T1X4]7a:f=k?oBtEyGKi?j?KyGtEoBk?f=a:]7X4T1O/J,E) A& =$ =$ =$ =$ 6<$ 6=$ =$ =$ =$ @& E) J+N/S1X4\7a9f<j?oBsExG|JI, J, |JxGsEoBj?f<a9\7X4S1N/J+E) @& =$ =$ =$ =$ <# 4=$ c=$ =$ =$ =$ @& E) I+ N.S1W4\7`9e<i>mArDvGwG;# <# wGvGrDmAi>e<`9\7W4S1N.I+ E) @& =$ =$ =$ =$ =$ b==$ =$ =$ =$ =$ ?% C( H* L-Q0V3Z6^8c;g=k?pBtDwFD( E( wGtDpBk?g=c;^8Z6V3Q0L-H* C( ?% =$ =$ =$ =$ =$ =& =$ =$ =$ =$ =$ >% B( G* K-P/T2X5]7a:e<i>mAqCvF\7  ]7wFqCmAi>e<a:]7X5T2P/K-G* B( >% =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ =$ A' F) J, N.S1V4Z6^9b;f=j?nAqCqCF*   G* qCqCnAj?f=b;^9Z6V4S1N.J, F) A' =$ =$ =$ =$ =$ =$ =$ =$ =% =$ =$ =$ =$ =$ =$ ?% D' H* L,Q/T2X4\7`9d;g=j?mApCpBV37! -8! V3pCpCmAj?g=d;`9\7X4T2Q/L,H* D' ?% =$ =$ =$ =$ =$ =$ =& =& =*=$ =$ =$ =$ =$ =$ >% B' F) J+ N.Q1U3Y5]7a9d;f=i?l@nBqCoBk@oBqCnAl@i?f=d;a9]7Y5U3Q1N.J+ F) B' >% =$ =$ =$ =$ =$ =$ = = =$ k=$ =$ =$ =$ =$ =$ @& D( H* L-O0S1W4Z6]8a9c;f=h>j?k@l@m@l@k@j?h>f=c;a9]8Z6W4S1O0L-H* D( @& =$ =$ =$ =$ =$ =$ =$ j>$ >=$ =$ =$ =$ =$ =$ >% A' E) I,L.P/T2W4Z5]7_9b:d;f<g=g=g=g=g=f<d;b:_9]7Z5W4T2P/L.I,E) A' >% =$ =$ =$ =$ =$ =$ =% =;$ =# =$ =$ =$ =$ =$ =$ ?% C' G* J, M-Q0S2V3Y5[7^8_9a:b;b;c;b;b;a:_9^8[7Y5V3S2Q0M-J, G* C' ?% =$ =$ =$ =$ =$ =$ =$ <% <$ X=$ =$ =$ =$ =$ =$ =$ @& C( F* J+ M-P/S1U2W4Y5[6]7]7^8^8^8]7]7[6Y5W4U2S1P/M-J+ F* C( @& =$ =$ =$ =$ =$ =$ =$ <% U;( =% =$ =$ =$ =$ =$ =$ =$ @& C( F) I+ L-O.Q/S1U2V3X4Y4Y5[7vY5Y4X4V3U2S1Q/O.L-I+ F) C( @& =$ =$ =$ =$ =$ =$ =$ =$ =) =$ /=$ =$ =$ =$ =$ =$ =$ >$ @& B' E) H+ J, M-O/Q0R1T2T2V2kS+V2lT2T2R1Q0O/M-J, H+ E) B' @& >$ =$ =$ =$ =$ =$ =$ =$ =$ -9 =$ C=$ =$ =$ =$ =$ =$ =$ =$ ?% B& D( G) I* K, L-M.O/Q0S/ P/ Q0O/M.L-K, I* G) D( B& ?% =$ =$ =$ =$ =$ =$ =$ =$ =# A8(<%># 5=$ =$ =# =$ =$ =$ =$ =$ >$ @& C( E) G* H+ J+ K- kL. O. K,lI+ H+ G* E) C( @& >$ =$ =$ =$ =$ =$ =# =$ =$ =$ 4=!<% =# A)>$ <# =# =$ =$ =$ =$ ?% @& B' E) G) ?O(J%F( ?E) B' @& ?% =$ =$ =$ =$ =# <# >$ A)=$ }=& jbZj`U_O?R>)E.@'@(B+=& =% ?% LB% @& ?& L=$ >% B+@(@'E.R>)_O?j`UjbZ}vrmXJ$ >$ >$ >$ =$ =$ a=" =$A& fB' C' C( D( C( C' B' A& b>& R F) dE) G* H+ I+I,I+H+ G* E) E( `;" M% I* bI+ K-M.N/O/O/O/N/M.K-I+ G* ^D) J* J, dL-O/Q0S2U2V3V3V3U2S2Q0O/M-J- _E) L*L-cM.Q0T2W3Y5\6\7]7\7\6Y5W3T2Q0M.K, ^H+ P% L-`N.R0V3Y5\68! !!!8" \6Y5V3R0O.K, \A& N' J- `M.R0V3[5^8c;1 1 c:^8[5V3R0N.J, ]D$@& H+]L-Q0V3[6_8c;h>F) F) h>c;_8[6V3Q0L-H+]B&7 E) [J, O/T2Z5_8d:h>n@\7  ]7n@h>d:_8Z5T2O/J, E) Z8! : A' ZG* L-R1W4]7c:h=l@qCpBpBqCl@h=c:]7W4R1L-G* B' Z6 6 >$ [C' H+ N.T2Z5`8e<j?pBuFyH3 3 yHuFpBj?e<`8Z5T2N.H+ B' >$ [9 =$ =$ [?% D( J, P/V3\6b:h>mAsEyH~KN/O/~KyHsEmAh>b:\6V3P/J, D( ?% <# Z;" =# B=$ >% D( K, P0W4]7c:i>oBuF{IMi>j>M{IuFoBi>c:]7W4P0K, D( >% =$ =$ @<# =$ =$ >% D( K,Q0W4]7d;j>pBvF|JLM.P/L|JvFpBj>d;]7W4Q0K,D( >% =$ =$ =$ =$ Z=$ =$ >% D( K,Q0W4]7d;j>pBvF~K^8  ^8~KvFpBj>d;]7W4Q0K,D( >% =$ =$ =$ X=$ =$ =$ =$ >% D( J, P/V3\6b:h=nAtE}J:" :# }JtEnAh=b:\6V3P/J, D( >% =$ =$ =$ ;" ;" =$ "=$ =$ =$ >% C' I+ O/U2Z5a9g=l@rCzH:" ;# zHrCl@g=a9Z5U2O/I+ C' >% =$ =$ =$ <$ !<$ !=% 0=$ =$ =$ =$ A' G* M.S2X5^8d;i>nAtDY4  Y5tDnAi>d;^8X5S2M.G* A' =$ =$ =$ =$ =$ .=$ .=% 1=$ =$ =$ =$ ?% E) K, Q0V3\6a9e<j?oBqCM." #O/qCoBj?e<a9\6V3Q0K, E) ?% =$ =$ =$ =$ =$ 0=$ 0=$ )=$ =$ =$ =$ >% B' H* N.S1W4]7a9f<j?mApBe<_8e=pBmAj?f<a9]7W4S1N.H* B' >% =$ =$ =$ =$ =$ (=$ (=# =$ =$ =$ =$ =$ @& E) J,O/U2Y5]7a:d;g=j?l@m@l@j?g=d;a:]7Y5U2O/J,E) @& =$ =$ =$ =$ =$ <$ <$ =$ s=$ =$ =$ =$ >% B' G* L-P/T2X4\7_8a:d;e<e<e<d;a:_8\7X4T2P/L-G* B' >% =$ =$ =$ =$ =$ r=$ /=$ =$ =$ =$ =$ ?% C( G+ K- O0S2W3Z5\7]8^8_9^8]8\7Z5W3S2O0K- G+ C( ?% =$ =$ =$ =$ =$ =$ .E' =% p=$ =$ =$ =$ =$ ?% C( G* K, N.Q0T1V3X4Y4Z6}X4X4V3T1Q0N.K, G* C( ?% =$ =$ =$ =$ =$ =$ mB># <$ =$ =$ =$ =$ =$ ?% B' F) I+L-N.P0R0U2b[1U2dR0P0N.L-I+F) B' ?% =$ =$ =$ =$ =$ =$ ;$ >% =$ =$ =$ =$ =$ =$ >$ A& C( F) I* K,M-bL&H3M-dK,I* F) C( A& >$ =$ =$ =$ =$ =$ =$ =# >$ ?& TH3D,@'=$ =$ >% ?% A& C' F) 9K+K+G) :D' A& ?% >% =$ =$ @'D,H3>% T=$ g^V~{zzt}qeqbRcSDZK
# 5>$ 5=$ 7=$ =$ =$ 7>% 2?% @% @% ?% >% 2E* ,F) G* H+ H+ G* F) E* ,I+ +J, M-P/Q0Q0P/M-J, I, +K- *N.Q0V2Y5Z5Z5Y5V2Q0N.L- )J, #N/S2Z5R0$$R0Z5S2N/J- #G+"M-S1Z5a:[6[6a:Z6S1M-G+"D' H+ P/X4`9g>l@0 1 l@g>`9X4P/H+ D' >& B' J, S1\7e<m@wGF* F* wGm@e<\7S1J, B' >& =$ =# C( L- V3_9h>qC|J\7  ]7|JqCh>_9V3L- C( ># >$ C!=$ v=$ D( M.W3`9j?sD}JZ6  Z6}JsDj?`9W3M.D( =$ =$ uC C =$ (=$ =$ C( L-V3_9i>tDrD**rDtDi>_9V3L-C( =$ =$ <# '<# '<# L=$ =$ B' K-U2^8g=qCg=h=qCg=^8U2K-B' =$ =$ =$ K=$ K>% f=$ =$ A& I+ S0[6d;lAoB:#  ;# oBlAd;[6S0I+ A& =$ =$ =$ d=$ d=$ _=$ =$ >% F) O.W3_8e<lAi>O/O/i>l@e<_8W3O.F) >% =$ =$ =$ ]=$ ]=$ @=$ =$ =$ A' I+ Q0Y5^8c:h=k?k?h=c:^8Y5Q0I+ A' =$ =$ =$ =$ ?=$ ?=$ =$ =$ =$ >$ C' K, R/W3\6_8a9a9_8\6W3R/K, C' >$ =$ =$ =$ >% >% =$ L=$ =$ =$ ?% D( J+O/R1U2X4X4U2R1O/J+D( ?% =$ =$ =$ <$ K@ =$ d=$ =$ =$ >$ B' G* J,M/P/N1M.J,G* B' >$ =$ =$ =$ =$ b:# N;)VVF5O:%D,A)A'D( aG* G* C( a@' A)D,O:%WG6N<)U{{z'ͪ}y]RG)[QF*}y|{z'|{{&̷xyyzzz|{{&{{{$ȵyyy{{{}}}$yyy|||.|||/ڶ{{{d666aaae`󻻻ڀKKܮ򀀀^qq੩A߯ނ?tttTڥڄTvvv<ퟟ틋;|||;``;|||???????(  =# F=# FH( BC( C( H( BS1>V/X4X4V/S1>Q19[3[2  [2[3Q+ 7F& :O.c8yG  yGc8O.B' :D( &B' Q/k;O$ % Ok;Q/B' =# H) 6D( A& P0j@tDtFj@P0A& =$ G* C( ?% K,a7rC=' =$ qBa7K,?% =# F( E) {=$ C' Q0a7h>h>a7Q0C$ =$ =$ sH* F" ?# 47I(U3U3I(73@#C" L* h\N*vmshZE/TF/TohZxmi\P)󴷺軾󡤩綷7;ЈPPҽй͝ {攔敕{? ?qtpass-1.1.0/artwork/icon.png000077500000000000000000001365751265137067200162100ustar00rootroot00000000000000PNG  IHDRxgAMA asRGB cHRMz&u0`:pQ<bKGD pHYs  IDATxw$un" $AbslOdˏ,["E`g“DeKO%KTHQ"A],6'yL>U]=̝NwsTh@QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQA]EQǞ={Z8aI"f"*KD `>Q* 6EQ*2|ͅJ2 @ueDt13IDh `=IczcJ U,8 "qDD'b< `]`qR)|~י(٨(č7143o 8~]XwAMOp1K) '9f/<,q|Z[~׭(ITP>s 7l"k mD0 j=B9&yxQOx']PEQTPX,h"7ID0y/2J)^ og Tsڵk (#^X\\{HT4Y\ A_߱7:γ '%!oy.p7pCg (bxd_"3aK>d-^ ko6YB{y|1W/ +*JP@Yڵk"of_p q˗~mg m7yy8t%@X!1?^"͉{U*ʪX,n_觘}'Cy-!F浘v< $&voYR 7]+%f}],S(+*ʪb׮]SB*f5f~I~.2 )]g'C> u ]e2bQ *UUݻ7q(|/? y$tU*ag599yٞV0(CݻZ1!XcYB?k@ B 0DA77vVHa2Ktllv~vXY fk(޽ kH?;Lȸ'aS @KT (.TVQFniKZY `g*H|d@)mt@ "c׮]] ΓPX,wH_P@Ph|e[m=~ CdK `k}z޽(CouUǍ7jDM0f}W?tW)i|f~Ξ}}?*Q̟'Z,SvHnj;>p@s|=[%vjME8TXyPCPP,8I ӯa7YҐmꗆ ;L(a;DnC{24 h /f?4 2',Ql{=ܣJ2 ۭ<7|EJ. m`{쿝?2oc)NnZ5?t믱 qZW0bx(jPnjnE]5րFv>@_?y._~4 {0+^7\/{GWR%R㕑o|-36z,+:.:$$&IiD(~nxjE+BQ2P@n +p]MݚۢRf+~FABsM7]qc̿o^.[Is6Yv}0ۦm@.åLiY.ww}'z~ZR_˜ӞknYz}5ϥc;}8߼iS;^y,fO_YݻwV ݻw־jS_ڿ>yۼ$ ^/fa^+ \{ݻwg(bo%@9z![<J3l.Ct1,ȶnʀ0^ޓw+`Wy&:fL$k}p޽m7TPVni&BD?`.Η+_~.eTzA^k*O >R$|@PA ϭ늘DTXC((7|xZ)"U>Zk{`KJY{j k(@roIcכ֤;u'G"&f>tu}u޽qlj*JN]et_e*ADpww1 ۄv5>kB`B5~C'̜%7M?C@7/ J[h55;u "]0E D-ʊmmop7 n~ dn5p@!+)W{ τ@Ӡb}37ܹK{}(bp346557MR=!\k5^Xzq~;l;w~n޽Ǻ*UsM7mf"߷/d_Az'M@ӯ݉Y ?nRL[:ֽ0s·ݻدB(*JO)?&}|~%<_ַYL޿!ɂ+1P vep]n\FD~{IJQ@{j>`]=ןe>Y¹S#py~)n$nm(Dt%}}{{* ]R |M nطR;e ,Θ|֚oH[L7sv쥻%=l\cEc_9;Aʇkd3T*|P b M0>o2ow@ۯ[[ğjjp 3 Y:eYgo#u}{s=:@(]oV6Hf~>҇z%&q%xB77 ڐg?OX3]>@ k[J+ѷO o_#kyۿۿ|F(=Ap-HD P t?ɿ¿YHƱk*<]5 mM!=`7 :]ٸ3>%1ҝ`eŁZR,&&77ܲf& vk̿;Y5e^!).l<3Ň2뿛u]g=O^ 5v=`7B󾒹[ @0ϲLt gKfp E%1jKҢof f߹-NJ`]۹&{[yHCJ`o#90@7YUzY48@`cf(Z`eԄ>%8gFh&i":AWp DZl7i֗L!駟Cӭ!ƯQԆ]Q,핲ؽ{keX\;v*%Sڙ21>+Dtg$Es]]سg-//o(a'wx#3oAMH9M:6垒[І;q\!b~bnWETPݻ8"* /ś]K _p >̟!Q$_~OX,VyjK=vWu̼dKnE >S}Jp3xRoy*J(iH&nZ=ᯝ%~YicUEOp }c+)/+Gn٨;Z&'N-k3ޱ}G-Jx;8lemb-FO!Mߍ}C[,{UM74]T^CD?^W^k@֘7IiHsv&f^ގgؿ?l2>J[޽{7+`5@s =D 7;/O>yJq|=y^&XiPڂ.g` AIOKpp'}r׮]>47p6y]v5};3DIpؼ'T[ͫ1qe8澱wBy}A78 jPؽ{:"=9@"*KX,>c㡇ٝ;w~ѥڭuҒ7[hE6GI;wǽ{:setP ]Nh2W/?g_!n%w2f+3/+o=RU%g4ڥ߷?:)8ๆ<屓g? .dQP޽rfo,D'I_,gRX+?~޻w;w<ڦTM^2 \qn`~W}G-f~;7n/fٺn YԄ(5^lePP7&fY=ƹ/p d׮]g1nl5:/J%`m1ڵ~eQ@qR(.#+LCz2 Ⱥ4z(۷UXT++qR?D_nwz!,D=+/sb87x O bnwn(:( 7?~/˧PLZ֗3oט~ؿk Kĵ^wC-վ(,3REްa~(lݺ(Cf %`ŇFqSZ=DlTP\0sM-CͰ~'1/"}{n:$\fSԿSNDc]7O$p˻oI7=Zhfb{("(6aEB]a!k,5kڵkB*GX66Byƺmp: 5` n+ѻhC^:7˥\]v=tnk0p[%AޏN5__=_(MgQ_ r6GzxYu 3YO4eo<ynx;FDk}Cd3K'b!K3'Pbq7@ v:MDUYBn*qq#QFU&DhҒn.둩BD#]Joa應cQڢ70C 3_`73fw2^&C2l= Onj_-bJD cB`sbA'g;] [pf Ȯʼi(>k׮a׮]/GPVB?r8o)93_x7ow+* T*tZgg}r }ޥF^"L^YYZn]y:UWVJ{eP@iI4W VY㭡cjlO_ڵ~Wŗ|eJw+ B y|sp$.w+* 3 yo;=+ɭ#u?nߌo%k7;3WU,//_Jg ^ ?\^^FSQ1jB\tjw)|Չ'A|6YvwD gedbQQ>0f nBDocrK;mB 87p 3} L,Nf7M.b__GbXp?nZ `w)k/ .3{e0P`) MHڝYB\jhC]`P([p7[s`XF'5y,O{a0u]`p/z\K}qЍwd] TP6108hVP3_%•"{$j7'vy\9bP(lw+*#̍7HD."J v5>!sb7C! }nx)4(p׿ 1,w/\7hg(jbTY50q1Ɓn/K] kUPN3I /}ڝأwqж_>Nb!':~pw+ 3GDG-.Ǩ@~4Qlh;soԧa|ub!ϖ߭q]пVUF":e ^ok ne4"xX\g}+K8*`-PQ`aˈhg<1dRRtϚ}:]`CDQ!KQ ژeo00EfwO߅*zg[܍r=ID'[ʠ̧i-3׭ }?4}eQ`a3L5EYҐ;ԻTVB&,ŵ0 U2D0ڬgbùewar}`ߕ 6<80@}9s띌?e4Q`! y;t-r48>TV|qYKu<;s?e r$ iKj22^p=kݞ @Hc݇?ao@Y0,,,leC&fA;L53xvlll[h?gyL?W9˓v@[ EF6i^)lFCOʪc׮]}{1tƞNTQy=jStc_TVg&d++l'tc"ZeQ`tY[k^eJ4" J^؎=&CW>t+UFi3qo5t[`^]U^yf5+^@ 2Ykn rhG`Da6ݤRePKEG9.>R[@Qg-K7]wA E\FQKP(#. zc_ie8P`t˿H+ՋSԬG^zӟ.k8(DY;qj5mAD(a z3^Y8]N;ޏ? jg'c p, 3gGQBH(Ob?_t_M]`YZsj5ޕ(joރaGEQޱQ PQEQFUEQeQ@QEQFUEQeQ@QEQFUEQeQ@QEQFUEQeQ@QEQFUEQeQ@QEQFUEQeQ@QEQFUEQeQ@QEQFUEQeQ@QEQFUEQeQ@QEQFUEQeQ@QEQFUEQeQ@QEQFUEQeQ@QEQFUEQeQ@QEQFUEQeQ@QEQFUEQeQ@QEQFUEQeQ@QEQFUCdg(L=*X >3̨18F3bf85-.a~a sX*P.Q*WP*PX!B!""cL0>Vxc8E"ml6hQ{nA13ʕe,gTZeT1q(X La|bSX;3k13=uk`LL#"B(B! U5vX[2N.8x=#NĩY/.j1qMp7'UvE^x3ӓX;=k&aLMzW,U +c#^G~- N-`vas%/ք9B f<5i FBB)lڸglހ3nY[7-~ LO`bbj uRV ( Z/eqljS8z4^=r>Wñk="6J05K,q0GSݸbOp?;}~E6oZsm6쭛pƦشa7(jZTP8FSx11e$L`Xcr^>x FD֯[a8kFVXvZ P@i++*8zb^<^:1eT*Ĥr@? ,p8>k>DŽWvuNwrD'`+LY4y:=/f035%nÖMk11V@AJ( Qmaȩ;:g^smŽygnƖ k03=BEDr_=WˇO'00g0BBp?ʠL_~Յ'_vwO `~;v^l13Jex0!LOmmpq*FI h< Kx {8%1"Gx-?@fqǗJs'y|/I8^r0]E`Bm!"/-a4ܲ;= k&VN(1T³/žJ %vJby @op@?Ƅ/&Kw>^{joߥ^sVW|#6(z@&_Æi\zܭX35Y&У1Uz֍k{z~E05^kR"q}]Cx Qt9 y; z[LLE}G }af]&eQ`DX];el/ |rJh9ꬫ.k z?Ʒx#j` uyN|'?xt b\p-7Nfw]`Hq-S2?٧QK{uSDt3~?" ;"YIqğ~J=*V)뷿k&3 |3`O ~|*U)Uz/3O|Z- q̗O|tHWoå@A3&<~H*V5[ߡf?E d^BQ0}XkaYs{Fq# ||۶XA;U*D1(t*rpxfA9§|kd3@?wXaZ`7L<uu?}~H.nfC \M̿;ak>ڐWS0^*2b'`+N=Jklx1]g؄FyqUcg1}Ux$Ѓs]1W 13f 9~ip`{Y=偐C0_bO~j$ӵGoUNRM-'U92p0J0Lmv .Gsi(g9>9å܏)~q4׽[ - 2ߊZ0/D!`1( @wT_,=y]2Ĩ0dl'ЏA{u<:1ߎ/i{ܟU*>̼F(~e3͉}^z@R1~;'$6Dy;ǩJ }?5.``?AJ饅̴ ; zw:g;m;+sdyNzup8Ǯ{}N#YC>Ck}Vqm/6f~1}g^[C۾[ z/@݀>v[   8-2w }~}G]% 3ۯ`75;l{{vOPҩzb IJf^@R]}~t'w-Dѭ iI;e 8ob=@-?Q:⪴bF`6^Be,z7npF덞^;!=\T>~z*wό_񿅸=,~#T鰲 ZeoXW(}G>=Г]Qi|j+Kiew^p]7~ZG@qo>~apPQ 1s;1 HQ&vq~8OFsȚ7@$JF4QQ[ DTKgo߿|p@*kox|AIZ`+טy'Bx 3Ҡx@|Ņ~HI v5F,F~&'^QS&d[8$&o]C?#_e]^L~ o"I"| uFSh$ou'-o'+ e+1'^8)ITfv\:0{7BOR4Ff:vZNNKCm{tx0=k L\oG3'τQDʮ$Px&DE 4cE[.|t" v5|Fz7}~3$jS=f~oO.) ~UxyK+z}%?)w떭ٖU@xV y'h⏼5RvLn˥/0 gf_f?{03 *og6%@o;.a[K4Fx=|žo33 `C[1 sE_3=?N:J@`;or#/wU7#:HfvaM)n:mcZ}GYIבGZ qMt@ɳ/{dS+y63~ urѺnqhC6pyC1D`瑸_H{X Y&3\9mzW^]*}bk. \wߌl^O4'iy#=B=uݒE "$P:_Y~uel|e}Dؾ:RN]mi* Ł#=alYW"7>/uN@_Q];P 8a zq=^ZChlmAdw ,HsU-L>MW60 SlgI $+B8qB z**6;&7 :_¬ ;1VcrK)AL/S'yRxz)o]gK='Ot̜_y'ۯnxO1eK(kơ, f2JRMKwӪf 5/~ v5[G<+i5i{_W6϶ܨ8c s'.KY<cJ(R/՛^;_?_[?YyɮnCwƕ?X20@7L!kWVvQN.%t>Wόl }yUMRLl/.@*+ڋ5 AyS.}XٴHÖ3iX쬞k3g/ 7;CXXͅjO<;7u. *KgH*Dzˬ_}ie""P4-wM_H*o`3R؋D`wswyc})[^Rc) o+ QfZh#iZ7l9lwVn[ s^W2W[w@xSp9| GHHi6QKYt)Baa5QB\w 'SjrՈ*+Ė{ﲬ<6#NZFBCa+eO/kۦToV\1z|hp@gM/ĩN܆+~b`Q屯iq*`Zle<j|<[ 1hHF܆R(\hjˆL 3*cf.y[A.wYVdyd~^]p_pm'ozmT i!fXGu%7\ӯWh|IT=]eNۼf(F2Jn)b|B7 Z T!3ucT7}Z ۭ)/5.C+t̷-pL&* :7=t\&MW3 +._൉u Gy qkIqsGsmbN8¬vFwZz5'#: _ "]=O<8e[Hx{HۇS0-s yZ=_ߝŌ˵4N95!XWC0{Q/.kCk\=c\J㵊f+ #lĄ~au;]Վ*=PBfojlmS/ wI_Xk7Ee7o 0vO.1Xv* WEwoU?r ED@JSʻ52k0 d >0A4S(yoi؂nWv]u !Cy\݌J{]ՎۯmŎBO:!M/7dgq3w\=~0?_i/d*=b7#ozhǽ6^i3L5| SB[GBvܻ%-Գ(}茗>D9G5]8)~f @Y- []Goy?OH#K' t6{/qa/KE`‹yc <)޺ djAJԥ ?O'Ҵo2-3oK q(5+ sX3½/嫗".~g13]LXBhSu% [ 'j,&D#k[ dKiג.4͈4C'r9Yi@DX79o: FuJו*y2 Oz->kh+$RڴoM?kG8zw4'.}ʪEb},+G#8 J{TbxI~RP ';?GB925&') w zÛ#?X_ _& H'Y <u@9yNu,O$ᾙiͪuJD?G*ߪgxW Uĺ_¨ۂў$$EalVq~`1q;7 Q+[[i73}UG͐W8Q?{;23r=\sJJRKT2=3,}M~t8;K.fs P M~,+K't[#N/H80cJY4O AeJNsl`=@?U&DD-sc*m)P0E+9d>'A3P\&Q 5-mq?4sU#veĖɉ7Q  vQl( %˰&c-h:4B\Wz<^ˉo_?86VA߂yﻃr؈ ÍGܬ#nGc# JHy1# ˍ "P l%q̓82[ 4ސzY]㠲Z ZU2i )eD_Jv׭|'Iyj\6af GæV~wr%V_E @q!ow-:IXRn-0{P A7 ב,Zi g¬FVhu5ۯB<r?|/XCB__,28Й=a929ys2-)Ȗseù/,'ÈisM\{vt`PmևꝘԮO 8,Ÿ +ofj; /L3|aCyA;\u#~Cf4Z!T\ZZA(0ܻ9H&3;O69e#4޵$6HSC-'u@>N dx iZڢ,[{USPv7?OŅp]ʂw[tW ϛ8\##)fx1P6g_}A 2.|{wxG˲"8llLe!~*iq͵@܃?j`  r !% +}7q$%MP(u/\vFediPQGwR;|oS: cQae=ގˁLWh7[1JGיǟ%< Чߵ5j,md$N\O^֗HY&&Q"rzDx 2A;Dcw`zDB?5>} z 3u_E1,'IocE2lG-IA1,G~t+t{MO^=Tet Yxy9:Ψsg/"b,k@’;e; #s@9R= Ī.'*|Wk09 ԾYO.scs4^07]$k3SI;tz)g ujב7˖Ofxx$+~6ľ2&td}u. 8%I;xg,} ƪW*.ȰC9a~=l`[1"se3oX 69nCNA.WCNڂSg!d =l4&x{%Ͻ`*+a2i 0 ei("t8QN2&<;bF:">w ÈZr0s>%,9ܓ7%e-.G2|-_2 {'YDtk!g0._/([Gܬnix~NѬ b<3T4ӣ LPoENw(Ư]]\~dQ ߅-5;͖M~2y^򒑧l$@~))[JS_Ʉ;P`"rt䅥~ ]a=KPfg_t찍?׽g㱂uL[;u-*C.SWI#+N`-rvIIץW}U2{&xlT`2 $gGq-}38qSd7eKXOr7 O=%*/0NLF'3Z8bvK+mqϬ]'DE_r*e^u! .Vg'U5q('_`ՃtBݥSq`ۦ.=BP peK pN7L2}mܐzސ%w.3Ufr6ӒҳQ2&;>(OX] S+&>yC Xn*]q!đ}-Vx\¿.0  ~XOಢ{݃n1gpz,VI2OAI{Y#o6_8;{luλ9Q\Kq|=>i+xB[1HZL*$:rדͪUE ~S 1 `%W`ս!intH '`d5:Ƹž=Ίi7%mđnmzz0)5Nak_vC3^o~ZהR$|;/u?i7$Mm-<#v'K7'}k٧yotWwAU0x rt1"/.pԎW.4^Z37N5DPY+xvUM gwocOo߳d^%+w1߹VQps6xP@`fz.KwI6p#g!Sᒍl¼zhj $gwa?q2ea#4;hvN`]kC60fxu(߃0}ow 5Pf Z,fUIIiW-!\wWҊɋ_ ((&ޞ{LzYK26budX\q):Xe%EsDR6)g#_G0(©턲_9e:ީ%}z]AE b 5. ]ms6#%qM7nK, (m*#rđ%Q8K)!tL]gZ7)Ha2@VJȊ@@}Yu,Mt>]zlS<뺤 W;|rnEt ~;؍A{udk L?OVR@6+ =LQ*}<~Fr4^j/׉GH/ Z_ȗHHLYIw͑DY @[VtBWˁFR<_ܛe1&\^3ua, "jH ,A$N?>%\<=|gOHg:{_bLr4fkd~(ULz#@0Se0w.'|ro,u}H_ Ŷm^eDL VSr3?$wI##짒0ϡ`a~Ի ozO4еwq{ryQL`X ^ [p{&)LOnpރ4~pOd o=A:ُzO_en )/H QB=ϓ5Gfԭ]O=[ȧ2[~B$VϿxVD9UԲ>5З!9 @a T7ҋ 5{2hݛzpXF,%qS+e<>KBVvd8(հ )4Y9U^wo>Tk bz)•g߂Tp,3aE'w#^:iK8q(*1ɵ֢0zE-3|L Tw {'@scDըrM:9*/Ӻ}>K*|XI>Y|Ԏ~f Ho\. @8h7=Gs5aZ J)%=w]ZZHJ=SpބZV*Q92*< ./#_TS&@(L؆0Y $0'%g xÒ%h}|D?Cp%G`@mSi`SFҦbaQɇDžT' ƥoZ,Th@Q`>!&>oJ$>@2{B/ur޻ܻO ?ZZ@u0@sfk|ى%T+KP=cρ1DS0"LnuPXSf1Rgm FDy8JMiힲ|\PaRҥ, @6>lq'BܟMi@-߹>4$ t02A˓oNe%y4Z<!0HN(.͡|E,ُ%tǰ8 K| /`|&"mfFR =5 PfX @C:\6'f2d]V[+" HQ(_@CDXB|fm8iDOiYQk]|’5Tw:S=~G{:m(}/?V./bS(=aܷ`|h.Bs1vm\Ҙc`=Oc?dQf&1\rH^Bh:zB-KK 02҂t4k0ޢ @+CKHo?+i鶅?0IL #1=w%TUv7{+72{/ JG!.-pґgQ9*&ynk71$`"Zh)VM|<f oœĬ9`gF'j|* Ծ5ܸ /V' 2åRr(VRu . ~Q: _zoĶh M~6J̤7I!oɳꇔNk]1CH4BǶ3|*" e}idlڴEJ#V㔬tIqr\JZtO^ȭ D/YK X|_ңC}곘?@4u1ny !hZue*H5yK l#!lz(%m636&yXկ;@hy%HDZq,4d+@ac'N7<*DHx?#Yܖ'O,< 羈g"^::nQZ1'UN%Ўn~A0r,Us'xzxԜH+T>[>:y)-$zWpc5 ge@0V|%Aj-aT]8+_km3U,8枾i紲$?uNُqjc+;l6ə^@GȻcU͐ 3ԻDL!7%cwz{P1wg4 Tkfכ IuOyv8ivzT{lՙg+cr.0(pj=E:T Zw9+|`# 8WZ)Hԓ{H@R$kX7MzCizthVI=TLjq#a4܌_A?Ns<ҕ{:%!d$)T2LsO8Y5#ۮDX;|_P; @RK_EeМ03Q.mv+'CAfrwC2LERz 'oO<ݳޟYA,smCDX,Th0Lj0"t?KùTP‘N_F4U1b>TN2{A5RFIV;v}\ q=ӣDKiQYPqCK/Px.GG0 e:CS)dx j.´Qt/RqI$^YJp#1PY8Oba'QY8i\~g'd l!QyFsՠ=Ulq]%, v+*uN$%Y!g p;,-"2ڎN8[Qp1Rb" k՝?P8e^wNQ^ei3vfzx-8B "0bԁIV=԰K&FWY^䘽[Z+r5mx9ʟHH,Uw\-ay7 3=Z74O+'1l,ܭM+D}Jp(&$,+ uV9/wC6 0X 1tߥ10g ;y67䫥tMs 6G+o&1TNYY:\)3I}nާelz`w1U W]7mBn7ByrF) _hwQ g gW-JGE2D2I'}å3sA@;Aro+^ED. r]nI?qq] ]F92:YNէL0Mӭ <lI-?L,9$ETN-fOD\YLՋ`36aZ=;p)%{/=p 6/@Fbs.12LKE0Y?z"3;0r݄QK9wu/FuhZ+Kh $Ñ^Ƴ*ܳ)v=r9l=Balt_6x ~C&T9($|@)=O#zBaq mŋs)#KQ"T揍4Wff4E sCxyvڢV]ADA`wt ؎zMiHu, Ji!Oช)pCaǂ#G /b0>Q{bwQ&^w1 DqD=7Naug#yS֔J?]2yLBNΧQ7#l3 WJÓ4.חZudoK9s2zg#5\i N aWvurA@gy]AE b~8[6;n&WϾJD,9L~3eˣko/ςK7ORH 1+ogx ]5 /Iiw^&]AE5J,3PW jkcY& 2To6yL|Cŀww3|G,[^k@ܳV9Q@0`-,o Ns0gAzHgO2u&{!ХZd-#<)\8l ?/.s}>KݢdvVd{#3X@,x߅dT`<dwS_Xs3cv0Fj_Аyqd_ H*Q亓_t{2IgIKq=|fhC!_atf`j 2Ȩ 0} A>#9ԜvXj;a۱ 6 D:hh;1oXsnZ r30=y0}rsAA/j"/esb[ctD 9CDN'  t;5uEl[a@ʘc\:F֦լ-]v 4_v Tp!>~#E's #tԻ͸e1hluu SM6\%1ۘ@Цd:Qۚf':(>r :8P Ζmcvԟ*< e| Ѵ*:d5L^aHaJn}-ܯaѽ/?PtT0 У7XjË͕c&Ce'F/1 E AX:X:0w@%e{Сu.Vw!U|/~ ۉs혅<3M†hj֝fUiG[ΰ]}V9兀]a@/~ƒtmY/NVG#_t[ZVqe]:q3PހQ0g"e]5aPLGr޼|Y}C3bi9 ܧ{m @&A|~mic!R$ғa5[@N9DpJ[X5Sp~續4~bXP }j>k  'ʛW;ef.Y5Oc帟CBagk+)} T~"‘ۥ~Yo0בwٳ 0`l5ms:I37`wX^h^>5q"U 1L}]CaQri^Ӽ &1yekH&ϺP%uI/=n!|gs=?9K ̷V9+bT "LuןaZ31u@Q%%κ G@9Cs.0 @_ wYjtZcÄ׵]dFF kt}FQو0 =Cy k6B6E2 H;ǎ}w%@kA޷>/Æ*LNLc`^;n0Bx!1L:m8u4`o<ghnԣ:t]Q rpyQ _{ fv\v ̎wc|Ҧ__xl;z3VTbPVܽ k.jU|)1*L*$}G sp~߃.Ȱ @_~w a/$&0\3hb3ۯԹo (yowƧ6& p@]P  q ?f?0xeQ6^fDu6B%ރhz]k})>~de@} :Qٌo.Lh S(ԁW' \b 2&ZaU 0d 0u%` _1JEcJ{÷fs*']wAU:`4?ƪF@?Z>#ܲl13 ߌuڕ@ɵXw{oFaz8QaaכyE{[Jhdu@en .0xy|`\kz':Qæ=)qL5d'#(i$k%U.{T'hKKOk37K,37"@2Mtu/a*^#$&6u[Q?xyPMaÛ]\a !mGK #^/iWzY&("tE]%t@I&@%o;qMKal@G=*`lٵɉ$<4BG `~d5 @ RW-\2;O䀜/}pS..j+Wn%^~VsDr1%z9+7@fNw مgLyﴮWP9jZJpsub!gm\{/ߟWt7qZzvPg*]dO7x^@P]2ZU%[z޼i.+F6O O? @p;]OoZ~Vr9vyʥ|$Dy@TyVԯGחI*b"%jU5@+AO^_&Kb2Ch1=^GeXƬk 5= mC+TQT(|Y5oTseek@˫umyU7yLy'&ȓͩ:sr7õ4ʧ^ʩ検j׏.M7'on`\S`0TeOi.#*=bp=0(mF6)79SͶ3 aQ>2x+(x9)&%y'Z4 ߿WQ*c6']cFB<J3WP=zJe掄>Gy~?l&0P4F<G *=sT?oki%ΞvΊ"}#g2Qސs%'iop: s*j48VѸ4:Hip jiA;d[Ba O>xAuHS֑oh,c'5*=fa߃-z;6;YAۏn/F! AH!38mBeBu<*sbj^DHJE 6]QCd> 9|8Oޑ tיJe݅00c5B^c,x4'0hT珣t&sZuj ¥KF=#1g("y˹{H\>$Lq{dZq rſe|/v0)܅\i5y1ֶ?-<).x o0).Bsҵ?D$߽ǥv^N;L+ԯ-vn3'a MUV>_OJgqv<_\ 䎒l;Ɏ$qbXq \Q:4Cg8),ʘ7NgCɼvԄ9Vp 6'ԙ^"ĕ^͟Zm2O'4C\YF|7d>.'igd\YzkűM Wj"ab*;0m=_!yʩ8;F6ɯ՘`Cܱ @{EKwqۻaעMpfT4v>lʼnZa F%Ϻ%K!OT@Bog^mݺmKqX @Y8E+%曑96.;9iQv٥^䜙]#>e67#vRmQ,Hi]iye#G9SG;: 1nA>78Y8 s}8=b NK@^x2 `k3):K8`HTZ0Zva˹>V0 8*ʧ^@m$X5#yp+;tNRZg.n=bܮwN:ߐNS@Gqj#*s[W?Fဣhu,ioɕL̥ޢ[*I $R" 1'_ ǐodR7cX(lL; v>۝X~C%Mcs=fCbQMty5i;iC2g6rz+}qW8lg+^CuDz f3s.C,㴼]TʪۆWCtab܈jQ`{%܊~ك 970*tƞk'=OޢrYϙCg82{81~P2LMÿ%=&|cٟtB<ϐ̙!:ؙw3YIwQb#n%oϫ@Q`=1b܂最6sW⎐#ɼFa3 \c90W[ao̴dCCgyin:q+wZe_N5 xV\ya՞@ 2wETwD0X׷qa畻bc5n+8Y/ *y5:@`qBHu;(o 稦 ,@%t8=܃:?0=eb i4t9vFfifP=(5eLM$ K/Fx Bxi_l]g= UW?Xa4Rt8/$>1;@@-5|nMV*JQ5=% */l;[52yLtXgѷ,L:7}Ž9)R_>9'6tBuiRKaAjS,T>wʗfUT؀*Wć^gyha6[ =;LR3yʑ eY B !y5y%arM%AD,@4Kt "E:un=Wn 0ix:T匼8(TG|3s|r^3 >] n tm]!ڜ&dl7^ n=c2?d>\-p|(+.Wˎp<WXJsɧ;R6mC  FP©|:f@j,?d0s2XajgM´nN˗TFXqdR5N.pd'8DKXzQTB 2o46y9"Bq{X%WGP;GcȀB|li%ۮRZ(wa!}):?`X"sc\'.zV^nT@SHvfq C':w\6--]%XDBӳg$ہ~dfoe­ }߰ s Wbf0xY{Q?s=E1fZoC (bXoe{f, '1lTN;:Bta$-{CƘ%]=gG|I#Rr tf$:„8ܵAbTR}hѭH,iqd'}sNe?v4B~2,[aij@ WQ=U~L!֌w%:cpӀw20k9[|?!rhM}1~$1V{?!wC{Yv\rV#5A:Dk1bPc-5>?AkVHIfig/aDbZӊc  9_z778ڝv{wngV3\XH_`d وQ9=* ̰$|eO 8bg+y(?~j1kk"'^QozJP`0E;! C#!NG26##pzy'LO<CZo/͢xJv8f-!J<#[=As/3u^> wKX/߯&t`P>bub"%0 `]F\sy[:I`i?hI`\i˺.%2˚ꘒX8 sHtY,p Dp֝\&V@ʒ3Üϒ1-=zN.{!uVH9N߯c "ݷ88 dM0vampH$KP;mɺ.GUPC5<{h6JL\A5 N2,)ɌsǐOzb1E0K}b#FN1oEln}_ʘw;§MMc㌁T5/c!y֫2JהRFu$;0:{qVO!f5IbH˞V8ڥvQ<WwRt`R>Bub% Mkr;wČv,~{E@2\˱˞s("URqʟcǫUc". wK1o 1B60< ӿ'Y_R. e)_[!`^0{UZRwc$Bp=eS˖ŅRIsp<f W/T(uSu K .ǸP ~TIH/q{air@1-@w=y.[{pD< ;KgSC=G8:RRQ0bG T玭`չ a]?9{K: ܊B* h޿3 IN(99GUV9.q\5Kᆻk iѵNkӽtZip*w8,p"_,\fT,+dˊǔY\&Dqyv):ϳnjg?*6'G,חI~E7Ɵ1_o.vLƣp!M1I|3' '9 i,8&0|D^E-g_\1\?;l%ԳÉ]䯉#Nzg!0"=u8 vzx*3a 5ÈPi,Li+xinYZs^SVAg7t#}80'U9l萃' GR?{5sO߻qnؠc8t<3s3t\4((fgls;`QQaTN!^^=p|ӹh9֏x俴?]/HՁ?¨`{z"wÀNK"pxe, H7.lzz>pn~X36WJj2{ᄼ xs=ϣrCQ[n2M8zJQp-4:> -; G-#ԗ0܃sz.p<CkwYhfvvfFY 'շP]8Mzz #ųz⸿'3JLwt=5+juGLl1v0cR9J8ͮk$-}I4ҡ}(:|2f7fgd*q>g-a,k2nb'c.Afiv;p'P@Aȁ "W4ڟvF;vh&Ց=.{m>e Gkg?9ܑ8sAu>Mbrv?57BLJϞa%Iaw|ˏ}y ?]e!c̸Qkl* | x+q.8g-aˑV943Ǖ%,~a*X$0y楠8\9 tcwϰ//Q9ߗ3 O_I Ҥ|>JJ]`k_JVfN4"$eDR`/s@GÚ!}-rZiJ!,z\-u~#Aaj}EyY&+dR'ڽyG>,'Snp-s/Bwۙ; %*J[/zTX"J]8٣NUti:*M*/9fRpŗb'1dŢurA2'?JJJ(=PrõWsQZ-:,.dOIQ*exN9r?ʠ8~t U3?L2Ș8oOKNlt|dRsnxf^5% X~ITOu 7WMK{ <|MIįK8jc};'5+^TPLlQJ\ tw&n% fG'<KR [~DUY05)療3.ǢOgK`bb[1ؑf" WY`c0SaR*gKD}J8a~z % )t;8w u|!| zpʏS|iB\נ0Cw͚w GxG-g9z2‡AQ`@s=wB`+͖wV؆٫p@fz\({/t "\غ30ޘhVD--;5× @L7wL!0a\1Q>v2q%Pn @r{R% [ kC=> UqXK Xzqīu &[.MYyŀ0mPvv[\Vq^Bfc!qf9kD%ϖ%"{B U?.gMֳ8ôRJv^]8]eLld}"`1=%P=X 7J|V*2VJ{J{|@e|뎇PFm5@(mQ>2ucpk>=?{R`ҏ鸔69Њ2 +Z8P=;5xD3xPW?=t;?mY8oꀤ/l Կ ;h)=CmJGƷ\H}+J{i<⇉A.{Ya?r+A|qp u$^+_W˽I[/F4>oi:ne#Y'r *0.%Gq\cIW*Jǔ=[zɣEeW[ X># )(mfA8yvt5*^}(^a|6D,iao˜d[e}.͒О=TPB}GADDWN%B7)PN#`W)gJQZI'a~!~)< (>hHA-?W*J(}<Ԗ\`ZAtKOHs<|x y 2?c'P]&_3‰ &gG| }:_:(]|;!]kn=`w9 Si,~fd687d }> {)*`',! L"1P Lw>* uʇ'(E] К~57%?i>5,sɣ2{#ώV%`lY(H ~ߛx;AAQgLV}!*+*JO(_ܶ \I5aZ)}kl?E ~D:JǞȍḊu[1nrbe p2d) 6[5Olґ3.}eJL~&A@ՠVsր8F#PD ~i]Mj?nٞkٛ'>fґ}3v<P@` M< wˀV9n P4/@B2e~f ow_ /c gО2ґ}3v<j~;ArHpK+ k[/Km_mࡧRnȀ@`Ll:DM'LO|+ |=.SU`}*B gxD% c`p,{"|`c' ĂHs(3-?D?~6H<\`>mcAC@ڜ+D0-†\f}JKq?_' p aR":*X9+,ۯ{]! VCaஹA')*P:\@\{`D/6S kdt"J% )Cw %Dn8ËY}o6&q+g(=Ge)> `ˑX"^!cr\4D?׎${5)pV8Is7!0ds1rQncWUtx_erۥR͍a8[Bz8p\%8ވ%k=<`0BݎB^`px8 o k̲?'9'+o:p;;U+*@R:<,v ܫ2gg؏wY޺Tvp8v*]; HL,tz\+ɀA0Ge`)W >%LCV6FHSfLN^ <#/@!h '-NWTPpJdd,#]B\pNoΈىS; L3L8'u2 cu?O.O6"uT2 %ˇ&xeh:)97F7aй7A|)\3#dƗM4[cnqW~p 2ԇfP [4lؾgrQNk@ ­^kwS\+ !`ocn *}/p~BУ 2,_:scm|%i7cBwMoghJ#^۴Z&~RμR&8v"ܥ=e 2,W:cǣ,_в4A;cp2]E~Ӊa=ր0o&%O:O蘿jP@Y,Wڶ+J @mS 1WɹJ+L s/^ }ӓ<Gq;955+ UU}m; E!~ty\G@Щ*>v<V x' 2P$=Tᯬ:TPVG]( )`g~g႖, +4 8`&@C5 \ $V:5]ꧬNTPVu%c @klܒ]OY; Z7 2_"d3W;' ~Ss}6՝}?Yo'~⟴篌$(#3?ҜcZv2d׿k %SAs p p eQ@I<[:ccZ"8~;! pXISE SK'1feQ@Y<[=E @Eɠt֋Am+Y@)?]_)B&#kdn!f E DE t@ib_Aoc0n ~} nnx.p= (?:g(9P@Q)=Py Eɉ*Jg\1FPc8p ckog?$VpR?EiU%'ϕ\0,nDxR-B}oP٧( +S[/zkTGP;l|rls| ~泋]HEITP6Y>\yDp \wkz%R~'!НOVg+J(P:\irŏx Uo$)^d6dhw󟔳sW tHs3.z%P+!f@6mmԮo(OߣfE(JX>|erEQFm% xgAA70N|;19̽:OQ*%JǞ/MnQ",\΀b% O6B|ttU=_:㢇Zp93=f7sGf߯=E(JY>|e| rJ(&TnN6%Mc>GT+JP@Qz@ <>X;fZ&F ){9fE)(J(4‡Q' =1e;|d~}OQz*C_(Ol9a;VVµo> C>2O(=|Ė ƕ~?|ɕJ$As~WBEY_,Ml9sBu[ 'o0m`|tu_QVUe(49'D0H3$i?=EYiTP|Ħ 0/^oӕ|W 0/&6]@%NXnHGTP>PWjW %`h9Q3j_Q*''^(OlWWW5|}d}OQ*GJ@cN@m$(*gfN@p L{CepP@Q6W ,Q3똿 (ʀ NfC (a |#~MN|80Q@Q!]"xgԞ ((R>BybPEm(ҥ~2(J}Nc9ð:lEpTP|? +wU+p 8/'60@m8nߝ+ʐ _/Ol>QmIwH{2D(CBc~OQ Ue)}@~x(C*2dԇ pͥ~*eXQ@Q% PбvD?MaAx!ib2rAb" 6YyeEp]u,l~=6&7;uE0_$G)c豲"{IC3ZH P뀺"!`7rC[hDX^Cchȫ;s1p&NA_ܥ|ChP3 |ChTs'6ey_bSV` h\.S{/ @,'IuV``퀧I$'FuϤO6W0{[{_? Q^^JIENDB`qtpass-1.1.0/artwork/icon.svg000066400000000000000000000033601265137067200162010ustar00rootroot00000000000000Padlocked heart.qtpass-1.1.0/artwork/icon@2x.png000066400000000000000000002370501265137067200165450ustar00rootroot00000000000000PNG  IHDR+bKGD pHYs B(xtIME 7 IDATx]U}d2I&"*qk{ ̬d[ziojզ/`RA"o!IH&?9g:k8缞"x ,7t޽{i4A^Wq_[׷Vz*vK+x' ZfͩjJrRX)"+5,WJ-cLR/ <1dq^7""A3-"R1E!"[*0 K@@?}o43R'cVcTJcl xG)s?!8<:F]a .kJ0\EAܪ؏*쳸o|l]V۲f EwGE"rfUgQ= wa=( @uCCCqDhߥO l<4 f9@@)usORqHQc^VGyA@B?I0Z$g=??@p9D:1(} }!@^A@ޗVϢh ="%Vk#@lذwӦMƘ_VJYq},b@ע8b?io[`٬#}u t׆aJc*Y>B$;6M.ÀƘi:ֺO)Ic1^-],T$Cy w)}_Ϩ3}ϣ6,>}!Q/]^Z$k\^3D'[CA@a@ vK-RA+###iFFF.VJ$KgG;p)}Eiۥw |z^{hg֭^1ׂҦȷ-* \C| w)ۡw)A@Z}iX21H₿I ~b?iYiGa@S~inݺRc`t@l) 0" yz'- Z>1p=/iGI 43Hs;<L;Ol(n93sKAp-*5" H $rw),]B,G V*O  -%ZEdY!"HS৕VYcM0;(2PJmT*Yi nƘW6#_` y6!@# ޳tK?oe@ٰaC¿,w$XPԷL`G~︿gT*]fӴ@hZƘ_SJ.m;e2,4YG&>G T`wR7j%@ 1*IRg<Σ/b@L .(+ h> $(^r~%2-Ƙw-m-Xe[ GU8c@V kO>Rʈ-Ƙ˵uZZ lllƘϊ?iџzEeRwmoeguۿY: "ZBK  _֭UE0v[ǭ t@8fzu4Yg/|\"(Io[' ҆!@6yNc@T=6ia_oH O֟nnGCg!@ ޿kj"~ll7hš5kNVEF 먀 n]`1 O:-Z^8<<8-7i?&"/"?5 , K텾`~T `4@R|lxxO؛`W/1]וEV & |i `.a@mq+=wW\qA^ nݺ?/4_YF@ž羇 '{,Z/\ϵ/jeߦ b)Ʈe/UDs^!ak6H,g Ў}q{Ң?@k]gZk׮=h|GDNRIÀ$Ew+@gP.? vTK@W1/D=Lw+a@XSjAgxxfD ?"V e_ip4A@ "7~=mذwӦMm_4_i@0Ls] Ek]"u:+kF_Wq# iGXs{1jck׮hx_ԚAkc3 >$Y@D. W-l}hR*+ l.j{[=O8ō.zqm>yn󭎏fab0E1YzuurrN8[7aδ}O(4 y/*= hRn93!8?5\,$ \09>D,֭[wB^,- lM_Z@À)}q' CucZd(T*>¿y.HoU')}C@)YY`5!Y E` h Ϻw)*j5k{]OE&]?dy';P F=|TT2AZzu899U@Z$"QUE@ Ms OS-4Ƭ^zoG@o$z?ׂwo;&l].mF@BZ0Ƽ=ս)qWm2(jKQ߳8&mocκ袋Ν{$lwy Qg۱-GU YE]%z"-6M\/n{>bܣ> ;"3>,FQM}Bȥwy)2!A0|WDZ=@YU/b*m #h9ZqY^w)m Ϣ $"Zs|}JMƘEY͞oŜI\#ڎp}GϕOļOO(ZO~[> "/q-}.æc-n/m eoS.X?;k 1S+V8+8  ?I(P 6AcLz?qg:?i0kb<-"ghspaÆxc̉ſKIkPgSw">ni""2ֺOD|@7 !@6; )*ݴ@7'ȣȃ"rMukm ktC$HW3HN։iYX5񘈼O ~_DQA<-`GĽvn)B6㞋*|6s>}ubƹu4?y;RD.\?99i*o7趢ߦynm.lQlokVl6sQvZltE\45>Cf x|GnlԿOsf9xY/{t7i ~ߥ-ڲXvVj6)w;*:wj/ c~>?[xex?"o+ gnQU%DkEc̻ ntR/4@V\?m*?՟`v۱ n/o2JſE||. )V!@l_E=UeY@zs.EǨ݃,B$Ƙ袋NNN~31暬ۢv.m ļBf} 6 6!Nٶv=.Mo;3 "###VJ9im!v,] E_ţU+IG"I}sn*h\e/1hrrrgB݈5tcS)w-}v-E-9myVqϵ:Y~mh4]^Έp '۷!)[Yy ¿lWm|?IA@ogs2443#@Z>yJD)¿,#|qۢ <W/CokG{GxFD^ [Ty t cRſk$_]gYVs>?^ٶfosQAGYsA aFn?\~m^Ƙ39C,+hzK2?ic!+G}Kq+ l ͪǴ`Ͷ &nF;kyiL:Z>88/p@`tt{:žP bNRQ6p0׭mVaJ\WIA@--z'''k~3B:˫.{B8 |QǼݲ{نi).NJ̅^mƍ _nV;X4,55]B›q8T@G۷o1fa\Gզϫ`;ɢ$jw)q}M; f_jo769ͶE}u+2{'sqwzJk&-,޽{"rΤ:Stωm$W}^O2?j!QE}|I4fk5E=oy'amj7 Y\9zpp[9 Zϻ6 oU` =]?*H)Xn6EY߅< .HQ ^z&'' Jh||Uaޢ"z X\4ťI:5(j@Y.S8-dd{̟vrrrgXEtbc̒Οy؟M_z%-2] N99$g^Poqw%b:: v-m4#6ګ./@'جo{F \)翦L~1C 499zkh[SSSwȂd- ( iO d,6]Iۂ7@u@>wyY;{8o67f96[/"9hWЖcƘwܣ:L h?ziǾ׵|N5{\>/u(cF]t^x7͙`bb0 Z:kN*\#(c`֮_⿨?54%uѿoR/ wyn SuP C-\ N/}E? K*w9 IDATϷ*Vm^S j8fG׻Nz)QhL Fh+#"+[]Os?q#ڵqi,j{\!0ׂif8`YM drr+@fow}\_݋_W0 ICREQ},wc^z''' ](mR/*M[_z.]|Fa׭_ߞ߸'s6\^ ðs.n8b>bŊc⊃.Ut=`Pi="C@4 ;oc[=7y]?sfEu>~=G,x\DH%ެ0ϻO/Qa@ )ʒ%K꫟H-n}}RD%"}$E !?Sj˖-[~WNq(SN)ƘJ\mQMSԻq_a {-VϳYP)s:HP(Mfγ;^1B&8͈?DDdv5k֜ZV\D."ͦ:泚pxm_so6s]u{DD@DHPH[ o7x㲩"t_iEIv]".}}hfݺu_0Ƽ.yȶ.h+Z7FQſ{q'Z|K;EZr!ʚ5k-"'iߧ1fqW[~&]"~fWdd+ *"r rȽ]-uֽVkd+Y^wPtߪXO `,jƘOi9␄zR귍1=EjwV[f}?Z=== 7oj燇Ƒ /D] iy+Gs:i w (YoDOEhdahhNcr$,>lEQvW{a~ @m)o<[z']uEqv,&҆ya+km"rmǼ׺o\\}?VOoo[nFE^N}V˺Q+N 1BmPJoEDy/NyKs?u^iv?jstK@>h`W ^{qb♞󆇇# E4_^zE]"җg5.Gr<އ4ܯ>Qۛms}#~gvwܱ# @ sas;I$?60 EQʚs"(="rR6Ǯc%﯍^EHۆ'ŸwQ @֮]FO[mw_QEQs\^SJwttV(4 x|A,Fd_sƢBQ;}m~ ~ytt8d2h4&l:‡? 7uQ+(:Y\=̲lE%nYt)ƘIg54>R\'`$G,;K[moụ:E,sA2 Z_o~G_7~zpppMs?HٶqyEfE]ԝwQY&ʒt]U۬7ƄABh7oc´Ƿ1x;,KQ0 ?Q KU'QF WX 0w>z-EhW^y*t]ێ9g"hՆ=f@|xrrIYꬹ^-I{Ǖ4!@ҫIeZ@RՁk```<wZST;0zR|]yΉ{M]{[KfffU'~k$wJuy%edEˣrlyMw7}oyk^l{Н=|cE =JuQlos."r?:JO>oYTP(<"_ߡV}#қ8; 3:g>:MIn V@ *~]k8r!Ua~DD,mKEIyMW]4JV4k,Mg,ſNyW-;uԥZQn1>>R\&"B2~ l<r PZ7x2Y1K['])i篈YY#񜈼bttVt{zz^)"iCNTUT\=ޢ>RVՐ)_SVi_ZoAR%"ӄe_;no~1Qֺ*"GuȒtN HsݽhѢS'&&~n7<o4{_يW[[m?uu=>$"7yίFesk4@gI= % HxGGGGڦR)Vd"OteZ}BDR /(mƖ% h6Ƅz-@u-b*@('}Sa^Vv|tv~Ϭ[Q~ ?ZoFQ ER&=A4қ]]"ooyutwdړ1f*?M[8mmy/9 6 ʎ;}tNuÀV\ª@=~/=[Ue,#qJqNS6m5~Ri4(#fIOZ{ۢڬ,~ah; +t|v~,O: haZD~]ױ!@V!9)sHLk}(e).W|MOA0f: `8ʣ>%(";c'&&^ɞ@NGv%}+0m###^tz{Tuk?yiKY#["~x4vlGЬs011cx ?jT{".2,,Hrumr GE:Y ,硣tc/c¸6-E|EiΟM~W `?|Bfx;hwWڴ,W9% ?=Z411q6{<V:W<CÜ`lCD>tԯ(W ZFuq;!s;;~@Q[N |C[I6!BDQt; |f-mEsRtbiO7,t[z?{;Н6w(c!@mn88=ye(}}d96"-]óAvL`Y8pys\'(NL;Y_)`]V^vW岖I.Ƕf09tiqɢ3dzAI:ޖbV ""FQmFYk @5bYj " Hs5[Pz{:k+"Oj4l!@GoׯgO@0 /sbYtPt8#l{9u@'ih׊.:o[[n}{9MU*>,/ M:{_b/0_2e;5^!@ \ ߖ ojR.fy~^j<Ъ+.ͫOd_Buֽw&`M)Bw~{8`a@үCzuݫtz|tf|]Q _eEk%ԁ_7eo5wj^Kʶ!@ne`ݖ+kw 0rOHV 9?IWgZ]a.MΣw \,`hh$cLե>€cvLLL= CJ]yIH0  LLLUG"Ί9E>;iֶxna]4}EI$~QZmHѸ0IW%I(PYI:juS0ƒye[ ˵4 vmoqqLeYv>1֬Y46Ï3e(yYqn;ѵ#S)Y.u+߳[HָvWUwџ9x 5R:0is}ߦZDgץ[~@BG5W0&${nHOO1ʥcSe^V!ٗ/,/bs~ {7ur<^Ʈ 'eY |w#Þ { S\$ .g97ig'qi͞ U1Ƶ}̳ tmojl^bQTa1GCDn 0 ZDBv16LE` Sس8ڶ/گzMjCvkihJy\/竂GÞ rY.WnkHRثx$dm)`@t1u1ǥS.|vlYy9W綜Kֺʞ ^ %逤]sg`{*9}622Ƙ6w;Ff]un @)%A{6@ko}VHщuM]׎b<NMl=iλs нv$tJ a :JoKcV=)e[h4^^ ^*> a9. ,wp4@K)VGo,'W+"bs-r.e9ʥӍ% 0Z|mWvQǟ'~rj@ZlSnk@YÀ&ۃ2m_>m7 ;z1~Ye |0^j^lfut9?*Z>vi@V-:j^ #w[_tװאf)vi@i4&-|MQޡ@YÀ&{5.0ڍEsVWZbtԉ˼3RQe ZGujYZOs^<;NncYsf^bi^-fh[l"wjg%{4@˄axlLڎHeƅa> ?}YEM|тDzGRjyvPQ?٣d.촫e @ >˒th:yօVJ2n_ۃ_3Hh@ȲU'$t^1b@.]m_mcmidut~\ >]:L(U+T KW_}S"b00?] 2JI;6L}7tA@Fٹ0\Ȯ >Ywx,- (]@N-S^֩%/J^ve@1T|w>:m@QEKV)@Nmݶ/ "ZYEtڵqk6htK؉A簴gcZ N܉>;_ɫ۾=@NmmXYιQzzzVG@ž-{`3vg9joe4Z %0\TNHY vVէأtȤ ^@[EZ 쐴2 GCOOϏlϺEIۯ1,btFџg'v{4;1(ci!O̾EE~ͶW*{Q[zѹc<k_h4~b{sL# CE [u u hY+<:omV7{/XkФFrU㣊碶IY?Ҝ;0 ~mRisCG&uo@ @ @ @  @ @ @ @ @ Uy tC3)3_}df??(Sʡ?8-b2SKL￰W(땠ȂTT"} oAUz[ z*KHo2qh.NL];T3gj ץP.a#3#Ӈ Z}TJȂX/K?2x,YPeҷ?hGaʎ{e]e.ٶY3_ٽWݻ_v=Wg NJ=UX'K/ {eqX'G,^(*8܌: {?'ɾdLZ=;~Yl1Xw#cV, `,(̡Y|iyl6ybx>9wC$ Æ,Zu67%{&:o˖ ǟۿhש0xs: +^X"ZF޾S޾S9 ^yc唕+SN3NY)K- @|iyȓ[e]bkՈyJ?gN{*M`y#ߙm:ߑi`B%F#<%B#L}J|){%pQrI|do#?<6ymO}\.Be ʨkI,^ucԷĄRAN aMX_-*x9t|;ODD._zz YeQFCOl>{ySJȈ"|XD}؄U[(Ę>z׿?m@s%P(Q?sETUYU*{{ÇED䘣9$g:QN9  mbϾrCO?%?#[@!s9O["vcoF+[Ǣ0S*xXDfv+ߺ>IoOUN>9O@E<%?|x<]C-1).jE.4b6T4nݻy{ eCKe"A%:aV|b[˷WNYysډU'Ȓ> g?&=l.@DޢDqg.[)wR @tp6\8$+ya~t04/sʱG-sN;Q^u,?b1owpZ{xͲ=!-P"c^/ƧʘoTn'&y{Vpžw1iY2;{mߵWk|sN;Q9m,Z˛3ѧo۟6}hfyQEƴ|䘯]p08Xl~^yøo--쑯}]O|IAKtKJɪO1ԶԶrǽ٧/:A>)Ę}l* KEJdW]?ܿR}Y&'5 "r=.~G(*U}c Nw|GOQK٧'z?<޲,~sn ! !@ (d HT@Dinmͧ_lmpU:J3HR2Tnݺ9{{}׻W?rg{&@tq:s_SQ#fS:9:~$0ċPQ8o젛x^r tϧ6+!onEDB?W*'Qԡ֝owpkoǼg| ]hM)1;7O(ݾ1:Mtϧ3^pDtzCjF :ȁן!@`u$wm#G0C}?9O5 'sgQ;YoqNL@`1~k^NDV"Ba`_oV!Qjl@Dk1#hb?w1oNs̟| [b}&Ss}b.W@,<B$deo_c:uԭY /7YaϘ>{j\o C78Q8[DZē+Bg0=mȄ-a"> A@|?gћE wS'|pr 8bݖK D N=E 0O]1~ ./D>"S~y ѥZ; H-m ~84!jBdzx&ݗ!U} Wv_haUВ`o1A sckz7N`:J90>ZH?KFwӝW*s#Dty#U~!hqݧ1V|cD`#ԩĿnk/CSwn;{XczR' %j 0 (ȗ{?3Ma2;P0Ȳ ̚~O矿 "pΛcDtjn 1oL8wQ kO Qx9fh"kX.l˲!?KG!lz5M *=mgf? N"1`s@sXm;0Fg\N Q"ڄ?T7J=9I?+>wB݇書'}Ӆ~Yrޯ%z1 W@+je ?yp Wc*9 g:3DlĿ'_3g>aU /ꯅ~DSA<2׮ pc/` ODgb69n{.MTsKt<'@qr 2xxX v&; S}3.~du N+67f>>/܎{Yl8-"@O,&HB<$ ,c}|Hƕ-}ȿݿʭ7FupXVkn|\RQȿ5}ocg %W> ЀokHzX*"O]3%(D;/D'D.Vm?G?o8q xb?Gފպp+Ofzu|:d3+ #(@WWu߽m0jEnD2'\IT7B .~9/Ows\7ә$Qxk֒lb2DB&,r.~+v^ @mX ͘ Luw'*N/+^M&w~+/ow{x`ͩ:CpRr7g:Ml 1&?%Q"_;~NL+[g< WvםmaKe[lfe実Wq!r &2`%c g}raD "Z T wg1@qBgZ >)GRc\ODwE8KO;H^-JGf\:9z+ L=qg~ϊmןoq_*ܪZAۏ*`,l!5O@Jh@Ma C?HzSu[.;.0} 4oH $YH3gu?p+~>!n۰gß{uIaV" 7Pt{b1Xsڥ/t蟈l `DSd`>ϦKdO߿ioT~1]%":_KXm@0ޤ*ɼW !)or}u`*X.Xwk5 vσړsgy0)v7r\06.;Fse=oyſc7F|UgAyC95K\lkwcE[eNUI(m425K>TAiIا:' 08;Yc11s6\KѲSHN%Z.%\eF6Wt2#&5~$"K z n(8ݷ S1 G-% )gI @BRYo#B+S7FXu <`*0X_g_L,W/$x(+.džM%οf&TRo%.jrsgb'svS |Eu!LBYXJQy8W=_Fg\. opW.wV}Dx`{Vt/ ==;淥rGK~sho!guB l*N h``Q%@Q*jq՘  l;:l'#E*I&)H˧,7o~w.`/t^}W?֧nw0675"~f! td߳߅Ki3Bo:C[^s?󪩝=F (6oh&+>3qI8]4mELA9ֹ h7y Ҫk(QyՑԬ22a0d=k\z _qոkʼn[YUJ }\&?*'ާ;}՞}c.xwFDy\O_Iyb2 & 't ` 1Cϡ7^ @ ̭gz2[<ȿz'6;odm{7ҟJt]7_=UwWy9|r#fA@*x 3%Y`$P 0OarQAu…oS ;n|~?A;fɿ˿5֟Jґ~~^S&wRj'f;89&>H-M|h0xi؀J\HL++aNG7~iX6I`e^!kpcS@\S@nѹN //_@fPIg!2 7Q wR/K?W?EZY$Q^ mRAO1@+ [OLXj*찶 uiFd7 Ç3.Q  ?'!_,:^8_ϺPN~xo^}W'pyN߻\b!CZ<MX@Or?> @@?ȿI%+Iݿ; C9UmV8+_!Ǖ *B8&/mB2I47@oD N?rc*aBÖZFe {ύ_[_$k"Nu_wJ->ɹ| ӹ) %X>zy"!%4|Y4c 0H,K/~~9g%5`-]rBb_F"C6q לSy.RP8a?Y|^AFd ~s<ǼI5qR0 b@U79ekW@hSzU&(A\0>}`!]-^.R:dmE=]5Db' W~?+ᄗ$bk ?W?n]/n6"XgZ_!A_Jh@]a \C݄p`]tš&D&3|_ߘ[_ٿ=ſ$?Iǵd| 7!‚6rM~S?#~]u9wpJ<Q-'XO8 ֱ򹐬kai u|ů?S@pDt?obv?KT% #va*!@aKf?S_[^ޏ+}\nX⯊/q%WgO!E]MxŦɓeD:*&eӱ\JRE!vKPb!<-4 ,cuHTZζ  y8m;.60$;nh/O)]&wWU% }ߺ'-& D4V(]ݤh-~`/, WHcxnf9v:|mlSNu.!ބkN{ ]}u/z_sDr7G#bC@V!Y~rH?@{P@ޛ8r#4_Is])vWϹ½/XwS۾[K՛XAɁyCziEk9| (*%4SrH4`MZ%0" =xm}@~(0fb.ܰqkɿgu/k,t߶4.ݱ=/fA\pyW0`nG@oZB}Εw\0@utM1#j}Z 6$30Y#[-R¿¯ϝF\x}Xfq"l9a:x x0 GVG&,kn׮NO.CF Û\/VH0?":31俒KlʲNl N1#_l"DILdSypY}}_L_,W݁M*[4 XĀ1!i ([po.gOq).qE`r /ް˖|FW_+{9'-uNo콷^ʍ^":#S;Cqȯc)u8&w~I#~:N͘ M\x>_KV-)jWJ"k<uNΪ_]DE~NI^gP5hBXyߕݱy>R<rPɺ) ݊S@u>av?Nni1L 0oD2PRtU_:Yr~}/roG?tE?rѦWLX0"0"T}{^_ ~f)5NKi93D`u &K%D~ 31ȓ߲e~[y՟?E(SJ<B@#"ti,EdQzJW@YLВ94]Jtn!x7J%ɿlsZUJOiMnUr?eb?U2 nl}ŲsVBM? ŏ␠o/[:N,P(P$dyAP0(\/wbX> Uv\ L4@)bGG&]]⯱S/kK>ju˜ćW{ (ЌPG(?@Q~kٶ,= X!h#Źa!١@>rLiĈ.-URDlW@ձO/7.8އtqR5 s{Ty2Tl@Roџ}Yf-@ye[@Z IDATXALga21_LKg!}%K.^a' [ B\!Nd"J`SѶm )h qhN$7\&Ԕ$ [up.!bX._Q}h}ݏ_0A_ D T}-+=_ &)f4[6c0$t-se@w ~G22K>2>LКm:ԆS.^3zl%%ВLЏ`IuZ R]%_φ7'74\zÂ5!#@0_Dy& cfO$\59=6<F0A?Eف{[˚WXUbj/rs2ki',,*Xxl[g+ 晐-/@4!S@'@0UFOO{'0@݀P;fiտE< Rɿ_篵3 ,Uc~ªo~T0*,c}, xYzHc7@yη]/(<'X{\ `q~1 @;w~-#y1O)DcK?3Z{Y~;zem? >VXγzd S]yr{= ,0B]5ځ;oރ<Zџ ˉ0?3%{<ט1mJbRK¼¯|dW>xO-K] d 9*<ECV wҵ{ Pv=^ 26iؽ@=Xc{L1BWodlg[}d[,dž7%#.oP9ՙaOC6GVG'itq  xٱv{AGS&/%R*5jĚYlO ~5S-v^kJPxOKA*i^yhi~7@dv=5Wp0zY<ԸLغul|Wo;1˅{ܿW?+9w6I5x/[s|? ImB`=3kߌ:kӹb'&pP /?E,L2@ yhljg]l9 +>e@j'U˒5_h/\կΚYh7kV-\m;V߱2*`kwW@,O#5#M7ߪ|k<8Qzĥ=a:oyô:}f b!CVoLةp#BՇ&`񦷜~Dĥl8V/!.Dqm4?* x"!2ӸS.a@@~aȡ<$?  oj_|yԥ0#D\s%l.'W)d7W"a{׿9axEP}4-k,$  $ &  HMXT&pkI I |݁r@>8?Y @F%dGONi?+ȿ}Vbcſ꞊Y5]ibt:5_OR HȽ#oDe6Y_jH;@40^>P(0lߢ?f-dH(('@HjICx:e<,M1!'COy95@9xm?֕5a-1~o6>kEz4U5 q*<ʽms,_@*ۧg59/@"[&g/>x+ $Լǁ.f? õvqIL(iKibCPQ`![I'TfsOpqTÿ\IrpYǰh:QA>qlR"BF S@-[|}#1C,}]]K6Ou aPZ=ߴM1 (BI'IEџ! 5H!WRP7.Bv7:yp痿  1W?66֎E?Z7[GYLىǬ 7T_XkgzQhv. zT' (Jd + W5򀖤v H@o1 @}H3%!]\I7,AIQR+4WLrbĿc'RL [=1U PkE>"ev<BJ (kwO0 ' |r;A C#F9W&+u W`6ҟ~u]Ϛ6P˿@ 3"RXMn21rrR%8"A Y `{G GrHS͈J.UKAPQ¾4 o4 d BBK߅K6{?(9CY?S6H;Ff*ƅqe7 `&Z?*^)B5QULpybD](QHPۻo.vùpՀt*K^ɝ0CmrԮET뿭]וlk\}cqU>j< ;87PLe9.;7@j^}i9%Be b@u@lMbý' ooKnP"}{yxwPa7p8 j=뒓م{hWPc檹Yɹ'W D2"s&q7LJn `vA~Z@Ї(%5!R)E{ m+ (/ƈ0!@z+O|ݘ xg ?l_L>sh5ʺ%;?6NUjuUg[L[VTxkmɡzπj޴xh!Bs/CEkKRk`/   ֝}#ԋ$ l|]= E\*7I!E7.3EK Dt Mqya1b  (&2M)DbGnC@}8a@7`Pٞ_9X뿜s̵ZE!_N"R߂M7yZˆc [I ٯ7ѯI)%Q?IOC ýR* kdԡ¿5ړ/auo})a0Db@%O[]9z(&_*M'!+?Yȿh\=Lnѹkn埲G0R D7@ٽoܔX܏B(Vf.x~^@[ѧy@^cZL^vq^%s$s^$f0Ҟ#u%9R}XЄ(uMUК""$@\X К6: Pc S(",|;?+ P>O-!xN5KbwǪ.+$4y T V=.Fr}| @3\;&pvH>Y~}DZقsHۅa^XoiD^\_#c%h(l?V.cK.;1DKeKHphXІdܿ`}_S/C@*BYu -؄ŁC~M>BaA9?4S?G!i큙bܥ5Ò)[Cb s{׶a;ΛTR ,PF 1UX-?@V_MGu}%q//p˝ח/Lntf;̻t )uB˳,OC˾WRvC k, vs޹ B^Yh# %Ƹ4e"gǕ%ϢeϨ_Qy|-">;ӿԡګΎPu3 !JW-@$S@ QsV@H 5!%)yAdsgBO՛4צAa!ӜHJM?E7'$oqk_A]~kNXq$V!Aϑg%Ȩ}%);A7?; "@so LhԜY-/@c%}-NĿAK=56 ý$BbW5. ]# Z2z Lp곷6a&H `P$dlZɿdHIGI?.u%?[!-Q,侎d,SP6(P@5cov) P@w)u~ǭ9c+z}XHo[!'S%۲MrIĜA IDAThM`1b9P^L(Hj_p@`ŵu"{zM[ҾzD0W>la`a 8v1`Fln_psWg դ_Ë~֞2ys %hL!-b5޶%)`[Bb Izyd0l@/m`\"ݛ@GKUt".=?//%wſ:EA@01W !:{ݱ2,*bV8p, hy_4~x9&b S0 md/gwi]F:+_7?' -F2+֑}\F<4ʿ\xB 3,lgp8ˢ# P-K++=@ 9euao?Ei(sч ڍ,#idtG714A/{c<[A>hRlrцZ3Ѣǖ `[bvnoWY?L/i 68 EMe,(Dz(XA6ucS4KEI۲vWy Kg(^\ίzl@COwmӘ QLg`Z,Hȿ v 䟆W KE[_~,Vo͘_??VP+.!* !0 'w8@qܾ2@m<2u-C .NK[0 bv:gaZD\(~)iglSɚN%GI FkW)~%Ϫ xPU P5>I? [9aMt]=_ u,)a@(g31 pX#?aU/2 (AWD_΁Hu8V4~@6  rKqz9+4r%,`ڈ~ v0|[\1UdONTRl]$Jhmk'E V+*WL)Ufoۺ PX5@P6&x9hk 1USBbK_,j(A;Vc~x)P[,x,Ԩ?i]F0sj,ؔkS?)n%)7W[o<_4" {9rgT'l F !HQʗ}]ey_x,0@ ;(H"cbo[MKܿCҿ_%OΣXʉφgp?-APw*?2DĀg U}˛EQ6KUIE{EAX&0RO^"Ы<`]UҀ՗@RƏyaU2~Wo_=iLl@%֟X"ZhPUߞ/'uvW?Sr2ۭ/|Ti᏷ȴԟaɿ1)f|;^]6*=i8&LHi}=%Myx'9 1  ~+*![%ͪ%[ePq!d#'} )ϳߝKI+H~ː@X* M! P|}s&}kR*$5vvZwB@֌7EPp,b@ IgbK[ms{7\IuϥvL>kTVYUĿ89-%EdߗS-@ V!d 1HDH^?VY$d}F`[J!Ʒ݀};HA:XHZ',lc[)Al*-#U?ORr/H~bs$VF { SuPHTBF Ucp|xzHE ~fE_2c[Quމ<*}ፐ}s>Q/@SWlZ?"e[}Md".,` *H?uPn2~D@-ط u%@k5h?E\bv"i`Kh,U)\2{% dgŐ? Hfկ?ѯ|>1@tJ!$,i9=n"IDI 浪P+a/b#M ^Cہ(P>^.ma)qxΞS?ߍbS?k_M&:Hj6zlʹ 4 (|U^NT!*',/ o󹃎\2MeMecEACom %[xQ6DB4RB`o߁՚I#d#眙+\V͍!JV` fq 50tŎGg+<% UxT! 8Es_K>j5u3"k^D{x4 ہ(㰖P `a YtS8^q^j 9ÁAd)NΊ+wWS-d&H<rx,ΞK $/h(X=Z+ 6?# 6\T hb ǝ pc)LDCfDVV!gIg/TSH mv&䂯,?"hk7I%_!PojOUa˽loŊ 4KIݘ FgDԿvIE Uoug`m(+wߕ$G;fA3OOs{w~+SGhn#C+y<4ZyD儺Eb@EPP|#p\*)U= Wx',hOOɳcH*@PdõNK +#cڠ,ؘ(LX-nn\z_g/'颤CDYZ݈/>7fvC3ڷN>yf/mdT&8-DT f$ dnykȾZTȿgF9yݽ0?$OeDUfq :WioSP[IO~="ZW2A(VG! PV)@P䁐[ M^SSYS1 N: 3Ȱme_,tfgSrˉuzI:WhzlÂ0?KSVr}EY9^Bcb@U>P"ϕ<=>@uD@z?~a-F2,ƍJ-T$D@hXڏmi_81\}c䟆&FsSt[hoeo7GSJӻn5/|=+Vu  ~m~呼hh9Bf,Jh&B/aEa[ )bPz8fgq ب$4Db2A*L\?_Qӡn,p[hoКS_Ek_ 1 įVp 1V_-P2~ߴ3qϒ~c&" )gt Fibx$$K/Wb6:cNW뿭&Lj?˞Ϲh/Ro_zsthM4{;{iŦ+8+@+$yH*1mu^.sGmXP-&' f )¯:֖/OOO?hwZ_r VYnE}/%?4U'E^&XCbv)Є+ ȩ2{>PԺxܧԉ H-e83|KGZQ!׍[=J\IHW+7W?zŒg;?O q}/x֟VZ 6[daEVa A/rdL Yk^F ޅn^ p9m(a*U6)~5I=%_s)K?I&?+?)w\4П\Ko$ȿO_z"/`&p@>yM#$.]o=\ 9zl :/J؎}Pӎ2^!q Љ[ƫRWD=K駉?S4{꿘MKX 06yӑK^-hXO$ak[xK9Q(uk˳$FLhChJQ;hDhٷuઍ"ʑ$&? |"'9B8v`r 4{Ϛ"0)`]jx=JMZx4Yr q0 HJKoM gfm=s Ta%\O!?N!:pgh%k"Pv~=j4ݦR^]egx'+BQKhQ~K<6䟅C7h'"No}BW5<֧?;5t$!,D)O Hj߸@kڪ+  F! ff bDSHT$`s[uZ3m $a"$.:BtR֭7&P'YE6&=lzfJ"]W^2~;Nx( zf -f`q>B\{^fYwMII4)Fn*_N0=}~ACvСVxV9E$׶zx&׏˻(J#P؏Y X@3oxMjkZhK((R;l8?$Ma/K8$V@ȅf֩U[sZ@1&\'w;rZ ? 3iwd49Z]Ɋ2с?Cò5Dy:pB{""O(@}k-QL07aLؿ+U@ASt6ٱL6^h&Kknk"dU.Gq聛iSXOҡnٽWϪz)^5ʒ-I; y @CAlF p*qS,d v%_ڕⷫϡ7,QCoԾ<)"`-Qg;N~ͱr/ߘ&Jn"mNw`hU[vȆܛ@Fez I"MErZIOhmRZ&,eJ-$}T^@\ty/f& ۩Sdrl,$[ tT[;iyȿt]w=N}AU#'٧GRUU)`zqlTh031 mV oNue;Mnl#R:%,rϟ|Yg۰nVAb Dr#)kNF/u3`CB{\NS&46MDPJ-ԘvcUdC?'#$'$j҄R_pg~H7b?{*ILʿ19jy@,h+[o4@E/v2בɓ>:\i,!b!){4z,U#_\0ojyp c?dmhO;(Xv޻ XHrkN|y6zaxfN4.+~_i܇25X毬gzSț4ɐ IDATC3]rOsT`XX|$l8@V6$`k)r o + <jSH7~= 6&w$$#2*UO@-^L%<ìy 4,$C&xֶ)_0ŤZ̡oO. L"1?$>`߸,e }MK( 8Ra5o6v0y_~ۥ.9'VVAIpHݲ:eoUWkV JjҖq0A8 !M}2õϊcD;K?9&̪%?vɿ,~yj֨e'I`?Ϯ3xd) dKbj(+<YǾ$>a!E 䵎sv$ls/Yho?%"Go' Kr@ԣ*"r>#`\ 窱NԹ`@Ұvm I+ā YVHp ȫZ+8DPVX4 peǾtȓmPqnz?=ܮ0E ,=i Ixmٱj6ҫmǡ&IoCIWƯ~/˽b}u%a>wG{KX0Ӄۦ1"i`ߐ_6$Sr?A?Y攸q'b 1]}V@@05,)^)% X)/aIq&u@f8(CQ|{aA 5NFl5n.۞}/e#$PD M$Rr4j\?vbo獔G@No!|72D^M1lbϧC(֨t/¥IXP t;5+BHȎ:p$wbL8p)CnٹfĽܴ?J^j^.(&$DLOc1NY"@)o'fH*%L(lϯg/9|{I!@pߍݲ2LY5a-RlCl{uiJ.gR|zwȉ9եh^y)|.k1yߋT-aL.⏧_e<Q|Os{1"DIת8;j99 13q24y,QRlB 7ɛJ&8zIdORaYZ34Y=̶wPhʾ<?i6f yz9ne' (ȿm'@v_ӹ4Qh@A#~OMv[v'N\.B=?qޮl-huy(6Qh7]? 6؍E((+{e>le:\ow0+QH@اw$8vĽii+9樀:odShOvW&+=i~I,Q!l8%T=5EkȰ($[MFK_,rY㛣n> G(,s6X9 `" 4)OOk(@Y6r_C5ɴj`UHkt+&䡪2&gMp;6!?=/SGp~`T=S3PlcC"!LX`R_iNGTL8rczo_0X%!5@^ְDmNm>O9ȵ~#HMBi>p Hif#fn]J$DDCX#".'h4kPu0a~پo@"ۃ.ȃvQ1#.RD7CVqtT C5cH$`,M?;ERM rZ`o]yu0BG{c05i־HȊᠾv͘:o9_˱&|pDt$Y*0ҖFLhpMkM;8B!`_@2S81 -j#8:$CԶx巑NNg!s?} `뼨$$+CXH%[%|8Nl$MojLԷpfdF y]XٵnN5чmi׺ Y^!5_,ި=ز{oLhf4z!-P 5X `!L *vũ©rRƎ1v2NlI3yɪd@=Lϫ{[k}4}>kkwo2XZz~#Vub\PݓHM$t̮v+[M [ P?_ פϖES|N3٢ly*[[?tFBSU@j WN|z (8\oKQQсdޢŒE%:_?FG|.HwtvwIF2P{-*QqЩip0v3"}ǡ'&Wj6Kѳycv?he1xj/gz=/5/ {Z \J(9:4 [d78q%o?P9& 77O$M> :|,k], ځD [%wZ;x0{O>"žy  kkTߪ$OMG%CU"ȣqy3RD}ﲗ'n]mb \gyO hxzD5B wAk5#/)?VEnpdEۈCoj`<s>@8p oQqnkGpwrFQb+f*8`Q\ c]ao Y<ô0LY;v)r'3aPq[-"5Ј r 6#Xuted3X_cp9v=2Rw֤kl]˴3YYfW3T`@Uvrⴈ]jlC&n0k=1y' )l)C#Lon ogeooO22u;ٺ4Jp9Ho]{ xh€Hm~oqMv.Ru [6?+"gƒu*ۮ(wM>w1GT&F"nc(n. Ȩ2i?KҪĉ:>> 4pמ>pr.n-4Y Ǯ=.qj(X(X҇ ~-`8-k3Zo$zvƉ }ɍ\my׋ۺ6k?ǎ֭ kqQl# 0P ;e 772F;[J^bis9c#!ܡoXcG,s[,# AZ~1>/^|֧6x+N"ZT.ӍyT`Ɍ~rw17x{C;cNF8!T~u-44 `'fxuC -8rʉF ׿Kk}hn-[ձAZ hݓ/"_&VW-ʴ e=}U3XGn匷#ߝ`ljuHrl|G?,oJo fv9Ym+`;?0sQ_Ewbߨ 6útqp6g F$HYBwd5fE"`@Oӌ1 ?~nO<ǀ[&am WWj=f~-Z0ڹ_dﱇ "Rݐ'Hj)udY c~lFjؼٺ fі10DVJ"nWKB=]7weTLlXvP9NiֈoyAh m|&j~HW_fkE"5,&Zh$RTP3"p=޻ 9Qf[oVcpk^Y{7Nkrs]3WרY;qDd׼{ n-$hi)uVF{kgogO~~0`]2^*y}rB}&.l$tV~ZEs'c?F?+"_AOsQd0@^wmwx0nw}Оz.^JTG/hƂ?jtns60rGTeF_OoywѦ07<.u)pE6SevpTIJ 7NIDUS܏[_aj/tl47+֭o~@/ƀ"%hJ[l^&0`d-ף;T`F݆>BSCs 2V[e\F?q6[sr:?ꥎa/6/nwy27=uogyFUumV[߮>?FΗ|XE"3vS-W5_hCn_`gtWyoi=z7J*m'N~#fg{m4cu7mr{McwEkf8B3ןF|`,`{NPj_-'ncOyLn{xhھWO'0`GTНn?*dr>WF^M1~˟[{^@g33u7+!l,2`j+Eܳa g*d4tT--#;*7?Uڹrg]/ASo*0`58/OE0`3e Nnb)؞cr~8x ݭAJ5{#j0`eػxD%jVn6PUf>ۺ.=~֭6n;XaNN7 bM#95]'6D[zu?MowzT|wڽqUO cP?/OLElv?3#7{?Kfo'{A lZyw9i"B!{Ǐ{3/S0Ʊr\1~ϋۺ~9Kޣ&VcͿ-"<5z[ܺ.u~XnWɭ;53xXPgn+NW@M#*[/~=TOC_>fg!w= `sˍ_D^&;Ə񷼟ho"h0;p&P9w/N(KqO8T[r͞Yv~xZ\tבpQ_YvN~euRˈMܑS_peWo%ײu\9U_@ _V?%x k_}_"V4ψeƛT?cp}Oonaw|XOGZ>rT\dR D@\93gz>=Z~k)U_AL@ڵdGL~-.~֢>mlMw[MrDgz7J-8RLhgZ҂lZt?ύwyRp~;w@DހЮ/0K+_ЮptMR×][Nn~E'dr }Gz>(w~_ ȳ>C6Umэ?{Z%6/ۣf4cB67!w~/#4'\yojesEdNU@S}/UMv؝oysխD]K立E>"2k9\.É3^,{3eٺr;>$7"W<%2__Qn{lDQIay'IPj & YXYp]9Wo];[ gr;?,ֺ~PnyE66{=:trSW>ɨ08{NR Y7ئ;׺/%Կ%ա^a rP\ݏ*LIUDٯu?9UeIS|C5'}<`D5 9GUjηS+Y׵XJk:3mFt!K0~WZg"zLj .~S*ZNuDq@r IDAT߿d'jeϊΦkݾl* «\c k].}ifu*PxQ<`''"5s?|o'I$S5Vhڻq{l9ozDk8kw02oLg0;]_!u~0Knb)tZr+ga%ythjjCüm!㕑qn9iK_ܳשep ,t䵔NO͟ hQ7I'6;i3ѡĵ헩`@yZg]u'?q"O?-OL ԉ4r6% 6Ym:LBXkrFMΒ0əڤw>{?'_ C˻V0㳖WNe =?'c0}SkkW=6~֊ = Na\:=ϙiA;漂!rV0F' U+sCtמI,VRΓWA{]Uerk~&/}0Q漗Ä[jVh K3&X177i`&mDg klPufSj);r]e@̽9Ulܥal̯0yWf{+I H46W3gfm\|`eKN1`xK[6pj>1U<V3b3N|!?x$<`ݾU9NUU1,[˜W{ H|f;lq:ZtFK/ e?ř (&'}QR⿄wE# dEړo1I~{$l+ģ^]Az)v7UOe)u lֻ@rQ5$DK,'P b\s8x_* n[`g}F<Ȅ0V'?=aQyٵG7et8kmjjUgQ[,>/:,i|c Dſo; a$A^;gUMD8`?{v>ٓߦ N<)+"׉Yf hcn5m?h ЗMҷ w 09Lb5ѹL?'MaD{TO<퓚~[* JrjKN 0VO؜TD75-05 u7}6-Pi)#1T|~I4y:RMMx4CXK1!܁Q,/mhd\piq`MC_)93 QdzB^ꔓ T2@Aw]K" `r)L=T޶Dm?P9bv_iKe @9#s};O<Z[X3|>&"V&T0'+6_2:?2Yϥ"Ju~@B5{x?-%?M"5`Z.gKリ7!--` _N[IR'XRVVZXhJx-/, @tܳ2l+d{:ApJn6~KBJbkiPnWSȒjD;s{{=ZYXs.m\*[icYV<Y[_<% MY b`ʼn@̄נT!ګ:^{Z$>uxI6^:пu>*e$@h760<Jԁϑ3pz$oLYCcd\!?x@))s5+2#6q U+^ۀ&EPg+~pm| Pt2d<j`$\jਮZ&Lq{_o@ F&HǕO/d ?q?5YJ# cj9b3kܷ?P?pkfT/#3)/赊_Ju!,-oߪDԈ>UômI=[#j9Y n*%cȥohB tֹd$J!Zs|#?oN }m-͛YD]R*F_%3!zK@mlv\7@ &+ߟ4% ψ\CGu)p`D{N{kG @mG 4ho{K  o1'|P_we 0$yaY*L hf,}lBcXMdBoVZKoq; wliԎuhIs"v Pl?@rϙ4[T*x#0Y ܴL\aQ+h[؅{?S4r5 d>bCkIXמ/*<me Gmo 2,;j ʘ񓰁sE *Ehp59&@9I :U@gSU{kf}}Wh/?4G렷?:j^NZ8^ǵ2R WQN-4| Q`9eݿ 2M-E"ץ ѱje$ MElo&Y%k~_=fK3ȍ~)@d> ϻe?=T6< (HKO/ ?0lJ#`jXoL&1>rAJyGP>i,y>~BB}wsPt&j2F0|_ .O\_F ж8׈ߏYn>(JI-MG7#K4f] ;ρz3/v,_ obT^\m  L}@SyС>{ -%u@jU'/Ȩ&Fq~G.Uʊ$T5^{mb&8sW|H_86 3.3jۡ{ jzOsƘˏ 3_'0e_[ߢ ji_|.G`A`c#۵ ko@uƜ-%so)Hڻ3@ &dtP872?- ~5 K&fHWkt?Kzqe2K'?9Z/ 8h|އ!<1¶IbDUYZy̓IM,Tp t9AHxY{`[R;fY mM"BsQ27n;?D &nWuCN2>DR|f&artU Lu_JuEгG5-!ڃrQ6_d}P@G&͗̈́eF] paH е$ ,òXadC((n~XU[OgGA`@ <&ՀDXb25L~8c;b,_00Z14j_C=-"bKBDAv*}͙hMLd7>."\0d &֡)U!{J 1bt$8Gdž!#]Oi7}ߺ[JшW:xnd| (_ŷ(d6[GHYRv(b$- X~K5 wevy; .v:W]w4e_ӯ+&=kRAwW 0 `8؈(-}8yV@S 5LYKlw S^|?-cM 7M7˲ f"0p_E`eF-IK%r{nzMPq2Lk]oL. !ҟDKtK~nrʋܦ4j/=`3~v&^1F @ $LUw_jd%7r8v Oe5w !-%#[IPj9cNʊ3"vĩ/!0 zvVIGO3}^`YQw9ae;޿bhMdQ  ɵ*}?t+?PT&q5ڶj3_,ՌH6%Œkv!0``4꒵w@DŽY5N IDATELм]} '^9 Q | F/x ȵm[GH'mWgXa4r'K# hH A2fᱲQ& 57_`eO  p|כÐLΟXOKA4Bk9/Ry?5C?Wſљwa~_KFX s( AeZ0#9/@^45%fLO\IنOX_"?{ۿ#ҫj0@TE 0`d&n PMnXSzPפOB͊HO$WcvE/4tE1\PEE%/\/-_JP`&tɳYo{},>  <`d[Zss3R_n3.q$&@ / XlzṴ(Lѳ]!1?l[Р'~fBeDVK;i2@-|BQf K,VICL6| BMh0#p9 ?t?Iw%\&CĥJg,P=mfP[i0v`.su0`޲+"@@Q&.Y簈 ʯ3m\xNq2'' s]v+>oNgo_c3?|z@o 0`\ҧ=LH}kP|)h 0nr5ܞ]>W&43c<ߕ5I2o؆d3yӈ X9@ Y[y 0:2$=. I'dv_z^ځؐdT۱4i"5= l+o UΖeG }'.2lBd'|Io#`r1p=O?Cn[?"K2B%:rD UR4 'ǰ `0"=|g&@ƒ`#I8/?+죮X`迆|zu? PwK@߀w(Ёk6Yx_k1KEy '^bD9d0 4ʶ _d-)¤>Bvn6f\&@/t0SV Qo[^M 1r,9_h4#@/t  Ӣӗ YUӥN'%Bx@Ty5$N L=GɅӞoL..COzĿė6w,00QsAƊG^  'w@L%K,@1l{?LzĿ *+.Jt݌2iL-\9˚H$y1(kKIXd)@`")`k&@O^o*p\L./гMZC@.yFr0t.1WzOIPl_j9U22 oz?.0 _#*>Hk* <.qC^}M 4JL{΀( ZB@)P>L%]p#`z`N𛇘R߲/D-_W?`@ nu z  웘}IX 7&cd?r#PG/>I!`%+ݿ v?`@ qٺQ((d |)@@7zm0bB#H 0trYf{giFl䲍?gd{]E2Fed&  LHjQ'{|{&@`sT^Oxn|0&Ywc|ȿ%]"c&;Ef&ŭ8_ByƳ#`4E/"z .;=}սB,{S_ ?ƆaUĿx?6_*l#X_?s`I$XRw I.&(3 0 Q JR|&@VҰ0~Qt[71K Ft /I"Q-Y=bBϘ2BggEb)tkם_@{1a!L]> I;Xu&KCiϼL`G,Y!1!d^Uw4VGUmd?0`H@2B'[OznDu K$ 0 tY@0Xq8$c}ϳY0LVu gr+AeM( 3(3@ "&79`鰤eF1Vw1` 7s7W.^`v̯\JnD|5fls:aDdٸc턀!]9 :&@hr.sߡ s#fWs]Jpfh~jubr??0E@ζ_] (3 |#9&@NFdy^brD្?MGUĿUCs} zd !ˠRG[ᦩ:Kl}$fI@OS b7y.cK ׂ$^}m}L.oo3`@&mK' .]wdR0D(6ЙLw^E^%`E!}u.5n?BĿźY6׌i)0`&@ f-X 5`)zom %!BMyWMd{&Aw=>t?ik?dLo_n;זN6%0ʴH phzX0@*2~>AG[cÈ8%=L]L0R`~4'k .HI غ q%A+j\3vw)fֿイF$Siw*&;;S?`J CUKb&30\pe6[";;ݳM5_-ʵ7I X `c,@%weDr'M9{%Xp ž4rQwxaWm_){c3)C۔?ewhۧ$z60&_m@Α$mdWÿo zg|z |gZI"z+˯F&`Ya!Lۼ[r_yF:?`"!|!ĿT)W?`ZGgt4oyh{#`+d¿ج`Mv_<_4|Lw| X@(UDfOFLo':W_}_. 5\f/r0Et Ye2$D!zĿFebuFTkl4 X i$ڀ ;<9LtT#/g+g2=-!pdB<7?D'Ї'+?O ? /4XH 2I!!=/ _:Hkw}L?`&RZ夀i`k q 1[oL_e\&G T_&1fz"_۱Ne"tjV?`ěb]}9Iw/;  P:`}J0}%`x6f#,I:&(mh*  _<&@J@ p4jH 0x4@0yW/f߻?XK_ڢ]N&(X 0zM58&pg6Lsd . (d0^Lw^@k|yL}¼oƖ˚u LR jaėk#{HܒxcLvXN,{(ޟP'D[l047z|)аTv 1eȏ<F a|/$Iis2+en%\[@ gźo0 OokZ'yYh3a\=|>7< 2?A?I H lWCes}lo`Ěhd/hi9J4ϱ8d1B,7)3{XvN蜗my><}D0./Q4?`7 ͅ6MYffl P8}ד-"t?&?$ӿ.iK&{DzVҿ-`f,,eHO (L 1KDҢ<3FwJ4^/xu3vYGK2ׁZK#@rt oT8?]fTc}D@[&@΀2ig1ybw ) -?@LwVt>=\ u)d_o+4dLҼDbZ8r-vOhѹv_1_b` M1H (֬F &@K$at 4|a,!d]Hk7b2,=mZ_}_ж 1듛?lCwu $ 4A`o(~MC!)N%;w|mS5м 6$@k^^hAl\& 7^ xf妈ƅlojlE* =؁M a@[$gt/ Xme^.o{DP2_<3?$}7Z +fX e y&Hi^%G+&4?a<{C1/֦Wwo]l(AQ/a4?0VH\J&@Nr@ O^$Pğ ~#}a?toqMr5;ſv+c3L1BhFF,W/ 7g;( σTTRw Df{x1DƄ5~]"Cp6%+kL$@$rY@i#`%lqXTe{Xwqr{Ѐ?` & z,/$@$>@$o# p+ sd35] Ob4}ſ"`MttEzv軗ȃh$D=4X` pĄ13Aӗev<;t2x^trcn/"&@'[ɡ!ℹj] !MĜ#&9`’szg)G!/ӽ'feb i&֨IIDAT8ݜ ` `I@V4D ^# 8GlA+D;omD|; ,i"*-߾3N5[J݄:OꜷuIc"UG~AcOPZ|ڬ;o-X-0X0t4@#`f@ROcGebA?&@i`?`$Ief YSg4{q+E@+&J{>#6t5\ n@3VN)D?h@` 9W(gE% [js! A`` d} 3?(m`ݺh5.B#zZB/ c 02D5kt y~e#I3sWV+*v-1]z!0)#hۍyfEi)02gcwoS_k1! 7<(/ÌĮɏYP45Vo!S _Z/~zG\/g0 0d,K$. #%3t2B`W6&r_rIw\Pb f@RٝB ~7+&BfV `-L&x%aF@NB>#`3 0b:9,! Lx! p( a,1S3 huD{%-cDي0G oi'FB-WqwEz 57A17 Uոd߾p_ۃG ięIMn-\6&  ,0_ЖP .K#D쇊T?y;ygM),``# b*| #K6U? tҒw̗C-r[#(C!u-ސ?Uov]Grj0\P]y&@3H  :/x֬?bM<ໞFkXtY旓&CSz?Y{Ŀ_Dyqw:MvR4@ࢷʫjXE,bX-W4,j~pUMO#0 X]fn1L Ӟ[+ )[}Y?D1:,3Ef.C +h(#4/($l 0 +ׄDk i|{\rU%G&l_Dy٘!0 wW0 ׹F1ͮsc7JьT H">ڢgEmno'"wugDn b$tuX9[4Z~s?VY?1< Fft~-;`D^*wڞ!_^눅CW_?5DhfdQ9f@fq-uܚsT<V-D?wj&@L4V?5#cvyJtSo-]0 R.}b(wi Jm\?(n+0! D7ij}`V:wjX_\slІ ݮ'_F@f@ S`],V]OdcQ?dn002 e4ӆ\jy-Qmr΍0 Ȳፀf@BвlX#S㽓#%#0`\&x gHf@p1%PW} Qf,+dm hظOݕ&6ї2r ݪ+{9žМ}N6 hx](b n̈́м&fAо0^y7L~T# pff@\2U%+@;z=}5"0`&]0c4ۮ6Z?J,7~3?8r\L3^_^Z7'Q?mt~%{26et@myQn ?Vm+ PbB+eĕ]XծYc)W' <QyN6Z&$VȺ0!_>* r \!0D:D7?pLO"53f0IlYO4M ~K?u1ܽ" ݽ@i#`h3!Vel&k /";_ԗi0`]LF?Fl؜`וS=D|0`&@Q3 [)Pc({D?0`EMWМ!]Vvt@wqy.ոeո#Bf0,LMX-͙ ]`$EȾԁbuJT.3 u5Թ`$@TWtBbIWrP?`7uvycْ5eubUD0VzGfW/vX})@[L'}?``t=)r?``Xt'h]ֺ.?``bש'V-zoˈ m~g6Mݼ{' ?& 00  L@e*?9Ejc<5?@ c6OQw>y3?& 007#߰9'N@``@i?}@&0 ?Jo[776O` 00  L?``  O>|QyI?@Y(6  L?``  @E $jBuss>y00  L?`` 01A'l6[D# AF |ăO `j Xq+n 0`M?`pɇ:G#q~Ɔ;!{wl0 EQ(`n pT*$zȏsFH+I < ?t%Щk;_q1PՌйO`G < \^0f/z 8j8-U?@x0@#`i} 7WIENDB`qtpass-1.1.0/changelog000077700000000000000000000000001265137067200177762debian/changelogustar00rootroot00000000000000qtpass-1.1.0/configdialog.cpp000066400000000000000000000510251265137067200161710ustar00rootroot00000000000000#include "configdialog.h" #include "ui_configdialog.h" #include "mainwindow.h" #include "keygendialog.h" #include #include #include #ifdef Q_OS_WIN #include #endif /** * @brief ConfigDialog::ConfigDialog * @param parent */ ConfigDialog::ConfigDialog(MainWindow *parent) : QDialog(parent), ui(new Ui::ConfigDialog) { mainWindow = parent; ui->setupUi(this); ui->profileTable->verticalHeader()->hide(); ui->profileTable->horizontalHeader()->setStretchLastSection(true); ui->label->setText(ui->label->text() + VERSION); ui->comboBoxClipboard->clear(); ui->comboBoxClipboard->addItem(tr("No Clipboard")); ui->comboBoxClipboard->addItem(tr("Always copy to clipboard")); ui->comboBoxClipboard->addItem(tr("On-demand copy to clipboard")); ui->comboBoxClipboard->setCurrentIndex(0); } /** * @brief ConfigDialog::~ConfigDialog */ ConfigDialog::~ConfigDialog() { mainWindow->setGitExecutable(ui->gitPath->text()); mainWindow->setGpgExecutable(ui->gpgPath->text()); mainWindow->setPassExecutable(ui->passPath->text()); } /** * @brief ConfigDialog::setPassPath * @param path */ void ConfigDialog::setPassPath(QString path) { ui->passPath->setText(path); } /** * @brief ConfigDialog::setGitPath * @param path */ void ConfigDialog::setGitPath(QString path) { ui->gitPath->setText(path); if (path.isEmpty()) { useGit(false); ui->checkBoxUseGit->setEnabled(false); } else { ui->checkBoxUseGit->setEnabled(true); } } /** * @brief ConfigDialog::setGpgPath * @param path */ void ConfigDialog::setGpgPath(QString path) { ui->gpgPath->setText(path); } /** * @brief ConfigDialog::setStorePath * @param path */ void ConfigDialog::setStorePath(QString path) { ui->storePath->setText(path); } /** * @brief ConfigDialog::getPassPath * @return */ QString ConfigDialog::getPassPath() { return ui->passPath->text(); } /** * @brief ConfigDialog::getGitPath * @return */ QString ConfigDialog::getGitPath() { return ui->gitPath->text(); } /** * @brief ConfigDialog::getGpgPath * @return */ QString ConfigDialog::getGpgPath() { return ui->gpgPath->text(); } /** * @brief ConfigDialog::getStorePath * @return */ QString ConfigDialog::getStorePath() { return ui->storePath->text(); } /** * @brief ConfigDialog::usePass * @return */ bool ConfigDialog::usePass() { return ui->radioButtonPass->isChecked(); } /** * @brief ConfigDialog::usePass * @param pass */ void ConfigDialog::usePass(bool usePass) { if (usePass) { ui->radioButtonNative->setChecked(false); ui->radioButtonPass->setChecked(true); } else { ui->radioButtonNative->setChecked(true); ui->radioButtonPass->setChecked(false); } setGroupBoxState(); } /** * @brief ConfigDialog::on_radioButtonNative_clicked */ void ConfigDialog::on_radioButtonNative_clicked() { setGroupBoxState(); } /** * @brief ConfigDialog::on_radioButtonPass_clicked */ void ConfigDialog::on_radioButtonPass_clicked() { setGroupBoxState(); } /** * @brief ConfigDialog::setGroupBoxState */ void ConfigDialog::setGroupBoxState() { if (ui->radioButtonPass->isChecked()) { ui->groupBoxNative->setEnabled(false); ui->groupBoxPass->setEnabled(true); } else { ui->groupBoxNative->setEnabled(true); ui->groupBoxPass->setEnabled(false); } } /** * @brief ConfigDialog::selectExecutable * @return */ QString ConfigDialog::selectExecutable() { QFileDialog dialog(this); dialog.setFileMode(QFileDialog::ExistingFile); dialog.setOption(QFileDialog::ReadOnly); if (dialog.exec()) return dialog.selectedFiles().first(); else return ""; } /** * @brief ConfigDialog::selectFolder * @return */ QString ConfigDialog::selectFolder() { QFileDialog dialog(this); dialog.setFileMode(QFileDialog::Directory); dialog.setFilter(QDir::NoFilter); dialog.setOption(QFileDialog::ShowDirsOnly); if (dialog.exec()) return dialog.selectedFiles().first(); else return ""; } /** * @brief ConfigDialog::on_toolButtonGit_clicked */ void ConfigDialog::on_toolButtonGit_clicked() { QString git = selectExecutable(); if (!git.isEmpty()) { ui->gitPath->setText(git); ui->checkBoxUseGit->setEnabled(true); } else { useGit(false); ui->checkBoxUseGit->setEnabled(false); } } /** * @brief ConfigDialog::on_toolButtonGpg_clicked */ void ConfigDialog::on_toolButtonGpg_clicked() { QString gpg = selectExecutable(); if (!gpg.isEmpty()) ui->gpgPath->setText(gpg); } /** * @brief ConfigDialog::on_toolButtonPass_clicked */ void ConfigDialog::on_toolButtonPass_clicked() { QString pass = selectExecutable(); if (!pass.isEmpty()) ui->passPath->setText(pass); } /** * @brief ConfigDialog::on_toolButtonStore_clicked */ void ConfigDialog::on_toolButtonStore_clicked() { QString store = selectFolder(); if (!store.isEmpty()) // TODO(annejan) call check ui->storePath->setText(store); } /** * @brief ConfigDialog::on_comboBoxClipboard_activated */ void ConfigDialog::on_comboBoxClipboard_activated() { if (ui->comboBoxClipboard->currentIndex() > 0) { ui->checkBoxAutoclear->setEnabled(true); ui->checkBoxHidePassword->setEnabled(true); ui->checkBoxHideContent->setEnabled(true); if (ui->checkBoxAutoclear->isChecked()) { ui->spinBoxAutoclearSeconds->setEnabled(true); ui->labelSeconds->setEnabled(true); } else { ui->spinBoxAutoclearSeconds->setEnabled(false); ui->labelSeconds->setEnabled(false); } } else { ui->checkBoxAutoclear->setEnabled(false); ui->spinBoxAutoclearSeconds->setEnabled(false); ui->labelSeconds->setEnabled(false); ui->checkBoxHidePassword->setEnabled(false); ui->checkBoxHideContent->setEnabled(false); } } /** * @brief ConfigDialog::on_checkBoxAutoclearPanel_clicked */ void ConfigDialog::on_checkBoxAutoclearPanel_clicked() { if (ui->checkBoxAutoclearPanel->isChecked()) { ui->spinBoxAutoclearPanelSeconds->setEnabled(true); ui->labelPanelSeconds->setEnabled(true); } else { ui->spinBoxAutoclearPanelSeconds->setEnabled(false); ui->labelPanelSeconds->setEnabled(false); } } /** * @brief ConfigDialog::useClipboard */ void ConfigDialog::useClipboard(MainWindow::clipBoardType useClipboard) { ui->comboBoxClipboard->setCurrentIndex(static_cast(useClipboard)); on_comboBoxClipboard_activated(); } /** * @brief ConfigDialog::useAutoclear * @param useAutoclear */ void ConfigDialog::useAutoclear(bool useAutoclear) { ui->checkBoxAutoclear->setChecked(useAutoclear); on_checkBoxAutoclear_clicked(); } /** * @brief ConfigDialog::setAutoclear * @param seconds */ void ConfigDialog::setAutoclear(int seconds) { ui->spinBoxAutoclearSeconds->setValue(seconds); } /** * @brief ConfigDialog::useAutoclearPanel * @param useAutoclearPanel */ void ConfigDialog::useAutoclearPanel(bool useAutoclearPanel) { ui->checkBoxAutoclearPanel->setChecked(useAutoclearPanel); on_checkBoxAutoclearPanel_clicked(); } /** * @brief ConfigDialog::setAutoclearPanel * @param seconds */ void ConfigDialog::setAutoclearPanel(int seconds) { ui->spinBoxAutoclearPanelSeconds->setValue(seconds); } /** * @brief ConfigDialog::useClipboard * @return */ MainWindow::clipBoardType ConfigDialog::useClipboard() { return static_cast( ui->comboBoxClipboard->currentIndex()); } /** * @brief ConfigDialog::useAutoclear * @return */ bool ConfigDialog::useAutoclear() { return ui->checkBoxAutoclear->isChecked(); } /** * @brief ConfigDialog::getAutoclear * @return */ int ConfigDialog::getAutoclear() { return ui->spinBoxAutoclearSeconds->value(); } /** * @brief ConfigDialog::on_checkBoxAutoclear_clicked */ void ConfigDialog::on_checkBoxAutoclear_clicked() { on_comboBoxClipboard_activated(); } /** * @brief ConfigDialog::useAutoclearPanel * @return */ bool ConfigDialog::useAutoclearPanel() { return ui->checkBoxAutoclearPanel->isChecked(); } /** * @brief ConfigDialog::getAutoclearPanel * @return */ int ConfigDialog::getAutoclearPanel() { return ui->spinBoxAutoclearPanelSeconds->value(); } /** * @brief ConfigDialog::hidePassword * @return */ bool ConfigDialog::hidePassword() { return ui->checkBoxHidePassword->isChecked(); } /** * @brief ConfigDialog::hideContent * @return */ bool ConfigDialog::hideContent() { return ui->checkBoxHideContent->isChecked(); } /** * @brief ConfigDialog::hidePassword * @param hidePassword */ void ConfigDialog::hidePassword(bool hidePassword) { ui->checkBoxHidePassword->setChecked(hidePassword); } /** * @brief ConfigDialog::hideContent * @param hideContent */ void ConfigDialog::hideContent(bool hideContent) { ui->checkBoxHideContent->setChecked(hideContent); } /** * @brief ConfigDialog::addGPGId * @return */ bool ConfigDialog::addGPGId() { return ui->checkBoxAddGPGId->isChecked(); } /** * @brief ConfigDialog::addGPGId * @param addGPGId */ void ConfigDialog::addGPGId(bool addGPGId) { ui->checkBoxAddGPGId->setChecked(addGPGId); } /** * @brief ConfigDialog::genKey * @param QString batch */ void ConfigDialog::genKey(QString batch, QDialog *dialog) { mainWindow->generateKeyPair(batch, dialog); } /** * @brief ConfigDialog::setProfiles * @param profiles * @param profile */ void ConfigDialog::setProfiles(QHash profiles, QString profile) { // qDebug() << profiles; if (profiles.contains("")) { profiles.remove(""); // remove weird "" key value pairs } ui->profileTable->setRowCount(profiles.count()); QHashIterator i(profiles); int n = 0; while (i.hasNext()) { i.next(); if (!i.value().isEmpty() && !i.key().isEmpty()) { ui->profileTable->setItem(n, 0, new QTableWidgetItem(i.key())); ui->profileTable->setItem(n, 1, new QTableWidgetItem(i.value())); // qDebug() << "naam:" + i.key(); if (i.key() == profile) ui->profileTable->selectRow(n); } ++n; } } /** * @brief ConfigDialog::getProfiles * @return */ QHash ConfigDialog::getProfiles() { QHash profiles; // Check? for (int i = 0; i < ui->profileTable->rowCount(); ++i) { QTableWidgetItem *pathItem = ui->profileTable->item(i, 1); if (0 != pathItem) { QTableWidgetItem *item = ui->profileTable->item(i, 0); if (item == 0) { qDebug() << "empty name, shoud fix in frontend"; continue; } profiles.insert(item->text(), pathItem->text()); } } return profiles; } /** * @brief ConfigDialog::on_addButton_clicked */ void ConfigDialog::on_addButton_clicked() { int n = ui->profileTable->rowCount(); ui->profileTable->insertRow(n); ui->profileTable->setItem(n, 1, new QTableWidgetItem(ui->storePath->text())); ui->profileTable->selectRow(n); ui->deleteButton->setEnabled(true); } /** * @brief ConfigDialog::on_deleteButton_clicked */ void ConfigDialog::on_deleteButton_clicked() { QSet selectedRows; // we use a set to prevent doubles QList itemList = ui->profileTable->selectedItems(); if (itemList.count() == 0) { QMessageBox::warning(this, tr("No profile selected"), tr("No profile selected to delete")); return; } QTableWidgetItem *item; foreach(item, itemList) selectedRows.insert(item->row()); // get a list, and sort it big to small QList rows = selectedRows.toList(); qSort(rows.begin(), rows.end()); // now actually do the removing: foreach(int row, rows) ui->profileTable->removeRow(row); if (ui->profileTable->rowCount() < 1) ui->deleteButton->setEnabled(false); } void ConfigDialog::criticalMessage(const QString &title, const QString &text) { QMessageBox::critical(this, title, text, QMessageBox::Ok, QMessageBox::Ok); } /** * @brief ConfigDialog::wizard */ void ConfigDialog::wizard() { // mainWindow->checkConfig(); bool clean = false; QString gpg = ui->gpgPath->text(); // QString gpg = mainWindow->getGpgExecutable(); if (!QFile(gpg).exists()) { criticalMessage( tr("GnuPG not found"), tr("Please install GnuPG on your system.
Install " "gpg using your favorite package manager
or download it " "from GnuPG.org")); clean = true; } QStringList names = mainWindow->getSecretKeys(); qDebug() << names; if (QFile(gpg).exists() && names.empty()) { KeygenDialog d(this); if (!d.exec()) return; } QString passStore = ui->storePath->text(); if (!QFile(passStore).exists()) { // TODO(annejan) pass version? if (QMessageBox::question( this, tr("Create password-store?"), tr("Would you like to create a password-store at %1?") .arg(passStore), QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes) { QDir().mkdir(passStore); #ifdef Q_OS_WIN SetFileAttributes(passStore.toStdWString().c_str(), FILE_ATTRIBUTE_HIDDEN); #endif if (useGit()) mainWindow->executePassGitInit(); mainWindow->userDialog(passStore); } } if (!QFile(passStore + ".gpg-id").exists()) { qDebug() << ".gpg-id file does not exist"; if (!clean) { criticalMessage(tr("Password store not initialised"), tr("The folder %1 doesn't seem to be a password store or " "is not yet initialised.") .arg(passStore)); } while (!QFile(passStore).exists()) { on_toolButtonStore_clicked(); // allow user to cancel if (passStore == ui->storePath->text()) return; passStore = ui->storePath->text(); } if (!QFile(passStore + ".gpg-id").exists()) { qDebug() << ".gpg-id file still does not exist :/"; // appears not to be store // init yes / no ? mainWindow->userDialog(passStore); } } } /** * @brief ConfigDialog::useTrayIcon * @return */ bool ConfigDialog::useTrayIcon() { return ui->checkBoxUseTrayIcon->isChecked(); } /** * @brief ConfigDialog::hideOnClose * @return */ bool ConfigDialog::hideOnClose() { return ui->checkBoxHideOnClose->isEnabled() && ui->checkBoxHideOnClose->isChecked(); } /** * @brief ConfigDialog::useTrayIcon * @param useSystray */ void ConfigDialog::useTrayIcon(bool useSystray) { ui->checkBoxUseTrayIcon->setChecked(useSystray); ui->checkBoxHideOnClose->setEnabled(useSystray); ui->checkBoxStartMinimized->setEnabled(useSystray); if (!useSystray) { ui->checkBoxHideOnClose->setChecked(false); ui->checkBoxStartMinimized->setChecked(false); } } /** * @brief ConfigDialog::hideOnClose * @param hideOnClose */ void ConfigDialog::hideOnClose(bool hideOnClose) { ui->checkBoxHideOnClose->setChecked(hideOnClose); } /** * @brief ConfigDialog::on_checkBoxUseTrayIcon_clicked */ void ConfigDialog::on_checkBoxUseTrayIcon_clicked() { if (ui->checkBoxUseTrayIcon->isChecked()) { ui->checkBoxHideOnClose->setEnabled(true); ui->checkBoxStartMinimized->setEnabled(true); } else { ui->checkBoxStartMinimized->setEnabled(false); ui->checkBoxHideOnClose->setEnabled(false); } } /** * @brief ConfigDialog::closeEvent * @param event */ void ConfigDialog::closeEvent(QCloseEvent *event) { // TODO(annejan) save window size or something? event->accept(); } /** * @brief ConfigDialog::useGit * @param useGit */ void ConfigDialog::useGit(bool useGit) { ui->checkBoxUseGit->setChecked(useGit); on_checkBoxUseGit_clicked(); } /** * @brief ConfigDialog::useGit * @return */ bool ConfigDialog::useGit() { return ui->checkBoxUseGit->isChecked(); } /** * @brief ConfigDialog::on_checkBoxUseGit_clicked */ void ConfigDialog::on_checkBoxUseGit_clicked() { ui->checkBoxAddGPGId->setEnabled(ui->checkBoxUseGit->isChecked()); ui->checkBoxAutoPull->setEnabled(ui->checkBoxUseGit->isChecked()); ui->checkBoxAutoPush->setEnabled(ui->checkBoxUseGit->isChecked()); } /** * @brief ConfigDialog::on_toolButtonPwgen_clicked */ void ConfigDialog::on_toolButtonPwgen_clicked() { QString pwgen = selectExecutable(); if (!pwgen.isEmpty()) { ui->pwgenPath->setText(pwgen); ui->checkBoxUsePwgen->setEnabled(true); } else { ui->checkBoxUsePwgen->setEnabled(false); ui->checkBoxUsePwgen->setChecked(false); } } /** * @brief ConfigDialog::getPwgenPath * @return */ QString ConfigDialog::getPwgenPath() { return ui->pwgenPath->text(); } /** * @brief ConfigDialog::setPwgenPath * @param pwgen */ void ConfigDialog::setPwgenPath(QString pwgen) { ui->pwgenPath->setText(pwgen); if (pwgen.isEmpty()) { ui->checkBoxUsePwgen->setChecked(false); ui->checkBoxUsePwgen->setEnabled(false); } on_checkBoxUsePwgen_clicked(); } /** * @brief ConfigDialog::on_checkBoxUsPwgen_clicked */ void ConfigDialog::on_checkBoxUsePwgen_clicked() { ui->checkBoxUseSymbols->setEnabled(ui->checkBoxUsePwgen->isChecked()); ui->lineEditPasswordChars->setEnabled(!ui->checkBoxUsePwgen->isChecked()); ui->labelPasswordChars->setEnabled(!ui->checkBoxUsePwgen->isChecked()); } /** * @brief ConfigDialog::usePwgen * @param usePwgen */ void ConfigDialog::usePwgen(bool usePwgen) { if (ui->pwgenPath->text().isEmpty()) usePwgen = false; ui->checkBoxUsePwgen->setChecked(usePwgen); on_checkBoxUsePwgen_clicked(); } /** * @brief ConfigDialog::useSymbols * @param useSymbols */ void ConfigDialog::useSymbols(bool useSymbols) { ui->checkBoxUseSymbols->setChecked(useSymbols); } /** * @brief ConfigDialog::setPasswordLength * @param pwLen */ void ConfigDialog::setPasswordLength(int pwLen) { ui->spinBoxPasswordLength->setValue(pwLen); } void ConfigDialog::setPasswordChars(QString pwChars) { ui->lineEditPasswordChars->setText(pwChars); } /** * @brief ConfigDialog::usePwgen * @return */ bool ConfigDialog::usePwgen() { return ui->checkBoxUsePwgen->isChecked(); } /** * @brief ConfigDialog::useSymbols * @return */ bool ConfigDialog::useSymbols() { return ui->checkBoxUseSymbols->isChecked(); } /** * @brief ConfigDialog::getPasswordLength * @return */ int ConfigDialog::getPasswordLength() { return ui->spinBoxPasswordLength->value(); } /** * @brief ConfigDialog::getPasswordChars * @return */ QString ConfigDialog::getPasswordChars() { return ui->lineEditPasswordChars->text(); } /** * @brief ConfigDialog::startMinimized * @return */ bool ConfigDialog::startMinimized() { return ui->checkBoxStartMinimized->isChecked(); } /** * @brief ConfigDialog::startMinimized * @param startMinimized */ void ConfigDialog::startMinimized(bool startMinimized) { ui->checkBoxStartMinimized->setChecked(startMinimized); } /** * @brief ConfigDialog::on_checkBoxUseTemplate_clicked */ void ConfigDialog::on_checkBoxUseTemplate_clicked() { ui->plainTextEditTemplate->setEnabled(ui->checkBoxUseTemplate->isChecked()); ui->checkBoxTemplateAllFields->setEnabled( ui->checkBoxUseTemplate->isChecked()); } /** * @brief ConfigDialog::useTemplate * @param useTemplate */ void ConfigDialog::useTemplate(bool useTemplate) { ui->checkBoxUseTemplate->setChecked(useTemplate); on_checkBoxUseTemplate_clicked(); } /** * @brief ConfigDialog::useTemplate * @return */ bool ConfigDialog::useTemplate() { return ui->checkBoxUseTemplate->isChecked(); } /** * @brief ConfigDialog::setTemplate * @param passTemplate */ void ConfigDialog::setTemplate(QString passTemplate) { ui->plainTextEditTemplate->setPlainText(passTemplate); } /** * @brief ConfigDialog::getTemplate * @return */ QString ConfigDialog::getTemplate() { return ui->plainTextEditTemplate->toPlainText(); } /** * @brief ConfigDialog::autoPull * @param autoPull */ void ConfigDialog::autoPull(bool autoPull) { ui->checkBoxAutoPull->setChecked(autoPull); } /** * @brief ConfigDialog::autoPush * @param autoPush */ void ConfigDialog::autoPush(bool autoPush) { ui->checkBoxAutoPush->setChecked(autoPush); } /** * @brief ConfigDialog::autoPull * @return */ bool ConfigDialog::autoPull() { return ui->checkBoxAutoPull->isChecked(); } /** * @brief ConfigDialog::autoPush * @return */ bool ConfigDialog::autoPush() { return ui->checkBoxAutoPush->isChecked(); } /** * @brief ConfigDialog::templateAllFields * @return */ bool ConfigDialog::templateAllFields() { return ui->checkBoxTemplateAllFields->isChecked(); } /** * @brief ConfigDialog::templateAllFields * @param templateAll */ void ConfigDialog::templateAllFields(bool templateAll) { ui->checkBoxTemplateAllFields->setChecked(templateAll); } /** * @brief ConfigDialog::alwaysOnTop * @param alwaysOnTop */ void ConfigDialog::alwaysOnTop(bool alwaysOnTop) { ui->checkBoxAlwaysOnTop->setChecked(alwaysOnTop); } /** * @brief ConfigDialog::alwaysOnTop * @return */ bool ConfigDialog::alwaysOnTop() { return ui->checkBoxAlwaysOnTop->isChecked(); } qtpass-1.1.0/configdialog.h000066400000000000000000000062071265137067200156400ustar00rootroot00000000000000#ifndef CONFIGDIALOG_H_ #define CONFIGDIALOG_H_ #include #include #include #include #include "mainwindow.h" namespace Ui { struct UserInfo; class ConfigDialog; } class ConfigDialog : public QDialog { Q_OBJECT public: explicit ConfigDialog(MainWindow *parent); ~ConfigDialog(); void setPassPath(QString); void setGitPath(QString); void setGpgPath(QString); void setStorePath(QString); void setProfiles(QHash, QString); void usePass(bool usePass); void useClipboard(MainWindow::clipBoardType); void useAutoclear(bool useAutoclear); void setAutoclear(int seconds); void useAutoclearPanel(bool useAutoclearPanel); void setAutoclearPanel(int seconds); void hidePassword(bool hidePassword); void hideContent(bool hideContent); void addGPGId(bool addGPGId); QString getPassPath(); QString getGitPath(); QString getGpgPath(); QString getStorePath(); QHash getProfiles(); bool usePass(); MainWindow::clipBoardType useClipboard(); bool useAutoclear(); int getAutoclear(); bool useAutoclearPanel(); int getAutoclearPanel(); bool hidePassword(); bool hideContent(); bool addGPGId(); void wizard(); void genKey(QString, QDialog *); bool useTrayIcon(); bool hideOnClose(); bool startMinimized(); void useTrayIcon(bool useTrayIdon); void hideOnClose(bool hideOnClose); void startMinimized(bool startMinimized); void useGit(bool useGit); bool useGit(); QString getPwgenPath(); void setPwgenPath(QString); void usePwgen(bool usePwgen); void useSymbols(bool useSymbols); void setPasswordLength(int pwLen); void setPasswordChars(QString); bool usePwgen(); bool useSymbols(); int getPasswordLength(); QString getPasswordChars(); bool useTemplate(); void useTemplate(bool useTemplate); QString getTemplate(); void setTemplate(QString); void templateAllFields(bool templateAllFields); bool templateAllFields(); bool autoPull(); void autoPull(bool autoPull); bool autoPush(); void autoPush(bool autoPush); bool alwaysOnTop(); void alwaysOnTop(bool alwaysOnTop); protected: void closeEvent(QCloseEvent *event); private slots: void on_radioButtonNative_clicked(); void on_radioButtonPass_clicked(); void on_toolButtonGit_clicked(); void on_toolButtonGpg_clicked(); void on_toolButtonPwgen_clicked(); void on_toolButtonPass_clicked(); void on_toolButtonStore_clicked(); void on_comboBoxClipboard_activated(); void on_checkBoxAutoclear_clicked(); void on_checkBoxAutoclearPanel_clicked(); void on_addButton_clicked(); void on_deleteButton_clicked(); void on_checkBoxUseTrayIcon_clicked(); void on_checkBoxUseGit_clicked(); void on_checkBoxUsePwgen_clicked(); void on_checkBoxUseTemplate_clicked(); private: QScopedPointer ui; void setGroupBoxState(); QString selectExecutable(); QString selectFolder(); // QMessageBox::critical with hack to avoid crashes with // Qt 5.4.1 when QApplication::exec was not yet called void criticalMessage(const QString &title, const QString &text); MainWindow *mainWindow; }; #endif // CONFIGDIALOG_H_ qtpass-1.1.0/configdialog.ui000066400000000000000000000636771265137067200160440ustar00rootroot00000000000000 ConfigDialog 0 0 561 526 Configuration 6 6 6 6 1 Settings 6 6 6 6 75 true Clipboard behaviour: 140 0 Autoclear after: 5 10 Seconds Qt::Horizontal 40 20 75 true Password Behaviour: 0 Hide content Hide password Autoclear panel after: 5 10 55 0 Seconds 75 true Password Generation: Password Length: true 50 0 8 16 true Characters Qt::Horizontal QSizePolicy::Expanding 40 20 true Use characters: true ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 0 true Use pwgen true Include special symbols 75 true Git: true Use git 0 Automatically add .gpg-id files Automatically push Automatically pull 0 75 true System: 0 Use TrayIcon Start minimized Hide on close Always on top Programs 6 6 6 6 Select password storage program: Nati&ve git/gpg &Use pass 0 0 0 0 Native git ... ... gpg pwgen ... Pass QLayout::SetMinimumSize pass ... <html><head/><body><p><a href="http://www.passwordstore.org/"><span style=" text-decoration: underline; color:#0000ff;">www.passwordstore.org</span></a></p></body></html> true Qt::Vertical 20 40 Profiles 6 6 6 6 QAbstractItemView::DoubleClicked|QAbstractItemView::EditKeyPressed|QAbstractItemView::SelectedClicked true QAbstractItemView::SingleSelection QAbstractItemView::SelectRows true Name Path Add .. Qt::ToolButtonFollowStyle Delete .. Qt::ToolButtonFollowStyle Current password-store ... Template 6 6 6 6 Templates add extra fields in the password generation dialouge and in the password view. Use template Show all lines beginning with a word followed by a colon as fields in password fields, not only the listed ones Show all fields templated login url email <a href="http://QtPass.org/">QtPass</a> version true Qt::Horizontal 40 20 Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok tabWidget radioButtonNative radioButtonPass gpgPath toolButtonGpg gitPath toolButtonGit pwgenPath toolButtonPwgen passPath toolButtonPass profileTable addButton deleteButton storePath toolButtonStore buttonBox rejected() ConfigDialog reject() 484 204 286 214 buttonBox accepted() ConfigDialog accept() 484 204 157 214 qtpass-1.1.0/debian/000077500000000000000000000000001265137067200142575ustar00rootroot00000000000000qtpass-1.1.0/debian/changelog000066400000000000000000000002161265137067200161300ustar00rootroot00000000000000qtpass (0.9) trusty; urgency=low * Release candidate -- Anne Jan Brouwer (JinX) Thu, 30 Jul 2015 16:27:11 +0200 qtpass-1.1.0/debian/compat000066400000000000000000000000021265137067200154550ustar00rootroot000000000000009 qtpass-1.1.0/debian/control000066400000000000000000000017011265137067200156610ustar00rootroot00000000000000Source: qtpass Section: utils Priority: optional Maintainer: Anne Jan Brouwer Build-Depends: qt5-default, qt5-qmake Homepage: http://qtpass.org/ Vcs-Browser: https://github.com/IJHack/qtpass Vcs-Git: git@github.com:IJHack/qtpass.git Package: qtpass Architecture: any Depends: ${shlibs:Depends} Suggests: pass Description: QtPass is a multi-platform GUI for pass, the standard unix password manager. Features: * Using pass or git and gpg2 directly * Cross platform: Linux, BSD, OS X and Windows * Reading pass password stores * Decrypting and displaying the password and related info * Editing and adding of passwords and information * Updating to and from a git repository * Per-folder user selection for multi recipient encryption * Configuration options for backends and executable/folder locations * Copying password to clipboard * Configurable shoulder surfing protection options * Experimental WebDAV support qtpass-1.1.0/debian/rules000077500000000000000000000001631265137067200153370ustar00rootroot00000000000000#!/usr/bin/make -f %: dh $@ override_dh_auto_install: $(MAKE) DESTDIR=$$(pwd)/debian/qtpass prefix=/usr install qtpass-1.1.0/icons/000077500000000000000000000000001265137067200141505ustar00rootroot00000000000000qtpass-1.1.0/icons/applications-system.svg000066400000000000000000000010761265137067200207050ustar00rootroot00000000000000Star 1qtpass-1.1.0/icons/document-new.svg000066400000000000000000000003111265137067200172710ustar00rootroot00000000000000Rectangle 5 Copy 3qtpass-1.1.0/icons/document-properties.svg000066400000000000000000000004471265137067200207060ustar00rootroot00000000000000Editqtpass-1.1.0/icons/edit-clear.svg000066400000000000000000000006231265137067200167030ustar00rootroot00000000000000Clearqtpass-1.1.0/icons/edit-copy.svg000066400000000000000000000003701265137067200165660ustar00rootroot00000000000000Copy Iconqtpass-1.1.0/icons/edit-delete.svg000066400000000000000000000004501265137067200170550ustar00rootroot00000000000000Rectangle 5 Copy 3qtpass-1.1.0/icons/go-bottom.svg000066400000000000000000000002731265137067200166020ustar00rootroot00000000000000Pushqtpass-1.1.0/icons/go-top.svg000066400000000000000000000003021265137067200160710ustar00rootroot00000000000000Arrow Downqtpass-1.1.0/icons/x-office-address-book.svg000066400000000000000000000006571265137067200207540ustar00rootroot00000000000000Userqtpass-1.1.0/key_management.bat000066400000000000000000000000261265137067200165070ustar00rootroot00000000000000start gpg4win\gpa.exe qtpass-1.1.0/keygendialog.cpp000066400000000000000000000067501265137067200162130ustar00rootroot00000000000000#include "keygendialog.h" #include #include #include "ui_keygendialog.h" #include "qprogressindicator.h" KeygenDialog::KeygenDialog(ConfigDialog *parent) : QDialog(parent), ui(new Ui::KeygenDialog) { ui->setupUi(this); dialog = parent; } KeygenDialog::~KeygenDialog() { delete ui; } void KeygenDialog::on_passphrase1_textChanged(const QString &arg1) { if (ui->passphrase1->text() == ui->passphrase2->text()) { ui->buttonBox->setEnabled(true); replace("Passphrase", arg1); if (arg1 == "") no_protection(true); else no_protection(false); } else { ui->buttonBox->setEnabled(false); } } void KeygenDialog::on_passphrase2_textChanged(const QString &arg1) { on_passphrase1_textChanged(arg1); } void KeygenDialog::on_checkBox_stateChanged(int arg1) { if (arg1) { ui->plainTextEdit->setReadOnly(false); ui->plainTextEdit->setEnabled(true); } else { ui->plainTextEdit->setReadOnly(true); ui->plainTextEdit->setEnabled(false); } } void KeygenDialog::on_email_textChanged(const QString &arg1) { replace("Name-Email", arg1); } void KeygenDialog::on_name_textChanged(const QString &arg1) { replace("Name-Real", arg1); } /** * @brief KeygenDialog::replace * @param key * @param value */ void KeygenDialog::replace(QString key, QString value) { QStringList clear; QString expert = ui->plainTextEdit->toPlainText(); QStringList lines = expert.split(QRegExp("[\r\n]"), QString::SkipEmptyParts); foreach(QString line, lines) { line.replace(QRegExp(key + ":.*"), key + ": " + value); if (key == "Passphrase") line.replace("%no-protection", "Passphrase: " + value); clear.append(line); } ui->plainTextEdit->setPlainText(clear.join("\n")); } /** * @brief KeygenDialog::no_protection * @param enable */ void KeygenDialog::no_protection(bool enable) { QStringList clear; QString expert = ui->plainTextEdit->toPlainText(); QStringList lines = expert.split(QRegExp("[\r\n]"), QString::SkipEmptyParts); foreach(QString line, lines) { bool remove = false; if (!enable) { if (line.indexOf("%no-protection") == 0) remove = true; } else { if (line.indexOf("Passphrase") == 0) line = "%no-protection"; } if (!remove) clear.append(line); } ui->plainTextEdit->setPlainText(clear.join("\n")); } /** * @brief KeygenDialog::done * @param r */ void KeygenDialog::done(int r) { if (QDialog::Accepted == r) { // ok was pressed ui->widget->setEnabled(false); ui->buttonBox->setEnabled(false); ui->checkBox->setEnabled(false); ui->plainTextEdit->setEnabled(false); QProgressIndicator *pi = new QProgressIndicator(); pi->startAnimation(); pi->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); ui->frame->hide(); ui->label->setText( QString("This operation can take some minutes.
") + "We need to generate a lot of random bytes. It is a good idea to " "perform " "some other action (type on the keyboard, move the mouse, utilize the " "disks) during the prime generation; this gives the random number " "generator a better chance to gain enough entropy."); this->layout()->addWidget(pi); this->show(); dialog->genKey(ui->plainTextEdit->toPlainText(), this); } else { // cancel, close or exc was pressed QDialog::done(r); return; } } void KeygenDialog::closeEvent(QCloseEvent *event) { // TODO(annejan) save window size or somethign event->accept(); } qtpass-1.1.0/keygendialog.h000066400000000000000000000014231265137067200156500ustar00rootroot00000000000000#ifndef KEYGENDIALOG_H_ #define KEYGENDIALOG_H_ #include #include #include "configdialog.h" namespace Ui { class KeygenDialog; } class KeygenDialog : public QDialog { Q_OBJECT public: explicit KeygenDialog(ConfigDialog *parent = 0); ~KeygenDialog(); protected: void closeEvent(QCloseEvent *event); private slots: void on_passphrase1_textChanged(const QString &arg1); void on_passphrase2_textChanged(const QString &arg1); void on_checkBox_stateChanged(int arg1); void on_email_textChanged(const QString &arg1); void on_name_textChanged(const QString &arg1); private: Ui::KeygenDialog *ui; void replace(QString, QString); void done(int r); void no_protection(bool enable); ConfigDialog *dialog; }; #endif // KEYGENDIALOG_H_ qtpass-1.1.0/keygendialog.ui000066400000000000000000000165311265137067200160440ustar00rootroot00000000000000 KeygenDialog 0 0 606 480 Generate GnuPG keypair 6 6 6 6 0 0 Generate a new key pair true QFrame::NoFrame QFrame::Plain 0 0 0 0 0 0 0 0 Passphrase Email QLineEdit::Password Name QLineEdit::Password <html><head/><body><p>There is no limit on the length of a passphrase, and it should be carefully chosen. From the perspective of security, the passphrase to unlock the private key is one of the weakest points in GnuPG (and other public-key encryption systems as well) since it is the only protection you have if another individual gets your private key. <br/>Ideally, the passphrase should not use words from a dictionary and should mix the case of alphabetic characters as well as use non-alphabetic characters.<br/>A good passphrase is crucial to the secure use of GnuPG.</p></body></html> true Expert false true # QtPass GPG key generator # # first test version please comment # %echo Generating a default key Key-Type: default Subkey-Type: default Name-Real: Name-Comment: QtPass Name-Email: Expire-Date: 0 %no-protection # Do a commit here, so that we can later print "done" :-) %commit %echo done Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse false For expert options check out the <a href="https://www.gnupg.org/documentation/manuals/gnupg/Unattended-GPG-key-generation.html">GnuPG manual</a> true Qt::LinksAccessibleByKeyboard|Qt::LinksAccessibleByMouse Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok email name passphrase1 passphrase2 checkBox plainTextEdit buttonBox accepted() KeygenDialog accept() 248 254 157 274 buttonBox rejected() KeygenDialog reject() 316 260 286 274 qtpass-1.1.0/localization/000077500000000000000000000000001265137067200155255ustar00rootroot00000000000000qtpass-1.1.0/localization/localization_ar_MA.ts000066400000000000000000001031711265137067200216270ustar00rootroot00000000000000 ConfigDialog Configuration Clipboard behaviour: Autoclear after: Password Behaviour: Autoclear panel after: Password Generation: Password Length: Use characters: Git: System: Programs Select password storage program: &Native git/gpg &Use pass Native git ... gpg pwgen Pass pass <html><head/><body><p><a href="http://www.passwordstore.org/"><span style=" text-decoration: underline; color:#0000ff;">www.passwordstore.org</span></a></p></body></html> Autoclear panel Autoclear Use characters Always on top login url email Settings Characters Use pwgen Seconds Hide password Use TrayIcon Hide content Use git Hide on close Include special symbols ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 Start minimized Automatically add .gpg-id files Automatically push Automatically pull Profiles Name Path Add Delete Current password-store Template Templates add extra fields in the password generation dialouge and in the password view. Use template Show all lines beginning with a word followed by a colon as fields in password fields, not only the listed ones Show all fields templated <a href="http://QtPass.org/">QtPass</a> version No Clipboard Always copy to clipboard On-demand copy to clipboard No profile selected No profile selected to delete GnuPG not found Please install GnuPG on your system.<br>Install <strong>gpg</strong> using your favorite package manager<br>or <a href="https://www.gnupg.org/download/#sec-1-2">download</a> it from GnuPG.org Create password-store? Would you like to create a password-store at %1? Password store not initialised The folder %1 doesn't seem to be a password store or is not yet initialised. KeygenDialog Generate GnuPG keypair Generate a new key pair Passphrase Email Name <html><head/><body><p>There is no limit on the length of a passphrase, and it should be carefully chosen. From the perspective of security, the passphrase to unlock the private key is one of the weakest points in GnuPG (and other public-key encryption systems as well) since it is the only protection you have if another individual gets your private key. <br/>Ideally, the passphrase should not use words from a dictionary and should mix the case of alphabetic characters as well as use non-alphabetic characters.<br/>A good passphrase is crucial to the secure use of GnuPG.</p></body></html> Expert # QtPass GPG key generator # # first test version please comment # %echo Generating a default key Key-Type: default Subkey-Type: default Name-Real: Name-Comment: QtPass Name-Email: Expire-Date: 0 %no-protection # Do a commit here, so that we can later print "done" :-) %commit %echo done For expert options check out the <a href="https://www.gnupg.org/documentation/manuals/gnupg/Unattended-GPG-key-generation.html">GnuPG manual</a> MainWindow QtPass Add Edit Delete Push Update Users Config Copy Password X <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Noto Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; font-weight:600; color:#333333;">QtPass</span><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; color:#333333;"> is a GUI for </span><a href="http://www.passwordstore.org/"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; text-decoration: underline; color:#4183c4; background-color:transparent;">pass</span></a><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; color:#333333;">, the standard unix password manager.</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; color:#333333;"><br />Please report any </span><a href="https://github.com/IJHack/qtpass/issues"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; text-decoration: underline; color:#4183c4;">issues</span></a><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; color:#333333;"> you might have with this software.</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://qtpass.org/"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; text-decoration: underline; color:#4183c4; background-color:transparent;">Documentation</span></a></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="https://github.com/IJHack/qtpass"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; text-decoration: underline; color:#4183c4; background-color:transparent;">Source code</span></a></p></body></html> qtpass Welcome to QtPass %1 Failed to connect WebDAV: QtPass WebDAV password Enter password to connect to WebDAV: fusedav exited unexpectedly Failed to start fusedav to connect WebDAV: Updating password-store New Folder: (Will be placed in %1 ) Password copied to clipboard Password hidden Add Password Add Folder Content hidden Clipboard cleared Clipboard not cleared Password and Content hidden QProcess::FailedToStart QProcess::Crashed QProcess::Timedout QProcess::ReadError QProcess::WriteError QProcess::UnknownError Looking for: %1 Can not edit Could not read encryption key to use, .gpg-id file missing or invalid. New file Delete password? Are you sure you want to delete %1? Delete folder? Selected password file does not exist, not able to edit New password file: (Will be placed in %1 ) Can not get key list Unable to get list of available gpg keys Key not found in keyring Cannot update Failed to open .gpg-id for writing. Check selected users! None of the selected keys have a secret key available. You will not be able to decrypt any newly added passwords! Generating GPG key pair Profile changed to %1 Add folder Add password No characters chosen Can't generate password, there are no characters to choose from set in the configuration! Timed out Can't start process, previous one is still running! PasswordDialog Password Generate Show password QObject LTR Flips interface RTL TrayIcon &Quit UsersDialog Read access users Select which users should be able to decrypt passwords stored in this folder. Note: Existing files will not be modified and retain the old permissions until you edit them. Blue entries have a secret key available, select one of these to be able to decrypt. Red entries are not valid, you will not be able to encrypt to these. X Show unusable keys created expires qtpass-1.1.0/localization/localization_de_DE.ts000077500000000000000000001513461265137067200216220ustar00rootroot00000000000000 ConfigDialog Configuration Einstellungen gpg gpg git git Pass pass ... ... Executable pass Ausführbarer Pass Native Nativ &Native git/gpg &git/pgp verwenden &Use pass &pass verwenden Executable git Ausführbares git Executable gpg Ausführbares gpg Native git/gpg Systemeigenes git/gpg Use pass Pass benutzen Other Weiteres Folder password-store Ordner für Password Store Clipboard Zwischenablage Autoclear Zwischenablage leeren in Automatically add .gpg-id files .gpg-id Dateien automatisch hinzufügen Seconds Sekunden Clipboard behaviour: Zwischenablage: Autoclear after: Zwischenablage löschen nach: Password Behaviour: Passwort Anzeige: Hide password Passwort ausblenden Autoclear panel after: Anzeigezeit: Password Generation: Erzeugung würde auch funktionieren Passwort Generierung: Password Length: Passwort Länge: Use characters: Verfügbare Zeichen: Git: Git: System: System: Select password storage program: Zu verwendenden Passwortspeicher wählen: pass pass Always on top login url email login url email Programs Programme pwgen pwgen <html><head/><body><p><a href="http://www.passwordstore.org/"><span style=" text-decoration: underline; color:#0000ff;">www.passwordstore.org</span></a></p></body></html> <html><head/><body><p><a href="http://www.passwordstore.org/"><span style=" text-decoration: underline; color:#0000ff;">www.passwordstore.org</span></a></p></body></html> Settings Einstellungen Characters Zeichen Use pwgen pwgen verwenden Use clipboard Zwischenablage verwenden Autoclear panel Textplatte leeren in Use TrayIcon Im System Tray anzeigen Hide on close Nur minimieren nicht beenden Automatically push Automatisches "Push" Automatically pull Automatisches "Pull" Use git Git verwenden Include special symbols Sonderzeichen zulassen ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 Use characters Diese Zeichen zulassen Start minimized Minimiert starten Automatically push updates Automatisch hochladen Automatically pull in updates Automatisch herunterladen Profiles Profile Name Name Path Pfad Add Hinzufügen Current password-store aktueller Password Store Template Templates Templates add extra fields in the password generation dialouge and in the password view. Ein Template macht weitere Felder bei der Passwort Generierung und Anzeige verfügbar. Use template Templates verwenden Show all lines beginning with a word followed by a colon as fields in password fields, not only the listed ones Behandle alle Zeilen, die mit einem Wort gefolgt von einem Doppelpunkt beginen, alls Template Element Show all fields templated Alle Felder als Template benutzen login url Login url e-mail <a href="http://QtPass.org/">QtPass</a> version <a href="http://QtPass.org/">QtPass</a> Version Delete Löschen Hide content Inhalt ausblenden GnuPG not found GnuPG nicht gefunden Please install GnuPG on your system.<br>Install <strong>gpg</strong> using your favorite package manager<br>or <a href="https://www.gnupg.org/download/#sec-1-2">download</a> it from GnuPG.org GnuPG ist nicht installiert. <br>Installiere <strong>gpg</strong> mit dem favoriten Package Manager<br>oder von GnuPG.org <a href="https://www.gnupg.org/download/#sec-1-2">herunterladen</a> Create password-store? Password Store erstellen? Would you like to create a password-store at %1? Soll ein Password Store in %1 erstellt werden? Password store not initialised Password Store nicht initialisiert The folder %1 doesn't seem to be a password store or is not yet initialised. Ordner %1 ist kein Password Store oder wurde noch nicht initialisiert. No profile selected Kein Profil ausgewählt No Clipboard Keine Zwischenablage Always copy to clipboard Immer in Zwischenablage kopieren On-demand copy to clipboard Bei Bedarf in Zwischenablage kopieren No profile selected to delete Kein Profil zum Löschen ausgewählt KeygenDialog Generate GnuPG keypair GnuPG Schlüssel-Paar generieren Generate a new key pair Neue Schlüssel generieren Passphrase Passwort Email E-Mail Name Name <html><head/><body><p>There is no limit on the length of a passphrase, and it should be carefully chosen. From the perspective of security, the passphrase to unlock the private key is one of the weakest points in GnuPG (and other public-key encryption systems as well) since it is the only protection you have if another individual gets your private key. <br/>Ideally, the passphrase should not use words from a dictionary and should mix the case of alphabetic characters as well as use non-alphabetic characters.<br/>A good passphrase is crucial to the secure use of GnuPG.</p></body></html> Expert Experte # QtPass GPG key generator # # first test version please comment # %echo Generating a default key Key-Type: default Subkey-Type: default Name-Real: Name-Comment: QtPass Name-Email: Expire-Date: 0 %no-protection # Do a commit here, so that we can later print "done" :-) %commit %echo done For expert options check out the <a href="https://www.gnupg.org/documentation/manuals/gnupg/Unattended-GPG-key-generation.html">GnuPG manual</a> Einstellungen für Fortgeschrittene zu finden unter <a href="https://www.gnupg.org/documentation/manuals/gnupg/Unattended-GPG-key-generation.html">GnuPG manual</a> MainWindow QtPass QtPass Add Hinzufügen Edit Ändern Delete Löschen Push Hochladen (push) Update Aktualisieren Users Benutzer Config Einstellungen Copy Password Das Passwort Kopieren X X <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Noto Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; font-weight:600; color:#333333;">QtPass</span><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; color:#333333;"> is a GUI for </span><a href="http://www.passwordstore.org/"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; text-decoration: underline; color:#4183c4; background-color:transparent;">pass</span></a><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; color:#333333;">, the standard unix password manager.</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; color:#333333;"><br />Please report any </span><a href="https://github.com/IJHack/qtpass/issues"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; text-decoration: underline; color:#4183c4;">issues</span></a><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; color:#333333;"> you might have with this software.</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://qtpass.org/"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; text-decoration: underline; color:#4183c4; background-color:transparent;">Documentation</span></a></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="https://github.com/IJHack/qtpass"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; text-decoration: underline; color:#4183c4; background-color:transparent;">Source code</span></a></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'.Helvetica Neue DeskInterface'; font-size:13pt; font-weight:400; font-style:normal;"> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-weight:600; color:#333333;">QtPass</span><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; color:#333333;"> ist eine GUI für </span><a href="http://www.passwordstore.org/"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; text-decoration: underline; color:#4183c4; background-color:transparent;">pass</span></a><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; color:#333333;">, den standard Passwordmanager für UNIX.</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; color:#333333;"><br />Probleme und Bugs bitte </span><a href="https://github.com/IJHack/qtpass/issues"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; text-decoration: underline; color:#4183c4;">melden</span></a><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; color:#333333;">.</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://qtpass.org/"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; text-decoration: underline; color:#4183c4; background-color:transparent;">Dokumentation</span></a></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="https://github.com/IJHack/qtpass"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; text-decoration: underline; color:#4183c4; background-color:transparent;">Source Code</span></a></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'.Helvetica Neue DeskInterface'; font-size:13pt; font-weight:400; font-style:normal;"> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-weight:600; color:#333333;">QtPass</span><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; color:#333333;"> is a GUI for </span><a href="http://www.passwordstore.org/"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; text-decoration: underline; color:#4183c4; background-color:transparent;">pass</span></a><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; color:#333333;">, the standard unix password manager.</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; color:#333333;"><br />Please report any </span><a href="https://github.com/IJHack/qtpass/issues"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; text-decoration: underline; color:#4183c4;">issues</span></a><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; color:#333333;"> you might have with this software.</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://qtpass.org/"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; text-decoration: underline; color:#4183c4; background-color:transparent;">Documentation</span></a></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="https://github.com/IJHack/qtpass"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; text-decoration: underline; color:#4183c4; background-color:transparent;">Source code</span></a></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'.Helvetica Neue DeskInterface'; font-size:13pt; font-weight:400; font-style:normal;"> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-weight:600; color:#333333;">QtPass</span><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; color:#333333;"> ist eine GUI für </span><a href="http://www.passwordstore.org/"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; text-decoration: underline; color:#4183c4; background-color:transparent;">pass</span></a><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; color:#333333;">, den standard Passwordmanager für UNIX.</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; color:#333333;"><br />Probleme und Bugs bitte </span><a href="https://github.com/IJHack/qtpass/issues"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; text-decoration: underline; color:#4183c4;">melden</span></a><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; color:#333333;">.</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://qtpass.org/"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; text-decoration: underline; color:#4183c4; background-color:transparent;">Dokumentation</span></a></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="https://github.com/IJHack/qtpass"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; text-decoration: underline; color:#4183c4; background-color:transparent;">Source Code</span></a></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; font-weight:600; color:#333333;">QtPass</span><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; color:#333333;"> is a GUI for </span><a href="http://www.passwordstore.org/"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; text-decoration: underline; color:#4183c4; background-color:transparent;">pass</span></a><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; color:#333333;">, the standard unix password manager.</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; color:#333333;"><br />Please report any </span><a href="https://github.com/IJHack/qtpass/issues"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; text-decoration: underline; color:#4183c4;">issues</span></a><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; color:#333333;"> you might have with this software.</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://qtpass.org/"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; text-decoration: underline; color:#4183c4; background-color:transparent;">Documentation</span></a></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="https://github.com/IJHack/qtpass"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; text-decoration: underline; color:#4183c4; background-color:transparent;">Source code</span></a></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; font-weight:600; color:#333333;">QtPass</span><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; color:#333333;"> ist eine GUI für </span><a href="http://www.passwordstore.org/"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; text-decoration: underline; color:#4183c4; background-color:transparent;">pass</span></a><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; color:#333333;">, die Standard-Unix-Passwort-Manager.</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; color:#333333;"><br />Bitte melden Sie alle </span><a href="https://github.com/IJHack/qtpass/issues"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; text-decoration: underline; color:#4183c4;">Probleme</span></a><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; color:#333333;"> die Sie mit dieser Software haben könnten.</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://qtpass.org/"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; text-decoration: underline; color:#4183c4; background-color:transparent;">Dokumentation</span></a></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="https://github.com/IJHack/qtpass"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; text-decoration: underline; color:#4183c4; background-color:transparent;">Quellcode</span></a></p></body></html> qtpass qtpass Updating password-store Password Store aktualisieren Clipboard cleared Zwischenablage gelöscht New Folder: (Will be placed in %1 ) Password copied to clipboard Passwort in Zwischenablage kopiert Failed to connect WebDAV: Verbindung zu WebDAV fehlgeschlagen: Add Password Add Folder QtPass WebDAV password QtPass WebDAV Passwort Enter password to connect to WebDAV: Passwort für WebDAV eingeben: fusedav exited unexpectedly Unerwarteter Abbruch durch fusedav Failed to start fusedav to connect WebDAV: fusedav konnte nicht gestartet werden, WebDav Verbindung fehlgeschlagen: Password hidden Passwort ausgeblendet Content hidden Inhalt ausgeblendet Clipboard not cleared Zwischenablage nicht geleert Password and Content hidden Password und Inhalt ausgeblendet QProcess::FailedToStart QProcess::FailedToStart QProcess::Crashed QProcess::Crashed QProcess::Timedout QProcess::Timedout QProcess::ReadError QProcess::ReadError QProcess::WriteError QProcess::WriteError QProcess::UnknownError QProcess::UnknownError New password file, will be placed in folder %1: Neue Passwortdatei wird gespeichert im Ordner %1: Add folder Ordner hinzufügen Add password Passwort hinzufügen New folder, will be placed in folder %1: Neuer Ordner wird in Verzeichnis %1 erstellt: No characters chosen Keine Zeichen ausgewählt Can't generate password, there are no characters to choose from set in the configuration! Passwortgenerierung nicht möglich: Keine Zeichen zur Generierung ausgewählt! Timed out Zeitüberschreitung Can't start process, previous one is still running! Prozess kann nicht starten, vorheriger Prozess läuft noch! Welcome to QtPass %1 Wilkommen bei QtPass %1 Looking for: %1 Suche nach: %1 Can not edit Ändern nicht möglich Could not read encryption key to use, .gpg-id file missing or invalid. Schlüssel nicht lesbar, .gpg-id Datei fehlt oder ist ungültig. New file Neue Datei Delete password? Passwort löschen? Are you sure you want to delete %1? Sind Sie sicher, dass Sie %1 löschen wollen? Delete folder? Ordner löschen? Selected password file does not exist, not able to edit Gewählte Passwort-Datei existiert nicht, Änderung nicht möglich New password file: (Will be placed in %1 ) Can not get key list Schlüssel-Liste nicht gefunden Unable to get list of available gpg keys gpg Schlüssel-Liste konnte nicht gefunden werden Key not found in keyring Schlüssel nicht in Keyring gefunden Cannot update Update nicht möglich Failed to open .gpg-id for writing. Schreibzugrif auf .gpg-id fehlgeschlagen. Check selected users! Ausgewählte Benutzer prüfen! None of the selected keys have a secret key available. You will not be able to decrypt any newly added passwords! Der Partnerschlüssel der selektierten Schlüssel fehlt. Hiermit können keine neu hinzugefügefügten Passwörter entschlüsselt werden! Generating GPG key pair GPG Schlüssel-Paar wird generiert Profile changed to %1 Profil geändert zu %1 PasswordDialog Password Passwort Generate Generieren Show password Passwort anzeigen QObject LTR LTR TrayIcon &Quit UsersDialog Read access users Benutzer mit Lese-Zugrif Select which users should be able to decrypt passwords stored in this folder. Note: Existing files will not be modified and retain the old permissions until you edit them. Blue entries have a secret key available, select one of these to be able to decrypt. Red entries are not valid, you will not be able to encrypt to these. Hier die Benutzer eintragen denen Entschlüsselungszugriff für Passwörter in diesem Ordner gewährt werden soll. Hinweis: nachträglich hinzugefügte Nutzer müssen durch erneutes editieren des Password-Stores aktualisiert werden. Die blauen Einträgen verfügen über einen gültigen Schlüssel, zum entschlüsseln auswählen. Die roten Einträge sind ungültig / abgelaufen und für Entschlüsselung nicht wählbar. X X Show unusable keys unbrauchbare Schlüssel anzeigen created erstellt expires gültig bis trayIcon &Quit Schließen qtpass-1.1.0/localization/localization_es_ES.ts000066400000000000000000001277311265137067200216560ustar00rootroot00000000000000 ConfigDialog Configuration Configuración gpg gpg git git Pass Pass ... Executable pass Ejecutable pass Native Nativo &Native git/gpg &Use pass &Utilizar pass Executable git Ejecutable git Executable gpg Ejecutable gpg Native git/gpg git/gpg nativo Use pass Utilizar pass Other Otros Folder password-store Carpeta password-store Clipboard Portapapeles Autoclear Limpieza automática Automatically add .gpg-id files Añadir ficheros .gpg-id automáticamente Seconds Segundos Clipboard behaviour: Autoclear after: Password Behaviour: Hide password Ocultar contraseña Autoclear panel after: Password Generation: Password Length: Use characters: Git: System: Select password storage program: pass pass Autoclear panel Always on top login url email Programs Aplicaciones pwgen pwgen <html><head/><body><p><a href="http://www.passwordstore.org/"><span style=" text-decoration: underline; color:#0000ff;">www.passwordstore.org</span></a></p></body></html> <html><head/><body><p><a href="http://www.passwordstore.org/"><span style=" text-decoration: underline; color:#0000ff;">www.passwordstore.org</span></a></p></body></html> Settings Ajustes Characters Caracteres Use pwgen Usar pwgen Use clipboard Usar portapapeles Use TrayIcon Usar icono de bandeja Hide on close Ocultar al cerrar Automatically push Automatically pull Use git Usar git Include special symbols Incluir símbolos especiales ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 Use characters Use caracteres Start minimized Iniciar minimizado Profiles Perfiles Name Nombre Path Ruta Add Añadir Current password-store Almacen actual de contraseñas Template Templates add extra fields in the password generation dialouge and in the password view. Use template Show all lines beginning with a word followed by a colon as fields in password fields, not only the listed ones Show all fields templated <a href="http://QtPass.org/">QtPass</a> version <a href="http://QtPass.org/">QtPass</a> version Delete Borrar Hide content Ocultar contenido GnuPG not found No se ha encontrado GnuPG Please install GnuPG on your system.<br>Install <strong>gpg</strong> using your favorite package manager<br>or <a href="https://www.gnupg.org/download/#sec-1-2">download</a> it from GnuPG.org Instala GnuPG en su sistema. <br>Instalar <strong>gpg</strong> usando su gestor de paquetes favorito<br> o descargarlo de <a href="https://www.gnupg.org/download/#sec-1-2">GnuPG.org</a> Create password-store? Crear almacen de contraseñas? Would you like to create a password-store at %1? ¿Crear almacen de contraseñas en %1? Password store not initialised Almacen de contraseñas no inicializado The folder %1 doesn't seem to be a password store or is not yet initialised. La carpeta %1 no es un almacen de contraseñas o no ha sido inicializado. No profile selected Sin perfil seleccionado No Clipboard Always copy to clipboard On-demand copy to clipboard No profile selected to delete Sin perfil seleccionado para borrar KeygenDialog Generate GnuPG keypair Generar llaves GnuPG Generate a new key pair Generar nuevo par de llaves Passphrase Frase de contraseña Email Email Name Nombre <html><head/><body><p>There is no limit on the length of a passphrase, and it should be carefully chosen. From the perspective of security, the passphrase to unlock the private key is one of the weakest points in GnuPG (and other public-key encryption systems as well) since it is the only protection you have if another individual gets your private key. <br/>Ideally, the passphrase should not use words from a dictionary and should mix the case of alphabetic characters as well as use non-alphabetic characters.<br/>A good passphrase is crucial to the secure use of GnuPG.</p></body></html> <html><head/><body><p>No hay límite en la longitud de una frase de contraseña, y debe ser elegido con cuidado. Desde la perspectiva de la seguridad, la contraseña para desbloquear la clave privada es uno de los puntos más débiles en GnuPG (y otros sistemas de clave pública de cifrado también), ya que es la única protección que tiene si otro individuo obtiene su clave privada. <br/>Idealmente, la frase de contraseña no debe usar palabras de un diccionario y se debe mezclar los caracteres alfabéticos con caracteres no alfabéticos.<br/>Una buena frase de contraseña es crucial para el uso seguro de GnuPG.</p></body></html> Expert Experto # QtPass GPG key generator # # first test version please comment # %echo Generating a default key Key-Type: default Subkey-Type: default Name-Real: Name-Comment: QtPass Name-Email: Expire-Date: 0 %no-protection # Do a commit here, so that we can later print "done" :-) %commit %echo done For expert options check out the <a href="https://www.gnupg.org/documentation/manuals/gnupg/Unattended-GPG-key-generation.html">GnuPG manual</a> Para las opciones avanzadas revisan el <a href="https://www.gnupg.org/documentation/manuals/gnupg/Unattended-GPG-key-generation.html">manual de GnuPG</a> MainWindow QtPass QtPass Add Añadir Edit Editar Delete Borrar Push Update Actualizar Users Usuarios Config Configuración Copy Password X X <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Noto Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; font-weight:600; color:#333333;">QtPass</span><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; color:#333333;"> is a GUI for </span><a href="http://www.passwordstore.org/"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; text-decoration: underline; color:#4183c4; background-color:transparent;">pass</span></a><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; color:#333333;">, the standard unix password manager.</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; color:#333333;"><br />Please report any </span><a href="https://github.com/IJHack/qtpass/issues"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; text-decoration: underline; color:#4183c4;">issues</span></a><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; color:#333333;"> you might have with this software.</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://qtpass.org/"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; text-decoration: underline; color:#4183c4; background-color:transparent;">Documentation</span></a></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="https://github.com/IJHack/qtpass"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; text-decoration: underline; color:#4183c4; background-color:transparent;">Source code</span></a></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; font-weight:600; color:#333333;">QtPass</span><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; color:#333333;"> is a GUI for </span><a href="http://www.passwordstore.org/"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; text-decoration: underline; color:#4183c4; background-color:transparent;">pass</span></a><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; color:#333333;">, the standard unix password manager.</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; color:#333333;"><br />Please report any </span><a href="https://github.com/IJHack/qtpass/issues"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; text-decoration: underline; color:#4183c4;">issues</span></a><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; color:#333333;"> you might have with this software.</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://qtpass.org/"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; text-decoration: underline; color:#4183c4; background-color:transparent;">Documentation</span></a></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="https://github.com/IJHack/qtpass"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; text-decoration: underline; color:#4183c4; background-color:transparent;">Source code</span></a></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; font-weight:600; color:#333333;">QtPass</span><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; color:#333333;"> es un interfaz gráfico para </span><a href="http://www.passwordstore.org/"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; text-decoration: underline; color:#4183c4; background-color:transparent;">pass</span></a><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; color:#333333;">, el gestor de contraseñas estándar de Unix.</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; color:#333333;"><br />Por favor, informar de cualquier </span><a href="https://github.com/IJHack/qtpass/issues"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; text-decoration: underline; color:#4183c4;">problema</span></a><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; color:#333333;"> que tenga con este software.</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://qtpass.org/"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; text-decoration: underline; color:#4183c4; background-color:transparent;">Documentación</span></a></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="https://github.com/IJHack/qtpass"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; text-decoration: underline; color:#4183c4; background-color:transparent;">Código fuente</span></a></p></body></html> qtpass qtpass Updating password-store Actualizando password-store Clipboard cleared Portapapeles vacío New Folder: (Will be placed in %1 ) Password copied to clipboard Contraseña copiada al portapapeles Failed to connect WebDAV: No se pudo conectar WebDAV: Add Password Add Folder QtPass WebDAV password Contraseña QtPass WebDAV Enter password to connect to WebDAV: Introduzca contraseña para conectarse a WebDAV: fusedav exited unexpectedly fusedav se ha cerrado inesperadamente Failed to start fusedav to connect WebDAV: Error al iniciar fusedav para conectar WebDAV: Password hidden Contraseña oculta Content hidden Contenido oculto Clipboard not cleared Portapapeles no vaciado Password and Content hidden Contraseña y contenido oculto QProcess::FailedToStart QProcess::Fallo al iniciar QProcess::Crashed QProcess::Roto QProcess::Timedout QProcess::Caducado QProcess::ReadError QProcess::Error de lectura QProcess::WriteError QProcess::Error de escritura QProcess::UnknownError QProcess::Error desconocido New password file, will be placed in folder %1: Nuevo fichero de contraseña será puesto en la carpeta %1: Add folder Añadir carpeta Add password Añadir contraseña New folder, will be placed in folder %1: Nueva carpeta, será creada en carpeta %1: No characters chosen Can't generate password, there are no characters to choose from set in the configuration! Timed out Caducado Can't start process, previous one is still running! No se puede iniciar el proceso, anterior sigue funcionando! Looking for: Buscando: Welcome to QtPass %1 Bienvenido a QtPass %1 Looking for: %1 Buscando %1 Can not edit No se puede editar Could not read encryption key to use, .gpg-id file missing or invalid. No se pudo leer la clave de cifrado, fichero gpg-id falta o no es valido. New file Nuevo fichero Delete password? Borrar contraseña? Are you sure you want to delete %1? Está seguro que quiere borrar %1? Delete folder? Borrar carpeta? Selected password file does not exist, not able to edit Fichero de contraseñas seleccionado no existe, no se puede editar New password file: (Will be placed in %1 ) Can not get key list No se puede obtener lista de claves Unable to get list of available gpg keys No se puede obtener lista de llaves gpg disponibles Key not found in keyring La llave no se encuentra en el llavero Cannot update No se puede actualizar Failed to open .gpg-id for writing. No se pudo abrir .gpg-id para escribir. Check selected users! Compruebe usuarios seleccionados! None of the selected keys have a secret key available. You will not be able to decrypt any newly added passwords! Ninguna de las llaves seleccionadas tiene una llave secreta disponible. Usted no será capaz de descifrar cualquier contraseña que acaba de agregar! Generating GPG key pair Generar par de claves GPG Profile changed to %1 Perfil cambiado a %1 PasswordDialog Password Contraseña Generate Generar Show password Mostrar contraseña QObject LTR TrayIcon &Quit &Salir UsersDialog Read access users Mostrar usuarios con acceso Select which users should be able to decrypt passwords stored in this folder. Note: Existing files will not be modified and retain the old permissions until you edit them. Blue entries have a secret key available, select one of these to be able to decrypt. Red entries are not valid, you will not be able to encrypt to these. Seleccione los usuarios que deben ser capaces de descifrar las contraseñas almacenadas en esta carpeta. Nota: Los archivos existentes no se modificarán y los viejos permisos se mantienen hasta que se editen. Entradas azules tienen una clave secreta disponible, seleccione uno de estos para poder descifrar. Entradas rojas no son válidos, usted no será capaz de cifrar a estos. X X Show unusable keys Mostrar claves no usables created creado expires caduca trayIcon &Quit &Salir qtpass-1.1.0/localization/localization_fr_BE.ts000066400000000000000000001031111265137067200216170ustar00rootroot00000000000000 ConfigDialog Configuration Clipboard behaviour: Autoclear after: Password Behaviour: Autoclear panel after: Password Generation: Password Length: Use characters: Git: System: Programs Select password storage program: &Native git/gpg &Use pass Native git ... gpg pwgen Pass pass <html><head/><body><p><a href="http://www.passwordstore.org/"><span style=" text-decoration: underline; color:#0000ff;">www.passwordstore.org</span></a></p></body></html> login url email Settings Characters Use pwgen Seconds Autoclear panel Hide password Use TrayIcon Hide content Use git Hide on close Include special symbols Autoclear ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 Start minimized Use characters Automatically add .gpg-id files Automatically push Automatically pull Always on top Profiles Name Path Add Delete Current password-store Template Templates add extra fields in the password generation dialouge and in the password view. Use template Show all lines beginning with a word followed by a colon as fields in password fields, not only the listed ones Show all fields templated <a href="http://QtPass.org/">QtPass</a> version No Clipboard Always copy to clipboard On-demand copy to clipboard No profile selected No profile selected to delete GnuPG not found Please install GnuPG on your system.<br>Install <strong>gpg</strong> using your favorite package manager<br>or <a href="https://www.gnupg.org/download/#sec-1-2">download</a> it from GnuPG.org Create password-store? Would you like to create a password-store at %1? Password store not initialised The folder %1 doesn't seem to be a password store or is not yet initialised. KeygenDialog Generate GnuPG keypair Generate a new key pair Passphrase Email Name <html><head/><body><p>There is no limit on the length of a passphrase, and it should be carefully chosen. From the perspective of security, the passphrase to unlock the private key is one of the weakest points in GnuPG (and other public-key encryption systems as well) since it is the only protection you have if another individual gets your private key. <br/>Ideally, the passphrase should not use words from a dictionary and should mix the case of alphabetic characters as well as use non-alphabetic characters.<br/>A good passphrase is crucial to the secure use of GnuPG.</p></body></html> Expert # QtPass GPG key generator # # first test version please comment # %echo Generating a default key Key-Type: default Subkey-Type: default Name-Real: Name-Comment: QtPass Name-Email: Expire-Date: 0 %no-protection # Do a commit here, so that we can later print "done" :-) %commit %echo done For expert options check out the <a href="https://www.gnupg.org/documentation/manuals/gnupg/Unattended-GPG-key-generation.html">GnuPG manual</a> MainWindow QtPass Add Edit Delete Push Update Users Config Copy Password <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Noto Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; font-weight:600; color:#333333;">QtPass</span><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; color:#333333;"> is a GUI for </span><a href="http://www.passwordstore.org/"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; text-decoration: underline; color:#4183c4; background-color:transparent;">pass</span></a><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; color:#333333;">, the standard unix password manager.</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; color:#333333;"><br />Please report any </span><a href="https://github.com/IJHack/qtpass/issues"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; text-decoration: underline; color:#4183c4;">issues</span></a><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; color:#333333;"> you might have with this software.</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://qtpass.org/"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; text-decoration: underline; color:#4183c4; background-color:transparent;">Documentation</span></a></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="https://github.com/IJHack/qtpass"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; text-decoration: underline; color:#4183c4; background-color:transparent;">Source code</span></a></p></body></html> X qtpass Welcome to QtPass %1 Add Password Add Folder Failed to connect WebDAV: QtPass WebDAV password Enter password to connect to WebDAV: fusedav exited unexpectedly Failed to start fusedav to connect WebDAV: Updating password-store Password hidden Content hidden Clipboard cleared Clipboard not cleared Password and Content hidden QProcess::FailedToStart QProcess::Crashed QProcess::Timedout QProcess::ReadError QProcess::WriteError QProcess::UnknownError Looking for: %1 New Folder: (Will be placed in %1 ) Can not edit Could not read encryption key to use, .gpg-id file missing or invalid. New file Delete password? Are you sure you want to delete %1? Delete folder? Selected password file does not exist, not able to edit New password file: (Will be placed in %1 ) Can not get key list Unable to get list of available gpg keys Key not found in keyring Cannot update Failed to open .gpg-id for writing. Check selected users! None of the selected keys have a secret key available. You will not be able to decrypt any newly added passwords! Generating GPG key pair Profile changed to %1 Add folder Add password No characters chosen Can't generate password, there are no characters to choose from set in the configuration! Timed out Can't start process, previous one is still running! Password copied to clipboard PasswordDialog Password Generate Show password QObject LTR TrayIcon &Quit UsersDialog Read access users Select which users should be able to decrypt passwords stored in this folder. Note: Existing files will not be modified and retain the old permissions until you edit them. Blue entries have a secret key available, select one of these to be able to decrypt. Red entries are not valid, you will not be able to encrypt to these. X Show unusable keys created expires qtpass-1.1.0/localization/localization_fr_FR.ts000066400000000000000000001031111265137067200216400ustar00rootroot00000000000000 ConfigDialog Configuration Clipboard behaviour: Autoclear after: Password Behaviour: Autoclear panel after: Password Generation: Password Length: Use characters: Git: System: Programs Select password storage program: &Native git/gpg &Use pass Native git ... gpg pwgen Pass pass <html><head/><body><p><a href="http://www.passwordstore.org/"><span style=" text-decoration: underline; color:#0000ff;">www.passwordstore.org</span></a></p></body></html> login url email Settings Characters Use pwgen Seconds Autoclear panel Hide password Use TrayIcon Hide content Use git Hide on close Include special symbols Autoclear ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 Start minimized Use characters Automatically add .gpg-id files Automatically push Automatically pull Always on top Profiles Name Path Add Delete Current password-store Template Templates add extra fields in the password generation dialouge and in the password view. Use template Show all lines beginning with a word followed by a colon as fields in password fields, not only the listed ones Show all fields templated <a href="http://QtPass.org/">QtPass</a> version No Clipboard Always copy to clipboard On-demand copy to clipboard No profile selected No profile selected to delete GnuPG not found Please install GnuPG on your system.<br>Install <strong>gpg</strong> using your favorite package manager<br>or <a href="https://www.gnupg.org/download/#sec-1-2">download</a> it from GnuPG.org Create password-store? Would you like to create a password-store at %1? Password store not initialised The folder %1 doesn't seem to be a password store or is not yet initialised. KeygenDialog Generate GnuPG keypair Generate a new key pair Passphrase Email Name <html><head/><body><p>There is no limit on the length of a passphrase, and it should be carefully chosen. From the perspective of security, the passphrase to unlock the private key is one of the weakest points in GnuPG (and other public-key encryption systems as well) since it is the only protection you have if another individual gets your private key. <br/>Ideally, the passphrase should not use words from a dictionary and should mix the case of alphabetic characters as well as use non-alphabetic characters.<br/>A good passphrase is crucial to the secure use of GnuPG.</p></body></html> Expert # QtPass GPG key generator # # first test version please comment # %echo Generating a default key Key-Type: default Subkey-Type: default Name-Real: Name-Comment: QtPass Name-Email: Expire-Date: 0 %no-protection # Do a commit here, so that we can later print "done" :-) %commit %echo done For expert options check out the <a href="https://www.gnupg.org/documentation/manuals/gnupg/Unattended-GPG-key-generation.html">GnuPG manual</a> MainWindow QtPass Add Edit Delete Push Update Users Config Copy Password <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Noto Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; font-weight:600; color:#333333;">QtPass</span><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; color:#333333;"> is a GUI for </span><a href="http://www.passwordstore.org/"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; text-decoration: underline; color:#4183c4; background-color:transparent;">pass</span></a><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; color:#333333;">, the standard unix password manager.</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; color:#333333;"><br />Please report any </span><a href="https://github.com/IJHack/qtpass/issues"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; text-decoration: underline; color:#4183c4;">issues</span></a><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; color:#333333;"> you might have with this software.</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://qtpass.org/"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; text-decoration: underline; color:#4183c4; background-color:transparent;">Documentation</span></a></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="https://github.com/IJHack/qtpass"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; text-decoration: underline; color:#4183c4; background-color:transparent;">Source code</span></a></p></body></html> X qtpass Welcome to QtPass %1 Add Password Add Folder Failed to connect WebDAV: QtPass WebDAV password Enter password to connect to WebDAV: fusedav exited unexpectedly Failed to start fusedav to connect WebDAV: Updating password-store Password hidden Content hidden Clipboard cleared Clipboard not cleared Password and Content hidden QProcess::FailedToStart QProcess::Crashed QProcess::Timedout QProcess::ReadError QProcess::WriteError QProcess::UnknownError Looking for: %1 New Folder: (Will be placed in %1 ) Can not edit Could not read encryption key to use, .gpg-id file missing or invalid. New file Delete password? Are you sure you want to delete %1? Delete folder? Selected password file does not exist, not able to edit New password file: (Will be placed in %1 ) Can not get key list Unable to get list of available gpg keys Key not found in keyring Cannot update Failed to open .gpg-id for writing. Check selected users! None of the selected keys have a secret key available. You will not be able to decrypt any newly added passwords! Generating GPG key pair Profile changed to %1 Add folder Add password No characters chosen Can't generate password, there are no characters to choose from set in the configuration! Timed out Can't start process, previous one is still running! Password copied to clipboard PasswordDialog Password Generate Show password QObject LTR TrayIcon &Quit UsersDialog Read access users Select which users should be able to decrypt passwords stored in this folder. Note: Existing files will not be modified and retain the old permissions until you edit them. Blue entries have a secret key available, select one of these to be able to decrypt. Red entries are not valid, you will not be able to encrypt to these. X Show unusable keys created expires qtpass-1.1.0/localization/localization_gl_ES.ts000066400000000000000000001053301265137067200216400ustar00rootroot00000000000000 ConfigDialog Configuration Preferencias gpg git Pass Pass ... Executable pass Executable pass Native Nativo &Native git/gpg &Use pass Executable git Executable git Executable gpg Executable gpg Native git/gpg git/gpg nativo Use pass Usar pass Other Outros Folder password-store Cartafol da password-store Clipboard Portapapeis Autoclear Limpado automático Automatically add .gpg-id files Seconds Segundos Clipboard behaviour: Autoclear after: Password Behaviour: Hide password Ocultar contrasinal Autoclear panel after: Password Generation: Password Length: Use characters: Git: System: Select password storage program: pass Autoclear panel Use characters Always on top login url email Programs pwgen <html><head/><body><p><a href="http://www.passwordstore.org/"><span style=" text-decoration: underline; color:#0000ff;">www.passwordstore.org</span></a></p></body></html> Settings Characters Use pwgen Use TrayIcon Hide on close Automatically push Automatically pull Use git Include special symbols ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 Start minimized Profiles Name Path Add Current password-store Template Templates add extra fields in the password generation dialouge and in the password view. Use template Show all lines beginning with a word followed by a colon as fields in password fields, not only the listed ones Show all fields templated <a href="http://QtPass.org/">QtPass</a> version Delete Hide content Ocultar contido GnuPG not found Please install GnuPG on your system.<br>Install <strong>gpg</strong> using your favorite package manager<br>or <a href="https://www.gnupg.org/download/#sec-1-2">download</a> it from GnuPG.org Create password-store? Would you like to create a password-store at %1? Password store not initialised The folder %1 doesn't seem to be a password store or is not yet initialised. No profile selected No Clipboard Always copy to clipboard On-demand copy to clipboard No profile selected to delete KeygenDialog Generate GnuPG keypair Generate a new key pair Passphrase Email Name <html><head/><body><p>There is no limit on the length of a passphrase, and it should be carefully chosen. From the perspective of security, the passphrase to unlock the private key is one of the weakest points in GnuPG (and other public-key encryption systems as well) since it is the only protection you have if another individual gets your private key. <br/>Ideally, the passphrase should not use words from a dictionary and should mix the case of alphabetic characters as well as use non-alphabetic characters.<br/>A good passphrase is crucial to the secure use of GnuPG.</p></body></html> Expert # QtPass GPG key generator # # first test version please comment # %echo Generating a default key Key-Type: default Subkey-Type: default Name-Real: Name-Comment: QtPass Name-Email: Expire-Date: 0 %no-protection # Do a commit here, so that we can later print "done" :-) %commit %echo done For expert options check out the <a href="https://www.gnupg.org/documentation/manuals/gnupg/Unattended-GPG-key-generation.html">GnuPG manual</a> MainWindow QtPass QtPass Add Edit Delete Push Update Actualizar Users Config Preferencias Copy Password X X <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Noto Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; font-weight:600; color:#333333;">QtPass</span><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; color:#333333;"> is a GUI for </span><a href="http://www.passwordstore.org/"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; text-decoration: underline; color:#4183c4; background-color:transparent;">pass</span></a><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; color:#333333;">, the standard unix password manager.</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; color:#333333;"><br />Please report any </span><a href="https://github.com/IJHack/qtpass/issues"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; text-decoration: underline; color:#4183c4;">issues</span></a><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; color:#333333;"> you might have with this software.</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://qtpass.org/"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; text-decoration: underline; color:#4183c4; background-color:transparent;">Documentation</span></a></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="https://github.com/IJHack/qtpass"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; text-decoration: underline; color:#4183c4; background-color:transparent;">Source code</span></a></p></body></html> qtpass qtpass Updating password-store Actualizando password-store Clipboard cleared Portapapeis baleiro New Folder: (Will be placed in %1 ) Password copied to clipboard Contrasinal copiado ao portapapeis Failed to connect WebDAV: Add Password Add Folder QtPass WebDAV password Enter password to connect to WebDAV: fusedav exited unexpectedly Failed to start fusedav to connect WebDAV: Password hidden Content hidden Contido oculto Clipboard not cleared Password and Content hidden QProcess::FailedToStart QProcess::Fallou o inicio QProcess::Crashed QProcess::Rompeu QProcess::Timedout QProcess::Caducou QProcess::ReadError QProcess::Erro de lectura QProcess::WriteError QProcess::Erro de escritura QProcess::UnknownError QProcess::Erro descoñecido Add folder Add password No characters chosen Can't generate password, there are no characters to choose from set in the configuration! Timed out Can't start process, previous one is still running! Looking for: Buscando: Welcome to QtPass %1 Looking for: %1 Can not edit Could not read encryption key to use, .gpg-id file missing or invalid. New file Delete password? Are you sure you want to delete %1? Delete folder? Selected password file does not exist, not able to edit New password file: (Will be placed in %1 ) Can not get key list Unable to get list of available gpg keys Key not found in keyring Cannot update Failed to open .gpg-id for writing. Check selected users! None of the selected keys have a secret key available. You will not be able to decrypt any newly added passwords! Generating GPG key pair Profile changed to %1 PasswordDialog Password Generate Show password QObject LTR TrayIcon &Quit UsersDialog Read access users Select which users should be able to decrypt passwords stored in this folder. Note: Existing files will not be modified and retain the old permissions until you edit them. Blue entries have a secret key available, select one of these to be able to decrypt. Red entries are not valid, you will not be able to encrypt to these. X X Show unusable keys created expires qtpass-1.1.0/localization/localization_he_IL.ts000066400000000000000000001031711265137067200216300ustar00rootroot00000000000000 ConfigDialog Configuration Clipboard behaviour: Autoclear after: Password Behaviour: Autoclear panel after: Password Generation: Password Length: Use characters: Git: System: Programs Select password storage program: &Native git/gpg &Use pass Native git ... gpg pwgen Pass pass <html><head/><body><p><a href="http://www.passwordstore.org/"><span style=" text-decoration: underline; color:#0000ff;">www.passwordstore.org</span></a></p></body></html> Autoclear panel Autoclear Use characters Always on top login url email Settings Characters Automatically add .gpg-id files Automatically push Automatically pull Use pwgen Seconds Hide password Use TrayIcon Hide on close Use git Hide content Include special symbols ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 Start minimized Profiles Name Path Add Delete Current password-store Template Templates add extra fields in the password generation dialouge and in the password view. Use template Show all lines beginning with a word followed by a colon as fields in password fields, not only the listed ones Show all fields templated <a href="http://QtPass.org/">QtPass</a> version No Clipboard Always copy to clipboard On-demand copy to clipboard No profile selected No profile selected to delete GnuPG not found Please install GnuPG on your system.<br>Install <strong>gpg</strong> using your favorite package manager<br>or <a href="https://www.gnupg.org/download/#sec-1-2">download</a> it from GnuPG.org Create password-store? Would you like to create a password-store at %1? Password store not initialised The folder %1 doesn't seem to be a password store or is not yet initialised. KeygenDialog Generate GnuPG keypair Generate a new key pair Passphrase Email Name <html><head/><body><p>There is no limit on the length of a passphrase, and it should be carefully chosen. From the perspective of security, the passphrase to unlock the private key is one of the weakest points in GnuPG (and other public-key encryption systems as well) since it is the only protection you have if another individual gets your private key. <br/>Ideally, the passphrase should not use words from a dictionary and should mix the case of alphabetic characters as well as use non-alphabetic characters.<br/>A good passphrase is crucial to the secure use of GnuPG.</p></body></html> Expert # QtPass GPG key generator # # first test version please comment # %echo Generating a default key Key-Type: default Subkey-Type: default Name-Real: Name-Comment: QtPass Name-Email: Expire-Date: 0 %no-protection # Do a commit here, so that we can later print "done" :-) %commit %echo done For expert options check out the <a href="https://www.gnupg.org/documentation/manuals/gnupg/Unattended-GPG-key-generation.html">GnuPG manual</a> MainWindow QtPass Add Edit Delete Push Update Users Config Copy Password X <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Noto Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; font-weight:600; color:#333333;">QtPass</span><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; color:#333333;"> is a GUI for </span><a href="http://www.passwordstore.org/"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; text-decoration: underline; color:#4183c4; background-color:transparent;">pass</span></a><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; color:#333333;">, the standard unix password manager.</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; color:#333333;"><br />Please report any </span><a href="https://github.com/IJHack/qtpass/issues"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; text-decoration: underline; color:#4183c4;">issues</span></a><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; color:#333333;"> you might have with this software.</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://qtpass.org/"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; text-decoration: underline; color:#4183c4; background-color:transparent;">Documentation</span></a></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="https://github.com/IJHack/qtpass"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; text-decoration: underline; color:#4183c4; background-color:transparent;">Source code</span></a></p></body></html> qtpass Welcome to QtPass %1 Failed to connect WebDAV: QtPass WebDAV password Enter password to connect to WebDAV: fusedav exited unexpectedly Failed to start fusedav to connect WebDAV: Updating password-store New Folder: (Will be placed in %1 ) Password copied to clipboard Password hidden Add Password Add Folder Content hidden Clipboard cleared Clipboard not cleared Password and Content hidden QProcess::FailedToStart QProcess::Crashed QProcess::Timedout QProcess::ReadError QProcess::WriteError QProcess::UnknownError Looking for: %1 Can not edit Could not read encryption key to use, .gpg-id file missing or invalid. New file Delete password? Are you sure you want to delete %1? Delete folder? Selected password file does not exist, not able to edit New password file: (Will be placed in %1 ) Can not get key list Unable to get list of available gpg keys Key not found in keyring Cannot update Failed to open .gpg-id for writing. Check selected users! None of the selected keys have a secret key available. You will not be able to decrypt any newly added passwords! Generating GPG key pair Profile changed to %1 Add folder Add password No characters chosen Can't generate password, there are no characters to choose from set in the configuration! Timed out Can't start process, previous one is still running! PasswordDialog Password Generate Show password QObject LTR Flips interface RTL TrayIcon &Quit UsersDialog Read access users Select which users should be able to decrypt passwords stored in this folder. Note: Existing files will not be modified and retain the old permissions until you edit them. Blue entries have a secret key available, select one of these to be able to decrypt. Red entries are not valid, you will not be able to encrypt to these. X Show unusable keys created expires qtpass-1.1.0/localization/localization_hu_HU.ts000066400000000000000000001052471265137067200216660ustar00rootroot00000000000000 ConfigDialog Configuration Konfiguráció gpg git Pass Pass ... ... Executable pass Futtatható Pass Native Natív &Native git/gpg &Use pass Executable git Futtatható git Executable gpg Futattható gpg Native git/gpg Natív git/gpg Use pass Pass alkalmazása Other Más Folder password-store Jelszó-tároló mappa Clipboard Vágólap Autoclear Automatikus tisztítás Automatically add .gpg-id files Seconds Perc Clipboard behaviour: Autoclear after: Password Behaviour: Hide password Jelszó elrejtése Autoclear panel after: Password Generation: Password Length: Use characters: Git: System: Select password storage program: pass Autoclear panel Use characters Always on top login url email Programs pwgen <html><head/><body><p><a href="http://www.passwordstore.org/"><span style=" text-decoration: underline; color:#0000ff;">www.passwordstore.org</span></a></p></body></html> Settings Characters Use pwgen Use TrayIcon Hide on close Automatically push Automatically pull Use git Include special symbols ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 Start minimized Profiles Name Path Add Current password-store Template Templates add extra fields in the password generation dialouge and in the password view. Use template Show all lines beginning with a word followed by a colon as fields in password fields, not only the listed ones Show all fields templated <a href="http://QtPass.org/">QtPass</a> version Delete Hide content Oldal elrejtése GnuPG not found Please install GnuPG on your system.<br>Install <strong>gpg</strong> using your favorite package manager<br>or <a href="https://www.gnupg.org/download/#sec-1-2">download</a> it from GnuPG.org Create password-store? Would you like to create a password-store at %1? Password store not initialised The folder %1 doesn't seem to be a password store or is not yet initialised. No profile selected No Clipboard Always copy to clipboard On-demand copy to clipboard No profile selected to delete KeygenDialog Generate GnuPG keypair Generate a new key pair Passphrase Email Name <html><head/><body><p>There is no limit on the length of a passphrase, and it should be carefully chosen. From the perspective of security, the passphrase to unlock the private key is one of the weakest points in GnuPG (and other public-key encryption systems as well) since it is the only protection you have if another individual gets your private key. <br/>Ideally, the passphrase should not use words from a dictionary and should mix the case of alphabetic characters as well as use non-alphabetic characters.<br/>A good passphrase is crucial to the secure use of GnuPG.</p></body></html> Expert # QtPass GPG key generator # # first test version please comment # %echo Generating a default key Key-Type: default Subkey-Type: default Name-Real: Name-Comment: QtPass Name-Email: Expire-Date: 0 %no-protection # Do a commit here, so that we can later print "done" :-) %commit %echo done For expert options check out the <a href="https://www.gnupg.org/documentation/manuals/gnupg/Unattended-GPG-key-generation.html">GnuPG manual</a> MainWindow QtPass QtPass Add Edit Delete Push Update Frissítés Users Config Konfig Copy Password X X <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Noto Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; font-weight:600; color:#333333;">QtPass</span><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; color:#333333;"> is a GUI for </span><a href="http://www.passwordstore.org/"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; text-decoration: underline; color:#4183c4; background-color:transparent;">pass</span></a><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; color:#333333;">, the standard unix password manager.</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; color:#333333;"><br />Please report any </span><a href="https://github.com/IJHack/qtpass/issues"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; text-decoration: underline; color:#4183c4;">issues</span></a><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; color:#333333;"> you might have with this software.</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://qtpass.org/"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; text-decoration: underline; color:#4183c4; background-color:transparent;">Documentation</span></a></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="https://github.com/IJHack/qtpass"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; text-decoration: underline; color:#4183c4; background-color:transparent;">Source code</span></a></p></body></html> qtpass qtpass Updating password-store Jelszó-tároló frissítése Clipboard cleared Vágólap tiszta New Folder: (Will be placed in %1 ) Password copied to clipboard Jelszó vágólapra másolva Failed to connect WebDAV: Add Password Add Folder QtPass WebDAV password Enter password to connect to WebDAV: fusedav exited unexpectedly Failed to start fusedav to connect WebDAV: Password hidden Content hidden Oldal elrejtve Clipboard not cleared Password and Content hidden QProcess::FailedToStart QProcess:NemIndultEl QProcess::Crashed QProcess:Összeomlás QProcess::Timedout QProcess:Időtúllépés QProcess::ReadError QProcess:OlvasásiHiba QProcess::WriteError IrásHiba QProcess::UnknownError IsmeretlenHiba Add folder Add password No characters chosen Can't generate password, there are no characters to choose from set in the configuration! Timed out Can't start process, previous one is still running! Looking for: Keresés: Welcome to QtPass %1 Looking for: %1 Can not edit Could not read encryption key to use, .gpg-id file missing or invalid. New file Delete password? Are you sure you want to delete %1? Delete folder? Selected password file does not exist, not able to edit New password file: (Will be placed in %1 ) Can not get key list Unable to get list of available gpg keys Key not found in keyring Cannot update Failed to open .gpg-id for writing. Check selected users! None of the selected keys have a secret key available. You will not be able to decrypt any newly added passwords! Generating GPG key pair Profile changed to %1 PasswordDialog Password Generate Show password QObject LTR TrayIcon &Quit UsersDialog Read access users Select which users should be able to decrypt passwords stored in this folder. Note: Existing files will not be modified and retain the old permissions until you edit them. Blue entries have a secret key available, select one of these to be able to decrypt. Red entries are not valid, you will not be able to encrypt to these. X X Show unusable keys created expires qtpass-1.1.0/localization/localization_nl_NL.ts000066400000000000000000001710321265137067200216530ustar00rootroot00000000000000 ConfigDialog Configuration Configuratie Native git/gpg Gebruik systeem git/gpg Use pass Gebruik pass Native Systeem eigen Executable git Uitvoerbaar git Executable gpg Uitvoerbaar gpg ... Pass Executable pass Uitvoerbaar pass Other Anders Folder password-store Map password-store Clipboard Klembord Autoclear Klembord wissen na Automatically add .gpg-id files Voeg .gpg-id bestanden automatisch toe Seconds Seconden Clipboard behaviour: Autoclear after: Password Behaviour: Hide password Verberg wachtwoord Autoclear panel after: Password Generation: Password Length: Use characters: Git: System: Select password storage program: &Native git/gpg &git en gpg direct &Use pass &Gebruik pass gpg Always on top login url email git Programs Programma's pwgen pass <html><head/><body><p><a href="http://www.passwordstore.org/"><span style=" text-decoration: underline; color:#0000ff;">www.passwordstore.org</span></a></p></body></html> Settings Instellingen Characters Karakters Use pwgen Gebruik pwgen Use clipboard Gebruik klembord Autoclear panel Tekst veld wissen na Use TrayIcon Systeem tray Hide on close Verbergen in plaats van sluiten Automatically push Automatisch pushen Automatically pull Automatisch pullen Use git Gebruik git Include special symbols Speciale karakters ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 Use characters Gebruik karakters Start minimized Start in de tray Automatically push updates Automatische push Automatically pull in updates Automatische pull Profiles Profielen Name Naam Path Pad Add Toevoegen Current password-store Huidige password-store Template Template Templates add extra fields in the password generation dialouge and in the password view. Use template Gebruik template Show all lines beginning with a word followed by a colon as fields in password fields, not only the listed ones Show all fields templated Toon alle velden getemplate login url login url <a href="http://QtPass.org/">QtPass</a> version <a href="http://QtPass.org/">QtPass</a> versie Delete Verwijderen Hide content Verberg inhoud GnuPG not found GnuPG niet gevonden Please install GnuPG on your system.<br>Install <strong>gpg</strong> using your favorite package manager<br>or <a href="https://www.gnupg.org/download/#sec-1-2">download</a> it from GnuPG.org Installeer GnuPG op je systeem.<br>Installeer <strong>gpg</strong> via je favoriete package manager<br>of <a href="https://www.gnupg.org/download/#sec-1-2">download</a> op GnuPG.org Create password-store? Maak password-store aan? Would you like to create a password-store at %1? Wil je een password-store maken op %1? Password store not initialised Password-store niet geïnitialiseerd The folder %1 doesn't seem to be a password store or is not yet initialised. De map %1 lijkt geen password store te zijn of is nog niet geïnitialiseerd. No profile selected Geen profiel geselecteerd No Clipboard Always copy to clipboard On-demand copy to clipboard No profile selected to delete Geen profiel geselecteerd om te verwijderen KeygenDialog Generate GnuPG keypair Genereer GnuPG sleutelpaar Generate a new key pair Genereer een nieuw sleutelpaar Passphrase Wachtwoord Email Name Naam <html><head/><body><p>There is no limit on the length of a passphrase, and it should be carefully chosen. From the perspective of security, the passphrase to unlock the private key is one of the weakest points in GnuPG (and other public-key encryption systems as well) since it is the only protection you have if another individual gets your private key. <br/>Ideally, the passphrase should not use words from a dictionary and should mix the case of alphabetic characters as well as use non-alphabetic characters.<br/>A good passphrase is crucial to the secure use of GnuPG.</p></body></html> <html><head/><body><p>Er is geen limiet aan de lengte van een wachtwoord, en het moet zorgvuldig worden gekozen. Vanuit het perspectief van de veiligheid, de passphrase om de privé-sleutel te ontsluiten is een van de zwakste punten in GnuPG private (en andere public-key encryptie systemen ook) want het is de enige bescherming die u hebben als een ander individu krijgt uw sleutel. <br/> Idealiter zou de passphrase niet woorden uit een woordenboek en Mocht meng het geval van alfabetische tekens alsmede het gebruik van niet-alfabetische tekens. <br/> Een goed wachtwoord is cruciaal voor het veilig gebruik van GnuPG.</p></body></html> Expert # QtPass GPG key generator # # first test version please comment # %echo Generating a default key Key-Type: default Subkey-Type: default Name-Real: Name-Comment: QtPass Name-Email: Expire-Date: 0 %no-protection # Do a commit here, so that we can later print "done" :-) %commit %echo done For expert options check out the <a href="https://www.gnupg.org/documentation/manuals/gnupg/Unattended-GPG-key-generation.html">GnuPG manual</a> Voor expert instellingen lees de <a href="https://www.gnupg.org/documentation/manuals/gnupg/Unattended-GPG-key-generation.html">GnuPG manual</a> MainWindow QtPass QtPass Add Toevoegen Edit Bewerken Delete Verwijderen Push Uploaden Update Vernieuwen Users Gebruikers <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Noto Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; font-weight:600; color:#333333;">QtPass</span><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; color:#333333;"> is a GUI for </span><a href="http://www.passwordstore.org/"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; text-decoration: underline; color:#4183c4; background-color:transparent;">pass</span></a><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; color:#333333;">, the standard unix password manager.</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; color:#333333;"><br />Please report any </span><a href="https://github.com/IJHack/qtpass/issues"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; text-decoration: underline; color:#4183c4;">issues</span></a><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; color:#333333;"> you might have with this software.</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://qtpass.org/"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; text-decoration: underline; color:#4183c4; background-color:transparent;">Documentation</span></a></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="https://github.com/IJHack/qtpass"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; text-decoration: underline; color:#4183c4; background-color:transparent;">Source code</span></a></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'.Helvetica Neue DeskInterface'; font-size:13pt; font-weight:400; font-style:normal;"> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-weight:600; color:#333333;">QtPass</span><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; color:#333333;"> is a GUI for </span><a href="http://www.passwordstore.org/"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; text-decoration: underline; color:#4183c4; background-color:transparent;">pass</span></a><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; color:#333333;">, the standard unix password manager.</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; color:#333333;"><br />Please report any </span><a href="https://github.com/IJHack/qtpass/issues"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; text-decoration: underline; color:#4183c4;">issues</span></a><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; color:#333333;"> you might have with this software.</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://qtpass.org/"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; text-decoration: underline; color:#4183c4; background-color:transparent;">Documentation</span></a></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="https://github.com/IJHack/qtpass"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; text-decoration: underline; color:#4183c4; background-color:transparent;">Source code</span></a></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; font-weight:600; color:#333333;">QtPass</span><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; color:#333333;"> is een GUI voor </span><a href="http://www.passwordstore.org/"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; text-decoration: underline; color:#4183c4; background-color:transparent;">pass</span></a><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; color:#333333;">, de standaard unix password manager.</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; color:#333333;"><br />Meld alstublieft alle </span><a href="https://github.com/IJHack/qtpass/issues"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; text-decoration: underline; color:#4183c4;">issues</span></a><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; color:#333333;"> die u ondervindt bij het gebruik van deze software.</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://qtpass.org/"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; text-decoration: underline; color:#4183c4; background-color:transparent;">Documentatie</span></a></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="https://github.com/IJHack/qtpass"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; text-decoration: underline; color:#4183c4; background-color:transparent;">Broncode</span></a></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; font-weight:600; color:#333333;">QtPass</span><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; color:#333333;"> is a GUI for </span><a href="http://www.passwordstore.org/"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; text-decoration: underline; color:#4183c4; background-color:transparent;">pass</span></a><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; color:#333333;">, the standard unix password manager.</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; color:#333333;"><br />Please report any </span><a href="https://github.com/IJHack/qtpass/issues"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; text-decoration: underline; color:#4183c4;">issues</span></a><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; color:#333333;"> you might have with this software.</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://qtpass.org/"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; text-decoration: underline; color:#4183c4; background-color:transparent;">Documentation</span></a></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="https://github.com/IJHack/qtpass"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; text-decoration: underline; color:#4183c4; background-color:transparent;">Source code</span></a></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; font-weight:600; color:#333333;">QtPass</span><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; color:#333333;"> is een GUI voor </span><a href="http://www.passwordstore.org/"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; text-decoration: underline; color:#4183c4; background-color:transparent;">pass</span></a><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; color:#333333;">, de standaard unix password manager.</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; color:#333333;"><br />Meld alstublieft alle </span><a href="https://github.com/IJHack/qtpass/issues"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; text-decoration: underline; color:#4183c4;">issues</span></a><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; color:#333333;"> die u ondervindt bij het gebruik van deze software.</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://qtpass.org/"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; text-decoration: underline; color:#4183c4; background-color:transparent;">Documentatie</span></a></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="https://github.com/IJHack/qtpass"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; text-decoration: underline; color:#4183c4; background-color:transparent;">Broncode</span></a></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'.Helvetica Neue DeskInterface'; font-size:13pt; font-weight:400; font-style:normal;"> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-weight:600; color:#333333;">QtPass</span><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; color:#333333;"> is a GUI for </span><a href="http://www.passwordstore.org/"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; text-decoration: underline; color:#4183c4; background-color:transparent;">pass</span></a>, the standard unix password manager.</p> <p style="-qt-paragraph-type:empty; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Please report any <a href="https://github.com/IJHack/qtpass/issues"><span style=" text-decoration: underline; color:#4183c4;">issues</span></a> you might have with this software.</p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://qtpass.org/"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; text-decoration: underline; color:#4183c4; background-color:transparent;">Documentation</span></a></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="https://github.com/IJHack/qtpass"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; text-decoration: underline; color:#4183c4; background-color:transparent;">Source code</span></a></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'.Helvetica Neue DeskInterface'; font-size:13pt; font-weight:400; font-style:normal;"> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-weight:600; color:#333333;">QtPass</span><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; color:#333333;"> is een GUI voor </span><a href="http://www.passwordstore.org/"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; text-decoration: underline; color:#4183c4; background-color:transparent;">pass</span></a>, de standaard unix password manager.</p> <p style="-qt-paragraph-type:empty; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Meld alstublieft eventuele <a href="https://github.com/IJHack/qtpass/issues"><span style=" text-decoration: underline; color:#4183c4;">issues</span></a> die u ondervindt in het gebruik.</p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://qtpass.org/"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; text-decoration: underline; color:#4183c4; background-color:transparent;">Documentatie</span></a></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="https://github.com/IJHack/qtpass"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; text-decoration: underline; color:#4183c4; background-color:transparent;">Broncode</span></a></p></body></html> Config Configuratie Copy Password X Wissen <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; color:#333333;">QtPass is a GUI for </span><a href="http://www.passwordstore.org/"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; text-decoration: underline; color:#4183c4; background-color:transparent;">pass</span></a></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; font-weight:600; color:#333333;">Public BETA</span></p> <p style="-qt-paragraph-type:empty; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'.Helvetica Neue DeskInterface'; font-size:13pt;"><br /></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://qtpass.org/"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; text-decoration: underline; color:#4183c4; background-color:transparent;">Documentation</span></a></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="https://github.com/IJHack/qtpass"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; text-decoration: underline; color:#4183c4; background-color:transparent;">Source code</span></a></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; color:#333333;">QtPass is een GUI voor </span><a href="http://www.passwordstore.org/"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; text-decoration: underline; color:#4183c4; background-color:transparent;">pass</span></a></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; font-weight:600; color:#333333;">Publieke BETA</span></p> <p style="-qt-paragraph-type:empty; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'.Helvetica Neue DeskInterface'; font-size:13pt;"><br /></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://qtpass.org/"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; text-decoration: underline; color:#4183c4; background-color:transparent;">Documentatie</span></a></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="https://github.com/IJHack/qtpass"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; text-decoration: underline; color:#4183c4; background-color:transparent;">Bronbestanden</span></a></p></body></html> qtpass Updating password-store Vernieuwen password-store Clipboard cleared Klembord gewist New Folder: (Will be placed in %1 ) Password copied to clipboard Wachtwoord gekopieërd Failed to connect WebDAV: Verbinding mislukt met WebDAV: Add Password Add Folder QtPass WebDAV password Enter password to connect to WebDAV: Voer wachtwoord in om te verbinden met WebDAV: fusedav exited unexpectedly fusedav is stuk, hield er zomaar mee op Failed to start fusedav to connect WebDAV: Kon fusedav niet verbinden met WebDAV: Password hidden Wachtwoord verborgen Content hidden Inhoud verborgen Clipboard not cleared Klembord niet leeg gemaakt aangezien er geen wachtwoord in stond Password and Content hidden Wachtwoord en inhoud verborgen QProcess::FailedToStart Proces kon niet worden gestart QProcess::Crashed Proces is gecrashed QProcess::Timedout Proces duurde te lang QProcess::ReadError Lees fout met proces QProcess::WriteError Kan niet schrijven naar proces QProcess::UnknownError Er ging iets raars mis met proces New password file, will be placed in folder %1: Nieuw wachtwoord bestand, komt in map %1: Add folder Voeg map toe Add password Voeg wachtwoord toe New folder, will be placed in folder %1: Nieuwe map, wordt geplaatst in map %1: No characters chosen Geen karakters gekozen Can't generate password, there are no characters to choose from set in the configuration! Kan wachtwoord niet genereren, er zijn geen karakters gekozen in de configuratie! Timed out Duurt te lang Can't start process, previous one is still running! Kan process niet starten, vorige loopt nog steeds! Looking for: Op zoek naar: Welcome to QtPass %1 Welkom bij QtPass %1 Looking for: %1 Op zoek naar: %1 Can not edit Kan niet bewerken Could not read encryption key to use, .gpg-id file missing or invalid. Geen idee waarvoor ik moet versleutelen, .gpg-id bestand mist of bevat onzin. New file Nieuw bestand Delete password? Verwijder wachtwoord? Are you sure you want to delete %1? Weet je zeker dat je %1 wil verwijderen? Delete folder? Verwijder map? Selected password file does not exist, not able to edit Geselecteerde wachtwoord bestand bestaat niet, kan niet bewerken New password file: (Will be placed in %1 ) Can not get key list Kan sleutel lijst niet verkrijgen Unable to get list of available gpg keys Kan lijst van beschikbare gpg sleutels niet opvragen Key not found in keyring Sleutel niet gevonden in keyring Cannot update Kan niet updaten Failed to open .gpg-id for writing. Kon .gpg-id bestand niet openen om te schrijven. Check selected users! Kontroleer geselecteerde gebruikers! None of the selected keys have a secret key available. You will not be able to decrypt any newly added passwords! Geen van de geselecteerde keys hebben een secret key beschikbaar. Je kan nieuw toegevoegde wachtwoorden niet lezen! Generating GPG key pair Nieuw GPG sleutelpaar genereren Profile changed to %1 Profiel veranderd naar %1 PasswordDialog Password Wachtwoord Generate Genereren Show password Toon wachtwoord QObject LTR LTR TrayIcon &Quit &Afsluiten UsersDialog Read access users Gebruikers met leestoegang Select which users should be able to decrypt passwords stored in this folder. Note: Existing files will not be modified and retain the old permissions until you edit them. Blue entries have a secret key available, select one of these to be able to decrypt. Red entries are not valid, you will not be able to encrypt to these. Selecteer welke gebruikers moeten in staat zijn om wachtwoorden opgeslagen in deze map te decoderen. Opmerking: Bestaande bestanden zullen niet worden gewijzigd en behouden van de oude permissies totdat je ze bewerkt. Blauwe inzendingen hebben een geheime sleutel beschikbaar is, selecteert u één van deze te kunnen ontcijferen. Rode inzendingen zijn niet geldig, je zult niet in staat zijn om te coderen voor deze gebruikers. X Wissen Show unusable keys Toon onbruikbare sleutels created aangemaakt expires vervalt trayIcon &Quit &Afsluiten qtpass-1.1.0/localization/localization_pl_PL.ts000066400000000000000000001031111265137067200216500ustar00rootroot00000000000000 ConfigDialog Configuration gpg git Pass ... Native &Native git/gpg &Use pass Automatically add .gpg-id files Seconds Clipboard behaviour: Autoclear after: Password Behaviour: Hide password Autoclear panel after: Password Generation: Password Length: Use characters: Git: System: Select password storage program: pass Autoclear panel Autoclear Use characters Always on top login url email Programs pwgen <html><head/><body><p><a href="http://www.passwordstore.org/"><span style=" text-decoration: underline; color:#0000ff;">www.passwordstore.org</span></a></p></body></html> Settings Characters Use pwgen Use TrayIcon Hide on close Automatically push Automatically pull Use git Include special symbols ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 Start minimized Profiles Name Path Add Current password-store Template Templates add extra fields in the password generation dialouge and in the password view. Use template Show all lines beginning with a word followed by a colon as fields in password fields, not only the listed ones Show all fields templated <a href="http://QtPass.org/">QtPass</a> version Delete Hide content GnuPG not found Please install GnuPG on your system.<br>Install <strong>gpg</strong> using your favorite package manager<br>or <a href="https://www.gnupg.org/download/#sec-1-2">download</a> it from GnuPG.org Create password-store? Would you like to create a password-store at %1? Password store not initialised The folder %1 doesn't seem to be a password store or is not yet initialised. No profile selected No Clipboard Always copy to clipboard On-demand copy to clipboard No profile selected to delete KeygenDialog Generate GnuPG keypair Generate a new key pair Passphrase Email Name <html><head/><body><p>There is no limit on the length of a passphrase, and it should be carefully chosen. From the perspective of security, the passphrase to unlock the private key is one of the weakest points in GnuPG (and other public-key encryption systems as well) since it is the only protection you have if another individual gets your private key. <br/>Ideally, the passphrase should not use words from a dictionary and should mix the case of alphabetic characters as well as use non-alphabetic characters.<br/>A good passphrase is crucial to the secure use of GnuPG.</p></body></html> Expert # QtPass GPG key generator # # first test version please comment # %echo Generating a default key Key-Type: default Subkey-Type: default Name-Real: Name-Comment: QtPass Name-Email: Expire-Date: 0 %no-protection # Do a commit here, so that we can later print "done" :-) %commit %echo done For expert options check out the <a href="https://www.gnupg.org/documentation/manuals/gnupg/Unattended-GPG-key-generation.html">GnuPG manual</a> MainWindow QtPass Add Edit Delete Push Update Users Config Copy Password X <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Noto Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; font-weight:600; color:#333333;">QtPass</span><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; color:#333333;"> is a GUI for </span><a href="http://www.passwordstore.org/"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; text-decoration: underline; color:#4183c4; background-color:transparent;">pass</span></a><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; color:#333333;">, the standard unix password manager.</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; color:#333333;"><br />Please report any </span><a href="https://github.com/IJHack/qtpass/issues"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; text-decoration: underline; color:#4183c4;">issues</span></a><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; color:#333333;"> you might have with this software.</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://qtpass.org/"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; text-decoration: underline; color:#4183c4; background-color:transparent;">Documentation</span></a></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="https://github.com/IJHack/qtpass"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; text-decoration: underline; color:#4183c4; background-color:transparent;">Source code</span></a></p></body></html> qtpass Updating password-store Clipboard cleared New Folder: (Will be placed in %1 ) Password copied to clipboard Failed to connect WebDAV: Add Password Add Folder QtPass WebDAV password Enter password to connect to WebDAV: fusedav exited unexpectedly Failed to start fusedav to connect WebDAV: Password hidden Content hidden Clipboard not cleared Password and Content hidden QProcess::FailedToStart QProcess::Crashed QProcess::Timedout QProcess::ReadError QProcess::WriteError QProcess::UnknownError Add folder Add password No characters chosen Can't generate password, there are no characters to choose from set in the configuration! Timed out Can't start process, previous one is still running! Welcome to QtPass %1 Looking for: %1 Can not edit Could not read encryption key to use, .gpg-id file missing or invalid. New file Delete password? Are you sure you want to delete %1? Delete folder? Selected password file does not exist, not able to edit New password file: (Will be placed in %1 ) Can not get key list Unable to get list of available gpg keys Key not found in keyring Cannot update Failed to open .gpg-id for writing. Check selected users! None of the selected keys have a secret key available. You will not be able to decrypt any newly added passwords! Generating GPG key pair Profile changed to %1 PasswordDialog Password Generate Show password QObject LTR TrayIcon &Quit UsersDialog Read access users Select which users should be able to decrypt passwords stored in this folder. Note: Existing files will not be modified and retain the old permissions until you edit them. Blue entries have a secret key available, select one of these to be able to decrypt. Red entries are not valid, you will not be able to encrypt to these. X Show unusable keys created expires qtpass-1.1.0/localization/localization_ru_RU.ts000066400000000000000000001304731265137067200217110ustar00rootroot00000000000000 ConfigDialog Configuration Настройки gpg git Pass Pass ... ... Executable pass Путь к pass Native Встроенные приложения &Native git/gpg &Use pass Executable git Путь к git Executable gpg Путь к gpg Native git/gpg Встроенные git/gpg Use pass Использовать pass Other Другое Folder password-store Папка password-store Clipboard Буфер обмена Autoclear Удаление после Automatically add .gpg-id files Seconds секунд Clipboard behaviour: Autoclear after: Password Behaviour: Hide password Скрывать пароль Autoclear panel after: Password Generation: Password Length: Use characters: Git: System: Select password storage program: pass Autoclear panel Use characters Always on top login url email Programs pwgen <html><head/><body><p><a href="http://www.passwordstore.org/"><span style=" text-decoration: underline; color:#0000ff;">www.passwordstore.org</span></a></p></body></html> Settings Characters Use pwgen Use TrayIcon Hide on close Automatically push Automatically pull Use git Include special symbols ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 Start minimized Profiles Name Path Add Current password-store Template Templates add extra fields in the password generation dialouge and in the password view. Use template Show all lines beginning with a word followed by a colon as fields in password fields, not only the listed ones Show all fields templated <a href="http://QtPass.org/">QtPass</a> version Delete Hide content Скрывать содержимое GnuPG not found Please install GnuPG on your system.<br>Install <strong>gpg</strong> using your favorite package manager<br>or <a href="https://www.gnupg.org/download/#sec-1-2">download</a> it from GnuPG.org Create password-store? Would you like to create a password-store at %1? Password store not initialised The folder %1 doesn't seem to be a password store or is not yet initialised. No profile selected No Clipboard Always copy to clipboard On-demand copy to clipboard No profile selected to delete KeygenDialog Generate GnuPG keypair Generate a new key pair Passphrase Email Name <html><head/><body><p>There is no limit on the length of a passphrase, and it should be carefully chosen. From the perspective of security, the passphrase to unlock the private key is one of the weakest points in GnuPG (and other public-key encryption systems as well) since it is the only protection you have if another individual gets your private key. <br/>Ideally, the passphrase should not use words from a dictionary and should mix the case of alphabetic characters as well as use non-alphabetic characters.<br/>A good passphrase is crucial to the secure use of GnuPG.</p></body></html> Expert # QtPass GPG key generator # # first test version please comment # %echo Generating a default key Key-Type: default Subkey-Type: default Name-Real: Name-Comment: QtPass Name-Email: Expire-Date: 0 %no-protection # Do a commit here, so that we can later print "done" :-) %commit %echo done For expert options check out the <a href="https://www.gnupg.org/documentation/manuals/gnupg/Unattended-GPG-key-generation.html">GnuPG manual</a> MainWindow QtPass QtPass Update Обновить Push Поместить в репозиторий Add Edit Delete Users Config Настройки Copy Password X X <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Noto Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; font-weight:600; color:#333333;">QtPass</span><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; color:#333333;"> is a GUI for </span><a href="http://www.passwordstore.org/"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; text-decoration: underline; color:#4183c4; background-color:transparent;">pass</span></a><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; color:#333333;">, the standard unix password manager.</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; color:#333333;"><br />Please report any </span><a href="https://github.com/IJHack/qtpass/issues"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; text-decoration: underline; color:#4183c4;">issues</span></a><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; color:#333333;"> you might have with this software.</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://qtpass.org/"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; text-decoration: underline; color:#4183c4; background-color:transparent;">Documentation</span></a></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="https://github.com/IJHack/qtpass"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; text-decoration: underline; color:#4183c4; background-color:transparent;">Source code</span></a></p></body></html> + + - - = = <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:16px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:25.6px;"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; color:#333333;">QtPass is a gui for </span><a href="http://www.passwordstore.org/"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; text-decoration: underline; color:#4183c4; background-color:transparent;">pass</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; font-weight:600; color:#333333;">ALPHA release</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; font-weight:600; color:#333333;"><br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; font-weight:600; color:#333333;">TODO</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; color:#333333;">gpg-id management</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; color:#333333;"><br /></p> <p style=" margin-top:0px; margin-bottom:16px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:25.6px;"><a href="http://ijhack.github.io/qtpass/"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; text-decoration: underline; color:#4183c4; background-color:transparent;">Documentation</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:25.6px;"><a href="https://github.com/IJHack/qtpass"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; text-decoration: underline; color:#4183c4; background-color:transparent;">Source code</span></a></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; color:#333333;"><br /></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:16px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:25.6px;"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; color:#333333;">QtPass — это графический интерфейс к утилите </span><a href="http://www.passwordstore.org/"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; text-decoration: underline; color:#4183c4; background-color:transparent;">pass</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; font-weight:600; color:#333333;">АЛЬФА релиз</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; font-weight:600; color:#333333;"><br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; font-weight:600; color:#333333;">TODO</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; color:#333333;">Управление gpg-id</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; color:#333333;"><br /></p> <p style=" margin-top:0px; margin-bottom:16px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:25.6px;"><a href="http://ijhack.github.io/qtpass/"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; text-decoration: underline; color:#4183c4; background-color:transparent;">Документация</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:25.6px;"><a href="https://github.com/IJHack/qtpass"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; text-decoration: underline; color:#4183c4; background-color:transparent;">Исходный код</span></a></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; color:#333333;"><br /></p></body></html> qtpass qtpass Welcome to QtPass %1 Failed to connect WebDAV: QtPass WebDAV password Enter password to connect to WebDAV: fusedav exited unexpectedly Failed to start fusedav to connect WebDAV: Updating password-store Обновление password-store New Folder: (Will be placed in %1 ) Password copied to clipboard Пароль скопирован в буфер обмена Password hidden Add Password Add Folder Content hidden Содержимое скрыто Clipboard cleared Буфер обмена очищен Clipboard not cleared Буфер обмена не очищен Password and Content hidden QProcess::FailedToStart QProsess::Не удалось запустить QProcess::Crashed QProsess::Аварийное завершение QProcess::Timedout QProsess::Превышено время ожидания QProcess::ReadError QProsess::Ошибка чтения QProcess::WriteError QProsess::Ошибка записи QProcess::UnknownError QProsess::Неизвестная ошибка Looking for: %1 Delete folder? Generating GPG key pair Profile changed to %1 Add folder Add password No characters chosen Can't generate password, there are no characters to choose from set in the configuration! Timed out Can't start process, previous one is still running! Looking for: Поиск: New Value Новое Значение New password value: Новый пароль: Can not edit Невозможно изменить содержимое Could not read encryption key to use, .gpg-id file missing or invalid. New password file: (Will be placed in %1 ) Can not get key list Unable to get list of available gpg keys Key not found in keyring Cannot update Failed to open .gpg-id for writing. Check selected users! None of the selected keys have a secret key available. You will not be able to decrypt any newly added passwords! Password store lacks .gpg-id specifying encryption key В password-store отсутствует id ключа шифрования (.gpg-id) Could not read encryption key to use Не удалось получить id ключа шифрования (.gpg-id) New file Новый файл New password file: Новый файл с паролем: Delete password? Удалить пароль? Are you sure you want to delete %1? Вы в самом деле хотите удалить %1? Selected password file does not exist, not able to edit Выбранный файл с паролем не существует PasswordDialog Password Generate Show password QObject LTR TrayIcon &Quit UsersDialog Read access users Select which users should be able to decrypt passwords stored in this folder. Note: Existing files will not be modified and retain the old permissions until you edit them. Blue entries have a secret key available, select one of these to be able to decrypt. Red entries are not valid, you will not be able to encrypt to these. X X Show unusable keys created expires qtpass-1.1.0/localization/localization_sv_SE.ts000066400000000000000000001116001265137067200216630ustar00rootroot00000000000000 ConfigDialog Configuration Inställningar gpg gpg git git Pass Pass ... ... Executable pass Exekverbar pass Native Nativ &Native git/gpg &git/gpg &Use pass &Använd pass Executable git Exekverbar git Executable gpg Exekverbar gpg Native git/gpg Nativ git/gpg Use pass Använd pass Other Annan Folder password-store Mapp för lösenordslagring Clipboard Urklipp Autoclear Automatiskt rensning Automatically add .gpg-id files Skapa .gpg-id filer automatiskt Seconds Sekunder Clipboard behaviour: Autoclear after: Password Behaviour: Hide password Dölj lösenord Autoclear panel after: Password Generation: Password Length: Use characters: Git: System: Select password storage program: pass pass Always on top login url email Programs Program pwgen pwgen <html><head/><body><p><a href="http://www.passwordstore.org/"><span style=" text-decoration: underline; color:#0000ff;">www.passwordstore.org</span></a></p></body></html> Settings Inställningar Characters Tecken Use pwgen Använd pwgen Use clipboard Använd clipboard Autoclear panel Rensa panel automatiskt Use TrayIcon Använd TrayIcon Hide on close Dölj vid nerstängning Automatically push Automatisk push Automatically pull Automatisk pull Use git Använd git Include special symbols Inkludera specialtecken ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 Use characters Använd tecken Start minimized Starta minimerad Profiles Profiler Name Namn Path Sökväg Add Lägg till Current password-store Nuvarande lösenordsutrymme Template Mall Templates add extra fields in the password generation dialouge and in the password view. Use template Använd mall Show all fields templated Visa samtliga fält i mallen login url användare url Show all lines beginning with a word followed by a colon as fields in password fields, not only the listed ones <a href="http://QtPass.org/">QtPass</a> version <a href="http://QtPass.org/">QtPass</a> version Delete Ta bort Hide content Dölj innehåll GnuPG not found Kan inte hitta GnuPG Please install GnuPG on your system.<br>Install <strong>gpg</strong> using your favorite package manager<br>or <a href="https://www.gnupg.org/download/#sec-1-2">download</a> it from GnuPG.org Var vänlig installera GnuPG på ditt system.<br>Installera <strong>gpg</strong> med din pakethanterare<br>eller <a href="https://www.gnupg.org/download/#sec-1-2">ladda ner</a> från GnuPG.org Create password-store? Skapa utrymme för lösenord? Would you like to create a password-store at %1? Vill du skapa ett lösenordsutrymme på %1? Password store not initialised Lösenordsutrymme ej initliaserat The folder %1 doesn't seem to be a password store or is not yet initialised. No profile selected Ingen profil vald No Clipboard Always copy to clipboard On-demand copy to clipboard No profile selected to delete Ingen profil vald att tas bort KeygenDialog Generate GnuPG keypair Where is this field? Skapa GnuPG nyckelpar Generate a new key pair Skapa nytt nyckelpar Passphrase Lösenord Email Mejl Name Namn <html><head/><body><p>There is no limit on the length of a passphrase, and it should be carefully chosen. From the perspective of security, the passphrase to unlock the private key is one of the weakest points in GnuPG (and other public-key encryption systems as well) since it is the only protection you have if another individual gets your private key. <br/>Ideally, the passphrase should not use words from a dictionary and should mix the case of alphabetic characters as well as use non-alphabetic characters.<br/>A good passphrase is crucial to the secure use of GnuPG.</p></body></html> <html><head/><body><p>Ett lösenord kan vara hur långt som helst och det bör väljas noggrant. Från ett säkerhetsperspektiv är lösenordet för att låsa upp den privata nyckeln den svagaste länken i GnuPG (detta gäller även andra kryptosystem som använder publika nycklar) eftersom det är det enda skyddet du har om någon annan lyckas få tag på din privata nyckel.<br/>Ett lösenord ska helst inte innehålla vanliga ord och ska bestå av en blandning mellan bokstäver och icke-bokstäver.<br/>Ett bra lösenord är avgörande för ett säkert användande av GnuPG.</p></body></html> Expert Avancerat # QtPass GPG key generator # # first test version please comment # %echo Generating a default key Key-Type: default Subkey-Type: default Name-Real: Name-Comment: QtPass Name-Email: Expire-Date: 0 %no-protection # Do a commit here, so that we can later print "done" :-) %commit %echo done For expert options check out the <a href="https://www.gnupg.org/documentation/manuals/gnupg/Unattended-GPG-key-generation.html">GnuPG manual</a> För avancerade inställningar se manualen för <a href="https://www.gnupg.org/documentation/manuals/gnupg/Unattended-GPG-key-generation.html">GnuPG</a> MainWindow QtPass Add Lägg till Edit Ändra Delete Ta bort Push Push Update Uppdatera Users Användare Config Inställningar Copy Password X X <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Noto Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; font-weight:600; color:#333333;">QtPass</span><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; color:#333333;"> is a GUI for </span><a href="http://www.passwordstore.org/"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; text-decoration: underline; color:#4183c4; background-color:transparent;">pass</span></a><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; color:#333333;">, the standard unix password manager.</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; color:#333333;"><br />Please report any </span><a href="https://github.com/IJHack/qtpass/issues"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; text-decoration: underline; color:#4183c4;">issues</span></a><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; color:#333333;"> you might have with this software.</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://qtpass.org/"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; text-decoration: underline; color:#4183c4; background-color:transparent;">Documentation</span></a></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="https://github.com/IJHack/qtpass"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; text-decoration: underline; color:#4183c4; background-color:transparent;">Source code</span></a></p></body></html> qtpass qtpass Updating password-store Uppdaterar lösenordsutrymmet Clipboard cleared Urklippet rensat New Folder: (Will be placed in %1 ) Password copied to clipboard Lösenordet kopierat till urklippet Failed to connect WebDAV: Kunde inte ansluta till WebDAV: Add Password Add Folder QtPass WebDAV password QtPass WebDAV lösenord Enter password to connect to WebDAV: Mata in WebDAV lösenord: fusedav exited unexpectedly fusedav avslutades oväntat Failed to start fusedav to connect WebDAV: Kunde inte starta fusedav för att ansluta till WebDAV: Password hidden Gömt lösenord Content hidden Gömt innehåll Clipboard not cleared Urklippet ej rensat Password and Content hidden Gömt lösenord och innehåll QProcess::FailedToStart QProcess::Crashed QProcess::Timedout QProcess::ReadError QProcess::WriteError QProcess::UnknownError New password file, will be placed in folder %1: Ny lösenordsfil, kommer skapas i mapp %1: Add folder Lägg till mapp Add password Lägg till lösenord New folder, will be placed in folder %1: Ny mapp, kommer skapas i %1: No characters chosen Inga valda tecken Can't generate password, there are no characters to choose from set in the configuration! Kan inte skapa lösenord. Konfigurationen saknar tecken att välja från! Timed out Tajmade ut Can't start process, previous one is still running! Kan inte starta process, den förra körs fortfarande! Welcome to QtPass %1 Välkommen till QtPass %1 Looking for: %1 Söker efter: %1 Can not edit Kan inte ändra Could not read encryption key to use, .gpg-id file missing or invalid. Kunde inte läsa krypteringsnyckel, .gpg-id fil saknas eller är ogiltig. New file Ny fil Delete password? Ta bort lösenord? Are you sure you want to delete %1? Vill du verkligen ta bort %1? Delete folder? Ta bort mapp? Selected password file does not exist, not able to edit Kan inte ändra då vald lösenordsfil inte finns New password file: (Will be placed in %1 ) Can not get key list Kan inte hämta nyckellista Unable to get list of available gpg keys Kunde inte hämta gpgnycklar Key not found in keyring Kunde inte hitta nyckel i nyckelring Cannot update Kan inte uppdatera Failed to open .gpg-id for writing. Kunde inte skriva till .gpg-id. Check selected users! Kolla valda användare! None of the selected keys have a secret key available. You will not be able to decrypt any newly added passwords! Ingen av de valda nycklarna har en tillgänglig hemlig nyckel. Du kommer inte att kunna avkryptera några nyligen tillagda lösenord! Generating GPG key pair Skapar GPG nyckelpar Profile changed to %1 Profil ändrad till %1 PasswordDialog Password Lösenord Generate Skapa Show password Visa lösenord QObject LTR TrayIcon &Quit &Avsluta UsersDialog Read access users Användare med rättigheter att läsa Select which users should be able to decrypt passwords stored in this folder. Note: Existing files will not be modified and retain the old permissions until you edit them. Blue entries have a secret key available, select one of these to be able to decrypt. Red entries are not valid, you will not be able to encrypt to these. Välj vilka användare som ska kunna avkryptera lösenord som sparas i den här mappen. Observera att redan existerande filer inte kommer att ändras och behåller sina rättigheter tills du ändrar dem. Blå betyder att en privat nyckel finns. Välj någon av dessa för att kunna avkryptera. Röd färg betyder att nyckeln är ogiltig. Du kan inte använda någon av dessa för att kryptera. X X Show unusable keys Visa oanvändbara nycklar created skapad expires utgår trayIcon &Quit &Avsluta qtpass-1.1.0/localization/localization_zh_CN.ts000066400000000000000000001054551265137067200216600ustar00rootroot00000000000000 ConfigDialog Configuration 设置 Clipboard behaviour: Autoclear after: Password Behaviour: Autoclear panel after: Password Generation: Password Length: Use characters: Git: System: Programs 程序 Select password storage program: &Native git/gpg 本地应用 git/gpg &Use pass 应用 pass Native 本地应用 git git ... gpg pwgen Pass pass <html><head/><body><p><a href="http://www.passwordstore.org/"><span style=" text-decoration: underline; color:#0000ff;">www.passwordstore.org</span></a></p></body></html> Autoclear panel Always on top login url email Settings 设置 Characters 字符 Automatically add .gpg-id files 自动添加 gpg-id 文件 Automatically push Automatically pull Use pwgen 应用 pwgen Use clipboard 应用剪贴板 Seconds Hide password 隐藏密码 Use TrayIcon 应用系统图标 Hide on close 隐藏 Use git 应用 git Hide content 隐藏内容 Include special symbols 包含特殊文本 Autoclear 自动清除剪贴板内容 ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 Use characters 应用字符 Start minimized 启动后自动隐藏 Profiles 用户资料 Name 用户名 Path 路径 Add 添加 Delete 删除 Current password-store 当前密码路径 Template Templates add extra fields in the password generation dialouge and in the password view. Use template Show all lines beginning with a word followed by a colon as fields in password fields, not only the listed ones Show all fields templated <a href="http://QtPass.org/">QtPass</a> version <a href="http://QtPass.org/">QtPass</a> 版本 No Clipboard Always copy to clipboard On-demand copy to clipboard No profile selected 用户名未选择 No profile selected to delete 不可删除未选择用户名 GnuPG not found 未找到 GnuPG Please install GnuPG on your system.<br>Install <strong>gpg</strong> using your favorite package manager<br>or <a href="https://www.gnupg.org/download/#sec-1-2">download</a> it from GnuPG.org 请安装GnuPG到您的系统 Create password-store? 创建密码路径? Would you like to create a password-store at %1? 您需要里创建密码路径%1? Password store not initialised 密码路径未初始化 The folder %1 doesn't seem to be a password store or is not yet initialised. 文件夹未%1找到或未初始化 KeygenDialog Generate GnuPG keypair 生成GnuPG密钥对 Generate a new key pair 生成一个新的密钥对 Passphrase 通行码 Email 电子邮件 Name 姓名 <html><head/><body><p>There is no limit on the length of a passphrase, and it should be carefully chosen. From the perspective of security, the passphrase to unlock the private key is one of the weakest points in GnuPG (and other public-key encryption systems as well) since it is the only protection you have if another individual gets your private key. <br/>Ideally, the passphrase should not use words from a dictionary and should mix the case of alphabetic characters as well as use non-alphabetic characters.<br/>A good passphrase is crucial to the secure use of GnuPG.</p></body></html> <HTML> <HEAD/> <BODY> <P>密码的长度没有限制,但应慎重选择。从安全的角度来看,用通行码解锁密钥是GnuPG的弱点(包括其他公共密钥加密系统),因为它是对私人加密的唯一保护。<BR/>理想情况下,密码不应该从字典中选取,而应该混合字母字符,以及使用非字母字符。<BR/>一个安全的密码组合是使用GnuPG的至关重要的一点 </P> </BODY> </HTML> Expert 高级用户 # QtPass GPG key generator # # first test version please comment # %echo Generating a default key Key-Type: default Subkey-Type: default Name-Real: Name-Comment: QtPass Name-Email: Expire-Date: 0 %no-protection # Do a commit here, so that we can later print "done" :-) %commit %echo done For expert options check out the <a href="https://www.gnupg.org/documentation/manuals/gnupg/Unattended-GPG-key-generation.html">GnuPG manual</a> 高级用户请查看 <a href="https://www.gnupg.org/documentation/manuals/gnupg/Unattended-GPG-key-generation.html">GnuPG用户手册</a> MainWindow QtPass Add 添加 Edit 编辑 Delete 删除 Push 上传 Update 更新 Users 用户 Config 配置 Copy Password X 重置 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Noto Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; font-weight:600; color:#333333;">QtPass</span><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; color:#333333;"> is a GUI for </span><a href="http://www.passwordstore.org/"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; text-decoration: underline; color:#4183c4; background-color:transparent;">pass</span></a><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; color:#333333;">, the standard unix password manager.</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; color:#333333;"><br />Please report any </span><a href="https://github.com/IJHack/qtpass/issues"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; text-decoration: underline; color:#4183c4;">issues</span></a><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; color:#333333;"> you might have with this software.</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://qtpass.org/"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; text-decoration: underline; color:#4183c4; background-color:transparent;">Documentation</span></a></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="https://github.com/IJHack/qtpass"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-size:13pt; text-decoration: underline; color:#4183c4; background-color:transparent;">Source code</span></a></p></body></html> qtpass Welcome to QtPass %1 欢迎使用QtPass %1 Failed to connect WebDAV: 无法连接 WebDAV: QtPass WebDAV password QtPass WebDAV 密码 Enter password to connect to WebDAV: 输入密码连接到 WebDAV: fusedav exited unexpectedly fusedav意外退出 Failed to start fusedav to connect WebDAV: 无法启动 fusedav 连接到WebDAV: Updating password-store 更新密码路径 New Folder: (Will be placed in %1 ) Password copied to clipboard 密码复制到剪贴板 Password hidden 隐藏密码 Add Password Add Folder Content hidden 隐藏内容 Clipboard cleared 剪贴板已清除 Clipboard not cleared 剪贴板未清除 Password and Content hidden QProcess::FailedToStart QProcess::Crashed QProcess::Timedout QProcess::ReadError QProcess::WriteError QProcess::UnknownError Looking for: %1 查找:%1 Can not edit 无法编辑 Could not read encryption key to use, .gpg-id file missing or invalid. 无法读取加密密钥,gpg-id丢失或无效 New file 新文件 New password file, will be placed in folder %1: 新密码文件,将放置在文件夹 %1: Delete password? 删除密码? Are you sure you want to delete %1? 您确定要删除 %1 吗? Delete folder? 删除文件夹? Selected password file does not exist, not able to edit 选定的密码文件不存在,不可编辑 New password file: (Will be placed in %1 ) Can not get key list 无法获得密钥列表 Unable to get list of available gpg keys 无法获取可用的GPG密钥列表 Key not found in keyring 密钥未找到 Cannot update 无法更新 Failed to open .gpg-id for writing. 无法打开 .gpg-id写入 Check selected users! 核对所选用户! None of the selected keys have a secret key available. You will not be able to decrypt any newly added passwords! 密钥不可用:您将无法解密任何新添加的密码! Generating GPG key pair 生成GPG密钥对 Profile changed to %1 用户名更改为%1 Add folder 添加文件夹 Add password 添加密码 New folder, will be placed in folder %1: 新文件夹,将放置在文件夹%1: No characters chosen Can't generate password, there are no characters to choose from set in the configuration! Timed out 超时 Can't start process, previous one is still running! 无法启动程序, 先前程序仍在运行! PasswordDialog Password 密码 Generate 生成 Show password 显示密码 QObject LTR TrayIcon &Quit 退出 UsersDialog Read access users 读取访问用户 Select which users should be able to decrypt passwords stored in this folder. Note: Existing files will not be modified and retain the old permissions until you edit them. Blue entries have a secret key available, select one of these to be able to decrypt. Red entries are not valid, you will not be able to encrypt to these. 选择哪些用户能够解密保存在该文件夹中的密码。 注:现有的文件不会被修改,并保留现有的权限,直到您对其进行编辑。 蓝色条目有密钥可用,您可对其加密。 红色条目为无效,您无法对其加密。 X 重置 Show unusable keys 显示不可用密钥 created 创建完成 expires 过期 trayIcon &Quit 退出 qtpass-1.1.0/main.cpp000066400000000000000000000026201265137067200144650ustar00rootroot00000000000000#include #include #include "mainwindow.h" int main(int argc, char *argv[]) { // check for stupid apple psid or whatever flag QString text = ""; for (int i = 1; i < argc; ++i) { if (i > 1) text += " "; text += argv[i]; } #if SINGLE_APP QString name = qgetenv("USER"); if (name.isEmpty()) name = qgetenv("USERNAME"); SingleApplication app(argc, argv, name + "QtPass"); if (app.isRunning()) { if (text.length() > 0) app.sendMessage(text); return 0; } #else QApplication app(argc, argv); #endif QCoreApplication::setOrganizationName("IJHack"); QCoreApplication::setOrganizationDomain("ijhack.org"); QCoreApplication::setApplicationName("QtPass"); QCoreApplication::setApplicationVersion(VERSION); // Setup and load translator for localization QTranslator translator; QString locale = QLocale::system().name(); // locale = "nl_NL"; // locale = "he_IL"; // locale = "ar_MA"; translator.load(QString(":localization/localization_") + locale + QString(".qm")); app.installTranslator(&translator); app.setLayoutDirection(QObject::tr("LTR") == "RTL" ? Qt::RightToLeft : Qt::LeftToRight); MainWindow w; app.setActiveWindow(&w); app.setWindowIcon(QIcon(":artwork/icon.png")); w.setApp(&app); w.setText(text); w.show(); return app.exec(); } qtpass-1.1.0/mainwindow.cpp000066400000000000000000001561201265137067200157220ustar00rootroot00000000000000#include "mainwindow.h" #include #include #include #include #include #include #include #include #include #ifdef Q_OS_WIN #define WIN32_LEAN_AND_MEAN /*_KILLING_MACHINE*/ #define WIN32_EXTRA_LEAN #include #include #undef DELETE #endif #include "ui_mainwindow.h" #include "configdialog.h" #include "usersdialog.h" #include "keygendialog.h" #include "passworddialog.h" #include "util.h" /** * @brief MainWindow::MainWindow * @param parent */ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow), process(new QProcess(this)), fusedav(this), keygen(NULL), tray(NULL) { // connect(process.data(), SIGNAL(readyReadStandardOutput()), this, // SLOT(readyRead())); connect(process.data(), SIGNAL(error(QProcess::ProcessError)), this, SLOT(processError(QProcess::ProcessError))); connect(process.data(), SIGNAL(finished(int, QProcess::ExitStatus)), this, SLOT(processFinished(int, QProcess::ExitStatus))); ui->setupUi(this); enableUiElements(true); wrapperRunning = false; execQueue = new QQueue; ui->statusBar->showMessage(tr("Welcome to QtPass %1").arg(VERSION), 2000); freshStart = true; startupPhase = true; autoclearTimer = NULL; if (!checkConfig()) { // no working config QApplication::quit(); } ui->copyPasswordButton->setEnabled(false); setClippedPassword(""); QtPass = NULL; QTimer::singleShot(10, this, SLOT(focusInput())); // Add a Actions to the Add-Button QIcon addFileIcon = QIcon::fromTheme("file_new"); QIcon addFolderIcon = QIcon::fromTheme("folder_new"); actionAddPassword = new QAction(addFileIcon, tr("Add Password"), this); actionAddFolder = new QAction(addFolderIcon, tr("Add Folder"), this); ui->addButton->addAction(actionAddPassword); ui->addButton->addAction(actionAddFolder); connect(actionAddPassword, SIGNAL(triggered()), this, SLOT(on_addButton_clicked())); connect(actionAddFolder, SIGNAL(triggered()), this, SLOT(addFolder())); qsrand(QDateTime::currentDateTime().toTime_t()); } void MainWindow::focusInput() { ui->lineEdit->selectAll(); ui->lineEdit->setFocus(); } /** * @brief MainWindow::~MainWindow */ MainWindow::~MainWindow() { #ifdef Q_OS_WIN if (useWebDav) WNetCancelConnection2A(passStore.toUtf8().constData(), 0, 1); #else if (fusedav.state() == QProcess::Running) { fusedav.terminate(); fusedav.waitForFinished(2000); } #endif } QSettings &MainWindow::getSettings() { if (!settings) { QString portable_ini = QCoreApplication::applicationDirPath() + QDir::separator() + "qtpass.ini"; // qDebug() << "Settings file: " + portable_ini; if (QFile(portable_ini).exists()) { // qDebug() << "Settings file exists, loading it in"; settings.reset(new QSettings(portable_ini, QSettings::IniFormat)); } else { // qDebug() << "Settings file does not exist, use defaults"; settings.reset(new QSettings("IJHack", "QtPass")); } } return *settings; } void MainWindow::mountWebDav() { #ifdef Q_OS_WIN char dst[20] = {0}; NETRESOURCEA netres; memset(&netres, 0, sizeof(netres)); netres.dwType = RESOURCETYPE_DISK; netres.lpLocalName = 0; netres.lpRemoteName = webDavUrl.toUtf8().data(); DWORD size = sizeof(dst); DWORD r = WNetUseConnectionA( reinterpret_cast(effectiveWinId()), &netres, webDavPassword.toUtf8().constData(), webDavUser.toUtf8().constData(), CONNECT_TEMPORARY | CONNECT_INTERACTIVE | CONNECT_REDIRECT, dst, &size, 0); if (r == NO_ERROR) { passStore = dst; } else { char message[256] = {0}; FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM, 0, r, 0, message, sizeof(message), 0); ui->textBrowser->setTextColor(Qt::red); ui->textBrowser->setText(tr("Failed to connect WebDAV:\n") + message + " (0x" + QString::number(r, 16) + ")"); } #else fusedav.start("fusedav -o nonempty -u \"" + webDavUser + "\" " + webDavUrl + " \"" + passStore + '"'); fusedav.waitForStarted(); if (fusedav.state() == QProcess::Running) { QString pwd = webDavPassword; bool ok = true; if (pwd.isEmpty()) { pwd = QInputDialog::getText(this, tr("QtPass WebDAV password"), tr("Enter password to connect to WebDAV:"), QLineEdit::Password, "", &ok); } if (ok && !pwd.isEmpty()) { fusedav.write(pwd.toUtf8() + '\n'); fusedav.closeWriteChannel(); fusedav.waitForFinished(2000); } else { fusedav.terminate(); } } QString error = fusedav.readAllStandardError(); int prompt = error.indexOf("Password:"); if (prompt >= 0) error.remove(0, prompt + 10); if (fusedav.state() != QProcess::Running) error = tr("fusedav exited unexpectedly\n") + error; if (error.size() > 0) { ui->textBrowser->setTextColor(Qt::red); ui->textBrowser->setText( tr("Failed to start fusedav to connect WebDAV:\n") + error); } #endif } /** * @brief MainWindow::checkConfig */ bool MainWindow::checkConfig() { QSettings &settings(getSettings()); QString version = settings.value("version").toString(); if (freshStart) { settings.beginGroup("mainwindow"); restoreGeometry(settings.value("geometry", saveGeometry()).toByteArray()); restoreState(settings.value("savestate", saveState()).toByteArray()); move(settings.value("pos", pos()).toPoint()); resize(settings.value("size", size()).toSize()); QList splitter = ui->splitter->sizes(); int left = settings.value("splitterLeft", splitter[0]).toInt(); int right = settings.value("splitterRight", splitter[1]).toInt(); if (left > 0 || right > 0) { splitter[0] = left; splitter[1] = right; ui->splitter->setSizes(splitter); } if (settings.value("maximized", isMaximized()).toBool()) showMaximized(); settings.endGroup(); } usePass = (settings.value("usePass") == "true"); useClipboard = CLIPBOARD_NEVER; if (settings.value("useClipboard") == "true" || settings.value("useClipboard") == "1") useClipboard = CLIPBOARD_ALWAYS; else if (settings.value("useClipboard") == "2") useClipboard = CLIPBOARD_ON_DEMAND; useAutoclear = (settings.value("useAutoclear") == "true"); autoclearSeconds = settings.value("autoclearSeconds").toInt(); useAutoclearPanel = (settings.value("useAutoclearPanel") == "true"); autoclearPanelSeconds = settings.value("autoclearPanelSeconds").toInt(); hidePassword = (settings.value("hidePassword") == "true"); hideContent = (settings.value("hideContent") == "true"); addGPGId = (settings.value("addGPGId") != "false"); passStore = settings.value("passStore").toString(); if (passStore.isEmpty()) { passStore = Util::findPasswordStore(); settings.setValue("passStore", passStore); } passStore = Util::normalizeFolderPath(passStore); passExecutable = settings.value("passExecutable").toString(); if (passExecutable.isEmpty()) passExecutable = Util::findBinaryInPath("pass"); gitExecutable = settings.value("gitExecutable").toString(); if (gitExecutable.isEmpty()) gitExecutable = Util::findBinaryInPath("git"); gpgExecutable = settings.value("gpgExecutable").toString(); if (gpgExecutable.isEmpty()) gpgExecutable = Util::findBinaryInPath("gpg2"); pwgenExecutable = settings.value("pwgenExecutable").toString(); if (pwgenExecutable.isEmpty()) pwgenExecutable = Util::findBinaryInPath("pwgen"); gpgHome = settings.value("gpgHome").toString(); useWebDav = (settings.value("useWebDav") == "true"); webDavUrl = settings.value("webDavUrl").toString(); webDavUser = settings.value("webDavUser").toString(); webDavPassword = settings.value("webDavPassword").toString(); profile = settings.value("profile").toString(); settings.beginGroup("profiles"); QStringList keys = settings.childKeys(); foreach(QString key, keys) profiles[key] = settings.value(key).toString(); settings.endGroup(); useGit = (settings.value("useGit") == "true"); usePwgen = (settings.value("usePwgen") == "true"); useSymbols = (settings.value("useSymbols") == "true"); passwordLength = settings.value("passwordLength").toInt(); passwordChars = settings.value("passwordChars").toString(); useTrayIcon = settings.value("useTrayIcon").toBool(); hideOnClose = settings.value("hideOnClose").toBool(); startMinimized = settings.value("startMinimized").toBool(); alwaysOnTop = settings.value("alwaysOnTop").toBool(); if (alwaysOnTop) { Qt::WindowFlags flags = windowFlags(); this->setWindowFlags(flags | Qt::WindowStaysOnTopHint); this->show(); } autoPull = settings.value("autoPull").toBool(); autoPush = settings.value("autoPush").toBool(); if (useTrayIcon && tray == NULL) { initTrayIcon(); if (freshStart && startMinimized) { // since we are still in constructor, can't directly hide QTimer::singleShot(10, this, SLOT(hide())); } } else if (!useTrayIcon && tray != NULL) { destroyTrayIcon(); } passTemplate = settings.value("passTemplate").toString(); useTemplate = settings.value("useTemplate").toBool(); templateAllFields = settings.value("templateAllFields").toBool(); // qDebug() << version; // Config updates if (version.isEmpty()) { qDebug() << "assuming fresh install"; if (autoclearSeconds < 5) autoclearSeconds = 10; if (autoclearPanelSeconds < 5) autoclearPanelSeconds = 10; passwordLength = 16; passwordChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz123456" "7890~!@#$%^&*()_-+={}[]|:;<>,.?"; if (!pwgenExecutable.isEmpty()) usePwgen = true; else usePwgen = false; passTemplate = "login\nurl"; } else { // QStringList ver = version.split("."); // qDebug() << ver; // if (ver[0] == "0" && ver[1] == "8") { //// upgrade to 0.9 // } if (passwordChars.isEmpty()) passwordChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234" "567890~!@#$%^&*()_-+={}[]|:;<>,.?"; if (passTemplate.isEmpty()) passTemplate = "login\nurl"; } settings.setValue("version", VERSION); if (Util::checkConfig(passStore, passExecutable, gpgExecutable)) { config(); if (freshStart && Util::checkConfig(passStore, passExecutable, gpgExecutable)) return false; } freshStart = false; // TODO(annejan): this needs to be before we try to access the store, // but it would be better to do it after the Window is shown, // as the long delay it can cause is irritating otherwise. if (useWebDav) mountWebDav(); model.setNameFilters(QStringList() << "*.gpg"); model.setNameFilterDisables(false); proxyModel.setSourceModel(&model); proxyModel.setModelAndStore(&model, passStore); selectionModel.reset(new QItemSelectionModel(&proxyModel)); model.fetchMore(model.setRootPath(passStore)); model.sort(0, Qt::AscendingOrder); ui->treeView->setModel(&proxyModel); ui->treeView->setRootIndex( proxyModel.mapFromSource(model.setRootPath(passStore))); ui->treeView->setColumnHidden(1, true); ui->treeView->setColumnHidden(2, true); ui->treeView->setColumnHidden(3, true); ui->treeView->setHeaderHidden(true); ui->treeView->setIndentation(15); ui->treeView->setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded); ui->treeView->setContextMenuPolicy(Qt::CustomContextMenu); connect(ui->treeView, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(showContextMenu(const QPoint &))); ui->textBrowser->setOpenExternalLinks(true); ui->textBrowser->setContextMenuPolicy(Qt::CustomContextMenu); connect(ui->textBrowser, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(showBrowserContextMenu(const QPoint &))); updateProfileBox(); env = QProcess::systemEnvironment(); if (!gpgHome.isEmpty()) { QDir absHome(gpgHome); absHome.makeAbsolute(); env << "GNUPGHOME=" + absHome.path(); } #ifdef __APPLE__ // If it exists, add the gpgtools to PATH if (QFile("/usr/local/MacGPG2/bin").exists()) env.replaceInStrings("PATH=", "PATH=/usr/local/MacGPG2/bin:"); // Add missing /usr/local/bin if (env.filter("/usr/local/bin").isEmpty()) env.replaceInStrings("PATH=", "PATH=/usr/local/bin:"); #endif // QMessageBox::information(this, "env", env.join("\n")); updateEnv(); if (!useGit || (gitExecutable.isEmpty() && passExecutable.isEmpty())) { ui->pushButton->hide(); ui->updateButton->hide(); ui->horizontalSpacer->changeSize(0, 20, QSizePolicy::Maximum, QSizePolicy::Minimum); } else { ui->pushButton->show(); ui->updateButton->show(); ui->horizontalSpacer->changeSize(24, 24, QSizePolicy::Minimum, QSizePolicy::Minimum); } startupPhase = false; return true; } /** * @brief MainWindow::config */ void MainWindow::config() { QScopedPointer d(new ConfigDialog(this)); d->setModal(true); // Automatically default to pass if it's available usePass = freshStart ? QFile(passExecutable).exists() : usePass; d->setPassPath(passExecutable); d->setGitPath(gitExecutable); d->setGpgPath(gpgExecutable); d->setStorePath(passStore); d->usePass(usePass); d->useClipboard(useClipboard); d->useAutoclear(useAutoclear); d->setAutoclear(autoclearSeconds); d->useAutoclearPanel(useAutoclearPanel); d->setAutoclearPanel(autoclearPanelSeconds); d->hidePassword(hidePassword); d->hideContent(hideContent); d->addGPGId(addGPGId); d->useTrayIcon(useTrayIcon); d->hideOnClose(hideOnClose); d->startMinimized(startMinimized); d->setProfiles(profiles, profile); d->useGit(useGit); d->setPwgenPath(pwgenExecutable); d->usePwgen(usePwgen); d->useSymbols(useSymbols); d->setPasswordLength(passwordLength); d->setPasswordChars(passwordChars); d->useTemplate(useTemplate); d->setTemplate(passTemplate); d->templateAllFields(templateAllFields); d->autoPull(autoPull); d->autoPush(autoPush); d->alwaysOnTop(alwaysOnTop); if (startupPhase) d->wizard(); // does shit if (d->exec()) { if (d->result() == QDialog::Accepted) { passExecutable = d->getPassPath(); gitExecutable = d->getGitPath(); gpgExecutable = d->getGpgPath(); passStore = Util::normalizeFolderPath(d->getStorePath()); usePass = d->usePass(); useClipboard = d->useClipboard(); useAutoclear = d->useAutoclear(); autoclearSeconds = d->getAutoclear(); useAutoclearPanel = d->useAutoclearPanel(); autoclearPanelSeconds = d->getAutoclearPanel(); hidePassword = d->hidePassword(); hideContent = d->hideContent(); addGPGId = d->addGPGId(); useTrayIcon = d->useTrayIcon(); hideOnClose = d->hideOnClose(); startMinimized = d->startMinimized(); profiles = d->getProfiles(); useGit = d->useGit(); pwgenExecutable = d->getPwgenPath(); usePwgen = d->usePwgen(); useSymbols = d->useSymbols(); passwordLength = d->getPasswordLength(); passwordChars = d->getPasswordChars(); useTemplate = d->useTemplate(); passTemplate = d->getTemplate(); templateAllFields = d->templateAllFields(); autoPush = d->autoPush(); autoPull = d->autoPull(); alwaysOnTop = d->alwaysOnTop(); QSettings &settings(getSettings()); settings.setValue("version", VERSION); settings.setValue("passExecutable", passExecutable); settings.setValue("gitExecutable", gitExecutable); settings.setValue("gpgExecutable", gpgExecutable); settings.setValue("passStore", passStore); settings.setValue("usePass", usePass ? "true" : "false"); switch (useClipboard) { case CLIPBOARD_ALWAYS: settings.setValue("useClipboard", "true"); break; case CLIPBOARD_ON_DEMAND: settings.setValue("useClipboard", "2"); break; default: settings.setValue("useClipboard", "false"); break; } settings.setValue("useAutoclear", useAutoclear ? "true" : "false"); settings.setValue("autoclearSeconds", autoclearSeconds); settings.setValue("useAutoclearPanel", useAutoclearPanel ? "true" : "false"); settings.setValue("autoclearPanelSeconds", autoclearPanelSeconds); settings.setValue("hidePassword", hidePassword ? "true" : "false"); settings.setValue("hideContent", hideContent ? "true" : "false"); settings.setValue("addGPGId", addGPGId ? "true" : "false"); settings.setValue("useTrayIcon", useTrayIcon ? "true" : "false"); settings.setValue("hideOnClose", hideOnClose ? "true" : "false"); settings.setValue("startMinimized", startMinimized ? "true" : "false"); settings.setValue("useGit", useGit ? "true" : "false"); settings.setValue("pwgenExecutable", pwgenExecutable); settings.setValue("usePwgen", usePwgen ? "true" : "false"); settings.setValue("useSymbols", useSymbols ? "true" : "false"); settings.setValue("passwordLength", passwordLength); settings.setValue("passwordChars", passwordChars); settings.setValue("useTemplate", useTemplate); settings.setValue("passTemplate", passTemplate); settings.setValue("templateAllFields", templateAllFields); settings.setValue("autoPull", autoPull ? "true" : "false"); settings.setValue("autoPush", autoPush ? "true" : "false"); settings.setValue("alwaysOnTop", alwaysOnTop ? "true" : "false"); if (alwaysOnTop) { Qt::WindowFlags flags = windowFlags(); this->setWindowFlags(flags | Qt::WindowStaysOnTopHint); this->show(); } else { this->setWindowFlags(Qt::Window); this->show(); } if (!profiles.isEmpty()) { settings.beginGroup("profiles"); settings.remove(""); bool profileExists = false; QHashIterator i(profiles); while (i.hasNext()) { i.next(); // qDebug() << i.key() + "|" + i.value(); if (i.key() == profile) profileExists = true; settings.setValue(i.key(), i.value()); } if (!profileExists) { // just take the last one profile = i.key(); } settings.endGroup(); } else { settings.remove("profiles"); } updateProfileBox(); ui->treeView->setRootIndex( proxyModel.mapFromSource(model.setRootPath(passStore))); if (freshStart && Util::checkConfig(passStore, passExecutable, gpgExecutable)) config(); updateEnv(); if (!useGit || (gitExecutable.isEmpty() && passExecutable.isEmpty())) { ui->pushButton->hide(); ui->updateButton->hide(); ui->horizontalSpacer->changeSize(0, 20, QSizePolicy::Maximum, QSizePolicy::Minimum); } else { ui->pushButton->show(); ui->updateButton->show(); ui->horizontalSpacer->changeSize(24, 24, QSizePolicy::Minimum, QSizePolicy::Minimum); } if (useTrayIcon && tray == NULL) initTrayIcon(); else if (!useTrayIcon && tray != NULL) destroyTrayIcon(); } freshStart = false; } } /** * @brief MainWindow::on_updateButton_clicked */ void MainWindow::on_updateButton_clicked() { ui->statusBar->showMessage(tr("Updating password-store"), 2000); currentAction = GIT; if (usePass) executePass("git pull"); else executeWrapper(gitExecutable, "pull"); } /** * @brief MainWindow::on_pushButton_clicked */ void MainWindow::on_pushButton_clicked() { ui->statusBar->showMessage(tr("Updating password-store"), 2000); currentAction = GIT; if (usePass) executePass("git push"); else executeWrapper(gitExecutable, "push"); } QString MainWindow::getDir(const QModelIndex &index, bool forPass) { QString abspath = QDir(passStore).absolutePath() + '/'; if (!index.isValid()) return forPass ? "" : abspath; QFileInfo info = model.fileInfo(proxyModel.mapToSource(index)); QString filePath = (info.isFile() ? info.absolutePath() : info.absoluteFilePath()) + '/'; if (forPass) { filePath.replace(QRegExp("^" + passStore), ""); filePath.replace(QRegExp("^" + abspath), ""); } return filePath; } QString MainWindow::getFile(const QModelIndex &index, bool forPass) { if (!index.isValid() || !model.fileInfo(proxyModel.mapToSource(index)).isFile()) return QString(); QString filePath = model.filePath(proxyModel.mapToSource(index)); if (forPass) { filePath.replace(QRegExp("\\.gpg$"), ""); filePath.replace(QRegExp("^" + passStore), ""); } return filePath; } /** * @brief MainWindow::on_treeView_clicked * @param index */ void MainWindow::on_treeView_clicked(const QModelIndex &index) { currentDir = getDir(ui->treeView->currentIndex(), false); lastDecrypt = "Could not decrypt"; setClippedPassword(""); QString file = getFile(index, usePass); if (!file.isEmpty()) { currentAction = GPG; if (usePass) executePass("show \"" + file + '"'); else executeWrapper(gpgExecutable, "-d --quiet --yes --no-encrypt-to --batch --use-agent \"" + file + '"'); } else { ui->editButton->setEnabled(false); ui->deleteButton->setEnabled(true); } } /** * @brief When doubleclicked on TreeViewItem, open the edit Window * @param index */ void MainWindow::on_treeView_doubleClicked(const QModelIndex &index) { // TODO: do nothing when clicked on folder QFileInfo fileOrFolder = model.fileInfo(proxyModel.mapToSource(ui->treeView->currentIndex())); QString file = ""; if (fileOrFolder.isFile()) { QString file = getFile(index, usePass); if (file.isEmpty()) { QMessageBox::critical( this, tr("Can not edit"), tr("Selected password file does not exist, not able to edit")); return; } setPassword(file, true, false); } } /** * @brief MainWindow::executePass * @param args */ void MainWindow::executePass(QString args, QString input) { executeWrapper(passExecutable, args, input); } /** * @brief MainWindow::executePassGitInit */ void MainWindow::executePassGitInit() { qDebug() << "Pass git init called"; if (usePass) executePass("git init"); else executeWrapper("git", "init \"" + passStore + '"'); } /** * @brief MainWindow::executeWrapper * @param app * @param args */ void MainWindow::executeWrapper(QString app, QString args, QString input) { // qDebug() << app + " " + args; // Happens a lot if e.g. git binary is not set. // This will result in bogus "QProcess::FailedToStart" messages, // also hiding legitimate errors from the gpg commands. if (app.isEmpty()) { qDebug() << "Trying to execute nothing.."; return; } // Convert to absolute path, just in case app = QDir(QCoreApplication::applicationDirPath()).absoluteFilePath(app); if (wrapperRunning) { execQueueItem item; item.app = app; item.args = args; item.input = input; execQueue->enqueue(item); qDebug() << item.app + "," + item.args + "," + item.input; return; } wrapperRunning = true; process->setWorkingDirectory(passStore); process->setEnvironment(env); clearTemplateWidgets(); ui->textBrowser->clear(); ui->textBrowser->setTextColor(Qt::black); enableUiElements(false); if (autoclearTimer != NULL) { autoclearTimer->stop(); delete autoclearTimer; autoclearTimer = NULL; } process->start('"' + app + "\" " + args); if (!input.isEmpty()) process->write(input.toUtf8()); process->closeWriteChannel(); } /** * @brief MainWindow::readyRead */ void MainWindow::readyRead(bool finished = false) { if (currentAction == PWGEN) return; QString output = ""; QString error = process->readAllStandardError(); if (currentAction != GPG_INTERNAL) { output = process->readAllStandardOutput(); if (finished && currentAction == GPG) { lastDecrypt = output; QStringList tokens = output.split("\n"); if (useClipboard != CLIPBOARD_NEVER && !output.isEmpty()) { setClippedPassword(tokens[0]); if (useClipboard == CLIPBOARD_ALWAYS) copyPasswordToClipboard(); if (useAutoclearPanel) { QTimer::singleShot(1000 * autoclearPanelSeconds, this, SLOT(clearPanel())); } if (hidePassword && !useTemplate) { tokens[0] = "***" + tr("Password hidden") + "***"; output = tokens.join("\n"); } if (hideContent) output = "***" + tr("Content hidden") + "***"; } if (useTemplate) { while (ui->formLayout->count() > 0) { QLayoutItem *item = ui->formLayout->takeAt(0); delete item->widget(); delete item; } QLineEdit *pass = new QLineEdit(); pass->setText(tokens[0]); tokens.pop_front(); if (hidePassword) pass->setEchoMode(QLineEdit::Password); pass->setReadOnly(true); ui->formLayout->addRow(pass); for (int j = 0; j < tokens.length(); ++j) { QString token = tokens.at(j); if (token.contains(':')) { int colon = token.indexOf(':'); QString field = token.left(colon); if (templateAllFields || passTemplate.contains(field)) { QString value = token.right(token.length() - colon - 1); if (!passTemplate.contains(field) && value.startsWith("//")) continue; // colon is probably from a url QLineEdit *line = new QLineEdit(); line->setObjectName(field); line->setText(value); line->setReadOnly(true); ui->formLayout->addRow(new QLabel(field), line); tokens.removeAt(j); --j; // tokens.length() also got shortened by the remove.. } } } if (ui->formLayout->count() == 0) ui->verticalLayoutPassword->setSpacing(0); else ui->verticalLayoutPassword->setSpacing(6); output = tokens.join("\n"); } else { clearTemplateWidgets(); } if (useAutoclearPanel) { autoclearPass = output; autoclearTimer = new QTimer(this); autoclearTimer->setSingleShot(true); autoclearTimer->setInterval(1000 * autoclearPanelSeconds); connect(autoclearTimer, SIGNAL(timeout()), this, SLOT(clearPanel())); autoclearTimer->start(); } } output.replace(QRegExp("<"), "<"); output.replace(QRegExp(">"), ">"); } else { // qDebug() << process->readAllStandardOutput(); // qDebug() << process->readAllStandardError(); if (finished && 0 != keygen) { qDebug() << "Keygen Done"; keygen->close(); keygen = 0; // TODO(annejan) some sanity checking ? } } if (!error.isEmpty()) { if (currentAction == GIT) { // https://github.com/IJHack/qtpass/issues/111 output = "" + error + "
" + output; } else { output = "" + error + "
" + output; } } output.replace(QRegExp("((?:https?|ftp)://\\S+)"), "\\1"); output.replace(QRegExp("\n"), "
"); if (!ui->textBrowser->toPlainText().isEmpty()) output = ui->textBrowser->toHtml() + output; ui->textBrowser->setHtml(output); } /** * @brief MainWindow::clearClipboard */ void MainWindow::clearClipboard() { QClipboard *clipboard = QApplication::clipboard(); if (clipboard->text() == getClippedPassword()) { clipboard->clear(); ui->statusBar->showMessage(tr("Clipboard cleared"), 3000); } else { ui->statusBar->showMessage(tr("Clipboard not cleared"), 3000); } } /** * @brief MainWindow::clearPanel */ void MainWindow::clearPanel() { while (ui->formLayout->count() > 0) { QLayoutItem *item = ui->formLayout->takeAt(0); delete item->widget(); delete item; } QString output = "***" + tr("Password and Content hidden") + "***"; ui->textBrowser->setHtml(output); } /** * @brief MainWindow::processFinished * @param exitCode * @param exitStatus */ void MainWindow::processFinished(int exitCode, QProcess::ExitStatus exitStatus) { wrapperRunning = false; bool error = exitStatus != QProcess::NormalExit || exitCode > 0; readyRead(true); enableUiElements(true); if (!error && currentAction == EDIT) on_treeView_clicked(ui->treeView->currentIndex()); if (!execQueue->isEmpty()) { execQueueItem item = execQueue->dequeue(); executeWrapper(item.app, item.args, item.input); } } /** QStringList tokens = output.split("\n"); * @brief MainWindow::enableUiElements * @param state */ void MainWindow::enableUiElements(bool state) { ui->updateButton->setEnabled(state); ui->treeView->setEnabled(state); ui->lineEdit->setEnabled(state); ui->addButton->setEnabled(state); ui->usersButton->setEnabled(state); ui->configButton->setEnabled(state); // is a file selected? state &= ui->treeView->currentIndex().isValid(); ui->deleteButton->setEnabled(state); ui->editButton->setEnabled(state); ui->pushButton->setEnabled(state); } /** * @brief MainWindow::processError * @param error */ void MainWindow::processError(QProcess::ProcessError error) { QString errorString; switch (error) { case QProcess::FailedToStart: errorString = tr("QProcess::FailedToStart"); break; case QProcess::Crashed: errorString = tr("QProcess::Crashed"); break; case QProcess::Timedout: errorString = tr("QProcess::Timedout"); break; case QProcess::ReadError: errorString = tr("QProcess::ReadError"); break; case QProcess::WriteError: errorString = tr("QProcess::WriteError"); break; case QProcess::UnknownError: errorString = tr("QProcess::UnknownError"); break; } ui->textBrowser->setTextColor(Qt::red); ui->textBrowser->setText(errorString); if (process->state() == QProcess::NotRunning) enableUiElements(true); } /** * @brief MainWindow::setPassExecutable * @param path */ void MainWindow::setPassExecutable(QString path) { passExecutable = path; } /** * @brief MainWindow::setGitExecutable * @param path */ void MainWindow::setGitExecutable(QString path) { gitExecutable = path; } /** * @brief MainWindow::setGpgExecutable * @param path */ void MainWindow::setGpgExecutable(QString path) { gpgExecutable = path; } /** * @brief MainWindow::getGpgExecutable * @return */ QString MainWindow::getGpgExecutable() { return gpgExecutable; } /** * @brief MainWindow::on_configButton_clicked */ void MainWindow::on_configButton_clicked() { config(); } /** * @brief Executes when the string in the search box changes, collapses the TreeView * @param arg1 */ void MainWindow::on_lineEdit_textChanged(const QString &arg1) { ui->treeView->expandAll(); ui->statusBar->showMessage(tr("Looking for: %1").arg(arg1), 1000); QString query = arg1; query.replace(QRegExp(" "), ".*"); QRegExp regExp(query, Qt::CaseInsensitive); proxyModel.setFilterRegExp(regExp); ui->treeView->setRootIndex( proxyModel.mapFromSource(model.setRootPath(passStore))); selectFirstFile(); } /** * @brief MainWindow::on_lineEdit_returnPressed */ void MainWindow::on_lineEdit_returnPressed() { selectFirstFile(); on_treeView_clicked(ui->treeView->currentIndex()); } /** * @brief MainWindow::selectFirstFile */ void MainWindow::selectFirstFile() { QModelIndex index = proxyModel.mapFromSource(model.setRootPath(passStore)); index = firstFile(index); ui->treeView->setCurrentIndex(index); } /** * @brief MainWindow::firstFile * @param parentIndex * @return QModelIndex */ QModelIndex MainWindow::firstFile(QModelIndex parentIndex) { QModelIndex index = parentIndex; int numRows = proxyModel.rowCount(parentIndex); for (int row = 0; row < numRows; ++row) { index = proxyModel.index(row, 0, parentIndex); if (model.fileInfo(proxyModel.mapToSource(index)).isFile()) return index; if (proxyModel.hasChildren(index)) return firstFile(index); } return index; } /** * @brief MainWindow::on_clearButton_clicked */ void MainWindow::on_clearButton_clicked() { ui->lineEdit->clear(); } /** * @brief MainWindow::getRecipientList * @param for_file * @return */ QStringList MainWindow::getRecipientList(QString for_file) { QDir gpgIdPath(QFileInfo(for_file.startsWith(passStore) ? for_file : passStore + for_file) .absoluteDir()); bool found = false; while (gpgIdPath.exists() && gpgIdPath.absolutePath().startsWith(passStore)) { if (QFile(gpgIdPath.absoluteFilePath(".gpg-id")).exists()) { found = true; break; } if (!gpgIdPath.cdUp()) break; } QFile gpgId(found ? gpgIdPath.absoluteFilePath(".gpg-id") : passStore + ".gpg-id"); if (!gpgId.open(QIODevice::ReadOnly | QIODevice::Text)) return QStringList(); QStringList recipients; while (!gpgId.atEnd()) { QString recipient(gpgId.readLine()); recipient = recipient.trimmed(); if (!recipient.isEmpty()) recipients += recipient; } return recipients; } /** * @brief MainWindow::getRecipientString * @param for_file * @param separator * @param count * @return */ QString MainWindow::getRecipientString(QString for_file, QString separator, int *count) { QString recipients_str; QStringList recipients_list = getRecipientList(for_file); if (count) *count = recipients_list.size(); foreach(const QString recipient, recipients_list) recipients_str += separator + '"' + recipient + '"'; return recipients_str; } /** * @brief MainWindow::setPassword * @param file * @param overwrite */ void MainWindow::setPassword(QString file, bool overwrite, bool isNew = false) { if (!isNew && lastDecrypt.isEmpty()) { // warn? return; } PasswordDialog d(this); d.setFile(file); d.setTemplate(passTemplate); d.useTemplate(useTemplate); d.templateAll(templateAllFields); d.setPassword(lastDecrypt); if (!d.exec()) { d.setPassword(NULL); return; } QString newValue = d.getPassword(); if (newValue.isEmpty()) return; if (newValue.right(1) != "\n") newValue += "\n"; currentAction = EDIT; if (usePass) { QString force(overwrite ? " -f " : " "); executePass("insert" + force + "-m \"" + file + '"', newValue); } else { QString recipients = getRecipientString(file, " -r "); if (recipients.isEmpty()) { QMessageBox::critical(this, tr("Can not edit"), tr("Could not read encryption key to use, .gpg-id " "file missing or invalid.")); return; } QString force(overwrite ? " --yes " : " "); executeWrapper(gpgExecutable, force + "--batch -eq --output \"" + file + "\" " + recipients + " -", newValue); if (!useWebDav && useGit) { if (!overwrite) executeWrapper(gitExecutable, "add \"" + file + '"'); QString path = file; path.replace(QRegExp("\\.gpg$"), ""); path.replace(QRegExp("^" + passStore), ""); executeWrapper(gitExecutable, "commit \"" + file + "\" -m \"" + (overwrite ? "Edit" : "Add") + " for " + path + " using QtPass.\""); if (autoPush) on_pushButton_clicked(); } } } /** * @brief MainWindow::on_addButton_clicked */ void MainWindow::on_addButton_clicked() { // Check for active and selected encryption key // QList users=listKeys(); // UserInfo testuser; // bool noUserEnabled = false; // // Check if at least one active user is selected // for (int i = 0; i< users.length();i++) { // testuser = users[i]; // noUserEnabled = users[i].enabled | noUserEnabled; // } // // Error if no user is enabled, so a password doesn't get saved // if (noUserEnabled==false) { // QMessageBox::critical(this, tr("Can not get key list"), // tr("No Key for encryption selected! \nPlease select a valid key pair in the users dialouge")); // return; // } bool ok; QString dir = getDir(ui->treeView->currentIndex(), usePass); QString file = QInputDialog::getText( this, tr("New file"), tr("New password file: \n(Will be placed in %1 )") .arg(passStore + getDir(ui->treeView->currentIndex(), true)), QLineEdit::Normal, "", &ok); if (!ok || file.isEmpty()) return; file = dir + file; if (!usePass) file += ".gpg"; lastDecrypt = ""; setPassword(file, false, true); } /** * @brief MainWindow::on_deleteButton_clicked */ void MainWindow::on_deleteButton_clicked() { QFileInfo fileOrFolder = model.fileInfo(proxyModel.mapToSource(ui->treeView->currentIndex())); QString file = ""; if (fileOrFolder.isFile()) { file = getFile(ui->treeView->currentIndex(), usePass); if (QMessageBox::question( this, tr("Delete password?"), tr("Are you sure you want to delete %1?") .arg(QDir::separator() + getFile(ui->treeView->currentIndex(), true)), QMessageBox::Yes | QMessageBox::No) != QMessageBox::Yes) return; if (usePass) { currentAction = DELETE; executePass("rm -f \"" + file + '"'); if (useGit && autoPush) on_pushButton_clicked(); } else { if (useGit) { executeWrapper(gitExecutable, "rm -f \"" + file + '"'); executeWrapper(gitExecutable, "commit \"" + file + "\" -m \" Remove for " + getFile(ui->treeView->currentIndex(), true) + " using QtPass.\""); if (autoPush) on_pushButton_clicked(); } else { QFile(file).remove(); } } } else { file = getDir(ui->treeView->currentIndex(), usePass); // TODO: message box should accept enter key if (QMessageBox::question( this, tr("Delete folder?"), tr("Are you sure you want to delete %1?") .arg(QDir::separator() + getDir(ui->treeView->currentIndex(), true)), QMessageBox::Yes | QMessageBox::No) != QMessageBox::Yes) { return; } else { if (useGit) { executeWrapper(gitExecutable, "rm -rf \"" + file + '"'); executeWrapper(gitExecutable, "commit \"" + file + "\" -m \" Remove for " + getFile(ui->treeView->currentIndex(), true) + " using QtPass.\""); if (autoPush) on_pushButton_clicked(); } else { #if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) QDir dir(file); dir.removeRecursively(); #else removeDir(passStore + file); #endif } } } lastDecrypt = ""; } /** * @brief MainWindow::removeDir * @param dirName * @return */ bool MainWindow::removeDir(const QString &dirName) { bool result = true; QDir dir(dirName); if (dir.exists(dirName)) { Q_FOREACH(QFileInfo info, dir.entryInfoList(QDir::NoDotAndDotDot | QDir::System | QDir::Hidden | QDir::AllDirs | QDir::Files, QDir::DirsFirst)) { if (info.isDir()) result = removeDir(info.absoluteFilePath()); else result = QFile::remove(info.absoluteFilePath()); if (!result) return result; } result = dir.rmdir(dirName); } return result; } /** * @brief MainWindow::on_editButton_clicked */ void MainWindow::on_editButton_clicked() { QString file = getFile(ui->treeView->currentIndex(), usePass); if (file.isEmpty()) { QMessageBox::critical( this, tr("Can not edit"), tr("Selected password file does not exist, not able to edit")); return; } setPassword(file, true); } /** * @brief MainWindow::listKeys * @param keystring * @param secret * @return */ QList MainWindow::listKeys(QString keystring, bool secret) { waitFor(5); QList users; currentAction = GPG_INTERNAL; QString listopt = secret ? "--list-secret-keys " : "--list-keys "; executeWrapper(gpgExecutable, "--no-tty --with-colons " + listopt + keystring); process->waitForFinished(2000); if (process->exitStatus() != QProcess::NormalExit) return users; QStringList keys = QString(process->readAllStandardOutput()) .split(QRegExp("[\r\n]"), QString::SkipEmptyParts); UserInfo current_user; foreach(QString key, keys) { QStringList props = key.split(':'); if (props.size() < 10) continue; if (props[0] == (secret ? "sec" : "pub")) { if (!current_user.key_id.isEmpty()) users.append(current_user); current_user = UserInfo(); current_user.key_id = props[4]; current_user.name = props[9].toUtf8(); current_user.validity = props[8][0].toLatin1(); current_user.created.setTime_t(props[5].toInt()); current_user.expiry.setTime_t(props[6].toInt()); } else if (current_user.name.isEmpty() && props[0] == "uid") { current_user.name = props[9]; } } if (!current_user.key_id.isEmpty()) users.append(current_user); return users; } void MainWindow::userDialog(QString dir) { if (!dir.isEmpty()) currentDir = dir; on_usersButton_clicked(); } void MainWindow::on_usersButton_clicked() { QList users = listKeys(); if (users.size() == 0) { QMessageBox::critical(this, tr("Can not get key list"), tr("Unable to get list of available gpg keys")); return; } QList secret_keys = listKeys("", true); foreach(const UserInfo &sec, secret_keys) { for (QList::iterator it = users.begin(); it != users.end(); ++it) if (sec.key_id == it->key_id) it->have_secret = true; } QList selected_users; QString dir = currentDir.isEmpty() ? getDir(ui->treeView->currentIndex(), false) : currentDir; int count = 0; QString recipients = getRecipientString(dir.isEmpty() ? "" : dir, " ", &count); if (!recipients.isEmpty()) selected_users = listKeys(recipients); foreach(const UserInfo &sel, selected_users) { for (QList::iterator it = users.begin(); it != users.end(); ++it) if (sel.key_id == it->key_id) it->enabled = true; } if (count > selected_users.size()) { // Some keys seem missing from keyring, add them separately QStringList recipients = getRecipientList(dir.isEmpty() ? "" : dir); foreach(const QString recipient, recipients) { if (listKeys(recipient).size() < 1) { UserInfo i; i.enabled = true; i.key_id = recipient; i.name = " ?? " + tr("Key not found in keyring"); users.append(i); } } } UsersDialog d(this); d.setUsers(&users); if (!d.exec()) { d.setUsers(NULL); return; } d.setUsers(NULL); QString gpgIdFile = dir + ".gpg-id"; QFile gpgId(gpgIdFile); bool addFile = false; if (addGPGId) { QFileInfo checkFile(gpgIdFile); if (!checkFile.exists() || !checkFile.isFile()) addFile = true; } if (!gpgId.open(QIODevice::WriteOnly | QIODevice::Text)) { QMessageBox::critical(this, tr("Cannot update"), tr("Failed to open .gpg-id for writing.")); return; } bool secret_selected = false; foreach(const UserInfo &user, users) { if (user.enabled) { gpgId.write((user.key_id + "\n").toUtf8()); secret_selected |= user.have_secret; } } gpgId.close(); if (!secret_selected) { QMessageBox::critical( this, tr("Check selected users!"), tr("None of the selected keys have a secret key available.\n" "You will not be able to decrypt any newly added passwords!")); } if (!useWebDav && useGit && !gitExecutable.isEmpty()) { if (addFile) executeWrapper(gitExecutable, "add \"" + gpgIdFile + '"'); QString path = gpgIdFile; path.replace(QRegExp("\\.gpg$"), ""); executeWrapper(gitExecutable, "commit \"" + gpgIdFile + "\" -m \"Added " + path + " using QtPass.\""); if (autoPush) on_pushButton_clicked(); } } /** * @brief MainWindow::setApp * @param app */ void MainWindow::setApp(SingleApplication *app) { #if SINGLE_APP connect(app, SIGNAL(messageAvailable(QString)), this, SLOT(messageAvailable(QString))); #endif } /** * @brief MainWindow::messageAvailable * @param message */ void MainWindow::messageAvailable(QString message) { if (message.isEmpty()) { focusInput(); } else { ui->treeView->expandAll(); ui->lineEdit->setText(message); on_lineEdit_returnPressed(); } show(); raise(); } /** * @brief MainWindow::setText * @param message */ void MainWindow::setText(QString text) { ui->lineEdit->setText(text); } /** * @brief MainWindow::updateEnv */ void MainWindow::updateEnv() { QStringList store = env.filter("PASSWORD_STORE_DIR"); // put PASSWORD_STORE_DIR in env if (store.isEmpty()) { // qDebug() << "Added PASSWORD_STORE_DIR"; env.append("PASSWORD_STORE_DIR=" + passStore); } else { // qDebug() << "Update PASSWORD_STORE_DIR with " + passStore; env.replaceInStrings(store.first(), "PASSWORD_STORE_DIR=" + passStore); } } /** * @brief MainWindow::getSecretKeys * @return QStringList keys */ QStringList MainWindow::getSecretKeys() { QList keys = listKeys("", true); QStringList names; if (keys.size() == 0) return names; foreach(const UserInfo &sec, keys) names << sec.name; return names; } /** * @brief Dialog::genKey * @param QString batch */ void MainWindow::generateKeyPair(QString batch, QDialog *keygenWindow) { keygen = keygenWindow; ui->statusBar->showMessage(tr("Generating GPG key pair"), 60000); currentAction = GPG_INTERNAL; executeWrapper(gpgExecutable, "--gen-key --no-tty --batch", batch); } /** * @brief MainWindow::updateProfileBox */ void MainWindow::updateProfileBox() { // qDebug() << profiles.size(); if (profiles.isEmpty()) { ui->profileBox->hide(); } else { ui->profileBox->show(); if (profiles.size() < 2) ui->profileBox->setEnabled(false); else ui->profileBox->setEnabled(true); ui->profileBox->clear(); QHashIterator i(profiles); while (i.hasNext()) { i.next(); if (!i.key().isEmpty()) ui->profileBox->addItem(i.key()); } } int index = ui->profileBox->findText(profile); if (index != -1) // -1 for not found ui->profileBox->setCurrentIndex(index); } /** * @brief MainWindow::on_profileBox_currentIndexChanged * @param name */ void MainWindow::on_profileBox_currentIndexChanged(QString name) { if (startupPhase || name == profile) return; profile = name; passStore = profiles[name]; ui->statusBar->showMessage(tr("Profile changed to %1").arg(name), 2000); QSettings &settings(getSettings()); settings.setValue("profile", profile); settings.setValue("passStore", passStore); // qDebug() << env; QStringList store = env.filter("PASSWORD_STORE_DIR"); // put PASSWORD_STORE_DIR in env if (store.isEmpty()) { // qDebug() << "Added PASSWORD_STORE_DIR"; env.append("PASSWORD_STORE_DIR=" + passStore); } else { // qDebug() << "Update PASSWORD_STORE_DIR"; env.replaceInStrings(store.first(), "PASSWORD_STORE_DIR=" + passStore); } ui->treeView->setRootIndex( proxyModel.mapFromSource(model.setRootPath(passStore))); } /** * @brief MainWindow::initTrayIcon */ void MainWindow::initTrayIcon() { if (tray != NULL) { qDebug() << "Creating tray icon again?"; return; } if (QSystemTrayIcon::isSystemTrayAvailable() == true) { // Setup tray icon this->tray = new TrayIcon(this); if (tray == NULL) qDebug() << "Allocating tray icon failed."; } else { qDebug() << "No tray icon for this OS possibly also not show options?"; } } /** * @brief MainWindow::destroyTrayIcon */ void MainWindow::destroyTrayIcon() { if (tray == NULL) { qDebug() << "Destroy non existing tray icon?"; return; } delete this->tray; tray = NULL; } /** * @brief MainWindow::closeEvent * @param event */ void MainWindow::closeEvent(QCloseEvent *event) { if (hideOnClose) { this->hide(); event->ignore(); } else { settings->beginGroup("mainwindow"); settings->setValue("geometry", saveGeometry()); settings->setValue("savestate", saveState()); settings->setValue("maximized", isMaximized()); if (!isMaximized()) { settings->setValue("pos", pos()); settings->setValue("size", size()); } settings->setValue("splitterLeft", ui->splitter->sizes()[0]); settings->setValue("splitterRight", ui->splitter->sizes()[1]); settings->endGroup(); event->accept(); } } void MainWindow::keyPressEvent(QKeyEvent * event) { switch (event->key()) { case Qt::Key_Delete: on_deleteButton_clicked(); break; case Qt::Key_Return: case Qt::Key_Enter: on_editButton_clicked(); break; default: break; } } void MainWindow::on_copyPasswordButton_clicked() { copyPasswordToClipboard(); } /** * @brief MainWindow::showContextMenu * @param pos */ void MainWindow::showContextMenu(const QPoint &pos) { QModelIndex index = ui->treeView->indexAt(pos); bool selected = true; if (!index.isValid()) { ui->treeView->clearSelection(); ui->deleteButton->setEnabled(false); ui->editButton->setEnabled(false); currentDir = ""; selected = false; } ui->treeView->setCurrentIndex(index); QPoint globalPos = ui->treeView->viewport()->mapToGlobal(pos); QFileInfo fileOrFolder = model.fileInfo(proxyModel.mapToSource(ui->treeView->currentIndex())); QMenu contextMenu; if (!selected || fileOrFolder.isDir()) { QAction *addFolder = contextMenu.addAction(tr("Add folder")); QAction *addPassword = contextMenu.addAction(tr("Add password")); QAction *users = contextMenu.addAction(tr("Users")); connect(addFolder, SIGNAL(triggered()), this, SLOT(addFolder())); connect(addPassword, SIGNAL(triggered()), this, SLOT(on_addButton_clicked())); connect(users, SIGNAL(triggered()), this, SLOT(on_usersButton_clicked())); } else if (fileOrFolder.isFile()) { QAction *edit = contextMenu.addAction(tr("Edit")); connect(edit, SIGNAL(triggered()), this, SLOT(editPassword())); } if (selected) { // if (useClipboard != CLIPBOARD_NEVER) { // contextMenu.addSeparator(); // QAction* copyItem = contextMenu.addAction(tr("Copy Password")); // if (getClippedPassword().length() == 0) copyItem->setEnabled(false); // connect(copyItem, SIGNAL(triggered()), this, // SLOT(copyPasswordToClipboard())); // } contextMenu.addSeparator(); QAction *deleteItem = contextMenu.addAction(tr("Delete")); connect(deleteItem, SIGNAL(triggered()), this, SLOT(on_deleteButton_clicked())); } contextMenu.exec(globalPos); } /** * @brief MainWindow::showContextMenu * @param pos */ void MainWindow::showBrowserContextMenu(const QPoint &pos) { QMenu *contextMenu = ui->textBrowser->createStandardContextMenu(pos); if (useClipboard != CLIPBOARD_NEVER) { contextMenu->addSeparator(); QAction *copyItem = contextMenu->addAction(tr("Copy Password")); if (getClippedPassword().length() == 0) copyItem->setEnabled(false); connect(copyItem, SIGNAL(triggered()), this, SLOT(copyPasswordToClipboard())); } QPoint globalPos = ui->textBrowser->viewport()->mapToGlobal(pos); contextMenu->exec(globalPos); } /** * @brief MainWindow::addFolder */ void MainWindow::addFolder() { bool ok; QString dir = getDir(ui->treeView->currentIndex(), false); QString newdir = QInputDialog::getText( this, tr("New file"), tr("New Folder: \n(Will be placed in %1 )") .arg(passStore + getDir(ui->treeView->currentIndex(), true)), QLineEdit::Normal, "", &ok); if (!ok || newdir.isEmpty()) return; newdir.prepend(dir); // qDebug() << newdir; QDir().mkdir(newdir); // TODO(annejan) add to git? } /** * @brief MainWindow::editPassword */ void MainWindow::editPassword() { if (useGit && autoPull) on_updateButton_clicked(); waitFor(30); // TODO(annejan) move to editbutton stuff possibly? currentDir = getDir(ui->treeView->currentIndex(), false); lastDecrypt = "Could not decrypt"; QString file = getFile(ui->treeView->currentIndex(), usePass); if (!file.isEmpty()) { currentAction = GPG; if (usePass) executePass('"' + file + '"'); else executeWrapper(gpgExecutable, "-d --quiet --yes --no-encrypt-to --batch --use-agent \"" + file + '"'); process->waitForFinished(30000); // long wait (passphrase stuff) if (process->exitStatus() == QProcess::NormalExit) on_editButton_clicked(); } } /** * @brief MainWindow::generatePassword * @return */ QString MainWindow::generatePassword() { QString passwd; if (usePwgen) { waitFor(2); QString args = (useSymbols ? "--symbols -1 " : "-1 ") + QString::number(passwordLength); currentAction = PWGEN; executeWrapper(pwgenExecutable, args); process->waitForFinished(1000); if (process->exitStatus() == QProcess::NormalExit) passwd = QString(process->readAllStandardOutput()).remove(QRegExp("[\\n\\r]")); else qDebug() << "pwgen fail"; } else { int length = passwordChars.length(); if (length > 0) { for (int i = 0; i < passwordLength; ++i) { int index = qrand() % length; QChar nextChar = passwordChars.at(index); passwd.append(nextChar); } } else { QMessageBox::critical( this, tr("No characters chosen"), tr("Can't generate password, there are no characters to choose from " "set in the configuration!")); } } return passwd; } /** * @brief MainWindow::waitFor * @param seconds */ void MainWindow::waitFor(int seconds) { QDateTime current = QDateTime::currentDateTime(); uint stop = current.toTime_t() + seconds; while (!process->atEnd() || !execQueue->isEmpty()) { current = QDateTime::currentDateTime(); if (stop < current.toTime_t()) { QMessageBox::critical( this, tr("Timed out"), tr("Can't start process, previous one is still running!")); return; } Util::qSleep(100); } } /** * @brief MainWindow::clearTemplateWidgets */ void MainWindow::clearTemplateWidgets() { while (ui->formLayout->count() > 0) { QLayoutItem *item = ui->formLayout->takeAt(0); delete item->widget(); delete item; } ui->verticalLayoutPassword->setSpacing(0); } /* * @brief Mainwindow::copyPasswordToClipboard - copy the clipped password (if * not "") to the clipboard * @return */ void MainWindow::copyPasswordToClipboard() { if (clippedPass.length() > 0) { QClipboard *clip = QApplication::clipboard(); clip->setText(clippedPass); ui->statusBar->showMessage(tr("Password copied to clipboard"), 3000); if (useAutoclear) { QTimer::singleShot(1000 * autoclearSeconds, this, SLOT(clearClipboard())); } } } /** * @brief Mainwindow::setClippedPassword - set the stored clipped password * @return none */ void MainWindow::setClippedPassword(const QString &pass) { clippedPass = pass; if (clippedPass.length() == 0) ui->copyPasswordButton->setEnabled(false); else ui->copyPasswordButton->setEnabled(true); } const QString &MainWindow::getClippedPassword() { return clippedPass; } qtpass-1.1.0/mainwindow.h000066400000000000000000000110351265137067200153620ustar00rootroot00000000000000#ifndef MAINWINDOW_H_ #define MAINWINDOW_H_ #include #include #include #include #include #include #include #include "storemodel.h" #include "trayicon.h" #if SINGLE_APP #include "singleapplication.h" #else #define SingleApplication QApplication #endif namespace Ui { class MainWindow; } struct execQueueItem { QString app; QString args; QString input; }; struct UserInfo; class MainWindow : public QMainWindow { Q_OBJECT enum actionType { GPG, GIT, EDIT, DELETE, GPG_INTERNAL, PWGEN }; public: enum clipBoardType { CLIPBOARD_NEVER = 0, CLIPBOARD_ALWAYS = 1, CLIPBOARD_ON_DEMAND = 2 }; explicit MainWindow(QWidget *parent = 0); ~MainWindow(); void setPassExecutable(QString); void setGitExecutable(QString); void setGpgExecutable(QString); QString getGpgExecutable(); bool checkConfig(); void setApp(SingleApplication *app); void setText(QString); QStringList getSecretKeys(); void generateKeyPair(QString, QDialog *); void userDialog(QString = ""); QString generatePassword(); void config(); void executePassGitInit(); protected: void closeEvent(QCloseEvent *event); void keyPressEvent(QKeyEvent * event); private slots: void on_updateButton_clicked(); void on_pushButton_clicked(); void on_treeView_clicked(const QModelIndex &index); void on_treeView_doubleClicked(const QModelIndex &index); void on_configButton_clicked(); void readyRead(bool finished); void processFinished(int, QProcess::ExitStatus); void processError(QProcess::ProcessError); void clearClipboard(); void clearPanel(); void on_lineEdit_textChanged(const QString &arg1); void on_lineEdit_returnPressed(); void on_clearButton_clicked(); void on_addButton_clicked(); void on_deleteButton_clicked(); void on_editButton_clicked(); void on_usersButton_clicked(); void messageAvailable(QString message); void on_profileBox_currentIndexChanged(QString); void on_copyPasswordButton_clicked(); void showContextMenu(const QPoint &pos); void showBrowserContextMenu(const QPoint &pos); void addFolder(); void editPassword(); void focusInput(); void copyPasswordToClipboard(); private: QAction *actionAddPassword; QAction *actionAddFolder; QApplication *QtPass; QScopedPointer settings; QScopedPointer ui; QFileSystemModel model; StoreModel proxyModel; QScopedPointer selectionModel; QScopedPointer process; bool usePass; clipBoardType useClipboard; bool useAutoclear; bool useAutoclearPanel; bool hidePassword; bool hideContent; bool addGPGId; int autoclearSeconds; int autoclearPanelSeconds; QString passStore; QString passExecutable; QString gitExecutable; QString gpgExecutable; QString pwgenExecutable; QString gpgHome; bool useWebDav; QString webDavUrl; QString webDavUser; QString webDavPassword; QProcess fusedav; QString clippedPass; QString autoclearPass; QTimer *autoclearTimer; actionType currentAction; QString lastDecrypt; bool wrapperRunning; QStringList env; QQueue *execQueue; bool freshStart; QDialog *keygen; QString currentDir; QHash profiles; QString profile; bool startupPhase; TrayIcon *tray; bool useTrayIcon; bool hideOnClose; bool startMinimized; bool useGit; bool usePwgen; bool useSymbols; int passwordLength; QString passwordChars; bool useTemplate; QString passTemplate; bool templateAllFields; bool autoPull; bool autoPush; bool alwaysOnTop; void updateText(); void executePass(QString, QString = QString()); void executeWrapper(QString, QString, QString = QString()); void enableUiElements(bool state); void selectFirstFile(); QModelIndex firstFile(QModelIndex parentIndex); QString getDir(const QModelIndex &, bool); QString getFile(const QModelIndex &, bool); void setPassword(QString, bool, bool); QSettings &getSettings(); QList listKeys(QString keystring = "", bool secret = false); QStringList getRecipientList(QString for_file); QString getRecipientString(QString for_file, QString separator = " ", int *count = NULL); void mountWebDav(); void updateEnv(); void updateProfileBox(); void initTrayIcon(); void destroyTrayIcon(); bool removeDir(const QString &dirName); void waitFor(int seconds); void clearTemplateWidgets(); void setClippedPassword(const QString &pass); const QString &getClippedPassword(); }; #endif // MAINWINDOW_H_ qtpass-1.1.0/mainwindow.ui000066400000000000000000000336571265137067200155660ustar00rootroot00000000000000 MainWindow 0 0 398 291 QtPass 0 0 0 0 0 0 false Add Add :/icons/document-new.svg QToolButton::MenuButtonPopup Qt::ToolButtonTextBesideIcon false Qt::NoArrow Edit Edit :/icons/document-properties.svg Qt::ToolButtonTextBesideIcon Delete Delete :/icons/edit-delete.svg Qt::ToolButtonTextBesideIcon Qt::Horizontal QSizePolicy::Maximum 24 24 git push Push :/icons/go-top.svg Qt::ToolButtonTextBesideIcon git pull Update :/icons/go-bottom.svg Qt::ToolButtonTextBesideIcon Qt::Horizontal QSizePolicy::Maximum 24 24 Manage who can read password in folder Users :/icons/x-office-address-book.svg Qt::ToolButtonTextBesideIcon Configuration Config :/icons/applications-system.svg Qt::ToolButtonTextBesideIcon Qt::Horizontal QSizePolicy::Maximum 24 24 Copy Password Copy Password :/icons/edit-copy.svg Qt::ToolButtonTextBesideIcon Qt::Horizontal 100 20 0 0 100 26 Qt::Horizontal 6 0 26 0 26 Clear search X :/icons/edit-clear.svg Qt::ToolButtonIconOnly 0 QFormLayout::AllNonFixedFieldsGrow Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'.SF NS Text'; font-size:13pt; font-weight:400; font-style:normal;"> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; font-weight:600; color:#333333;">QtPass</span><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; color:#333333;"> is a GUI for </span><a href="http://www.passwordstore.org/"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; text-decoration: underline; color:#4183c4; background-color:transparent;">pass</span></a><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; color:#333333;">, the standard unix password manager.</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; color:#333333;"><br />Please report any </span><a href="https://github.com/IJHack/qtpass/issues"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; text-decoration: underline; color:#4183c4;">issues</span></a><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; color:#333333;"> you might have with this software.</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://qtpass.org/"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; text-decoration: underline; color:#4183c4; background-color:transparent;">Documentation</span></a></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="https://github.com/IJHack/qtpass"><span style=" font-family:'Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif'; text-decoration: underline; color:#4183c4; background-color:transparent;">Source code</span></a></p></body></html> qtpass lineEdit clearButton addButton editButton deleteButton pushButton updateButton usersButton configButton qtpass-1.1.0/passworddialog.cpp000066400000000000000000000070411265137067200165650ustar00rootroot00000000000000#include "passworddialog.h" #include #include #include #include "ui_passworddialog.h" PasswordDialog::PasswordDialog(MainWindow *parent) : QDialog(parent), ui(new Ui::PasswordDialog) { mainWindow = parent; templating = false; allFields = false; ui->setupUi(this); } PasswordDialog::~PasswordDialog() { delete ui; } void PasswordDialog::on_checkBoxShow_stateChanged(int arg1) { if (arg1) ui->lineEditPassword->setEchoMode(QLineEdit::Normal); else ui->lineEditPassword->setEchoMode(QLineEdit::Password); } void PasswordDialog::on_createPasswordButton_clicked() { ui->widget->setEnabled(false); ui->lineEditPassword->setText(mainWindow->generatePassword()); ui->widget->setEnabled(true); } void PasswordDialog::setPassword(QString password) { QStringList tokens = password.split("\n"); ui->lineEditPassword->setText(tokens[0]); tokens.pop_front(); if (templating) { QWidget *previous = ui->checkBoxShow; for (int i = 0; i < ui->formLayout->rowCount(); ++i) { QLayoutItem *item = ui->formLayout->itemAt(i, QFormLayout::FieldRole); if (item == NULL) continue; QWidget *widget = item->widget(); for (int j = 0; j < tokens.length(); ++j) { QString token = tokens.at(j); if (token.startsWith(widget->objectName() + ':')) { tokens.removeAt(j); QString value = token.remove(0, widget->objectName().length() + 1); reinterpret_cast(widget)->setText(value); } } previous = widget; } if (allFields) { for (int j = 0; j < tokens.length(); ++j) { QString token = tokens.at(j); if (token.contains(':')) { int colon = token.indexOf(':'); QString field = token.left(colon); QString value = token.right(token.length() - colon - 1); if (!passTemplate.contains(field) && value.startsWith("//")) continue; // colon is probably from a url QLineEdit *line = new QLineEdit(); line->setObjectName(field); line->setText(value); ui->formLayout->addRow(new QLabel(field), line); setTabOrder(previous, line); previous = line; tokens.removeAt(j); --j; // tokens.length() also got shortened by the remove.. } } } } ui->plainTextEdit->insertPlainText(tokens.join("\n")); } QString PasswordDialog::getPassword() { QString passFile = ui->lineEditPassword->text() + "\n"; for (int i = 0; i < ui->formLayout->rowCount(); ++i) { QLayoutItem *item = ui->formLayout->itemAt(i, QFormLayout::FieldRole); if (item == NULL) continue; QWidget *widget = item->widget(); QString text = reinterpret_cast(widget)->text(); if (text.isEmpty()) continue; passFile += widget->objectName() + ":" + text + "\n"; } passFile += ui->plainTextEdit->toPlainText(); return passFile; } void PasswordDialog::setTemplate(QString rawFields) { fields = rawFields.split('\n'); QWidget *previous = ui->checkBoxShow; foreach(QString field, fields) { if (field.isEmpty()) continue; QLineEdit *line = new QLineEdit(); line->setObjectName(field); ui->formLayout->addRow(new QLabel(field), line); setTabOrder(previous, line); previous = line; } } void PasswordDialog::setFile(QString file) { this->setWindowTitle(this->windowTitle() + " " + file); } void PasswordDialog::templateAll(bool templateAll) { allFields = templateAll; } void PasswordDialog::useTemplate(bool useTemplate) { templating = useTemplate; } qtpass-1.1.0/passworddialog.h000066400000000000000000000013431265137067200162310ustar00rootroot00000000000000#ifndef PASSWORDDIALOG_H_ #define PASSWORDDIALOG_H_ #include #include "mainwindow.h" namespace Ui { class PasswordDialog; } class PasswordDialog : public QDialog { Q_OBJECT public: explicit PasswordDialog(MainWindow *parent = 0); ~PasswordDialog(); void setPassword(QString); QString getPassword(); void setTemplate(QString); void setFile(QString); void useTemplate(bool useTemplate); void templateAll(bool templateAll); private slots: void on_checkBoxShow_stateChanged(int arg1); void on_createPasswordButton_clicked(); private: Ui::PasswordDialog *ui; MainWindow *mainWindow; QString passTemplate; QStringList fields; bool templating; bool allFields; }; #endif // PASSWORDDIALOG_H_ qtpass-1.1.0/passworddialog.ui000066400000000000000000000074471265137067200164320ustar00rootroot00000000000000 PasswordDialog 0 0 425 359 Password 6 6 6 6 0 0 0 0 QLineEdit::Password true Generate Show password QLayout::SetDefaultConstraint QFormLayout::AllNonFixedFieldsGrow Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok lineEditPassword createPasswordButton checkBoxShow plainTextEdit buttonBox accepted() PasswordDialog accept() 248 254 157 274 buttonBox rejected() PasswordDialog reject() 316 260 286 274 qtpass-1.1.0/qprogressindicator.cpp000066400000000000000000000044101265137067200174620ustar00rootroot00000000000000#include "qprogressindicator.h" #include QProgressIndicator::QProgressIndicator(QWidget *parent) : QWidget(parent), m_angle(0), m_timerId(-1), m_delay(40), m_displayedWhenStopped(false), m_color(Qt::black) { setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); setFocusPolicy(Qt::NoFocus); } bool QProgressIndicator::isAnimated() const { return m_timerId != -1; } void QProgressIndicator::setDisplayedWhenStopped(bool state) { m_displayedWhenStopped = state; update(); } bool QProgressIndicator::isDisplayedWhenStopped() const { return m_displayedWhenStopped; } void QProgressIndicator::startAnimation() { m_angle = 0; if (m_timerId == -1) m_timerId = startTimer(m_delay); } void QProgressIndicator::stopAnimation() { if (m_timerId != -1) killTimer(m_timerId); m_timerId = -1; update(); } void QProgressIndicator::setAnimationDelay(int delay) { if (m_timerId != -1) killTimer(m_timerId); m_delay = delay; if (m_timerId != -1) m_timerId = startTimer(m_delay); } void QProgressIndicator::setColor(const QColor &color) { m_color = color; update(); } QSize QProgressIndicator::sizeHint() const { return QSize(20, 20); } int QProgressIndicator::heightForWidth(int w) const { return w; } void QProgressIndicator::timerEvent(QTimerEvent * /*event*/) { m_angle = (m_angle + 30) % 360; update(); } void QProgressIndicator::paintEvent(QPaintEvent * /*event*/) { if (!m_displayedWhenStopped && !isAnimated()) return; int width = qMin(this->width(), this->height()); QPainter p(this); p.setRenderHint(QPainter::Antialiasing); int outerRadius = (width - 1) * 0.5; int innerRadius = (width - 1) * 0.5 * 0.38; int capsuleHeight = outerRadius - innerRadius; int capsuleWidth = (width > 32) ? capsuleHeight * .23 : capsuleHeight * .35; int capsuleRadius = capsuleWidth / 2; for (int i = 0; i < 12; ++i) { QColor color = m_color; color.setAlphaF(1.0f - (i / 12.0f)); p.setPen(Qt::NoPen); p.setBrush(color); p.save(); p.translate(rect().center()); p.rotate(m_angle - i * 30.0f); p.drawRoundedRect(-capsuleWidth * 0.5, -(innerRadius + capsuleHeight), capsuleWidth, capsuleHeight, capsuleRadius, capsuleRadius); p.restore(); } } qtpass-1.1.0/qprogressindicator.h000066400000000000000000000055171265137067200171400ustar00rootroot00000000000000#ifndef QPROGRESSINDICATOR_H_ #define QPROGRESSINDICATOR_H_ #include #include /*! \class QProgressIndicator \brief The QProgressIndicator class lets an application display a progress indicator to show that a lengthy task is under way. Progress indicators are indeterminate and do nothing more than spin to show that the application is busy. \sa QProgressBar */ class QProgressIndicator : public QWidget { Q_OBJECT Q_PROPERTY(int delay READ animationDelay WRITE setAnimationDelay) Q_PROPERTY(bool displayedWhenStopped READ isDisplayedWhenStopped WRITE setDisplayedWhenStopped) Q_PROPERTY(QColor color READ color WRITE setColor) public: explicit QProgressIndicator(QWidget *parent = 0); /*! Returns the delay between animation steps. \return The number of milliseconds between animation steps. By default, the animation delay is set to 40 milliseconds. \sa setAnimationDelay */ int animationDelay() const { return m_delay; } /*! Returns a Boolean value indicating whether the component is currently animated. \return Animation state. \sa startAnimation stopAnimation */ bool isAnimated() const; /*! Returns a Boolean value indicating whether the receiver shows itself even when it is not animating. \return Return true if the progress indicator shows itself even when it is not animating. By default, it returns false. \sa setDisplayedWhenStopped */ bool isDisplayedWhenStopped() const; /*! Returns the color of the component. \sa setColor */ const QColor &color() const { return m_color; } virtual QSize sizeHint() const; int heightForWidth(int w) const; public slots: /*! Starts the spin animation. \sa stopAnimation isAnimated */ void startAnimation(); /*! Stops the spin animation. \sa startAnimation isAnimated */ void stopAnimation(); /*! Sets the delay between animation steps. Setting the \a delay to a value larger than 40 slows the animation, while setting the \a delay to a smaller value speeds it up. \param delay The delay, in milliseconds. \sa animationDelay */ void setAnimationDelay(int delay); /*! Sets whether the component hides itself when it is not animating. \param state The animation state. Set false to hide the progress indicator when it is not animating; otherwise true. \sa isDisplayedWhenStopped */ void setDisplayedWhenStopped(bool state); /*! Sets the color of the components to the given color. \sa color */ void setColor(const QColor &color); protected: virtual void timerEvent(QTimerEvent *event); virtual void paintEvent(QPaintEvent *event); private: int m_angle; int m_timerId; int m_delay; bool m_displayedWhenStopped; QColor m_color; }; #endif // QPROGRESSINDICATOR_H_ qtpass-1.1.0/qtpass.desktop000066400000000000000000000002631265137067200157440ustar00rootroot00000000000000[Desktop Entry] Type=Application Name=QtPass Version=1.0 Comment=GUI for the standard unix password store Exec=qtpass Icon=qtpass-icon Terminal=false Categories=Security;Utility; qtpass-1.1.0/qtpass.iss000066400000000000000000000107131265137067200150720ustar00rootroot00000000000000; Script generated by the Inno Script Studio Wizard. ; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES! #define MyAppName "QtPass" #define MyAppVersion "1.1.0" #define MyAppPublisher "IJhack" #define MyAppURL "https://qtpass.org/" #define MyAppExeName "qtpass.exe" #define QtDir GetEnv('QTDIR') [Setup] ; NOTE: The value of AppId uniquely identifies this application. ; Do not use the same AppId value in installers for other applications. ; (To generate a new GUID, click Tools | Generate GUID inside the IDE.) AppId={{C64A2871-0C42-4A90-9071-D84DC30563BF} AppName={#MyAppName} AppVersion={#MyAppVersion} ;AppVerName={#MyAppName} {#MyAppVersion} AppPublisher={#MyAppPublisher} AppPublisherURL={#MyAppURL} AppSupportURL={#MyAppURL} AppUpdatesURL={#MyAppURL} DefaultDirName={pf}\{#MyAppName} DefaultGroupName={#MyAppName} LicenseFile=release\LICENSE.txt OutputBaseFilename=qtpass-{#MyAppVersion} Compression=lzma SolidCompression=yes ShowLanguageDialog=no [Languages] Name: "english"; MessagesFile: "compiler:Default.isl" Name: "brazilianportuguese"; MessagesFile: "compiler:Languages\BrazilianPortuguese.isl" Name: "catalan"; MessagesFile: "compiler:Languages\Catalan.isl" Name: "corsican"; MessagesFile: "compiler:Languages\Corsican.isl" Name: "czech"; MessagesFile: "compiler:Languages\Czech.isl" Name: "danish"; MessagesFile: "compiler:Languages\Danish.isl" Name: "dutch"; MessagesFile: "compiler:Languages\Dutch.isl" Name: "finnish"; MessagesFile: "compiler:Languages\Finnish.isl" Name: "french"; MessagesFile: "compiler:Languages\French.isl" Name: "german"; MessagesFile: "compiler:Languages\German.isl" Name: "greek"; MessagesFile: "compiler:Languages\Greek.isl" Name: "hebrew"; MessagesFile: "compiler:Languages\Hebrew.isl" Name: "hungarian"; MessagesFile: "compiler:Languages\Hungarian.isl" Name: "italian"; MessagesFile: "compiler:Languages\Italian.isl" Name: "japanese"; MessagesFile: "compiler:Languages\Japanese.isl" Name: "nepali"; MessagesFile: "compiler:Languages\Nepali.islu" Name: "norwegian"; MessagesFile: "compiler:Languages\Norwegian.isl" Name: "polish"; MessagesFile: "compiler:Languages\Polish.isl" Name: "portuguese"; MessagesFile: "compiler:Languages\Portuguese.isl" Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl" Name: "scottishgaelic"; MessagesFile: "compiler:Languages\ScottishGaelic.isl" Name: "serbiancyrillic"; MessagesFile: "compiler:Languages\SerbianCyrillic.isl" Name: "serbianlatin"; MessagesFile: "compiler:Languages\SerbianLatin.isl" Name: "slovenian"; MessagesFile: "compiler:Languages\Slovenian.isl" Name: "spanish"; MessagesFile: "compiler:Languages\Spanish.isl" Name: "turkish"; MessagesFile: "compiler:Languages\Turkish.isl" Name: "ukrainian"; MessagesFile: "compiler:Languages\Ukrainian.isl" [Tasks] Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked [Files] Source: "{#QtDir}\bin\Qt5Gui.dll"; DestDir: "{app}"; Flags: ignoreversion Source: "{#QtDir}\bin\Qt5Network.dll"; DestDir: "{app}"; Flags: ignoreversion Source: "{#QtDir}\bin\Qt5Widgets.dll"; DestDir: "{app}"; Flags: ignoreversion Source: "{#QtDir}\bin\Qt5Svg.dll"; DestDir: "{app}"; Flags: ignoreversion Source: "{#QtDir}\bin\icudt54.dll"; DestDir: "{app}"; Flags: ignoreversion Source: "{#QtDir}\bin\icuin54.dll"; DestDir: "{app}"; Flags: ignoreversion Source: "{#QtDir}\bin\icuuc54.dll"; DestDir: "{app}"; Flags: ignoreversion Source: "{#QtDir}\bin\libgcc_s_dw2-1.dll"; DestDir: "{app}"; Flags: ignoreversion Source: "{#QtDir}\bin\libstdc++-6.dll"; DestDir: "{app}"; Flags: ignoreversion Source: "{#QtDir}\bin\libwinpthread-1.dll"; DestDir: "{app}"; Flags: ignoreversion Source: "{#QtDir}\bin\Qt5Core.dll"; DestDir: "{app}"; Flags: ignoreversion Source: "{#QtDir}\plugins\platforms\qwindows.dll"; DestDir: "{app}\platforms\"; Flags: ignoreversion Source: "release\qtpass.exe"; DestDir: "{app}"; Flags: ignoreversion Source: "release\README.txt"; DestDir: "{app}"; Flags: ignoreversion Source: "release\LICENSE.txt"; DestDir: "{app}"; Flags: ignoreversion [Icons] Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}" Name: "{group}\{cm:ProgramOnTheWeb,{#MyAppName}}"; Filename: "{#MyAppURL}" Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon [Run] Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent qtpass-1.1.0/qtpass.plist000066400000000000000000000022261265137067200154270ustar00rootroot00000000000000 CFBundleDisplayName QtPass @SHORT_VERSION@ CFBundleExecutable @EXECUTABLE@ CFBundleGetInfoString @SHORT_VERSION@ CFBundleIconFile icon.icns CFBundleIdentifier $(PRODUCT_BUNDLE_IDENTIFIER) CFBundlePackageType APPL CFBundleShortVersionString @SHORT_VERSION@ CFBundleSignature @TYPEINFO@ NOTE QtPass is a multi-platform GUI for pass NSHumanReadableCopyright Copyright © 2014-2015 IJhack 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. NSPrincipalClass NSApplication qtpass-1.1.0/qtpass.pro000066400000000000000000000075351265137067200151040ustar00rootroot00000000000000#---------------------------------------------------------- # # # QtPass is a GUI for pass, # # the standard unix password manager. # # # # Project started by Anne Jan Brouwer 2014-07-30T21:56:15 # # # #---------------------------------------------------------- VERSION = 1.1.0 TEMPLATE = app QT += core gui greaterThan(QT_MAJOR_VERSION, 4): QT += widgets macx { TARGET = QtPass QMAKE_MAC_SDK = macosx QT += svg } else { TARGET = qtpass } SOURCES += main.cpp\ mainwindow.cpp \ configdialog.cpp \ storemodel.cpp \ util.cpp \ usersdialog.cpp \ keygendialog.cpp \ trayicon.cpp \ passworddialog.cpp \ qprogressindicator.cpp HEADERS += mainwindow.h \ configdialog.h \ storemodel.h \ util.h \ usersdialog.h \ keygendialog.h \ trayicon.h \ passworddialog.h \ qprogressindicator.h FORMS += mainwindow.ui \ configdialog.ui \ usersdialog.ui \ keygendialog.ui \ passworddialog.ui QMAKE_CXXFLAGS_WARN_ON += -Wno-unknown-pragmas nosingleapp { QMAKE_CXXFLAGS += -DSINGLE_APP=0 } else { SOURCES += singleapplication.cpp HEADERS += singleapplication.h QT += network QMAKE_CXXFLAGS += -DSINGLE_APP=1 } TRANSLATIONS += localization/localization_nl_NL.ts \ localization/localization_de_DE.ts \ localization/localization_es_ES.ts \ localization/localization_gl_ES.ts \ localization/localization_hu_HU.ts \ localization/localization_sv_SE.ts \ localization/localization_pl_PL.ts \ localization/localization_ru_RU.ts \ localization/localization_he_IL.ts \ localization/localization_zh_CN.ts \ localization/localization_ar_MA.ts \ localization/localization_fr_FR.ts \ localization/localization_fr_BE.ts CODECFORSRC = UTF-8 CODECFORTR = UTF-8 isEmpty(QMAKE_LRELEASE) { win32|os2:QMAKE_LRELEASE = $$[QT_INSTALL_BINS]\\lrelease.exe else:QMAKE_LRELEASE = $$[QT_INSTALL_BINS]/lrelease unix { !exists($$QMAKE_LRELEASE) { greaterThan(QT_MAJOR_VERSION, 4) { QMAKE_LRELEASE = lrelease-qt5 } else { QMAKE_LRELEASE = lrelease-qt4 } } } else { !exists($$QMAKE_LRELEASE) { QMAKE_LRELEASE = lrelease } } } updateqm.input = TRANSLATIONS updateqm.output = localization/${QMAKE_FILE_BASE}.qm updateqm.commands = $$QMAKE_LRELEASE ${QMAKE_FILE_IN} -qm localization/${QMAKE_FILE_BASE}.qm updateqm.CONFIG += no_link target_predeps QMAKE_EXTRA_COMPILERS += updateqm PRE_TARGETDEPS += compiler_updateqm_make_all win32 { system($$QMAKE_LRELEASE qtpass.pro) } else { system($$QMAKE_LRELEASE $$_PRO_FILE_) } RESOURCES += resources.qrc win32 { RC_FILE = windows.rc static { QMAKE_LFLAGS += -static-libgcc -static-libstdc++ } QMAKE_LFLAGS += -Wl,--dynamicbase -Wl,--nxcompat LIBS += -lmpr } else:macx { ICON = artwork/icon.icns QMAKE_INFO_PLIST = qtpass.plist #QMAKE_POST_LINK = cp -r $$PWD/icons $$OUT_PWD/QtPass.app/Contents/MacOS } else:bsd { LIBS += -L/usr/local/lib } OTHER_FILES += LICENSE \ README.md isEmpty(PREFIX) { PREFIX = $$(PREFIX) } isEmpty(PREFIX) { PREFIX = /usr/local/bin } target.path = $$PREFIX/ INSTALLS += target DEFINES += "VERSION=\"\\\"$$VERSION\\\"\"" qtpass-1.1.0/qtpass.spec000066400000000000000000000040271265137067200152270ustar00rootroot00000000000000# This is an initial attempt to create a RPM spec file for qtpass. Tested on Fedora 23. # Replace the Version number with the current version number (at the time of writing 1.0.5.1) # Check qtpass.pro for the current version. # After that # tar cvfz qtpass-1.0.5.1.tar.gz qtpass-1.0.5.1 # rpmbuild -tb qtpass-1.0.5.1.tar.gz # This should probably be part of a release process. Name: qtpass Version: 1.0.5.1 Release: 2%{?dist} Summary: QtPass is a multi-platform GUI for pass, the standard unix password manager. License: GPLv3 URL: https://qtpass.org/ Source0: %{name}-%{version}.tar.gz BuildRequires: qt5-qtbase-devel BuildRequires: qt5-linguist BuildRequires: desktop-file-utils BuildRequires: xdg-utils Requires: pass Requires: qt5-qtbase %description QtPass is a GUI for pass, the standard unix password manager. Features: - Using pass or git and gpg2 directly - Configurable shoulder surfing protection options - Cross platform: Linux, BSD, OS X and Windows - Per-folder user selection for multi recipient encryption - Multiple profiles %prep %setup -q %build qmake-qt5 PREFIX=%{buildroot}/%{_bindir} make %{?_smp_mflags} %install %make_install install -Dm 0644 artwork/icon.png %{buildroot}%{_datadir}/icons/hicolor/64x64/apps/qtpass-icon.png desktop-file-install --dir=%{buildroot}%{_datadir}/applications qtpass.desktop %files %doc %{_bindir}/* %{_datadir}/applications/qtpass.desktop %{_datadir}/icons/hicolor/64x64/apps/qtpass-icon.png %post /bin/touch --no-create %{_datadir}/icons/hicolor &>/dev/null || : %postun if [ $1 -eq 0 ] ; then /bin/touch --no-create %{_datadir}/icons/hicolor &>/dev/null /usr/bin/gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || : fi %posttrans /usr/bin/gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || : %changelog * Wed Dec 30 2015 Andrew DeMaria 1.0.5.1-2 - Added desktop/icon resources - Added required build deps for a clean build * Tue Dec 01 2015 serstring=Bram Vandoren - 1.0.5-1 - Initial RPM spec qtpass-1.1.0/release-linux000077500000000000000000000003051265137067200155360ustar00rootroot00000000000000qmake CONFIG+=release && make && sudo make install cd artwork cp icon.png qtpass-icon.png xdg-icon-resource install --size 64 qtpass-icon.png cd .. sudo cp qtpass.desktop /usr/share/applications/ qtpass-1.1.0/release-mac000077500000000000000000000001311265137067200151340ustar00rootroot00000000000000qmake CONFIG+=release && make && macdeployqt QtPass.app && appdmg appdmg.json QtPass.dmg qtpass-1.1.0/release-zip.mak000066400000000000000000000006561265137067200157560ustar00rootroot00000000000000# Note: this assumes Qt with release and debug config was used VERSION=v1.0 qtpass-${VERSION}-gpg4win.zip: qtpass.exe qtpass.ini LICENSE README.md password-store gpg4win key_management.bat 7z a -mx=9 $@ $^ qtpass.exe: release/qtpass.exe strip $^ if [ -n "$(SIGNKEY)" ] ; then osslsigncode sign -ts http://www.startssl.com/timestamp -certs $(SIGNKEY).crt -key $(SIGNKEY).key -in $^ -out $@ ; chmod +x $@ ; else cp $^ $@ ; fi qtpass-1.1.0/resources.qrc000066400000000000000000000027501265137067200155620ustar00rootroot00000000000000 artwork/icon.icns artwork/icon.ico artwork/icon.png artwork/icon.svg localization/localization_ar_MA.qm localization/localization_de_DE.qm localization/localization_es_ES.qm localization/localization_gl_ES.qm localization/localization_hu_HU.qm localization/localization_nl_NL.qm localization/localization_sv_SE.qm localization/localization_pl_PL.qm localization/localization_ru_RU.qm localization/localization_zh_CN.qm localization/localization_he_IL.qm icons/document-new.svg icons/document-properties.svg icons/edit-delete.svg icons/go-bottom.svg icons/x-office-address-book.svg icons/go-top.svg icons/applications-system.svg icons/edit-copy.svg icons/edit-clear.svg qtpass-1.1.0/singleapplication.cpp000066400000000000000000000041201265137067200172430ustar00rootroot00000000000000#include "singleapplication.h" #include /** * @brief SingleApplication::SingleApplication * @param argc * @param argv * @param uniqueKey */ SingleApplication::SingleApplication(int &argc, char *argv[], const QString uniqueKey) : QApplication(argc, argv), _uniqueKey(uniqueKey) { sharedMemory.setKey(_uniqueKey); if (sharedMemory.attach()) { _isRunning = true; } else { _isRunning = false; // create shared memory. if (!sharedMemory.create(1)) { qDebug("Unable to create single instance."); return; } // create local server and listen to incomming messages from other // instances. localServer.reset(new QLocalServer(this)); connect(localServer.data(), SIGNAL(newConnection()), this, SLOT(receiveMessage())); localServer->listen(_uniqueKey); } } // public slots. /** * @brief SingleApplication::receiveMessage */ void SingleApplication::receiveMessage() { QLocalSocket *localSocket = localServer->nextPendingConnection(); if (!localSocket->waitForReadyRead(timeout)) { qDebug() << localSocket->errorString().toLatin1(); return; } QByteArray byteArray = localSocket->readAll(); QString message = QString::fromUtf8(byteArray.constData()); emit messageAvailable(message); localSocket->disconnectFromServer(); } // public functions. /** * @brief SingleApplication::isRunning * @return */ bool SingleApplication::isRunning() { return _isRunning; } /** * @brief SingleApplication::sendMessage * @param message * @return */ bool SingleApplication::sendMessage(const QString &message) { if (!_isRunning) return false; QLocalSocket localSocket(this); localSocket.connectToServer(_uniqueKey, QIODevice::WriteOnly); if (!localSocket.waitForConnected(timeout)) { qDebug() << localSocket.errorString().toLatin1(); return false; } localSocket.write(message.toUtf8()); if (!localSocket.waitForBytesWritten(timeout)) { qDebug() << localSocket.errorString().toLatin1(); return false; } localSocket.disconnectFromServer(); return true; } qtpass-1.1.0/singleapplication.h000066400000000000000000000011641265137067200167150ustar00rootroot00000000000000#ifndef SINGLEAPPLICATION_H_ #define SINGLEAPPLICATION_H_ #include #include #include class SingleApplication : public QApplication { Q_OBJECT public: SingleApplication(int &argc, char *argv[], const QString uniqueKey); bool isRunning(); bool sendMessage(const QString &message); public slots: void receiveMessage(); signals: void messageAvailable(QString message); private: bool _isRunning; QString _uniqueKey; QSharedMemory sharedMemory; QScopedPointer localServer; static const int timeout = 1000; }; #endif // SINGLEAPPLICATION_H_ qtpass-1.1.0/storemodel.cpp000066400000000000000000000040661265137067200157240ustar00rootroot00000000000000#include "storemodel.h" /** * @brief StoreModel::StoreModel * SubClass of QSortFilterProxyModel via * http://www.qtcentre.org/threads/46471-QTreeView-Filter */ StoreModel::StoreModel() { fs = NULL; } /** * @brief StoreModel::filterAcceptsRow * @param sourceRow * @param sourceParent * @return */ bool StoreModel::filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const { QModelIndex index = sourceModel()->index(sourceRow, 0, sourceParent); return ShowThis(index); } /** * @brief StoreModel::ShowThis * @param index * @return */ bool StoreModel::ShowThis(const QModelIndex index) const { bool retVal = false; if (fs == NULL) return retVal; // Gives you the info for number of childs with a parent if (sourceModel()->rowCount(index) > 0) { for (int nChild = 0; nChild < sourceModel()->rowCount(index); ++nChild) { QModelIndex childIndex = sourceModel()->index(nChild, 0, index); if (!childIndex.isValid()) break; retVal = ShowThis(childIndex); if (retVal) break; } } else { QModelIndex useIndex = sourceModel()->index(index.row(), 0, index.parent()); QString path = fs->filePath(useIndex); path.replace(QRegExp("\\.gpg$"), ""); path.replace(QRegExp("^" + store), ""); retVal = path.contains(filterRegExp()); } return retVal; } /** * @brief StoreModel::setModelAndStore * @param sourceModel * @param passStore */ void StoreModel::setModelAndStore(QFileSystemModel *sourceModel, QString passStore) { fs = sourceModel; store = passStore; } /** * @brief StoreModel::data * @param index * @param role * @return */ QVariant StoreModel::data(const QModelIndex &index, int role) const { if (!index.isValid()) return QVariant(); QVariant initial_value; initial_value = QSortFilterProxyModel::data(index, role); if (role == Qt::DisplayRole) { QString name = initial_value.toString(); name.replace(QRegExp("\\.gpg$"), ""); initial_value.setValue(name); } return initial_value; } qtpass-1.1.0/storemodel.h000066400000000000000000000010171265137067200153620ustar00rootroot00000000000000#ifndef STOREMODEL_H_ #define STOREMODEL_H_ #include #include #include class StoreModel : public QSortFilterProxyModel { Q_OBJECT private: QFileSystemModel *fs; QString store; public: StoreModel(); bool filterAcceptsRow(int, const QModelIndex &) const; bool ShowThis(const QModelIndex) const; void setModelAndStore(QFileSystemModel *sourceModel, QString passStore); QVariant data(const QModelIndex &index, int role) const; }; #endif // STOREMODEL_H_ qtpass-1.1.0/trayicon.cpp000066400000000000000000000037421265137067200153770ustar00rootroot00000000000000#include "trayicon.h" TrayIcon::TrayIcon(QMainWindow *parent) { parentwin = parent; createActions(); createTrayIcon(); sysTrayIcon->setIcon(QIcon(":/artwork/icon.png")); sysTrayIcon->show(); QObject::connect(sysTrayIcon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), this, SLOT(iconActivated(QSystemTrayIcon::ActivationReason))); } void TrayIcon::setVisible(bool visible) { if (visible == true) parentwin->show(); else parentwin->hide(); } void TrayIcon::createActions() { // minimizeAction = new QAction(tr("Mi&nimize"), this); // connect(minimizeAction, SIGNAL(triggered()), this, SLOT(hide())); // maximizeAction = new QAction(tr("Ma&ximize"), this); // connect(maximizeAction, SIGNAL(triggered()), this, SLOT(showMaximized())); // restoreAction = new QAction(tr("&Restore"), this); // connect(restoreAction, SIGNAL(triggered()), this, SLOT(showNormal())); quitAction = new QAction(tr("&Quit"), this); connect(quitAction, SIGNAL(triggered()), qApp, SLOT(quit())); } void TrayIcon::createTrayIcon() { trayIconMenu = new QMenu(this); // trayIconMenu->addAction(minimizeAction); // trayIconMenu->addAction(maximizeAction); // trayIconMenu->addAction(restoreAction); // trayIconMenu->addSeparator(); trayIconMenu->addAction(quitAction); sysTrayIcon = new QSystemTrayIcon(this); sysTrayIcon->setContextMenu(trayIconMenu); } void TrayIcon::showHideParent() { if (parentwin->isVisible() == true) parentwin->hide(); else parentwin->show(); } void TrayIcon::iconActivated(QSystemTrayIcon::ActivationReason reason) { switch (reason) { case QSystemTrayIcon::Trigger: case QSystemTrayIcon::DoubleClick: showHideParent(); break; case QSystemTrayIcon::MiddleClick: showMessage("test", "test msg", 1000); break; default:{}; } } void TrayIcon::showMessage(QString title, QString msg, int time) { sysTrayIcon->showMessage(title, msg, QSystemTrayIcon::Information, time); } qtpass-1.1.0/trayicon.h000066400000000000000000000013631265137067200150410ustar00rootroot00000000000000#ifndef TRAYICON_H_ #define TRAYICON_H_ #include #include #include #include #include #include class TrayIcon : public QWidget { Q_OBJECT public: explicit TrayIcon(QMainWindow *parent); void showMessage(QString title, QString msg, int time); void setVisible(bool visible); signals: public slots: void showHideParent(); void iconActivated(QSystemTrayIcon::ActivationReason reason); private: void createActions(); void createTrayIcon(); // QAction *minimizeAction; // QAction *maximizeAction; QAction *settingsAction; QAction *quitAction; QSystemTrayIcon *sysTrayIcon; QMenu *trayIconMenu; QMainWindow *parentwin; }; #endif // TRAYICON_H_ qtpass-1.1.0/usersdialog.cpp000066400000000000000000000062131265137067200160640ustar00rootroot00000000000000#include "usersdialog.h" #include #include #include "ui_usersdialog.h" UsersDialog::UsersDialog(QWidget *parent) : QDialog(parent), ui(new Ui::UsersDialog) { ui->setupUi(this); connect(ui->buttonBox, SIGNAL(accepted()), this, SLOT(accept())); connect(ui->buttonBox, SIGNAL(rejected()), this, SLOT(reject())); connect(ui->listWidget, SIGNAL(itemChanged(QListWidgetItem *)), this, SLOT(itemChange(QListWidgetItem *))); userList = NULL; } UsersDialog::~UsersDialog() { delete ui; } Q_DECLARE_METATYPE(UserInfo *) void UsersDialog::itemChange(QListWidgetItem *item) { if (!item) return; UserInfo *info = item->data(Qt::UserRole).value(); if (!info) return; info->enabled = item->checkState() == Qt::Checked; } void UsersDialog::setUsers(QList *users) { userList = users; populateList(""); } void UsersDialog::populateList(const QString &filter) { QRegExp nameFilter("*" + filter + "*"); nameFilter.setPatternSyntax(QRegExp::Wildcard); nameFilter.setCaseSensitivity(Qt::CaseInsensitive); ui->listWidget->clear(); if (userList) { for (QList::iterator it = userList->begin(); it != userList->end(); ++it) { UserInfo &user(*it); if (filter.isEmpty() || nameFilter.exactMatch(user.name)) { if (user.validity == '-' && !ui->checkBox->isChecked()) continue; if (user.expiry.toTime_t() > 0 && user.expiry.daysTo(QDateTime::currentDateTime()) > 0 && !ui->checkBox->isChecked()) continue; QString userText = user.name + "\n" + user.key_id; if (user.created.toTime_t() > 0) { userText += " " + tr("created") + " " + user.created.toString(Qt::SystemLocaleShortDate); } if (user.expiry.toTime_t() > 0) userText += " " + tr("expires") + " " + user.expiry.toString(Qt::SystemLocaleShortDate); QListWidgetItem *item = new QListWidgetItem(userText, ui->listWidget); item->setCheckState(user.enabled ? Qt::Checked : Qt::Unchecked); item->setData(Qt::UserRole, QVariant::fromValue(&user)); if (user.have_secret) { // item->setForeground(QColor(32, 74, 135)); item->setForeground(Qt::blue); QFont font; font.setFamily(font.defaultFamily()); font.setBold(true); item->setFont(font); } else if (user.validity == '-') { item->setBackground(QColor(164, 0, 0)); item->setForeground(Qt::white); } else if (user.expiry.toTime_t() > 0 && user.expiry.daysTo(QDateTime::currentDateTime()) > 0) { item->setForeground(QColor(164, 0, 0)); } ui->listWidget->addItem(item); } } } } void UsersDialog::on_clearButton_clicked() { ui->lineEdit->clear(); populateList(""); } void UsersDialog::on_lineEdit_textChanged(const QString &filter) { populateList(filter); } void UsersDialog::closeEvent(QCloseEvent *event) { // TODO(annejan) save window size or somethign event->accept(); } void UsersDialog::on_checkBox_clicked() { populateList(ui->lineEdit->text()); } qtpass-1.1.0/usersdialog.h000066400000000000000000000017011265137067200155260ustar00rootroot00000000000000#ifndef USERSDIALOG_H_ #define USERSDIALOG_H_ #include #include #include #include #include namespace Ui { class UsersDialog; } class QListWidgetItem; struct UserInfo { UserInfo() : validity('-'), have_secret(false), enabled(false) {} QString name; QString key_id; char validity; bool have_secret; bool enabled; QDateTime expiry; QDateTime created; }; class UsersDialog : public QDialog { Q_OBJECT public: explicit UsersDialog(QWidget *parent = 0); ~UsersDialog(); void setUsers(QList *); protected: void closeEvent(QCloseEvent *event); private slots: void itemChange(QListWidgetItem *item); void on_clearButton_clicked(); void on_lineEdit_textChanged(const QString &filter); void on_checkBox_clicked(); private: Ui::UsersDialog *ui; QList *userList; void populateList(const QString &filter); }; #endif // USERSDIALOG_H_ qtpass-1.1.0/usersdialog.ui000066400000000000000000000062121265137067200157160ustar00rootroot00000000000000 UsersDialog 0 0 566 465 0 0 Read access users true 6 6 6 6 Select which users should be able to decrypt passwords stored in this folder. Note: Existing files will not be modified and retain the old permissions until you edit them. Blue entries have a secret key available, select one of these to be able to decrypt. Red entries are not valid, you will not be able to encrypt to these. Qt::PlainText true 0 26 Clear search X :/icons/edit-clear.svg Show unusable keys true true Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok lineEdit clearButton listWidget qtpass-1.1.0/util.cpp000066400000000000000000000054561265137067200145300ustar00rootroot00000000000000#include "util.h" #include #include #include #include #include #ifdef Q_OS_WIN #include #endif #include QProcessEnvironment Util::_env; bool Util::_envInitialised; /** * @brief Util::initialiseEnvironment */ void Util::initialiseEnvironment() { if (!_envInitialised) { _env = QProcessEnvironment::systemEnvironment(); #ifdef __APPLE__ // TODO(annejan) checks here QString path = _env.value("PATH"); if (!path.contains("/usr/local/MacGPG2/bin") && QFile("/usr/local/MacGPG2/bin").exists()) path += ":/usr/local/MacGPG2/bin"; if (!path.contains("/usr/local/bin")) path += ":/usr/local/bin"; _env.insert("PATH", path); #endif _envInitialised = true; } } /** * @brief Util::findPasswordStore * @return */ QString Util::findPasswordStore() { QString path; initialiseEnvironment(); if (_env.contains("PASSWORD_STORE_DIR")) { path = _env.value("PASSWORD_STORE_DIR"); } else { #ifdef Q_OS_WIN path = QDir::homePath() + QDir::separator() + "password-store" + QDir::separator(); #else path = QDir::homePath() + QDir::separator() + ".password-store" + QDir::separator(); #endif } return Util::normalizeFolderPath(path); } /** * @brief Util::normalizeFolderPath * @param path * @return */ QString Util::normalizeFolderPath(QString path) { if (!path.endsWith("/") && !path.endsWith(QDir::separator())) path += QDir::separator(); return path; } QString Util::findBinaryInPath(QString binary) { initialiseEnvironment(); QString ret = ""; binary.prepend(QDir::separator()); if (_env.contains("PATH")) { QString path = _env.value("PATH"); QStringList entries; #ifndef Q_OS_WIN entries = path.split(':'); if (entries.length() < 2) { #endif entries = path.split(';'); #ifndef Q_OS_WIN } #endif foreach(QString entry, entries) { QScopedPointer qfi(new QFileInfo(entry.append(binary))); #ifdef Q_OS_WIN if (!qfi->exists()) qfi.reset(new QFileInfo(entry.append(".exe"))); #endif qDebug() << entry; if (!qfi->isExecutable()) continue; ret = qfi->absoluteFilePath(); break; } } return ret; } /** * @brief Util::checkConfig * @param passStore * @param passExecutable * @param gpgExecutable * @return */ bool Util::checkConfig(QString passStore, QString passExecutable, QString gpgExecutable) { return !QFile(passStore + ".gpg-id").exists() || (!QFile(passExecutable).exists() && !QFile(gpgExecutable).exists()); } /** * @brief Util::qSleep * @param ms */ void Util::qSleep(int ms) { #ifdef Q_OS_WIN Sleep(uint(ms)); #else struct timespec ts = {ms / 1000, (ms % 1000) * 1000 * 1000}; nanosleep(&ts, NULL); #endif } qtpass-1.1.0/util.h000066400000000000000000000010271265137067200141630ustar00rootroot00000000000000#ifndef UTIL_H_ #define UTIL_H_ #include #include class Util { public: static QString findBinaryInPath(QString binary); static QString findPasswordStore(); static QString normalizeFolderPath(QString path); static bool checkConfig(QString passStore, QString passExecutable, QString gpgExecutable); static void qSleep(int ms); private: static void initialiseEnvironment(); static QProcessEnvironment _env; static bool _envInitialised; }; #endif // UTIL_H_ qtpass-1.1.0/windows.rc000066400000000000000000000001031265137067200150470ustar00rootroot00000000000000IDI_ICON1 ICON DISCARDABLE "artwork/icon.ico"