pax_global_header00006660000000000000000000000064151764461000014516gustar00rootroot0000000000000052 comment=b8cae0956f3c34fc5259cfaadb2f26c7af797a47 awf-extended-4.1.0/000077500000000000000000000000001517644610000140735ustar00rootroot00000000000000awf-extended-4.1.0/.gitignore000066400000000000000000000002441517644610000160630ustar00rootroot00000000000000# autoreconf -if /build-aux/ /configure /aclocal.m4 /autom4te.cache/ Makefile.in # ./configure /config.log /config.status Makefile .deps/ # make /src/awf-gtk? *.oawf-extended-4.1.0/LICENSE000066400000000000000000001045131517644610000151040ustar00rootroot00000000000000 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 . awf-extended-4.1.0/Makefile.am000066400000000000000000000000421517644610000161230ustar00rootroot00000000000000MAKEFLAGS = --silent SUBDIRS = srcawf-extended-4.1.0/README.md000066400000000000000000000255111517644610000153560ustar00rootroot00000000000000# AWF - A widget factory (extended) A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme. ## Screenshots GTK 2.24 (Pango 1.57)\ [Preview with GTK 2 - Main window](images/gtk2.png?raw=true) [Preview with GTK 2 - Main window with menu](images/gtk2-menu.png?raw=true) [Preview with GTK 2 - RTL Main window with menu](images/gtk2-rtl-menu.png?raw=true) [Preview with GTK 2 - RTL Main window](images/gtk2-rtl.png?raw=true) GTK 3.24-classic (Pango 1.57)\ [Preview with GTK 3 - Main window](images/gtk3.png?raw=true) [Preview with GTK 3 - Main window with menu](images/gtk3-menu.png?raw=true) [Preview with GTK 3 - CSD main window](images/gtk3-csd.png?raw=true) [Preview with GTK 3 - Main window with plus button](images/gtk3-plus.png?raw=true) GTK 4.12..4.23-classic (Pango 1.57)\ [Preview with GTK 4 - Main window](images/gtk4.png?raw=true) [Preview with GTK 4 - Main window with menu](images/gtk4-menu.png?raw=true) [Preview with GTK 4 - RTL Main window with menu](images/gtk4-rtl-menu.png?raw=true) [Preview with GTK 4 - RTL Main window](images/gtk4-rtl.png?raw=true) GTK 5.0 (Pango 1.57)\ _GtkWindow will be probably deprecated... lol_ Qt 5.15\ [Preview with Qt 5 - Main window](images/qt5.png?raw=true) [Preview with Qt 5 - Main window with menu](images/qt5-menu.png?raw=true) [Preview with Qt 5 - RTL Main window with menu](images/qt5-rtl-menu.png?raw=true) [Preview with Qt 5 - RTL Main window](images/qt5-rtl.png?raw=true) Qt 6.10\ [Preview with Qt 6 - Main window](images/qt6.png?raw=true) [Preview with Qt 6 - Main window with menu](images/qt6-menu.png?raw=true) [Preview with Qt 6 - RTL Main window with menu](images/qt6-rtl-menu.png?raw=true) [Preview with Qt 6 - RTL Main window](images/qt6-rtl.png?raw=true) Theme used for the screenshots is available [here](https://github.com/luigifab/human-theme). ## Tricks * Some options are available from the command line (see `-h`, `--help`, or the man page) * The _Options_ menu allows you to display some standard dialogs * The _System_ and _User Themes_ menu allows you to set the current theme * The _Text Direction_ menu allows you to change the text direction (LTR/RTL) * The _Info_ toolbar button allows you to display a notification * The _Plus/Minus_ toolbar buttons allow you to show/hide notebook arrows, marks on progress bars and scales... * The _Refresh_ toolbar button and menu item allow you to reload the current theme (like the `SIGHUP` signal) * Notebook tabs are scrollable (GTK 3.x & 4.x, *gtk-scroll-tabs*, like with GTK 2.24 + Qt 5.x & 6.x) * Menu keyboard shortcuts can be updated on hover (GTK 2.24 & 3.x + Qt 5.x & 6.x, *gtk-can-change-accels*) * Use `UBUNTU_MENUPROXY=` on Ubuntu to allow updating menu keyboard shortcuts on hover * Use `AWF_DEBUG=1` and `AWF_TRACE=1` to enable some debug messages * Use `AWF_TEAROFF=1` to add a tear-off item to the Options menu (GTK 2.24 & 3.x + Qt 5.x & 6.x) * Use `GTK_OVERLAY_SCROLLING=0` to make scrollbars always visible (GTK 3.16+ & 4.x) * Use `GTK_CSD=1` to enable CSD windows (GTK 3.12+ & 4.x) ## Broadway Start the server with `broadwayd &` and run `GDK_BACKEND=broadway awf-gtk3`, then go to http://localhost:8080/ (*libgtk-3-bin*). ## Installation For GTK, it requires **GTK 2.24** or **GTK 3.0+** *(including 3.24)* or **GTK 4.0+** *(including 4.23)*, *GLIB 2.28+*, *libnotify 0.7+*. For Qt, it requires **Qt 5.0+** *(including 5.15)* or **Qt 6.0+** *(including 6.11)*, *[GlobalQSS](https://github.com/luigifab/globalqss)* for theme support. #### Installation for Debian, Devuan, Ubuntu, Trisquel, Linux Mint, MX Linux * `sudo apt install awf-gtk2 awf-gtk3 awf-gtk4 awf-qt5 awf-qt6` #### Installation for Fedora * `sudo dnf install awf-gtk2 awf-gtk3 awf-gtk4 awf-qt5 awf-qt6` #### Installation for openSUSE * `sudo zypper install awf-gtk2 awf-gtk3 awf-gtk4 awf-qt5 awf-qt6` #### Installation for Mageia * `sudo urpmi awf-extended-gtk2 awf-extended-gtk3 awf-extended-gtk4 awf-extended-qt5 awf-extended-qt6` #### Installation with MSYS2 * `sudo pacman -S awf-gtk2 awf-gtk3 awf-gtk4 awf-qt5 awf-qt6` #### Building from source * To compile with all available major versions of GTK and Qt available run: `build.sh` * To compile and create DEB packages for Debian & Ubuntu run: `scripts/debian-[gtkx|qtx]/deb.sh` * To compile and create RPM packages for Fedora run: `scripts/fedora/rpm-[gtkx|qtx].sh` * To compile and create RPM packages for Mageia run: `scripts/mageia/rpm-[gtkx|qtx].sh` * To compile and create RPM packages for openSUSE run: `scripts/opensuse/rpm-[gtkx|qtx].sh` * To compile and create EXE for Windows (XP) run: `scripts/windows/zip.sh` #### Alternative installation for Debian, Devuan, Ubuntu, Trisquel, Linux Mint, MX Linux ```bash # PPA: https://launchpad.net/~luigifab/+archive/ubuntu/packages # from Debian 12 you can use noble/questing (unix.stackexchange.com/a/669008/364800) # Debian: focal for 10/buster, jammy for 11/bullseye, noble for 12/bookworm, # plucky for 13/trixie, questing for 14/forky and 15/duke # Devuan: focal for 3/beowulf, jammy for 4/chimaera, noble for 5/daedalus, # plucky for 6/excalibur, questing for 7/freia and 8/gryphon and ceres # Linux Mint: focal for 20.x and 4/debbie, jammy for 21.x and 5/elsie, # noble for 22.x and 6/faye, plucky for 7/gigi # MX Linux: focal for 19.x, jammy for 21.x, noble for 23.x, questing for 25.x # Trisquel: focal for nabia, jammy for aramo # Kali Linux: questing sudo add-apt-repository ppa:luigifab/packages sudo apt update sudo apt install awf-gtk2 awf-gtk3 awf-gtk4 awf-qt5 awf-qt6 # or sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys FFE5BD439356DF7D echo "deb http://ppa.launchpad.net/luigifab/packages/ubuntu focal main" | sudo tee -a /etc/apt/sources.list sudo apt update sudo apt install awf-gtk2 awf-gtk3 awf-gtk4 awf-qt5 awf-qt6 # or sudo wget -O /etc/apt/trusted.gpg.d/luigifab.gpg https://www.luigifab.fr/apt.gpg echo "deb http://ppa.launchpad.net/luigifab/packages/ubuntu focal main" | sudo tee -a /etc/apt/sources.list sudo apt update sudo apt install awf-gtk2 awf-gtk3 awf-gtk4 awf-qt5 awf-qt6 # or wget -qO - https://www.luigifab.fr/apt.gpg | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/luigifab.gpg echo "deb http://ppa.launchpad.net/luigifab/packages/ubuntu focal main" | sudo tee -a /etc/apt/sources.list sudo apt update sudo apt install awf-gtk2 awf-gtk3 awf-gtk4 awf-qt5 awf-qt6 # ... and for full installation sudo apt install qt5-gtk-platformtheme qt5-style-globalqss qttranslations5-l10n qt6-gtk-platformtheme qt6-style-globalqss qt6-svg-plugins qt6-translations-l10n libnotify-bin # sha256sum /etc/apt/trusted.gpg.d/luigifab.gpg 578c89a677048e38007462d543686b53587efba9f93814601169253c45ff9213 # apt-key list /etc/apt/trusted.gpg.d/luigifab.gpg pub rsa4096 2020-10-31 [SC] 458B 0C46 D024 FD8C B8BC 99CD FFE5 BD43 9356 DF7D ``` ## Known issues #### GTK 3 For better results, use gtk3-classic. #### GTK 4 For better results, use gtk4-classic. If font rendering is bad, try to add in `~/.config/gtk-4.0/settings.ini`: ``` [Settings] gtk-font-rendering=manual gtk-hint-font-metrics=1 gtk-xft-hintstyle=hintfull gtk-xft-antialias=0 gtk-xft-hinting=1 ``` #### GTK 5 From [migrating guide](https://docs.gtk.org/gtk4/migrating-4to5.html#non-standard-css-extensions-are-going-away): _non-standard CSS extensions are going away [...] @define-color should be replaced [...] the color functions can all be replaced by combinations of calc() and color-mix()_. I think it would be nice to create a patch to fix this GTK regression. #### Qt 5 & 6 Not everything is working yet. On Fedora with Qt 5, the GTK 3 platform theme _(qt5-qtbase-gui)_ works better than on Debian _(qt5-gtk-platformtheme)_, but the fonts remain blurry, see [bug 2459509](https://bugzilla.redhat.com/show_bug.cgi?id=2459509). ## Customize For GTK, use `~/.config/gtk-3.0/gtk.css` and `~/.config/gtk-4.0/gtk.css` files. For Qt, with [GlobalQSS](https://github.com/luigifab/globalqss), use `~/.config/qt5/qt.qss` and `~/.config/qt6/qt.qss` files. ```css #AwfMainWindow { } #AwfDialogWindow { } AwfTreeView { qproperty-columnWidths:"1,2,3,4,5,6,7,8,9,10,11"; /* qt */ } .awf-cheatcode-colorbtn { background:red; /* qt */ } .awf-cheatcode-fontbtn { background:red; /* qt */ } .awf-cheatcode-filebtn { background:red; /* qt + gtk 4 */ } .awf-cheatcode-folderbtn { background:red; /* qt + gtk 4 */ } ``` ## Dev To reload theme when source files change, you can use [Entr](https://github.com/eradman/entr) with the `SIGHUP` signal: ``` sudo apt install entr or sudo dnf install entr or sudo zypper install entr or ... ls ~/.themes/yourtheme/gtk-3*/*.css | entr killall -s SIGHUP awf-gtk3 ls ~/.themes/yourtheme/qt6/*.qss | entr killall -s SIGHUP awf-qt6 ``` ## Copyright - Current version: 4.1.0 (05/05/2026) - Compatibility: GTK 2.24 / 3.0..3.24 / 4.0..4.23, Qt 5.0..5.15 / 6.0..6.11 - Links: [luigifab.fr](https://www.luigifab.fr/gtkqt/awf-extended) - [github.com](https://github.com/luigifab/awf-extended) - [ppa/dpa](https://launchpad.net/~luigifab/+archive/ubuntu/packages) This program is provided under the terms of the **GNU GPLv3+** license.\ If you like, take some of your time to improve the translations, go to https://bit.ly/2HyCCEc. ## Packages in official distros repositories [![Packages status](https://repology.org/badge/vertical-allrepos/awf-widget-factory.svg?header=awf-gtk+awf-qt&minversion=2.0.0&columns=3)](https://repology.org/project/awf-widget-factory/versions) ## Credits Forked from [awf](https://github.com/valr/awf) by Valère Monseur (valr). awf-extended-4.1.0/build.sh000066400000000000000000000031461517644610000155320ustar00rootroot00000000000000#!/bin/bash # Debian: sudo apt install build-essential dh-make dh-autoreconf pkgconf intltool libnotify-dev libgtk2.0-dev libgtk-3-dev libgtk-4-dev libgtk-5-dev qtbase5-dev qt6-base-dev qt7-base-dev libnotify-bin # Fedora: sudo dnf install autoconf automake libnotify-devel gtk2-devel gtk3-devel gtk4-devel gtk5-devel desktop-file-utils qt5-qtbase-devel qt6-qtbase-devel qt7-qtbase-devel # openSUSE: sudo zypper install autoconf automake libnotify-devel gtk2-devel gtk3-devel gtk4-devel gtk5-devel desktop-file-utils qt5-base-devel qt6-base-devel qt7-base-devel # # supported options for build.sh and configure.ac # --disable-gtk2 --disable-gtk3 --disable-gtk4 --disable-gtk5 --disable-qt5 --disable-qt6 --disable-qt7 # OR # --enable-only-gtk2 # OR # --enable-only-gtk3 # OR # --enable-only-gtk4 # OR # --enable-only-gtk5 # OR # --enable-only-qt5 # OR # --enable-only-qt6 # OR # --enable-only-qt7 rm -rf awf-gtk2* awf-gtk3* awf-gtk4* awf-gtk5* awf-qt5* awf-qt6* awf-qt7* builder/ # copy to a tmp directory mkdir builder builder/src builder/data cp /usr/share/common-licenses/GPL*3 builder/LICENSE cp configure.ac builder/ cp Makefile.am builder/ cp src/Makefile.am builder/src/ cp src/awf-gtk*.c builder/src/ cp src/awf-qt*.cpp builder/src/ cp src/awf.rc builder/src/ cp data/awf.ico builder/data/ # build cd builder/ autoreconf -fi && ./configure "$@" && make -s result=$? cd .. # final if [ $result -eq 0 ]; then cp builder/src/awf-gtk* builder/src/awf-qt* . rm -f awf-gtk*.c awf-qt*.cpp awf-qt*.moc awf-qt*.o ls -altrh awf-gtk2* awf-gtk3* awf-gtk4* awf-gtk5* awf-qt5* awf-qt6* awf-qt7* fi rm -rf builder/awf-extended-4.1.0/configure.ac000066400000000000000000000174451517644610000163740ustar00rootroot00000000000000AC_INIT([A widget factory], [4.1.0]) AC_CONFIG_SRCDIR([src/]) AC_CONFIG_AUX_DIR([build-aux]) AM_INIT_AUTOMAKE([foreign]) AC_PROG_CC AC_PROG_CXX # --disable-gtkx --disable-qtx AC_ARG_ENABLE([gtk5], AS_HELP_STRING([--disable-gtk5], [disable gtk5]), [enable_gtk5=no], [enable_gtk5=yes]) AC_ARG_ENABLE([gtk4], AS_HELP_STRING([--disable-gtk4], [disable gtk4]), [enable_gtk4=no], [enable_gtk4=yes]) AC_ARG_ENABLE([gtk3], AS_HELP_STRING([--disable-gtk3], [disable gtk3]), [enable_gtk3=no], [enable_gtk3=yes]) AC_ARG_ENABLE([gtk2], AS_HELP_STRING([--disable-gtk2], [disable gtk2]), [enable_gtk2=no], [enable_gtk2=yes]) AC_ARG_ENABLE([qt7], AS_HELP_STRING([--disable-qt7], [disable qt7]), [enable_qt7=no], [enable_qt7=yes]) AC_ARG_ENABLE([qt6], AS_HELP_STRING([--disable-qt6], [disable qt6]), [enable_qt6=no], [enable_qt6=yes]) AC_ARG_ENABLE([qt5], AS_HELP_STRING([--disable-qt5], [disable qt5]), [enable_qt5=no], [enable_qt5=yes]) # --enable-only-gtkx --enable-only-qtx AC_ARG_ENABLE([only-gtk5], AS_HELP_STRING([--enable-only-gtk5], [only enable gtk5]), [only_gtk=yes enable_gtk2=no enable_gtk3=no enable_gtk4=no enable_gtk5=yes enable_qt5=no enable_qt6=no enable_qt7=no], []) AC_ARG_ENABLE([only-gtk4], AS_HELP_STRING([--enable-only-gtk4], [only enable gtk4]), [only_gtk=yes enable_gtk2=no enable_gtk3=no enable_gtk4=yes enable_gtk5=no enable_qt5=no enable_qt6=no enable_qt7=no], []) AC_ARG_ENABLE([only-gtk3], AS_HELP_STRING([--enable-only-gtk3], [only enable gtk3]), [only_gtk=yes enable_gtk2=no enable_gtk3=yes enable_gtk4=no enable_gtk5=no enable_qt5=no enable_qt6=no enable_qt7=no], []) AC_ARG_ENABLE([only-gtk2], AS_HELP_STRING([--enable-only-gtk2], [only enable gtk2]), [only_gtk=yes enable_gtk2=yes enable_gtk3=no enable_gtk4=no enable_gtk5=no enable_qt5=no enable_qt6=no enable_qt7=no], []) AC_ARG_ENABLE([only-qt7], AS_HELP_STRING([--enable-only-qt7], [only enable qt7]), [only_qt=yes enable_gtk2=no enable_gtk3=no enable_gtk4=no enable_gtk5=no enable_qt5=no enable_qt6=no enable_qt7=yes], []) AC_ARG_ENABLE([only-qt6], AS_HELP_STRING([--enable-only-qt6], [only enable qt6]), [only_qt=yes enable_gtk2=no enable_gtk3=no enable_gtk4=no enable_gtk5=no enable_qt5=no enable_qt6=yes enable_qt7=no], []) AC_ARG_ENABLE([only-qt5], AS_HELP_STRING([--enable-only-qt5], [only enable qt5]), [only_qt=yes enable_gtk2=no enable_gtk3=no enable_gtk4=no enable_gtk5=no enable_qt5=yes enable_qt6=no enable_qt7=no], []) case "`uname -s`" in *MINGW* | *CYGWIN* | *MSYS*) windows=yes ;; *) windows=no ;; esac AM_CONDITIONAL([WINDOWS], [test "x$windows" = "xyes"]) # C & libnotify / C++ # without gtk, to avoid the following stupid error, pkgconf is required (in Build-Depends) # ./configure: line 5306: syntax error near unexpected token `LIBNOTIFY,' # ./configure: line 5306: `PKG_CHECK_MODULES... # for windows, libnotify is not required PKG_CHECK_MODULES(LIBNOTIFY, libnotify >= 0.7.0, have_libnotify=yes, have_libnotify=no) if test "x$windows" = "xyes"; then have_libnotify=ignore fi if test "x$enable_gtk5" = "xyes" -o "x$enable_gtk4" = "xyes" -o "x$enable_gtk3" = "xyes" -o "x$enable_gtk2" = "xyes"; then compiler=$(command -v ${CC%% *}) if test "x$only_gtk" = "xyes" -a "x$compiler" = "x"; then AC_MSG_ERROR([C compiler not found (FATAL)]) elif test "x$compiler" = "x"; then enable_gtk2=no enable_gtk3=no enable_gtk4=no enable_gtk5=no fi if test "x$have_libnotify" = "xno"; then AC_MSG_ERROR([libnotify not found (FATAL)]) fi AC_SUBST([LIBNOTIFY_CFLAGS]) AC_SUBST([LIBNOTIFY_LIBS]) fi if test "x$enable_qt7" = "xyes" -o "x$enable_qt6" = "xyes" -o "x$enable_qt5" = "xyes"; then compiler=$(command -v ${CXX%% *}) if test "x$only_qt" = "xyes" -a "x$compiler" = "x"; then AC_MSG_ERROR([C++ compiler not found (FATAL)]) elif test "x$compiler" = "x"; then enable_qt5=no enable_qt6=no enable_qt7=no fi fi # GTK 5 PKG_CHECK_MODULES(GTK5, gtk5, GTK5_SUFFIX=5, GTK5_SUFFIX=-5) if test "x$enable_gtk5" = "xyes"; then if test "x$only_gtk" = "xyes" -a "x$GTK5_SUFFIX" != "x5"; then AC_MSG_ERROR([GTK5 not found (FATAL)]) fi AM_CONDITIONAL([GTK5], [test "x$GTK5_SUFFIX" = "x5"]) else AM_CONDITIONAL([GTK5], [false]) fi AC_SUBST(GTK5_CFLAGS) AC_SUBST(GTK5_LIBS) AC_SUBST(GTK5_SUFFIX) # GTK 4 PKG_CHECK_MODULES(GTK4, gtk4, GTK4_SUFFIX=4, GTK4_SUFFIX=-4) if test "x$enable_gtk4" = "xyes"; then if test "x$only_gtk" = "xyes" -a "x$GTK4_SUFFIX" != "x4"; then AC_MSG_ERROR([GTK4 not found (FATAL)]) fi AM_CONDITIONAL([GTK4], [test "x$GTK4_SUFFIX" = "x4"]) else AM_CONDITIONAL([GTK4], [false]) fi AC_SUBST(GTK4_CFLAGS) AC_SUBST(GTK4_LIBS) AC_SUBST(GTK4_SUFFIX) # GTK 3 PKG_CHECK_MODULES(GTK3, gtk+-3.0, GTK3_SUFFIX=3, GTK3_SUFFIX=-3) if test "x$enable_gtk3" = "xyes"; then if test "x$only_gtk" = "xyes" -a "x$GTK3_SUFFIX" != "x3"; then AC_MSG_ERROR([GTK3 not found (FATAL)]) fi AM_CONDITIONAL([GTK3], [test "x$GTK3_SUFFIX" = "x3"]) else AM_CONDITIONAL([GTK3], [false]) fi AC_SUBST(GTK3_CFLAGS) AC_SUBST(GTK3_LIBS) AC_SUBST(GTK3_SUFFIX) # GTK 2 PKG_CHECK_MODULES(GTK2, gtk+-2.0 >= 2.24.0, GTK2_SUFFIX=2, GTK2_SUFFIX=-2) if test "x$enable_gtk2" = "xyes"; then if test "x$only_gtk" = "xyes" -a "x$GTK2_SUFFIX" != "x2"; then AC_MSG_ERROR([GTK2 not found (FATAL)]) fi AM_CONDITIONAL([GTK2], [test "x$GTK2_SUFFIX" = "x2"]) else AM_CONDITIONAL([GTK2], [false]) fi AC_SUBST(GTK2_CFLAGS) AC_SUBST(GTK2_LIBS) AC_SUBST(GTK2_SUFFIX) # QT 7 PKG_CHECK_MODULES(QT7, [Qt7Core Qt7Gui Qt7Widgets Qt7PrintSupport], QT7_SUFFIX=7, QT7_SUFFIX=-7) if test "x$enable_qt7" = "xyes"; then if test "x$only_qt" = "xyes" -a "x$QT7_SUFFIX" != "x7"; then AC_MSG_ERROR([QT7 not found (FATAL)]) fi AM_CONDITIONAL([QT7], [test "x$QT7_SUFFIX" = "x7"]) if test "x$QT7_SUFFIX" = "x7"; then QT7_BINDIR=`$PKG_CONFIG --variable=libexecdir Qt7Core` QT7_MOC="$QT7_BINDIR/moc" fi else AM_CONDITIONAL([QT7], [false]) fi AC_SUBST(QT7_MOC) AC_SUBST(QT7_CFLAGS) AC_SUBST(QT7_LIBS) AC_SUBST(QT7_SUFFIX) # QT 6 # with pkgconf 6.2.4, pc files are missing (https://bugs.launchpad.net/ubuntu/+source/qt6-base/+bug/2067202), so it's not working # on Ubuntu, pkg-config may return an incorrect path, fallback to qtpaths6 PKG_CHECK_MODULES(QT6, [Qt6Core Qt6Gui Qt6Widgets Qt6PrintSupport], QT6_SUFFIX=6, QT6_SUFFIX=-6) if test "x$enable_qt6" = "xyes"; then if test "x$only_qt" = "xyes" -a "x$QT6_SUFFIX" != "x6"; then AC_MSG_ERROR([QT6 not found (FATAL)]) fi AM_CONDITIONAL([QT6], [test "x$QT6_SUFFIX" = "x6"]) if test "x$QT6_SUFFIX" = "x6"; then QT6_BINDIR=`$PKG_CONFIG --variable=libexecdir Qt6Core` if test -z "$QT6_BINDIR"; then QT6_BINDIR=`LC_ALL=C.UTF-8 qtpaths6 --query QT_INSTALL_LIBEXECS` fi QT6_MOC="$QT6_BINDIR/moc" fi else AM_CONDITIONAL([QT6], [false]) fi AC_SUBST(QT6_MOC) AC_SUBST(QT6_CFLAGS) AC_SUBST(QT6_LIBS) AC_SUBST(QT6_SUFFIX) # QT 5 qt5_modules="Qt5Core Qt5Gui Qt5Widgets Qt5PrintSupport" if test "x$windows" = "xyes"; then qt5_modules="Qt5Core Qt5Gui Qt5Widgets Qt5PrintSupport Qt5WinExtras" fi PKG_CHECK_MODULES(QT5, [$qt5_modules], QT5_SUFFIX=5, QT5_SUFFIX=-5) if test "x$enable_qt5" = "xyes"; then if test "x$only_qt" = "xyes" -a "x$QT5_SUFFIX" != "x5"; then AC_MSG_ERROR([QT5 not found (FATAL)]) fi AM_CONDITIONAL([QT5], [test "x$QT5_SUFFIX" = "x5"]) if test "x$QT5_SUFFIX" = "x5"; then QT5_BINDIR=`$PKG_CONFIG --variable=host_bins Qt5Core 2>/dev/null` if test -z "$QT5_BINDIR"; then QT5_BINDIR=`$PKG_CONFIG --variable=bindir Qt5Core` fi QT5_MOC="$QT5_BINDIR/moc" fi else AM_CONDITIONAL([QT5], [false]) fi AC_SUBST(QT5_MOC) AC_SUBST(QT5_CFLAGS) AC_SUBST(QT5_LIBS) AC_SUBST(QT5_SUFFIX) # files AC_CONFIG_FILES([ Makefile src/Makefile ]) AC_OUTPUTawf-extended-4.1.0/data/000077500000000000000000000000001517644610000150045ustar00rootroot00000000000000awf-extended-4.1.0/data/awf-gtk2.1000066400000000000000000000021361517644610000165120ustar00rootroot00000000000000.Dd 01/01/22 .Dt AWF 1 .Os Linux .Sh NAME .Nm awf-gtk2 .Nd Theme preview application for GTK 2. .Sh SYNOPSIS .Nm .Op Fl h .Op Fl v .Op Fl l .Op Fl t Ar theme .Op Fl s Ar filename .Op Fl -ltr .Op Fl -rtl .Sh DESCRIPTION A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme. .Sh OPTIONS .Bl -tag .It Fl h, Fl Fl help Show help. .It Fl v, Fl Fl version Show version number. .It Fl l List available themes. .It Fl t Ar theme, Fl Fl theme Ar theme Run with the specified theme. .It Fl s Ar filename, Fl Fl screenshot Ar filename Run and save a png screenshot on SIGHUP. .It Fl -ltr Run with text from left to right (Left-To-Right). .It Fl -rtl Run with text from right to left (Right-To-Left). .El .Sh ENVIRONMENT VARIABLES .Bl -tag -width "GTK_OVERLAY_SCROLLING=0" -compact .It GTK_CSD=1 Enable CSD window. .It GTK_OVERLAY_SCROLLING=0 Set scrollbars always visible. .El .Sh FILES .Bl -tag -width "/home/user/.awf-accels" -compact .It Pa /home/user/.awf-accels Configuration of keyboard shortcuts. .Elawf-extended-4.1.0/data/awf-gtk2.bash000066400000000000000000000035171517644610000172730ustar00rootroot00000000000000# Made in ChatGPT and Copilot # Licensed under the MIT License _awf_gtk2_complete() { local cur prev opts all_opts single_opts COMPREPLY=() cur="${COMP_WORDS[COMP_CWORD]}" prev="${COMP_WORDS[COMP_CWORD-1]}" all_opts=(-h --help -v --version -l --list-themes -t --theme -s --screenshot --ltr --rtl) single_opts=(-h --help -v --version -l --list-themes) declare -A opt_aliases=( [-h]=--help [--help]=-h [-v]=--version [--version]=-v [-l]=--list-themes [--list-themes]=-l [-t]=--theme [--theme]=-t [-s]=--screenshot [--screenshot]=-s [--rtl]=--ltr [--ltr]=--rtl ) case "$prev" in -h|--help|-v|--version|-l|--list-themes) return 1 # stop ;; -s|--screenshot) compopt -o nospace COMPREPLY=( $(compgen -d -- "$cur") ) for i in "${!COMPREPLY[@]}"; do COMPREPLY[$i]="${COMPREPLY[$i]}/" done return 0 ;; -t|--theme) local themes=$(awf-gtk2 -l 2>/dev/null | awk '{$1=$1};1') # trim + handle list COMPREPLY=( $(compgen -W "$themes" -- "$cur") ) return 0 ;; esac local used=() for ((i = 1; i < COMP_CWORD; i++)); do local word="${COMP_WORDS[$i]}" if [[ "$word" == -* ]]; then used+=("$word") [[ -n "${opt_aliases[$word]}" ]] && used+=("${opt_aliases[$word]}") fi done local hide_single_use=false for word in "${used[@]}"; do case "$word" in -t|--theme|-s|--screenshot|--ltr|--rtl) hide_single_use=true break ;; esac done local remaining_opts=() for opt in "${all_opts[@]}"; do local skip=false for u in "${used[@]}"; do [[ "$opt" == "$u" ]] && skip=true && break done if $hide_single_use; then for su in "${single_opts[@]}"; do [[ "$opt" == "$su" ]] && skip=true && break done fi $skip || remaining_opts+=("$opt") done opts=${remaining_opts[*]} COMPREPLY=( $(compgen -W "$opts" -- "$cur") ) } complete -F _awf_gtk2_complete awf-gtk2awf-extended-4.1.0/data/awf-gtk2.desktop000066400000000000000000000004761517644610000200300ustar00rootroot00000000000000[Desktop Entry] Name=AWF GTK 2 Comment=A widget factory is a theme preview application for GTK and Qt. Comment[fr]=La fabrique à widgets est une application d'aperçu de thème pour GTK et Qt. Exec=awf-gtk2 Icon=awf-gtk2 Terminal=false Type=Application Keywords=gtk;css; Categories=GTK;Development; StartupNotify=trueawf-extended-4.1.0/data/awf-gtk2.fr.1000066400000000000000000000023721517644610000171220ustar00rootroot00000000000000.Dd 01/01/22 .Dt AWF 1 .Os Linux .Sh NAME .Nm awf-gtk2 .Nd Application d'aperçu de thème pour GTK 2. .Sh SYNOPSIS .Nm .Op Fl h .Op Fl v .Op Fl l .Op Fl t Ar theme .Op Fl s Ar filename .Op Fl -ltr .Op Fl -rtl .Sh DESCRIPTION La fabrique à widgets est une application d'aperçu de thème pour GTK et Qt. Elle affiche les différents types de widgets dans une seule fenêtre permettant de voir l'effet visuel du thème appliqué. .Sh OPTIONS .Bl -tag .It Fl h, Fl Fl help Affiche l'aide. .It Fl v, Fl Fl version Affiche le numéro de version. .It Fl l Liste les thèmes disponibles. .It Fl t Ar theme, Fl Fl theme Ar theme Démarre avec le thème spécifié. .It Fl s Ar filename, Fl Fl screenshot Ar filename Démarre et enregistre une capture d'écran png lors du SIGHUP. .It Fl -ltr Démarre avec le texte de gauche à droite (Left-To-Right). .It Fl -rtl Démarre avec le texte de droite à gauche (Right-To-Left). .El .Sh VARIABLES D'ENVIRONNEMENT .Bl -tag -width "GTK_OVERLAY_SCROLLING=0" -compact .It GTK_CSD=1 Active la fenêtre CSD. .It GTK_OVERLAY_SCROLLING=0 Définit les barres de défilement comme étant toujours visibles. .El .Sh FICHIERS .Bl -tag -width "/home/user/.awf-accels" -compact .It Pa /home/user/.awf-accels Configuration des raccourcis clavier. .Elawf-extended-4.1.0/data/awf-gtk3.1000066400000000000000000000021361517644610000165130ustar00rootroot00000000000000.Dd 01/01/22 .Dt AWF 1 .Os Linux .Sh NAME .Nm awf-gtk3 .Nd Theme preview application for GTK 3. .Sh SYNOPSIS .Nm .Op Fl h .Op Fl v .Op Fl l .Op Fl t Ar theme .Op Fl s Ar filename .Op Fl -ltr .Op Fl -rtl .Sh DESCRIPTION A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme. .Sh OPTIONS .Bl -tag .It Fl h, Fl Fl help Show help. .It Fl v, Fl Fl version Show version number. .It Fl l List available themes. .It Fl t Ar theme, Fl Fl theme Ar theme Run with the specified theme. .It Fl s Ar filename, Fl Fl screenshot Ar filename Run and save a png screenshot on SIGHUP. .It Fl -ltr Run with text from left to right (Left-To-Right). .It Fl -rtl Run with text from right to left (Right-To-Left). .El .Sh ENVIRONMENT VARIABLES .Bl -tag -width "GTK_OVERLAY_SCROLLING=0" -compact .It GTK_CSD=1 Enable CSD window. .It GTK_OVERLAY_SCROLLING=0 Set scrollbars always visible. .El .Sh FILES .Bl -tag -width "/home/user/.awf-accels" -compact .It Pa /home/user/.awf-accels Configuration of keyboard shortcuts. .Elawf-extended-4.1.0/data/awf-gtk3.bash000066400000000000000000000035171517644610000172740ustar00rootroot00000000000000# Made in ChatGPT and Copilot # Licensed under the MIT License _awf_gtk3_complete() { local cur prev opts all_opts single_opts COMPREPLY=() cur="${COMP_WORDS[COMP_CWORD]}" prev="${COMP_WORDS[COMP_CWORD-1]}" all_opts=(-h --help -v --version -l --list-themes -t --theme -s --screenshot --ltr --rtl) single_opts=(-h --help -v --version -l --list-themes) declare -A opt_aliases=( [-h]=--help [--help]=-h [-v]=--version [--version]=-v [-l]=--list-themes [--list-themes]=-l [-t]=--theme [--theme]=-t [-s]=--screenshot [--screenshot]=-s [--rtl]=--ltr [--ltr]=--rtl ) case "$prev" in -h|--help|-v|--version|-l|--list-themes) return 1 # stop ;; -s|--screenshot) compopt -o nospace COMPREPLY=( $(compgen -d -- "$cur") ) for i in "${!COMPREPLY[@]}"; do COMPREPLY[$i]="${COMPREPLY[$i]}/" done return 0 ;; -t|--theme) local themes=$(awf-gtk3 -l 2>/dev/null | awk '{$1=$1};1') # trim + handle list COMPREPLY=( $(compgen -W "$themes" -- "$cur") ) return 0 ;; esac local used=() for ((i = 1; i < COMP_CWORD; i++)); do local word="${COMP_WORDS[$i]}" if [[ "$word" == -* ]]; then used+=("$word") [[ -n "${opt_aliases[$word]}" ]] && used+=("${opt_aliases[$word]}") fi done local hide_single_use=false for word in "${used[@]}"; do case "$word" in -t|--theme|-s|--screenshot|--ltr|--rtl) hide_single_use=true break ;; esac done local remaining_opts=() for opt in "${all_opts[@]}"; do local skip=false for u in "${used[@]}"; do [[ "$opt" == "$u" ]] && skip=true && break done if $hide_single_use; then for su in "${single_opts[@]}"; do [[ "$opt" == "$su" ]] && skip=true && break done fi $skip || remaining_opts+=("$opt") done opts=${remaining_opts[*]} COMPREPLY=( $(compgen -W "$opts" -- "$cur") ) } complete -F _awf_gtk3_complete awf-gtk3awf-extended-4.1.0/data/awf-gtk3.desktop000066400000000000000000000004761517644610000200310ustar00rootroot00000000000000[Desktop Entry] Name=AWF GTK 3 Comment=A widget factory is a theme preview application for GTK and Qt. Comment[fr]=La fabrique à widgets est une application d'aperçu de thème pour GTK et Qt. Exec=awf-gtk3 Icon=awf-gtk3 Terminal=false Type=Application Keywords=gtk;css; Categories=GTK;Development; StartupNotify=trueawf-extended-4.1.0/data/awf-gtk3.fr.1000066400000000000000000000023721517644610000171230ustar00rootroot00000000000000.Dd 01/01/22 .Dt AWF 1 .Os Linux .Sh NAME .Nm awf-gtk3 .Nd Application d'aperçu de thème pour GTK 3. .Sh SYNOPSIS .Nm .Op Fl h .Op Fl v .Op Fl l .Op Fl t Ar theme .Op Fl s Ar filename .Op Fl -ltr .Op Fl -rtl .Sh DESCRIPTION La fabrique à widgets est une application d'aperçu de thème pour GTK et Qt. Elle affiche les différents types de widgets dans une seule fenêtre permettant de voir l'effet visuel du thème appliqué. .Sh OPTIONS .Bl -tag .It Fl h, Fl Fl help Affiche l'aide. .It Fl v, Fl Fl version Affiche le numéro de version. .It Fl l Liste les thèmes disponibles. .It Fl t Ar theme, Fl Fl theme Ar theme Démarre avec le thème spécifié. .It Fl s Ar filename, Fl Fl screenshot Ar filename Démarre et enregistre une capture d'écran png lors du SIGHUP. .It Fl -ltr Démarre avec le texte de gauche à droite (Left-To-Right). .It Fl -rtl Démarre avec le texte de droite à gauche (Right-To-Left). .El .Sh VARIABLES D'ENVIRONNEMENT .Bl -tag -width "GTK_OVERLAY_SCROLLING=0" -compact .It GTK_CSD=1 Active la fenêtre CSD. .It GTK_OVERLAY_SCROLLING=0 Définit les barres de défilement comme étant toujours visibles. .El .Sh FICHIERS .Bl -tag -width "/home/user/.awf-accels" -compact .It Pa /home/user/.awf-accels Configuration des raccourcis clavier. .Elawf-extended-4.1.0/data/awf-gtk4.1000066400000000000000000000021361517644610000165140ustar00rootroot00000000000000.Dd 01/01/22 .Dt AWF 1 .Os Linux .Sh NAME .Nm awf-gtk4 .Nd Theme preview application for GTK 4. .Sh SYNOPSIS .Nm .Op Fl h .Op Fl v .Op Fl l .Op Fl t Ar theme .Op Fl s Ar filename .Op Fl -ltr .Op Fl -rtl .Sh DESCRIPTION A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme. .Sh OPTIONS .Bl -tag .It Fl h, Fl Fl help Show help. .It Fl v, Fl Fl version Show version number. .It Fl l List available themes. .It Fl t Ar theme, Fl Fl theme Ar theme Run with the specified theme. .It Fl s Ar filename, Fl Fl screenshot Ar filename Run and save a png screenshot on SIGHUP. .It Fl -ltr Run with text from left to right (Left-To-Right). .It Fl -rtl Run with text from right to left (Right-To-Left). .El .Sh ENVIRONMENT VARIABLES .Bl -tag -width "GTK_OVERLAY_SCROLLING=0" -compact .It GTK_CSD=1 Enable CSD window. .It GTK_OVERLAY_SCROLLING=0 Set scrollbars always visible. .El .Sh FILES .Bl -tag -width "/home/user/.awf-accels" -compact .It Pa /home/user/.awf-accels Configuration of keyboard shortcuts. .Elawf-extended-4.1.0/data/awf-gtk4.bash000066400000000000000000000035171517644610000172750ustar00rootroot00000000000000# Made in ChatGPT and Copilot # Licensed under the MIT License _awf_gtk4_complete() { local cur prev opts all_opts single_opts COMPREPLY=() cur="${COMP_WORDS[COMP_CWORD]}" prev="${COMP_WORDS[COMP_CWORD-1]}" all_opts=(-h --help -v --version -l --list-themes -t --theme -s --screenshot --ltr --rtl) single_opts=(-h --help -v --version -l --list-themes) declare -A opt_aliases=( [-h]=--help [--help]=-h [-v]=--version [--version]=-v [-l]=--list-themes [--list-themes]=-l [-t]=--theme [--theme]=-t [-s]=--screenshot [--screenshot]=-s [--rtl]=--ltr [--ltr]=--rtl ) case "$prev" in -h|--help|-v|--version|-l|--list-themes) return 1 # stop ;; -s|--screenshot) compopt -o nospace COMPREPLY=( $(compgen -d -- "$cur") ) for i in "${!COMPREPLY[@]}"; do COMPREPLY[$i]="${COMPREPLY[$i]}/" done return 0 ;; -t|--theme) local themes=$(awf-gtk4 -l 2>/dev/null | awk '{$1=$1};1') # trim + handle list COMPREPLY=( $(compgen -W "$themes" -- "$cur") ) return 0 ;; esac local used=() for ((i = 1; i < COMP_CWORD; i++)); do local word="${COMP_WORDS[$i]}" if [[ "$word" == -* ]]; then used+=("$word") [[ -n "${opt_aliases[$word]}" ]] && used+=("${opt_aliases[$word]}") fi done local hide_single_use=false for word in "${used[@]}"; do case "$word" in -t|--theme|-s|--screenshot|--ltr|--rtl) hide_single_use=true break ;; esac done local remaining_opts=() for opt in "${all_opts[@]}"; do local skip=false for u in "${used[@]}"; do [[ "$opt" == "$u" ]] && skip=true && break done if $hide_single_use; then for su in "${single_opts[@]}"; do [[ "$opt" == "$su" ]] && skip=true && break done fi $skip || remaining_opts+=("$opt") done opts=${remaining_opts[*]} COMPREPLY=( $(compgen -W "$opts" -- "$cur") ) } complete -F _awf_gtk4_complete awf-gtk4awf-extended-4.1.0/data/awf-gtk4.desktop000066400000000000000000000004761517644610000200320ustar00rootroot00000000000000[Desktop Entry] Name=AWF GTK 4 Comment=A widget factory is a theme preview application for GTK and Qt. Comment[fr]=La fabrique à widgets est une application d'aperçu de thème pour GTK et Qt. Exec=awf-gtk4 Icon=awf-gtk4 Terminal=false Type=Application Keywords=gtk;css; Categories=GTK;Development; StartupNotify=trueawf-extended-4.1.0/data/awf-gtk4.fr.1000066400000000000000000000023721517644610000171240ustar00rootroot00000000000000.Dd 01/01/22 .Dt AWF 1 .Os Linux .Sh NAME .Nm awf-gtk4 .Nd Application d'aperçu de thème pour GTK 4. .Sh SYNOPSIS .Nm .Op Fl h .Op Fl v .Op Fl l .Op Fl t Ar theme .Op Fl s Ar filename .Op Fl -ltr .Op Fl -rtl .Sh DESCRIPTION La fabrique à widgets est une application d'aperçu de thème pour GTK et Qt. Elle affiche les différents types de widgets dans une seule fenêtre permettant de voir l'effet visuel du thème appliqué. .Sh OPTIONS .Bl -tag .It Fl h, Fl Fl help Affiche l'aide. .It Fl v, Fl Fl version Affiche le numéro de version. .It Fl l Liste les thèmes disponibles. .It Fl t Ar theme, Fl Fl theme Ar theme Démarre avec le thème spécifié. .It Fl s Ar filename, Fl Fl screenshot Ar filename Démarre et enregistre une capture d'écran png lors du SIGHUP. .It Fl -ltr Démarre avec le texte de gauche à droite (Left-To-Right). .It Fl -rtl Démarre avec le texte de droite à gauche (Right-To-Left). .El .Sh VARIABLES D'ENVIRONNEMENT .Bl -tag -width "GTK_OVERLAY_SCROLLING=0" -compact .It GTK_CSD=1 Active la fenêtre CSD. .It GTK_OVERLAY_SCROLLING=0 Définit les barres de défilement comme étant toujours visibles. .El .Sh FICHIERS .Bl -tag -width "/home/user/.awf-accels" -compact .It Pa /home/user/.awf-accels Configuration des raccourcis clavier. .Elawf-extended-4.1.0/data/awf-gtk5.1000066400000000000000000000021361517644610000165150ustar00rootroot00000000000000.Dd 01/01/25 .Dt AWF 1 .Os Linux .Sh NAME .Nm awf-gtk5 .Nd Theme preview application for GTK 5. .Sh SYNOPSIS .Nm .Op Fl h .Op Fl v .Op Fl l .Op Fl t Ar theme .Op Fl s Ar filename .Op Fl -ltr .Op Fl -rtl .Sh DESCRIPTION A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme. .Sh OPTIONS .Bl -tag .It Fl h, Fl Fl help Show help. .It Fl v, Fl Fl version Show version number. .It Fl l List available themes. .It Fl t Ar theme, Fl Fl theme Ar theme Run with the specified theme. .It Fl s Ar filename, Fl Fl screenshot Ar filename Run and save a png screenshot on SIGHUP. .It Fl -ltr Run with text from left to right (Left-To-Right). .It Fl -rtl Run with text from right to left (Right-To-Left). .El .Sh ENVIRONMENT VARIABLES .Bl -tag -width "GTK_OVERLAY_SCROLLING=0" -compact .It GTK_CSD=1 Enable CSD window. .It GTK_OVERLAY_SCROLLING=0 Set scrollbars always visible. .El .Sh FILES .Bl -tag -width "/home/user/.awf-accels" -compact .It Pa /home/user/.awf-accels Configuration of keyboard shortcuts. .Elawf-extended-4.1.0/data/awf-gtk5.bash000066400000000000000000000035171517644610000172760ustar00rootroot00000000000000# Made in ChatGPT and Copilot # Licensed under the MIT License _awf_gtk5_complete() { local cur prev opts all_opts single_opts COMPREPLY=() cur="${COMP_WORDS[COMP_CWORD]}" prev="${COMP_WORDS[COMP_CWORD-1]}" all_opts=(-h --help -v --version -l --list-themes -t --theme -s --screenshot --ltr --rtl) single_opts=(-h --help -v --version -l --list-themes) declare -A opt_aliases=( [-h]=--help [--help]=-h [-v]=--version [--version]=-v [-l]=--list-themes [--list-themes]=-l [-t]=--theme [--theme]=-t [-s]=--screenshot [--screenshot]=-s [--rtl]=--ltr [--ltr]=--rtl ) case "$prev" in -h|--help|-v|--version|-l|--list-themes) return 1 # stop ;; -s|--screenshot) compopt -o nospace COMPREPLY=( $(compgen -d -- "$cur") ) for i in "${!COMPREPLY[@]}"; do COMPREPLY[$i]="${COMPREPLY[$i]}/" done return 0 ;; -t|--theme) local themes=$(awf-gtk5 -l 2>/dev/null | awk '{$1=$1};1') # trim + handle list COMPREPLY=( $(compgen -W "$themes" -- "$cur") ) return 0 ;; esac local used=() for ((i = 1; i < COMP_CWORD; i++)); do local word="${COMP_WORDS[$i]}" if [[ "$word" == -* ]]; then used+=("$word") [[ -n "${opt_aliases[$word]}" ]] && used+=("${opt_aliases[$word]}") fi done local hide_single_use=false for word in "${used[@]}"; do case "$word" in -t|--theme|-s|--screenshot|--ltr|--rtl) hide_single_use=true break ;; esac done local remaining_opts=() for opt in "${all_opts[@]}"; do local skip=false for u in "${used[@]}"; do [[ "$opt" == "$u" ]] && skip=true && break done if $hide_single_use; then for su in "${single_opts[@]}"; do [[ "$opt" == "$su" ]] && skip=true && break done fi $skip || remaining_opts+=("$opt") done opts=${remaining_opts[*]} COMPREPLY=( $(compgen -W "$opts" -- "$cur") ) } complete -F _awf_gtk5_complete awf-gtk5awf-extended-4.1.0/data/awf-gtk5.desktop000066400000000000000000000004761517644610000200330ustar00rootroot00000000000000[Desktop Entry] Name=AWF GTK 5 Comment=A widget factory is a theme preview application for GTK and Qt. Comment[fr]=La fabrique à widgets est une application d'aperçu de thème pour GTK et Qt. Exec=awf-gtk5 Icon=awf-gtk5 Terminal=false Type=Application Keywords=gtk;css; Categories=GTK;Development; StartupNotify=trueawf-extended-4.1.0/data/awf-gtk5.fr.1000066400000000000000000000023721517644610000171250ustar00rootroot00000000000000.Dd 01/01/25 .Dt AWF 1 .Os Linux .Sh NAME .Nm awf-gtk5 .Nd Application d'aperçu de thème pour GTK 5. .Sh SYNOPSIS .Nm .Op Fl h .Op Fl v .Op Fl l .Op Fl t Ar theme .Op Fl s Ar filename .Op Fl -ltr .Op Fl -rtl .Sh DESCRIPTION La fabrique à widgets est une application d'aperçu de thème pour GTK et Qt. Elle affiche les différents types de widgets dans une seule fenêtre permettant de voir l'effet visuel du thème appliqué. .Sh OPTIONS .Bl -tag .It Fl h, Fl Fl help Affiche l'aide. .It Fl v, Fl Fl version Affiche le numéro de version. .It Fl l Liste les thèmes disponibles. .It Fl t Ar theme, Fl Fl theme Ar theme Démarre avec le thème spécifié. .It Fl s Ar filename, Fl Fl screenshot Ar filename Démarre et enregistre une capture d'écran png lors du SIGHUP. .It Fl -ltr Démarre avec le texte de gauche à droite (Left-To-Right). .It Fl -rtl Démarre avec le texte de droite à gauche (Right-To-Left). .El .Sh VARIABLES D'ENVIRONNEMENT .Bl -tag -width "GTK_OVERLAY_SCROLLING=0" -compact .It GTK_CSD=1 Active la fenêtre CSD. .It GTK_OVERLAY_SCROLLING=0 Définit les barres de défilement comme étant toujours visibles. .El .Sh FICHIERS .Bl -tag -width "/home/user/.awf-accels" -compact .It Pa /home/user/.awf-accels Configuration des raccourcis clavier. .Elawf-extended-4.1.0/data/awf-qt5.1000066400000000000000000000016571517644610000163630ustar00rootroot00000000000000.Dd 01/01/25 .Dt AWF 1 .Os Linux .Sh NAME .Nm awf-qt5 .Nd Theme preview application for Qt 5. .Sh SYNOPSIS .Nm .Op Fl h .Op Fl v .Op Fl l .Op Fl t Ar theme .Op Fl s Ar filename .Op Fl -ltr .Op Fl -rtl .Sh DESCRIPTION A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme. .Sh OPTIONS .Bl -tag .It Fl h, Fl Fl help Show help. .It Fl v, Fl Fl version Show version number. .It Fl l List available themes. .It Fl t Ar theme, Fl Fl theme Ar theme Run with the specified theme. .It Fl s Ar filename, Fl Fl screenshot Ar filename Run and save a png screenshot on SIGHUP. .It Fl -ltr Run with text from left to right (Left-To-Right). .It Fl -rtl Run with text from right to left (Right-To-Left). .El .Sh FILES .Bl -tag -width "/home/user/.awf-accels" -compact .It Pa /home/user/.awf-accels Configuration of keyboard shortcuts. .Elawf-extended-4.1.0/data/awf-qt5.bash000066400000000000000000000035131517644610000171310ustar00rootroot00000000000000# Made in ChatGPT and Copilot # Licensed under the MIT License _awf_qt5_complete() { local cur prev opts all_opts single_opts COMPREPLY=() cur="${COMP_WORDS[COMP_CWORD]}" prev="${COMP_WORDS[COMP_CWORD-1]}" all_opts=(-h --help -v --version -l --list-themes -t --theme -s --screenshot --ltr --rtl) single_opts=(-h --help -v --version -l --list-themes) declare -A opt_aliases=( [-h]=--help [--help]=-h [-v]=--version [--version]=-v [-l]=--list-themes [--list-themes]=-l [-t]=--theme [--theme]=-t [-s]=--screenshot [--screenshot]=-s [--rtl]=--ltr [--ltr]=--rtl ) case "$prev" in -h|--help|-v|--version|-l|--list-themes) return 1 # stop ;; -s|--screenshot) compopt -o nospace COMPREPLY=( $(compgen -d -- "$cur") ) for i in "${!COMPREPLY[@]}"; do COMPREPLY[$i]="${COMPREPLY[$i]}/" done return 0 ;; -t|--theme) local themes=$(awf-qt5 -l 2>/dev/null | awk '{$1=$1};1') # trim + handle list COMPREPLY=( $(compgen -W "$themes" -- "$cur") ) return 0 ;; esac local used=() for ((i = 1; i < COMP_CWORD; i++)); do local word="${COMP_WORDS[$i]}" if [[ "$word" == -* ]]; then used+=("$word") [[ -n "${opt_aliases[$word]}" ]] && used+=("${opt_aliases[$word]}") fi done local hide_single_use=false for word in "${used[@]}"; do case "$word" in -t|--theme|-s|--screenshot|--ltr|--rtl) hide_single_use=true break ;; esac done local remaining_opts=() for opt in "${all_opts[@]}"; do local skip=false for u in "${used[@]}"; do [[ "$opt" == "$u" ]] && skip=true && break done if $hide_single_use; then for su in "${single_opts[@]}"; do [[ "$opt" == "$su" ]] && skip=true && break done fi $skip || remaining_opts+=("$opt") done opts=${remaining_opts[*]} COMPREPLY=( $(compgen -W "$opts" -- "$cur") ) } complete -F _awf_qt5_complete awf-qt5awf-extended-4.1.0/data/awf-qt5.desktop000066400000000000000000000004751517644610000176710ustar00rootroot00000000000000[Desktop Entry] Name=AWF Qt 5 Comment=A widget factory is a theme preview application for GTK and Qt. Comment[fr]=La fabrique à widgets est une application d'aperçu de thème pour GTK et Qt. Exec=awf-qt5 Icon=awf-qt5 Terminal=false Type=Application Keywords=qt;css;qss; Categories=Qt;Development; StartupNotify=trueawf-extended-4.1.0/data/awf-qt5.fr.1000066400000000000000000000020361517644610000167610ustar00rootroot00000000000000.Dd 01/01/25 .Dt AWF 1 .Os Linux .Sh NAME .Nm awf-qt5 .Nd Application d'aperçu de thème pour Qt 5. .Sh SYNOPSIS .Nm .Op Fl h .Op Fl v .Op Fl l .Op Fl t Ar theme .Op Fl s Ar filename .Op Fl -ltr .Op Fl -rtl .Sh DESCRIPTION La fabrique à widgets est une application d'aperçu de thème pour GTK et Qt. Elle affiche les différents types de widgets dans une seule fenêtre permettant de voir l'effet visuel du thème appliqué. .Sh OPTIONS .Bl -tag .It Fl h, Fl Fl help Affiche l'aide. .It Fl v, Fl Fl version Affiche le numéro de version. .It Fl l Liste les thèmes disponibles. .It Fl t Ar theme, Fl Fl theme Ar theme Démarre avec le thème spécifié. .It Fl s Ar filename, Fl Fl screenshot Ar filename Démarre et enregistre une capture d'écran png lors du SIGHUP. .It Fl -ltr Démarre avec le texte de gauche à droite (Left-To-Right). .It Fl -rtl Démarre avec le texte de droite à gauche (Right-To-Left). .El .Sh FICHIERS .Bl -tag -width "/home/user/.awf-accels" -compact .It Pa /home/user/.awf-accels Configuration des raccourcis clavier. .Elawf-extended-4.1.0/data/awf-qt6.1000066400000000000000000000016571517644610000163640ustar00rootroot00000000000000.Dd 01/01/26 .Dt AWF 1 .Os Linux .Sh NAME .Nm awf-qt6 .Nd Theme preview application for Qt 6. .Sh SYNOPSIS .Nm .Op Fl h .Op Fl v .Op Fl l .Op Fl t Ar theme .Op Fl s Ar filename .Op Fl -ltr .Op Fl -rtl .Sh DESCRIPTION A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme. .Sh OPTIONS .Bl -tag .It Fl h, Fl Fl help Show help. .It Fl v, Fl Fl version Show version number. .It Fl l List available themes. .It Fl t Ar theme, Fl Fl theme Ar theme Run with the specified theme. .It Fl s Ar filename, Fl Fl screenshot Ar filename Run and save a png screenshot on SIGHUP. .It Fl -ltr Run with text from left to right (Left-To-Right). .It Fl -rtl Run with text from right to left (Right-To-Left). .El .Sh FILES .Bl -tag -width "/home/user/.awf-accels" -compact .It Pa /home/user/.awf-accels Configuration of keyboard shortcuts. .Elawf-extended-4.1.0/data/awf-qt6.bash000066400000000000000000000035131517644610000171320ustar00rootroot00000000000000# Made in ChatGPT and Copilot # Licensed under the MIT License _awf_qt6_complete() { local cur prev opts all_opts single_opts COMPREPLY=() cur="${COMP_WORDS[COMP_CWORD]}" prev="${COMP_WORDS[COMP_CWORD-1]}" all_opts=(-h --help -v --version -l --list-themes -t --theme -s --screenshot --ltr --rtl) single_opts=(-h --help -v --version -l --list-themes) declare -A opt_aliases=( [-h]=--help [--help]=-h [-v]=--version [--version]=-v [-l]=--list-themes [--list-themes]=-l [-t]=--theme [--theme]=-t [-s]=--screenshot [--screenshot]=-s [--rtl]=--ltr [--ltr]=--rtl ) case "$prev" in -h|--help|-v|--version|-l|--list-themes) return 1 # stop ;; -s|--screenshot) compopt -o nospace COMPREPLY=( $(compgen -d -- "$cur") ) for i in "${!COMPREPLY[@]}"; do COMPREPLY[$i]="${COMPREPLY[$i]}/" done return 0 ;; -t|--theme) local themes=$(awf-qt6 -l 2>/dev/null | awk '{$1=$1};1') # trim + handle list COMPREPLY=( $(compgen -W "$themes" -- "$cur") ) return 0 ;; esac local used=() for ((i = 1; i < COMP_CWORD; i++)); do local word="${COMP_WORDS[$i]}" if [[ "$word" == -* ]]; then used+=("$word") [[ -n "${opt_aliases[$word]}" ]] && used+=("${opt_aliases[$word]}") fi done local hide_single_use=false for word in "${used[@]}"; do case "$word" in -t|--theme|-s|--screenshot|--ltr|--rtl) hide_single_use=true break ;; esac done local remaining_opts=() for opt in "${all_opts[@]}"; do local skip=false for u in "${used[@]}"; do [[ "$opt" == "$u" ]] && skip=true && break done if $hide_single_use; then for su in "${single_opts[@]}"; do [[ "$opt" == "$su" ]] && skip=true && break done fi $skip || remaining_opts+=("$opt") done opts=${remaining_opts[*]} COMPREPLY=( $(compgen -W "$opts" -- "$cur") ) } complete -F _awf_qt6_complete awf-qt6awf-extended-4.1.0/data/awf-qt6.desktop000066400000000000000000000004751517644610000176720ustar00rootroot00000000000000[Desktop Entry] Name=AWF Qt 6 Comment=A widget factory is a theme preview application for GTK and Qt. Comment[fr]=La fabrique à widgets est une application d'aperçu de thème pour GTK et Qt. Exec=awf-qt6 Icon=awf-qt6 Terminal=false Type=Application Keywords=qt;css;qss; Categories=Qt;Development; StartupNotify=trueawf-extended-4.1.0/data/awf-qt6.fr.1000066400000000000000000000020361517644610000167620ustar00rootroot00000000000000.Dd 01/01/26 .Dt AWF 1 .Os Linux .Sh NAME .Nm awf-qt6 .Nd Application d'aperçu de thème pour Qt 6. .Sh SYNOPSIS .Nm .Op Fl h .Op Fl v .Op Fl l .Op Fl t Ar theme .Op Fl s Ar filename .Op Fl -ltr .Op Fl -rtl .Sh DESCRIPTION La fabrique à widgets est une application d'aperçu de thème pour GTK et Qt. Elle affiche les différents types de widgets dans une seule fenêtre permettant de voir l'effet visuel du thème appliqué. .Sh OPTIONS .Bl -tag .It Fl h, Fl Fl help Affiche l'aide. .It Fl v, Fl Fl version Affiche le numéro de version. .It Fl l Liste les thèmes disponibles. .It Fl t Ar theme, Fl Fl theme Ar theme Démarre avec le thème spécifié. .It Fl s Ar filename, Fl Fl screenshot Ar filename Démarre et enregistre une capture d'écran png lors du SIGHUP. .It Fl -ltr Démarre avec le texte de gauche à droite (Left-To-Right). .It Fl -rtl Démarre avec le texte de droite à gauche (Right-To-Left). .El .Sh FICHIERS .Bl -tag -width "/home/user/.awf-accels" -compact .It Pa /home/user/.awf-accels Configuration des raccourcis clavier. .Elawf-extended-4.1.0/data/awf-qt7.1000066400000000000000000000016571517644610000163650ustar00rootroot00000000000000.Dd 01/01/26 .Dt AWF 1 .Os Linux .Sh NAME .Nm awf-qt7 .Nd Theme preview application for Qt 7. .Sh SYNOPSIS .Nm .Op Fl h .Op Fl v .Op Fl l .Op Fl t Ar theme .Op Fl s Ar filename .Op Fl -ltr .Op Fl -rtl .Sh DESCRIPTION A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme. .Sh OPTIONS .Bl -tag .It Fl h, Fl Fl help Show help. .It Fl v, Fl Fl version Show version number. .It Fl l List available themes. .It Fl t Ar theme, Fl Fl theme Ar theme Run with the specified theme. .It Fl s Ar filename, Fl Fl screenshot Ar filename Run and save a png screenshot on SIGHUP. .It Fl -ltr Run with text from left to right (Left-To-Right). .It Fl -rtl Run with text from right to left (Right-To-Left). .El .Sh FILES .Bl -tag -width "/home/user/.awf-accels" -compact .It Pa /home/user/.awf-accels Configuration of keyboard shortcuts. .Elawf-extended-4.1.0/data/awf-qt7.bash000066400000000000000000000035131517644610000171330ustar00rootroot00000000000000# Made in ChatGPT and Copilot # Licensed under the MIT License _awf_qt7_complete() { local cur prev opts all_opts single_opts COMPREPLY=() cur="${COMP_WORDS[COMP_CWORD]}" prev="${COMP_WORDS[COMP_CWORD-1]}" all_opts=(-h --help -v --version -l --list-themes -t --theme -s --screenshot --ltr --rtl) single_opts=(-h --help -v --version -l --list-themes) declare -A opt_aliases=( [-h]=--help [--help]=-h [-v]=--version [--version]=-v [-l]=--list-themes [--list-themes]=-l [-t]=--theme [--theme]=-t [-s]=--screenshot [--screenshot]=-s [--rtl]=--ltr [--ltr]=--rtl ) case "$prev" in -h|--help|-v|--version|-l|--list-themes) return 1 # stop ;; -s|--screenshot) compopt -o nospace COMPREPLY=( $(compgen -d -- "$cur") ) for i in "${!COMPREPLY[@]}"; do COMPREPLY[$i]="${COMPREPLY[$i]}/" done return 0 ;; -t|--theme) local themes=$(awf-qt7 -l 2>/dev/null | awk '{$1=$1};1') # trim + handle list COMPREPLY=( $(compgen -W "$themes" -- "$cur") ) return 0 ;; esac local used=() for ((i = 1; i < COMP_CWORD; i++)); do local word="${COMP_WORDS[$i]}" if [[ "$word" == -* ]]; then used+=("$word") [[ -n "${opt_aliases[$word]}" ]] && used+=("${opt_aliases[$word]}") fi done local hide_single_use=false for word in "${used[@]}"; do case "$word" in -t|--theme|-s|--screenshot|--ltr|--rtl) hide_single_use=true break ;; esac done local remaining_opts=() for opt in "${all_opts[@]}"; do local skip=false for u in "${used[@]}"; do [[ "$opt" == "$u" ]] && skip=true && break done if $hide_single_use; then for su in "${single_opts[@]}"; do [[ "$opt" == "$su" ]] && skip=true && break done fi $skip || remaining_opts+=("$opt") done opts=${remaining_opts[*]} COMPREPLY=( $(compgen -W "$opts" -- "$cur") ) } complete -F _awf_qt7_complete awf-qt7awf-extended-4.1.0/data/awf-qt7.desktop000066400000000000000000000005321517644610000176650ustar00rootroot00000000000000[Desktop Entry] Name=AWF Qt 7 Comment=A widget factory is a theme preview application for GTK and Qt. Comment[fr]=La fabrique à widgets est une application d'aperçu de thème pour GTK et Qt. Exec=awf-qt7 Icon=awf-qt7 Terminal=false Type=Application Keywords=qt;css;qss; Categories=Qt;Development; StartupNotify=true Name[fr_FR]=awf-qt7.desktop awf-extended-4.1.0/data/awf-qt7.fr.1000066400000000000000000000020361517644610000167630ustar00rootroot00000000000000.Dd 01/01/26 .Dt AWF 1 .Os Linux .Sh NAME .Nm awf-qt7 .Nd Application d'aperçu de thème pour Qt 7. .Sh SYNOPSIS .Nm .Op Fl h .Op Fl v .Op Fl l .Op Fl t Ar theme .Op Fl s Ar filename .Op Fl -ltr .Op Fl -rtl .Sh DESCRIPTION La fabrique à widgets est une application d'aperçu de thème pour GTK et Qt. Elle affiche les différents types de widgets dans une seule fenêtre permettant de voir l'effet visuel du thème appliqué. .Sh OPTIONS .Bl -tag .It Fl h, Fl Fl help Affiche l'aide. .It Fl v, Fl Fl version Affiche le numéro de version. .It Fl l Liste les thèmes disponibles. .It Fl t Ar theme, Fl Fl theme Ar theme Démarre avec le thème spécifié. .It Fl s Ar filename, Fl Fl screenshot Ar filename Démarre et enregistre une capture d'écran png lors du SIGHUP. .It Fl -ltr Démarre avec le texte de gauche à droite (Left-To-Right). .It Fl -rtl Démarre avec le texte de droite à gauche (Right-To-Left). .El .Sh FICHIERS .Bl -tag -width "/home/user/.awf-accels" -compact .It Pa /home/user/.awf-accels Configuration des raccourcis clavier. .Elawf-extended-4.1.0/data/awf.ico000066400000000000000000000402361517644610000162620ustar00rootroot00000000000000hf^ &00@@(v*( YN6YN7ZO6tX0[(p q?y#u@ քR)&Հ4SEßoLa|hx繡⿙ÉȎʔ˙̙#'+ (+(+(+$ (+00//&)(+//0000//&!(+//0000//&(+//0000//, (+//0000///-"*//0000////.  %//0000000000 000000000000000000(,YM5XN6YN6nY;iZBwa@kle=l!u$w@sX  ؑ5 -Ӑ>ߑB)K؝UٙzJf^loִ߳ssﺑxݺȆŕȏʑµʙ˖̘̙ͩҽ8, ;;- " ;;2  ;;- ;;- ;;-#)' ;;-95 ;;-CCBBBB%:63 ;;>BBBCCCCBBBB%*+1 ;;>BBBCCCCBBBB%./ ;;>BBBCCCCBBBB% ;;>BBBCCCCBBBB( ;;>BBBCCCCBBBB@$;;>BBBCCCCBBBBBB<;;=BBBCCCCCBBBBBB?;0ABBCCCCCCCBBBBBBB!47BBCCCCCCCCCCCCCCCC &CCCCCCCCCCCCCCCCCCCCCCCCCCCCC <(0YM6XM7YN5YN6ZO7[P7jyfMr.s!p?uD~y@@  )!/,/ڑX76ؘyZTnΦnq}sqv}뷓}ņŇƇÔÜɑ͒Α̙ң -* !1<< 4<<6<<6<<6<<6<<".(6<<<96<<AAA@@@@<9:6<<@@@AAAAAA@@@@30;6<<@@@AAAAAA@@@@$=/6<<@@@AAAAAA@@@@%6<<@@@AAAAAA@@@@6<<@@@AAAAAA@@@@'5<<@@@AAAAAA@@@@@8,<<@@@AAAAAA@@@@@@? +<2@@@AAAAAA@@@@@@@@)+7>@@@AAAAAAAAAAAAAAA +&AAAAAAAAAAAAAAAAAAAA #AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA( @ZL7ZN5YN6YN7[N7`R8}^)moo!}iOm>q?qDv#~y@7?ՆI" ,)4;ՎqؙM֒wݞR=\_CEaGe]Ѩtstkm継su}뼏轖ĀƊɊȎǘ˘˙̙ɹԨիֺܵ %76  '9KJB &8KKK$DKKK#DKKKDKKKDKKKDKKKDKKK 0@DKKK1=?DKKKEKGDKKKVVVVUUUUU*EKGPDKKKUUUUVVVVVVVVUUUUU*EKGRDKKKUUUUVVVVVVVVUUUUU*3;:FDKKKUUUUVVVVVVVVUUUUU*-MNDKKKUUUUVVVVVVVVUUUUU*"5DKKKUUUUVVVVVVVVUUUUU*DKKKUUUUVVVVVVVVUUUUU,DKKKUUUUVVVVVVVVUUUUUQ!CKKKUUUUVVVVVVVVUUUUUUT.4KKKUUUUVVVVVVVVUUUUUUUUO2KKHUUUUVVVVVVVVUUUUUUUUUS(2KILUUUUVVVVVVVVVUUUUUUUUUUA2K)VVVVVVVVVVVVVVVVVVVVVVVVVV/+VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV(0`WL6YM6[M6WM8YN5XN6YN6XN7YN7ZN7XN8ZO6ZO7[P7^P7`S<gU8qY.q\;a'f>i>vxt!t#w"~y tCׁ߀y@tZ?@ ڍ‡<  ͌9܋B ޓ20!4+005rјH2Iَq/KՔxSQBGGܞ}UZUcaZ^yefb~۰hpl鵓nz}ĄƈɎǖ¯ɗʛ̙ϝϟͪشںߺ   >[d!@;7\vvnJ D8777\vvvvu B777777\vvvvv$A77777777evvvvv+?7777777777ivvvvv:=777777777777ivvvvv577777777777777ivvvvv777777777777777ivvvvv777777777777777ivvvvv777777777777777ivvvvv777777777777777ivvvvv777777777777777ivvvvv777777777&,7777ivvvvv777777(LjzU7777ivvvvv7777#GfokK7777ivvvvv 7777Ivvvp7777ivvvvv7777Ivvvp7777ivvvvv)7777Ivvvp|X7777ivvvvv)7777Ivvvpb7777ivvvvv)7777Ivvvp^7777ivvvvv)7777*`aaY~Z7777ivvvvv)77772Ow{{xE7777ivvvvv)777777.]z{V7777ivvvvv)77777777FqT7777ivvvvv)7777777772-7777ivvvvv)777777777777777ivvvvv)777777777777777ivvvvvS777777777777777ivvvvv_37777777777777gvvvvv}1777777777777PvvvvvR67777777777Mvvvvvy0777777777MvvvvlC77777777Mvvvrc/777777Mvvvs977777Mvvh%4777MvmN'77MtQ"7MWՕט{\KLRe⤁^Wbdh[diimpppᵑ㶒鶕w췒yz뺌뼏Âą缥“Ùʘ˘˙̙͚͘ΛϝРСԢѵԪլӸ٬ڹں    Iew5LH@d^TE@@@du/RA@@@@@d #S@@@@@@@@d )Q@@@@@@@@@@c 3P@@@@@@@@@@@@mBM@@@@@@@@@@@@@@mLG@@@@@@@@@@@@@@@@mNC@@@@@@@@@@@@@@@@@@m=@@@@@@@@@@@@@@@@@@@@m=@@@@@@@@@@@@@@@@@@@@m=@@@@@@@@@@@@@@@@@@@@m=@@@@@@@@@@@@@@@@@@@@m=@@@@@@@@@@@@@@@@@@@@m=@@@@@@@@@@@@@@@@@@@@m=@@@@@@@@@@@@@@@@@@@@m=@@@@@@@@@@@@@@=@@@@@m=@@@@@@@@@@@2_l,@@@@@m=@@@@@@@@:Up,@@@@@m =@@@@@@!V{k ,@@@@@m =@@@@@%os,@@@@@m=@@@@@%|,@@@@@m  =@@@@@%|,@@@@@m =@@@@@%|,@@@@@m=@@@@@%|,@@@@@m=@@@@@%|,@@@@@m=@@@@@%|,@@@@@m=@@@@@%hyyyyn,@@@@@m=@@@@@=&rqj,@@@@@m=@@@@@@@+],@@@@@m=@@@@@@@@@8t,@@@@@m=@@@@@@@@@@1X,@@@@@m=@@@@@@@@@@@@.Y,@@@@@m=@@@@@@@@@@@@@@=@@@@@m=@@@@@@@@@@@@@@@@@@@@m=@@@@@@@@@@@@@@@@@@@@m?@@@@@@@@@@@@@@@@@@@@m}7@@@@@@@@@@@@@@@@@@@mF@@@@@@@@@@@@@@@@@@ib<@@@@@@@@@@@@@@@@O4@@@@@@@@@@@@@@@KZ>@@@@@@@@@@@@@K~6@@@@@@@@@@@@KxD@@@@@@@@@@@Kf<@@@@@@@@@K9@@@@@@@@KW>@@@@@@Kz0@@@@@K[(@@@@Ka";@@Kg*@Kv`'$J\-?awf-extended-4.1.0/data/icons/000077500000000000000000000000001517644610000161175ustar00rootroot00000000000000awf-extended-4.1.0/data/icons/128x128/000077500000000000000000000000001517644610000170545ustar00rootroot00000000000000awf-extended-4.1.0/data/icons/128x128/apps/000077500000000000000000000000001517644610000200175ustar00rootroot00000000000000awf-extended-4.1.0/data/icons/128x128/apps/awf.png000066400000000000000000000036621517644610000213110ustar00rootroot00000000000000PNG  IHDRPLTEGpL+UU$II3+9K^s7PZ%tu7PY6MYW$x6NX"v!s7MYu!xz6NY5OY7NY5NZ7NX6NXz{6MY7NY}7NY6NY}6NX6NY6MY6NY6NY7NX6NY⃧6NY6NY6NY|6NY6NY6NY6NY剿{ZjSp gq@y 7N[8Ra9Wh%a$c:]s?< 956{jiD\k=d }?q]w"+0)>;BPzsy葽7P[c,[u"dgqimIasBg|v?ky>l|-'1;An9GEJJLS\ZaeZ삡injhsp}ꌺ둸PRZtRNS "%),,/114CESU\^cflsvxy~xIDATxuXA5PN0QTnQ@Vօ;۝ytw{r044ZҤ۴z\U0nQ?K#,BǫǑI2t06j'hWde}&A"-Wc WY1 q±R.JvSl ޥre{B,AO*{1UE]UģKW{jzI3'~6ṳ.d,:d׃8{h٧po,'Do~&nq 2}Vܓ0bL景,.d L ̗ֈ- H-Un"Ʋlj_Bw CazCPAM_ x%; }Ƽq3uOUS0@ V ]@Z>`Ԙ<υEy8@<_= Y5sh7}E]X;D]̲4~,|t \]y 8D `y%]|3p2mO6BIc/zH2"S9CPT&pGePNI\~ѹ u39!s,\|s ٲC>`t~n:9|*R+#B|z,WQ\x!!H|A@+ P0,?,$,}޹+,@ȩLO&9i5OkS5}So0&5TzB4Bg#Z z*/I޼TVymܵ]P`((1nlVjE8";S+9I.UJ%\ 8Z(U z,`r|HdJZIENDB`awf-extended-4.1.0/data/icons/16x16/000077500000000000000000000000001517644610000167045ustar00rootroot00000000000000awf-extended-4.1.0/data/icons/16x16/apps/000077500000000000000000000000001517644610000176475ustar00rootroot00000000000000awf-extended-4.1.0/data/icons/16x16/apps/awf.png000066400000000000000000000006031517644610000211310ustar00rootroot00000000000000PNG  IHDR(-SPLTEGpL#y pR6OZ6NY7NY o6NY([&퀟?q@u0Xt )S4Exah|LtRNSg]\L~IDATx]0X*ήa{h ܌U,)BِYf gfJ4<X 0[D]vx}=]if]V `K$`x Ұ7IrBIENDB`awf-extended-4.1.0/data/icons/22x22/000077500000000000000000000000001517644610000166765ustar00rootroot00000000000000awf-extended-4.1.0/data/icons/22x22/apps/000077500000000000000000000000001517644610000176415ustar00rootroot00000000000000awf-extended-4.1.0/data/icons/22x22/apps/awf.png000066400000000000000000000011001517644610000211140ustar00rootroot00000000000000PNG  IHDRj PLTEGpL$u6NX5MYzB6NY6NY@w隺6NY6NY6NY)6NYkU;YnBZi@awl=e!lXs   5->KJf^lossxatRNS:;?@Dhjqyz8IDATxڍk[0qJ Ѐ$nj^^j,1EWoٳ 8 n83% r Z*ԥ8׭IENDB`awf-extended-4.1.0/data/icons/32x32/000077500000000000000000000000001517644610000167005ustar00rootroot00000000000000awf-extended-4.1.0/data/icons/32x32/apps/000077500000000000000000000000001517644610000176435ustar00rootroot00000000000000awf-extended-4.1.0/data/icons/32x32/apps/awf.png000066400000000000000000000012631517644610000211300ustar00rootroot00000000000000PNG  IHDR D;PLTEGpL6NY6NY6NY7LZ6NY5NZ6NY!owqՎI_~#v7NY6NY6NY6NY6NY6NY6NYmMa?@y;7N[?q8R`o\R")t4,>mstDqOi}e}7C]Ek)^}mG=us R]7 tRNSL%ḴI.KzAסϝjMDIDAT8˵rPDQea_(_REOTsj k抆jMkktYEV'^V @>2( ,`hzrVץG;yiX/w7:խzCL$s H2IF D@`8@Qdcz@r|^Dd3ۋWBC /{a67%j~qxތIENDB`awf-extended-4.1.0/data/icons/48x48/000077500000000000000000000000001517644610000167165ustar00rootroot00000000000000awf-extended-4.1.0/data/icons/48x48/apps/000077500000000000000000000000001517644610000176615ustar00rootroot00000000000000awf-extended-4.1.0/data/icons/48x48/apps/awf.png000066400000000000000000000020031517644610000211370ustar00rootroot00000000000000PNG  IHDR00` PLTEGpL@#tq6LW8MW7NY6OZ6M[8NX"wx y7NX7NZ5NY}7NZ6NY6NY6NYB6NY6NY6NY5NY6NY6NX6MY6NY 6NY6NY6NY6NY6NYnI5af7OZ7P[7P^f>ivx!t~Ct@yZt ? < 9 20!+400H2r/KQSBGGUUZcZ^beyh~plz}ZH9tRNS"#/2EGLNZbfgvwy} .YIDATxZ@ݡ;L(IRh&iKw'|qv~:8s(s[@(;m4K|$굟3:%IHuoEr;hJ@2(0;,~cn8@E'Y+յ*1Q<0(T+kV}[=*j[ Th.ddP<gk[hqt Ň arIENDB`awf-extended-4.1.0/data/icons/64x64/000077500000000000000000000000001517644610000167125ustar00rootroot00000000000000awf-extended-4.1.0/data/icons/64x64/apps/000077500000000000000000000000001517644610000176555ustar00rootroot00000000000000awf-extended-4.1.0/data/icons/64x64/apps/awf.png000066400000000000000000000024041517644610000211400ustar00rootroot00000000000000PNG  IHDR@@RPLTEGpL6NY6NY7NY7OX3PW6NY6NY6NY6NX6OY7NX6OY6LW5NY6NX6OY!z6NY7NY6MZ)u6NX6NYuϓ{~@рՋ 3!uu+Ձ6NY[4zLw5?<7P[W"@y;[o!7P^4?q=a{39VfAYg=ec}9@\) B璷#eBl i$}pd.Yq+\x*\z%a'^+\y3bpm pdC >tRNSuן#Xdb/<Z@?>W}vw%0偮 FH D#IDATXWA&wDEb;{6$"V`bGEEiv{/0;<<$e峦M)Ϙ )I6:[43FMG @w4x%Ĭ;y<Ps%-XR՝Ӡz>?}`% s,@ov̩[еcX4<J# ;jz9sl%p+cؾa  oΕ~l/~f>d_TU(st:R7,0']a@޾cϣ(S@!$6cœ\w8o^G|rxj$ ܺ}l7E@\. n+:$ T@ܵtX$ B"n=xJ@<{ڽO@l,|J/7o/|AM`\HX~T awf-extended-4.1.0/images/000077500000000000000000000000001517644610000153405ustar00rootroot00000000000000awf-extended-4.1.0/images/gtk2-menu.png000066400000000000000000001367161517644610000176750ustar00rootroot00000000000000PNG  IHDRcZPLTEGpL¶Ή\Hӌ]Iɹ[HocX˖bKݎ_JʹaK˿Ϳ̛̿߫dLdLZG_JiL?bKʜeM]IeM]E;ȹɾµ~ŵݙcLw_JڰmP^IF71ijڠfM̼ZD:XFifd`JeI=ǼXGeMhM,+*̾}ŹǸ#""ʻ;:90//('&sqnA@?UTSHFD]H444ìLJIù|zxYXV{\HmkicKĿúȟQOM_][M<4cL`I{UDyvsͧ磞йdb`ә{eY~rPBeOE6NYŮ{gr_d3ubr{mR*7hnXO,ZġGw#MkVβpBk1Q (bâl/22! Lկ*Z/-w:z(ʹϣE}mHEr!~VjwtRNS@f|IDATxmlSWǫra[[Zy i bP+Ա3&4]ej 2sZ!ЛPDM];jƕۊv,(^a+ɇ~@KUsޮ_B Z<9/7u8yD2<%̣F6nH$b8-nH$E"iz-(2ucM.DB7`LkQqG#}?qH$)l1uT4LYDQB?߼%K%כkދ $9i1⌜hYQt4wesdr^o߫(^Y{kBT1-1 V_eT X sB%pGZDxVx<jb)Y)7oR)VɤFe4P hՋJ[:7pu&W^L9.VDQyrHKgƼ^NVJyRcSuZf.>G~_rjlNs2>sB턲286)ܙ8-00uzT9bEjsB.9pT9sـd8#-u' OOE\c6ʕ+soIJb -Se1IvYWkS+J0 lvk*NSyX`ԹLulxCj!/_Nr<J9un.mnNqAt-F561?r5ޏ헔$;La K*G\m؍#`ԻU0 [Cx^R x %;-SEI^cyLKxC&u*ԙHD#-WrrȲbyRcELeՂyנrk(.: XekX1WhL}KI4$H1 >^`?tZ5 U`z)" 9DJl[v;#v᥺3zg5fA~5fp 7wF<Ƀ|&12ߏAij/ .aH+E`c)#7ڥꉂV|HOu&/Wb_}tc23@7{>g^ јBט[R ݠK*a k0yۍukH yjl 6z/ 4:]]E>WU|bUB{IE*ҟ47R*E,`L}i ** "&~ɼ\q}Gj"Ƞ4 f7|[qȒK>" VV|a1 Vb""39]c8}}u}B8XvD")T#F=&h%DR3Uh ^(z< {<A̰H$ƞTT_T 6zмBؓ5s0SFBypkfnbv꟝Z%gAcDb:[y($%Yr0‰@c>8ggn o{-=VDLմ6ʇ\:Fbߞ]=a6 15a{?MɣJt㛙̛i]PJKqʑء C;RcXjeXJg y- ޮ5k K_1vߴחR0q;Cw}y`23PVVy۟v~"#Ҩ^ @4هx_&RI1qvj`BE-p!Үmޝc9x|P@Wwyyׇat13P^~ 2˻I*sFNV]!fvz%jЃwqب$y`Ka+ ^_c& [fu}ZCP6pk}}JMo]"Xҭֻ.O2g>~+6У vc-Jg у2ރnjI.Q^i)#"m"kUIե4)ts_zK_j̎u׷Q"//Z{nYEh f=)pQNQ]{Nbz*&0Fw}s 887+.(Ja/ʹCh4FEnܝnLk3Eu}i;e 2uV$ .N7_L%h{¡!1|;`>qu위\zTWW@_x*&0F8eWI}f "^y?x[)쥙W5W+ߍ'Xa/sj#Zɖtb`hgE-nC浒G16oʜ>C-hQd ~ ǂ%3yQĨ1TUFeQ3*̂ +1sCjDhl=jf~.  [/H [4ƄF#th.Ј"&uD")OBPn1KjL"D],H i d=Ӓ)st4kd{ƶ\{ [PH$94}L Eʇ5uu:G")1`QϐMqSN=̡;EAa^pptv 4UKW#ۋ5fjj0:rm CaئvFVjX4?,V؆ n0;$ۋ;GcXGY(25yf%BbaLDFn-lR)S 0jSc'\m'%F")7%nB1ՍD"ѣ%(=ow|>% 7A% :4^H9obL͎YCiHx(A B*Z/kGCЬhjAFA`7qN}͉߭RDu5xƍQi+Ac Tc @T8^V5 %yL57vkl[6Иj>YNA%$Eu ͨ:"4|ȝ=[0q=K.Sa" L_h0}~BDYL^N1?u2/AB4F$ԴݻwnADv_eU/<^J1Xeei#ᷘvI;}0_$Ql s6ԉ}p$Ai$z:Q;'..U5w92j&`o ;/Tc+abŊM7޹s Y[NpzW%mA^#/v Ja6ׂ݃(mMwüV)ak@譄8 ;U)ǟjMC$:Aclr$&L`_B1y;-3 |>Vq|Y;/a8=LiK~J$~i Z[cu(ӽue 9#]%i@!&_ >܂(Y!`WvӢt)PFx/r:bVݸs*dh؍;:]YI >{zPJqƾ{}_>{=Y*:Hm_I?7(cV ްI/rDIDE:OnCܒ^Kk1*n& nꆂyk7tnW_a>d{I;?&4@,)Dccʣ3sJvIE֩'@zD{]6۱#O@;lIT\+/xrcGpI@ljzD}ou&If1D&L@;vlذj*~|`;s"xMs,dew@GQ԰3 Ǝe`ޞ"Y0 +HA4;N23oL&On'ysNuYPuS>Ωn|r,vΜ8Sh<Z32>: H v$ɇbW±p8v:s}r 82?t*V}'\!84.9r;(68 4,\Ƿ3'T돭_@)c) σas~p_~ 3up/2Rt| 1^CA۷o_b]Bn~ru MqSl]ITD~/;je:|VĥK2g@1cΩ Nq&)F%)cٺcqXbV]gp:)Dzۛf bݵkϭ; ɮMM ;Ct$E_lذUSlq!:ĸu۷}q:p,Xwl>UKb~"W Ϗ|9?BXNǦ$L+Ժ*l}c9^1p,;~~T`ٕA#dDzutTwfN~JVl+XCg2`c:Xo˵#XA'@wLǣcs8vҮ;P^]ۇ]u^:/I+kN$2cJ!3F 8gxE0fPs|d92}όTtZʏ+{'qL̢J# |S 6Cut^1LibVtvdI7˵F(+PhtLTZ)xz_LH "cd4K %Bh&-9;TZ9,XC"ttP~<6XÈP+(J+:fx tV\=X1@1zNJ+5::^"3zX02g9ΎYcMMvz[bV ed}wKLjq֢;;[0c#ݱ;;rN FwlQw;`t{Gc FwlQw;`t{Gc FwlQw;`t{Gc &KOݕ14dx~o&wmx\:ƱOT<öx;69`&++ۘXvȱ_Y X~c?~2s8'^$2]Jqس[gS{ .j8~|,1#(sj&Qk6(c ۓcdńdpǟ_hzS98cy`fX6d~d~O=tz(fo|]6IG;g,ǶsJXSd3*F)GBp-lEEr0Pr1l Yh1s th) sq7]}biپ9UTȱK[Ǹa,L٘el(%P. H B6*@GDS6[q̢96=taL[UXVLt{zhSy-+Xdט5ѭ۷ܹ'&"(cZ\=͡,=:TQ`w޻GZR! ޻JKy7"M,c{ #LdsoznMf<pt,ZKsV-pM6=R<;FvQUrCŇW6Ty U[(lIml%tQXb1VdˊCfᕛR+ 0l!LhqX0=1j!G0aU]x_s<͗ZZK+m.x! NXKdg4(Uσcc[IL1Kw<Σ;iھ[ĶP5%g1J, L/(:1J*B0+bG;hΉ=q&xh)iڡ꘥:WEſؙVbg+m.hFQbvcO{Kf94/ Y{X wTٰR7' l3g+dJG~|T bTo8*_&w/c8h8h4G5r9ZaE0.!Uj!] kuv#N?ɼs˟~?]խ~O7 M}3rtݴnq];toA&cЉ&Z1ĞƋ3%m8|$uGAΆt~!Kf1X S#.^qco3P5&vǖ{גaXHQJP'^^oXʌ~B25 WE\(h C’cb$a,aj2<2\7]^J(+12cꨉ)3jQ/+Kj^6 %1|%.?yCO.t\: u%L iV)Is)#,'6FEefH + !"SN{t4ʬMGQ&%qF{_f r ]ɳqˬJ 7&4G

,&0`L'"C"RHiA1&2{cU)F[R" 3@2""vvY?*NcW{A=( |P-LID b2گ7u3Vk- `_< a5ԛFBFMB ѩDq}p},!aSX$3Z⎅|;w!]\cmVk[MdvjqhϷ( J5+ #JNN.,d+O!yvo#fibt֖j`Gsf&ڡs,@Ha HR bL1пjM /gQ[fH&Ą 44?0)+P:"YN;kGz18a؁jJd*;X[{0XuK@siAܱ܅:q_;ݱ_Zz)@LMsJ1 $B-r:\/AQz¹_x4gH1∆LX% %Eu DB(8I1d\W`0YCx| (jO!LaфhP+hFiZ5c^|$wc &*ATK_EDqT C ^)1M-Q&lfEZfSt:+>}|D0DŽpS, W j*!0=`יBYf oo=ɓcBrt?~V0N|V+}5'QT%5.1Mn, tpHsxlFVOs'>w_*qR+( DB(ugs+Ws,#&͏| ;<;_Q{Fu/ l*ph;c։:5tIG&e_AYivM?j(EġnAzsۗR=oWql79>>cػ^ư861dHOT7obyRc\puAgn^īѦ՜6G|yܖ?7ױc9qSXk_hݱ%g;ǎ{؋7F{ KzY$n0lqXcL1u3(_VcOoc999nOr*/:|KZQ^b |kKKborF`bǣAo+wݡ/bˬ_|'MWұG߿87z1`7{*%g;|1Hem_Qbeyy!i|Hrkꪖg=pKFD Ο3i~51`.Xۄ86߾Bġ,cބJjD}su_tk"KXnʁ\ K -+zyedH9GǢ:mMݱtzbl1 _aK1AᅧcCm岏Ʌ›8uϜ31ϵ̊c~ fW/&WG=`"(TA HN'B;tcPlRAXpUdZH`G9HPxN@/?YTh4J8FyLjA@k׃ k>FD219ݤ9VRDŽdZFsncxϢ:#9sxljs@ 2=9m<h8T(qպf%-hFaSJ7:&$(;لe~It!WȩW-ɏuPу͖11x1Æw1WctCwlqH3r<Č)Ѝf|2(YF Îtԑ j u3Ac7l!?Bu/uEW~H<+5N-lb6vniCJ6H*mmMPR @-3MferLy`bi&FUU$Z~-Gg4P[)R>S,;v,MLjedqxioH6Hln H>VƎ_vjHc|TLK1mĴ4tjU6kGNvUι@ asx$p+^@  LDy؄DZT}e^VckRz40@u -:ӥEh!`H!f15+=Ze)V0iy$ŗayMWǎKñ=ɗVD=cŅJiO Ћ5ɤ %#t8 M֤O5XQHY p3v0vl: X dv4XmC,]ZpC*]`t9y8m>cO!ݬ*RcZ5Vk̀ȱ5)ɁGVl\#;b"VD$X&~MĢ{p_T kE.ULjf4,t* 7B< Pj< =wN#q88՛/\s FcP%"(ޏGXBG%r ZA.C.xൈ4mǘg[aSYȜ"bjaw%{ı$ߛcǘcyX{S tf3-8cvBS һpt*lw@֚۱}X Nmw:cVKXE߇9A|q o"&ǶL)'M~{uro坝J /NǚmYLف !(&w~pD <~$Tmm߱.hM8۴vo*;1[ctlSqLR[ ˮ+]8~cD!(88AmD|KR.Z C+l ir9sr"|{0e{䶐z|1|lEXlՐIDZ)Ʊ"^M\dPtyf~!3]&ecۡ "=h"ۈQH5)؂KEeYL#^PRL(hJ4$ JhsԌK$>ۃc[Ǧ9s;kWu n8|fO6k@'w>IڲqW.xqX>)}sס;!;'=䱯),ZY8vuUqL)ȱ;!uꫨ?uH>Vt<8hsW}YaͱmoL=\C9bO.Y=rm߶šӱC7 cSz?Vޏ M5:p"S#~l6gE-:ܧ18oB1UHCFGCbYMsH_FYMnk{6ƥ6o|lá?1^75C[Mƙ%Pp;}-MsTk֙4Z.MNG0,#{uYǂ3f{v;6-mO5 Yrզ&ucrpz{ıccpҨDt^ȽqtcE?~Ǧ *x֋c-OpLǂ#ߏ F>ǜ1V0"rV cy;6m;v J|1!>0|Y| %=o=ŽR̒7gjoXLؘq%_lpwLM~,.=~Xܠ\C'xdKVv&'ؤlwǔOǎ,_/yEO88FID~1@󐐸I3-[>`*?}ߏͅン7~DYc}1W~Im?S,ZrB..mj8h9E~FyR:u;6w{&cE ߼y>l7qX9=&'6ͺc@5s4᛿$&}IAqJIEt G4c8uh1u_L+s6o1%;|5=8_Fqsz`?G7n>6iֈm Vl Yw/G7NDD(TA1r> q,:эGM|0YXQxcũֻd7ZJ3DcZ;VM?}Og֑KgEpl{%:uh|^NZܝ&Mí1gnZ:8yȱIJgsΓgU7gvς1|ű/NǎF#HH˙e"[&/7k#=pD TgQ&spMe*#NǬ9؍"2A瀒5boo\d@2Ѭw;8JJup A k>1]I9~yjS1Ǧy?K=Qm8U=6(@ui#p.v|ձȱ~r fst3lSNьɎ"M2_ +%џ!( TfMT>4 I؁{cİ 9FVR@&k?y- gE99q"c)JlD% N7_nV߽hCR .=@NPNb'+|1d9zLթs]Ď}p{Xe~փ6cz!$~߸c5ןp %b>s8V%6$ 6o3ƾ} ?!-8p؅+w $%z'+ AkdX|Wedck%+ WTB1VR`}&ۻ|9V<# \8pqOe%6*Czov_owPj^55 vNJ쩥TՋ"&ѣj ET0\W~a~b>tFB:o?YW|,,%QKkOVoUD!Qll>K3~$"$p-AOD+? )D[coz^vxZaz#WtǺ׏<]͒Rcnͧ#g{*SըLU b-7k㘔2U|#~(q+":WQ\f :ߏ#ޏ^"[6x\޻E|b8l-7uOJ#'lǔǾ8&ṓDu$Tk߱K6J 񝇄ed%k]XqZ_ X'F NI#eO13Kt©8~ ja|H ylX8uTKLȱ?1c2w{Dc  ?u[f9dyp&Xp]߱gcBpZekMGEB"Iʜa:!c$tluR®/imzHYnα3˂[l8NJƌ"91n> k{KTW2cعp$E 2 Z8sN0/y:Q/H}@ΪyX`GSGp0' cYey?6RH M>=!54wnmr1Bf52\4v/FoZՊDl@vhޑ9ܑ議7v 8D|B7ȏ69 ,iu7Ǿw87.:1eΣ}G5қcฉ+Eu56NX ;~i\2Ǔvln4RP2)i+ѐ0|>x(AQ3V/$с8[~A\O<8vx5>{5&Ǫcn#/[X0Bp'Yf?1VSߩ;ε;پa&kw&{7S:ā# gܱY^aѫcheѐ3 ٙ>'/}.7BWJQ*eoy{p<Ǫ[/_}u£c$scpsR1BM/91c[͎mfi 2L < wEsDdΝ ;78ifرY^Pһc~G`횩b(3^2GnVKh)XSЮ]ñW1 ŵČXEݷΨ4HGZL q/Ž- gm$&Sɫ00Ƕ[(f ppphH0i.˨?kmm\]{w w ULffɐ1Ǿ.5s>ׯ?I <{63ҰA411QƁ4FY4|ۘf=QFsZ˱/Ν#)F:&-};f+ MsTk֙4Z.MNG0,#{uYKJ>fDދ=\ ebhN~ǪK(g!YWc_?(Mtih:lH^$7UJPF`zaH\0!rl3HVIJFߎ7rl[¤~LN8>>}xcN5"w, Ů>Qb-w,\GTj;#c4t:Qh_=}ڍ5(ͭ+{tԱ-G4F9S2 g$G84cI1B|9GZxZ)VR615śc-l8&cGG#sc7r7)>dIU.Ω}cќ2ᗌ:8o5أr~1o"JSu#:3]b޹+Ȱ~bGP !T Ʊck#Iظq x7@+DŽԫ`"b^QἤM0KbK[>]o a>U73~ǦpQɲа#Z 2MĨTDT:Tz|+@@J~g?`ǎeRck#I% vN1X\zBA@ÉN4KplnQ{p4qlUU11ø_ -O9ߏ~٩1bЧ1>@HbZrej:*z{ʦzMjC0Uι@\hHap|T!KpCB*X$S}*cBxe2B_1  j1<~ݲBN-zZr|"y$hD ZhѢf,_PTW ,di Gq$Mr4 jVeDRB:`_A4J)A`?G(ڪQ{!yrzH[]R"T̮HgNLg`SX8pL'+<NSc/n<96ɐ"Z'U0e'vGqm(JdwU*_f?TŦƦ㕾3==oق-[:r,2L=[~^T{/&#.C6D# NhaxP)0+Zpǂ1Wteֱ_!YdMߪ7 F[ouɄI'}ދ{9]+9UPHo_Cb/b~YR œ\D upS96˯29va~yRvvc8qm"^. ]nac[xch$v):<E~_H67< ,Чnim<;@?OnKDfЃf^x؛c,s쵀k:W >V"^T: cD~{nj˦7:5w -Á٤{ NKm.9sEX?9XM⻕z,fM±_ wL~&搴5wczyc1;$hOn)2dݷ~͊?7V8C*ocVH[b2cD28&~@HT|7+qy1XFux\Ǣy<87"c'c*sgΜ˔٧_iZBJUp=۲ Ǩd"v?nZwLgɓPԈc](e9c)k#'+bL+OecƦ|ЕcJ+ hplh2αѰ65|7B㵮il/ڤ1q1ü4c/:Fsxr欽7}ɜՌVZVr\\a@cMyffmRcRZn5ԂTrTչJ?I'cp\7.ۊ~nFxŞ5+<|Hn5QSЀ\%ßy2 "s;'KToԚF‹*8oR+2l ױ)zMBu;/I%'AqotEE8c))1_!XX3oG dmZS)γߪ)ql8GǤ96$ϊc;kbx\qw+ChoNInn!C5F2}=ŬWB;r䩦AcScSrkzt"^c!mC?UhHԱ`0WamiZ-s!oz}\"ZFz/u =E, u,{^9V1v(WPx[Ha cY'Au#uB }̳x[g874lB1OnA79EܿW7~ƱIxvCڱ@1R1x-? c=O8=m.LjF}MjH79F㎥{(;c:ne%c,x{A w5c文cM# N7@0_qvo&UWD9WӋ<@4l*! o $ԇceI\k0F:cΘPwC\z1܀4zcXڷ1bHzҢhxF5L{X>x&feucf1hou.T/k[]8Fc$X3d3X#sQf$UC?ZǕQ% ,FR|S0 }IҴVTRFֺ~U xo~z.~1^~e׎֟h.cjp옞%-ܨ:Dcec|r6' L>r]hW,p"tSB;2OTeC&8& k,1 d9!Pٻr,mҡ5Ԏs~|TTG{fzSxTsTڦhҭc<&8 ~WM7U-w1 Sv:9Ӱ+M[;\v~W_}u9q,&T3LSs.cvXȇb4zbbS(y47Y13<8c㒡T11>b_gıu_C$drdX16t҉pakhUe󷆆αjbCVâz}m2Ρ+)]u"9y]Cfu"OKx̱Qkkl]j1#T1T-+hԕ,RV,ر]H8v]@tǤا7 7?p5>?1xyWuE0},Wj$h,~,XO)T(0$k*}E]Jh8jœc rg#$.|fG^pWg9}916؜GĢi9 xHh\K_H}W=u<4Z&4sx1Y٥%y#t\f1ld\BޱA߀(YuKb0Lqoxݖnנp3XcoL3qi1?4돱"shBd<$uM u4l8m11&816y=,+P-PXkC1-q_p:rjo>K,c5_ǂ)_ 66yŷ+j1H:83WT QG kA/$,v-h z=h8B=c*ht!Xssr|55S$K=얅#ݭqXb0Le]Ǥ7*Nh:Y,; &.{h#ı0sM9Ĺk74LE<2Rw2Wv*A1(FmCS-pL  ocCaC;W{7nmqedtruzh=<s(Ivɜ|[zK[S"(FID[ { r [{[ w,ASt1`k8"1 ѡEqsRsJ@?W +tR-pXum$Z41!=q=+;(zоU2~Z C_dF( LMaԱzE7:!ZvZ W-u._љp,`rQNUTW9)5e1ɒ}n8h&9*Qw}âOyo1P8 VXt7Z^ǢAu|<" !ckF*V|سjQt!TZ]81ɮH:<9A;e^~1PiiaV0~ݼ"?XKrB[(,2bpwSNfc$T0h|P,DrY{9Iuͭ*Yi3uLTLL0-`/n=h[2kj3Ŷ!_&.}*ٸk2+iw[jFfncuL*vx.Un1c|W%FɛmOUuMTϚ.]ּbÕU'K/h_Hc>"Jē<{XN:۹l; d%ei2ii@~+ Q8ZRwʺ+JKq4zkhÆ ؔ6V>q263w}Clb!Xs'CNmܥ8CĊTR[Nr8rQeY۷]qleiS\z$.>*qjÐDF!\L8L "Oп;cd-wMwkmuM>屢DGkڱExű:vtf'22hqqjjq*K2,S)VF;ŬhUjU e4M͢bv6ׁoײc7LOD#.5אXxyB(~l/T >0]aBd88ޡe 2{Iم5}7=ZFɔV1p8`t,]XD-tw#;/d()8:6Z[oQo>;dw[7^.ʄ }A>EECf2dP6nTS5V9 /b#xűg|88.9 q$8MiB4#Ai.AzVT`lA!7@)@@s A%T}k=3c6]k'ٝuJG;}r`79x gfa-.A^~p WcxNM((,z>F/tJ8n"K!c!dQ:&ZَҔy] 190;flUDr"՛ťg~V bO1{Nȇb.pƁ073!}&O2Vc+ڼԵՅ:x!"Acʐ5frBvVcϾ1KIu Ƨ(" *cCV;W; +$c Z1KIucL.M#ǠnEsLNLĒE} ұZ*,%P:(Nz-hc mB1QLXpBQc&cm^@/*PZ_J7bfkH1 ké1K#똣NhJov tw1mԻX`S8[9fc(&%"DŽH84@5F9+ʍfN1:66p0ϘiBxؘc"@2e.qs3ZbcBkɸJgUs?ipnԎqsӊSx}x$\1x2j/uv^6}=SлcDŽ|+֪knzϠ_?rH18Stpܵ%@; _EKu NID?Cz Gvk{珉KKE 1CUmK܎%K \O|U Ŏ~%0W|wO0<^^sL:unY/Kcq L#p"c'a^-"t I$ Ώ OZQhq \q(k>5w....G?ɩ?>9u .1tl̙~ !ͱcb B?";fOyÝǮ@%+䂌.NU-`s!!PS|Kmxƭٸi ,α/Yџ8j)!<'$ȉ2 qloNcG,CeXo9lk͸#%sl2JT樬tXPX^j9Kؑ ysi;\ʆ=)0xen #`S8qv,BMu,")cIYf4*LYE57iP5"!ͱ#yvZta_'J~a${>ǶdVp]u09V5)+7 a y:XQSZWͱWNǦ%XKNNYoԅj4W ʐ@1ͱC1(v(q̶qbх c[˒96c챜Z4(7V98.Xk%PLs,1o6ɴ"c;:l>D8FvN_hȼi j6;c\i]2a*jJVruu-s:h`-8RqPMcZ4ǎ c3 뙠X X__m~᥯[F_dDcԈ6p[c-*=-Ť'1l``Il7 :j$~.CǠ"ccc*Fg[cfE>5Ԍ܎%"Jc\ /K1@sLh pp&ЍFd 0昚p),^xM]"l|g 19&* \RȒ,d'ΓNgGioA{c1FiL4γt^Ra1ňFsLdƟ0ԏ!l$sji:E0%Yؖ{Iq'u쬹Ɍ(p|v3優1f/e؊;ft>@3Xcf$3cr4?x` ^ψd=dY_[[SF}:Vǎ8Y̵;c fO5ǢEy_8x1tB *+VL Xok=lbnguhqaf~dNoƲGRj}pB˘c>DTe*NF-&F._(F C a@>^žWvVl/7ݡkhxׯ lOHbίR0l!G򷏩cp}#WC w~ XtZE5|аX`H"˽__|,'BUX._*!<8v 2x\s"+SQd&cbjt>dDb8Q O@,54?ϫ狟7hŸ-" 똈oϬepȟ6c[w+uL`כL/_ PǀHjZctCH[Wcul{:yNWIW oaݠMUH]*+!lerٸA"]Ԯz$"ä?%Ә}rh`<$8&c"k,Rq?65w==UnШp&)a&/,.B:}21jQ$4̩kO߀ҏqLd78cDZMmk|{.ȭp\7hTBU8Oc~й gЊyg}'%cs+++ξ>kIllt:3$cj/sEX֟|r: [ y7w%T3DKxd!1PV4:Է$DS V]|7$c"k/ ؜18ƚ~]cphyɤ߃N1Uhg̱w?ie[ɯqSH8o~ h6ֽ"akyt|I3'aPc͆c3rX͞k9AHefTX=HeLeLeRSSTTTj+11JeLeLeRSSTTTj+11jUVYmcY^)RSSc CW`z_ur}-κTX2f\.䖺c9pEؔM,xe:.Fblë [XU2]:bx;f .Obl>o+D>\ғ#eQɶSM w}zj:W+~M斒QaycmȆ4 Ylg>֖)ەmjJVCr5WgDr}bMT̷H 4 MMZ=? ;6k_  _0ג=ಓ1=cmwŬ`MbUY"% .0ċOፇbH],)cuzl͛3EN6k<m`=y3Sc K·>޷d8MD֋m('㴈,d7h@ƪ L]BϔQV2333n[Ǎq#2d_fmyvs hUX>K&+ .]AY1ڔYz#za渆r70QDHA ` |3|X%@HB[ '*/\#26?8:noq9dlxևvN7wSd,6 vyN1S3fӚP ͦUpcp?'cMٮ9接ܽr1MEs4|PD)&x _19HKaVj8ƭ-έp(^aK$g`X@.ׄs&aF:yX"sEĴĘr޳(uE/*c*c2 j^ ~Xv٩IryG '[6+F3ԵaIj3`Ѷ1W5Ud?qբ3vqHf} ðueKFeZ#pEd$! b0OAX8ioQ\y[ĩ4 f;<]RZ"cz2 h xU);¾Z-"ƾ3%E9TKb *$@ K6%]=&M tjK2v"2O1%|JC5 iF_Tp"d1iA}/me1'J cN*2)s30)хKEr}j*;en2\CRч"YpN |\yvLKWIW-t詆{EdL~r0[z+]\KNƘ2Hc-X- tMҶz!d[-zW^ fEe7~kIR&z+jjD0RC@/1Č5=0v? s_"cZD x{fSGmaK-A 2vDy腙WQ'`NluqAcwfuwtDg:݂NGfÙ?M^< O|x47 x:3'$_^ TCl-!SP)~;Je?)ԩ0rwH(Rct tD7O= ϟO? ?o~r4M=יnl~–sݝi_-?N<[=k+1@,m oZa?[<y]CkjwO^O&_P/u_h\C`?NnN9h `Njt_YscVc_U2u#bRsX|!M~ qe,7 T:uN7}gK^H}KeLe/\]Z^elRS+e,uUXr.'c]z1T]*חK2cNƜTu͘GZOkCTd+˯cH"cQ")і ycL>,=ıK.#cjC>\µ-eQɶSMsX]Q,AF)51膊y즦v[0FTzKRa945Bft3Bf ̙_)Zڳ=< jʘLDYsÄῘΩ"8`_'f)c0]{.c$\NUy* +rP&1cb j+  A'T4a81sch/LQ_fc=Ek1Y{gqL&c̰K2&~kMnA7kՌ1ϝ141v0Fjm/*(@ҏ <&gzi)PI:-`qlÉ-„ÝFx_~p2Sx_ c{M$c g:[HXa B @u1)tjP9{( 5OR[wFh,h$dq-dB#H<_xze6~p-fyE~)swۿI`LR#9A1:[Vd) l gww6ҦP&YPW F = TFH Q.`E #-P騅,ϳo~c$~s;Y7kGiiV,d?e J g7b/g50YBdb8 0FE /=% )([ sBQ.].[3o1֎o3j Jp07bT@V84?c$ӊe!r;GΐNT@5!7ox cY0r2hx!5xnD$1I߬쒁~w9\XF c~ @f,a ^tBaMLi T" WwCtf`'0uF3W7)ƪ.oó--Z+gw5ؐm^Hg{02ձ1F3SaƫzuF:!ѱ0~6 l'( SJ`Z cM+V~V%bbdc;?<3 }Wi^~x:xvV7Z$q+}?Qo X)ՑJek׉7E0z) G-̌դ6lv~7mb,dbg0줶pXQkn&ߴXq}s8L?עȉnk;7Hq:1Vg><2pĝ"Ʊ7/^1"XM*@wa9@qv 1f;lbFG(bW8@#|Cf%m]+^6.\ofl%qI\:M$/'!P G*tՒ&RiI拔Eu !1YniYY]1{i+3R $7ũOl4 cG-atNo*}'XKb/̘N C!E"1eG:CVk|B\uǘ{Jq.R4N-J:*ꑪvm{prIfL[̘$f%ĄXD[MFK#藖8Jt-2|j=3抽17c^RqlcG˵)J4c~*hƀ-S.%6UzgLB~LfI|~BqR5D%ٌdzeb+7c{w݇(۷S9{1 )nfdcܔ+Ft^ꑪ)ݏ{l9ҭ+j=Xw+:VH@v!yv ߏ\1n1+vZʌq HՔ+{&=o ~'8tuk;wف?G|ً%tGPEwcR=FaN xQ?.[g/pm)z.Zm2ؘe{.*Sr0mG,Ȕ׊*Tmyj(ZaLg#UTUV03TJ3T5ΪU+͘RV3+!͘RcL=0m~aؚS2gYjҌY1Ҍiiw& cӝm :᠔3-X1WDj 81Tj#͘Ryh1-Rzb^_Wѽ<) FW3ViƔ;GtL1sRz&*-~h{181KUܯV,4cJ坣B:&̟m8(LTZX{1DF'Df̼6?cV4cJ坣cʶJ/,8(q g1&D,O+bv_Zk.fau5GRjg_+F*R@W1$c4,ַ=1~!` v⯬g=>/4cMJ3D Vq4&yiqq"rrv'nGn^r5dh=gE3V,j؝!MNކhx|z_EkdXd򮳻mru7?@W;cXu_}WGY$nXm؋14F냱RQKo_ccjmZ>ǎ v00Nӑ)>"Ϊ7vӒ{k/?X綾kAn<վz8o\1׵89K3X+`U3=[mUkVgcژM34c6۝To52כfWi>mїOg|52כfWgR-5cR~󨍹4ccJ,,kXØ6zӌ*e)x)s/0Vsi|U2fc%KgژM3dƄ'){4z &$N Gє1爥(96zӌ*1cnM%Onbp>Mcv=J8s\o1_%3L)]!Cwkw\h2Vobkc7͘CLi<»5;(/<~~CL40]lO'X:-NѪZfLdƜLh"MIqG@4cefLdƜLh"MIqG@4cefLh֞4cJ=Z1=Z1kŊJ34cJҌ+͘f_gleIJ=Tf$YjfL36-*B65cH3TK Ȫqk1&ME%O΋߼1 `,+]Inm,[Rb8p:n{ zF=ʹu63gϜ:Wt1G;;7f?c=sp#7%c\eb/9~v6W~e+AvٱB;<"d"cWo޼*_Fo:sq 萝e121fDr?-<1mG[`##mc 9adL%4d&c 5h-M"ZeB,0f%8%|C4e ̓G@F8tSIƸDpw&p3&zlĽF liM*c#@=k0/uo,9wt+YĄpFdq1/1Xm`}cs2,~͌a7ELn萬p121%1f1\I1Smc~dٳ"XWl`6ZbU,bB8tN2U&p$2 ƺ"\ ͘PV~p]}Yc uo8y3ch mX pkl8\;Wnsc f+GKXLQ\9߶2mxGc,(Sw0M)Y$c\3v#1!=rw}zt1&$c\%ވIƜ$F$[1oD%*F$[1oD%*F$[1oD%*F$[1oD%*F$[1oD >﫹=g4eF'[*d__Sx0ě IƸJYb,7k\n=`-aL=s$*Fd1zСƋ59qx#Ș U`Z556P.5Ave]_N椡zOj1_TaCFPA38^f^d}Nq$c\%ވ26p.iK0fr{J,XM`&dZJᲆfwy{؀oH2Uc ] p:R1%eȟ)%nHQ)z20؋⯸H2UZ p \Bce^=:+v5LBsQ4<&)ވ,?M^&4է(c z!@eL1LU7W@2{QyL+RYd2S*z A͗Ǎ1_N+kp?X-)lcR:Z/yꅭuEaHFdDL + -5E]]ߝxR15%Y%|czW&f {mc^ c۝H̹CsHГKY}bxsv3 |ǬK[E_7"R2xnWx#DDddoIƸJIddoIƸJIddoIƸJIGeLS c>EIISȘ&c$形r}ҹ$cR^߄&s~nK*~#כdL;ojY{3Y71rIƤl`l ܰr2rM2&ec7ܹsB7ZoBzI"0h-X~"כdLcd[e+c06BEΩw=͕ۿRVKZ=.}b$c#~5s:gErf?w"qglin쯯˕Bn G kNN2wn%D~J=& ! ðY\j0<@WXc>wI+ۥFeb*J'ǚ.܈RH_Wh4zl,58h#%H@3°YspiL_!عv*}ڑ@#Ad?c/ g~<~]`d {I[`wUX.f|z]Qa+<6UkylTMqhcz:4zP0C"]` M媻Qɘ›O۹T.?flgZɞ(Rxucd o& 3Ҫ.01!W+."=46XV՛qF,o2MEa*Ic\;Щkd(1WMIx369:*u<ۃaa{AbbLGng+FI3 Nh9:U&O_*!iR|C 0Uv:|Ҏ#ΘJ;Z)w36;>ž-iy11{TA6Ku--\%Ԫ}0FKN9qB=jFdGeSa/G4mu[gv&͑ "7V xZ/ӻ<vZRRL(sfIcpL"Ν-ٖoW7֋t.C.I18cg~co@7^Lm ʆj (cHcpL"MMM3e)r,Xoj$ QP‰27G*c:8&8e-c~8z1ݮtʆ"N9RᾕnQ۱~Kn&"M|S4}DVZ@8^'͑ u X7V3̀,47^LtʩELpN%1췠fc D|bFol8N%pL>nSᰎ18V18njp  18nj18f,p 1ccp  cpXcq cz8:tq \O cpXc3818nj18f,p 1c9XS{ӏC _j꜆a昧? I1c=]N˰$xiw,G:g%1=D{Z{*9.cD*9SŒDp!|+X[ ų6)ؾ"f' JG.G?q){@WɡiM+zN_e|gX4K#PLS7m8t]ɲqq(zӪeyO*2rtPѢcbtG\cJ=J3bj(=ukzӪeyO*tyt6 +${H(W䦨ˏc@WgЋ9"hgǚ4iƲl:FlؐB\لrcp ؑnPVUˊU=(_s8v8ǀ181`,pUcX08ǀr"3C ױ/LBʫuٱ'T"uG]9st%j#Lj8c +kT՝22ut=Oc'}Hss\=|:?q,9:Ϗ&kͱ|li=9wcPXϱk?oom0)zV47Weo&KBQՐ1Q1FXA Hr9Zc;ʎM2.Mլ̱XbF똨؈i mP:h<(Z"$_@o5hw8dkܰe$Vx{.^$>Cg+86B.Qrm֚c!1Sޔ11ؤNXZo;EdAn~z [ݛ~~b5;T$Yxni}!? jg{kf;Yqpk=11ᶆTQ쭕's{[[{g1rzP3FcpLjֱ`E&W{*xoCJ.*5,WV'WcS-Qf7vxMXsǯlp%UJ+=[cR9^YXgn-˗/]އI}]cP\[x_"3CX͓d9cSR3ePĄX3~t njcH?smQ&)f:2(4O%:T\B*)NcRX+DlTc)2x,6 rPTj䵭]gg>0qVZ痏7y1cbTXSĨXczc p,^c%slL>6~-A7k/%է錏!+џ>蕅T^VLmw˔cfDŽɎ Id= #rl cWtH9}1<91黏CpWcc܎=C+{vcޮ<ְ;| hl[c :몾!*cW43P491bmiexXc 9gwl@+b 8f<[m;57)h1kX&ỵou'cB,wȱUoyhcBc[Zy阔L=Dc~jJcpL7:&c49V~<@Xa: 5sylyMWd@xv_\W}Ş+:YmwIdž,9&'^W{=tgwO~9C8f9sMi_0zy;xG"L|01X#ms/egО QN^.K- qOt uU2ȱ)aHYZA u\N\U(hl?7u pȱo}L1y.RIs6DZw>&<86~1i}\Q8&;&-!5s96i(DQJq]232wn WlH5 yϳ۸O%$pW]-x82϶g׆^#ǿ1yy ^9 mhRevl10ih1SI5 'TʎTP @-p 1P @-p 1PKDZgcakE

〇c)c91'vbbLlgֺFDFzK3 1g?Cc](V5esmˑsh>.X( q,G5j^rhX?&Kvl\$ZQXcHnY,Pϊ̽ڑ`JifdZD:eM_IXF;\IǸݟfMgMǼ^I|ʿYGXF/..ʻVUS988IHF332䊉"!!ŹPNL¸)((ɥCB@troomj\ZX%%$؄ýba_}{xʽ>=<++*dLM<4ywuľ{{UDeI7ⱲzdZrQAɿ润fL6NYxdc2p\|ua|unnYN8hġhTƩ@#NͲ/^(UCtp}lSQ o/P}ݟ 1ر e00[1x/>DC&XVΙ--)#}3⤡!,ǾtRNS@fIDATxmlW+:tEŹ%fpKUaPT-ue$$JPJvbQت[ҸiLm)G'a(*X?}1@Ǟ9g9̱;Ox\ W(w1}B1ئMNBQ ߂{vMbLB(Je$f!R9˨%721QP(&)3_=|tZB 1f }vўRM~s7N(/7{;*t(ek΂;uvrxA>uԣ)iϚ-,bF+2XĬAU= 9Jwҟ}z0nEt((-Vw $fQ$' aS=LE$3tuRE ZӱZw;}8޻Q?9fC.㷄c6E)3 q)EhkE-9MdQMÅґ%܁ґcDË'A$n OEpaOyLW -bvObcivn뉟-1aٗהcާ&xm7)K',}EYr A1 "&JlMVRm%#k/;įxf>_mq0v*Ŧux3X-r9Z ؞&øW;g ߯U|xb& gvZr̎Yk+~j&i3l]ƒ9$cvAn~+&[YgU(x{,xgU)XS(e,ӾP(1~P( y:υ(iH]9M~P( н=ys¸*/ P:cBQn3:q3v"RBXS(nXyO푐ZCNۖ@QؓsC \%pUIE TǞDq{}ǽl4uo brpe"Ь:BcPvdOc*3"1#fkcfW%vk究sڽG]qla"67 ;٨&.]ʱ;f>ݻ~po1fPTA0x׎`r[pȤ#OcoW//K~o^vu&N9dNٷ ^ٷEAtpgg8$kfus=l_E tvPrw `Ũ騺cNpg.?V(0ھq%HM=gؐ/X-([̳'_}xyYrcs2xoi^! B}0]N o QrYӸ:.vk NϋQEۛQuܘZu؃ԃ[MBڊTOՏmpҥű2}SV_Vu"++.Z,vw8X%U7o;E&Gv %dus5[(Ğ;vjbݢ8 hY۬mwkg\NS%\x5{>.QŢ1P$Ll3rM_Nh=9Ǡ-n#ұj}C&k?{Ew(^^ܰ\;۫' bIxA/xqU;{ut|g=9B4UhF{{OﮮuMV-܎ 6W_^Y32fSs(U2YJ-4P  Bұs8>xxyY^|vh1\}{ َ)w =;?!*z~PPSݧ/EaۛQѱJt=WqyWi<=+7n\9` `WBh:tlb^X{^k2Z.x¶  RPmż¢{-[m6?X&=s4-@OB[/4Kcc#g{`e|0s@T S `ZBq[2I C;HP`q* nn9U"B1T;!~920* BQn/֭2-B:#b<?T!_1ct QƱ_9LEXn4c+#AmVjğv\_<1>4CU1xqE:nYM3a=*Kx!||1-ĖrN9cb$msǸYsBxn⃯6LX(ehLͰPW%,Vs7/#͵s0Wbtoaw B5R3X_ 6l?0K(31СcdSGCOV5N Oa6\}&(cVF8ql`-L´ vflɱ'oJ( AP13Deę)F !rK/M9AŬʵ^hR10G~px'r`'Lz^@9|,Nqҙa|s1"c°Ϭ^ .elDZ؇Ivd Fؠ?0ׄ CC fL,?X'1lt:iະn򱪆]-HۢmKC)\1fٲu.1؆&9lYµ3\X8U4N8KTKa͜үb}D>Bb5"RԂIWa61py Ncڟ 7[~Sb~;1_^ήv9^_996l`m$.@f&7<- 55(4ڌU5v-#ء\(v;0 T(z9zґB!m$0ؿ/ڴ0;6S2OFź w y8W+,{iE%KS8L%4гRSfILdv[Pz ژ)qRPh€C0{MA/5؟(s̭t2ɘbw}#߼vjr /`F4<-im+ Z1d &ԜlAͅL98 M6Br+"lٲ&qL6<ϓnoY[LՋ7,^|n,6":V[駇iZ걩v{i Er K-ьXN'@d$7_-_B~%0C!RJMo09m:fW]غE;Uĕbrբp),go\pۍJQYEsF)Z[U"@(O:&i^Qo/Ic < KhSZ2+BY$س;U(7(ٮҊ-/75 $|}D1bkl2&(ܸHB@slI!J+UTiK9Su^^mgax7cɦQl_|Y"s33)t ʝL!tyEAcȷdV̾tP*s^RދMxرp,KY:~oBuc% S,޸6nẕ;/Fi PXe,3.>RZVtL߼;۠(t/&iH4 HMMJʋU&@Aɍni$,x `J]7&T>ݪjw?֖nݺU<}}q>o=r:eғd_?[QN@vo+8vr r,a󎘸PR>/vsX1+S9LmoOձ^:"O^cO?bÍ`5ǞO,lҭdQ'T!r剨xGWHd9\X1c uƼ|}i|Nfᛆɩ'&gqtӤ`&8VWL6-.BcWCc^ncu4SgS%$Ya:ITߨ>Ye$;ƒ]=ߏ=8;ujm~rsI$l+MfJNHĤR27ɱ XQ7u~cSu[224vܒ陓8暝5rieOݖ8Ȳ-uNt٩Cܪ5XplsD|n W.jV%BvcHdd$YFn޼jbc rlv甂K~{PI&RY)A:ͱ8]VÃcVeȶ\D"X5*uu+^d"gz$HcOc * {݄_cK ːT`rڶ}{U:uZxbcr.]].L-fsKIHBӮ SY /Py<0ֶ 鯌u㹦}VEIlȺ06dti'-ÎFpdfrIh&/cC&fCPlnӵ4ZFqK>űfۆ+&sk;[w]^Ǥ*%ppV5amc3J+ uC-%7vF>; ԐqUcl[ \iV ^EP7\q5Xcؠ(Y*\(+x1Ȼc±dKj3.!TCqWĆFʵgV=lg<پcU58hl~隫cbCDϐѵ]Khݱͱ$(Bs,H 3{ޑ HsLszG>`t,`h)}Fcc;ii=[Hg99l#A`س}FcOXr{d$#z#39e"/Ď_dcy`ssAZ{r,n/n}g7?]4<ӣG?{bBȱR;$ QW <;ŭuˁmnu[?;oKDļP+1yٷf>fUO#SNd-VYjM/ LD=m'j{gܱ<>!% "㠭6(MbJ]aN i {B+<:>{SQNұ˅B0A%nEbAeqbnJfX䘽Z`>aGdQP ;fi0zq8gmUȥv,ЧudXddH.E$BcjF<`]U A7JdJCگJY,؉ˎ IܻwϮ 5g".+p5k9Z $ڥrDzR+u\S(g&'xgQԩsC>1Y/NɄc:]3udos_hƆ`,{A ~ >vFiOAD渺E/@屴"|FM1P?Ejͽ|tQQ!AJdj6KXE0#+A2,EnE.Fqaucl]068&OwGࣃRpvR_ѿ~~c+fg9 T?9X{((L;` l+uA{EV8 8VXt-S$#iM`dH2B-dXEJc( /+EƊz)vZ47g^'.=!6zpRAwk]dVv?ZƲtYc1poFQv:a"[X2&U1aw ~aw nʪJYpy,A/K!с-{I2sȱ"bKdI/VLG;Z˅ JkG]އУ<昿l^]\6,FC  B (R`Do=ߦl6t?-@kmnM\WލooٟE9U16Lk y0[:KNz$,ޅf,9Rc?6Q߱gz0q>%L? Y4TxJuȽyc^I^bD̃ e#1e< <FBDlt肓ڹpjO72<|cMM؅Qs>&.ްAFFw7 fe YyXSQ+v}^yZr}##}5ǰ+4Ʈg+{A' O%alb{߰Ypcﬥڵ;;exceZ6ZQ)}vpo݉ f`z^aj"UH@.xF0{"&d~džgFFG0]d[tC5el/NO_r,AJP'%{aa&3:",%aXK\6YC,= X HɩśeҬ!%"!X;ScM1ԤT{~`K Vc7NP$#Ty2ͅB,Gd1,c y@xcj E) P#do6O4cG JM5WS y~lr`b$f{Fuךnjlin8eׯh3"+ 9)ghJT[gxt4RBٱh'Y,>#>**R&a(2eMwFTAJ$CEJN`{Yv ]ވ*@9vp5lR=ۑlm,$Nl$TT&A[yЋc'B0X3p2x1 *]JD^$=%Q"!kZ<0ח)ࠚ[?,+YCRi`mHI)+Æ֘ԑְP8H /rL ln|/M" )fgd)34I '4px&R"2-X;̌Exh3N"b3 c ;q ,hjkTZcѣGq$Cű8ɒ]%,Y"WA Ul8$,4~{^[u,toT~9Tv,dbj q2-"mꭑܑĺqqeF>jT8Vӵ2[gBC&&C2c/4ZMȔ K"ʤ䰺r,!$#H%I&n2Hٸr#I_bI7Ȳ8ːf2dS=#$:]2^mX 5fʞ͢ܯ[ױ͟w|Ͳc;dž+R0BPKm{HlHS{?`5_7'=?$ ˜ÚKˢ t}D cbîtJq@#`}0g9,Y;!A@:FebppIrbF#GPBIH0ڻc+sr8&2FwjJSejnd0]mhjjZ(bdj@ۄ= wGqI@;ƚ-'el8:uHJB.Qמ_|~~"~bHdBYMvM XbR{STѪ֪Qdؓ;Cc}cxZb.bX0Nr[ƣj+,&GKx9=dLhh"sOG4?B靺$_XR8lq$K,ɛc9TSdc_3J18;OO;Մk9˦ڦ|ƥtN$TcKX9B8Z"Aj"<#e8.vTH*`sH(nc<90E{lyϣzA%-׷|rM6لn8! Jͱ%s}QPP5C{ή߯@m1([Mzb^6(&^a %*k9VNXJrƷ=|20+c J5N04ܣ70]3;;plE9F;cn?ǮS?4^ձcvy,d7^QTy|phǫ],z1_x"ji? }8es-;cNNvgŸ35Ǟe+Jf tf׏g,|vza`@9<8L\ sF/9|plߍug^ws;9lg;+kGL&A^x VySwXY|sBsY$hLu KSI=ntab+J3Zf}f01cXӿיkc62 .ގLj,.xi,:uj71H1hݮ8vUX@ggylLF5/w6\n]SC7/c'd%HS߸Mu,.2yAw(}glͱjWZz \c;f:_ۂw)O=s=8s؝ON рNm2T&v*qD!ڐc305o\?3cXc#"X}MoNpv߱&b:m瘭xn]Ḿn䍾>vV8ز"/ ĻcFKeD4?݄Jg7rn̫]wo\ێ)L 8co_30uF]1ۇ9vX J{즛GRx;n շX"l ZSk :fƄ9cӗnB%[d~Zl>TWxשe7혔*-4]7_ӽ+_NJaKci=B1G ҔVN6ȱ~9bTfMᖂ ,ˈ 'n??zXeX]^"Mm%Pc^#9Fʕ)Յtb 代f9s<`0b"1v'?t]tU9٥>cl ҨT&*Eؐ[rW c6ɜ #xE+Z5vo2 &pX`DNKgTkFKrJxb>e/(*3}!H^{vsvEgXޥ<^պ(oEBߥ)=beXMY2|#b}!"(rrЅ6<|cC@.tL حb׈c?ͱz_ѥ ߯e_=W2|DPϏqL|hpgx@ @BwwΆLXcNsa=:c}L>(z#ŤA12|Dž2|8㏺O&*/᎐C͸F@A}ꃆS)Oʯ?H! 1߲0xY/?xG02|YI cIwcؘ\9Vĩz  3,ƣ ߙݬ4ۣ jC1g>?9"2-+~:|cG>1sዙ>o2|,(K(A4s, D8Eaj5t,D1&V)t)5 +o I|M*:S'5//2{S_8ZyC1 GqJA4/ROT-د@1)ϱ(Y @3l,K[[{)ӂ<18L#Sըzk޹`UW)>Y,"j"r ٱFͰ%)ۓbZLdlkk>[c 9l2R_v>\}Vڧ@*J 7}Xp̷,̱(lsk8L-%uGNQ_jTCsF biwnuq-Q~q ہ8+큓NbJ$)r-8Q۶gQl"L|;(64hp|"o^*{Z]<:ij>ӼM_C)fcc%ss0av/m`-[mذ%j-^܂HZYslQ0&H"1#{|@.f >yw--UmA٣9Ƴ4ow*kk+jL%3a 8fp wvZq^хif"mХo|B;?F86Vi1Oyut`zVky*ef]sh,1"eX5U+x7o.ׄ+:&ۿj?In,.Cڮ%]30ݯ:7̥tl+~ (mرmۜ:,#}#<86s[81|p츜clIUMlWNikzzs.elzt_5,㱩|Oe^q8pks(v[)N^|ΛkpZ:5jP=S=vw ="DŽmʝtv±Mu vؖ-|wjW߳? l^Qf?#F:N!Ta+_G}3zH"tfZW`5i5bgy9ݷ,<9/# VK=U=rrODA{}Pz s6ßul$n9s)XҼc1QQ5frsî(&7d~qE׿M:6ł-2Aǔqm^1LXcido UkNZUXWØ,|!ygZI$,?YrLfVKı׍620l襓Ĩ*܉%'rݞe2e☁Z^-cA]ݾ"Eߥ{iܺƏi8)]U9tLNC|1DY}wcH9#>tLݖjH+. 8wC%Atlq1_ؑ/c@- :A|co_)',X%ٳgytLs`>wYxDmY2`=~Ż~:"y~Sͅe:V[IъrW W`W`+A;p\tLr!0]n= [a1 )l,2 nAZ I@'.{:vJ$W.noB}Rq,Ygf_Gac|-qxl"@1cML+'(^Dr 3 L&4aYJ k6DȨO|fV؅s 4Zz[#"bRocUp̷,б];* s0 [SXc2~1|Vǰ:060: rL jJ>hOl1'qH@khi!r|EvYˀbI2ű/[+J!P!B'Tg^WNnl%"q {!Zjvpgn L@}<DHMs*QY} Uj1f,,`۫kn]JvzlX{&'(NswyǒDq\,s,.u'̭ Z[55;/h-e98P<:+xr45,u ʋfp8PѡhuvBxpLX!A?rе`k&*u.8zڈtJ͉XbҎM{qGEX;XɶOch1?{;-V梖;nط~|pŎ+FvhVZK)k )G-e3٬m{86s8\i-Ycq@,xr=v.,xbas \O7Ӿtgq>Vz<[¢־׆{s3Ffx@hgE?-\34n={> ={~=ќG:w2>|a-Ey SG$s 2Սuvyu ,`矮xorX?GYxwW6o{<,1l7*4W[BzcģFuˀcj~π8&w.1ѽk;/g9l-o @{hX#ؕ+.TV 18-㚑gdYe\2֟>]i5];}z{;X28P :17 yj*ȵڪn{nӷݕmfp vn[Ŏ|C32VUd4tlt;Ifw66v~ijB:Ŏɏ&;|ح;E<{ qx&<9aD kc{MAy+bFAǤyB웏c?ıйIѣ e\|6/fj T+fq,c/T'GG+`;%]wL+zxr4ehX\5fd yŝ6'9̏p<Avij;{̋7CIcO1c.cwn@)+ܞ]Im~!Xpǰk^յoH3jj WƱe~ :CHʙűu8v6+;.3G +\>4`FsO3sjkoiRc,ot!l (Xtt}iY11H(:񽰱w:U4 1k5+w*kk+YIR>967RZ=c_c4{nslF`;v징Ix e❬kDo $ߪ'GnN_ ձ$op~ˁJw4)_c>yk6\ەVЌܮceAW f{E{sm$ca3 cюlPX5Siϩ q*lՒQ`&+@sgί(UXx7|#S#C~E3cX2d{]]eOof%M9D_Osq,c+^lIz|k#%Err,DX! n` >S@ұ!0(#OkŎ>bZ}U{Ϻ㱺ں;<;Is}ez1gy@@Ǿ_̙#822@FqQ1kԨy@nL5Vե~cO6Nd:;ئWdg{>V:'8|j#%Ez"tdHD4X#fT6ZF6zц`eX$M#ӱ#.ZZ+k2,oM^r xws $k_ck}Fr4g,ǐ}_tb/le⨏'Py8CVnP3+Jsl04ؚOf^qF%WYW{qL_cGЊ1 @'I B> 4L.}Ezظq#l`qa (WM.K# V7z{=qM CY5 qLƱ'sp I%]YZ?A95s!<n/ M}>;2aa^:N%,_{-1Hf1|!#K.cDE՘IBnD ؁pGH fS25Nӧ?),"%<!ґ/$=bQ ,ݾEҶɗI'70WqMtGaccb^w$@%pLŽyFRڱbop 'pcؘ\)Vĩzwמ[)_sEHvk|P<-wG><Գ?ޕVi[yih_U7v3zpZ9,Uy+n=㽑<˼h'_c;c0,LϚO|z镏[;Ǥl:F\,Q=g\1f+IӱOJ;w|\UZ.@'L=w)s1[Nݔa::HrW4v$<Jd[l;aѶ;^ّx^Njvp .i1-c=K`w,) "5aFx7crܪc[W&=2q%Ϣ3YXy'2 #(mh"?2julO!gn+ !vwrݻ \rrrd2F`EEE Kl$+ bUc:W ɪV껳,ǔZN3A1%vCdQQl=0$@0\1~27cgg䘥h[^9Eì> +wH8Lޱ+IMjs[lZ]|Vq}{N>c9@X2+=% qnՠՓ{Jۻwn!evF)j}kN1: U|Vh/<"f}zc9LTŘj>9ɧ- u>fScak\֎Uj`_d&F4v߆m녆ĉGH6{J < +;+~3-GĝG.U%.juXɝ<ͦWKql5W1ܺc\'/ē݈ʦ w'uv|{web>!m17H!݃T"’Rgi}xi'/)ԱtfsĺclkNPgulšG>o7jp&侙xB1 M>1v6 ϟ+b@2hI1?ޯJcJ' *%6c[s]::_:RQauHY}3QL< 1,@nD3" Y 0R!#,SpYWr'O|:UkN[D-i=C=2|yis7Ȭ+S:q vd7[#αv< N؏?}(0[Øc X-ړdc2M'wvpJR7o:)G~:"X}vc8HV[q4ԙh]q']M#]ü߮v;&L< NV1 Ecb 8} a=bbPN7^ɞik:&&7cQ}%W:jGE1ǭ0<7K|R+z7{tՒؑp*>Tu?oA(G¿τq1l1~c"lϑH; p}>C :-GQ9vE5|sB/q+k*<>}V|gcT|.Ⱦ "3îaOkYH́b~ZX"TJYZbP1O U' Kuylu)tqKuRc$ˉ9JǤfeƧ>9dP(MSu,W\clU W[c>r NXdNQ+VXaXN21nW&ڒ 2 cg=SrhuLE0ΰXiϱ|i #*9dv4`X 3!cj:xm{b5d1XFTHF.ZQp 'c:iԸql VeA3R| AW;}1;kr Dzrrq^z2 O5 c(M}cES7 9׃cc̱b)#,eހE6^ֱtʹ6p^x=x Q=lU]i<2Rc2۷WjZ4L#bAwg`;2Ǔ6c+vzggv{@P*=ʠ9<_Q.'Jo?kYkDc[9' tf_ɏTL=NJf&2u_hv3=lQQɱJǠ'HnQYcp,ll!TbJAʎ}]punu޺Xl>~s{&~ YyBdhƯ㘙szcZ[Gne)+ǝ^ѹ%)wVqY|@]#ɼs2rUƱ:ܤƩS"**\Icf[H^ouŶn[8 YcF9FpQNv,oPMee'Xajx@ˋ0fY,8Ur̓:zɈcN=494ЕW'鈋pcV+S ѧЈvX1nX5&Zh;fcibX0,D8Ke03Q혪ԨcFÅV|P5_~\ɱHh8Vc b?<mW_Z$Zsx̱|=Ϻb~x7h(.);fton'*F:7cc7ٝ%17.v:kd5UgO(ZChXc_7.Nv0oypXpVnf1codd)+"mjmu]xKК]%(Ʊ{7޼wIX}Y f:#K΋+iDZr%N#FK<קkqh7]|׏cy]_9<@10%oT*;WY/+@؁O.wkXPŘ&-I~7UWm(f1ھ-U8v6fJ_Acj:潗{Yc{1v9ctOpAFA0V\/#ͱ8yɊkcsc6ͱ kK+z kku>vgl^C Dz`5Xޱ2|uz嗿Znjt]PM^C bPlۢcEE"s,A-t?h(VALmh9L9v+M-qfKДQYSBU _XSg?}-9ᡯ4tP=y}L"OS߱Bm sXLLA- [Fs+Mh;Gc%]==]%B[H@ 65-:f!$ `RiXgOBT12E-#S- |Q_q["96X4A!cxc)K,7s"xQfJLqKUIĥ!?>fo+wLVږ-Ukx'R.tP1)P !́ #8%mTPLphao7dܱ%u,݃Tt{ KK%3ttP<d8VCoB/KRZJb_`"]vզc=%XS ƋMB[cuův|xK,QFo1&W1%gcD`8&ޫeW-gp*8&' P[V}>oGZkKÇeeEa EE,!ǜu.wΧ|J[s嬼c-I}1V9+{C1G赅j9"Q8VΝcxRdS+#9c7Tͱ#ߖ&F["dVp7* dO9wuwN_FݾLЛ7CRǔc]0#Ƕ3آg2?au1gDZE݂Ys^!rW4xK6c=}u;Aq-YN &aNoȡX*ʥcCq:x%{VS9+ql0iuuʎq ]\r^$X0S*mh5 ~m\y{%/m)D} >+*F5_5?6'71W%9y%$Kc ?b~ǿ1>-%hg #k%xK%ٱJ<;e;~;uj?c{aO,sl㱑Iy9 sH{ӊgMϴ_ ciL]?*B6fwL;XTf+ s&ͱ i6c0}\2dwz`?@,+HC4ݨ{I^h]ӆՔѤ99Srȿyc1ڮ[vcM=!xrIjD*&v % Tɏu {`D3Lρ1m쥉q/ -ƞq%^"0yunqKhDTRb*I cm,Įg4pLǟшhOw4!㮑lRZ-{Oӈ!՚wXXps)zstK%2\M݄!W.uJƵjJU3,!uH痀mK(bWy>miK8=9)1󜧇ϛ-6 X ڱk;@Z%-Z2M1du#J E8c-TPSg*SgT1gXBh Ղ5?"0THbc8f!-WҤyȔKTJ DM |ᶡqe(⤻putIdmHEDZVCwdǾAȯgHw1`Z9t(^zsŚYGC@'gC|5Fp,E-5ݍ#ѱL99F!W$ CSp,uMԎ188}1 ?HXEynǂgXnN@[ru?,ClPFnw5Xk;g{h].HE=cj@#ܕgڎ7XN{2ži.ǀJ|>*3B8IԱ%p1nnjiϠWg 6':v ǒXRcN .;ԙ.M{&8IXWܔm2v1fٱ2X_1xN30⭠3cOǾNvÃlaq#? i:6⭠Fp[p ۿisE ǝZdcb(V;4ѕy1~@`; 9Fj haf?S}c')'9|R8ƭcL1XDZs cV?w&FwϡHNJ=:hJ0?շړGn< ]׬VZ9q떕i%ֱȱP-+Ǡr;Ȩ2GJ|3516O}hcbD#IƢrkz+jż$+ñ{ǖq:&$!ASA}gHVc+pkǖ\G?cd ?yo15EO@7X^oÎro!ђcJ[3ulq }'“-t0= i]?:zq)bQ(Rfcj]cyuY}RF wvȱXرHܸ3'I=3 #: cr.e阳!,4R /`#;ֺD*)? 5Jm s&b\c%)H%}ϐJ_8Ʋ{4>X; i~-糈]C4deұ'ͧOkX,gHsM+w`NlRUr AL{eq1،A[R4+ .b:65*Cc:&gJC2tF1L[ǐVs|u5Rɠsх)L1D0_u ]qB?8&g#1cyECZeJv^!3A98Qn9?ϭcWc"c4tg8u,U{ӎkoϱ/hT쒨ׂ6c1X^tLԻϞ4jwXZSaE-lk]vrpli~Yb j=Mಮ6">,?Dm_Mœ$L۸F-8+bՂ˾ۘgL|iH: I6L+=ƫ[ϱDFꔚ$NmFC8fPR:-E97[R,_ [pL8;w bW 3C%;b%318F^Iiq䢠$JJjMh83s |/."A|)Ž)'IJǜ" i_.$fpGawɎj' `:~!j*:}Ō$"*Opgrؠo3AI{ sےG _]rI} ̱aŲ6G9` :v9bBVޔ@x c$Sȍc: O|mH2)xPW{Ku]3m^ǘb`2fgm:h? #R~Qz㟜8f>oo-/.^qޖ^cY/m9i[cuUF{, .|:jBO墿XfkʏHGotVʔ)ƣC6sǤ+v{'>_;N׻x\ҒWmm!߮<=!]DZzǣYv_xNڱds3 _N$Zf"@XB:ˊa0Yshm"b6úޘoh|e7:V[? `$,I,(IEMS,H ByޚYb(^-$fjΥV]>x{:V-uFNDkz),g|!đ=!|1cX͚o-($C&l2s<:r#04"JA-bdSp" yw, o=Sb4Yn8p:v^B'E~#[13g$ZiZakCn[s4өx'VMǞOrr]+@?% U»~DsV_ߛqu[1DmFѸJӤ8CfF=SVcxSK?A#~`pjx*.BIK/0"82vݮ l?|4ʎ0,*13ߎWjw?տ7߻cO.h7ṙ uw% CKbycyDiט۵KMK#hZQX:۬_=W P|i7;&r~ u/nUR`aCKZ>A/ee>ջc(w?MOӍM4RK`Z$@I&d# &$H \XP%ͲQ7QѽOiOEZ:vj-̜9&} dW@6Mܙc+1FxELLpf&@+Oxi+=a7i6GB ac%؃.J1j+DWrkYrV-co׼cc)E1jWr+\w>Yqǂh`3cLgdSS+0Ҍ ?+<bGv%"Qەq2 [`1y8*YN!NQ}"kIIkջqϏ=L1fTD+C a08 {b4s|$c c<.sc~Rڑ1~̒cp; 47d"(CY +;KibUp)Ucdǟa>6svoYׯx^2Wj9coo`c ]uyY 4 o@,Ip1hS#'5Go TmFKȉkpՀJ@ጂbOu{q*<1\WuEW/،FEƺrO@6%J +ANg >oP/G֙^?(|uMZ|ߘ++n&h#!H\|y>vdL1eQ;<|SS#usnj17k1H+̸z7`Jb>l==,y/RVqx3(Hc{yFF [X}D[cEKgXƆo-LM^31I5wа,/ 0Sf)ny# >[aa)C[6Mc1Ni›ۢ]Xz2(LM^v1k@=d $ $F|bI|b8k]ĨƇ! ؗD]*D'/%cƘv{OttTev0J75zQ2}~lbb h偑Ű F|x[0^0#,șLb╌A #C!|ڪXY!5CF/Y<@vΖ|!SڎIIWV "GRoB"b("[v~ AW:1Yek?r:cev!Om60Tb, \OAnj`fcu38 H#&~, G"Lk"$.%1c9-=nZ-o|=ҞdkcM*1G,LM^>d)wgcS#l6 ?#A;7ic;nߚb32vAB仠3&؇=M/PK>cm\}4 h†A^~Fm<"f,^Uڛ1Bd̿ϽmY`T c.I3%fħMC I E`d~ovl(cL g:c1AP,"fR- ¨NJԲ$ios|m g`,3\N -iI1Iݚ^7q>v%+k9\`Q3&njRїXQfZ\.C~9~|?KC5:@\W{qV6gY  ^b^7ţG M9cg'?ԶHcS8)Jw?+&\e\p9ׯsJȯd=|e,tTv+& Q.C~۠>c9qT*n>Yi,tT+"S s~`;]V⩺b{15F~X>錩&-3saR;p J;S}oؗΘz*x2O?}333Vnƾe "ΘΘΘJ]3Y/v21դ3V.^xq S1iMi1S)$Șlwg4o󗏱aR gZƘsVvLOd)1;}eft']e'X[3&m^݄ k˳߿ޜ?AF{(2slW rŤtD2av)5\Wjky%՜ۣn͓X9c};=|:/ۄyCx #ʟ{I7^cO?G(F=bR{:"c<1Sk]`E]zѵ\؆YȓXYm݋6a҈tMH ?={1=i MdG?[j1+(`@}h,{D+43!uZxǤ3Vƾmc|L SiKKj}&)ߋIHA݌d'?xI$  0 /OJa o婞~+1 0F0F<Ѝ?%_nO^qlmWY8B/xE*сP.AHAf t2azW r<cq9cw 'ڄIyFd5YvcymoMSQ9#E{=kUOPQ?BP oTm}@1A#A!cEdx oxeޜe < FFv<^ܦA0ZiuŧzƓ&={1=FTfg2fTqLA)uWNhb;#$e3+ctnobU[LTd23`sؙKr}b,Ǻ6R̰p " j#bQx2fkΤc8PܘMnx*_ o op3ӎJMT93Јja,Qv`A ?ix=\}\""A^1,b1ZJ3Vd7k2!c.yܒ2'CES9dЈJe̥3V=a {d{>&-oYtGE }> o#cX/bޡ''p+.Û(&< v? eQ=eBnhocWm1$ Œ+7xD+SɆ1Âr)jj׽7;0ǚad`yF*?V,.ÛӚܱR7lCJKĻx);r1X^Fg31Iewа,/ 0Sf)ny# >[aa)BR2S__z+ y(T-dxc~([1g[<ӕ~13V2@ X!Z>1jaa%%.jW`>1 })0, ޓ3VL1S01&gߤ ۛ(t =Mo!7foe+;&=sB:,)bV®Jv*²\E…BZk^m,^.]\ }#/3әII9󝓌gO2}轰ޫL4ʹߔc´峡lH.~r/rKem^?>hbIPvngX f0>6OŶf;L|>Jw!2 DQ:o- -lQzy<Û s ̿߇~:y.qDr c>Hl&S7C1S8߸vmn &ZmqzqH$jBPֹ_j1?TŽTűuB̌O[.uK-E9ZzAꑪivm{pM4D P~VSP)"#Q@]n@ d5ж\:5z 3&EÙ31G{ǐ6"%x8ڇ1#UD%1!JtVF"~hF[V 6q|1c?ͬϙ15(Z+b4.۽x1jbC4J=cԢRM)Bp` bT0v9K9 u?ZYn{)ubp]1@ RGٵI%3E1ZZņ͌}w"fLc Y^*;;gfƙԿmK 4I%CCͩpm{p%ۿTg,fLcrSwWZ]"_{ǿ [v|v*cly(י)qZ/^Z45Ojk1SΌgL,&(TH\5s3!)luPd6C{pTM2.zHZWz\Wl*-=mb4]@􅩙 @|տA8 90+oߝ>6XO3}}t5ƪR#R1ccm?Ǜ[hʬ~ݜ??2|S8p0杪9"KXgδ׉2f#GOx(<(ؼu3VU29"K^Gݝi؄eA+C+4as}sIU29"K"贻3à;cX~Lݓ+fh_2̈́fU͘$IB%J ptݙr:QƌU̘TXG@늻#;N|5J{*bL1dX%i.1c0Sݙ(c(k2֥J"ƌy2,_i*1δʘJKRKt1dX"T܆δl|(c˿ч>Č&f, vKČ&f, vKČ&f, -f5 csaZ3j10[sMf\pMW}ufJ[x:ٛ.$cJѨ#XsQa{(m"M#ˌtǘcsA/0OҺODQb.u0`1;cdJƐhM$y:Ēשxh5f+{>|o.8sx3<`MYڣi`zM,Iq:c[cƼRt.-\p ~H}+rSh &Rq:c[cƼRh.5do. LKJK0zM,Iq:G֘1|* Q*^ .s!&23]wKs\i5f+1Sz/^L|)Kz4zx:ĒשxtʷƌyO1TcL(vSh"t»%9SoL̘KG3@0M1ca=.3b˜b\3ƌ1ccƘ1wŌHJG=Uf$XPΈs{pVG[Tl2csÑ$nhf<̙ys̜4*)A^HnX) JkGW^X(*錃P3@y03v~Y*= ͑XZVcG#1(,Ğ*xZQM9N4)2w*5e< &\O3 V"Ę_E";*g&c9B|V<ǰ[2ŵfdN,+Ea:cG#1(q# U g#CX260"\h^Зd6}LBr{;ƔBX1u} ' Ux`T9:< T^ U\uE# K^1C/Lúb:ly,ʞqEQ=`,35rpCeŻi|LBr{+G͙H$N+iJ^!ΟjeD^EGqOD&щtiNgqR.M*9mwׄ鵿t6_|a[+9}8`PD 19k}*!fc5MOD@zǻ7W%Nx}/yTK>,# ;M[_aC06cf;W4V\clC"?+I&cv[?^Eګv۹7-ͱYn aq͝(:3]XEbc]c  ;Ȃ(KųjP*aTF1>-¬FRoA/&FI5qA3T  ;͘Y;u~.؞`l=HL\rmϰw/̶a`1w˲R˺! BY1/UCwب첢Ģz;0„ >,| 41v[ײٸOo z#zp<6<"'p8Z^:zlT s]Yba@%§z;bu呅ϊGҺ֚XȆN0؈RX=Ņay sC0 :FJCkQW9}fƦv.yzl0ް7ۛL&`/ń0L>|k| 0N+WFt{9c;;*MgM'd{8Qa]OHVLa+s'XWlhfL|-1c.K΋i8x`]Cı cT~ٟYc'anOFH-0 ilW.e]Tc|_QcRuk͝_<v?{q̓W(Z.dc=`" D,L!zc²0ƸTi蜮U:fAnx?s~Ħ6jC{˓᜼'~ӱި+c-b :rJx] o\#\U7 c&݈]TK78˛Ps~cp,E[ȝFfǺyoTY~EhNќX0k9᭯.'Yx7;֭^ql(geS08̜l~3:d18ZHxb'YqVÏ;C'ˬɭop ı4L7ݬ(z=O79r 9ˬ;u cWpń}3q›1usy:5ط{\18csk1-9lvw\qS֏Bc߸&{+±:c›U3\B7ct>-[9 I; ˽b o 9*x7+ͩizFn>~e4iespK:~<~cp,}罢cp 118 cpL.p 118 c -p y18cpc cpL.p 118 >e ǼwLW0?'Nv:N+w߁]O;?*zt;DpJ1c9VX(8'886Z*+I,v4K3(XDz)eHe|m()Qg(z:CZ+ױ9#3T Ah}RRg#*z UrZ .w6HfRFSȱRB{11Tcǩ2)e:-l{[2a(Rˤl^(@|,r_OJ 0봰wck;6mpliDF3 ځpBb.N [^JYW^(R;ܾrësžDZ ZRr^ –ײbykYy)C1W#qL9vcq#F؍.N [^۸w=P8&—YMTS™HD1)?j봰l>4Pk+Ι>a/[:kYqp3bc8+c8&8\crc8&87ܙ"1`~N^^[+T+Ϝ}O)V9wV |*fy7fᄃex\x DYMd1Y!c2W .zcc 0&k06`l~I?_c0 cKYYJȊc+K 7囍I\{4 c?ؤc7M:<_Qvb*U 1-1VZE?t㛍-nG<&4yxbx]phcNPtbgggѰU(4Cf"6\Y3z  Qs %ؘ-1Ʀ`glcts0&g0k^0of0k^0of0k^~S`׾oL1^y 1]7f[#]1zZ߄1)#ֱQeD7)#ֱqvVØy6^݉ȘKb1c6ӕJ2{ō8Igc;/ԏu2VjKeXD7l쳡2~x6f`LƺWTd57,cjD7^X%cPݰ->Zz&cڌTi)7lc]y2"_0nW?Mo޽52EoV[ػggc[yغ<ϏаvW.pdϏqȳ1j0&kƜ4}:+*V0&{xcfccfccfccfccfcuCs8Jx.6crtUӿ-=1wZ2XlƺJ9'61ȭ1fs} R]K0&>]|Ɨ1ȭf cZgb'`L\.].CoȘy"I1#s͜ךCS"i c<\dXw{Jl'c։0&qnA&oLQZdl>߀1q9>Ѽ6~ct%cX݀1f6h̪X>&cDcfuL7^b/ 0&q}HcXwh]B6<: { {ϣ9`,Nx!=Y{'{ÏWc:ĮZZj+V(0]y{<`X+7/_˜Ĺ5A?$XV'b9h=+L{`LtxO0yyyyyy7~3o#zx sݛ 7 hL9ѽM^bZzMU&X"2|"+\u}wXwm?<*'3j;՞:ʼnPyĮ%ڋ;ٟWkNzN1݇N:~̀- >2rUܮث]l% cPy؉)": FF>;v6DX0u}}N߱Ft8>tEWvk~McycG1>m5Kԩmf2 DWhs,u>=s,uz3c+.b#FV1HNyX1#24Bw@>]0@-P{kmm+OgвN1Ɓcwq9x3ٝanGmΜ(b Ǚ>WZQ۱HŵEk* {4ѿNtlєyQZ>8۠9,ܕaDbcQ $ϱd[6y`8v)ddH"oo3910v0~Z9cُ|9)gb'$YKD(dc=CSt.)'VD^}&}8&Nzx]9>WS>c|Pس"ji}$q{@`};e{ɢ牺%~wjهc`ʭ7Vt98_I'5X2Scv'=9&1ynR_Nq9\+4^[vu{_>jZ982xzTFJz,_?qrj٧p ڰ]d{;66^qdMa:'vDy_Q^rjчc\p 1P @-p 1P wG21J7yό IENDB`awf-extended-4.1.0/images/gtk2-rtl.png000066400000000000000000001535531517644610000175300ustar00rootroot00000000000000PNG  IHDRcZPLTEGpL¶ɹδ«Ϳ̿ocX˿]I͉\H˝eMˍ^Iµ୚bLaKwЏ_JZGyi]I[H~[H]E;iL?dLcLŵ̽dLܕbKijmPF71ȽZD:~WE_I;ʻƻŹ`JȸXF/.-*)(#""}ûü:98GECպǿ^IgN@?>ؔaJUTR433㾷~PNLŸ疗}zjgedbaЙYXWøM<4KIH{ywpnjzuqsro{eYbJ?`][tQBϦ4I[ʽ̿̕xΐvƹŇk=ce4)Lvbn[MnR*8Nv0X}v\ty_ɏ30閪>פQ ܲ\rk+䐇1}|wᩢ[k#VdոiehpSBخگcaC^BtRNS@fIDATxlWe;=z.EZjѵT'"fɴZʢ{rn4,q PskaU) *$PUKk=Ӥl)}t>}!@ 27&AO|_)ر (>]j5az4E6)F%7.$sFU4ˠ@GDNA8{^ R o)QNQR3ϴIbǐbcj RԠJaUT80.?@!&$ƅPټ|ONQ" }7Qz ]lG56+P'c " ¸Ю͝tf F!/C3:WZ^-H@ ~zKR'PIh54d4KtC\܅qPe}i\ۚN(y~0XJ4ɹC$T)&5j8Vv,0"رfص/c̈́hi8jm;8}ϛ%tq77ɱt%zxRT۰( 6Q~Y΅C>Ue2ByYQOddZ*ݝZV79Gƫ0^כe{M܃Pw|%n5J/)_<rǾ$ OR<\ j(2bI/x QhAebTҋ2Zi2zQd% { J,hD]@pı* (kk4%}cKo(ƈdexE.\8~7"P/IB9luKcT3͒VPcPQڝ됤!HvjBgAY -^b0SC ԀRQ;,׍ 9odkU.݄J(-ecD^1kB\@PP#NR1y@Jl~Ƀ&WGfI !8C;G:dhQ\zLeSN)WIRBNrIɴg$MkތkhuojenWW& +fԀ( !*(xꥶdrLI Nnmcj w}ZW@ijii(w QRbFJDihx;ެGJ3k@;@zNnx/ª$i<3 hRaje(E}?d1'R?d< BNBՊFaZx¹ 1{o\.1 >oyѳ{5ڀ .`&*@. 1h* F2-^2zjʨA m|WNnBJ^H}Z30% }Ԁl1u@_e[Rԡ͌=c lkkuE!,yڼR95)vLU7HF{EO3~'fNt $7%hΠ"CKI12dגPf5sZQ deODik) q a&`­L&Kd׷FQf Vݥx㫫 KwfonŸf C`Z\כrgrjcm*.Wfj$ii#|Ǹ%4b 4TBsQX @-:@ uQ?$}cـ8F .c@w0@ cO"œ;f씺FIݱs 1"$+Xոw<+srlxUYԚ5;8'ı9;f: ${c؞<- 19ڽLX8F?fg@9xޮ^¡l<3Ճy@o_WRRFw#]EA ޼zJk]ofF=9^GOj91U Y@; 8nרu0\ɷF1QMs0g|wq4ѷU VWݍk *8.gieElv+1;aPۻDB[̷knTQ7Z"g*[-ѡ%8=g1> zw~iP`&xz_{A{oqZײ =W<' ı9q59K!godO;5M+3􀉾K%(ız+j3]jhYoFa+ۣJD`vl1a7]#/D`c*ݨٕ0sD[:^<5S:R+ ,~j{{4Ѳ ?^ONqsb;$1.1|q c=Ng<9P2jb(Q=pzW ;&GÉ`O0Z)MA# )3]% ׵7C{rѽv+Sݱ9C<| *!x:_<9gkZe#+ރ(Q==CۃDH5G5'J^*uWLv`6k]oF]ەOqsb;a^xSwjOX#a^hpldƻAXwY¼Gg ՞bݱ$l@#fݱ&_@wa6[0aJ`Yii\v/`·P饾iYZ{ wLҳ7\y1xvn WM&1+|کC^}DED~72+|ovVc?"'C?֎ݧ8V qܱ?TcvPWdWqsg'JER|lY>5rgJA`z 97֔w}  KγD8rp$֣."[SSð=1c3%iק*NXS566f'yҵ@"sE6(o[kMMw zz\. ?>CߠaU}Os '+rNiD޺cx ۺu2ͱč5e=t4?o Oͥa Fk\t n7y?OliPq4GڡS(UA`U{c={׿W%i93%'l V[W֭NNN~dH1NXS35µ)9>P8>fpaY֎i~rP#mCCU}"ݞcW܇*ao Dmcx[2W'rױitW}񳚚}U6dX{O|4 q؀ٱpJCp~ 3vcaȱԹs|GՎq\`+dZ[|hZ| (9E.zcǔ;ŭK,0ի-č5e=#C7p#K16>g`l-[`﷥S|?0e֏Y`%CM RC~ˊ oXʕ*'TǴ-H(&:CmŊm䅫7 ɶb^'n) ׂp㫵)s@48fw?{7[ t>~ra[ @'&EW%^\bMnO1XN pRu|6<I(Z;)b.r6,Aw;̏K?_ٷec n"G׆1v>6lﯾɱ?5u 9_קbfǶoԷ&"8pB+FFٱL&OT qH~(WAWxbcWx K\}x!35&?M$춧 ]m[8a!{ܱa:`g9{KGnݚBMݺ9ub{ٝ?pL * c#ʦcp֎=a(".0YŢ#chT r~sQ>h1hVW gYAW [tχ+~gqc7o~~峩dΟ)똘0ZPHi;ǒuLwL!?6oEBK\,:}V,|uŝAW28qߔur("lsZ ȲD,GbX $d˒ъߙySqТg۳;88UAY$;RT+ XAq||;| FZ qmd(8A;WPfZq*j RXIWRFnU]u{{νܙ;ݹw^$' )i>$''ys>yI8V<$DZ93^oEYĽ{XFF1z{[]'ytZv n;؃^.kuFoÏ?0t{| $+e*FF%bA;6.qX7"4Vbf)&k{"ql1Dݾ}ZܭcCmO 6e:?6kʙoEw4#Rl$5eqyF4Y.z\n'ʎdׯ}ϠkØ3CR̹3:Us;v/1Lq@6\Yuj?6 r|xo_n7V(ܖ_,+K}e4S)tqi):瞢sΞzn,0wv{omd+ ?v:ݞ21M[p+}T[}&p ,9t&deL0 ,cp*vι1VlΞGY_a'N==P tLKA[9juwvoݼ9nR'j9 _7R61en?\cpl7ٷgñAG v8mҌKaK a`OQeOY:ȳ-aAXí-!c.R[k!&̢f#AG $ƌ4T`|:%c,?#,XԱcQ>+ /s^JoG+8&35yϲ( +IQǢhI `|{L :%8-eƟ!6&d{1JXDz8b_.cYQD TDe*PhGD<>DDEDDEDDEDDEDDEDDEDDEDDEDDEL!c$yDY$ۢ-iE2mi3Ўeơ r01<3o8tgTq dRYH[YdE237.8B:HO k(ɠMڀ;1n8Uyr׊Z}|Nlm~O/l/'x}юazS8#I/YEIm) _΃10Srbxp),{±$_tZ~V 7'DͪV!p DZRpǒ0Ea'[Y}2 $SR>V2 ^Sgð׳rI@#a rOu)0D@ 6nx"]Ϩq E-U!G%dJk1Y{Io(έ֭p\Mt9W+$l6fvCӱiϗp;qEcp,;;]ve4DXJu AT Ötaf,UŮZB+Pr[EylǓl,Z2If^~)K ,Clw%,ـe"lh3F1ǰC'p a_=u{+ \Rl\W⑚>˂Z˻=G.Y4>qzq j+&#vi`.Quݸ!1_X ,7j-Hv"5U!F㍝ -t6q `%9.r41#ߒ_h%Td9xV@~lERNm(\*ex>|4ÌP%cRbX&ؓkGǞ||KHj^85>~;>嫃wou]w:]_"'!*x>ƞ#*X@ b{)FW^SG|G&+zuz'ipԢo!ٷU}Pl'!NJͱ֭{uX|XάS}-U,\ ]v9Gi0^a+c`=Gn=8Qr􉪚|s\:1 XE0W;{z[E Bu55w;Acݩ|zXu"Ф}iJ`ko!ϕu%ypL{^x]6Sxp Z<WL7$&:&^2%KV>珉ӳx\u.}aUۊ N!^W5Em>;]ӓK̎Ʀƾ.:I9%:vl͚uc@qW!Cv V:~ð+[18:Ѻg%>UV&rxs{pcIF> |K`)a z!8Ɠc;x2NSD_f4AX_% S'MZ;r=rt=COJ|qcEEV˲< }~BXݧtōKzb);hL2i$]a6[oZzX%)SԐ8C/0[މv91139$kCdLpX9x|=|=[j\\z50Ǿ}QTp,c-wމ833L8Y`c3Bq-+P}mK!kI^فx=`ձc-vbP‰b"Ц].QۧpDz_옚{܋<58xՂX1䶍Ou/4yYg48slF#u!$ezk5<+6+_8!U1li뎍5IS ;E1?d2|\9f,5טՖ89M*qcFmE8@GrF֬t p+ɲw4P bqߢC_y'-PTaPZ管7\N,q:L99ScfʱRCbiclڎ kOW16Vhi<05ݻ|'=ɱbӥ#=V VZNS bٜٹ9,`Jfg{)Ű Ō CZsא8pbLAS qVKx'6߬Ɖ),#-P,v::VgW$l[nʊO eokC;Vk# 7hq9Τ4i;437:G*un\АImK|1է+%G[ǯeIa=>6Vy=b֟v: rsrRm8eZH1rr!|M2c%!UQ]m]j$ŌΪt ,D[|=Ka opFJKЎbl))g,u 'ȲhRQvM(|:ve67=|N{@".]4[EIvTܒ{^8&l~l99UplmqWS+k+ǤuEXX&uo%0(yW-Q|mlαرW{tѤx /I0VP83,If$޸@/vFX1]somj>r,Q"Y+] ۶m]/2sט$nA+5/ c 1P0Vʇb%"u`'1gܘ;vfj ć`C~)rЎ1B5ŵ\v A77|ft G2B)^rx+%RXLATج1۱S}@zc#-E.5ȴ a!P~ `N.gGu0&p98Bb4-<:!dZ>\?c5!ܲ ݄qB:EybPKc1p';5)yMw9V@2ii:˚ʆs\Ε.QYLD,5^R͛:T槾f6H "eH.1jPΐܱTRcjj9V^QQz:b DD-ڠ?+v,rI!Q R=cCQBHt؜ȱYπI ܱ3%cfa:vcXOY8fk=uƱzmrEriO>r) -bԱ}ξ>8x a2#៦#Ĩc?;gP,vcС:)D+Q~DE1cD% cy>q37|%spc|La$'&<(2Ssc>rV\XD"{F֍o޳'ί_֎!ͱ̬3&dE2[2ؚxvZ±I߆+8x_m+σ'rl~м-c{'%?+N{V$mkErf~f|cd^;N1ZJĎ #^w{ٵ" 4CUޝ e$-VZyw/cf~EHZ=Hۭi,8Z&ՎRo1mp3n6UzET™xTʓBbEM!&mF Fg1 ™|>ET I;b48Ǩ{Nȴmؼvl ̊i~`GWHs T)$c}W0OީawDFE eCVv #ͱݻɱgq>&ZKn iy>. x)~*~Yv]9腚ڝeՓZ"Ub<;;Xv~2Ҹx*9QrFL(5Y9'ƪN ;& ZsLiǴ'u>ZKnt͐C늿Q$~ہxJ/ Ky]xB_j`|>-BRisJ<7JsRIM⎼B`TÃC9$‘'Q&_&: ͘2DǒUqx$Kϱ7=_kp?co[kmZT^qޢ~ 8Q>;10Q; 4?l E3|Mc$MQ=t i"u@5ydԻu'hPLAI!L?Jx 8 "&2)8AP\G$yAC$0EW$.17LE- .jbʔ?gy0 g>iΉTDz ]VGQ1g0|"baX10|6ɡA4 v6rvxAQm9[XhF6mv Ed*DjN: q8p9E<-L.k!Bl;:6S+ap00| &v`jwf1}Yq'C\]ɡ#~0ڊy|oImס] A|WzIqTw)E9&0d@lZXج=8S?& E"Qf-~.Ox=&5)u@&nrgNDʍA`ǪiFpqϖceZar}a>ah=0|ԧ6FꘪF2~!8c94^0&)ixn^,•*RKLB:@ڱ8T` f]8MT8bڼ g`3}k9myHnC6SUؼσäbo{S1ڍņa *~a,:D˒!j2ДTBMqXxH4\yڂu5> Ik/챢.FAHdc8P(ֱ}q~h) BDU N0qX yz4%}fz"gN\2;KbMe4`{"W͢cHSԏ:, Y]sl6o5\Iu6o2 [շԃ)>aLvK[+{|~  *MC1 "ckB.Rjv g1ŻAև#c@4x=J?$`Aq-` T̀3Lc_i5ֳ9Hv dy7BsPkwgՑp$"Q u\`XHou{,QF}Z辢|y5fpUWSo2öbaէoW|59ߑVbb`0 CHJa)+8KMl6D gNpF" f;PJ{&+ֹ]Xd]d;#.E]v$Eo8X-cɉ CF!ɦ6aѱ*'+)o#ӠWl}bAXA0QYGT&O9ytbfH14\di-5A;@bHYu,9QCf,Z2.&5 i!HgKw/UW8q떦&> pq[\Q= tJz õ;(3xbȋ#3yp[1rpŖ9C(Wo7Ml\1 5͒cm &HY)&ՠh GPEdU# x&%v{rT8\ @.q (<&25s3q^M 3ƶ)9&(a \&l%JAց4LIxϴ+B]ES Њ곡bTKI;[֦{5} }=vrlݾO-s?GmIgx88& =~k ~68&QY^֑[OkK+E枂O a;9|9ٸzҘσ]28⛦cNӎql}D^/<ソTǑ#d;}3-g/Ȑ\F`H#l+FXm(Ǥ߰p3gt n-8VW8S/'{B:v̱y|y@q,*VbՖ:4Xy1NJuce}=!;(±9|yGx_PӡPct9\ϙWh^yt={w_}E5sgvHWǂ_]i I~9o{^i_M>OZ]/W2?cA~ Ul. @ʉq|9672.s~om:R-Tg[&0;'xX憔?ARVD\Į?MUfyy/ 8'⣌q}4'Fd.C'6Go[>8S?6/=g=9U)MvO̔UM~(EzǪVo7uFxGfck( EGEu n ^+m"hEF8cC"|Ff.X%dJ#ʠ#i!g:( EEgEmL<-s`<"Rrv}ti5E.5uwN(9<6-BVEk.$ hִ":ה;-AK7 ^nI.խ Z+ P1N.-]wkBYqX Ŗi:e$%'cH YvNʞ2qi䎱app-*aÇ ݥ$ߵ]TL ׫dlr/h^E |jvnu[oN*9I4`='9~c+tl*)n8*4cܨR~o"{rD z 8b/VlM+G4:zվ=؏%A2To610%8}e~ d1fRۏ9˲TS.RS h@EfN9U[=lsqlYHyekze^W'ǔXULXFnaf֋aHpf߷}62lBV 4v,33qh;$n$5a_J(OX/,eE: <wNIlkl3ߵtܽyr+ 4.r簛eKu91z`Bd"Lgw>>%ڎc/54q{L2-yKj' ]9ICC=ב3:6r} Ⱥ.tQ!& t| l[ -k]\#(߾̇`&n^&Ö.S]}9ۣRS/TKFuB5zq~k._/l?>^'G$|XƱFھdۖ\8$I%R3~okshGz :Bı3ɮǒ,*) $Rv[IQ9љ"LӞ0[đ,'c NahÆnfhkB.>gB;v8K^ib8;GoпtK q\)PN}ʷerY(hk~~W n~vw:X:=gt9_W_XiO:?nЛIɇ#cߟVFS3hp3:s=|ۊBd@1~p+:eGW,Y<$ qq-YjJvY CkT襃-X#DZFv G>nJ'7X0| |pU*#@ɪXUb*K(#^q `4=ӵ1y&ڎw]99݈CZUNىpt9%ݨ>#Ù\_mv_Ս\o8/b%XSR M'YEJ_±MMPl+IʱeX~pm>ܱcּ ,Y{KX,3kƘ,D$p-UݍYcNpol/rlЭuKd*XƱ'^̮Z(ePFL,VI|ysjiz֠Shr(edX_YcRۿօ#P="(A1cpgNe馼n sS>~u_]crJLc!]kN^XLx 1U g@s/r }_:1OG`Vqd 7&HѿguiG;aCb&s +&eMЌMF 3Mː&FzJD mZKqAW7a@p8Gʸ~` +=xpF|f毽?}aL 28FƱo~MքDZ܋ysX]Բ^YX08"ڱͳ_d*Ǖ 6k?pS΅n9.Do_֝;YЋ\rJ^+l 4hy饗B;k˖uֽkG5AhhmTcC 8&)>6&!5 81?2\RoMA_iHy_#ׅ;q얓oٲ+2>_mc?O~#r˚jkt(cRoXRt/WB\-qljmşOc$h!M'fjDF/;%r%4Ȅwlol=ۼ 0- VήmHɷzS m}*BI.&1S9d8_{K"s 3|9:]?}k{SBű۽gzKyz,r̠[؆ ̯ q"V MrE؂+,1&L8])1B8!fB)#*e ǽrH[s+78VH^J_|/ggcoϹkwh+"O4 C\1=8&L#;!#>jigK®)9&(j"5`VBp6.PhSi%[pK.KkZ 18d. @Y^Yn8ɞ3?MgFz%V cؿ :*ߏucWzoY聄8AA +L155E6u±qMO&hD6l*&NfjnqrMűS[шp)/mTDz ]VGQLmK1;6u$Z@FثY@,xOfr6C&% GY"qYyGytcpc$b+1[, t5Uu–Is%V d1,2TJ<пs*ƥFVnY/pTԱ83~bUs`/c "gM(ꎁŔ<c|4vb{џdz|X-c1bD- JX3ȳҿbo?|y@j**m#ǔy=#B :Xn }5VA}(!bA{1D}?Ĥh݀.Z$~?)HGưq71e/!̻y(Ķn57Ц[D1Im8T[;6c#IYNgY*B{.*>zy|3O:btڕ a F +'NN?:M`ň ң-ʟlJG@F qCa1=x[kqc܅imHǮKy'o&hBB9^֧uJ`4dzǎ_/;:mfhq*9(UAhp/xDK$2V"d፰qV(d: 2mە#S}GͥuC3|>=ҿ 5D2AUcNg[Q^˚F]mb̎O^4_]y2gm>TǑ#d;}'wls#D`c#-.qL i(A"r{/t8jг.gz+0  MM|\DLm4q8pDy y& %UREœrxcOH&P2Q8a]R= 'Sc 0+P޼10865խiW1ۯx [wV~ A;%vݔmWϓo1La&ߏmk~/*'4|tbOT 26RX\%&kZXʝr9&FT|a%4j9B:~ljW}&g'j;RKLB:@",$I>Q*.(aq.YV>+6f%9r 1F[[޷#~[Q@2As)Txc筇tYh\Rpx%uLmy8L2jS eaG6)LH-Wܞ@`j F2lqJW:yp(Yc.7ETx<͡gyl$r vwWwOMLF/A9<bnHsի{,D.hE-RucW`U_?3<3̐oĘ&!/[&Qy>3Ok6O0rx_e@&/&X9PiX xaj8 @g]/(N7cyk9h)&4V\JNU] : OUa+FƋ*!vol_7LqJ;4l;֑qmuICZVIgGԸZb /\iFd2E3`aiW>%iĜ|jslNԬีf|>Ίh}IL§9ØƆX Mxte'xMU 3i眜V+E$9cZ|cpm(@5 F3 dڴݟW-~t&u+ȆEvQ~[ӼOZcc~[4ɚS7o!$ʽwsŠ ":*ȯr.ᭆkR">"My=6*+ۻë`\.@so3f]ǘ8;v X~'s4]gˢQ}ؤ9Аk$5]dK|} 6؊-Y6ט(!3-> tIz r8faȲU|T<_EX]iW sv>BqVQc(`=fbZ:߇^Iq:X)0su,ӟGN.5fl]jRjDFLPFV4|ҸF=ysrhr&@9եrEF̚]ȚIh<Ù-Sd?`)K-zs|7W jv&Ǭ`xNNmds>+VV>?=ELl-yK<±0`NE鐙YrR`m#4IszYM`|8 bb4PB*||"TY8";^ ;aK4S5,+? ӷVfV+9|1}ѽ,ʍF3.x˲Kʄ=5vLIHEٱA0/G5Tγ`YX8f1BAM;mY; X+{#3N%c,DɢթPF#x^p+ymhnlm0`aejeăE΄EYkfbv,T'!cm9˃ml8:t4&i%c!+~G+B]#@+:ɱ55ЋMΧ0)/h༗M|p|ÀFAnЉ 80ʟdXT΄} Dp>tZ90,1LݖD1۱詁r%Ⱥle/Qr`*fǴ/e,:礔;O\Ôci)A%-L nldVy4c8~0LMDN.5 {z{O.+m #86iɓtÌ[ntQpG:*/bTXl<wNJ-UeK(~.M9 :7lF̤^%]:pЅ)F2%o-=rF0BGuM؋y !ؔq,ah#;:9T95Et`XJa -:IPq쾴c z.Ƶ=F&c~pNFw)@D-'V"q;oL2cuӚ˽!{,%\cgML]3M>3]S"ı*F}5ɱmZ2']e;ɱ:NC;8h +Rrvfkۺ5`EAc0_4mmy%;d1l{̠BUسO_0->-W0hEX޶ }IթX{u”X&cԔchmbp4cr5Xn66T3 (颔f"Jy OǙ 9cO\^f+DZG&rXii\K jjjmFte%1tΫ!Nf-k}8Xk_`ͪ'd'6Ǫr33\'wǸFX&zT?^ m߃JD[ՍdLwScMX#@α͛6I(0X/3P_8AlӦ͑cc~~A\4%;9Mpy4H${y=Xg-hh~\?ϣt[/w4$P,cofxIƴ9k_fpX)ͱe=M_N(%]86ıK~=,|raʥuɻV/]gf*!o_J(?/jFp^{;fa0jKص98X|қa,kn独ť'wuLH :qiҿAN\ݰqlDՉvU!+65Z88zp14; nBx]% ]LUuL+.pS Ȋb~K?c9"VW??cmaSpaBFrLV ɲ $F.ٮv,514tv=/-}nqhc?WoN]ƱU=V]iz-^)q 0&81oH^⏂!Qm$*zy!_cB\ƱY}8)iK5%JJ(BǦ.}ދ62DcPx{p=O Ɏ Xإ458ou z4 h;PJh%Ċț{jJubóc \L BGۑ ow19yTHhh9?= ŶMz?mysE=ck.l!+|5+]LR~ЩiK\sY^ᓐ+~?$s DTqvl~?v/] X۟r|rtInlǘRﷸ>8L}L!e궤(:V+@ZrOTdX<Si/>dW]61=5{QxxxuMMۋ8V%J_Txt~#j]A".&Q. XV.XX=&:LVE lf`ewÈcJuřrfG 2ާF__be)ƒ /IDZq,j YSlR݊5oY1!tZVk$xy~9ڱ~cz@u@ ^ߛ0y'wLvrpN 'TЎK DuR,8tzXzvK (0dor T4 Ϣt̳n`1kۓ;Ft/0&519V0_4 }57+9HV =6۱=oDQ.=o.0+n11`bu-c"~_7oU]RBZQ>cwd|wZ_R-pM>F`U4%Jƿ6b.d<4?1&7196wfwŃh4*Rꖊ_DZ &Ӟ~7:t;tN +:1 dۋ%cw#ggvaPl,2xq7ߜUm D8ڥ|,Dp c SmV{G5N"4x1į枣JMܡ~QK7j686'Ǟ\O늲c17wLVm EW iZc*Y., ([+7O޵lYW>[컎gxгYq'9"kAc{&t:gꛚ]7j(JYPq쾴c Z<3>-kc ?nPWt _.YpH9\S .,?L88@k %K}OG/x'9J{fI0QG 5+,$'ciXm&RTvl@u G(vdH%\};_1 k+`rSnF 9ux.2gU}UO] c`W؈5kJ?Ql_ɱ9},r̳Θs,I=Ǻ'b;L?!Yldja[Z-X#$ʍj2L]?^h \M)(/EE:1Rlte4s"9{Udc85~ٲ|.Wrcr07h^1Taʳѕ+vc}8kTZ}jb2LexiX2>fLz2cu 5J" *WR@˳G%Dmh#VJY9D%yG~Gٮ/N;UgmJr;[˂"LɅE@ 1:n XLZ6'ci온ӒO@4\xl2QKS?Huq՟*6|+ȷv1F^" jEDXTiL~bp/6?{gԹYp̖ umt+hJ;)nIEk:764D>.8MOQ aP2 [g;tdgtteǹi}NNޓ !grsD ?9ybFC}ڱ]wfFѤD4k( fS*ô-c{:U *^[^Ɵ?<+XfP#TO 9|c4zh<_Bp eA 3gqb&^!xjf B&96ñES<'1R qY)pM5 xAAРtX(Ybȓ*g[?+[ycS)ȟY(9nq6kFұFR** -Ť&3FRXJcY9x)\l=*gtlũd8&[c1^Uƾ@f4' rC\8+vXyulO_6ϰcdQ86;sL@:χ]&37e`EP1J zg\#KOc%1揱,^;VDZct l%8s8ǀpL8'|/ֱ\d2J "he#s1'x c1b@Äb,s:w?W̋*fþkAZc\q;"QOEhϦcyx͉4D،1mٵbp tKN.>%HrerS{nu. ?xGrѳ ,sgɢ;|[޼{X.&cɗo#Tc~?:#Ï?ܽ\<ߓcw4 ݿ߿|1p Ѱ0GIv71io2F1?#}st陡FE]r矟Oy|c[;'cıne޼ğӧ (\r' ns̞?dbLjcSPէrpg l}ݬc[㷺W-@CXŽơ8\zfMm%R,k2ddiroOM>Kc]s揅!&~X?vz>cՍ4̩cP*ό?ñs]9-TM/{{K1`c- ewr-BP8l2e^ulzzִxl4lEG|՛elՇR_GcwoվByXj,m9ǪkcGo_ZVQu [ Y.sxjp:,}aXrX;–1R11z48v䏩iu?]5<1 !/Wbcc=JcX28͝;ru2z`EGa*>^K3_~ʊK ֬ lm-Xg:8۹8oz'eĂ / Yz`*ط:1FFvB/H*(B_`ky9|/dӡro{_|ުkcx1cwcp8Fs9lxh4ٻ^"ckcb bQO5'99*?Z9sItɱ\fw'ߧéciY:u}X4jW摦Q']Ņ;xӁD⚸""뷈zs+?z-[n5YƔ'cѫ]WT)T:-1p c[ m Zܖ:_28֫i(R{6$B(,1cXg8c3%ހ*v?P6ǖ r I*OȸdFQ^_WE"{1aqs_Tvx1Xwh'lh:&KcQOKۓam'{ 8fۺ`Ǥ1M2:dƃb1)̿s[DO:Xf\9:&DƊUWe|ձ $c|HL+Ѽr2Hskx<& +c5ؑz<_~#}EMYr:`Dyw{g+ >$spṉm5%\nnHnoqb&iWUxoc>A3ȠǙBԙc\8]6l|LDl6vIrlIk'}l1tlm-Fkph7nS*9$p1dNHuNd1Xpe'L_zpme|_wAicic@2:J`: =džk:%X9])tT(ܲ+3P=rO1^҉'̒cKanP.ꖃXv(,>xtD958tmx\X.HgliiaDQ9 Ld7FtbeI- f揁]H2 H&H*xto"'H%Q `!cs;JsQRфu [`,6/vX"X{y':&K qbG}Dø!/h;2X8nEhp̬]Hp,%-_~J֑X?3XV&֢ds;F9`T1s"*fBK'Cc+2UiB3;_p^!kzWhHےzƋ-N'tlDwt4cf]cIֵ+`!"fN+oc~L0{1Y{;UW L WZtsғh;dxұ܀ l1@3}9 0LJ͏pK! #$nB: db%TO9Ol'͝y2%mi:o4s|yUOEma]zxmɼRzGfKhiͶRs'؜^x*Xa}̬RzGfK I$Jcz-4 >n3LYƲm1ibsY܂ ٝ[2elJؒC)[Jq,e1jok,cYƶ49Ǿq^8c3>T3rYƲmW%2fZ̸L386o}}:cYƶ=de"xk!is\Y>_[1LEH*miUe\#+ƘR8fƜs`,v8c.z5IJz'9cV%pڝb2͘do./إ]Ϙ8DU.c4/"z!I27UI$j-|j ^L,cN01gbLc?%`oF:h$/eKbzsV;h¶U]V4.ӌ|J O:khI-S|FcZM"2Ew֨ jQ+r3 L "TD(|8c7>`o Vcl۞QقͲ(6w}Z 뛚 f vEOakmQ!l|+3&%El=KJkleҚqӋc ı6ѪPm1&oOc,fW0r]ﴇNͯwո"ěLa@""ctFQc=jYQ W4)jȐ")czgVB ڝƘbD~A6 ͭGZ'wܪ=`cL--Cb0 ".N(" ǥ%ȘQLuP7v'OnNT cQ >+zBQYm/f .6`PN9el3dM:7\gtԲczgǹu:XyqÇbelcĂZp1Kd9p zogIxOˇj}2Y *Ez<ylcL}lE3m6W0>QR4=`8OMc@S_9 ꓊rߋrK"jxf.gur71J2鰣,wQ|E2vM %4KFϮt!-f^_ 0+k+-hdfT S`}-Kgc_'}XϰRy< d/ZڽS +b-CnYS׃jbji膌!;(bE2lbfk~Eˆޯx#~ō3V{gOBG\tԢeLҕFĘ+ >lRVgv#[AP1Yn("脞 +qY68 c132-oe.Ďd1Hzn:Ke]_8$]ΚtgKG-YFPqxɄǶVic:wԖu*ڹ2 09ehC6h+1ْXeU_Q ђ^ׂw&'Cn<=99=+knK~#G)0..pL%TbBt "7(nߚtgKG-5e鱭D6cQ<b,^y'cC%qKTAc1JFxƾ-*Q,3ٺ~FK>_i5݊&hjjt8C#.K&TU]U[rA\(aĘ7/Z%#.[:jı#pEUO)Ќro.~`apQ_DW@2&KceU':f 3 83EQ-9J)M_aaǎnNb\ʩ,cq}}}]3NBϖZ"jM&0} XvSDSaHT#9W(f, fB} 2`̢#f@ CLW rv7cFd̵Ƶ?\MV+cce6u0ff:D=Ё(cbhbQf2AZƘhp @Q a"g\alL[y^Fڊ^҆ۊE1َ&Lfl`Fԡ+Z"'BD:Dn@#6^1™\XtL޽E r^jlڳأGFOj2 CԮ6[g[ْ3Fbf4$і#W.cKC񢐶iq-?" oQw},P,cw"cmCmd̕Hƶ=g,^& M9ieDj4CWrƸtZ+Š}-WDŋ^_Hm7 wͶ*fۆ\|?CtQh'OHڥqrw=C71l ngЕEk#6UGЉEڪgᵕ9s> ㌽}gx@2|8{hX̾4aEK' z&_>%.}=a0[-7Z߯9{[UڒZ勜1KK{Gw{nZ`C1қ~Q6K=4@`ܖ^L'xjeƾm3vt'z10%\q{[}HexFN N ŕXx܆)/y>{UJjjI32u+R`l0}ϰZ{AY q᝶KXٌ3+SSK~l1QQa!?6'PPW?Fy=s%b,Z6/ZgtԒhkh>c,2xov { ?t/VW|POpPlv1qE76ؽ`IɤU[_bR)Baz̐2eFZ/c3ĉ/fƘmсZ426; jS,cHGkc|":wwk_vR%G I-#Eݧ06araHm#iz6̘6M~@^.Q^k3Ӧ-.O?=zE!%X1}CoRur6I.T'N~i]" ;)ijvP[s%xS ǩL d2n-gom8zēs1]|(cٞnc_"BmCBh=-%)`'YƲmA1 äD no!/oE$%b;0v4ئ̕Or,cHZ(~in]|(#S:$5q6SJKlW0ǘkcE\]*1m2Ub̤^ Υ|]鮜,%+mũq c~DZ8z~8c1:,][)yI`cM%W92@p4!}ֵn14Wx?!_Zƾmbey9z!I2ǯm +H*Y[Vڌ=ŠmW Yt76xߜw_6~_YZj_F{g?K +bK*]z#70qIS=k |!\hk\߃ ؂Xf3~-f<PyXl.,wc%ҕ ў+4gYA5Dŏ˽ra&4}[OϠm‰Ϡ.dı'<[,'RF6K]}d8՞k1yysh>1 |n11))FRE-ѷE$$0!r(?$ՙ\_S~0KIb_>jr>JJdZ~ _ID^.|?F"O==_Eӑ/Z|rI" ۩ EBVfLJċ Fd_K,@iIɘ"a璘>)ÚwI}eLhaj锯0lvcKL@UqH@TC> G$E5^j[1rCd\Q @.$d|;3Xf"c6c|64@y)MړLx6M۵HeIm3qF($8tB,T $11#E|1npV:yϹ:IcQ|T)&)4sL(AX4[Z9[E14ח1h !2#S =jq#ε@~]+jIy6.e\:r採}HmB0 0v4!!4qk[ +f:1L TWC4 GuF;ن$8fDY1$0Y/"$Xoc ڀaŁ9x#IND~{>\穫c>|+k)\vz)A+1& L,ګ*c N`W^X͓cl|3rߤcj}2Y e<}l`}!ƥ3h /zprg1܁6=PsF1 :<'喘ߟǫ0k=<_ْ3h?ƘQM66fJ'R+,^@j\^ŏ l@ɧ,7Ĕ;mG0nב&L[~:U)؞& c>0fc^?\?#..,,>|myBZӢ<`i`Lv[s}T "D("PΏu7F;={F%dȗl'hz0e17̋gxgNa`8->"ڵj~UUt r  Ehk~04y lK]l2Y^Re5Rq`aVғ3E 3N8}>vM2)3<|9Otݎ^l "$)8ߏ)Ǽ0|bI2VA hW-i;gN hǙ$靧S(}aVxtW7q LHë޼T}9 KK Y 0cKK*b:=_ݼ+c {jKݟJ4(1Y- InO+22Fpgm3>P7ysC6,%R:~a#cv!iOij-K%afXL|4^fc}rRX,?c\]59jS 8s͘`% U/+ς`؋)Ҷ7Ԋqm[Z>hOݤ8/mpUV-/K6$B< <Ĝuyflq a(cE0^1f h$KI>4&c\=psϘZG9a˔1#j` D!:[p1/UD!/zFťb#`9FK&,6}3wc%aMWzYd;@:qyvMz6D瑱ֆЍF{C\Ӛ]"L9^DAۤhbvy=|oĘ K|{Ym:vrIgQΰ<&ngWMWԫgN*1:ۺjfWLjOoMrA݇w!&{P0S|i*;_ӟ<^_2g,awc`5>dxMW-.cc^51:b^ [1J:fiZSv,YҭpgWXodjDӫ{|[HmCk{rZ$9?U[rZ=׭&e9rZ}G,ƬFvsIǜlO?22VrZTфtwLDfA)Vڄh#1Tz)t<6# XM19wT833JKq#1(M.EKuFsTʼT;&c 잙YRe3HLR}V,oY'g8cs^*nR -WEQdwL3oKd̒2oꍌQ$ɥ^r-y:3/ y#c`-330P:!e y1>1T1.EKuyTY d1TchBicNp%grXzդdN.z][6B d_ZAV chBiyIə잹r^yڄh"1٣KQ.c,RIRYcUQ <+c%^iڬ)ߏ9G祂yp8/Uvt#ߟǴ;e̙=~4a1cOt Ejx:7Ae6L|q]G/ՇɶdcƘEI޺3U2T?ѱ{=DZS*1 /nmO륞Qs(}:nKc,Y1NgiW=I=%qgdѮr![\rLLi4׍:س3v9%UN+96)1Ó~z22f<2cm-./Gt3Wl .2nNiW\Qԑ=̹x0Qrc.cfq&[d-.#:љ+ 6i{1%o O'#cTcn/EC)I}KJ$+1 Sӧ.xG8E<2VcDRE&\$#:љvIfL dyř.35Q%431F20FbF,L>Ɖ(yqgb=,9JƱTō^̝(*bVL4QOeZK5hc%Wrci4l1X)VIZ~ g,jjZX@Gܫ5i[Øa\-L.nWԋ="Yy++ˋo?=i<}uݿkotzPȌi[3{_(c\?)? f,1<׷E"mkKE&|IxƌT5ͥaL \?mdZQGgh|@}V~eٞ`83.FۑT5rf4h;eh0cR1[\H+LݗIaWۭʘ+s- ^ 0y􇻾 F;~Q_љ*ykFehf+c-21(ډYhhދ_bYzW"Ղ_[Eл)Z::24F\ƜyG:G+?uN]“ۡdh1k+ķ1Lj1hvJR/C3ke̙wzY1Ƙuʷxa1kxXۿ='h;:>+;!N24FgLzu e2J0-´O#xW 1, ˾ӑ;y<ݵ/&d7&| FJ˘eɫss^r1vҥ~ $*cگb(̸,}6wcP? /a۷?z6b=1f2F82FcCHQR EyKWaoJz뵓x!e։[|}z^ERY9#Պ.Weli=?퇱-,٥`-j dfe7  Y=1Q}rGMc4WB;Y ٣g|_8N 馷].ki0ݰ\.U,W}RYj) DWK7[lR[B1-FJ}39yt?w&ɜ=s~<<3ufgSg6qd_Tַ6۷[>q.W{ssvp>s,4fQwBOc+o/k nǽ?hW48g\*M'!c WVj5K^mJ'.~8\SUXklM8lL%KlE\*rƥ^=Ra'Tcasl7NNcԽb5VY/f,N^bLs%T^ڲ֥YcD3TȮ4ŋ/ qFJ lc"Y}>1g\*j suNc ajDỨ$\Ă{.ĵ MwYcQ);I63,|{Oo>ʓ?$/".U^exk$qr(;.Nc Yj^+,C%bLs%-0]hzNh5$)_4 Mɛ+﵈K%AP)ƥ*s}iWw,o J*CdW_ᏞX`Bc G#zdk%Y'Ä|c#4؀KhhHZfW{4v\g`cz Uc\#3?yě?Bc7xGh-.vFoqBc7tKErظTθTZ1ÛGǥБڲƥNvƥ+4fzxHTfwMƸT4dq1KIEhxHTB<>&0.S 7.vju"4y{\^Ku7.vjknx7tKko J՘qvu" qoj=HRY"6qUcBcGǥ9oK%$:ǥR;TA51#R[a:bظTN0.Q:!BcGǥRK5 K:TK%yd??>7 RGo<1ÛG#4f~x7oИ#3?yě?Bc7xGho<1ÛG#4f~x7oOcA]hU AUc@ 0q(И@`,Bc "4&И@`,Bc "4&И@`,Bc p%|Lx*sF72mfhőX3eiUcXN5i~(=.Ntl'Dy%=>gYy \3IK2L1%tH>r(M_:oSѬ:IP@ʽhB-C34|5ј$1/) <x-I)S(V]%E25K+A*M2,W6匚;`{:SyQ&3.ũCʽDHh9w? ؙ4A#:#˘H>Y_p,נ۠Y#bm+UL(U3f%?.&4eAmW*ӽ`Ǝo>u`.OXݝQFNEcG# ,NcuEo_ט4 qM(P)tBJd'wӣPzZh=E<|N:UZOA<?_M;јiјiјiјmlm1-1Ӣ1~+Ҙ1-1Ӣ1~+Ҙ1-1Ӣ11-1Ӣ11-1Ӣ11-1Ӣ11-1Ӣ11-1Ӣ11-1Ӣ11-1Ӣ11ecM轣7js[Jxwjf Zt+qٍ%ųwJwqzӣqE'pr1IN,N2szStz EI}_YcTh Т1@-h Т1@-h Т1@rz!7h,gh,wh,gh,wh,gh,wh Т1@-h Т1@-h Т1@ƾC3 7Y5տ<|+JpQ2jWWWi~?vo/k˕.t߃k-< 4 p$[Im0c#_1AP}>3!pi@PiǾSqqWE ^ױU'syX -Pdi})Csc+C;c=EH8}c/%gS0eiedYP^u YS0&'I&/p:vSq!FfAYqMtSZSZQpCpC12C /3׎"cXy1yS:;cbczCi :F>N+ncqЩcz*̷S8uuorgMk S`zPid183_깳VO Ӥo&1pꘖ+tP,Wջ1Zy` c:|iz48F+1q|?/e7%֛PUAǼ{?̃bc*8LMtc:/ ePc윃ch(caak=!mplcvv/q;`c~l=ZOcqɱ8f[ǚphvn׊_}~ 1^+V:8uގi=AF@wf^ymj*U1qw_(Vct018(}1}+}ӻ8ubAXžnyE1Y*tk`B +/tL1B +/tL1B +/&^f~χEENxy['u`,#N"/,c^ ydkş׊ SF9NB{߱;":2!Bб;68C,R6Ѳ/]|,,[+ǖz-ShKC01$ M h"1khS=J/M'$IL@:ҟFPc9vx1ڌ,^yTQ1ykY^ Z53s^+݌DBp'XvZcaӣOتӱ{ 6=N*|eƼ+S RO)N˦x~Hz%`0 v`ٱ\CG`ٱzZLj-x])^q|xNcױyċV] XE4±om=2yAaUa" 1ONv'Xvl+{'cl8M?hMvu,H뿊KcmFbijzHA Z$c{9V분'XvXױ(c̅$g1h|]X9=HqʋAjZdÖhax3hOc" c6 1G(Ǖ&[8w%H],Klc?k cB>;6e$c^W 3v}cz<ѻX_lܱaH>+U01?>_p7lBe }<xhvcr1.%R% EBWG d18vɄأ_⑮2/1SCȎ~2/Sx8SC؎}?1]ec_KćQ%œ80o#ߑ@ܗZcC|UeޛO+v5[ 'xT;Һ|jjcૃi`~o08^21q!1ΫR~U2$\|V?97۱Υtz禴r{_̙10r0qI] G"P^ua+hڴiƺRμ;acޥRyvsиfMķǽ~ͽ~|yqpmdb`ȿ˾khf][Y襓К˯M<4655211{UDƺɽqRD4H\ydWΑwdNEǺŇl*Oľ5ee4s{}hkU7mR)Lvm]s]MY0.齼۲sodOϵQ rEܭWu[j024Sq!gİ}Pڵޭao߆ {tRNS@fӆIDATx lWv`WQrm\'\Qh)ARve҃DJ[B>. 8lu=$δ6EҪDEwjO)Wtmuߛ/glpd{y&_?@ ,>?IлC'$vz@ aiݵ+!*ZWB̨ IFZϿ:mwcP>@ ZA DKyuǞye ~ǟ~#OMoD=I\Z쉦OcvlcpSvJiQ(Z[ԧh.eјUJH]2NڶS_sAy'`#M yQg}>;݉&}PT". H,mQEfڨ 8 j/2P]&ڂx'ms0;քs(P&i'j(P9;9) ;CPA( 3\vh׎&"4B0;0:K0I$ p;υwd%#.TKӐHӶ} 9_Z'miEL:#luT"9&EU١ox!Ew`Eck$AyW5jSsT(3P;* */hq-2LA/id]"_&"t&8Lf42&jV3BzP;KZZE}m)1I5e)]PK9O";5v)JK#`D~!:hccJ r8(㥼L u}HB0)My1*BE-S-nhxSPBZҌv:(RD5Ʊt0$4s.CcdX1cvD[oubPÌZPe}Ykg2Dg:Ke!!;fQ&APoo`L? !ThGysTg!۪5] H (%qF)ѱEPP#NS1lY(堢&_ֆZGem,5%D9v $Q L3JK4%^)_Tja`PPSٓP[kO쑣BUZє^1%Ekc u+Q˄(=Œxc.\:G5TrA<"HLNǤ0]z]bL1=lLМijX 6t1ѨDEQʎرTlb0:aq= _TZTNh@%Hÿ~vlbGb6r,|?&f}gB)ߝ&a$ȢRJp`FcWk>45557SX =<0nj!| Ì6g}0eIW,ַ!Fƴ&J rQSRӗ NM>`}#>/Ifj8vCv$iz{bG(TvI-pLӫıHF͈N868P-\D3&W`-O!r 6@Pn&g4 P$N_hZ7n\1Y&$P)&n$g[bY=Xvd'052t Wbgy&X GXO a1H9F}xThe`\hn!V4&WBqOyXz!觹p7&44ˍ"4XVTq@ T p&' O BWt>P cBeQ@cJ@#*X82WW@ql, ܆A*=/kBP[wm,Kʣގ\n,bXU冰{]7!/E.T sqg'g?}sLjM#,ȱjhylu%>@K_s_[ |uu|t^^EnVLx}B*`Q-JIP;,w%E(_<#vYy}$8]wq,RԽVN1-=n8]^oQX8>*F=Nzbݰ`>{RJ9gϾt݈*ұ>K J0" PV+QL(:k>6{R肓QJ},:EZ j'~" Jt , A#?Q$ҬcnZzpR%^!>~Wg#Gz4U/vޕ*BPnPNEIӖ U7GQt{XBQ<(xG(uR9; 1>tV:mB*qp/#niOL՚D*Ipު,] 1]8)%h:Y!PTw!fʇǂ܏y=R9; űe*eNn@ge=[#83lYRiR7+nd60XtԪ7n<|QO" rQYe!\q4p/AP{CȡCEOű*,U腥UEREc*A3Q@cK B% Eq B%P%@cJ8aZ.j}=؆K@ ->ZqG Ž`ִX /ʴ?3E`M{-e?qw~_wx{Ń{/}a(@U8F(BS44􂆡!%ccJ9mV +VnfjljWqLTlP{@P){6;x}إK3 60hf<\|UX`; lqfしSsmv$!e*'M ֱؓ7 ˋ/Q/?љͭ+t-3 E/ '3ÅW{, gc,bjܸ)3f4uqc/Hmڰi,ac ) {勺>{qlM³,U `w}ҙLc!ɔ MiZW6}14Yf.6|/~}n>/9>8}g8rphh9ʆWDcb'ൊE7YpwQ7%Dǎ9ēر%7 L`X\əDw况[W4`)4&_2*z9 'aw3Qo~\1;;97LtlIYxg б9$ -1#<|Y{tmz@MOOc*iJdž3I)hWE̡$y']W_SVh(SrRH O\> ɱ~1cΕ+xuY~~hvʕyU: :)5Dwu  y *I{)P`dr8k_c׮vST|p\ xȇyϳzXp,{P7wk;\˽t^QFW\lW#?L0tLzQ!ArP2U1c#D+ftf_ڗ_^MJ;6 _kkbg}^6E¼g`o0t|f;62Ʋ޸cl}i-@[]5߱ͳ\$7dO$?6(+`y'-ةoq+VYQj$!AE1:  I ee&VRw/{~Uw?yLO4 "}9}OCgq_/ߧ)/.1f[tۋ4vB?)_7yآ3ʄmt|qM{妝5-%+7Ƭ~R?7՟&0:_?Ҍmtӿ;&'ǧvݽ~z&[:ΎNN5600x>z ﮑc###86c99YMg;.۟_Θcګ,fRnL[[W[ֲ~嶆% )U ǚy/>-"N8YmKfCC1so|ZآE&Mo_{qO}G%zo7[cV cFATӡ%:&LAر ]rKzf,J%K1a„5e=1.&L~ffĹV[U0>he f.{.L0sX(Rvljkvlajkvlajkvlajkvlajkvlajkvlajkvlajkvlajk4cδ#nwڞ5oނ" g|Hk:1gDKDz~1W|S-ȋ,< wZ7w ;9/n[aۘ>ȱ]>αt{}%N_+WW'z-ȋ<&DŽa}}Sn`RSvlaoV=w|>&SR J6OԐQm7aDm$]\0)&7Xg0رi9<~霛FxKIfl{7xK/-^6c$Mάww7ۖ!Imz9yt 2Tۻ)`F0 MK'c@Mi \Er((F-1sL9ex-3O1\e&^&5iѲj kbfmB//Po*t@1Ki<ڂi3cU  :'rQ zf$ R"cR)2~t+2MŽ푩mLn 8Vh8V4*b䂆ܲvM]\LZ,]hX„bͬ,<Σr(FϓczMC Doj@'kqLaVzwU)EnCEUJmQl^5ܦ%%ҮdME{0d "7H R@ ˚"cjw5O4V~ՙ;vja߽9r(@rQQpգ=29Dc1}}/^[-CFuGPY>-l>.CAMt1 %rUM)<9[rL6JJJvB9ho0GN_׆Mm+rhfȍD Z4#*ܥC8apR ͱ [3fXAM?:cQưyihkBDT`eX1]LТ<}bq71#@@Pn!@ iW :ܲf-ן(d** X%WSlxGNꘪM+7M%ՒOPOIZDJ4q!!虚m۲Q[n勰L5-- a*i&j1xЖo>#}h>H1rB2asE-0’}g:C'[fl8e62p21rm,GW'Že/Xvv%ۣD/1.2=11^_NN>rni؆'!v{UTTMTDdߵ]''w\mNODGBp;RfX݁hxP Nfcڮ(9TKJ!ucq+cu,+\oG* Xs8  6 9dqc!s{uDJJybNŞNLe~}j!q#ՂʸR-E8}±+Ȧ˼ƦٱJP?֊ R˱( ʠ SP DzaN"p=7(,H6(G |Xm$P,>;1m'O뫊Qsc}"ktrʣ1퀬q iE uEX^vFf/Cx#رV RSu%$cxgɒ!%HO3m_(D2j0"3V& YJp­N̊q0DDbVqZw^א-[m4`lZ-ZE(˱/fJk/ln6=>lı6J-[I\ĔRllTtca[Ñ1"B #XX5ơ GX Pƍmn[Ǧtq1$1c;W 8}@eP@e_+T<9HC/۟6M†bq!`}cOCu`^=ē%D*Oyĸ+;O) Ivvt6$R\3U"SQD;Ʊsuuۏ5}rdn^/gϞn;qP_C9hf%#HNǀ0Ʊ2'#ʎćd{1p8RR@d\$<#|EcdX6 }¶CA*[]D~LX@ Mj/|8ͯ3!__1(iav}<:fKHFE@,zjԦ'UC'%h`NjhP4`%`sl*[ZbQQc6d}}hQz.fX H-AF˲qwMMNNn@㓹^;\ *J+-X8LYn 3blg*Ynw!:T;:[oʊ""h+zq#8Y0lvTX3L-MoctNJ.݌~b^h[cpAA6&NՍ}#ЊQH'H4B Z+M,ʤ[-!c혹bƔA^?mĖzc) 8p R_PQ 8e;jE"P:B$]+ zX 8ˑ:&\)MM3NH'H@Q, 4%nȱb{Q{j0~ [w|f)3(9`"yfcGΘC> a UcW"VɁ:(h#Bm2Kz|kAZбސ/U |6v|5< >Acq9Rrbz֎C8DTF~1WL}"Z=YC[1o cr_*ۭ@$- jBA=s%1+D? ?/5cW" Z_c~;ɦw,;ka'Ĕ[V ^ ;62v J]0)6?wȂhN'>2'8DMpDZs[2>Or 1HVv,$ Ǫq,T %jUBcfZpq}Žئ>c7v6mXٺ ?Ǝ ^WlKO>[]Y~˼i)`ρ^o-d(ɠ&E,*:X0Ng9O<;+q;>ʌݽ%-ȋ<:sj}sxVtq,c D |MAܥP7cODŽc59cN^/>Oˉ 䛷 -xm,ވ7^F-\j:"gWUJB>?z7gLc6+#t>iwFXݱCG#|SŚ:h_ق~!"V޲ .P* m#F/Ee"QDVtl˙+T֨Ѐ"?ncǴ:5|N$΃-X0v{{_ac*d vbÎbH|@)x\XH)r%r}8PP[Asnml*W9Kj^iKۄcs'㘸 ߍq+~h7~s,T^;cǰoJt [X%(U7I -boO1(\A v_*dܶ HFQo[+">1%7C1Ma1mu cd,> dC妪~y<'~DN(] jP _t+dm@m `1?ֻ&iLrky4_ 9:除ϧQɱBR㎪đ(Ad@2HL8:j3r?1v^C/ 10Jgp.rL1ci>Mku1΃n* ?uPt,b'Y\WWxYZaX,S7L_F]xQ\+= 0FM@vQɪuZm w_bɱRBe XN (?;PA!AkNJ~?c";΃\>?pkΑck[1A'ikD4E1-Tp8TFEQؙr5b(^•*ʀoҖS,u Ss̙9ԞNp~/+;;$ ;?y kQG<&:ZDYV?.0g1"W%tF`K\4q4tu1TG͘$cٙǟ,z]V߁ *.LǢve"l `W@{@d18I`yu.3YUոDLX*:O-|wCBQ/R!금a[ʈSjg>0:c/@sry0 Hp>"_> I$/:Im/ ]LANm[sDׁ [E@9t $j ^)6N׈YEEfI+'X2QR-~bPl^c'fŖ8'ɠw|qI4T\sԡRR$VEf->]Ŕ )+T9 Ӛm 8P2)hp.AA:mj'Rı8K}L1XtqJ&l1Lܱ$ilcq6 >ltk~Kf*'r9V,A&&\0]iЋ`mE| Z+ )n'#&mAdi:Ut veA mӢ>Hq, \WC!oujsc (m.㇛T\槈c5I5$){:#ǔ!,)ff& ̌TSHp<:RZu_pNl|wX/NtҜSY_PaP,I,с 3 LVP F1z[iDDı]Kvvbߏ±+#uFwρ@8~dXw0ű6C3H7pJ@0g#X `Nacc0lUOI9=W쬳c.BHp#륽0P<+6#u*YG Yy?6Xk>.<∯3"Q@N"86jd[dTj2l@C>Kf%Cs̭8Xiva Q5)g[̹J!E/KXOcdY'` 1VRbb}~S,6g~s!ı*n$±yI2Tcl #Ŗϋ<+Ȱp'X5(kjwpqxp*UǘSJd(xA.e*Fy`MX2tP Qi6g۽[BM8^j~Ǡ,[޻˸c1aH )pm,K HjyD B61Ip )|²)㘌lNzPtqlm96ˊ)Xu+ĝ,0r,# ֌lmrq@9& sRO_ %\RagJh?l@%d%gD*'8!yK d9!da[gϣc;b{zǸlk1Ҭ5#fY  ۬GpIv`ahDB$a %#P|dMgV$N,ű~?u/dO߯>ظy{zݸ4{Ro\cGȌcl삕 1c\dYgk(h {VƎ͘vX͞؃{Yxzy$+G'6ʻ񄰤H"TuokJ>s8[:Rc $q3#:C~?Pǖ/Үqgƴ./ܽYk!luӯл VlΧ뚯\b/{i{+8$'Wܑ9/;"C~fc O$~[ uå{k~%O_?N칀 =б{;c`ʢs,;ЊϹC&gvvגt8!ӐN[<{P/Q:6ۺaTZ)yr6?L|aKW#9vvsce\{sVDܨvoN~fN{O[oGcE'^?񲴲!kSjǎEQ:͟XuLwE-ӝwjՕz8V-B=OǞ ụ<8S(ĥ7o':V6/8 Ǟֱk?"T Akc>'cO~ۢĬ7j\zxH [Ǣ|s~9ͿE~lزgz/Kn~nNS/DcrW4ۺ!cKA¢iNEccE̍ߏmS=(ܳA[{nǂ5iՏ[$odc&|ksp,k]V118&>hDx:/Ӑ3b8yf6>@^H#7fmRt,/X_G: fGq92gcS [nTҳN4`ADȾp_ GIYYO͖=5JȔ';c;-S$6`ҭv $pጎE۾1VҋghN֊DFc(Q8fʫ:J&>1L]PXSvյkq315ScSDZ[ ZǸ͜N*+N16uH V*TGOXJtaBbi "`ATWXM B\-v6PHgcXy ]ZX.}ؒ`UX(x>A,AұMPƪ cwk0L6LBNpR)qP9N%0&Y'L6>TQQ%J`@q19uIz5 +#{)(EU<2y?B9 :xIJgXBNcҰ`o]QYQ N/E,]Kuaَ*^9;IuPaE±2n !]2,}ɸH;2|0SМCʙcIJzINZZ͝[.--$}AAs:9+?XC#Nxھ`a_;^K▢#'"\ۤM6DZj &"^`)U&;MMHTVi#y kj|^ |iѕ мE !,?-xpoxnc@38fO/+;.LH/DCem[ғx\Fxzl(~wZ>BVOnh"#+AsAklPpII@ aE]UB,ρO*%DŽb]:/ 4n9'|V^~CV tD [9 d"cV2Cve'陳,rgwv-2Xi:{zu@A#qMǾן)j?y"AG++r7_O>WacsA !.\7Oq(B N^*+Q$m1/蹽iljGPYq=~8#ȇĸSe CW׊8ٱTk$s_%YS؄5?@7#}Aݍ[;mq:4RSia~e8)XyQ8j.>jmVNVDD~T۲<1Br29ܝZӗHZ,Dc\wo2rݴw ɠbZ-cѺ(A!YpXË;ڕ[c S. B]Pƨ>v0"5nΚX8[[o8O?#pqcoŪ"PyoP>qcϯEϿW(#ǨN5;isv}yvIn7Q<8cߟ9Q2qʭ}DpDfnP QlVƬE>=@Rl|YAh&IzƚAP0 q ʚ䤽R`_LO TH/2 :Ή/%̜:+\2O&gfیk~x#8 ŘB@ OKި Su-?~>cPmo5>ͺS_͛ZΧe//[-đG[lG[Y1'☳{V⑤C|%4'cBn\A @0a 1+]hõ3v Ռ,cBE v ;{ $_k`4b`B, /]gů'Off"ccO$8sL1yXYO=vΩxj6}1v}8ޛo][H c`Qϙ}OM'c#8kOͧxc1|T0uޱn~JC9hIbbB ;,`9K&%h xA㍍t{=_5RmCCm %~ne? -mR/eLjZih2~}},1Q*UWURxsĞ3s>kqΏ-i]ˑ ;{ޛk6sP%/JIH|梢OPxrܘD4%IIhi3CliA3; :򱍧 6!wVDWR[/+OHx'c!)l iWjֶ2;^z3O9^zTʽ\΅^/$_{.wjF.>%=(xaPxWcZ?+Mcލ%8ֶrΜc<.,+fע+5CR&c/N&傂5"`@7' dbKDZRihܲ\LvbN//pб^8F5M"Y7 i'(>@5 {c?iű*B(O>+RwƎc뵎}зSK^фik6멋)oE֊fqR墓ۥ ׽`ArTTknSsrG~!"!͉)0ю%0XW. ߸͕.UzCk֡Gм`T)c-Y5U&\lL~򍄳 XD2Jy0s0InqRJ^8x孷>  vy*, UB*g9voT  XbH}BKw?mOsn3Wy|2>P ±3ޣf}otD_VLj AۄnB8ZK(}YB+!Rn!t &1}|݈>Hd bᬂzfk~?VEߏ+^hoyk=M0sT4rl}aV-b A9ǶxqETq$d Hy*l2&eB N _ O /(@:Tpp c UZG!ˆzhˊp,85nL=/e []C o˘=58a5uԼplr~@ kʱ;8VB *  UEXcW<4 IO9+NZܻ<&;F"yX}Gr,"9}vzi'xJű=cCNo ul0uDC{Ӝh'3=~l옐`4'ߓ<عspEcӝL6LB^8ȔuL ʌ1HfcًLC-3Tj'xsV(7lW31_$ǦG}t,IOOkD,fcS)76Lnc96?_R6EŃFFL 5|g%3wS1k۶m[1 ^&wsp3lTX#ghG#)hj㑏C5KτSFԿpl;x -$[a>|H|X m?NIsKaG6huxWp:Jq Tr1t{x^aw/׍Kt|ca*5Ev]vl;qK)X&|(On6xM#UL$ҹ(ýMȲc*..^­`%Z I3 Ys`~}#ݽY)Aɬ#Gde=8HU{yYy6IbMuA#9VH6^k(Qoi~C:Ċ ױbN I3b*y^4UbFrJ dP2v sB2ֲЁl&* :vbXe76ɸ( ܥZ Å>s&o$٦3ͭn밧_աwcA<ذ7O|1chm[-i͎S~mo W,1GK;$s|l?1)VHfDK|<B`rb4anbM Njr l0إ8Ɗ<Ʉcg76s&VI5 @q&`xŠyB/_*i'D4hS|Y򹵪)g69F'磩SrxG_'S}6O#,rUU$ V !x"UI.8 ʋD|:q~bXAҸo{_2r.?zy Yc"XV8v.i<7إX0c+<htq8<'Dop"aBBe]9R*A-uI/7} ߪ|񲼍cc9rc]~HJ8"nF-qS衄ahM>…VUC&ȱj$vEWaPr,4YI$MDZvœp}#+[=1vU#ֶy/ydatOı'{FC(O>=Ҹ˂ct):frXZeȧR5IUᦚ}|cۄ-{ؓ^%>Uy(^.\pJd,c'+q<#ATMU,@U5.W%š؝#K\_JK8sUn@P e|>U{ O $ʵZ+beFZWvX>hkc>'cO~ۢ!tͻ%0Bµŭ%g}(7OGPEUS"gTpnR{L<DZ[]5Dp;R'R{o3|voˈ3'/ EA [#J&0HIɈa_nE\I]Nz/梬ȇ U3X(Έc}3cظq DmC[U[yyF{Cc?}ˉn+<%J$R}a=$[S5yfDʊ\BY0\fs/& vl 8b æW=j=+ݜ$bI\(f+bjJJXxlOL.V|ШxwpsM9*J*(J"_> I$/jTo86>2;vcv l~(81z֞[XB?&w1z8&bqTyy#nmxW4Al\nwyMPq~+70h*(=!6CxmMC]ʆ^W+ĎW /c/bL r}R* Q9xb`BQ\9I% WUUM*{^R$V~_tU!8*ARRW) |Zsʵ fNH+硨%4~G67lY6(4kjBe:wV|S;VC}Wmq;}&LzgwL u,SĶn+Ne٭3;sWooN 4 y9y{r|:;Z;SƱ50 :M!@Sdn/4mlnUm;T\=hwmذ~i>;\DVa/W?dF T3&U8^15:Y-fd¬ oF*c$8VU`ȶ̝0i\j=b[y֋|enhv(" bD\k#%ߏTdbXwx;7WLųxs{r<%6zI*\t]뼞@KYpH9)P[łorY~B1ta.Zp9g8kd2tyƈJji fx8vf1W%5Ut^l UpBJbU\FiE=谰qugPqUK ԅmoe7chH4u6  zs3cUX0^`[?׹ig|ͳbtb+`DJUc]yw2/m(_]nq,jXdlFm64 6bQ /l}fhb[^XkuxF,xK q#z t,$cC#@3]n3=~}N#jbLh!+b,٠Сz%[| Xa Ɔolf~L݉o4~Ȳ|/Db<& fфҤ gNr1NL]D)It38mD8~x)H麠!y~9:&^J/컻yH8v;04" 5"G. InəYzh:HA1{28&:c.oi]:>{^/UT.wlQ~u9[1`ᙯ2^!Cr:SyA?^.5XlC_4׋8W9q}3ȥ>]`رc8s6D iht2څ=߭ܿ_bBM&w_<eSƱ  cw[Sv96(jk\2eH#=7[u4_z15 Zaibh6팈_ ^؁ъXr(9ߖ`Ǯt0A[7"+džF'̓ߛ4OOMO]WU[F1Xr`&P_!/eU Bܱ~(wgS6;p`ǎGmG;?(!#it+p ;vr]ſ:C>hSڱDZPtw,/zv"+q@ )su0iqʣEc9&N1)dp8:ਕibǒHyD!_(76b_DPЖJmǠX.H8H9L,"SJAnjj k3. #ͱ{,k:%X"9,1o-k33yأǨ>@%H1h;zT%#p(S'A1b.W;<:wl^,;,'0'6|g  Y#V1 FB }20kw2{tIED.8VFg=Rڱx1K3e͓^űh:owMM]d6MdqsLxj2|4p]X1v,? V]JY 7|=0r%gm=2H&q>mղ9Fb?Q,S?q~.v,b ;łQvfdKqsغu`Or:f" l85L&XN1(Fuce)!1è #83UW -fU1':{#;; )w7(C2NCÒzqow &Ȱr^0q=T%>s/ߑoD<3!MoLpON˱M!VX!iVXxg,Zc@ ~Y0pxǚdэdߦnN5c,+{:`WǞ 96=5s֘k19CfX [:G1_Az1-ni k>tb1Ezp==O}'ğq~rxnvvv'A>}3xե!]Z%B(#r 53fޱcz^z47T2RZqmRƱOƦÌz)^fzU<y'8=] /N re׮+:qLΙU7hg;=5Rpޱ`^DŽi$۫qBR nivEXxc.U䧀c^İi_8v}ܯ=9,txz801r%˧'sԺs9c)Xr/Czn xG&,@% #X:ǠX#18_ u:lplgOf< ߒ"Nݘww~X,W~Md/-5ͺ\|y!ۂjE.;Y,}^ر2WJ8+dk2~88o?z<5]]Ch̐Wtu`.t!,Syio K'5}a=KX/ngSti_H v]G^ou Z_J{[o}?&yc>Ŧ>震;t9&8o9[ ?{b!7@~Ŧ0W|ަذ:"6ņ"< 6% |af},'u1ahY&_H:u[I{_)=JK)%Z2t-/&ߡnKA6cqVLLPv,t?dǚOJ;86H;rM0+XMےqkccڱXTb;XZ!P20 [:)?ZUdUpcģa&XAC` /KT)c75I0~n&l{zT'[4ylWkטz]0+Gվ}0sx7e؁pU3hEgQ\gRűk9ƭXc*+*}y44i>9fMh;M1 4K/Mo=kZcGV[nRtnɪ/jJl 4znY'NBa@Dڐ19^w3gժ9yVBǴW˥77tq.Ɲ3%8:ԌV!حc}^wڵyC[Z>?51EqM67ɛUV9qĥ\ٶݗ1ܣz9ߝ??'8K(gBpU `g|r KU Ñ}HW6]|  +cOjǒu6[# Ǿң:6l4%::e Hd6yctz[ 6nCħd$ў'bEb1*YSߧb:5zOfR8RiJxt['e ,(!4b'_<^&{IppA lR/E-TGe{ wh^cZ?1ގʕZ/!D,}muz?lc_^M h }h+\}hW kE3`,\o[ 䵷YsL@K&iǴx_6%>;-=r('Dc$$>]} @ĩNF5Jj,r 7k/DǼ,jE9CF"tzȎΉ5 ΰGsqeK ]:CU`@AF׋'xf8,W`7&7Dlqry}[oi_~l߷og}x,G_cs0uW6w|ikD6rqd@^0\+2A֑g"ՋBtsud;ʡːQxh3X!蘿8M$e*JGQI/V+"/=H<vN 1s"1<:O2̖ c59D78*e(D)j+|?hy3,)ǎg<@ɼXDئUG$NQvac+W $q72܂5c~g_$X+u=x.,p{ W:cm̓؋yBu*D?)2Ԯ( ^w vho{V/9&؋@e\1bly~zeÅaEcJuLc# ۲YNAab s "5Ef-1EΨcr@o88uLr,hmm#&SVd<8c2mYbcy8cx,:,a_0"8ئK F&-Ž{uK1,!!jj|  w,yŸUwߕ6wzE9!. 25V.A8&niL:/;I*9o`IԺ@1$ػ1'-^c~cCyRy:OtN|kߞIoDŽl#is~z똈M ϏS|yL|<=:cRDб{ c "NN >xNd?6:Fҳ@?E M?~2>s*}''/,}0tLbc|11So'#xl)"XbLRSR`cıu F7hl˓^d]"$.SSw76.3:9`.emKc!ni,g1jcN1`̖ܻ7$Y+ⶔS-6~ky u .L/ Gq%GS#11kiwSIXsD#cIK:m䏉3qp[JʿEv_f<~=~,XQwgqKF-ߡ \ `jhs.-Xz Wq s9D؋0v/-  VXF8spbʇ_q)DZZ69Fד ̭1a(X 7cBc幰(NjI+3576lX /ԕ𙩰;wyUHׯ0Apձ\%Xc =Q‚ӏL<~<3ń@g]v=uL(<B[4k7퐕 R%*W%{6c-7Of, !1 45vl9c K# sk[Tsc%VnK3lvu]Rww׈Ƅ$ج?݉W/lHDw=41Kb I8rb̖Nݻw|, 8":vsݹi*.6!tTmͱuN]Z f놌cWcjVB +pǜy.GqĽޞ&m!&u ʘ6 օzYQ I},M۱M@,ǰ[q<C~77l$*ٞ=s&wa+a9+c p;=> 1=9''="1hč+VLj 4+5:Q_x,vBhA u,(b2w/1)6(&:,j܏,9֛]3d2\G:v>:1W6S$Ts^,/*d/l-1BN>"ho'9:NCc1h`(& BLf|γ ?Va}Xߜr[d?U'%%X8WϬM8Fm4u ,seŢ->|aJ,>/?F c)Qy ːaj-c؞cac*$y+b^~xul XՉbO^=o:_ce|mҘ_Zrl˭O'Psoo6$=OR[[x apǶm~>" ;A (vq{d 2՚E.x?{1\" ;V$~(8 CR~G.h]Ngz䓲[{ӓSBadL]M 2&8npL)(WfB<3NP7e1)߱eMwd<1Jթ-vn;cpa[ [6?] :J2 ^120-^.^ P70,m.բ-9Vl?KꙄ#(\|628R[TX+Z p#)n2TC>r3kT;csNQHR.bU Ik?1ig2vW Kc ?߅:vD[>9F]OgP)ĂVAriz"Y=Zzi8\MT;֏}nT)85˕cUg1hNUggmӱy(q,w 1c C* +.;nݲvmpЌ?{jG D33Uұ6]SZH| c]G!Ƨc@֏hc7~Cj kTvc Fa iq_Ɗo1 ]xA`y/9V8{˨d V2Fر6Ol;jK΢?ǀYY. Hzf!|+*pYV aWN*cu$#V|fj#r@Z7~3ZϜ pUdI#J n y"<,D"c FTe=[c2+ut]ېlEjU˶تѦ+]g4q+f/90q3"Zm.JL8QѬ(q9 [7O gmgeKЪ};~(n^wخU'RٻZPudstbN|0/@ [_բ<[-L~<%ӗ(1&k*hޗT^VՀ Z6 `A!Reg4[ӰD|MT{hz*l qlu@ xgִfӇ tZZzbE3U!1x-[l,8,!ed601Df[T0~kg|KRu,40?Z Dibc7ŞH$(iHJ0T6X`< a϶\D%حld\]0 0\/ۂon3Fzvl믿a Ojj*GpX_U[)^sH|Ty;k yMhĩ=ۂs#\qH4x,_gv2A_ [dZ]T*j׮7N .jϘ?ϔ?6~b5qDN༉2s`gme S6|gǎՙ`+/weY0js ,V,gՋG\ڄ",N݃c4uS4zQde7YI.|>^Y9T-7@Ғ9{WaM(4PO ^9F4Ufib~ ui5)Jq. E34ryEcZG@ Ek!ٰj%RFGHl7c&wr&9Xhhԟgҟ\+n(ik4k΁eF$&Ϥ^15:?_ ~ѱ(α~X;<;U/#>`(crjlk,4,$[7éޕ)7B Gm[Ii&.FyBfC% *eN|15Jq3֤>l̇{UHO+2靃1S@XbBH2ܵ"E]jY)JL`e"HIR(HPCR)VUӬmox|< vߘ9gΙ9y%ͯPNb2֞3D$;Dct y.9>i{oczd3hն"408ccGI{Θ2Í8{1&3b,mK3*Y8{T\Hy)x3{2۴vL5i,zX6aK/>ڒ=,z*KM|n~~Yv ִv٥m)|O*|*GB3 Uel7h>2ch#|O*U!0Fs ]`,e,Q2@dg |,cYvb Vr|Z,c;JI])m*hzmźtL.X$}l.V;|Lrfy\,cYv6bvoʘ: Kd ,6eVi^D_g2elhc cչ5e-0:Eأƌɵ9e)WlzU8b%X[^_S(/^7cK;Cm:d0јS! V2nP:&b%Ř `̱[BşKÛ&r'd)l[V21vmhZ5 c2h(jL|݌). cKap-nuEaZ'Wv>͉*ٳQҋ:g̚#6HJ+*ۅJ14\oB#u3@Bu9clY~KKYe|8N\&H1)"ͥ@ 5>n%A_#6b;ڗy9_k`LQxLEc/se1)Ei)AHt3cK.\TX~l@8!R.m+zXo`C1Z)} y߶Llq}vbMS=m1x1&%f !k*2F"6d y"7RsTTP`dQcUfD@^c]7vCƿA16;mieGڜ3x33q 2(<'r:s!VuOYZ:(< *l? ̑i.^MǓ/u{zzQط=,-#Z:"W! Nma;ZɌxh_gw}E陸-Hw*rf>7"(*]rpCFE#c*u} 5"r("D1~w %WHcזz1Xgcc'Q_d;ZI1VQ\ډ1;y쬓2%LU˥֛kxUp1Ä ebQxE$ &y2QBMwq#`Ik5[26FlM>dfcPJ :{:^x]%թd{" {Al xrj֊(SUU7rԁ Ę\i$޿NxY, M\[F8c9u\r2ƮXƸLc ,Dv`c2|֟2:+-dJK0 i xgaNpxqj 28Su7[F vV|8p 6#8_|#|dd g&2&]kĕ1KURX{]D"d~q/3 #C2&B&89W^ԫPM ::Ԓ{(gh|!ŐY9dḅPrPC>^=zQ2?>?&wsl;Yn;N6f9,ku^B.=vZV%fRbJ*c_=d8Y/Ʈ{ Ơ#|[,\= Xxa! #&{= O p ՀŸ4 )T^t:PG 9꽾+Ձ[f3_o5 cO5о||?LJX,WI)c{FKu}NӺTJ[eL1OSL$=gӥtkJܮ\u!7wbu5bQ5Hq+HtY>b?e,&>PWX[u|p(4#ZE)t:j 4 iǸz dOjj oU*YƶbvW|zIK[_ R{pX[vQŋ* UމH=EgLjd^cry0Vu|!]La1{e@6<ǘک4zT:^/K*.6; 5/׋c,$Ke{ՙ[t)y#㠍,:V@IC1V:f/JLG|t\%Xv{0VQ[K1;.;Cʻ%rqІa4-~@)*ϖGQ5H*Z \ʐ`!nfA݃ي3o=rtKU2/TY[ʾ/첬i N5nP6nӈ7ťe)> VTfEAYHnncfկ ,{_5:Æ{R!cl57KӛXaccּ q?cO1{IXN(3*C$ 5Ӏ^bCޥ_J.`eϗ 1M9"eP&y1E@}PKQoBo *:xFt3+,lXib:⋥*BǬMX#LUF3Wʢ3I!K\2J._pJLv 3($K,*q^#U3|X+=hqMkll(0{EB:⋥*B1!df3F@nL% V݋Z._d` ҡxƸd]RPs$܅^:x{!ii.;)!];DA~s[_8c8e`gՒqXgkL훺#vt0Dmq!͐oP\P;*v[1bk[aǗE$i&3vXH,**w.\LW91!bI lME `YеLlB/O\,WI"ƾrY-@QdEa:2 1Vƨ?k(]OEwƮM]&ct8Ֆgyz2Sebe4Jhw$<!/*27h0swj}f>ꋠr~oʍR˵Vc~--oK+SaS{Ñ{_{֟`ÿ+?1 ƀX뇭Lg OƮ율J02S>?o=Jfk37C `~^[a<^'VKS/Pc^q8+ֻ/Krje+Wc n򔙔X:'tzM9AC?XF`GeTJH⛡S15~nCTc;|tc¸zA|u#{^G߃7^njK3K+fU KU_t?2ү贘ZʀbǦzo<$fLFF(G@ ֈX-NGUMnt,cY^t~?7٧cfq("$IABQ"TM˜ot,cY^t>DgCi>7"`E>%&ȆXC_C@ɱun2ipFc*3Yci+d cs&ƌ/},1o7Vd\Mu3crmNYU+~[L*fi;ҵso;۩Sٶ3+"`dK蟌{ vnL@> S5GǺzcxL)Wԫ]ֶXk;^SX ;eƎ(c-~SEkFbA_Mjjq$FFG4O,wr`˚~`n˪&b:s[RBK(D}w/cN}{ߠۯc{.G&o%Ybxy4&Z'Wv>͉)Ӌ:g=!D0H`(Ș4M /sCdB8b̽x dM=\h}@;bb'U+W:v%-Ҵw_=joc6,?BKY51ׅ@ĥhQ{"ͥ@|j b,cO3 s`{K~+=Ms1E}b\\O͌=;3⦌AZ}Wq>KƃxEc[xDJA7`pB~ !n !210(&at|&/(^FOXEA SٞB +bo̢yd.f]'ޠ`SUUe0&3%઎\Ȋjoސ16U##=G%XLLe6b<)^sfyY#4SŌ{1Tjrؘ}, #:qD\N\U8f`1ÔHXhi370GRyJx5Op3&&a>vCq0g%=Ms1b/|L[cQd>f]z]'V}j4ΘfQ`e<(jDPDG {#${}б^q{~ Q$LIy'zI'f{bŌ7%ze,cX_չ\jIƞ[g. ebԗCF$ & o(+iUӖI} 1 ͙_q8(NdKbIj&NΕ?g-*TSkൎ@:%ʙ7rfG^謃L21QCrСy/M|=è@F1tn?q'kC1ؘK9eg5nQAbcYp9$6cᅅ$,y(<(T{Ád8:rwW2 &,159խ:} Xmh=T]|6-x&@,c;ZsVEuE H~R!id?s$̣vsiTUߑ..^4!<)qţ ɈpIQN\Wa(+-F SD#_G{N#?=ԣ]$[~>wO~%Ɯ?[b~\֥2+i`)mjX]xZ6;'Im,ވ1vx^C9O<+py4Y\` Y,}b 1 elG+ǶXo~l ץvoF_ԭK%cŧ)_05:XRAwx:`@%QqfGbzqd 6{ՙ[t)y#㠍,:V@ICuq\͇_vtqJ Quep$:E $4uȏLB# *?FRMS*K&/H*skہs~k{}s(saN=։R:]oc*SٹY06{,T?{`l"#"yȻ|{ɮd楂2-ο9+tG[`9C_î ^1Ͼ}S.UA1Yswc^n׵O_;^^J~fXW>7 ,ԅojzX.8 ?oo8c7ԓ'SER]s0 kE2RAbpVRP9mS36d=te/:nrqu$<NBC{Qؼ(IMR}{Ɩ)dʨp<-Ӈأo=R2/뙝Qy@;=|-1zBDYQҸڊ 7,QJ ejeB!u~,/uXJv~~ &Fmb'$2}f+/NM]Xd楪bȟ??Sb QCdTp3 [ET`0[1]($~1ViקNKcccXU6y, &Iekep1أ y}5d8r^27]_&\#Xp+v6Ud vP=VĨMlD=cO3Rz11Jt.Ձ`.%W9lϯx|l\~E 幎} C.5[(m"cl&Fmb'6M?'8Q4egVoIkf cͷ?2K䃏30ƬBg+V͓IձHoVz_~q51 yhX.n3fOjӚ{ Ab"1F'Zve2--KY|i^*.yX&6횯wTi"1U~qK5xeGJn^*փ}, ]~/cR$A^%&y=NTU10/פƳ-m̹1)hh^*&Z_Ӻm O.iTY9/UW[XHP^*(+3,6%c.lrMc[1Blƶ1 [0+x2m?^_[^뎱5 ҽ6 ǦUh 20ۇ&b1B βcQӘی*k+t[\\YC~leRKs}~+/ #B8j~,EBf)Gk1DAɌ#xVW.]ݕM÷ GcqH8fL:76c1Sp7 px$kƐȂ+1`l\j"DSW"K\ [ #:3 lN4/1Lc,cgi ǂdwD1#k3B4%2 %^xaDgbtfbM׉f6c0F21 jm m1Vdo z8Z^$ {ݥ/I /> K3B4%2 %` 031:3&[F31Y"p&+fg)d犕-da<2ŢidrX1Ad%*`bD>:3\;lՖF7&k4ı6!KijY:c"$$u&021:0g:v% 1pյ;33/P=(IMΘ:>љ6E\0jۏ:hcػC[ϨcOMI5)) M㕖U&6aH&֯D M LL,ql+sMGY@l1y8mNGac'j'i:lrL} nOd cZMZlnt~ `&='5R%DUSC=19 Q#}^16(c6c9&cR-B 0|> c@Ʀ AA(m%fdd ^|ȌO+⌉)F{1nyA:ZI"^miBhOuAkUc7!d Т474Φ1pQlrLWVcl2`@tMkI;M-"ω2d Aִ@C?z(<k)F{1ٌq]m+:ҢQ&L@oKNh'V)F`kluO6v;n w+B3z  HxqT̃\: K𩇶m6(lrJSeO7_4?5Ӽ~X/NO=MfPҳg8Pj|M+獈)F{sMi5Xߠ.U&IY3 Tj~NqgR {.tߠ=5=Xv3炶X#|Z܃XnISv[XU i+k1 S^f%#ʨ ^nٮI'1%ESѤ@1{e.שGIa\25i$2c2h1ǘNkPr8͘I'1,.6}dLcL'n5Ur8͘I'1,1D{e.שьi6c&6ưLΏ LXL'nZ(sNU:ٟf3fklId dwhMQ1Sn\*O35i$2e2;e4er&V)b7q \ScNٌ4x$W̽MlפCiT-X1FSŘayL~Mm"7/Udϻ1Y:gSᖀY琘*b-E~ډHf^*ڃ=>dIWTKHM^^̼T!פƳcTΨӪI0FZ47S#5/Uh~_ 7ٔ3'ӓkG|0aoCi:kDy0'g¿N~K,S:!/PcjT1$2ǗK[PH՟: vJ!z{h lkdDGĈ1"FxD@jdDGĈRMӘK%g1K߫c^*F=&ʏ +(Z<"F86/pKum/cMy# U1MF^-n;ϼT.WFRKEFk(ċ=/bfrV"pKAWPxD*Ƹn(cKuƍᚗ*?ȯhQPbeyrJrm4/k^"#bDUh?*ut`fy E 5/A~k(ċ 林jtu1ᛗ ױBR2 xrc6R籆BRF۶KEF-#xR56#bDz^FxDHmilDGĈ1"FxDHj-#klDGĈ1"FxDHj-#klDGĈ1"FxDHj-#klDGĈ5I$K^c%jLH$& +J$#5&ԘDb.RcHI$"5&ԘDb.RcHI$"5&ԘDb.RcpX2 0 *'>q_fzYD͂y+:5]xNh2)4EN6] }t早^7aޓ̑8=A,9tJeNܡ-K/YL`NjTބvRo1VrL^1x&zǷڲįzD`ǫT8RD `eC313"pl--O/Z8il=ZF{y¶ozŶ}L)lf.'_{zj2HNKb&]߷LsD'|)V2^3Kh">{5C*v|SF.1 {|Q5CVMjfȟc&tWgmg"dwx"72Y#6s̈#_&tgasp `pzj1Ru^R3xɑH>3A1dK4vcxjpxdڵ`2i {ij<)ח@uԞej AM wvMScY?>L{AtoBγN.z9 =E:;Pc~ m!'&#+_zjMqY=xmVhզ=O;bhiU/SfVxP3D3сO\D3P3TcZk݄y'قH:vXp8J'M/B ȗ ã9ǙƘ݈G{BQНra];/fѦxf6froj:d #a0^ъ&r&zv28 -w5˪=uv <5 L LG5+6We}y~vvUtKQ4]'J>[}Z@ҿ dYq1\= DX|^^R3wɑ!rO9X Z@cqXcORYqv-72U`OzfljY P3\Њ`&t[׭y!-Vl񷗋/ӥM-Vש-<ڢY}^jQũZ}f~:+h^R3wkx]dbDc~m< k3I+YG?uv,+Fpޫx4mV3+Z̄5 ye켿rN h)8ð#Dరi3CVugxy 4;-QY.<5]CAM La qtk8/' jN qԘ٭0oI{Lj`8VFzQr0;4vàҽ1J6 Җ7_[hLɢ11Y4Fc4&hdј,E6hhl1Ec4FcHc4&11Y4Fc4&ߊ4Fc1Ec4FchhLɢ11Y4Fc4&hdј,1Ec4FchhLɢ11Y4Fc4&hdј,1X^6v] U!n+*ZFc݂)_=֗I(+e76ZuByFjeW+W)veWg6=jhx3KXLO ?Xz)4Ȣ1@h Ec,d Y4Ȣ1@YukИeh:4fYƬCc,d Y4Ȣ1@h Ec,d hlc|7~`g5ӆy\畑GVc˨uyp~n$8:=Ti/VSsP~.u;FNUuNM׆yE5:j6cyZc٘ ND.5}c:TT DO+% =ǵd^:F: Wᰚ1"g}JU8֪43kLגyo,z\ghy7kC̡k,= +E7EƊ1ʇ8㪉df4Fc94vqY23 e4=4+ǟ6qUo޹Jޮnnk>'}KX҃֯4&i46owv祍4LA,E%RzPЃ@{膅tKk"ƒ!lF6ѡ^VeiAx]>F1Iؙ<| uރ;ogP 90񭥝St*isIѶL;2̽<(m{r 1X1_9gcu"?8vѬݜy߁I^JwD9¿;_ n*ft#1_ѱe}vǴα+cR dNYu:tCqg]qGc~cϟod9)L?gK:*ƴd9:> U3?3#kcrqePB2WA{LQ P+ FU@9UN(@q*8rs`μe~& 1/RAtjx|L`׿ώuڌ#1?ڱG4v:JݜGj܂~Ҋ6UJq`TYD8$c䘄cK$>!Ɍڎ?`\ w;Ifvl~\yr::6A(vla\r:96wR]ZnuslqH2c; AcWXtvlP 5BE~LgcC̽P'XWd ھ˼ ĕuj݃%9,gJ@ؔ`yWB(܃hu>p, ts:9#1;%3r W^1\yc2#pEk9+c:ȱ Bcea19uL%0 sֱlp7IyM1;ge{1 (ZL({hc[H$}5 ^!0ЛcrRNH8V˒c^vQvFa]pΒc1QUeqU19mA^r 9wNJp1ݦsEq;VƔkysEXIS{q;u~aֱV{fyf^|V+BaocH1ʻXk(91nDa"sX!@+z^_f1|c"eFʋ×9+/r _f1|I:@uե—cn.+'<LsnD  $y /)wc3y ,AEG?HR.: .W "Wėyʋ}%=D`|c"eFʋ×9+/r _f1|c"e֖goj26 LPAu] JWT'8xP`Wf%NIG{A{EWfL`t<~tla\uVD8rm+0Ͷ+Mva&h]J)$ X[/!h`b؆HvB}R ]*lK!SL>솟l-ckpcXBǮ86{5F{ɟ$yOE\bpLZg$yǮ86{5[ j~KL< JC=҃gb-za#LB8ܱ>ycs'xuss 6xyg?:J,/mKPX#]:VOz.^ǘu>D,O#[3y"R fţע*+P7c dcOOm]CR6kpӜ}IC14t(>v-z)XgB 1 VǬe؜ =s`$:V&c4'9&t1(eT\Wg~,E/&՝-S^ޱ^|Dvdׁcstmˁm VMs[[Z2hXcwn1NV"So|%S0{r?}U";+-ñLZoomm-80ڲ _PoT},w5]\r9p'X%ć;6}/8u58ïcA'wws7m̦<>t7\'ry>*>GsN/h3Zۍ.횛,^p=7೼W?h-=xɠS(f4P'udcs'x F߽sF;z_q'9|bnnwCt([>}9YnrNm*zo>ԱC.Ǥ5[zu9E8&;}XcT%B:8=3'c ,GRZǢǥ;x">^ߚx^~+=oQ_JZY8.E=~>?<])_f/%,p4/OoYE]95u%6kğTʎTP @-p 1P @-p 1Pgc)ǃ{E8Z9b`;I> >1Ƙx#TҌzC4u{<6voS1F8f{ cF0:]OR^(VM:ҍ!Wk%k p?MkۮJ V.gΘyvp \7ScQw漓vfS2jKtѵ'cIxrn} &b'1nR#r-CZfepv0S|+2B9pO=zPrš1Q 1Xc'ƑehDzi/+%gF%]ġqQnG+GK;Vo[^QrmOpY:)Î մ=Q*wzL/Z"NR)߽cbPc/+syf1IWPN;/Îz=b?t-p DECw@ Pҹ½"*IpP @-cATSIENDB`awf-extended-4.1.0/images/gtk3-csd.png000066400000000000000000001536541517644610000175030ustar00rootroot00000000000000PNG  IHDRcZPLTE¶Ϋɹ̴iL?w]E;̿ͿocX]IeMɾZH¶dL[HݘcLȋyi~o`bKxeӍ^IŵaKpazgȹϤyf]Kij˿fO̽_J鳒ԙgP\J[JhPn`cLȽ˻\H^Kʾ_J+**ƻі|LJHBA?y100988ƸUTS %$$ȻĹǿû|ؓǿûvspjgdN=6̴}yuca_][Y򛛛mQDomj²⡛hUeWxZLݱӞq^o`צ6NYyyy⇔ՉcQ8hd4$MozmR*/^)UCsʰmPӽݒv:hīUbKAvfNWxIT@miZq֫`nA969F9p*($4gbP%#kEC^ z@/ggIDATxoP W)ERs6zn}$e %X*BIS؞2U 剚<Ʃb޲q7B>dഄD1I,\ 7R(flXQro`k"Qޱ=[$i2m&t8V3!Ow|0P(SD {M( q{0lj8dvܐ<>D w`k#4nTCpw[#~tǂUH0h+n8^66 elɎs,0up$OݒiU*TZ2FJJQ[Y˼2MIk$`qB{eW;FBѭ'2kGk;N(0ـFa) [ioM R:5D;v&ıq;ف7hYѭlj*JcH0% XTn{|{,"d^q^^OݷGLC7P̲aWJPѢ`pn`n@5qiDy% jr+4l6.cuMAbF*qF:pJeMƚݱwcCQ-!Ki$cgA#~_c1hI{;AuufrÄaWi_ Kd oM?UuuAn nj#D|u YoM$#֣ EaxwT-‘±n pqa!UÞAv SE6vܓް/ 5@ HS>gY K1 ݤ`(NJbc]gICX"K+R$.6Wo^([4-Fc4 if^3-dRMQ#F8Mt0꼅q~ɭC9F8)4%(_Ua!`<DxQ `)Fq9dݙcܜcܫ[2La-uCo䦦Qmgۋe*<ުBA,w,.e[X8 ^؂zPE+2ݒ epZCObQ.27qM&ey :hnÖASt,@Qt,7<ssY"a/E˖+†BqV+ s=( ~ #>m|Q\MhUKq  Q;,m T-;1BI"修W8,wqP`Zq>-@9F牢s/0 {YF$`@{k~ɣ?'MVb&iS@ta$N lz &|0^WI( `Ǧ&ʓ/5y OKXO(;ڔ0^Pl @xtJPBѿF$+ ,6Q(ɄwlBI1 %LPX:BIcsI']$~rRХMSI쳦$Toް.51LwvetbUqD{^?jRWf X3h?~J ~ ;Z99&j {K˔?r΄k7w4u:+gU(A,rM79]Bٓ>y+KH9{ שPN]uc<,sAyS YҦRnX6YtCﰚ bU%V5kUg4̱&tf=9ubayګ_ b$uKI)MURBGSܙ&lqTijT / \TQ U*SL^RQSwKGGT-]O4f\BPa/gA\JXUd uzqhxBYLn*8{ ;Kp9(c#i4:Fc5lEGDx=s ͙>?L~C\Hb<׎B4 bf9b[wL|!%qB&Cu{p9( vew+\TF 4 mQ*h?/iV11Kks^ "|m,B}~xD'[Eq";KrP3Ǵ#cGZ-@6ljm&mh.ietY -gڋɥe5yM}+,Y0jͮ+]gIII.텖JRT<gTP$пa y19\6Sf|O%2+A1Y7Eu,{C Y oBcZ^5>Kf"m<<|uXjż]̳/5j;V?$_q۩-AM"+ZcA5Od6ûJc`Ј'1yc X/lk׮]->&jzBӒJy[8kx3 N'G98Z<3W_`WIWdHM~Pw:jȊ˒fodry, _?x:$&cog^k~̄6W;s&Vlͤ{;o]ZFׅfd1fr9\mZ6&﷒8րəs6^K+&uDn"6;UI$F4a]v0kd{73W,%}{&Yr{xS{+<Ű!&V4粙>{yZ8Lp¶boޒ>~%tv8_D;xS4'V@ƈ%jnە[.M<ȝ{VAOBO֦8>='^<~d}9lMƘk+,W*>?ѼOпя4g匕+bpԚc':2Ru/>qkt``ԕY;v4]ܟ W2͝{+vN=3hNu|ÝWGX7^/fܲs1iޫcwҐoǎqȔ/w7 bXv||gbxE߻wr.%2pZ8֥'йu ey醧۞_ivzG 'צ8>5'![ƭV`!2/$e{s*։1XGo !{4|aMFZqWN٥D~kaub}xRoG5ӕc+УGY9=Wo{8yʶPhb<s`,1ͤb쇄x ~w> >& 22] G[2L-)4؛?˧kcҹߦoE5w|ZY &OG] ܙ?>YC 3ǗGvoL dyx"1Ւ/1&t6.ˑH_x0Ȏ=j _GɨZ:|I/8 bKQS)9ٷ93ڧ͘ߧ\$mN}00 ]1n۶hXMlϞ>xbxF$[R2v(3vcdXU$-_G"9ƲKk/~ `8#\+BW+OC #xF#57oX p`Tjj\hjt %*2#Q- v81rvb'طǻQÉ'vq#S]zz:sMJ`3ǟ~:z<[lSk؜ʓPCPhirr9%cS7>xp̍ߚR333Q<^_zfl'f #acΑi3Flgl&gNY5 ƪLЙj0V.9*i G"K1ZDwI,//i%+O|G~ff;O7B֎抜r?h0OrZv/؊ ;`唓ci3 x c7c9ORȑ2I/[X#rau\ x Gm9)X'R'*m9唄9O9)XԧPtSNΜr)2z-CV)'(V9ƶ|rmmedʶ31m瓍gclk+'(VO6Ql;l<c[[v>xF9ƶ|񌾇1˴䲠~gcN~ "ʖӟ=2l9J1יv5Kނ"ʖSh:ݙ/eWt~coDіxy|P9Jra&%=$W c£==%/蟒/fN;+(@o`6C=սTvͬŧg4TKuc~1k~5tgmqȣw(Oނ? !IV/7b~3{(ͬn|f,Dp> !gP1v_Pɮ\*{7O&i)DnaڗD,5 1vڼtƴ|;:pSĕ*GLb.=ƸN^bMW(kkءC/$c~DPסJ- V6#/lD:$ 5;2RMYKKQ8C.yjOrf 9l9-$:";z*[1PMUSQB[<=ss'Te(¦Z^d£ ab6HDY\2CZ-0f,smcQ͇5:GPOe AN)҇8q [+CptH1zH44` p^D 5xjv[_:*o 2&1%MT5N&:<SA;];n#MzQ;AR 1`Ccq ݏ]*LJ0c +a3e D RRҍvb9z;!118b޳pk.),MVriE!IТ45q ^0&p~khԩ2AkQKIS*t?ua;| Ƀ2*+;PM r梉EP P.`hAp ]HdÌ=4 MO_}tBO t}=l_?f@Yy;2Bؙo|6ȘuۍYj/+[XnT}ƊU/՛Xb[EmNM5K55 ZnQS>(\qlV4Rbgod]U!71LK2:U> 9VkEL=NĨ^ؕPo7=%wv7ި[XV I&!N"f,\ӄ,o,,G);aWB3w Π]Z36y4([\`afڹc~;o6_cF/*rJK%+-X,JZW66VU5VoDɏ9҅4ZI1V, cg{A">v{UUnCg-%(HIT-o,eb ( Fz_Jgk}K** =iWbjUPR]cm&} T%D_D Ĩ;XEn1%Sߝ.-Q?K%KAE}y`B:lBP+IWp?@ 3EseFT_1 2 ZN]B2bzYDBLJA,:"XkRh:TTXEԣHD^Af(aXČdI mc~@a1b ,1qe%*-7^fd"h0xn JA<z1asJ,GƮ)g ɼ:io{,Įe { ƊJ,C5YJR3Z*"YK_ ,Rm*gDZ]]]H#)Ԍ .TB(4UTv*!'.&d! $th~/tA\TX0qq"0cıc#,jx{nhrfϸcbn {)*th1!Hn+F1Y)ŌxgtpgzW/r3vΝqc އ+=%-~WHQyݥ@]J{}1v#gA$/dgA,F 5C]D[X{}tPx.Lyo"FOcRdKbPXdD||E4BhԌC2%0^HbÝMZqHcաqKDi[c//b4 zn[D+D,P1Hr)@i4tkhs>҅, 3fƾz,1zJ=Nl]5W~-JWF)-ƊE/l1age'QLh@œVB+1m9|;6Bok c7/D7U[/;BBHLϕ2}΋o({ LH.>cClCVmۍJ(ƏpUhE9K^$D4ݐՊ;4\.1*PD =k.dDNL>J+ңG ڏ)sO^vQRB?ps!372. @t U3_$J#$nc 'zh7Q1.Y!:|{vзw&bڍBiWAdBN%!ieFzo;c{_jn ?`b6HXy9բdMFUl3qp n E/nRDM*#2EBH EsA6ZHmLܤ4}X[ 8\0:F[ӑvn*{^jI)( 3!0Er8&$X 'ACvX30 AU-W++D1jyË3oFZx K7Q!5#$Ɖ % d9b_ee=L&G ɇ4VarL)ɆyNFS4 }drZaP u i(% шɍ3m1L9d~ vRI0<D:@q$ѱQeo ~.^Bk\k@fT!pWP^]ƾ b_mϔ>^c k8yOm>:z;Vٱ"LjD!^@IljnSaV 'PfY/myb̓U xy6>cl6l6f?H3ǜ%朴Ќ |?B Nr"4;qu ΐ¹`BEeW3vʘ.Eƒ6 3&(<69lxA Q:R.#@Aqҥ1G|EAxè ž\<(B08$Gf2Q \_]婨|{I <1񒷗"- rbn`LȫIpN҂"r8 alV1;qyl+dOڌ\>"uySߵk}W]B?fԹ3IV3erp̺lcc/_韢X0.\ Fi{%y ([N8cؑ{f{Gb̬y*d^#Հq,-[ cGat}.8yF/M>>OIxzE9JBb=X-}V&>H!RJ<M2kez5FRAzUOk 5Ƃr8~\c3ShʿP^쫃ɺP(u ~L5f)^ AHڴh_3RXafcG]͘_.IgOҋx$l^c=s׊8 ﬋1a+~ acۼDʼ%%eL(Qa$$xے>ܟ)uLgژYjZTg-cgy.C1=6cة-6*w?Me|)R(E43BPS$C91#xs7; =|QTqbvƓ c NzÓacI!y&n.PЅF AKO*ӨJD*-x 9Yy-=ݯ_6^OogcHe\x$fyfK%:( j ؎Pμit٧p!C#SnhF8Mox:V'ywZst]و"dХ+&FFz6?+})cXb)yXaBǻI(,>Zu1%c0-1;Vlx ^vs(/hPCϼH3 + h՚VLxfDup"ۼ̾HpZI(96clcV0֧eclSEjO&l5ȶ~,0??C'Y2f?m%inRFP hOrgۄ$Bd>63Q8ӐYt#\R]vvo"blE33b0/N.vg ?ZX?cn?kkb- cn@lCx6z\۷f'$!xrx<%]9Ú\9ԸԲ Vc $`1o1Jも[մnb%}c9:NBq>A˹|6'$Oj˺s`Ao ";)c@NlZcD om*Z,YNˢSBl~tΖb*\l.XV6a`/4vAf؁$ڌZ'c1f,k!q牓 ffQFZ cyk,q(#Awm9c CȂ[ɂ y'6atlT:=5 gMMl,!|PEnU *t b,diZTp0V.{ŷu^m DGcyj yDӛ[nl +~j uCpH 7g*RUdmr34Qކ1 Bɿ0fg7o{Ċ "$x˖'a,a TG%9j9EQz,vEAᵨDT'V c,iXXp=4ں2ca Z0VY^r}=tÔ1\ ${a^!A(ЪH L)ŎHA|*x㔌.P5\Zㆢ;61^{im71cÀl1cE_Gr3VTlE/voP; #9x\ h|8a.T!\$Y;dKdh!d@5T-t8NgS)2Ķ%c<;땓 v9sݼb0֍̓\B/CƎ˓Yvv YRP_s̕ mF8v26 2?dX@p=}5 {6/^10ǫiR ƆcuEv#D(#سMq;۞EHw(%bNFX`!)0t$wcFjBsٲ77๤=,4DrOc~O JP,9qcl|dcsָ-[@"wD*UTk'XpU!*j$FE|nQzޙ+2M7_\K<GMQ<{2νľg=4kd`l_Y6lB sr ȕ+u<lj/YPqEP+t",~=c㦌$F,h^1+h`A#$e'X>x!K ls,& >>Ql{4aGwWVXx``9XxؕO~:=,i#K$cO11Hx]ҴO-wYnH<c,/iJ9;n0f%>A 'Tk2VG=jؖ_0٠m)3zx>TWOq;h57WFǃϲQr q]d=A"r|3njcGSz B[pCނ/c,$:ogeR1Ʊ+ uKEN|XPUtS*2EN.q] ?T[o@T&ʎgl~lct8:cvϾXyhX=]V#4[+.H+G<]ʛM?wC:+7,@`Q7r̳Qڬc[(G|{6RaN06c~HaT8/8bdU}\9'nH0VsIl`٘sAI 1CwwǀX*+TDZbw2 D@4PIrɢߎ 3~#R4AsyMo`;{M5 8Nގ*]ǍhG0;DREv3Pхb.d5<6Kd*ƸCs\U CfW'n{6c=+~:ctS0ÑFϐ7Y؈_+"8>VlFĨRr M {М>٨KFL$dFoP*AoCî'N|!̮o_F-W&ƚFR! o%KUTR@̑h#;a٥ UTk15L5'a.Ww`XEQ52}xGBr(q6fn8 >dӖ7XQX(< 1O-30.8`1.6F8ϘPBm=^ j/1cq|q7pEXı_ IsE,+L639c6gfFZUXNYFm-֊20vYJ{cۃh`9%+>ԅO40B9dEiyE Hx s+Q R9(e3~T%[!+rNg3&?V`1VB tq6h~\Hh& mC½3'fl|kYzUӆvou[ky?Z],@(u! ɓ I)q@dž|]~pр: mկWFVe =&!^d"\ @ KtmDž\ībWs((o\abdCcOObsc'';IUu5m;Șn^RnNTREJ5'ǃ3Xkh$_Ʌ_qҮn:kk׮]C $!F5t^f9BDCƺ|)HM1&-" A1dQHMNQ… .M/.ÙoFF27-"3*6ɤX$]+kQt;l>ng;RjljX(eH0LǾpa{5xr}r ޽;}kϙ}'No.s`:q( "iӐD/Y}@y78x`.eXHUWWcSwM@ _9"*\G?tkQELܠ%BJj7O)|&{p%GYeQ?+L+cG^зzh};Fq8u͏t:\ ׵)[+嫀)U@,}\ XWWws`n@k<@"xp <Ȅ7MRcd9e'"^'d@I7A*$}pV`1t_Ru_f,6֤QhcHl8bpfՌ)cդ{>V'nfSR^ Ycl Lc]?Ⱥx' B(Ϩj42s|GK3vOwanݼŒBp#]뙲wOa:ḇoccY){m%Xj@ ]+"bHBYG$+=A( c6V?FX3XΈ0ZB AN srΨ3R}KteliA"f C3Zҩ 6gFgYCzպ|lOnc Jje#PF"~yӕ1Ӽ ~w:?WcY;~nw2cxv 8f`Իc\xfjK<*O\dTF6Ê.f]$ @+X^znϕ+=Z>y M&3[&ݣLxjrrorGt[a|9eZ%$(Vkdn;Xۆ|?d| +pO2voϐ~Nx;1U2"Ⱦ|­A{n=υډ1V٥9mK!͉oi\K=ϭQλ>EpPzZobF5vIj1%c 7`J6kDAZ] [, pa ~waB4Hb-Qhi}u2(YZvt#~kdlH8=Z˱_v2o50vfoMٳ 7QK 7krG-nx:I2J'(-r, eZ<<H*Ѕ6B{ sư!V<3>D~}bxEx}%ǞLx䓏oŲ7Ic܃]:Lb?& 9t}lB> Bjh=!6.@sUL?TQdq{nj}2є,my/ek" ޾4%#D9 |&1S^0#?gTVVVfAp8 mJ򖬨&O$`HnZD Gngs.CHuHN=qg$c 05<v&թ*{759XgPg󱯿}o?1_˓?c \n78ᚑ~B,%4#7EDΧrRHJ-B~0`ƘM( ChR)z Y)T?-o ^It*ʊD죦(ky^KēodycVryPf]1O A dQ%% ^I7̧lPش$"KHFzhΩ.P*6oz *芍)YޝMc2x;++w,YfͬČ^['c;ةf)Idw{$G{r@+z=3n.O%c0X S/>THrk@Kʿ 9tVī^WۤԔ1g[MYz`mj= Hc,/iJ9;n0f%MG/fAX c Pu2fI~'} ~Gw* Ҏ9~s V$Wd)`% ++Ҙƌx>qKKX=;kZ}+=/s*uCoĒ1O;íb縩b%R"}\B>L69TZ.C!Z-bSiWa Z3B4] {ϙhδNֶw' /*T,Qr2}>6RcíkgLǞ);n| xY#J.!1HJ<X .xqDTH)zWe?kNTy-a?5A>kqe(Z*TUy~xcr#"X4P% F  yP! %ヰ$c~ƏGwsA}/pRrg s!2k98 41_BdҍpIvE}^w1 vq *Rש(vRK>{ݩxݓ򹢻{*Ch+U:;8bI?U ΕS 5XĽMM,KR,F FAvh H Ç4=xWo}+Kc'[v@M|Gָb ZhCxYflFIv}j|s3#_~b|e|e h(7UoworF2^%{wjE1MpiOڠ9`МT5\>Y׿cccRe<2T&ɉBg^<\l øGnmq/bQ}ZD{CY+RUF}hlssI6ˍs1B[2W+ $&FP>$"CǧtP,9jBQDcz^y&AO5u$Gjh%<'N-ry2cԨ“paO餫Z1c>dYA,c'DboNq3}1* gJ1=vJ$uX z͘c(~o>N+Ř/||c{2g |e1"1&Zm|b{=alOY͘<~5\#9~|ۓ"c{V(cs̓!bn}bynK}|>1𿅱=a`J ߒ3D$@lac!T8gsMUchpur·C)2vh˕~1pW裮|bCKl2tV߿Uآ2FfzFLy+ cU4F1v0+=C%g kKRb\_o},b5zyKP>1V 5&aPv:jP883[,W|q_~?B2+KU!'+.#VNB83Ɵۨ~7F(k3v(Kii`Gc`+\ŚIϟد O^$ɫ7b-{3s^I[.[-ed5$Flsa_^߫c%ûNk]̏dSe`6z`a?[3a&S'0Y]CCZ}MFʽb| 0BwWo{ Rdc^oc⸹z9, n>I˜oxg|QJXú|b M/1mΜl0yL{-^]!]&D4rsƙzX`˾g,?E My46 ƾX3Kߏ1M7 +nyÑ'7X oxdmb*i۱XcEE 5Vn6Qn!#Yj?^HP:yr,J[U@T!*-,m E ͪhq}HߖM3c`,g"h K)3Ti1cߑ c)wM3Z"b"[!@:W:dㅜ\ "7צV5bZCSglkw EWc (62+1g㱗w+;p] ^ʃ{E[Ӿ`hׯOeĘw'j$GuV.BFO>(0^ZKNx$eSRk$J2;s ^3/tcO4 Zd⛳}t# yxɓoْwݻ#Ơ}?Me:Oj7l(PaCm-\ev *S H#8w"($6C.Bܔ~8c[3e,x{Ww/T4V2b RZ]e ×6fJ٣\ L,\Lq7|((m4\ c[3e,ɽw~cwXgynK?vd+s$c[elrZL2&\3'ӛme^c;2eLʜ9׏Z]e0mc6FshiSkq1-c^Or[tm`,;s  y.cSXZ2-ei>cl ̆WSzi<&|,#9y&"A'elW{+em>[e~[֌8h}d#@eV}M>cXȃ~LoΜҳU-6ATq B";N):$ ydgSK iFQ6;;XȽjSmbّU[ ,;yņ4mårEnc#A##HBYT\Ar6L$%glcllx*juUSO5t]0kd ʘ y$QApׄ˻Ɣ }}K;&v 6AjI spqZ#Rډh6&~y2%uc?:玻i-+K vc~Uq9s4 8 3ZfpU.!H%7O}}{=tPI&9t0\V &l1dmIEYG3.,5d$6\'IAl{kʘTtOq֮,N3*4q͆?<_~k{=fD>Oo?ןu~K}c&~ARCX,`th.;jǠwo^{kk\UkȌss$pZEU^cL2GYe>{j?=G䕭KE[G3ی]W\ȓk$iEij+<߷c3Lbq%ccCwb|#S@B{Q{hy~7|V(@OOϵDOw~{{p==vvU۔7[v+fRL\s?O1٪}0?M]ߧ9մ+Nc:11- 3&:w2`~!Ք|MEdr8L&l477[-FcWysn 8C:JmkX /ӣ݁^#BvsK4[)|v+˥(mXlm߇/TӶ(x`:c(!Tn06VwiHy<1vrw͢!ו1 23(ZqQ[3PF?Y~⶷ {iuTn;= :g'mtιiS}S*zym61a@e F&!v4__+c1 }֤JPߑ ƖC+c~ZRD2[͸gF^C]Qneoiaqa6xlW춶sF[mWՂ@%{"fc[n 76KɄ'd2*c t3n,cQ2AVRxL!Mݠ).jqksеΉ˗:>T\)7Edl6n7Qޞfnb/Ld/{3֏ߊ=]el!.c͆ܗ>cIB~f@xm(|.ps Lvn4if7<֠f'VƠ78fF7)8 yR仸"O`aa$*eHP$#cXg>XpC}+BTm@qc&f YnpM%]];cQϛZnMjҨ;|q``2n5PeXL :MAHtMFomiha@᥼) /zdŬ5ƵZR/ƨѸj5?;Ϝ80ga{Χ93b9屐;$BWfN1Sa[9ٺ2/G7J]c̗1+!k7DGT&X,,vPI,Ļ܉6gQSy@,; n9O wSxLHT`_V7-̲H.}`6.e=+A1j` % )d ܂y(ء$HY5է+sHSyD_T7LO0}A7Yi2F_h-i`,q};vPڬBS8#$ӯ#*7| #IlCeCʪpUTPhOh =RKFkOc2+W^ٌM(# pe4*dƠ̪HWUv| VȀ Piq(gcþ( _J x"*,#PDDF2rv52_h-DPDWQ)clhmi`lYх*LK#1l`"Q(8վZ.Ɖ Q.]7W縻 eL+2VEivK {%QV \g,z׻c%)0sJ?1j{q >"6d;w$-{/BML^}uP! -2];bUH ݈PFT(ة@ROU (4cE$cU@*GHi:ӹ1Ƣ, c/j_!?vw m/Ur@*<ю4-}Ȍ.E-ygE?e| 6Ʀ=oÅ;ab ߹|<0M;Kp6F.U-Ѿ,WvMi#G>Ul16t"ӄY#G}?06ػZ265.c~㡟=ckXc흧]~/>X؇!0)hތ16Ǝ<yq/fcw>#Ǐ\~4;2c?&_!Ӑ7C` 0Tn}m_\(q~v:*ָ΢Nh'?IӿUf,τh FX1{3 M1Ʀ؁O*/>|;ő&ry>/Pw)a͝Ͼ8}? ~RcKB+ 2 6ӌwC` cl ޽ʳ" 90煄TطC}~h#njյU['?41pHBW>?8!06߉16ܻw'DD}%̔G~~蝻*cs03ŵf/1NPǠ]ǐ?& al jYV1ZT; }cl1b2c#3=fJG{իw<26rsa7c<&azǰQ !1AO ޺t_\B AZ2M3ƾ16 ƀ 3D<#atzϙͶ<#﫩^R6[Ŭ b9B Aި RʼQ@SAe.wb׺A갦mӊFϺFs.*c#F?xr#X*c9(0ƐaO216XTaƺnxZVC!_Dh-Hx m%$ߎ2¶R0%d%. ]5c4b,k E`O##'%gfTG}ͣᣎҾ>16X]!I)}RenKVՄ+VfkoD? ~׬A<~DS<%7o%{ϻuTs1߾*V<06rv?:YҺ 9X^lI29i0ueFSl,6F e@@$DE3!Xpc\?^Oe1uw?65LX81511/oC4eEcXe;9L#ZlOJ;QSs"͒dN Ί=njzwiD#BVφ**[a,Bc` LBE2V [̒U9:b^ϋFžWI0ƒ6/zYX׊ ,Ibǂ0fĮQ@ߺuo|Tr9ݻ%V|ul%5cs۷%Ǽ|4=ii73e}V*3?LZz2XblYvVYcc֚Zb,g|[xkXl=I2f"^Y + n^1MݔfWo\r1Tՠ6cl6vg$;?Abkhۯ^5i2ūW.{݋+j(W͏ָ)Y'c9bkLnͯ٭Wo dYQ?t_5S*˝j ~'x~߼jv;ycl kIZIWn >z}+Ic!}H9[2 ,V*rA91UXh}؜Dν(n?v([Zd:xZ魜S8(3-@H8p@*Lr%!V:JST!:!Jcs9{&+ v֦_k=:p-Jz$0Q r8ȘpTt`T)')*vE{Q.C}*.)jla ;/'yvif4pcl^z[_yv3|Ag/ROE͡Eqs9`{x%>EXKWCfHX`̾vjMJ_ʜ8#$ȸ'B|&Fܐ/ TA$:'zc,CᇇۀFcqHK ]\uad< jёP3rHR#)8FWb)U1"Y{}6C2=+r"}>itp`xͦn 1(bhad((jFUzrO\r1C1bN"AאƱWƀXЌA =;<|eD-ߋ y$~{*l'6TaYDDLWs& <.JD y1"Z=t{*/K3&e@&kB}Y2H+(Ke#gkN!XX5V[+"%}ĵq 8abK` yV:=FF^ c,}# e ld}%]ȕ %෿mY <lc<^dԫvy|y+!U1$C>_qRfRi2cRlt3\%QI3M<W?-̈.fs=l"#$B\FP`C' ΕK}٭+ӹroR#3Vj׾t=3l d]9yFA|706Fmh<T@`l2Va|1!?]|l>/V>B$ԒB^&[#՗ՖsWWD峢mOu1ZK%KV i,Z-vvw>(.Y-7Zrv2*sK{Y?}Ld%xU?r{2f0PUlmuv`K3|7 U4aatlW$}kvn6J{,`,fN '3&ʚ[<>o3Q.K٤57hɩhu9@~M<)1`LYбgO-O-*$˷6fҳ[LE g>d6ǵVJ]f-65lZzca7]n)©Ȉ2G3!̒>yIjX\s>0# Xj+VvPD CESL1aH]Ss'XR휣 eR'`l8VPjXJʹ_tUQslnmks$-hb͐e~ץʲH.x1dpJ!Ld0]MF#3$aV92cM=4$!B+HX\DTBdZ~&oPb$"&\dXŽ_ҧ6fq鋱\ʹӳ~ϕVT8R&k4*joxY/a c;gBUK_}2i$?|;{ɦ!t6S3y.G(rPOdZU8ѳ%@RTXhnR'f5ܧ6fL;=sΣ~O?pL[=B_.a OYX&h7f0Vam s#ٸD&QXUjYYOeqQ9KpHC2#Ӳ&ѕqBB}ȋbB~cK 7cd:N$sW0*|[V+,dͳCN >$9$mT>=Y!XDD-b#†gt(lzbXG^c|=pP*ec[`Q,A)A<|l|epyh? ^lemz:(o? CIv߲L 1!B4řd#/;M`#Rς<GN\\D,,p50E+jqqA\H{%#NQ︛u;N\}'zcm2mRo{%w> cc? ?=pC">gp#RE19:n*"qltYR퐉ȝC'j1sO8wڲe7l\*1q{NEcluDDtcSS?>@v"2.B.82Uߚ}KCR1f9:qF<}_=L˹wZWKJ:苌`RI[L+g7ͥ;Ij{T&A̝,ev%ϫ2O 5B7`i 1d]:u/,ݵڸ(m)`XBI_?q?{gƕ$6\7 iHJEdUEWEY+UjhiyMRնyYmUQRԟ*]i?r3g=.ϗaΙq?z93<͘C>CTƲ^Eƽ)ɠͺ,h }2>xτg9RጉW1̥ϔ+W 3x c`c)*1-fn($.l .A8<2%2#̀Ly:ʹLpɷEV̍Y4c[I3&N\E.\%j,|'c{i1Vx7D(MME0MBfLuɮ.ڊgN(Ęrdbzf\+',ϟ1uØPT3;4**cJٛeY4؛눱'G\VRXߪ@$-֛rk{rR"»'/h1ޔXyV~]_^aev/w={ZHIGbl=(?8kϯ?]#oة{: 6f~f_̑};䃾 zcckG0cjḌ9 m0P 2F@$-۠c[K*1,(6z ڱ#0c[;*ŏe09"9YBQbbl xE%⑥8?uiǏ?WaJ7RH[15$=Ƃ`|mE4_x, C|~l'9Tf$8J7,{2XY%|9(!uCE4_^ٺ'c]`k.$ YM*wXYQ&Th1UcmHU-L3<_A1(cb! #X;[ `L31ngs6痷JWc}w,E:,ֱJ`~GCWNi@" %0Uw6B)4s'}o@73:ʎ!D>UU̻^ϯ61 +:D r:VEky駟Sj"z)4FK)=܉%gp1V=14@dmaEWM@,@ $,@=GJ^Ag* YN&GG[>ñi4~þoǣtzGBiäS5% meq64W`lu#Edk1~1ԟ1#Qm̃d,qۉc,p_@D ot#io[i(Nj.7fx,1BC1ALCi66F,+v;CS?1֓1ck漹.̉%NRr2ݦl616Hl~§8DǯwśUƎ _(k[zI+3V_uhG Ę411B*I`L3<|4VaG&H8qgxH8"te1v2x'S懕yJQFQv Uֶc w"F[tXK/& ncPJAE3f84ԗ1Fz CƎ|,w-{ׅ)D@vMPcu NGH"z3CkQǀPcy<ǚUK)үV+1m\Q9SO,cCV4|jFʅmzW)msI,bɁ% ޿ȍy_ƶՋ,{Cym'G-E!?ZDLe,y`;jBJ*bl}+w]*~ Gokon 3 :l"zxRyn,1ȏ=rc)1d̘ ~fVdX rv6Tz)үVXb̹Ec5Xmzܶs\VaU7Uu:XЧ{u{=5^O_8F@ :7auVp3o<CԹc<㬫o5+үVX` *9`XK{UXg>Z'}^!dcu-DL0H}w+H3&N\W}cYX$ '}J!ҷz(bcn |! 1wmŭۊĵV alt̤XB.}Ee0.W(dc- Rj{QR ⮠1|k/FV41Y, 2FPw99"'/FXApdareYD5"nG{0v1q.qHƂTcsaln(B5`ҖpP-XJ5\"F>@Bh;W<câɗ8nߵۏ'*sA-89kO.EW7|"~ːǧ'QB<8vUooH68XƒI1%`l~(Sճԉp {w[WûFW1^"ʤ@XNCHRޥc^_a?w_0?vXk׮#]l?g[o2q<^<39HE2ܳ'i1֑4qHX C:@~+:i޲N_D//&_;DƐbu#εE8j҅_Mclesc,/Ɋg\>cJmmo{C1qC0>V_PK'n6cƢ8eq\$tcXL;hkǘec_OؙnRl̮P7w#qwōA?Fc Iyε<,_%/]1fagjG?=yRPȨǸt*ޛ$乫͘/Ok*)3sV)11xz{oC.g\qqg16A',F'|<~|F<~R2&UD:7`BCed,*1QW޴kN,Imx0v r7>уt Kؓ[Ʀ9 ޛ&X \ev[}CbVNLL.Fg;Ҍgb0Y(fڌ-x\{v2R`LdħbG1q&:)* Ka9.xb7ʜT1#zTxe]"KٙFHXۜ,,VE̘c#XD?;-bԠZ=h<Z})'b<6./>Tס{'2+ot2f ?blG1i3N/xg>kf9nj2*oR9LRUc =G*1q:g,X)-rb̃Xqc'&"v2b;[?ˍy@cO ]I?w(pd9T~%;}56ކE3T8c`,hca)1`{ѱ`0vA~eČ3\ri~ r2Af+ݩhkicM~W~EIE_U7dY 3ڊ1x b9yC 4mBggeUZb LBY c΅WZk 1l ȶ)Tċwz$LMľ~A+`HD°1Js,77,c6S )es=`O~Ɔߥ*z]d.`l+)PY1+1F1dkP0&[gg&a^DV!W^Jf Q1S)dLOUo%s=50tpKJ~bhRdFXwӤ13Si!@ m&grEm4, L5SrMf5,zf0T:cN!cW &{`̦Sdj16,c0s P{ߴZ63s.8_KljvY.aK`jؑI?j+J?n 8DlNc&aBG3|.ebcZ[͛?DŽ!3Ncˌy~xHbl1FCcخCh @Fn2^dǐǮ,yJ}3Y75SkE02yG>Z%`U7>1{Ryn,1ȏ=rc̱{oғ`A1d̘ ~fIJi$cjtLGm-;20nrrN8Lܴ˗oL VY;i1 Jrtp0gLd^*ރ!cFO=b15V|a `ˌiӗD1vR,%N2^a{IW pɪAý|_l^o+ K{0d/,Rg?HԱkq]POHƼ 2\~2`H!-3aL_5QscU/)t eqcȞjjfTn.y*˗5!./HU̗Ї}bMW!Vyz')mjeƴ^X6cҭ.^Dmh9~q9K;v`ʇ'<[Ax8bNl'x16@ɺ+c1F/۟xs},%_"].2c1)5%ʌmp9|F*3Ɵ2Ek9KN&v>l'cZe6v>k^O2USsR9AN;G0Ve53\+Ke#cEK9|QuLdٵ-NTUϔi-)VW(Ϧ"+zƂ W$AypNT7޳;/Ս}M:|,QuL%ܵT(RU=,2^x$&Ei`̣/&)ѾT"2/o}[Ra&v>h:&c3 Fd)0.5HLn!+<c`ܠCݮ{KByPR8tX oږAI2_ᵌa$&Td0&:/y5Dt^*פRM:qmKGpVF~ a"1ɏ?8d0&8/֣؀۞>~XGl?ꇏ?L$/$oOEA.JA ex>>MsI}61&[d:7r1eدKi~a1Z>ZZ5`mϥf{?;>٫RƓ c48z5ڃ{-eU xTD7aog8-2aʌ ̘`g8zPifiӷXgl[i_}%x ߫xD&J\*S=Eg)ʌ':?D-c+f8 &'["m$5\$MuL$ez/P0.:S_`*feD aLZ=>-. _=~+]$ U%23^o|-&= 3Жꂍ16t4c. dS36q9/a !Sc=hx81-2R3K6LOtNADTJTR&%. d])љzs\+f늱ӄ,]c(E!QƏa0>:̵~|#ҿj ;ab@I\*[նGB|lT~ƨRR1>QD7WlW*$=g1Co6zZ6jd?'$Yפnj1aI+ dLqdά=K}aw&"--^-ki#O2c`PGՓٓy}b˓ޜӄ ͌HD)k/v6(ɘ)Fz(!6>]X:ܲxXH4g2;%I0piB83Q6K\,jN`▣c1)=M12*m/ H (œ8|e^P'Ϊ@80&DL'::PX?V#JX!*5HYQ[KmŅ2/(e ? iBdϔ`V} :x2FSL{(%|6z1`Ld̘vuW I]lkiBhJl'U ϵmذiE}M1C0ViBӃ0ǘ~'\{g"\VrNJui=cRs%x> '#!c4ReD/8A”1YyqeAÉo@dO@:1Y9Mg=2v_7vm/ݓoU'M12+_t,׬1&Hc1xMvzۮ0ƏC]:6ZN>cQUWGW`c[[鉣x\ZtW)$!d1gWb[\?Vۛ5>\*{db-6jΆ4!b?Wڌ9KNfwvf yр1DƨJi%"{%b7i 2/)+sVfsTLbLM;Fc@JL'nd^SV?̘I1GShr Ȟb:)vL:eeʌ9th2*A++1IKyNYٟ?̘I1cFA~b:)v r?/2c&v>xLy8RyV았Nݤ%ȼ\LSNʌ9thSd>2g&U${MZuʴ??̘dוCni-%|։V=_qh:Kڱd}%Ik'q^T1NKUcÑPSWM&jb#vi|֋J1F3;/Ց#Tn~#?.;U+UK5"REAbؖU߽7| [Jk陛5˛ϗ45V2n|MӘf/Q>V_6^c55R\@B{%cRFe'V~ǬԔdLl5HDs^b]ReX{✇$yƥN/~w?ߠf;3bٓ$13,/Kf5o iלPK(c#ռbLʨ첸R-AbO5Ϯdrq{/||w\OҁmRQ i)> $DZq J49ީ^TYGk8V+|M+2jt~q%4 QP4WB_hk[&Aw__7}nu\=*EhdrApD#4&z$43ɉvg/BcG<5vR|=|كY7vK~7R9uE!#8#z|BV\*gn (/KN&ޤ9tg'2|B-q`q`2*_^vF Ӟ&~K;J=AjI4sg\*duK֠Z"ww7t323jAjKq:gFLk4|R5覱Dc ZFBcaI |5.Un:Dq$׸TVl 1 FX?Sq^ťgpKAhL' m *5wTc\R5\:K=AИq(䦸Tj%\Rk0cv6:"h'aK5=v͗yKhA ?3'^sR\zΡg\| ZG ͸T R)7?3.UCF{pR7F{$oo#Hh1Z#h1bLj=ko#Hh1Z#h1bLj=ko#Hh1Z#h1bLj=ko#Hh1Zأ1= A 聸VFhL 1@_}EhL 1@_}EhL 1@_}ᢱYz9\v2]>iv.֙O`.uLg8]*$lϳ[tmeu<%_H3.Lk'546u1 \Nٟ"!vJ+ɢ~3 Pt!he}06^(sN,oW ci? >skL:(sX4 Ż]lD"Iax ,n~XXFTh|o1B{KK{! b S=T˨k *Vݨl &7zrAgLϞN b[ XKVPÛSȎbtw4 *`.*4}WKnr0W%d;`t&3i}lsSxnO Olyl/0M.nzU \}baY9HM|O=.ѵ9] ~,"-!ilϣPÛSNF֢h~UA޴ֺ*E囬ߠKU56y5+; 7hg'Q{8ݨ\-jƓ-qWA.rcJ+s_?<ǂ8@ƚ?v\cɤcjjCb;^ 8cSS:N{sjy,TF4r̨52?8)Oy!7RTCʗKyxOyHOؐZ! Z)2l&EMz |?{w6qQJ! -/Tu,z(Xyya^R hڤ4o~4y-fz01Mƴa cӆ1aL01mƴa c3uv1alƴa coEaL1aL01mVƴƴa cӆ1aL01mƴa cӆ1aL01mƴa cӆ1aL01mƴa cӆ1aL01mƴ%q.Yؒ &5GB`Ӭ{nï͌wNn\ԽE_>ʽJoݫt}cLk^kI53I}E~؊S)Wu"zƈ^/i6i6i6i69dG1˜sa̱0\s,9 c΅1"m#҆1"m#҆1"m#҆1"m#҆1"m#҆1"m cWsj]u|2x,264nl./הwm@xcFR1&::::n4ͨjucNNlFڌ{l92ƔFTct{/w.98.ZgemEdV{rrR{Ć٥mav$?^ԎlZZ/gky K̜5'6lyc1W35NJv[1aX.{+ce:K^sb0D[yNl0 clF!Y cQhiK?}u[I>xy{bZϲc곬1{Gcyl,twF-mdatBJEBۂ4ͲAXh0VSU1)Mk "J] 3{?msƎ&3LҜwyyzfNO>+_9lۤJ}ؤGncoK1mƱ޿g4nlU41c;!ۥ윢\\wT}GmTä}17ZXr$v1Oum*h_(rQMl '͏183H1jƇ_o)DΥ\q7~ދrj-9Tś18;6Qzu ^&sM3YM!2Q4дFXUKS [b`bݖ%篩cp,wBЫ<=4|7Md AR{y坠|Dfw)9X(\g sX:8 v^\:Vfwc9Vu6iQf_>7.IuHcc^Z46iOoFNJ;jՎ^mһbs媣vztyE:4Λ K1 4Md̦fcںǓ!x] C18lmw!x ǒ{{gP N%["28B96 Tu,"cݱ!XcIRM9bp*:M8vCDu&8 p,9zic+XY2P| $\"|aX6"K_fwſ}d96S-ޕ6дˊd}-FPm򬮯H.F']b8xձE8^X*c"cc"cc"1ǒZcK%p]d?pu6-+8; c^^8Ɓ똸b3Wg::&F1m/@(FڻcԆ^++ 8+}Ym{B96ޕ3vc 8eo.4߶q jz*)Zc*9uKsj 8ͱjJufM:fW-+OQp_@a_+5;jb>Qcer[ǜ)yͱ=yGxcy,Kcnczǘ1Z̶徢P, 86u{ S WdccccccccccY86KЗ]dScorpFXn K-{Y$hc׊׊"Þ.28,08.(׊p,1vaccY 8jK=um~9 }nuc13^S'nj]IILu-܏( Q9?$kɱSM1%<<mk\net[MM;1nD+1:gboݻ?2miC+M;fˤM;R N%x&]dpY`p]dpY`p]dpY`p]dpY`p]dpY`p]dQCo"C`fOhdg!dC(0p lAVka(õb b!@1=Op&U4֎P\ɿpʨY_nѻ%Z`|>xxݔK)- ~1Ik}3_J=N ϨkFAǺ ve,+ҢgfUcl1ʱs,gmy[%s_;Ӑ[Ю%ņ[R8QިMJ9>V1k[>5 [Sd=֎tb}[¶<Dn,/vǵl*Iu-7frQzZp캸slA{.H=y1Fέѣ[Yhx In,tZ)X"?n& 1z2gF8V٩aRFZ{Tc_R%n ȍ;Ncu39$1 Oc^#>Qy}zTȹ4\1fNFTި1'*c-hා%;UFq)_-@};Xf^$%+,ݩ7(t>\wO-8}ɱɐcS@L$(֡Op A%;Ʊ{uYR18f8]g:4̔:8Ccvc{5up,ܷc-+O2ƱV7?̲Y_o x)w﷽O2^Lfyclq,?sLܑle&'8?1)?nuyQ~>1.\qgUi:.p 1 .p 1 .=Ǿ@;xmvKc op124xkԱSSwap _ c,zgZUPbot8dtpVǤr:8юU]PI$[NA(vLcfKz=]mz^3{wU118Ve9 J#r:7ю$fwOJ+sy(9ܱbR%pzw%L/p 1$iһTrF1 \XszHRڱTɅ_}TWcVc80ݏ/PA@hSBkha|-v H:<1j1F8RItjcΚɰ7 mAQǜji>˱^cRM5:{U=lrӱ*9t9f2X=ˍ^I~|y̶mOAſ˾troqc籱üM<4ca_^\Zpnk·Ә~zvrljhⷮzUE6NYbI=wwx~cUv\PتfWkTIrgi6sV,˒yr^߳k_iX8iġ\I֟HwoE#N0_k*WnP $Ok1n1bݞĿ& x}sν^_۩Cb%jT zTdj?P!Ƥc %X*ʷ/JRW_=o37&Z'?.&3d0kјV+|(~$9iu֦@ Vd_CEkO~U ьRVUU`rSH2Ȭ~j#sRľ{Ir $$)d)@aY!}QHdL*R7btcgDR!'D tTa‘07Y&I4HOƼ#؈eo)*2sS~Y\RQC!IHyK(=IgK&8q)uK{%ӉIy22 }V1+ט*%sS< s 4& ƚHF&].eRPqrӑ/va2 KH5~RaQ-HC4xT@H,V ,1xJJCh)kϢpƤ|JBYne% 1$59p$7L8f&ƍ&fugjBc?Rؘ/N5)!JrB'3V9'IdL]BꇥGAmRӴK .FGęKCXjuaL) pzDz/_zV K#jڱ5 QIcd[u$:9iVӱF'GnF}RX|Z*F& )Z x7TuqfUG((jGӤƢZMLR=-j8)` l  ݥCPrS%bVdiĭjL|Dc}-{t '^Nc. KakADG`UHRHO<$p3%(f%@͈VAP#ϫzMXʚh-(!Ed|BtVsخ8m6$x<Z Yq+*'46#]TX#~!"IKuE铚P@Li ǜ ތg-dp)vmjhcˍ3Ʉ#,Īi, Ja <4jG/0FI fmJlpQoΦ;'ݡ¬DcՂodzϦj#Np; yqWpd5$ X_ e(s:ݣC1Z@ ȭ%A 䭎%טp:i n@[cn L: }̪g]ce2_|ʊ@^ZS^,,4F#D\Ȕ^LZPy64f_;]`qH貣Tousg:Ko%m,y.]ߞ]k&ñzXZИmbVIE hX]\4n% Ŵi c.6DkjfDzC@g/cpVgҌZs,x#'g lBws~>d;cgα6 00ōSsf l; v|1Hl(Hi=I_sb텡Ɗp#;:{(%:i,pUUdnu{[ ]NJ (J+̵;.ٱLF9 ݭW,u>ܩf#h%Mb')hݚ!{/Qi-cEdV+PW"/p޻e-&6ԵVq%v.]jԱ~ZlF9 Ǯax9.Ї:Ѯ;H-]AX9vhXGi!7ꬾkNdbv@Z{@Q+&& v7ka-5vҥ=.̟ֆ30δT۵Rn^֜ޡ0S#Nm{&f)|A1y3 8^ί1(H-c1:XȾ^Z M['S*=sxq G/\lw懏uM\4^F9 ǏZFf ѝtA:|6Kh%D޼O`_+if:J{pKk5%9tr=%Y^"x5V._T?3ԵR`ְ Gt-<PjLnCisɋ2w^[$=#rz}:ZzVO^$rk99]"?',4ȩw^@ _CGИ@Oci@ klBt G g A3LƦCahQYяAc!Pn{M 00Q-,98 [VZS{/ 4&LB7t l +$2=yڰbqf+KYXfY &rⲱ c}rNu[c0d6X}z%\xDcϝ|uI੧dgYcN.0/|f綘>ͥQZ"<J̜WU+[~P{;87yV v7r{peA#r&h'G|iXʨV,#"AʨZ,phlrw>W4)hdHg;kX35C;wd6TИ`ZerGW1zz0rXffN 6P2ɋ X|TUzY̪1dAo VX ȯ _! wm z:'SI\ 4 I*#%#OXe>ZzsK*]חzWh+?(?Ȍ;%޿woXb Ӫ# 0}+S yrh0b 4*8U=h3$(++iW; szzwQYc|[ƞ" q"2g ȹTpxE@'&zrZSé`nmyf phy0.Y^S )Y9#8p5$!Z=)5NtCa-;5l]. 4 FPSE4Y4Z.xۂ#iw߽"1;% p6ǜNz*1*2w_Ͳˇ(HCEG+DZt4o(5cL4mpQv`nQu`C}LM3)\)H^-[#!z!Ƌկ75v5r͚5YTɌ?u7 Q]COOf9wNQ@a[5;ٔM^=G̱Sk1j+'͏w{E1lyDvfhYc.?nG O{FBdSv6 6:kW>=hk#k;E*EYc2- ^BbO"PcM6!6h`hfvXG)yN=ƊU˖Y )ˡw8eٲ?~u/t~c仢46HaX0=XCO98> B2l~0h 9yӧ>=yr7ᄏKbd^Bd޹đwXtc\2Z5HBD&„deKlFt5ׅ2b`6 h=1:lY4 |('Q<"׾/Ցe7`/VcTFٚ7F(lHk^B;f_1:ڱyDm_ұ6?&~jٱ}f]Mѓ96M۱#+7n /K|>֊H/cf]zݩy,'f~Ma;vnݧ1h:%Wp!k;`ߪ;ұRp6n?["\ Jc:MJm ۱c9vE* jF'FctnQu$j{ubliZvWW0Lj,7FsïeVP/5Ac6ugjb *5X>Qo;fcG86==2:s1?5(h^ڱLBtAkMbzjG2i r;[M cҙF8vnD#ȵc6r={3(ѷcknr_96 wt?Jg8]µZGMǮQt@}Vψ ;0=5#̎Jg\ј;mpe &ܺ`Z T:'ftx(8ll";VcӪ0Q#]~LOFw  reN+&$暧܂5-5q5RI$x E0i**ṈSw0rjn_cLT _9־0P!Rr G >fpFxr=hS)vJV ` Fk"A(!m*ܮAb!AEpX~L,iXErsϱ?>ogz>p _[p/<<'7m{~DGCs\hy5 L."5XggO;Cs֎OSr ;2džrAM&`P+:.v[L<@544[ZE elɮ+Xzׅ),?cu?{ϞbRsPY9=S3srӶhc4J'* q pװ6/pCkCC`4XV28.>A"N$LHDzcS+6%a ±~8 ^thpZ`Zy#rS8Ĕp(t)7*6@Hl! ;3( / ğpUol9 Q,XM' 'פ< ^Y*=nsLu;M,+cB! c21L};Kʅ$$I@8v/1kby:r5b13x GkÝ?h25 iB<C)^8//ʯ5P3qR=y9бsdtlwY|>Ս[=>غٱ1p5j+}]K~_YL𘃚y*%el(֎OSr,#0hjvrޥ^cdɓUt<03c$']%1egd$%dզ깎hc>g+R)5Փ r22nggd]]c)cxcQ}X㽹Gs{6{>A7ְsD+\phޠCS =#8ԟ59a=v[O4g}=TlVVVl!71'')Cm/%e1<Dzg3ԦbŰل~Fyc3pX(xQ\dCƜB#sxh(.ꢶ*&101#[8sLÃ8l*8t zI-M1'/mQ\".b&+[BW$CK`͊ !+m' + U,ڱ8SMrJeb[ne$3Fbt)3sdENb582!H#!ε? }ҹйf0B%\M$9e`:YD 4ѦݎU,Xu :VM ~_p8l`/%1p~^$-vv:`Q)q̛;ZV594{[ol.U#D`H,lErr2w'<ޱԅbQjuOs@8lcHcc;5uojGihihLq|ci J߆=JAaq0n*hX"Y"I >ʱəj8VmR`݈#h;|czgKZ}8ʸ19^? x>20Aq05}А8t7zt4:ovz<Ώ;؞mn %a!-tk~Ffb)cBj OLpO՚.!CD;KqҢ"eZChDND srVVt.D&ڿh;vr&ы1rl 8Gܽf=ijEV)[)ڱ)^<{ڱt(SI sgϔ]MkQQז+.G$2/_]{gG7mN !S(|l>ȌnqS"Ъ-7~i<߳r̹{;+-zEZә]ONu s,pb*Ն!-Lm?.\.ᇗNkE9Vl \Z91~pwRF Ȅ2ͱ qr~,E1'ӽz_;1lNj$?Zc<2M9 ds|^o6/G8f;> +g+V7zO7Wێ1AeG_KzV'4851Nɱ7ߌOX1Y|nAǖ̴}:UR±_kߴ$M@F"+R82(Bc27]V#]FG&Z &{7jނ1722Bp%RDs̗kyʮnmiuuUuU9򛧫ݮ1bznZ 3z{eR+OԱ&s !P{BLjW\)0B]_P.I_v1>DSޕAM*=0R>EͱC9~' GƱ++<]] cdksPaJa'k9 B莑X u~cr')`$X ~`|=cs~٪A:p|7mq;q~|&:r,5  , CNLX#uN+MIJK8f*-]+6'_m~x q };8:D`9yx7f =!ǡh$jp4@fءH;6P OoU=DZ ),R &g Uroj 1 Ͷ"t,-Q(FfK}>Mwi**AnML A p-ر'[ֱCtl3No/F;__ x{ر@okIցk2R_H ƱcRP *֐]FMX˱5O 6BA9|mFm y/c{m@f> Q\Y}㗟iϿ`+k7SvhXvPJ6X:cwq:vXغ~x%]16>  r4I9iI;5+|2q,sag)-޿ZXx,Iֱ霜jٱ!b&ѱA+v@@hW$s19bg?8smslHs ?el-ħ:oI;ՎiJ+mKN%[ūԱ~?imtz?u4J9ubcwϱz޾(f-ma + .vѽd{h=3]ʱϐpL%9/j1>1[[.?w2KsoZ`:8[[fHV1 >:?Խ`MNC.s2Z `ZݚmώBWбr1ձX#ccdīx!rl93n\ipSXL"un r g[7YfIKsW<.i]OJ ֱ`{tGL}#2 c߀d.wΟ+[im 4NTc7RaS;(ɗţs1]Zˇ.cǔ%Ty4*X &?6 bFsՆ˪cr,O'%Aa:oWhUQȡ:MǾX18֠:v@н Џ)|#f~?űI5o `Ƒ4߃^ sVեSbL14]V;c|:\IvAWABTb159x:v`@];|8EEE (X4KI1RxĶc8q8@! 8kzw(@K!.[ɂ/H6cUzxE PPUdUr"WTJ򧟂2X 'spF(I~St؈P:$s8xĶc {FcUqWXe`,XWOc6ʮ)1`U3yD8 %c3,cg%=I'vL gScr{3cÕS]C]kNcsWQa r5@2 l.󍙆d\3~^13%=cr+}[̱g~}"Ѹ +xV 0tKcݘwl j+5BK[۹)Iųa% tQpFHcg6BL>ÛVKP[%'5^(y(;V|a8琩vNw|8V͋ yc-pd7gYhimlY54bxV*vh#c~&Du?#ҳ捻X5 Zr7[anıݫvώ51$X|`Kc%Vva8x-蟏^'~*[߷Et hy׋}<^2\h yNJp@ |lB-}M3"0ZKSΟQԱ#y;&sSX~c\{+ȑ1[EcY&0xuSGw|@.gJb@̞oA6P@4csㄋE>oDi a"11fRete)O V;쭾ص€Tׄ۴r|) 4oPa[fn qLfa8$cncċ{=@PGp4>wb=+8'}}t59NHǐ<%I}Bjb zlv:V䕷ZvcCjpsc% V@78` uW%vLSP,,EWmsdx8&Cc/?x $`G*,Cd*qzW ;eLbÇ }2in8$B/x1e\JoF`eaPoC6dH.%׌CǤ;/D˵^ayam;ZǢi,7([. ,־ϴ_)P`@:rKcAWYLofq ܣccݵ86p8:;1 `& qn… kbx{H6C3 GXFb>*qc ;;Lߗh97›`>ɵM՘C͔(Fz``>Vk `v;jpml4c_ ;qmXX bd[νn〗 hֽY&bUy$#IcL"P,5GǢ7inFޱ[ Ζυ2–ҲO6jꜾ%T;) <ٻc!qvc{wuW9cձŠ𹢉=WeHgMSL,VQ.OmRj+ Nq6`72c-؅ɤ*Gf(9 /8L+8={#Qrd{[;o//lcoGvãtl]n׆tL[X\E5wtql*Uaa1X|v$$ sbXLi@R/YLG3.[{[doLEq$cWNr]ǰ{+22#tiեw ot kX6"Y#*O@h4i`f =FLZq:5l ae{3F:$H?qoWrn-d^nRa\[ӆcŨc"svp~އ]j 8hRSop8 4sh.\69Gk;01-T0=+AQ퍤̮K13A1Aj"ǖC=h:O: *dь1bUØZ5RPf6G~[~Rn|DCrށ5dhY(Ro5'(Ju1/c|g[7YfIKsW<.Aؚv=j+0w+~q>f%e+Q1ÂMh="8k]K;td6r$~ " NG%Hs Q|>&IXio@2Wly;hl-v״6uNY[  `̱t $cU1wm>8Xh4 FW&Y,ͣ+T[YT q3NHxߥz|Rz,uCT"s @4ad} ]Z[ ^(v\hX*IGXtFwi8T*]!.CnPbRCtd]̦7(5ŐXR- BHҒl4JڗW[g}<_c&JcWci:r2_zmƇ՟-2]͟DSu :Uw'78X腡P./HP/uTZDz6RN:v-5 4UG4Lk>?_逳| Z0R”K8߄0.=LH%C),)J)}2i!59HKwUگ3bٱ,: G:ٕxӸ,155 2 <03lgrIR&V)(V9UMv,%"=V_:fdƨШ1 $qGz~$d*H+;gP ЄIrlWLݱyKKvۿH//)@7"iWeObS;cU*wY.!/././/..3ղcs2./ wcmn0O3Fzx̛#°gj~֡$ 7vlvqba )_ȞfkI4 !)wX6>sl/\%2)B:6Y;ٲX{BЖiBbv糷hXmXF_, ׊4ېÙbch|7gI  ,,;gKMH6XYuuYڐ,exzĥ؉ 9-)T21<( 0'm$, 4rQdZu.[lr#NscԱk ˄cKK8Fc!V5Qwejt]w$r;ۢ &ZQ^LRqL:y\o53zZN8ђP2Q3C&~s,&N GIz+}!"Bt|PSDCγ\l8mq7k +Qn1:e+ec$eYǏAMq%01:t:&$17qbpnO T #;s ?~y1W1dc|wc N iCF?i#AG!{+ 865, Xɐcq:դ|셲1;zOc'6޽?!;慟|P7Z=4rgcY\!m$#sN00qΐ݉1a73?ow'DYLAj K}o&lKw)3x8f1uOsRSFB|]]/M fX^޴X0ql@ı(o5J{R_%~?hGkk)#ZU"\S;̱2b^f,ivfܬ\՝ |vn~:m+x,J_zhsh &.-YcT1?ؘ2g5;1 \H$>:90,0Kh>a̙S]y 'Ҷ7.yzg6ñ[\·Κ.M'X+lLw4ӏK =>&@3Jf$U NмbE1cBJᵋ]>Ιƥ=7i!cc{z[MYeSC.*-P-(JV!JٱLRȗMeBôF:Wb;αO|!?/ӎt]ӂoߠ/7Ky|l| hr=RcVb#m#tzɎeB6)Z `*~StN+HrAu:>Zױc1If9&E!T\X?/;Q ? r:Q l7$&v7e2Jf,YǎˎeJQd2Ms6w,Kbl7~Fv,d1ԙru#EDz4a7!gXsl hGT2Yv,qu#}o:x.o*Td1 8ֺǎ'&ĥrFkfm~mnjV`b6XkJNM3. M-б8֖cm;ұ1 }Èoȷ$cc0%tm#%XuL,!UrryŢ;)ј9R8 "1pL׵nϯ*IcQ޸C {}+ڥ^.8_! x򇭭9f #;)8vfs1spcX*z{]wBe׊.o rRPǪTWz^6)KCs*؄0bwl8PP U}Ap`kRs&9V(;5 Xʽw~{apzC.vUȧ~f(,*A L@ӄže{pE" ɶBvCɮ]`O:3A "wAW ωc{<дc.o)^M4 EC׊:1Dd2I!;#t\m&}ɠ8Hw@kFv}w*@Nױ܉54j{"Zs8MA c{&8e"ְM]d|< Վg_~uXXh*Jo$ RHNLα:C<?q>Ku;xJ<ˎeB2Keh,‡aJ?t X.ɽgcȎe,ri_qO1֝\VLv,dm1vĎ}c+1sr1Tˎe\\G3ʱOu\J̜bd2Gn;ئ0{Yr,pLxnKc86 ip S̛L n;Pm?FR : 0w ;w6w`<ޗ1ylqL,f^}=[MQ=DF]ׯFI8+<-߁xsBvYؘ4"V]XʫNJq >&cHX@jvtn<~ˣB,O9Ѣچ{2 ෉vѾ@m,{NbJfn,;-رoh:'afXs=T?q']wLa*XzU٪Ph֘EM <E Él~{N!aͰ`15E:=<vvzsH9o|LcY_O9wQSu1]*8'Cm _1P>MN.Brge4Cj"$c@"e(ئ)coTdҥݱ|oW,۱#?}--As:'gȄb1dn:6 Ì fL_ `3C Z!EvcMoXdd(iN5){} m}dk1X=W'm>X[»tAAA]A3?TLuH %@Q)@E?L!cݞdL/]:찙ۤu4%wlb1/E" -}3ߥ(g|S:BNBgY RVL{9wqM;>:ffb5olcdBbhBG >TCèe4aZCs`mõ fmij 0MiT86𶿘c79 ~c7ɳṟGyy\·KC9G}R5({Sv,=CZ 0uq:σYjk0Z1TT0c #VcгR髪0t x_YIZ]ZZʌW[*⮣m#1azwJ3RXO7Oˎ=oLc=0H]].>9h4sЙ<*Q*60t +))U ^*V,AB/ໃ)8v0Tn8K1Pc= V!-V{|Yj3Z*,0g`/G1~f91/n++4S« ֏{wUv,Ȏ%ȘPeW18|z^.^mw}=zm70v+r}PF.feS,-RI) ý+@v,Ȏ%_=no~n u %XGl`qz,6X vƏRQQRX-/g/).fX΂^4å 7EGwwt;[ӲcT]nD w,wv=m$`;Ɛ$ʜAB7Efr3#. cl` d ǐdN"hJ6+8=p3{}.̷8SUrc666zj#+fdU[)w]*k&3>g-`?ʚS,cllise6͕K. Se] rQMuD7 o,T9 dnn3aɉ`VL:Q0K#Tz0/M[QVE{\1aD"JXUYN4`u~Hq 7H T Z h!]UREtN cX9`mUoo/vܸHEFPEs:if!c&؝$:xˉC1cZl(a ŨB' Z><4,(&ps)XT/_=6*V2r(ەCif? @y :PhHu(37TA9ԑ)z UHhD!Χb1Ex=z1٩β4ՕC׊TYEu @E! 8B!,}ǭȖAz)ʣEWƆ1os+?b5#v;cUɍhNSJ%c`=ξ@...ЄRHcsߥ ppU2V &Z0Cuˀo VD #Wc(8gxᄖ \1c`˞otc=ר#cYWP,GMQÕ,6>f(cҝ*`˃Z̕Cg̡5Q4Wyk0X,Uw&bcs bl޻ ⣠oԛg<+̱[Zʥ16jeFRp\/3U',c@);Xﶔ,atr: |e; 0ֶMyI -A%ahnc cw@̩9Z[~.;ȏJֿq Ӧ$ibj`HƊQ2r_c O !o#sd߈1 %|TCVU[ 2f<BPl"H(APW1F0cQ bl~ӏ1=y1-Tc3FşP"Pc\c?YacWԍ1=yP92dpR1vsu1IǖXƌH/HbU*I:1 2V : 鍃vi7@x}czVL\JǖX}0pP*9U ĩj$qubLx rᩖ4Gv0:f6hwccEOgIm$)*[1*pH90Ҋ?D ؟cyxGSAXȹ ;48ٳZca4WJg%wr^XIX+K1L~toں6FB42` $It\ٻ$kcWWvOeݵdzX+k1` zvP1]?r8Є :ۤ$M:P\ R+LUR Z$n6.WHǖXz̘@Mٲ8Mk&|W+V3ܛ]Ig g<qyBUc2c|4 m n۰0Ƣ=}˳PomhX-^v]cNB:cib ki{u7Qtz;A)>PɋZ߿TyVU'=oyic 5j$FB~^d&X@B -h?(8T|x&8x\gJmN>;y+ ƲkV*-=^ҝ\~lP#e8sXU6 QbRCZe?XLI7y!y C56a Zc3Fvc9\lSYy@ >+pGF̰;GNVё Ǝ˘p„{̸ /١ LXbNg;;6ְ[ʘ{K@8l#S,2˘1Z|}] $ȘH4)m8MI"&LvTb$[jv>[c=[exFk1NYc3i< HLWr1NpjfY12s-=F iV= cέ-$^H,2f1K4.8ڼ?XûWh' Y>%T$mjJLmF#aPK$c2ΞtYUN4t!lR;pXRѺ"i"z R[YS:3̔ȼE!SMgs]z,dua9߭8y2o=LT<>6cZERmޓfW TƲ ,;9Rt-*\TZ_?: BuC " Uٔt.JQ0ī v$ Q¬@A6lCXZƪRkVսza7?f8vu87ww7ޒ]D'V\Oϲdi&ۃJ=hҕfl&H>p|L@/'dV13 V 9Nb+|qYկmXY%&Nx66`*9+Eз5YdYIL+tK_{Ky&p\u_aà/Q*a o%䢉3U˱D.p$q]P "YG#,#Ʈ"Ś 5MVaAKJTR&%n: * v@&t|N`U \Q%Lj(#J1kU0պ;~t3;;W[NrcY~ ]+|^~wPkw y W hDwad,!O jV.8qs2?LXMiclu0FF⡍Ж$R=ÿ|qSS:[$z#ߠ9c.\WtأG?b-Q Eଵ~wȐ"[B6yBBr ' vg ib@8S,US˧1`[icgHLZmD-z~/z&?o>Qy"z ߪX@F(qR50&aGWuX A-<`\˿ON\)cLza~1ύ%$ROX@l{dw?Mdeܡ-Pڄl$mIv~xDX BqV T 7yHt'5s; cۙy̝9Kse9G.L{IUJ\Vu @S6APxQ*cb 4\7Wx \_f01U "ݓ\q.%P<Gdu4G׶Șoyu=^K3PԊ$D'%0+1x+ %b\q:UbVҹph>cH+:c@E Ma+BF(/ƀK1=]+4O 'xL^xi\~-RG'c,IFAxz,X!d ggW}c?_'ytWi3cHxe2ȓ ~L̍91y1PݾKVٌ)f ݘdƒdX]2¾cτX{XCNOSXk8cm Xsnb)d ;ЅqdM)~l 7Vq_1Mޙ/SfFbc֖͘r?scz0d-YcH10Q7VяI_GCwl3#FT0)!!'0ЭcgSM:;~GğҐ?SFLVb|x^;4y63b1˦D7:`}S2q# 5qWf 4ݭ8̈Qlljb,r$17n҅fL0NGE~tcIP9٫0{7Ud3#F1qp.pc M0LPԍUflNvWd3#FH"hLMz0s'(dHFC1E{eb G+qؐ1(_IuҤo&c,хjj]*`m{dH^؆G5K`b;Y͌E8 iR7z1?b,jhMMd K.Ơw:ctH1J29>Ōz~K6{foV&cl6!1bI]ȾD[;c~zhSXB|Ī -v\ͪda Aɴ.Ȅϓ/A>WG+ҎiUؽjɚXiŰͪd_'^Nu'''$| L/=]T4lE16OmP;11Uc #QlȘ[!cMMɈ+CAAz1ٻƞO425SX$^wj bY4֛1:B cqZB!d2̈ C/_{z ʿ5{,ͯGYn~aszٹW_@ͅuj[^Y^k {/?.No Dje,S$"vKs=DcY4֛1 mMH)jU_1u\)EC'zy ;X8Aֹsm )~l`9Ğwsgod}1s ;Kccb,zഛ/ozQMJ;Nw4-qw׸5(k/KzM-q[//FXuX_m劏scW:W5~;Jb,EcUw_=}"ۢ ^ζ q7(pNn=x 0L/ì/zڞd\4z>zfXf1뫍HqJជߢ9[\P͢ެEӕRh0tf[or~ 5i65cN +Y? 33!&POhZT8`XzL%pOSđ!`_pcd<=o%t]9|xTU+Zb.BZ*M^ hS$WI ^|(ˆ] "-Ҳt =B\w8{rǎσ<gޙD(?{`0F,cmn ébUD)13sZ1Ur$tLfdr=AɥgZˣWn\P20O[sŘinݮ Ic,az-͘*9ha:&1ٖ:(L 0^i4 +X[Q+\2fƯD*5iOR/ὢcآG sSI -9xw(~LՈ_D)6"P+w( TRؿgLs6}-9G|ORc}+JmMJK|L~ᥩQş.9]v TSF<FщcD#,.)Dl_3JxFE'f0$m)Ow Wg$J3&O n`7S2fLkό\PuEq̔;S_'iAy=chvgt ~2!-o]fY4L?F\b fJ)z4c X%cq8gy/q-wr^-:Ǘ鑖fEd1KL0S LXְ9~k^o"c*"&KX2%AcYNpgb0e{ù[zwЉjqlK&Wb -&::Ew&N(kƪpJ^޴c͔tc%+t̔;˅vYC0Vm﷫K3{i=?Fy'%( WhUĽޚl:IMY1wrؚEb_& dǿ(ӹIh R,Ƙ;e,MKF'{Eƚ[30(TZbkcoϓϱ[zkƺb@Df炝VgWt[zk *J3&pJ`ߚכf,"AWȘ%yy[2s-\P{i"[T\1hv!ތչ[C>Ke4{oR+ǬZjnjHƆj6!vV~K3 ~Q'01\7{G%"*֣r|~5͘25"cCcD7ey&ӉMXS9uZx>0fL4c11\ztwTqS&͘*qaL&hdXNnš9 ~5͘2iTc c2yt)cD&]:-<:Wӌ)fLx0&ʺ)ED&:-<:ٯS'͘*aL&}uSMLӉMXS9uZx>t_M3Nm+hQOwZţUh{FMrELJοOt.&FMdɻ'ۍb>_G%f1oaiy0vRuwlR|ǣFTyj;yRTTge~{TMI W`&#uS_vJ-4hߌ@[4cn{M߹_} !MDu.!+h*ZTw9fNNYVg,IF 4|z~8sm*G+0cetӮpƺDwH":r$"8;Isr\ϼ`/Ge2&#dS&cU~[`_*RXMletˮpI$9ёD#0&ƒUjTƒˉ,i?{ƕq.]V,oū,qla~Roq")Fhʲ*s}`={%3sϜ{&'׾2&3oS!+߽@ 0-.X2&@:[g>1dva"7Dp"ҁ >Zy"tHptQ04 6pBϖ1V8Kl֗g2%GQVX=W~D_k]^Z[2=a޳jV/FF.VxXA6JsEcFx#:DC8#!sQXΝ~ɘYwԜMsJƪfn,}Xt辻vɘYwj:q"EHƪew2C}lꒌ;*dj0vvdLޑdfF_]Cɘ#؇ 2~iW{'XF*wp|KƤJcO8U.K,YS_Q8OAd"˜ϥo5|u,S,0.T[]U3H$ \ӵlbL;V0nEsXE ePp8]Wʇg1|4O iKI g(L@XA&ad lsgƆ&e.p! ?p|6+e,4Z<1:aDͧ ͳ/XTLϋ(]EIB-ՈmU e0Qy0' Wмׂ1q/e r HP  z~=PW){ A$QdX2>]܂1JcؔVؠ؋wG3TLg)-yy2>fZf127)_ ] '2,(Za ?jdpzbpZixNa8J89ۗCg}"[L.UYM /0X.XzwTOZIZH2&k,I$cֻ#ɘdzw$5Z$cRݑdL2Xj;IKwG1XcH2&k,Xy&zKwGf2Vy$cRQm"i^oʘT Gق[{0摒 3k͓`{ Vqky H͖d],3!,#F͞sX{yv꠰*v9EZ6L6'a̕g="b&6|:9Z(՜Kd! +!&eĨk9*!Q +X$e5d|2Iߋ?B}t6=\?%^V! Ο?NOOֻd_c'lez'OS IhSx zVrRMj?lz-ml+QaT!79*eߏoD?֓^of:Wߏu` 47;g{ƲӕKsyn/U ,AW%+1FFK3gg6dY(ffc6>l>H x=}( & QF0zmS qJpa1ƒ[4b,t|s[8hr-旽Bas8 K.~8O?D^Rv_DG*p r~E%3IJ>τ9d6?ϠMA3:`kK1|0=g(LN 37xG/2fJ/%@TF Ǫ̞P'2֋j>~a>x(EhGi'~=N>6 0Y` Ƅi_-~e~+6Ndz1>Gv# ذk`Ls1}w>Ecl76׼l~cQ|B86,g1j|d7ϰ~ol76?CgOdžѓ9+Pco8+X#k` `Ll= M:c0&61+ 11^`Ll.HƐ61!W1 ` c0cb11` `Ll0Q X"8S2ƮkZ()N!Xj BKMagNQn?,\1v&vP0cB"ATFW&0vOpms>&`nRhGdn)'cr$2b *ᤓغal04^}*!E KW+Tb-yN?uc0&EF񖘡غal0bp ]Bys3ݷSkrˎc0&Xpု7 ;_' )" ;ԣIQF{9Xދnn;f+. baˣkZ{QdΎ)bL=Ӧ} ou6GٺR vWȖe_oVX'0Bߐ>ӻ=ؤxfTnW=c$? ZZwl{_f\[,f7ltfdduQlT9͂l~v}Oɥc 3Jd2XXPq[b\G7V%gC\baG7=SQ3Gݨ{5v##1$61$61$61$61$61$61$631EaQ[U vƐfӁoc/;21Tl{z/Ǐ/r1$( \eƬrScHTe-Dc3.y,d:e~-N2\匭3"cp"7D2u8]b0O%0ꮬh mH=J̕UeSYt"7vq|Pݕ1699>#2RN=;Wf:<&/sc|rgNNNIg̘un7`Cv(D#l{0ꮼݓڏ0Vr3ɕc_a ]ycX%-}#_I?_$ n,:E|C*g" {߾W|AfVW^3cِơƘ:^1"fr=P8z:~Qf:3~a+Y"N#d&4U@ߏ!*g ]Xّy'7-YC5YFΛ/NȭJrPi%f/ZWK3+*1en5Ѽ1I>l'I~8t/ࠧok4vT_8O$S>$ߑ{Ʈd$>Tagiv$YhFEajKaI6Z;6`Q_s65{L Oa #C0&6C0&3cZ3ڇX5gds&ԝF8C'1#49f*U0tdz7άTrǟ]3^8q?%YՈ11qiYՈ11Js̍o>;Oc ^f8 Eû2֞Fq^U:w\?юIw_c7=Hhu ȯ1[􂃠׭RiR70}ñ \i}ҝW=Wn?(%1kz8۽NcF9ޤq(vȣ^=YZE?:ä{?q:&񗅅/SӸ*iLo;JlMڕnѸ:koQX DTAЧ]( !h|\iAЧE5EY+Y+kNYr{Kh47pӱޗ67 T]yQh7kUtjl7?\X|XS1K*NNJs@˗6ÎʨbNK"S=pDŽ- Ih7c2JT!Yꕻ=Tǟ <:6*:سx%rl)iTu,"cp p,D,ñ8c{*:ͱp1}{taX;yL fbcܛM`w6ٽюGv7Ǧcr,9UEsѶ0/NɟdNMOrcsp~K.p,1v1f1v1f1vE혀c21 co;&\e[p,r !Ǽp1ujX=3X c¿ym{;oJQ{x"XμCQ1wޕ I*c晢 cDwIe89>$YrRo cXiJRE阝=>ǮG /c_U4cc5]:713=9'kұ~X<aǼƺqzj'&|ǘ1Zj1u<aǼƺbsRc + 1 1 1 1 1 ,cko JK.;c/T8v/tL]y˭zǷ$opc׊׊"Þ.28,08.0׊p,1vaccY 8?tL1DE]w/-~+-{[&pKg~ku1eVˆc':FTh$Xxpֱ^p1)tX 蘇R$ &4 EK1Zq䘴B?&Ŵ2K<{}hcfw*:-fav:9VX]-t1){-܏%0 w[U'Yv!DŽ(GuIL:<1FJZڱ E:vުcrTvl cd똭oZ1|cuҷqȄwN!z{6njͦw?fUO1ž;f͆x_} Eˀc&bqμw_cWg q+ut݄c'.28,08.28,08.28,08.28,08.28,08.0[@7vO0'x8df7s' l{g^!퟊׊ ׊>Ǟc'qGǖO[o|z80.Dz|Yʹ!ԃZ$p[^,BPdUT!p*ۈ(;3Y'XKy~̻. CX=}8tfpئSKVa!p,|v+0 b[8ǘդcվk"9ZQsD84r̼Hvܵ⊺J&Nuo~ǂDNVǂ\Ҝz0]r#F‹c[<`⻼]X$dJ_݁c ǖ4'96LA9191pYR188^W:,Ւ>8Cczc[}p,ܵc?,*HӧjMk1)tݘC'{w]7V<ɽ%S1VcxƽO@p 1 @/p 1 @/p Ǿc?t @/c)}C|c1OΘ^\ =}h00 +c1~f:^o[±\s':`$#ֱ kjF9V+A*~l/4?,a:rLbph@9^c8^zcϱ_ :XdkAlIENDB`awf-extended-4.1.0/images/gtk3-plus.png000066400000000000000000001522671517644610000177140ustar00rootroot00000000000000PNG  IHDRcƕ9PLTEGpL¶ҫɹwᴡ̿ڴ꼫ɺocXݖbK^IiL?yiϫͿ\H_J¶ۢ~ɭ]I͔aK˼{ŵ]E;ȹZHgM]KF71mPdL[HzgdLcLeM\H^LgPweȽyfo`hQ\Jɾ.-,pa"!!Ǎn`Ǽ鞋yŹ:98HFD(''eOVUT³Ә~ļOML432ĸ@?>|yw}üwtqĥL<4ΒxnQDkhe̓qc⶯fdb\ZX|VEȼa`_ǻcI>qnjmas\P'O6NYߵgT~fVq6A\c(Vgp4ޭau$LW߆c`DwtRNS@feIDATxLWZ 5*'EU,Z$;*x-g;]iGZr[9lZx vڞhZ؄8Es8&(*$Fڋ*5xflL>7gy<&($;x % sqуX1bD0DCQ L'1r^oyu0y.80bB2(SCCˋRruEPIh54dDڲẐ Q#d4.:2 8h]/qAy\b߿ ;v8 FeFnAQ1voc6B!&(>j*ڗ|"6A3"ZCr;\l%C}(*wEPV$sfXIY\l7%iy&l1R!Z:H,жY܃sYf9JWeFב#]ږ:ı`d)b91rgPqXx'韞#}[sRIډ?Ί*,@ ?=S\w&7]%P 8XĕLPF9L6Jǖq> F\p,h]8R]}DC313˗Mp fB^]nBGC)F Xv&L|fbgHm㵊9 R6}jNX<=uh%6-UL^y%']/ik!!VwfB>Q ZNc %;ր?v!/h=БEdR WɈ4ch-Y-2mS.|(.=t#OMFQ陮#R/ywYkFX(HȵOHShh0mh5;5HWL*)ij@ i't,xuGMWicȑ(%9uLS_+ h,uBIG0|nP ޼&4ybXԧ xD%ﲣ3YȫJuB|aF4tK1V<愇I٤BR68fВ] !~b#.4u"RZ(. &\7"3]u)KX= 0s_ǖEL\X$b%XH?MZx#hA +YS"Igli\1!|L,`Kbi3&u#S! B1Є;Dز mm`}h-!N.q,mıe$W;f s;j 7Eh;>)fL2%'+-%]@G$81B[iп(ZFH8k t̞xX; 끑2Eak_3yl'^^l&{yO{֔ +˹n>qbrev-3vUSSqnރanEsgnVGn>ylMs,lqF_k_]R5Ŏc{۱n_C9UMS(0O Fs4(u<<~k^Oz^*㕱QM66NXq(vceƎ܎ޱG޻*ǮyHww>U1 TLcN2 1.M͜TX?뷿MF?fhf8K1~6Nv̱>\TGKg8ZbYUcc6L $n^!W/ ̫Z+S!Xc>wq@ cK+:댲Z4YU:4sQ.vPP|2ʩ'qOWׄwze@3ݱ{Q]ӱwAGM `2]+α?\${۷o߳wbnTmxG8OR&cPj5sZ3YfKF u\-Wnݚ׭*-Rϔc?ЕNӱ~jF-αv5*ڱwr{csTlL\-|~;Gr,%kO"ܬu?nOnmf:ܕoҥ6GB)$Yq{[&c'zXc{Npl]̮~cVvwtc|{2O:#O!FF4Eu̟mn4GucVh6'e[r⭛7_ڜE_2/+F8YXa =kcoXaRX.B~_ށNN'DW{JdXXȒ~~=2cs*7s39d~#}wcc\Ǧ%]ڰz o;v,C^cojRx*vE>Η؝?>Y'Thu^Oדa7{yVϳn Kgc͸>F߈KrT"h@"+\ˋtLX쨄xڱ% G}9lRQ1dOb{=ZYر }ۙ>j Vy8401q{'<9N¿Wlt\~y>Bo~< ((|O1 ? {gƕq&ƀ1N!d $jaiđ REw%E{ӧ{CnV;$3uH}vP onhf:['bvLc_Ok&'k*N.%'cOxҥU?ѿ!}jE&߰N>9vyk:5|r{v{55z `ou<E/:3cМ4RFpvtkpX1%^r)9}auQzQ+060;<t5}}tz7O5pg((RYlv5\=irPxk|{H?dZ18h5ˈѴ?:iR|G?Od ߐ4g#z%㺺80| ?皨pk2M/.96388sBĘcx6Ŀ 2oCScWy/~>SKh*#4 PxL2)CX~r)93v~ҥGH/aF/lÌu40H{}DMM -,ܰGs C&,,?.cܱʫktbپQN/>]Xw OkGc7a >e7& Lk ·7###p(~z/M-i8BPP[sScjޒ1{r)koyѣ163]_Q ߮//,p'a/--R3tߤ_fG£';f|>Pxvi3aARzqЖ9)H.z.O673KE+߯h+HJ3*$J \cYJ+\O+dSJ4VZPJ4|iV"1JZiEKeufJ)ծ'(ZivRzRҌlJI+J3jדWflg+ծ'(V]O*^QTT4c;[v=xEivRzRo[pD'#{dqڿy kZsA r'H[ٽ?q:LjtUX\{lf?Y>,-0f><2y,59rkoQB)P#PǕf,+2IbrBAx*ٜ#[>z#Jy/o%N=F *J=s2/rJTM[8#[b[k,5̓>,cɽX) fACA& REɬrOJw=R^{[ Fe(;ƒRWw;1e Űv BZN8 9`^9BިI1G0H+kЊ%H+ףDbk ~#*++qŴQ;0"8[X7 )**c}XcN) w gUTTz*y] vsUfTOłq6H+SrjHBj[Uĵdj6 gʲ\". \*g]k'>锿c +E"w"R\;E%ԢmMUTVAQ r3Vލ:(5#Ґ1dG(9]`f^(z׈8PeHJt HX"x>%ޣ4f,qREy<A3Kk8RʕǮrj8g*@vR#Ia/ʂIy* ak@a #eA%Q[x`joE%fBEd*b!w9DJ%ɂb̈N2cCb((C޻׳ u@TUU!d0ʸ_06I P:$ȇBS!\SPۓ&um/VĘꎪ?Td]q\(PI?!uͫ?pEEP nXu4D^%3ᜈ9 qfhzFcbs_6ː@ǣYX3Ap; 02 4xaV^dwުy -eϠ<Ž&łH8cJL\1qƴ8=@5'.<<ѱC /@`/VĠU- 8Ć-#;`W` Ԃ1T{pJDxi cƶ691cۊXǏѾo_{m!c|_Btu#b(Aah,3'nH &!Q$|(ֹs ~2<8-3V^l^bU ++,^Y B$ֈhHUp6łUA@l9Th\xV5ײ4F[vjDVĎfzW?<~ߛy;.<ЦJUw߮B09e<=\'`nٕJ{){CmMw$?*Pa'H UW څ2qYuϷyOwۃpe~ CW!:;1c"NS~;) 籱1~,^2iUZ/J'+}@+0/yZWV~7V[=]97j+Cblkʹm*c['ssoU8:w.Ǣffza;, V*kĴЉ avێuNt"9k}c1&2frn]K٢rcLT˕q:s T.x9pnkï7>VRy 'Fؙr_;@Тr5Rv-hY:'NI[.(>ƌm;b~|ԩN`a:-˶Wƌ\9Jf.2@|anrUrY.8v=ծxz+TP -+<@_+Q4!u3'?O(h&y#z2e<mõ^K3Ld?\m1mgX_~-*騏˘̉rD3U^Un -~ y,P@"XRh:V,ʡfF>##hAzahƌ}^SSŏ>:8z4pX}6c.'26@@Kh`01‰+^0 Gwfh[[kYJa(LbNWU__P &WX2iF `i[Rc<wb1mF_MdcbA]CXnuTGӘגbtZ̅0"YT1gh֔Rr9rNvQcATBJ6GV0XB[fK ;\V>}tjLk@a_]\K~EY.Jzpg$>W7*[bmhjǵ{'=- $e*!^PvHֹY(T 0N1f_\,GmIGWg6_DL6ljlNzy94B]bGJGtO&J~X]OGkS)?޽x"1O'A필605}F{ՙj xYW ;KtDlWZA?UOlI~gZo${MǘA5uH1O+yڈfMc¥u&A60>yAhf 3^uZBb","B H $7U`"VI( 5)kώuxu :~kf::Zsk q,jny?N!`@A}9Ows9&gؠ'lÆJP@!Ȋϗ(²am٦vmcJ|ܙ3.?m=:5qO?#m|6*5Nm[3yW:5Of;;v=yD&Kn&X9dC •`Br߸= U>MzaWձ]x&7NB(-xcP=E>7nXQel^VֽGG?e~k&N]eʖcQLm'd!ťFJp1|~FeI*j1!k~JŘY _*[*\a{^( CxC%!dWzY;Iv:?'KWpKrm[\qMڸ.] һz:LDD,ĔU hن1yi[։?nU?8J}c.bl/16Ca,\lmkA(c3NȐZ2RҪ56Qaf{%2qG@;VuTU=pa>K!YDwSƐadբjo4#up~G6_g#K,~eL+P97"c,+wQcLC0P4It@=Gn1?RVia3NȘI|YXeׂ%wv|>%cRWZKLV6-BxϞ=qt]4K\}DfeLQV(Mp%Im}d,6#-9އeԓm"V!jcҏIcJ&J52͎1p/WIYR0[3 aD0ir? G4_@p9. TKA ג9-.E#7+ $`F1vg 4V.+9rd>~HvDӲJJRۊ`l&]p_KX0YgQi#+.ϟ<\}E'`aʨCL3%czpC bpC=:w]`mݓ=hBnjX,Y}q/4v7xgc;r@`Z6r$2;r_G1(t y3Nmp?__; #xhHHax` }E* 4, C&On[j?\WS9wׄYHrd XQSࢍbL:r2 aAhű"#Ɔ #DcγZ؂r`@U1KbAV|X B='5d![)zSNTC51nm"HjIד1K%; Da7g@8Aق`п8M m* A+)&ĕ[/Y _Zgfue,\e})" CS1fgXE8B1dȵIP.A- , ,E#$>TѪ.Ci B ['ȶ#zsN~A/Xr/+TaN)‚Η&s AZ>\rٟ>A(Lqpϯ 88 ipkqZ7,3R{_!+銊>I,&>kE>]|N(/ח#.ڋEy"4x'MX bV+ugϰeO߽{Ake~|P{ޖͭyg~ݦcť?4޼ti!bL1x1 ni3ֶMel h}eAXXc=t,=97elh}:~ bGoI ~~{mBkM⸒j4c4e/L~,#cҳgK)g5~mrq 6x? WÍNH9"R0NJ1{^&|NbAa[/rsTfA~YPsӚTfΝ|;Ta~\<1,me&',[^oxEjș NAH5-""v#IvRtQ4-%(aS6)TY~uXEN@"b` 6ceYZZJ#Bk7H~ljC'N쨯WF-|U2F=;Z]]F}Y(E "D *.w{nw9%(EhG( QO6BS(5yqҹVjs"JO3tZ$mPh c.0! uuŭכNJ`xڌhW^맾\ƴX=A(h!??A?PWF7*L*#`؂!Ec!sL)nOVbu%+&p{쌪*_0WegP`~ϣw5'cSiMP pC]y!211%,/|&JA*F"m9V61èKa@KY<˜Tc j:צ4]i2[CFUUu<ʬveݛ-E/t5t:< $ d=0@EQ U骇 B (WVG6_TСI:s)P]tE˫S1֛Ǹ; LB#p{J:vk +KUM}0GDi&iqdoӿH9Y";#.ǺLct߽\5;-gzrŞm[~~a]o`qz 7vtٱcB2}8 #Xx|!-ŤUNWW&ӽ}_*< U gz$difXȼ3=pO& UI_H /,]UK/T]^^ Z f,RUgf]}zߡwjWbl1/;Fzcs' ;wՉv@NE-D idzb.ݞ:|C8z:;`ũK1Łԙ^AI "'X\ J!-RǞǿK},#J+ n\ZPTQQz#aLs=jԺ,=t\r8.xNd{NWs`M=n~+pf9㳝F\h =zmAJ`nY|B\>},5d\PQ假.79wXܦL2C k"QyHh a^ƥÇ{i8!vOE `+ kŜ1hӆ*o{t whڞWYXS1@ߙZҠjIw:&_Bh?ӳr6(13b;dwӎOC=V)ls!BӮ%Ls@|8"rfV| AW(Ĉ1aFF(Vs:BA"c{ҹ1$94t92"0eeTԚ BøBm{uTջ٭v~ޚnU}fU|l﯎1KKJݩUSlOp_Ok}rA'ωG\r:/83'J{1~ x猻 |Zϙ@sχוۢhS}(nF}eHatྠ . ^,҅ HE/`PJ?Fp1biL5&hA=z,LOOWOx wrae#iN炤Ԛ㊴!"V ~,9YΦWU2vʯ <80|m!6k*.c&Ƥ q>UA__t: ~Gc0ŞӧX,W8ƵQ:y{}}J?pVإKkelx&.ɾ~܃ҙEo;(>OA,IxE3R8gT,'ݩ6[V$2gV6$`SH.X!QʐmW~. ?ǵs?Qfu]|YWZUupX@lYif`Nk{blU'"(e kVZ6L6`X$R -pQfQ-hdIocc㋻Mc;nPAG;h|٩m>"ޮ`Vh0?Ga%%$b:Yk{gyyr`FP],+!z۵UIv&KdlpY ֭ )RlX){wEĪEцILEX4-mNT-#<39;k6RuɆJ!0.+F(.DNa!# Vd5BU6) 2bΥQ<ƂlHkFjFx5SώDX[NsFXbGW2 HB^06d 3ٷ~֐+|LبK .yyD Fl<*EX -#c"|b$#ldUmos^K>6elm w95n޻d4iɄ' zc@̌>>[ClZŧf.qM)|ͣ܏oRޖ&'=>ϾuV<=c>c%ƶ[Zjugl%}[l+2I]׉բJ10v-cΜN9Y:h_*}HNco{4K;[Ee(VHi4\Ut<-c- &6>~vo&IAjT2K2٤rdUc{K>z5Q6!OT^3tbɖ6 Kj@Kf.9XջjրX*Ɔ3KywQ)sRoXTQ* `}s~1u֭o$s= cm3gL^/ACī0Eʌm-uߌ1Xl-0}(7:ĝ5ki Ȫ䆱l$cےxu]czc @Lhi0|Pλ>Tdj~P29 ǵ h-<-×:Ϙ!_& Z ZXcV/: 7B"b\0"WR, CkDY7!<\O\Z䜮&gϒ1Rv,bLN<1jF IkNp[aÂmc˅ir"C #DQ+ӒEH=T`*MJ.WdϬj}>f,b|Z{&UoeNm7ϞdK#r[zg10v8{pQ,=|1ݳ41cs'@,ͱbP,J1dCP =D16"_rI)9a>%YH N9V3qf}_X!ahrƁ }PKS)T #l6հ[(cEyj3+/ZMcQvF]GwƛKKAλ!_r3'}7Nw,]Ŕ1."oR:FƬf#)J8"9b~j#,GH ᐢ0HK]qb5;teM5V$SO=Ā)\ &$7X|!<8'{|˜i2p2"Ei7,č`a,57X~xV&ʘǏ20vQ'#;\`|ƛ7.6=Vw>/X3"ƌAw JjiHCŴS:\x,%>OѡKᎀKGI4NFv8dra`*i/-.a{^( CxC%!dWzZN$HQOHEMeM Jj3XVa`xBSw[CqMڸ.] ]8T&Krm b*4,|@gVFUk/*Xnz;hk9bN8"?\1ԏbGޒc0k< coz^j:\ c31ht2P`.?A3x&b,뾏ItDe,}L臼X tY\`@nPH;Q}]I4,p}4\_퍆wDs_l䵲>ĿzPoDT)cPiemfU@ *2=;n[cgwKϞ-;觜qa>Ł7_7JJcƮ仑 ݼbĘ=L 8HXUf̿W&Z&Gܡ@ tBa)xd  ӽBʓ R̗/U}w{NJvK A'=j@">\+!"YZ=|#x74TRBJ+Ij;s3m vgAA@YϨm -|[~Ѥg,;-ܓ}r @4c^aq?E>dR HYY7CXňmco?{gԱ )!TX ofL.v~TR:;_[(Ry^ VTtvRhzq;M89! >{>gϞE+{vs+~gv1ؔm>r KuFW'I^SBl]ʑ$x%5uuk]NTW_/"p|2ه.= A*rNɊ?[593rP&7*c\6h`-7vTľ7Ͷy:ehkji!*y\,(61P%fP \Z<M;418?#02JSN777[m$o Fʧ*HagXG*㒇 8G(DF bta\2ħz>;M-s d;uڱa66<ꥌ uۢ0ZlANيUB ЮB@REH+j&"K(MBPG2|UGKM!ͤ>01,pI\@®@ɢ~Q-:AZD(^  qt$N_HV8LmMu[N"C cL|R(w!'d8o8x?WjqHNBJW@t[z͈p9jinRX ìY.Ls3 )YY,Uia*c˷nKޜ11_Uq78ܰ]t+D@OzIE1#Q69E<ެv4~q%Cex{Jvl_í*d;" z󓬪aI ?fɴ8ʳ!-'X],Z8ͰjgV7f{hG'AvfŰ;[ƒE"@X (QaE$$g-1RGq2&\oل5]lJ3ۛ3.KD jh-~Cdy#Df,j:HYiO$Lzi~XO\nag5 ܹ߄Z?Zcd_keǽ8AYIa)ĕT2\@]2Wte=֎XjPhfjLϘ6>\sK}\z-꿬'a}RB4܌MtNNg>B(^2ζ}q1]9RH '~JĈ}w~{=5w/^XKc Mhczէb#ock\z?0vV! }{Ů,c Y&ZZV5lYJ` ?a* #Se>hzQ9FytxS 'h}}H.7R0&~hwsۡ˘ _57BܲMđQ]m ifPAz俧zw8c@ A Z}inNSؽ`%~PqO#5sY1&4v](;Ҏ c9FƚWc1/1&~RS?XKL!3V̯V"cXBܟJϊ"1'ac+yƌ oSG{-+ڱywib cX[Fzsޙ.eƷW[wS1zvib clWZdƖiݖ%1|L!{ XMj1 Fgl1 0ؾf,Yڱ} bLiȨ>u[\EaݳLX}۳l،U?kj[tƲǻNd%0QcP4Ebl31n?/2clu/?Y5i~[,{GYɮhAX)Cؖդ ` 8b\Ek/<*n䈈}.$ioYL߼?FmTƺہP|P*13O[6d=\}P>⅌ϟ t8{(i~_xὬW֮M%֮Euۧe a,"1=Ġ[~\eLYXbٖ#o-60A6c;׭cv-|bLj, 9%/X(lZ죀9bunMc{ U׫`,1`ǨPu*M-ZThFblB[ALgE:v`p 4c?4|^a+uVyVt07[/[}C-1| jDGcyn YYj ]1$֦cf@"|D8#:rI&RC~+cZƀXB[8M<Ί_= AcZu+}oWo*4cn3i#mhx:R~)μT摣jmロ.3p ՗~R(K-aHljb al]o׬Yw-1HʮJueK:k04e.TQk$< "=OJ/TibaUKcK7gN?iu97-k24s$%c[e,p%@X1 x4s$[elŮץHOc3̙|ou[vGblBSYo90֙zH5/9c+wЋ1/U%e=R/A+1-cKX"x+WaփjŎ=H< _f#KԈʼn$ܪYxD4q)͕ik^r4G۲sh a=lݯF 3r3] ? yxx8Gr ,glg$ƚޜ9}_~ݷʘؙS\b' ( 1Yd>"y eZv$NYR!ϙf 0ॲ!w 1-c-XkpfZ3}=&_\eJ4 `QQ\1;dtɷ ( ?CNQYl+sVɉ(M22a3vPT%v\]C:۩e hĚ덃B=溫'S1ۤbeK^cJ) ch_ s0`3[…/oe*` s̐uE|LAv"sUQgT0cQ\X3fMPՅz:xzϘws%GEmL;֝h>ghmQx%2{.~(w?! t()9P!碝XxB8tJP6$`phs9R(s@-.Z%J%jbT#Ԡ&%Ԙ'QV 󣽭c\ `{nj5/n`iNIhTB/Ív9?(aǶAU%8p (Q9_.x*wU84޵shc-R}v}RB4BhVXvRJl"̴ >?37=Vؓnj2Y'{!سK*GrvvC6v!\fT4C; 3n2S[Ɩl~E  cWz 5xFt[9Le~~?YΆp3~V]4uK1d7ؑ={y;FFuIh16@CGs d78mhuz QUU~a<^U!pTE*.H|LϞvCC;8V[ej 7cr;kڽ---[!V1TA7FMK;<@[yegEY1|Laè}7ߦ`-?.cƑ/ rI.}L4J`Ft=ٳ쮻톧}LJz b?:ypsɓ~GGprE]o `bf< `DX܎ҍEgFc{/_hn;,#.cw=mjz+gE*c7GjI>7c3QPzr;6hhiV]ӧWx:6TnǮ7i2w 'z;azgk1ئSt4TGeL@fe(nPeK׺@fw=Gm`~+?`<^Y̆à"/q8-*z 0$K##s_ 31V 1'תn 4V]ǯnuf>ṿMք?zi(PߑZ Vc0Ø:s k@ 86n^78$aƕHq\>q:.8N7it:9933$\;/ 䰘5Vd^؆?gdÇf ܼ٥ :Um[ԶmS,׶Jܗi¯j3fX?X4JKͪĘ 9uoWjs%8^ vn뛰.vcL_ ZO;lp gYp 4c0AE- l ȸ9L݇35w}~{=Ӷw|ie˖쳺SQA.[vw3-H3&cPi)twzO_Ͻ.: 9 +.%9+rED^$}w`$}=|z&It=ci9Rsn'ZPӇET<c2 3`񮞞 h'#r;OO4wZp!el# ȶEg~LmK4cƭ g,5XZȷ/h+j-qZ,V "؀9tx>cfŅ5YP\}LTgzeXY8@/.Y䎛a  &߭{Zg.HA`x)/BhZIjf[T ݶ1V 1l}~9s 369y9|9n[ayh*HY1]AXWw(Vl#.8vb>5ufQ7HdLM1-/xiyˉ;ƳR(PFǑh$Pq&S" )`Ɓڋz }iNEUpAcfi&]rlAv OI 4qlO\5[NBwi:#6 s}Y[c1;ۚs.A*TQ魫QEss7xnT"gW,)4%|i`^=?k#Ig<JM14%~cQaYP1S %bT@+=ƁS2c߯X|VxeaP  )tviD氎n8l@%t(̮&^h6Lu \lA:vPsǒjD$DeEDI[F|;-ɥBa) !֩`H6@@iVgdPIebG^A+NguZ WxUͱV h5pX?c{c >⩹qJMsNR!sćc +Xk#Mk] KLi^q_X(K1T!{M!-Ʊc`c6(FQ(Y휾7|{Xx-1t 65^<ϱ|ӏ1oޓ ; KrL-іPadZ߶,ձs?˗1oYGK߼/:&cvP:pcxKu˟~ݘU͹ޙrOn㎅I# + 1/?pG(&}Cxnup'vooN~{;&cKr (A:VЎ8߱g33/_qj9ɭn(sꗷ>Ꭽ,iX1c{tlo1 xl|\itOn6q^KYn=鞞޽[cc; ^4*;L;Jwp ʱ"u燙UW_ I&;vҹ>'|᝘3GcV86z 4:Oٱ@c`ǜK % ?p11+Q:tloDϞ=}_>+bscP#uvwc~rmٱ TZC$10Ѥ۷wuu4>TX+8ױϞ})ʳӊ{E9LgV+ OяCWG>kլkދ*1<)gOgz<cu{Iǰ*+f 82YX.E(ҬȀA"&-l³I" ,?(fb1.ot_c@~L~Ǫv,[*c}𯘀9q5f𾣣 ?V߇7!Wѯ;tf|Q J\fR8qL: [y |g]KXP:4B|,Q*t\;v4 K&F+ωu ځA]s,)8/Xae1RX! %-PR5`H]HH%ښu1E?&C0BϱE-’ ;Ǥ~LĄ񋕕M p !$18a^Q!9*l5Dc׮c Zcm{ǰ8䨼h}wݞѪ9rx4ՠdWAv,+;Iicwb:=9Au;sv??FX w{]69W5;t ݏɿh1 ,66v Boص 늊UԀŖ̸b)J"؇ϟCXݽhqE~#m>)~wؾW**SwJI++ |HrLf")ᖏh0ǠkJqGXԣ޾.II/ZK;J>"Y tc~?PX՘&M}͡Ot,d%$Sx_J{5zNZ;'rBp矿|ڽZd|4}Q8\7 w,1!{QBN KȈƔp\Nbi+l="߿(uEbb7ԸS ;l˥\/, C!U({N%|.6 hprzDQmMy/;e;Zn ےm7\0hʘNا2=51zTaBzܼ8c*ilFkhoyl.Utqj.F`mrzDQ^[?~$XFC/1 Bu ΏKY}(=^s4P)ΊYx9t8_AEj'f#e:a Ͻ"?rKE:*'؏'''oӏ+XN*Y(R@F0ɒ ގ/Pd.lsN KamۆۄeS,D[s, Tyx.Rt(v&cL)65Uu, b`"fP ΃<\lsp@A,υQ0TL86F[v 7C2Sza0+W?cH̝<0ُUT0Og6>4aHMP7j*Fx+6_掙,vrǒ߁vl߻= { lV`:3 Μ9L(T`HE;\uŨ:<_1<n[׊vc2m}} ;ƞ/:7(fr!yWl"oO`hq}?礌?QpW(HFo{cFFc{/5uKX+ZNT^`هǴp\e1Q^28wÆh8uT^tXSS!YOvпOcՎn ©nȯP(TeB6PZ2L̸dr[۝-ڀ)PۗF5SF,He٬2゚To ]&8fĭ>>1}$=p{<7O/dq|po21WMVk#- !hHDm$;0|?Kct;mHCerLt$,\103]F\R6B %QC70vL7cg+:c~1Ը)cp.IܾCy$y1||"Ҙ#ZUY*%>]F^ kPV% v"<!`LBdQ0yD`B_61xv&p:%k@cQuLJP ;tgoO\. |:Uرǵ}rQ ă@< d'0HrH$򉌼F0 67b 7ǚ&/_8114vvt찠&UӋJN*,?]Вps TH79 O=_DM6nb#*tb)IKV6*J^'6凙c?,~0:8xyhDhQ٢dRzCkQQiaex;R*iJ]Z4ϽLGh,sEErj< ]`4@P&5"G2,/.ZL-}CmQPVpPTV/w?m]iq`cBw,A;^ ʠڕV_v#U 2,$040 %TӴL^4VQu&h+*Vd9s\v^yu>}}=ϳs{*OHۯRWzb&@J+ڼMvE|(>]H^3+ayLdW)%cl~]oaƒe}:F4Պ $yml#2%6Sr4rX;sdl3f_^שas/.ƊC JIE4凙UGS˿Xnm9Vn8c0eaĘxÊVGS3Fݶ-ccp XŇPeSxƨ6flԚ" #)[h' Zhaԑ}ŋA%w;^v؋ƪ|xاdʻVS^62x:c/rzk_L-;QVF81VBynQ7PŘ&(1`(HD*1я12'4w7++`1f1T:cHMNm_=~L3ԔX3j @|B zãGY ]02!1ek1VQ@$z'UCY~2eN3@4{4ŘŻ`D?{l[X4%8uOyC|58[Zd좡YoXdM3Xi\ { CqkXF Zi Sgx/5Cctc`(Z'߭i UM*m)gܞ[ci%ѱ[U6$/UmN7b0b ǘ%|izGCK in#}3+M܊2Oǖ4K1!b7>1>֍17l=o1VaPOoH?ľW e19E I;{& ~/_G~y#Q=BJ)v@rKx4Qu-0De+WЙYD9m1VAl;Ǥonff a<1w_6FU_31puP$dmM[82{~³z0 ';KdlySKSon̓w cIU9YTYձ/?WՁ1oXubdK-hf2Wj v5W\[0bԠpnH+>ݮH+jۏSmytBYNp$w4?: 7vj=.au皡 G'. O|T38fJ` a*e2QƸNkScH#c' >otj>[$Zԓ;_TvA)(w9c1$=a>lƛUcn+lI7HrtΘfh,al! Ƥ32Kd2Q#z`,c ?~dY8dXd,8#Ʀc/NvK+1EvJ΃utX12aejОd2%l #vP.c5bR^`]Lz1ͅz?ƠUcHP'Bۤ Pju9Iha apc2b{5 Ȁخd {HƄݏ1]7&"~O+jB;8lNaLA*)#C92bɌQ>1 e6qI\Qݜ ;d2[{qEU^q5,Sq% 0"B](c`0aؾʃ')ł";qvs Hkj_Gdh mX~݋ˣJq]X}3Iv{2HX)ky /0"Xȏ ?z8cܬx1rc[3\Z+cEt,̀BvJa1G:sὕS;fIѻ5{0VDV/ibEW)U7b*dHgPS4*bXo}CdL)ojܾ{(9cy+`iE a1OtSME[DX11Zt:Nd8xRc'^L0= EHa sO,^h7nSGuyϘEK{b,crb~y2PF^\.T3F_햷d͘5cWMS +Wtˁ}& *nN$ 2g1L#ɘXod—>LzrZsЛƒ\XV{٨9bD) %R P\2QF?@UXQ棊0+y2 044 7ǭpBTn/^_wsX&STjngLO RX"a1w%ʪh0#Ѱ N ZH~E2T ƝGfk+]*J+.*ߥc:>pf/8 0pyڵ,ܿv>#zn|ty~7g2\s\_=Rwo~[c}GY%Lq3cn01Op7mܖ(t}1ui q-{#hD3}}AރT˾1ǫc/vͣșqܙوȏ,摽_D ee.׊yX\GVnʸ'/8.L.0,x?v=tH4~nTQ[P}qbLC3l~N&MczU5ٳˣ"οg@u[%W&hs+_Ge.^JÄ6LO,WFLf5Ʋ]L>V{騢d; ˜PaWqkJ(1 |#RQ垪7{c|#qWoNO|Wͽy{dT*.>D4)@j7 `(!Fe>Hϝ`Ww. Wa 32żn%0<³s'4Vc42ǓS2bg~8f^qA9e!3!\N:%NꍟNs4GVMzWc,us[z 5 X  O\3f?Xf^RO\gp(cYL^|@ 5Ř|+Xsg콪 ԝE\ӲbFCųȊaΦ03P4>! Oa}s+X*[qlGm1&sc]'e1ZɊ1ќgje y~1SjV0Ř,sD?y:BU]y3{/;94D5y?F+bcgRs1Zm5VgҟC?^qO3IqLScb˩w36ւ+X.)D㽗#+-Aq?LѲbq?v&a9nAf1hd=bWFy 1땙k&Qb>_ >\:cAb˭ aN2|Ƣ1f͹;~rϘ`=HT> ˊ~-89+~wcDs5vo_U=R ab+ ԡ_Czhu~ق f,dZ)C[[$˙i(1g6ڜ"T5lQC[8ccE g jb"ŌˏU?H1(؉C0o`,^`\x(8d#e4RڻabK ˠSCۄ_b^y1{UGv=@[181ؽs:Lne1-*vO~ CǺ~ M~ Ǔ5m4n;`n`龾Q3/gI3zл7FD9uf62 31J]/N8"ۚcIة?*skUڙ?j}yy:QLԃ^o E9:^4%Ɗō[P+^#kїS7+bEbW飯~?kb^&W裿y`LT# :HP1#dgl9,MuG`{gxUǾO}}9HǦ0&$^V@k\dT/2qyƠWH.YxǛ|m܍e2CP #}K}֑" n3F>}Er Kp^*vCÉ%haPh^*l ) ״|mm5 b+1?9wI:;h^ kx!Z;AWʅ|00:ّolP)nf#o *mXZYERKrdh(<BRa Q-u~ WS8.b,Rg?#b{,U\k_O][-p0U~칡cf<~yq^t^j䋉!IZb^h^*l1( 嗕8M.C?Uɵ1L=u2ؖW4&GPZ ٦I51>釿 E]ATU6jN4H=0v[rNrT'32&2/`hGʓ< ]:FE0UE2Ňr1f,{7g̴!:*bK#{IQ'l4+$].2*6/,:;ýTԂ cO=r(eLK \O a_!v2*˘1cKȧܳ]OS:kBp)cdOU5)jS=< >p1gW&&Z楺<kR j<奢OV, }Lʯ +/6*148LlHU)6.S./2f`PRǴ}7ic)q~lʜ1 p1q##''hY }}TLR=(l2ٗT_Bb\P8cQhCd 0tbŠ=AGƶ]W=>=eǨ&Em'rmw+KK+Gf4m՚Gdt}/ i<ьR0V>B2eR|ً/ bXNe5PȔn?]Ytz|-TpǟSmR9@\"{IQ'eݫKSERU0{|B[7s!޶Uz!bU<2ٕq_ }d6VFXYr5IϘx`$;תu{{?I,ikp^*'iBX1oVyldlR9AN;Lh ږ*A)ѐ\=< Q?ɽb\X&T0&Xp^KuIO&u4AT1?ֶ$(R[=SPL|[kEb(MyxUd c[:7ٙkiIMZ1oJKe"1y&YqMkٷT b4U2y.yP6䥺kiIMUǴmIT=Sk))s:1Qd5cL[BcRy/_Ts FD祂}M:|2I1k[b>cEPjg[>Qdǘ祂Ԝ9Jp^*G_>oK ڨʬhxuLc<&t^[JJX>M.`$&$+8 Kn\}_ǘTr {'HExbuh2: ^I7/B~ūggG&0jtWc8y(/+K- c^epmv*L~eLc\RY\TR yu@7µ[8nudi?cJ߽T4ƼTdL4bflvj*FbΘyy5f&E"ΧϪmɌ T: :/ZZΧO^Kِ2_9Ky8$[ColeeA4kIvs/\kQZ|z6'3&d2`ǫspcUĺ}47.eϩdbWy3 'KU +|`~mڨrcdǍ2f,[]hU^ygV)s#B{eX |aGXDjkƆaWrؓ' ;=S22[hL;.Jɾh89w4=-\Ƅs2&X2F{R7E dyE:FJ4%eBc PB4%2ATL4)i4qd2&/c ~ ZHDze8N4Cv1Quc| ! 5JLhx/NCt&$31Qucy} ۀ9X%1?cŊlY| . 1- R$ɄTEt3 6q~\DP:2W> &ԯc(-c8ӝ p &;aCu<7.o)h($D%.DS) љFsٖb,b0[l1CբT茩5,)JLt~)):hN~L5{GGΔK,^ndϩS#l}01V 8.cTÒWy":):`Ncfyg{w+GcoNgȘPWU/?0$eԂIcTRSRJᖰHLCMfyglgNշūc3_TV0T_d vbki#mrd,3oԄ76:ST7N;L(ҍ<c)M{[pwv" 1l++nQ{lS *1nyX>@4§!3y ;N7LG+M *YJSB:|lod|XSYP@7zlϧ^+GQp͓8R h\P'?Ep[0!J_ j(e){YP0+ Ê1bdB1pc1U'MYbl%xh\P2"R͇ !BtukdžcQXp&>!FV-c6z1`ḛxZPaBhJR޴"PO߽=>1~LZ(FW${Tb7i.))SNi.cο&v>zƨL&~єb4 bO1J&A:%e*Љ?ekM#9˧ц+>1Βk7HD?;Btz^\;uUBK1'qUT1ڼTݼTΥ.V$x(|6|h^WD楊Kٖ(oU&Dη`0aeFdea3F-5c!y" [Ra vƚ|M L9,oҞ{'HuT곴iʑ13P}#AyZ楊xo kFׄ_ۛ6{j^bK+0ʻ,kޙcIR~ 75>*O&ԼTmkZb^ݴ=8X28R7+4Z4zS/\ Ul-#cZ`+c"l_|[؟T~WH6ou5&owBbmJXs\ nWNk^k\*mHefLQr%[IJ()ՀN4y zznq0T0u# ]IJĥbU3.:I'KEk0Jc%bU([tMYAQ Q ]Itsg\!״μd`\l iJDXYg1zuƈrKQ[}J\*߸T |߹~\И",rK%O5.k\*ZQWj*,fQ rK58o|~^KE+ 4f+hԓ7)*=v;_c\Rek3a=FPhGqq j\*Z ׸T7Xm<䠞\F _W;.|(q_KEh_Gd>)εv;.ȸT7^GݸTǥBۛFƥ57hGoz\l1cnj=n3Hh1[#l1cƪnj=n3Hh1[#l1cƪnj=n3Hh1[#l1cƪnj=n3MӘ@PY #P5vS WFhL 01XcEhL 01XcEhL 01XcᢱԒL}6|ÿ]FurA`fsq0 Yx4<eh+0ISr2]X`$%4֛%2\4XkUie1ҙ20Ɠ Y\@c\b_z6y5XkUi4F:So"g}:ƺ.15ƲkHJk$ Ebx|sbm5`O- |oDgז-P _D'v{1}>E VRds+Mt+l; ]^c.=e`Gkr:т'w1o0>` N $<|'h\W ]f/KLu%e.5Qkʂ` :[ZX~z}$iI ,m[Rssۇ5(s}ڙ[\ͦ;b`Z+5 T94[It+7\rsA1Ş2hkƷ^c9ڼuԛIH_!} ب4/zB#{ F0|Q3fG z@7rL׃zw(G x 5qᲰ MVo6lD7!Êrk.И]n-fW\hh,&P  nHz< ($gPƵ}(}G-dAE4(MCX^)ZRuC4Kw Q()j Dg`nvX,E'Кk G <94@c%n*Q7T\~ü驽zlІke}@ iz:x{ uPfQ $M_ vO%VbBu(n 46%#Σ12 Ķu?ʮBisfavil37.{sh6dh]TIn<($sO*5eV_"^ǛmD=߻СA:ouP0$E)$nk(V&6* DuTyy95o \q tgÅ*xi ՘vYփ7G^MY2⥗+)nHRs{/UvohW1W %QƼ)gMxHا]}uP8pn?cJAu#gu kP] c'qOAb۟X[-.v\/#D+<ȮB%2|3ĖVcڷG#eo}h1UH4 i]+YWTA\h4f{HQ]Bzz}/S<bS YG$M/F%qEu~u쒽}U.Ս=\ò;3?gjz6&ma c01i0 cØ6a c01i޶021aL01m+b c01mƴq1icƴa cӆ1aL01mƴa cӆ1aL01mƴa cӆ1aL01mƴa cӆ1aL01mƴ3~H\S&2~tfdmLeV4vؾSq2ߝΧEI7tnl&EûiM7^/;ƙ4&?s cD1"m#҆1"m#҆1"m#҆1"m#҆N(0X .Ƃ cX`a,0F cD0F cD0F cD0F cD0F cD0FUƢUPLE$&k0߫تbUE5WvU8Eϛ\Oa,?YRuyWY&7Nj0X<;Y\3teqXeq wØ4a̕^viۅޏ_<> 011+q[؍ ƾ<7a cVc%c7V c?ymlwlKn$06|4V~ؘG汱.v#10f]2vcb/~w?/mq=<$a)#=T͸! z 4bX5(C)MKpA3?t:O2y"Cv&cLJ9iu=`,c26cK&b+W9N&q{ ~3dix?f~zްnǰ *qSuol0>s r^`lbdr2WW~os%yLYc0c+ֳg"x}}5Sug8 2\f:K8I)HVչ2c%5Wan|Pp'nW.7TWՏW][[+-s0VRS&\&K8ohcZNV8s0cƚq3^:?nI[˔礔ǐ`̾1⽙ːr0ˀ6&Ô11`{`L)c+Mw1[Ȁ.8&oc0&ě_U{0zxc8ˀ`\w0Iexc8ˀ`\w0foEc1&yXؗ;1r0ˀX. cV'd `J0c0F=!c/0V1#5sp S#VƦො߸`dq${JPMיL2,6?2#+1ÍlǛ)7$Cc䳂wE6f!?GWGjY!.12#+)n~rU\\`|V*11IOm=o~XlSZ\v~U1K昦 [cﶶn2ÃRmv_FO'7Ĭ}a X24eczc_u}cnnlص X0cӔak,~?7UϿSߏ{,zdi5D4I:9mj[sSRO<~Bs^<`LcL7e2ԴX΂yEMu6yIp4tSx cfd| 4tSc{ƌw4i Ϡ~l6GXci9)|3cXKcOn-"nF7nMWknd(vqKm,/%ζ~RW_{j3K8]%ζ1ѯ9l^;8gSF?+gBf0m0m0m0m0m0m0m0m0mB"'gq8Hn{$pۏ"W- !lB!v̸%WޛyZ#&!H%A+_x{Hxc|_pR*HVSԣ:hP ?Ga(:c?l 8;3)(9(?Jott rq\pLLۖjYʱ]Ȣ!ݙg;<߄,<,;N/}6k8{ ɱ7FkF0y0 npDQ vyL 0w韏,̬B1}iz?`ڝN5ENaѱ6a Xc+$'Z$7km 1_T'8pL[*8!;†)9:&cw1$((2ItҊc5*0A_r4X:"yiHr쥪uoXm1{v܇2G59$=l{+.:q^ò>0uA1'KScrr|"11{mmCuǢc]pò"bXl3oS|}QV9:&1b:MtCnqi==t '/FӘ|G~1t ACz@6c_IENDB`awf-extended-4.1.0/images/gtk3.png000066400000000000000000001541031517644610000167220ustar00rootroot00000000000000PNG  IHDRcZPLTEGpL¶ɹӫʴwiL?̿شocXͿ]IZHɾʛdL¶Ԉ[H͘cL뭚׋yibKݔaKʿ^Io`~we]E;˿paŵȼijfO΄\JgM_J˼ʻF71mPgPyf]K\HeMhPn`\J_Lzfƺ_J̾Ƹ+*)ǾHFD¶$##x//.ǿ{h:98»VUTӘ~OMLyexur@?>ƿû433ZHjgd尟ŶpolL<5}ٺ~{xba_ΒxoPCĶ駕fWzUEԶcI>ÿgT'Nx]O5LZŖmaت^ZWߴ[[Z6Y9i։׆f4nS*mYNhQG֟Gvnħ~=fκ짉|>u^mQ ytZ<9֨k+4ȭc`bq{TPЭޭa}tk^ O(VB;tRNS@fIDATxlW Ž&[D!=R&>Rb)K;So(j1*P #t3 8#d'vk\ he0CmQ.ZthhU?6Bꤕ޼!f z%3}otOg d6\"5Yc8Egēw^sd缌Rj-cbW]W6 1ϱV ?`Z)0Z'X#43a":[[c=ihH҆bD#쭱d3b4ez"_*j" pnHIY%݇Hh7dM:[綵;2ۖ=|Dmu6rF<3hkc?|C[:p:3.q\LCQPm:<:XMC>0%*yUy@Tù(t@). g<:H3ݠ~|ÿmIlX6S0oLʈ pvg4btfӑhD&Uꎸt8Ef!o~ޘt\hsRSu zvO0Ա3 V-Oyc#ne#g,z$F4nEP+p@W;`MPKz" ) rRV@J1ԓ/:YS1!HEi%q2C?3IqԐ*V1c⣪cO ,:v&ۘ^C#&~'呲-l&V];fB +6h,)ۗHLx(25({k8!nW5IQjӥLOYTGG옑BukUGcJyFBO52@Pjū1 ǞP(:Fű)J-P[KPj؆ 5SԦ~mRckB&zZkהڡ8V"ln>)u^oѓUK{] Ͽ"7)+c+<.rS5_Q'xWzFbѓU b Ͽ{M{8QZܸQ>ʍz:\a_߇+=2< lhXD3Wg&g/2S7YT{y4:L+IW=}݈ϩ$>TҤJ9Pw_qRԽܨ 1B-=}ZyrNj!9pTWwP[h;Z$xP*q-.RegՓq.K:RX>/Zz,=kͰ>^4gN[JNyoLZHՌOQy58X~V};ZJZlY)Pd_V_|xpI4)m=%g)KR_>ןPnř8;W_{d}t4RIsxPegMx>4z$Y)Ph~x%eãGI[-7tR8h/8fVšd]a˧Ё.x$2k+2+/<șĜU,;k@s<_^e(I7AM,+$kח,{KRAyP[W:ʲoXC ŋ(ˆ88r /?˔C2qDq)J-P{Bű(J-PBc?P(@q- R 0Pj qה 4tBɃ*_=mxB'x?_=Pc??4BOy'N]%k'z?^KJ ujc{ʀ$Q*Jmx8?c G_P3ܤz$Q\CmomPT~c~\X,K~TI{5 wrM|]yvQ( M eckInk%{ݠ4Y E#>7øǯ c+!lz3y㡐\<1w]`Di~yUX݂:{k(R}??_KrltRvh#s|nXCq\,7厸!+?9]\<~I[rS\8H'ٲ}UɎ+8-RsS)OEr_ǎ-{ 6RW #}`?qqŠ^?$8D"rKx&lp8`{lfbNJm_X ||vvsq*#Q,@[Gy(-cG_bV,ݫHؼyѣv|:_>55>S~4l*h"WaI{ |shfG6mt_?ϋ.`vj5͢|9VT;y`^,8yVP,J:6*4TqުhL34ȱ`ӥ`c17\&8 k"׃p&^[ʔp,8'۷oa !@7x}>ۂ/dU;HbxVP, uff0"18~ر3GďVØf2ȱ`(My]~*M Њj`g5ŠX( xkdN7[4ď`vD"qx^5Ćm}tkȲ=dV:%#uZʓEIǮ]6h?VիWGįVc~6v9wcMMQ BA >+r,BĝL&%µBH;O5q۷_1i oΝ[۷,S糷dnܸyW مnBQ1?cg8_$XBIǺhe*yp, ؑ##瀲XgNZcɉ >.|$ĵk3Ju[7@~} tUg*/tC[^2=(u`cOrcHu0::Q@G!ı# NJRzfX?xpo{#o랆[Q ;eDZ<+8ij!bp%O o癝S1 pK{KLr~kc-;OVf@>HU =Z/;ئ3+18KpgXB|;A(X #+qɈ*c1YG"HvP4qQ,AHa`D3+*uRJR_:<{k^{syι=&Y(=Ʈf1Ɩi'B@,w~}7|tS[=UFk ͓Ɨ"KyeiŚ1ǏfY.]:Q%F<΍dj`"),SooOLF"1X W$B?ń|U.TU$ٍz<=;575;Ͼ<k|8? }eyi~3GgK!^E (;r:"AQt$bX?)wlݿ1ƷlJg N^g|T`EKZcL, X[h"dd^@\ W_$>82YsG.k } Z.!#vlZh:ַ2v􆢶=4\[;1KԌEw?ݽ8v֤.c< "WfyLJ.%LfgW23SoLJ5 _'lRh_|C`dS؅O4;N5X;6b3sZ Gn?ZzvRɕU|rUhh!n1 r*i6&_Ս#3&j*hh$~}h?Zd%9e;[?|_?Čg]4c=XUMfg|i1vkmm4{nbVmjƠծjOYOʱduXJ@^//a#dJaC@k1 ]1]{?=<~Ϲ:K|f2qvb_[Y;W߿tg#P6X?.ñ~IYcǂ*_$Ii~- @l35'1}ΜI 56N`lSۜJ41JJ|Vܼysdf|~ea/.GPd?P0kH?]^.MS3&8;HNL"flΜJqw'ݓX+VmFXUҦYZZAKK L.&#ǂMɴA:9 ׯ $SE eU9{$ˆ&N|2',@Mmx+sIScɕc,m,r\B 1,sS7׷8{ޖSNr? 3m9唄9mN3?@N9i1 p I1_N9 )2!l+*edmTllc;[v=xE9vzrledʶ+1mדWclg+ۮ'(V]O6^Qll0fy hřӢ?(dN8"}̩cG+9DgD6M–X*/O~p tH":#EҔ;h m co|k>w]$A*"24IāvxHL 8$Y 9'Rһ߼!#Gz@FޏH  flӷCᔳiq&*'^Ƙi'2 ?]B-!c-eN!#:yD $np$cv"o(DhHPEP]k5ivםx=BbܕAX1al19@2"l մ  cr;-H[:`0BXC$!"800qj#$+ыɲ|=,]=cfqb;2Ely9K+b#r D!2(л韓Ϥs{0uKq1tJSIb)9 @+B8RU)ւP .yXE^pB]PDaB6XS¸;zxXP8;y9PӐ$.ag,smcJBa. g{g8p>gDI8 (!xtĦQz:\-uBnTqOqn-1E>pwQ( JDQ Kd j5jpVN3%GK;0FOx_:F0Wp J};}L'iH'2"+#$FvE %2(Jf1wRWĘL}! 3f%)xA- 5C%TQ[gD^¥ҰX֔Q?N&d9zI)(0p}GX+%GQRs+q:-Bcz?9Ķ1ب ۅ 1trQo$Y{y0൰!FUvcmmc-^(WCy {W~Gx4rˌE?yedJ1 H :]z!R׊a$^"Hx8 pEϿ#=Ի02R+R*؎M΄ TZmXR[5T!MOB{F׫( cމ}MK'.wD{עj Bfʍ#zx\5G7V5Uzo ]-3vs$kV_߭aOzRbΰzJ6?bb-N tޜBWowqv|"X",c0֖gT3"~H|D"Xq$1M_ѻHz0ijYTBHu4Њ%>g[2*>ڎTXW>-yU᭞xCvj8;z-gPjf{}xxOa>i?4JCEcCѧ,( .d|:TQ~jϝ;W֯Je@kܕOk&z\ABI(6|_Jgynj*Dǣ&ĖZ!}t`{S2~OteNP8S'aGzhhI!tZϝ0[=8Mc'è8S5/!&BP4U!MRsQWWfC5\uYߤ#]_+v?n1KņN79oIYbY'0܌/..//3[UgI+W Rs:#ƚ-3vy$kt{wi^$Qm@vh-ILdS[eo)/.pԄWF{rE1lX+*ۋʋť:yx\], MH~ }9Q15҇ZaB^ctB/W ׅJnCq9R\n-.ۖG l~.c?IXdR|g.QcMxa>+0Uۭ{  f*+n؋V$FtD<А:,j1blAiF]n kb& JnX2`ͮr6_Jzi'P0Pی;jRjyq\D0;xmдuзQ#_\9%cdV;7uqq)nq-b*ev Mc0H4:# $E76Qap G*a\R/EChnD̢؏XIQ mcf2bYV3XPMjD:.Plcc/B|:{# #?tS=@UŬ"lnc~ a :''\1wL }c<1ylmzVutNl` %ĚR2Va1˘t_g d33Dø6Ɩdp<ᯟ:#->$B50&RkfK@.BwEnkE>cC'ØɒF!ij6s'2t g\.IGv`[kPKX|3Xjȟ^*07z=r0pJiJz*,Mz&KXi<+:4ԃU |8ȟ+W={~,6543eb ^=hY+w[{KGK+R=Z,y"00eBBMkudc ~z8CYj>G$⌐%{! \WZZN*X{5f쟒)r"0V AACwD/+pcWf8/N`.DSa>xf0 n].$qV^ %KJH- k=Zo|!rqt[𝾾;3đa$`9Ol4dϬV>V#Dx=f45V@MM13"o! 6bz <>,.:u>H3M. c_u/2p55U@}2v1nϳB&7c'K <]Du8 0v((I@"?Rw*k`DdCS*}~ӟ%ONNκ=9 3 7cCWd]*UU@Im*3$S+'+VpF{VcDqR+*Qr [W1#Ӌ0DX4ک{*䢎睖y<{!Vژ:l\ء" Py( {MTJڄd9b?"ݿXCx8ZPh@L U )[ + <lN!#v$PV(khԆPm:caBpIt@|BIy#y8P"cƙ7*wZ(I=Jj9E/ǮL76_U G'9y xpHO8Ede99Mv$pC(qiJ娲lgV)?*?*m6}Ǝlxl/MAZtK32sN3ΣP 6X0 NQ68ŋnq0JT|Z<`Qh'tk`EFE1++'afGd%)r`Q'U_V(!Ki"ܰ$s\KIš;?6lz# s )' #`g5YP]\b3;6!Ѩ #C]W 6PlHXQ@% ߪ\pg;SQ=Sx8`8y]瞤" rfGqXю^x! 170&I"% \Zqک!hNp=4c=gbǗ1éE+ɏ  %Q@{HQ"9cmʶ"'e:.\RAbCA*veL3a,gW4z3ةݴtb"[AyL!8ac;ӞJ8J)® '4G4mb,? E?vq~}r^KtUb7\pdR1VwkRya|1mB!9qE#lɡ6j汷O>17Io77hV~PJh[9KOz{e~1߿!Ɛ7ԩw$n3X؄8J?{gƕqM%‹.\je RQ.jɮ+06(P%$!M"B I6Q $I۽jToU3s<ℷ|˜yf||Ό9qB 5:*oe0//3k pEzK&d/,ՒT),U:U(kV%ez1[MIJbk;cD|t[m0VgS6[S*,-M܆J7h^~ XD X=160cs~L2X?vx!uS+<1hP~3Ypn 2Sl&03qT%gBAd%RCFOжtci,dtEZWjsG8_mM8al%E1VXNd$1~Ktz=omY?xV$@F}1ӯ4:E֎ q69Ye#7ݱ`B@/edt!M,G%}!gy—ucW!c q1*1y_Q2}Ś>bk@6Gp?G"fVXϟkݣ2e3Jq!$9wlv%( I_9)3m= סd */"*TirZh\sN_p<;։X%iRXNJGKsI~ <rr㌭e*S)7<0ronRh}Bz]G=oW˅iztUf(#܁{֍W&b/ymš Șo2! -XF5<@PA;w7E\*>|@Xu,PHf:1f4{R&\ cc_Zc 3ƷS7 cK0{1H-@ddF .$D4+( IvX\9Uȕ뚃'ǎ߯#c-׏uX1@^VwLdj5f/[9ۡŹJXdXT]zbu_*VD}ba!EHae  3%fQ^l,& 3MI:f)k3+}eu>حᑩckyA?y_1=jw*$G3\>=<2KPߔF ;1s,@b[MZjpN!͖U%%$C{LKBPl+2McN6*_P/{Ҥnٳc6qa'}%̘id2WZZz[Ind$w!/{: ć^^7k\tZycGFx ^,_ÿ__yWfǨsMwmWX_PcE_ [L e>Bϳ4`/bX9l(.~0u3մ#X5I 0V\0VVs[Ÿtm:unwq<]lp=Ɯח;?}Q(~vCDƥ~ш1T<1q=63y[6ح[ c?8_w<^=V=VTFcF@[Eo}7mvm1 f._K#Ϻ5PՑ0yb1 1ݻ_#3w{xҮL^N5x%--X.;0vȈM?aNodfzzl3 Z;[iScTE 8FԕDx~,5Q2s7:Mw7fŖ@TسTiiY*#Xc=1VXZ uL(ڬnqM?bw"~-J cL0銌u[N1R JXpSo`9\:ZuWʚ4x^q#+q!B'.eoɝkn% 6 6}l#1ʌ}jXJ~7qbgb[갹#ʆFXaV>hB=a {".W0}ͧmdž1 c}c0fcĹx!Bc$#-a@lT#B:.iT%!*5 64X ْbXPO9D9KXk:d.p 䚋lf+n~8g"c%XfmmGmEd\V2Z|a3DXy 0QQV%Hr^W ƌI鋨&# T8 .dxnߨj$=d,y)aƬtCt"k hAjC(R& b)2QIW jEUhtnB!>c!x).)ITd1@ zXTjc34ƴ~l tEl1X JH%$@6BPKQL=DkRRE"!j ܚ L`M(3njAf(Al̄1M`CIu`#EE"<,[^NCc g6hb|CCopY;jYYS"-EEȐN ΐؤU"CxSJPIAyp9cpI>dj}H .vC^JoLmoȺzkg,T NJX<EH%T&АHy2a4E 2-#Emuu0iYyeh Eo,co+!D%*( E7ƆOaFqe.nNJޅKbis1!zPbR'WQK \@+NE> E^d0MzeHe^cn24)@u3~5 ԩPEQ1c|^9{i br١ {-V[Z(  g'ç/&0 cn؏+&XSirU7ͼ-`mc1fk_NɎsЋ܎!u!J;e],.nOD@4GH_ xcE  S>rqjaEv9j4y$ڸb4qѠV`߾o.faOx0D?FԤxMdƃ71;<c,9\ܯHp& PRC~{?ev gs+l8 Lhb W@Š;![WGۖkjCee!ݔks'Ҧa,8c8W=^r}E|  &N|{y̷7{7nOܻ7qٺ?|0H>>4U2iPJ@MOޛ8qfbnw@},_}uuq! T%MHri85yp8`Йvmr_ ͎*@q`P9+vOS¾=J[r-O-<KnVkyRʞ|%sEs'QW;̏lYֿłk\ 4Y-#p8=GS#н=@aS0.N_Ru_PcFĔ iN:y `B Qd`hSjg4IƄcpј1d_ʰOnf*)M,q1B뱶/4x!W vHr4hj> b d|_dm d{Y)΂nNl[, vgF;` o:=A[q5~Ae Qr"2CPi1bbLV[ fe ζ 2ZÛMЅѥqbjJEä#&idg'kIڢ7;*JRQ֘'nAR\XMTig;fvÿdt7wV&WM+]M\ە& 1+%J,bN_Ņӆ369.N"N`,p͖u-` 1̸X۟_ xԏyΏx2llb-ؕU2v̥\Ǣx;]E깝D~xoíԑ]qAmvԩs,Z`%@>x9/] 'pv.\N'hG*^AAc _-!#2`VFעӏ>QPa#ӆxc ꐤHSݷC'gS_}59jRϏ < ;kԤ]'IE1!@Vʠ w;y\U26Zl:foNg ?c}N`l-y6M32;nٽ;86G89uF2KȖ0cGFNrD D2~ gI!y2ͼ,s 1FTN,,'Аq_ .?^:~9'ɓOуO#hDm3Lz_3cVè1 ]faFgFc[:Ʈ\cky^e׮]n"#udƔ4@"b&>婉8 RD&k!$B[be!f, {Z!3غIG8v+0-ȋFK!aˮ[- oW~쇉5CcEo(|<_N$b|Mݿ g[%J5LH} A!bv+|BAN4q;9o,~qÉ+ OqX$Aj`ĕygۗ1\%呆H>N{< .D ݪ(E6>I;I2EBC$$RX}Gfؾt(ׁP#UR+BJQoNDY6D:@#5kEUd:Uxۍ~X{(}ccÿbǝQƿ?͟x`k;KʋKJ5ޅXg@af&E NblFZrE]d1jIIq9<7f̟M,1%Zl0!c/>&^\7u=ױ;g}@×ΥcG?`JY<-.A 8 W\i0&cBb!ۥ%QbF"K`fXUT@Oŀ}T݋c`X5Z(xƥ'cZ2|*JIT7D")?әC1$9J0kny8RP%U:[!FMQ*h{* 1[Q9Z(nF[Uh45Çr#csNp݈C H2[xnq*/Go[gocIybΒN(r|RJ8O)I"/R @8"+D}Ԉ"B^O3nU)&0pb^ '=={cd9{8doJň{PVE9[r &*h Q+[s OKgL_ߛ6blwf|O~ōc@̈?^څ?telr\JۋsQ2z37)V9on&iڟuɭy6m~O˖_>_XL$u/?-#ǩ'{$juԞ=2#(煆(EH9XP:dNyce·U۳U1T fȘWCw y'BQDo ?AuʶDU1m q1k*Hɸ&p\pJ$[ 7?'~<19:%rvxObŒ߬ qʉ'SJB9TbJ-VdrE6%C,48ʎhw}!cHjκEqȜJl8#Lv-JtK~NGFckyA?y_1=jw*$'pWcU~&#c 8iو, 7lB$嬤]dƇou,XHP#Om~pd*S2}E(EHs#5Nm0d/bX9l(.~0u3մYjZ\t~Č8-^ cD<1xHOP$I2ؗBlc %y(ImvթFY; j򏿴V+d&QFJάK}Fo1ׯ;^++*~1󂎥XۏE#ƌAn`l.k, lT'(RkbD%)iAn<(WG_Eb },"~)BJ6PnOyiio <-.,,=n1EuF[B+1uz%&şTL5^?VXTŚ)9.{WE 9YFR (nny>R?yH6m#+c1?^E仸@,A<J̗q+ s%>[A:TB֡(bh%dp qC2D_ heĹ," k!L yyޢ"tlJ^r5-uʼ}C3y>)4w[ T!ZY뱚IU3뒲|SMe| ~/?_ܻ_=OiWmx`鵌;2X1SPʘkW*,Zg+_K|B7tB*JU!!];Kh(duS)WqE^(wJ9FKzmSGX BޢPu٦]!ozofØoаKn.J,R1')Das#(X`,s%ƞJM_\h?pCCmoU5zC栍GC6߱TR{Roy}f:A*+`z+Iy+3ƌ91~>֟saH*UJz6ZA@1ߋ>KftE-U ͳ+O<V}FZ9SaRgo$BydNJ)é_ `lrrhז̮n]KJ7] /ʖkatW[iP`qF=D39 (LMg%{-+\汕1c6D8B*e3! g0D|q>|atc߳"z-+t|#pZ[߹63?5u{| Jx AgLԹNq2;*jN(8hQ,ZTԶrn;vzv8s~+yY$;B|z^{O;;kɹsؔ;cr8 84a֐kt68^Ɓ[Z< OF22l4Vj07tc3o$X"閇l틐K \̗X~*P1roS6ʀGz/`D-iUtw/N: 6Y,RTCm*?%_)ޏapeLW3f.kd_e;/*+7B!Ѓ}rt<8 >܈1S>q4WjQq#;!ҲE=_/D`6I]f}r Lċ2D_h B;hOR>.&9i2B!yfQ*X+ب8tVd2)sDz9PBaVi3"b#9f>l\j?EM*gAnf!"L꽋pf9 n:vG4pAHE4ʢA[Sf=HMgH/X$x5 ^(U}ٚUƖnݖ-<1~"ǁYTğEXy }d\&N4K6T ?\q’"ʣ+g^4%1\&p|r= D"<:%Ėyn{r+9m&4Om3ZϘ4?>'crJB溓\O~; TF WxG2T!w-ܙ@ñfO<D٢r9߿,'cXå T  N%ylR4heDs~jڙce)[?ȥDErAl$My&jqlY߿,'"c1+PSa<3.U1?ޛc~˲_ߓ0Ǝ;Քx7=K9cH r+cz}R}(NƠ4eѨ]?K|26:Fø9߷u͜;9wBXz'1Mzbף+11zu fhkNg=, at&ںXc͹qޅ7{y!䂄AOwqAqX7w#L_OfpcdwD ߼.my)X% ==V ߐ85_~L"QU"f6س[n!g3dA0#Ю?GҜ"eЩpT/lP0F"=>mp >c؆흫׎kJ8i;>s]!|N3kJȕauXVѸ32]..c%n\D[Uesӑ.qXQÜK GGal$.P9s?2~V%3lxL>P 9iEK4c|wmoP1{(}c}.N\1 }Kt6Xk\zJwye,Ӈ`F\,e";mC)<8Jv) Sv%/ khy m*XN;dF{>ؑ9aS(Ά/ь9yM~L~}ǽ犽CWr&>g >Aӕ~O|?z R c,tuM1* mdPm!y '"/k &.caOs Ģ2avbηXET.Ufߥ]#i׮8{/ }e)4Vn?FmM1 5ˍ$K6WXNj~+F5Y]2vpīJUt҉1^"6.sƖcz2Ø +%cX!6.#12vd [~ j#0kXm1XBSL! d,y,sLP:1F퍅օ0v0F@a^*1+kRp^+N;`lB;#c%Z%ba!^]ClH b ؁0v(vdϖT%1xHƓ M^M{(5NgH&cU{_6 EezrR\Q(Ӌz(cg)ߑU1Zs߽dzB;,cݷ;T>cqI'Ca#(I cy*Bį]jRM?=cEsɑ="~!!^3? 2X4\P:1悊;$Ƥ-}}~i~˗ b7}Z/Zaε~SHGQXW6o.*J'Ɗb]-OƦ/S˟oBa_ܿ~ وoډ^&ʮmzX; &džE>coWb2tb UV΋Ëب:gNRƊgݾY_1owyg/q3hkRnխQӛ-gxg3XeQe:1ΏËXpΜ_ƊA7?*61Oa#[CY:}U=Po'{[[XzHw+kHhp<;8>Icf}cvܸsUccEe73:5,<_~L1hץ]1n]mו+/߶m+ܼ  *7a*iv.9xׯabJI>̜B@9Zي *Dř܈2@fsr8v/cUMdDTp+903G)bPcf5cwØk06#/6l2+-KT@ @ RD"'tCRu%`ha3#^Rw pX|v<`Lٽ~lw6t^a+@cXqr1X'7Ř{= jDGcKhnn._׼!ʅD|:N >D" qY=(:UT)fJ ؎xKn"SD&v02TM oۣ1#^Rh>Wq&]k]*moq1ٲ]5:>^FwLL B.HbmkcalGҜ9No0Vܑ붬ˋ]2ʜ9)XdV \N+1+^Ɣ)UIߏ1bGi[elٮץخxcT3'1X붬ƚB[9LwKXpuޯIww4ƚR54-ƼTZL-XZe)%g>1bؘ2dcM`,Iyc0V̬1^5պAwS.8XϙA"1S'(%ͷ:2iySItv JUr'~,o'Ι3bgː1QE@3PTj Iz ±")ap@Q\ V4$ذvX2(h&1m~ &f:TGf$mϢCloMn0ㆩNְ=^1"_Ȭ'۝XsclhqBXr̠$2Y\!\~YAqrZ+~햄y<6rh c/$byz`0P2JHcQIc+ cq2f$لA80; 3V 1wmD+^;<U}֞6O3,+^3>?㞱"3̲ yH K 4xM_ZHnZhDs2r7X"4_ ~7={d!3 3|&t!LجO6CL\ߞz=l?۹n;TAHbbnb]ܳ>^x)`DV~+xDhyKS_m_ףse)"Ё }~ق V߷VJiV{0zhq/FA=H"BVb -LbnP""SK=xbiqz|]+nL_L* /[i4,03]v!B;iQ$!kpV{i0(A m-Xl A#(đƦ[[,WbEd yձ˜q}52),P4JK < dHL벦ȑLEx_Ip "2:HۈU/55:H\ZE#C$@N@WåRqI+R4 h * 4eO5~U1:Uz*dhUYԋ^ߖ V"1,$YaH)[T"}_@WUj8ňyWQ ]ϳ.Ֆ1cRO1KeȘ&\UAMԯd]3/Sd%TӉ002&DfnQ5UT\y>'M u0O c;ckz 4uzU\,jz%DEXЌmPrz{e (ڧB_w>ӔY|ס}EXmL27V͙3_yΝ;?|Za,Jǂf ،}صe-qzKffo[fؑ_~Azt dyQ? c Bbc hz0?r"a^ݾ1y䝿cm?hB_)cYS~?9tzG2cQ?cC`l{Ќ16ƺ'OLcdLii1vy[7y#Ր}cnW(bM1 6ojN fu$̝2P?V\||UYcllÆl2 jV)?` sy2cY5x&sp1'e{mk*_Aݛ&T+ D]uTe̟XH0u8Y〯^h$SP"IvBb:FB_|\zGmBaQ[7"Xݽ~g"ͯ61(Hߠ/gf00/.jM嵵MF#4rzCv,Y臄2DȳXt[ de"4B`Ϯtlp1l Os$IkƬ 8s  Ks糪dL? 7=gu&?dHҩ:.ka-`zy5dgVع^fLr `L1W?wC+wz{{Y]MBd?cbl$ɅE5c:.-R՗qv)vЏI;"~k?ƚzTa{?{C; xTÌD}$eI1O{yԛO27 +|[LaLCͰ3V0:S:Mr*{.85co;w,za|wv%@,j11|47%1_6OW^l{ԛc,W{^ό%)X,H?1|4#v>ߐ+gK\r˞+Rvji5c ۷%<|4ƴ4;i|>Ȉt Xcc/՞\@2Ybc/֚|b,Ô$Et12A1f"^`@|3`7c}3Gƶ>|׵;n޹c T+|G}(ce%jKx1^W+.䷞:g[X آ{&o_~9WcQ?뒞ϫd ^^VXSuPrc3`Ϟ~ӻҼֵ[<~˱ӷe cdE\A 9VTWQbٰӣOZ -;rE!0vO>}7tpttdJO?|P0%)d2T@T%BU;r< W|B#_ cгgYg4::Qkե63꟱d}0z ~zkXh]lɎ`((UE JNW#h %/;rE3b͉=UyYno5lڗ["͍G:t&@)|P/-Sb"5*"/pb5"6Q˗TkJKv (9n!ߑ / v]\e-ry#]ښ saa ƖqO+lE(\3Dֲr[ Յh'ddlѽ{eO<ǐۀ^H+9zlluѱK?[j$2ʫ*̎/"ypJT)QċʠH|}H/ƒYQ$" su=;ᱱZN;F! HYPM`PM]]2qb**ƨc,b2oK6Jsk~ٱ1 0dЃpr [Ep""Lo9Kʂ2s貀eSCc-ؠ]X4gWkrLo@@ Qwwꋲ 4Ɗq/BLyOS\**gk5 xS!n&ϊzDƳnO1v}2lr3R5C}5>L v\e\}kGjvYY9쉧U=lP l#A$Z1EFe?x̘ɡweƒla{1cN_2cb4v|l||˭yX6KYoDbXdFT0A{ >ׂڌ*oX<|J6jsZ\եjly,72c8I{\c 1}>ݘ_}&21ʀDZquyC|)˦LrOC (R"]SԷ82R}ϭͧh}Vl%Ƭ p\2b,^28Ơى I,5\>s?c8 &u5- p]_o޳Ly=0j~oLo4YL ?ΰ Nc!SڧM7;b>c:w0EK+kf]C^5KZT8kc6<*n>SiyIMof7Z/ŘՏ&]Mx[]&bn4defm/WgL!1eQ7w|>=TYUb5~i_/?Z!9+jђjέLL)A+&0 [td?g7Y&;<4-sd2ZƣbqCBW*s +T4ŃLƄu KL77PF_ݫ39ggs9Oy3Fq4Cw18#Aʴ*hU$mV U41޻!U3*Xb T?~0>.\,[5]LI}X1hҬ [w7 ;Ry$/M\)O:C. ,f83 ?c:2vڂ3\y h/1O4}Rg,8!j :oLSE`"tvVq4SwUx6E[%M^W{wH \gJ=Xnaq49<盆1* Zwp1Mrc ܲ&cg7G\?$T^AEo_Pgl)cG~v/T@x~_z:cMiU!N)YS3ɼw3  230eʮa7esK+kt6`lx,-Cz{kPc 4.^0U?Z|'Ÿ, QI.˻o|]]) rAE mbX0_/ui`pbjKጝ + Zn7f1V1]JvR@9oe1cM&L 2*f{֪L.f)Uc[^4 X;r໳y公N qd*c;j$b}X ]]CF> `a]"]ެeM6FADہ6ԟ23Vkbu#&"@:hֆS ȘlV>_~Ez1n@dCmE?ه XL3?IA  I c@W}Ɍ 3 JBy8H\Vyl!F]%aq 1Pk&ƚ1Eg gV/&Z0C.ؕvy?ƚ,;dc4lc1lFX)R_hs2vԿJGuƲ2jbRMbMU!Mk73H{֖ڶ{?cd,80+p7d=DbMP=ւ1x6QF^ˆ Ex۳.TmEVq#06z5_DfRgPB![їȇYi:Ng(cab]] 2UhɡQzJ@X>AW!dɪawYsN"1K5ȓ+Cj@91bpn' d,P O3_2Q.c Wu>pP ç20h cǜM.z23R?&k=f/3 : 7wL9N2Л@:.'7LҜ}r6(53fyc[cPbn:0z^O ~`p@nE:cB?¢+D93mM{ɉb.A]U.teLV=Ltb.xH{]*`ٜi0l>8e^`0̌\>Ç 8Ҳ~l iy8Ny h~$;r R^0YjNp,B4\',wZcD ui21gva`~N1ᴂ1T屚I8Zxa%16Z+enӏԏ&Դi y ǠHIjB.by Ft'n_N~o0u cͯ7{恱rf911(>摼Ã?&x ̹rP*nfb A)c1)s_(1e^71)MM16>Q c ")[oƆSRH>6i'oS{ȌmA'W9buwp?>bEfz`<7H*N)z&uk θ]AgLr֝ $b,O?9;)Xc[x|0p5.^H+̷Z~ uLk]քu+ևUXi<E0VĘ,{+brYiEr^>YydglV6dek뜫]AgLgl]Dّ1>dR/1#`{o\Ș`4|r3<^t$JĶǶ#;\d܏KZۏWb|>xnkY1{̝͏غIeHGʟ1Vq3( |98cgcy\|㊣f3x\baUl ' 1 Լl>?+ǘ%6!ޟ=3f5ڽ^`vgU\1,;cc[cyݧ?s  Ee%!vȭ2 s4OYL[  3~ۙ]aOTP%•< -WY Wwj+fe <c}X>Ϡ5& :ϠK*Z풥,rCAM k @#/G 602(`<( [{l ;18zG s Cwͽdm-`lO\LV (+&(\O |gߟ#cT]B$KUZ)kI2!첐,؞e+cCBX{`(P$kecOML|259xFx&s/eMZ<>S9)1&Őo%rr>= C2l9w!b=R0uI<:Z{re"#cWD(!"d2Zn1S|&+3c|lhYI<>S9)E(fTtƠX5S'`ϢЊ!fGDE댩ǔ03ϽgwMwoٞʹ>Ojcb&)/~1#p̍f~,CGV $Dz0'agO,Ss11V,ݏ3Ê[wcDخI`Wrd1"hUh V\It6~7L ٞ>Kc(e,1x<}:choZ"c[hR'"?~L 3?Êy5cѾhIҸ8䆹lO\LV㊬Ql*cX2 `욛t32JY"dZ}GZƌi<+EGj+/u~Lɘb0Fԡ6cTpJ?Zu6cΘ` ѓaK6|D=؞U%3r5(:RU;D7j\1&>]'-7}ḋ-}#wduĸkT܁9XDFCMnls`b_~cA.UETF`#qOcMԅ1ؚsØ|ƈQ4N9HjƬYc)ŏ}[_~Zܷdf?KUP]1j0:&5z=ȘBb/V[qMa_[SF1éVbڊ:cŷscϿoW?|5\@`~߿%T ꌉ1x7cFO?5odyygܝ}}}>}<˘R{PN+17C zR+||{pjdT|}ƠܗǬ >'A^uL ~!cO.HE12'Íc*OF*~]0u16{~ +?T,*".yXu@>!MMSS>~.I7N:MTO:UJ7a#ZH$)4/AZ꒔zNkt="RAqL2&tbسsJa cw/}p⻘-p2Q~lX<}@Ez}>'w`N̝Ob#3y<2SnXf!Tdenӏd '0 B@{e/.|E}>y*B'yMUw=UդM^)&kxwWVWKFX{2~+wo܋u60v`-nJ˸w4BacYi^fh{ V\b$ܤC1Iܤߠ^q+WgbRO9;W{Ey Zꬔ:ha<%+VP? `jd8R 6 {jiӔd:{1U9Y/G~vB'xx3FTU]{^M8 bbмT0N\VaLTc챗bHkYKV&v>l&cٵjk=ֲƟ,?dlkV*KeY|,#ǀ]1[QsLdy O!u4ATLb%"(U3e SqLnP$&V_{cl7glWx^*,0/{5_*5IO!u4AT1sRJaSԽʏHt&Ya:p̼T,}MZ| RcR<:5(gfXʰރk޽1Ĕ_~uzA=6X-y O!u4Q:&cM%EPR K{c)cd0RaAcR><5 F5i)&UW4,JuL=?ݫHLǸWc2  N̑QR,}MfPrmIScwRqF*&JPFҌ|iE6i:cߠJ_U&)-|?QlQSVfLr1Vy\1W}4JxTƦ1kIAd}EpX2l9Z|f*c!J5*ATc}()-܋*z4fL6ɶXɌ}{}CRغJ-[a ?ʐ1\遹:ͧZ@YX<*LMS22OHcriyk*>b>}++S֠BG3wHp?gjiL_}BZX ?R'V;{J=r1l*hn|~| ӌ2-c¹1&Xy#|Gͷ -c"6R` 7eΞ96*ģ$U&)љJN21&_0c+iÏq䋅f$M D)I:cJ0DS]"J\ M(S.oY1QydGo{m,\뫋&*/cTÒWy":љdzKcN B9q-16Z۷lO;3ߟX j פ'?cI+Ʉ-a)љZs:Yؔzbv6ؖE15Kܿ:' 1HN(Rᖕ8|f8a@ݠwTo3=b;Q~-m/յ 6dPEM7R䰘X%yAsA67Mb޼[Ň`+b-M12sŀ1 -5Ʋ7'Od9ŦAQ6k҂P^&q΄ӹ$I#Ѷ Ti?{-`aLa11[k}(NWΥ %\| "&" t}!:^3$u\Oc'd2B1r N0dL=A^|Ycw\퓉9a/]ѧbs!?ܺs44!D(?}Xۆő\NT8#^LEɰx0ƄQ\Goo\ޮ~9=va}8,zRd.${.tNZZߠmG{%iC[ v|/v¶WxrOX$cr1c\͒yO\*see"MTiBIwXAvc<&DSd@=tR&_3x#j5ƪ1kH$4єc4S=tR&_3xj5,MZ|1Ę6R0FI|d\S9c5ibdd]>=tR&_3xnƿZ1_V;,ƨLʏ]1䱛2.)@'j5,MZ|21KzJI|d\SNO:5ibddEiT36tls8mT>;jKJ ۟i;ا^3VEq^{ŊjyFxTy奲6탽o?[=Rٔy>Cy.W ʬxSb[8* 25/`ּ{`>Nyai{z M*T5ΟBc*Z XOGEJdLakHGd^*Bc4F}_ K3nF^\Gh0|}]j$㟡V"k$a?: KHuJ^*_>yh#O^ɘw nb#s˰X.9EDǢ==#cBRuǟUrDO@ZTh^*>1c2,W$9^s.ƜMO ƴc+c㯦 #1cg|H8؈5q8rܹ1.RuXlTVl)T5H{  'Je0T9iDSU夫ڻJrx@fcOŽwgf2OzZ|R!K6P1qh E[(KIyƥXbxvSQGIF۝Pc@o=>qd|\*_+qKEkPϯ35k-)И$uQe5ӘjOQ>VV_cS5FKz(l[sŕ]2*-<0>fR")fKdK$s3;.}K$u4<ƥb5~+|(a>/ iIץ.ۈ0vj`(UQ{t$@=g/dk+I *-xy&+ww\?حa\*V{g_O?'c/Nc]&0]V%OdK/UШRLJWLIl ˨쒭$%XJ(Kj\@\fI*Ѕ|Zƥb51\#g_l2?Y&PcHd$$zo4z7cP52ɖ % ϙbLQq%[[+RbljlEĥʑx7_{(aaܷvA-hlc~YJcPct$ͨ<,dk++c1^7cruc27yX:,FcFcׯǢQ;`4Z:Bcz%hr=6U.JnJ)%_)4cL&6W.W{p_{"Y ifç`|hal6KǀzI&A+ŕ]IT]ҵ~RblzO1>c2Xroxex,-֘g2n:Bczޱ oER/p#,}Y@G&4ƫGBcH1۷PA<h)Xn1^=jLY %6`Cv,e5h*Z?9 Bczo8d YPuHhk[;mm8~)4&zTإ5v gnpqnИ:; msHhLƮp\?qS`FkJ8Wdu#gdJO>QK R)"C7;Q^PbLBSMUܐy]ne me%<\cE7 !te0Γ.z'` g',@h%Π(9MfO̤ xh '7Aw3OsP7t r0whly`Zމ=ft<3 x }jN~3ZYeV秝4]-ֶR+jM5FӒvպy76sAQ*؞. &i*}lsFR']!=㓉{N\R1z#i>GO@HAy NbG z@{sn 9zaY0`ؗ§K<)HBओaXOwXÊrkVX[w$;hV\Ә &>#UXs&Isc2g^4}B΀ ?0: Er%7D3~@߸S\P7yTX 4De3"6S5./έ珳B39z |=%;zshv*^MC77ڔT\T~iHXЄʢpwM D߂ΞJlwDRЎVhؔVn46iLx"#a#bxq}%XXrHA;zsh6dh]Mn *.WsuϩhY8`i[d\b֊<*T9gn͞/vS7-W,(}5U*]ECaw{%c-2 f2?p0֨qeiϸƋP\ C*֟Ko˳u7wdc* vS+w}C:[c=z$gHZ7%Lc$`A 1wiqDZ>VR0SGxRdCv롗wyǽDlӒ٢DЫ;Aa8Ĺv@_mc"jy8sfv=8NHncp,bwOA/#hl4U\6m kkUX<ԆWG5VUWiGi˜XK{-:qؓ6B;-U+](s{RDHֹ{cI11aٱ?B@Mue2.%u1<#9_B] C98lcwK%;>Rʥֱ P-JEdp;2p,X*+ a(c >?ޱXsR3ic+.=!eCqpn|6"3icو̟L}dsl>xOjaɦTZ& lX&J%t*6Jy±!cp,TEǘEǘEc%ˍ 88JȾ1w̨{csp9ckֱۋ*:&۶q cakZNa3U6c嘯+9& 9m8;>z1DV]QE:v 8fSȱV26Զq cCbv]y1j} 8vyYͱy9vy, 5-W1]b;ccXs^ޏ*x 3'r<XWLQu8/$Q'YHfw&0ɆX!షC N+Fj!1 MA = ,R]I:|?zA_buXcO0 =e8d4Y̭j0=Uh3 f>}ϲ Da*/Ӽ/]u8|DFG pk8}9콄ia>J\oܸw+W~E/Y]& 1\O#0U_Ùqt\*_S|J=]oE3XR*A7~~]i-Z.u}{z|'(ct }fO%G;ӣ)+|pS|mօ+VmRXE/uku;Vi~l1c3'8%H,-өG0nc%}kDT]p#rp =L9V=\hӹǟN1F녅זHsrG:ίęp VeSoF)kwy~xT 8hpLTvsWQu,a+eFq+8)Qu ˜US(6qFMxOQ4slF8枽sSjcn5yrDZ"qiBd^Qldu;F} }9F}lFoa&Y,]yIրc"o蹛^%;b:=cl1h`r,rlȕHF}cR-cfcp }cNBAOc118f8fбgC\1[bC;}7Tyzֻho"ɼy>dɺ&.s1{/O}xD})76ɺ1L'x1w\~1L'xgc\l-Oe'XL=5Vv9t*uc`8Yfc`8YfcE8`[?+`8Y 9R`#<3A1@Oױޮ}6 Yڇ)ap _Q13rWO犉b1\[r乖(ǚmJ毼RijwE%8&yhb|$qN:8K)s8JVf^yR R%kTp_+{0BKݷ^p>YRsc hqJAԵmje๎c⍥$c}֋JӷKsr@+WFqlS+ ;f%i ;f7wwr>bXl9vI*ǐHnV_POOX%*aFXI*b.O-xnĀk--~n\XM:lP'ÎVvЫTWb@0w80 ,p 10 ,ܱ &nƗ JIENDB`awf-extended-4.1.0/images/gtk4-menu.png000066400000000000000000001326451517644610000176740ustar00rootroot00000000000000PNG  IHDRcZPLTEGpL¶ⴡȹ괢wiL?Џ_JocXcLbK̿ݗcL؉\HbL]IeM¶^Izf颏~]E;oa]KɾŵaKחeO΃\KͿdL\HZHĺF71mPʿțhQm_[H[HijfPZIwdyffK?˼{gґpaifdʻ#""ȽĹ˽y221tcƻ/.-887WVU('&tqoLJI,**zxuRPNȃ~>=AE 78}3 RI'ͺ'}Q2N@7U@7+$;vMo֘CE>4dDɴ R%G  Nl  zHpăBlܨE(j,$0bO6u%܄29? eiNA!,QCqpPPb*'^1W>(D&^֘GkgXcN&j.a¤2)hr{aBF%tɣB@Ta xfcB^UHtR/rBwzO$J4d낺mTTK^)<Fc#OK!Mt3810j l~~Acvę˗/t[|IKtG{bVRgAgCx"a73ZR\qAe,`BroKc|fƠ Z#Eٍ"=<Y9`+cВfp^XjƼvE՘b#.c]+"2%$$)!L)(Gf!axeDv\.ìw`꬈H8IL >6S/jD+LV6NvhT/^"0>jTˉXBa'[ҀG<ԛE1B+*[n95&Ϩ3vKFkSxuGJCeqc, QN SwƤWcMJJ H$S&+ ħ>EGBC`92z`AϠj̅|58iOLd/ ^F% yG[ؔ.jpF5VCDP>oH5jD_ -%cIEle9K7McTcNgK^^ VP pEoSױBrzpѓS`.b!1X"qPsXjo!‡D=L,&DTI>*Ĥ̟ LpGM\ vw ruګMMW+BSJL8:C9q6~o o*"Q 5$ap*j$ŋg:E;BZ fA4o~ln;E<)̱;o8p߾_'c sLPÝǡVVZM+CLRiiWS±wψȁ;eͽq&=KX2<6JTZp1#zDh))i)F (nj)5G^mu;r$a f= pQH:t8QIK?1ikd̒.P,(y3}N8EvtNm,^$N CX.Z0hc둔JJu,R_:JԍƖ  Uu,W5މyC!pS":ЁΟI%F2;is&zԑ(Eà1Uew:PQ ȨrQR:f>>Y*h2v*S9Dif(SkDJ:I,ubXP辠08ƒေN(:3k[ %.e -wDɥ'JKk|2zj_i0o:Du >,͙nڇH,ubfU&kWh{1R=+chv}>5Z zc=U:#ى2uhGVh{ǑuhpǑQL}͙{ȓOI d j=YLY5+oEԽG϶Z9Vv 0œ?iG^mDb5'k9"d Ag{s!&<5]1ܾY0K%Y`1=۳DO3bVC:kVn1tMr!Uܶ9b^D1; ]rI+wFL cB$\s5d؆"õpϊEͬX+ՐTZh[g-s4X<=îa@c8o~+_eKcy+QbrWq8i Kg)8h,7Od銇9=?C{L549Vol'B6Jɦ~@ez ,ilobm*EIiKm V<]W'`6ili%xIc{a8Dh+:'յ3cw B yul cb&+ V&Dkafe%ic =Uc&L'aI%ApRhl/Xq$Lzܔ1Nʆ٬H')iZٿj'B8xI5Fg1sҹK]-)B>c}mLmuR֬,F1j,2֌\Z*A2$ixXp;Ho7/74h*LeXcNߔ0h^=xө^CNr* ]DXwuNGa_@ZH`fb|[ W1*1&20jYY$9Sl-_`RwUԫ.ҫU]4׽ e|`<[ܞC7ウN64(q+Xs-p|>6|=6fD׌7}`Dl{uuL`73ula Pだ`B5fc1MXv!oz&7L|x&Lљ1 k"(Gl7J|މ /MnřJޮ_&*͛7ߘy3h,Ac-3Y^m1cfjճ0х#h24x:V5wBV۬i F&dsC mBiazh@w0's_W#,W! ۺu㏯nTc9 "֜+H,pIŶqJ+`]qYߛDcY V]wx3 с.}⛯"eȹh ) iڵo|#ļ֘Ճjt>W6-mo 3<͍f`^c=#]p`0h!Qc޿~P|Ձ1v@^.Vk7m܈1?yVMd|VJcmA!z]%m%,˦!f݂Qc$Ճ=x_9X>NuR43hAp c"$Ǵ462r`'EޱaKo*w4fo$Xk+h쓿muVuo7Rޮq,< gJc`%@o|a{ى ot,Yc[.zO ,kǬi5ưf}u, :uӸ~#[ҊĖ'&͍`_ <5۞40uF^?W_z ZG|~Ku }%}_Q'b} /g:=2#KZ%a46K%bKϠL~,kER׵tbm-xv ?jk)=?c4=>0j [ʗ]yU1hl x1&. y&r3i h 5v}|VbhkǸ"xaF0T$^JoÍ#q;Ƈʪ(`Wp cD% #w;LvHp/ɼdNӧOUa5MTSԏSUTE!ayUOq˷8?џر3ď6;_8o,qf Ŧ!Y4߭8~>>86./}Sn2yg埕8JT32VS-o&ҋs}?`f:d]0vuϟ>8׿>0<ݟz:>Ve :fs1_ʭ{<.>˵'(&cƬCY_[\e%ZԥtHD%6gQL1Ȉ?2Nc6x]ğYkX~~06p2,7~9V"sKjk=ѾdzZ `}|+~-@q4 +c;s iy??f$[ȅXpkᩰ$3-UΎ?zP*5Z-R(F,Q 3c,;v.:-[ۭ u8  (S?埚/@?D;ѩ![X&h幸g: og utZGm q%!ÝR;`U s=KZmdϢf;ʱOgV8o?fqԣ:~ech2 GE LLb(r%+ nTZQ73|. \P(☩AHΌe ;cŕhQ\$U&n0_*t 9;9RK ҕSĵ Wd?Q$uP7a\]JKɤWВv(fՎ=C${P\ݩ#*"8fga"U@)8E;h |pRsIYtb14]hGvƧ2 :KQkmٓ* 6c+86}:s:oV 238hc%ݣ^1(J60x1M&>s"% _? NA2T dzQ.mMB6!d$8 C7:6<;4ohqx&l8m>fL8oH1SL #O'soOWmǐ-" C U+GDJRDGscSۄTn3v ~[\9%㱻=#crxx-П;T׌%U, C2@DOЉy;S$T42m%"NK䤷ԴW%\o^ͱyBP3m\nǺzG; WMűS51~pjaa>ئF\@'WW{}D9Ґz H->'{TjoYK `t)7Гz,ȄG,[|X0ۏO*TdYZ&HA@ ^-7|wv7 nM=hml Oo&Iy{Dxcml[I0519AI0 iÓ Ȓc.q=T^)X)/eeH|`׀^滝ӝ4qkyu@FRIb/JˏhhhQpaU/jh%|t"}=>RX6 R@gc疲22ts, K<iNu׻qWoyWer6 *Q:IH>ƁpK81п$Ŀ;96ӱ,p 1yر"s;qk4.$,t4jE)FC+R$1ƉƬFgFzgQXE,Qp"ܘWÿZ]|2PD34\IE"Ff69F bEݱ)vjsNؖa$˂Q suEPnqjи-EXȏYH-BS?|l-9eh iϟkZZjʚ4ccEryF$C`I}hLOoH?0A&M]5x%!vaBF1cʊqpMr, I }w +mhPMBcq` YbtegfR\#=A{xbo$m)"H;;nx7ĝU:l/hF4#/ʺw te Z!B"ףv/޽;*)5ncՖ$%,ҸTZs W c1,^Y] -B_[!Ԙ.H]@V=̺4!g4]PSӓv=>}^XcՀɇ5&uuu7ֿb2<聕;\c$Dsi%n1j SݱVc6˱L} O`H̬!U x6d|gW K(E,A4SNXcL!wM+ym{UIUw씲bPyKLNˤ[33ӲS Ck`iSRR!!3%>+ eq ͆u8(ߢ]@̱RhF?࿠;[1:7۲]Xc_)kXDŽFDiDlno=7vNMv>kX 9fKՠn9jb#ľ*ni=Rű/9n8ݸtw^x plCUH"X>.Wz_qWg>wwٻן6|JI"$.g/B)Z ~A@TgI欺 T-PR7` \%@hHCjl%dk˥R{~\<6g 3 ZJRCD'9)xVl!"Ƹf8cHY#G,cp27b+IQ_tX]wD]B/8p3+k#h 2L#ȃz&8X 2Mrx;@Å⎺PfVj֙gX+4N+aTBƘ ~3|!2Dy꾸r K*Y(AŋjGUhʒ%J`XXlLl83w#cȥ|aVVڅۚ;ÌV3i"+ 19Xf=X]7cQ`_c 6}SQbކ,M:C1,Y0coӉ&,̿dL`N-c1#?4mFXߨc&14\~̊;c,=O d`dva+9W/8sXXZ__X}Q2T}c˽/kU8F>xlT^nnj}A' 9~%.N4쓽BLgz{/eN-{39ޒMscoX8xNN&kDX£0~hΜ)ܟwT9kڭٞ|糂lf-QTw-ݠo,AOƴq4, : cpݍxLx>~^Hau~9&H?cqSObKS¦"kkˢ;;WN6A6컷剻vQ,k nkFClӓ~:p&5+cm"lU}ت22`5ȇqưfrGҢޙ|yZkl0X%.9%] (*-Ƙlڟ[I?xrt]>&z-c$X'8/%)u5[^bשصT1yo&ɚ&,ٚE0Vkc?GdS]§7iQc7;rv܅vMD2WDøVm+k }⥱d11n⇪Τ?Wq+j+*E",Q0V110b<~a{y{ͣsھi\,ٴH2V1V$i%ǵM;ic{؊~kuVܹ(\HZR+cEE Tdsz+4aJf&1beAE$67.1cn>dan,.Av¾Kv~Y'?KWs7@l%!?b,x_h  sŏXrv~Yi%w8ޞ$3|c!d0V1FK8VZ]]!UMI 4(11%NJbbѕ|歨10V |髊}-9>ejLR唤$feȤ{6&ws뱴wH?,QΠJƘZ}+F0n,"{uݝ ;ywG. [چ܌5l{RʢwƘ7yy{&.)InJѧqG,7c)5f"2gX&qX&n.Wom &DtHuTkEc. 7P\cQfDžsT|&OqRe0Oƒ47PG2cAfW(qs9mfnL?f <{p3 1#f\T& ̕ԕ:5Z\/h]S4j:7Xg?1[Ǻ g}'.8׏՗#d b3%eHgl,_VcBsvw=WmGa1>5kf]+oa8Cc`,01wzs?ŐR_-bY?Xf,;O sՎ\rxJh<.X:jYwi${z4ݣ|ocl.֬œ0纈9{hLCcc:'- Hߤ Ɋa1X"0ņ kPҴqRҲ߿-W^#A +sE6{uklìѕS;ԙW^a\;+Dpj6V-SZ0kHݕ+ul TK'& Džؤٵqbii̩d)xl1g(X&Ufk&w~qWXWc7Xc< p]qx4m;; al؋fsE sQүf~G:6t҈1XEmj-TqۃS$ xLk/q"\1fcteeI*^ƻOHJm]71klk5?qn==twCtΧw'fQ|ƾ$\iKYch:((s&n}crM$܌ jsx4g ܃c?uujY7# f$RXb.Td#܌&;V!23>?h'hKY#GD&F`,.cp 3d7&#9vͣlb@?PcMcø1f7<绱 W.WFob"ۍ1 +ihƪk eNqr1@f!h}TNOOX܌%F'7IHti ~Gb mMl7I)NEb*ԏX|wT;k:O.lX}9s>UU7Kcn#BNސk$[q2",=LMA܍ͣ(A Y0cR`ezI yE!c(0Ksjqs]O'sE1)XWo5[ vD)6LrNJzݓ19c]c7;rv܅vM'T«aa ,|C?oN*LIC|1AQ" ާr痉Pt)Lg_zl6M쳐,M´<$70c?JUca"mW^mbǭ㕅߃x}Y٭MAc89P .%+R<7R:ÈaƲ~dAf6:pOo=sjWMUE_y+mYUTK/9(Z9c@,o.Tc!iKQ8FKEE/kz}!~k[QVXQpZ(?i>Ʋ3gUJ2XY~~hS?KhTc)4&dןSMN4$09ϩVX(X;ٞ*XVs6Xr9?g dL 6oNHGm0-.0kBx9̤P5:c:$p_11n;w3F gKv{nj^?_iSXp{E+)iӺ~3}P?^1wxGG4=>J@xW}$‚TcEXA[OK(t:.ؚ6oX[`.8Zeo1bg o?ʜ^ZhHX}cvpeP\SD50vq +2%?bL/5W3 #:0zcs=ߒf~Cu1)b5q$w(0Љzk91ۢ (bcAT]G酣zp9[ !76E̳33d8O3c7u-/>I17čs#)%Ƥ1ȥ1t$n [F| c}dǸ~7lpYǔMN]1 \Z1c^pjLIRI}Q㜃9'5zf 'uEs2͙:kqXrn(ק] )sL$W)n3n¯ "ǔc;ivi:s3k{oπf5wMX6wl$rۡzz+[ڏ3Xv^'v<&b4f sޮ,XMk@<ϕ&X[y \"G>Ҿ6}z|l8$ɂhK1hBǽ8+sV,f]búߘ I5f}3VZLzJ"ijFOTIG[[(HBĴ 6_6xkim{̭;yk(D]Ry^jgnIз&јCi=IPk# @/Rײs'3v_'|mRvBtv66`čpv ]tGsqOsE|ū.&C+\}}IY}Rc;!1<f }&A;Qo,c猖kЧYr754v<6m콧 omg45Z (c1!c(Q:INtc10c@L(ӘH-R%TĎQ  ٣PТ4pco5c2~TcJ {K1S1j,щS n(6h5n,E#7V]$cQb0Ҙ?R4SV1Hyw.BmjRNn51;"e5KOz75)$OVcfGdSQ0Ftt(XG[0;"e1]$F~cJ36Vc̎viL 8cT[ ˇ(z*muj5ljc)EXA\$9k2ev cZX~܎v)7&Xks5DlɔcxZ604v7B檽}UK1'c^T42cqv1V1-D؁vwuwSn ͹NWO5s'túߒf~\6e~C J2F;{@G2ZfEt@ʹ]Ꮋҫ[/pc:r6=r6ĺ4(p8c0_;d*5,1ne]tVVhb63̓%W_Il+AT$70w2%++{\X1MYѥ1 ҵs(][pZ}ӂb<>lnh{Q# c֞Ԍdur%+/bߒ cgΜ+:;K"ƞ,?Č< 9 _`nF]C_9\ssKfyDcxqz/o>a@c0J`ߒc\g w^c1ˆVtA!nKco˄jx;1cX?| 7[~ݷ6Dm %ǘEϏQ0-9h|dW4 +3Q%;܇RxP }T35֒^ƶ;5l5Xz33'5T ̈́c0&OgگXH7F19ԙvdW$MpkJYbD;_#惖00&WG=#nÐEZ4 b܉43y>hdHy[d~0 Șh3=p;>" FpDIZ<ōŘl}?%|7#cޡsLfH d^%{NԵM|@Lcu D6̙U+_[EdG}f4H^6Vqh:!z7? xvf1lu6a0z#__)c]>Z1@B}Ų6۰r4/: n aĉwMcXmcUmq|Qzh<@'\NpT.V%3gM?S?ƴ0LIM!Eo >h(/1w%s I&Ĉ0SBީy'Ɛ«o.6c̣),fObG-,95m@N /I~yFYWl%F4nO`54umׅT0Wxbiskd2kpb0O<dh,o:&36k{oπf5wM-tKybo}YNdpJbMzIop7 K661نRWW\ <8/"d/srd↶4,Kc"Nc097͂}ߴ,-ͻ~ĉOoB=wi zzl3h.i ߾._ ;Fxzy1ڠ v128؃5"}a|_Ȟf,ߑ]\2H Vr0V} ^($J~>IZND?̳FY٨F*c³Ɖ O=\rIHqh?{gDTcJ (7!݄`"dfe{1+ ?5p.R+T^Z(H#*Ⱥ&w&7!ϙ3N;:Ugz:}>rƘ⾶?H ]RѲ=Bb,OʶjF/fn3GHQ$c`).ߤTƒiiWw0c cIm8Rq9 GA 'AZUzh1b䧻]].eN#cZ`l}Icn+`t3u)FX+>J%iƺҝ$&S+(U;'c`W51HԪ䭷Vf쟥,u,nMymy7d5qecSm0V+Cb2m2ieźVL}6f"μsaI/c-`hD+|I.cǶ'Eaa d$coml2^O!U-"i^[c1?L|:-dDz`}3&*Jd,ƊReXa޽0+bܻw[އfbH)EXAb nԒePF0 F+jJےc b`k=}d+)/ m.ccX:ac g0| 11Qd cXaLMU*[Ÿ1fm]Ķ3cرyȖSc\{!Lv 6ctl PְȘc?&F<>ر?f1Ƈ1:_HaA"h WkE:6Pkh81e1_:c[ObON>wOҮy`L&)c0&ԭankPSN1gcYʂcc!όI/$eL}(*V.v U攙P?2#cu0&A91nC;h0(-N-pAoyV)cdHkEi]1=hMx"$u9dȅE4%p$1vj#cr_-Ƹ0kCv>r/ j o! P*_fTqd<7:bmhXhe,8n|7򣽥%v {ɮUAb;>цXDUdY=@?C?_2bƕyNQkc6Ʋ^66IA@2 D-#'1}'GLJ0&Ay~21#y15c,KDҸtd%pz;UdV%FhJK5qA}.3&c!W:ƾ\zqewX&!Mh>rp0vIᱱQvn7QzLBS'3+O`|c?Ȍb̈zMW:O&c62Jd X&ݎlqqcCmlDVIÈF<}fÖ g23`wc=ё*nX_ ?T;bJ5e 7fArA u1ewF>"O3Ϟ͌^temni;r}cAcz^M bK'c7c8 ޅAn e;DžfxnW2ښ6LL1.]h f,^K~Ae1ֺ^S”Fؗ/^ۅc6LK0ϣi8c#q :^r]hn`^x4)c;^䀘ubzc Ƹy4"7{e36(Jgb!nhOwb?6O&z['?*g1/ZZoLX xy4s'H^WE>YWˁ11O0cכg_ߙ3-]+n`$cW~{0 ^|J>?VZoL 8y4l=>pKp9Z*r) FspnrjjYdfag`G>EB~=zŪfWmƬz3[˹}a.UjYd2ތYRεFZX]:~=xvLjU3cYiεߐ8yX;?Iÿdscaw?;}oŘn|2*V7cR5%c%Yzgd{YXfĖ1V=ǴcYzgdj?&ÔP-d,, *vod靑X bVQFLR,327cXb#=2ig1c6ƪ1T<As&8h8a;VK!c@b<ʞ ?bl+l9Y'aRS)-\  ] ,ƶrLǘv|~;lSfFƜC#ׂ!)1Q1|x1嬕 Tj?Hx\u4H~Ll*ؔ3 ؂]nhm +SL\/|0~ Qh2M?62x+kjʵmm{cc>2+b.!f>I*AH_ l>_^7A542yFœ.62@lqx@\6;e2_ur|cV\j?yQFȘq>؁U : fG^/}fE|Q dcH_P1{@w/*aR pgPUNP>A |*gp_#:a{k$h`;?buvbt挜k2cʚSXd`,okL7ACv>?F@ |6  nWO XG>-q%TXGG` v8LaDDGXջ?;>WϴVuzo/=GhT?w">V_ Rmfn|q|,ycKin;trOAwD H_; ?C򗉱LM[ݪ5q)B_xbLxUok.m~Ct߈i{M"wC | Ɯ244PMO>nlD6 4C j?i}ц<X|A23vcڵr̷uFЌabwYp؋EMr)R!:isp.^zM,-KVjDW#FR x8ߤ?$⥭#r1Akg/S+I&Mr/f2N6Yn1OZ?*QhtU\Q JqRu5&4`$ck1}ŇkE:.BأTn7k6~!ݏxCV*ɜd2b_yxxx]7ઊ1vK'mM,5dk08L+ %{H ;c3kj!jj6"~b3I2 f2ƄXqA pgG&| ݪ$ .dK,~Nu.%kvc6`"{tҸ{ʁnT{qe}\$n=o6G!R!ZK))'F[=Tbm0)%! *ЇfyA +uJ'T`,6),v<ߵp/$9coCɬNq>c5#TelCV0],Uc$/6T265K^lYhڊ%)1F}fAG׳k*U1WL 1b j[;J)3Fa #Fs[>Sv>PhICJ~йs$LGƤ8feX>~ctq@sOf̀ Ҍyw+.3Øn8bCC2l`#D%c8,9cφGcgFaxl%p"D0neݣw1f2%3=NbQ[X2cMA,q"yBƣZ}j13hRV_)z%UlEz0fSq C jD[1ƠV4]?VǦXD]Jt$eb11Y mYt>)a̪ cP"2o[KaV+3րNsfU#-f@+Bb"}dp/IcʌuZ{K˔Ht(ccjk-*\d-HA{ ++Ճ1YHv£ VU7Wbn%}:rN.푩;Kv8כZƚbL-2 CL1uz{a`L\@1\P~I4+ё薉Qt`̔kUi}LYùy'8Bmzq(izl x'! Q kTf $opoK-+c= QXKK'ʕXlzK1dl>l>5R$C@ 0E25Rf:J< ~vX1V7rPK'm_,[rX0g&-H%0@PƊE;k,>WR+R4WaTIɴ;uHSN{TplF)[r@"Nm,0 fÉ"Dt%218Qh>.O n:7eSԽI߲m˼TjcYP`\MĬ 1EljH&2~4R(˟{`Eh>B#cLD 0fph6Z]C,[rm_5; `(c0[ 0(1:Oc"X.fb<#ao| j~#~~CLG&ӭٙм/f.,< t>c\h|xu|rqϥzmoρ $8c "vYs'C<[r%3 ƺz2pPCe -2 e"D1!b|y 7==4?+pn)wW.'Ʊo߮^0O~96yN>50y1x<g[:PwԪ9ReP\,zKfAcͬGGRwm[az=lZ|mB=l)vcehql=q雦ǗozzKG4~k߲m v6}ӡm|aAApLko.B} ƲڻR|}j㹈ޒz Dwŕ?)yƄRSs.X,z˗-gGb`9m~<G[1M^=[ǤkCwycB^}oY/%@QuHbPzǟ D"X\]&BK}s#`Lgf~I7]~zF( 0&bRQc0(c?cl3v|rvY+&$26uLg r[dWJ-ی"m/|EVT'w3K`50%ƾ1ie1=*'c%"c'$ rZyXߕs;c-2֒όܛT.[N` "cc3EGyҿ&Dy Ђ{k>3fG <1dVdccyΘ5|-Vdu@2ݭVn %l݅D&W 0xx{<+(c0UDX ƲM/( v&hCRHI)ҪĘ$Ĩ Yu cR{zMw<9⻾ŽtaM|63n/&ɍ+[L-X9q~7UIn}i0aCLp 2V1"DȘ#{۽ht.7J񽗱 `%06156De=.~mr1wGBTq{}.F 1(叨aJE2{M05Īp6FF -TdOdX6B]>/c)`l v헲iek<ÇWs"bX_HZ9l.6Wjނ /8Wd#Y+NΜ]c'ȘTj5c<'ֳ_\S26ϔu( ˹NbbSHbk%J'_8HY0@IOW04B2X'_,w ab+2iL ,B1fci{)`f)0fK JLeL2HbF+S1kc7|<WMcaS^>+|^@\S@ՎfR0V\2GY\*$x@,VƐҗjCKƘR!M cœ7l%8MXWY 6lU6izp"WoQ`.He|gLS;Dc2o!@y)h8b{Xޗ c*<kXЌQ)$t/ЁnYK. i╖OHÀ!R{ c?'x-R]{g:c)\îa1^̀SjϜ<l5UTsc,ў= qzC:"L2XJspJc3{_6KV2&iGf,%bL1xJc٪`Ly#)ƲXy)+#)?X*ce2g̫Vsp&,X*\\u,>)vXQ1 +7XX7IODG5Ii_ibKDޖ*(-:=2-GJLH{iic .m c*1e cں)sn{`?][isoGc⪟}ՁDe(KG zL>uRA LDMZMJLD7X4m,UXϢ 81Ƃ-EErS_k*cխ_#&E?PwwLG=&t^h?~CTP=Ӷxm1=jĺ"ļ2EўZl@ciu~v&6:LQ~ㅷ#s çc5gVk2KP~ U[ K%eɌ]d7vw h]1vD \ Aף =OoTxtLߠ3by؝{=cQ 1_Rɑzj5H-od gCgT;ejHMR ojg$J1L0f*q_*cS)|1L*!)]^7u]Zqwķ2Q18c#cU4虱3%iXObL\}꓇bGٺdD#8cM8"Z-w;Jxv,,#8ˍOW< ѥ2+?z>x?ŷL1ism|_ec˿:v96m2^"Ŗ]Y,$1 Nl宇yRKaGpwN02;6^]wr7Ö.#8K1%e8zs9xgSijHRC &,-| œjLg8sR.>b'c+<ƉZIg 5?nH4DL k3`C &""ⰂIg5PSl-a\s9/XؓGǎ1 gjCceen/E*o;1/ّKJ0`iYpc(tVc:Ŷ2c1h]ᓫX,GƄ,N{w؁mw"ˆ H2L.XZn+.'՘6CMl-a\Nq9/YR~ כ1BL\Bc %TiSCEaNMcJK-^o!?\I 1`¯+.'՘p0SNq9/c{]{ͣ~,^o!31`_%}̩xY4D'qb8A1aAM1+0汼2<]!i_xbB`2@m9Pc !I\\c3:ӌol/U kKӁ_o1Mm-$_1ʐ$..NXo~g,^oXeT#Mm87k[o{BBV귉G(}~ B+Y3c ji(xN5?ߺƤBMdb˕sS#e 4s+9ylob#c!GgsPrq>b-e\8 yܻ3dߤb,` 5&TIrq>be4/7`&Řb,`1Prq>QY&N#Bg7)c9(TLlR{n8\6,S1 ~]Cݏ)r]MBMdb˕sSIeB8 h&&X%QYy$wrM1M7nI] J1]RdlzS3ay:)ƲK3VA<ɸvlعhTQΝ ;v6fb,y|o{6z0k75X<&afCLn y]q[G$Eϖ7jn݌En&2&#bDJ؇}%?=~*6cY.˕܇G:3K5l~R*r6yw '3 3w'ܔ0!QBkw^cG^GR|ws^Lb!x@CY񓸾}7tp7*}eؗ.˕#c#a郱Zx9/F^\r=F9sѡG&y8t)7'yy52HiCu` عsΕ'pbb,^ŕ*3c]+]I3WşgZ#6;]ƊhO(c")Zj1yw}9z  ZN`,J͍kv+cP}Ic:`\l cqa}8{4׊/[^]\y,iǩjֺNcG0\w_|Bߕ=2ә^ÃF4ؓm؛cck/ 拏Ƕ݄ {zct"kj9*@NcD+SG߻ė+ӯ+oҺb`1nD.)~;%+1wǰٴ_-.=ZJbLG<2@P`)֣WP7c2z6p>:1g/Bqju$ߏ@"SG8cǃt m1-Z.1Vki)գXeC2b 1?I&E2V`hu:`4TUƔ؉TyQ0V-+=駟jUU%K0V(c=s0kh8{b9{8sF/=)q^r`LH0cUO ĉ۝%bH)?)@&Sޜ1r^VD9s|SEV &$Y|6鍥cR+u%V]tIJ9`,7 1F2TՈQʀr]߃N_ғI0Fn;צC'wI0&^r` Tr2=`--l\0[b'I`,cnҍsc$icF8Y9kEF$aLĹDϘ zI:ci(~p|V4ӺMhV`K'"45T$)0gpHҎ_#)czlu`&/m8Oms+lhD8ЊH``<˘$"@$!9w;2c8Hel/s::\tӱ #el!U&`Ga>B't^N$m<684,41=.5C߁ӫu2J #:ˍ1 eQxgJn[M:N6g݆)o!L&V 4`XI9FG">-qB_ : ϚK2aE7lh&e قY ȳ Q2vPCjcl!/.Gi橭 3yL-;q!Z}7cðB0ad 9*a2%͆$[Яs`c'VSDB{~q:lՄ`pn] ݅6j.an5wui.2a磛x=b E c9~SZ~[E'~'k=}B D4>lXAN`l)r>% rdْ1*5}@Hm`r/ztn+lX8ct2k;ٵ;P޴_ɹ">H{=&àC`ad)cDQ)X܊TxV0 ,H?K&ohNbkEl&ʹAf&yX)0f)M`d ˋwsŌ^Zpnj ˌTN lN++ѯ>{ 0 e4C0:Xι߼sCvqTܸp̰g,@dBBl}3&0ޱ a#o:{Y7Lhz'A&dcYN?+ubwZ\=s:0y}vhݞ4׶y2`ӃiO ,JY?%a:+lCdhA'2zm#mOH]|]1J:xk#=iw[ab0l<a* Su$rgoV[+F0&|C4]K> 0m0MQGG}:g8cF#ừ.㪑+0x4.y^Hcˡklk`3SL o6o `,oYa7Gs.P¡3pEf#aL}BHJF(+,M9`7G?2/~¡̘6 +Syi#8NW<F&\`A8[] "XXjZmvڙy ctt$Oy,ܓrU83kةk9OWx cbbdQarx< Ø`,0r7ˤ1M /E7VzLOrU84ST~S*Z`L`Lu0c34K-*cX5+5X"ZcXƒdz'ccxcj11` `Lm0c061S ` c1vMhXtƚd0A0֘OTqFĜ1:&A'c!c 쵯>406 6 nW{mfՄ-Wm1?7 }*}(E!HŮR!m!R25dS%d~cYVNْ.)|(_7+uzEauO\(0ֻŃ`1, )n {"8t1BO&i M`1, `9d?s͔_#VIXM4IR7 tk,ch]VƂx^ =;|8t;2SU|rc-9F.~FasTƶLt=7 }jDO>jƺJ=֌8\ilFA7^Ku{x0',z ض-J*bΰuP]nƛy(r?`k3<3a ~&!Bj1c R!6CHm0`ZZv ,k`͂SҴEVҵZm<\ܫLF GlvYCmWƞ.rk O0?]c?N~ߓwoѕɸ{Uyl>ǐNmhw_j}g0&^.D;( cu^ Z2^t\D:95оQt\*2ØvSQq|+{ ͻ0>>16%OaU}n,Sc7}H6e/dԠؘ8qXb[9Od 'yJ̎36ֽ+Ø` `LmM2uYs_Jn۱&-Ic^e20ڱorN^|=% ^2TFYq(bZ58;+5=ڲ<8 hǞR:N֞ ju<+D- j߽/ntL[lr)_]:*_xTnR[1.t<8B$p(ٯSPۤ=}ij!; _{{A^Slj(:G5f#ϭcӡO\:OwwS8ߎ=zGإhWT c"hFz`&ؤd>ϋI|]_ڱ;pD/{`l \WX X@~1EXDv5 LtwXGvLj=I_ ރLK& 8FЉK CH $XTc 1 1 1 ,h 88I~1-¾cspiuLc)[m9=(ñiYD:1qLw%NJQʽV|9ñ9:rl/tyWrzzZ\p,p:ȱpSuYO9>[csbۏQm> cؖ*1Ktb_1x:º_b}mdWd? 796\Ǩx,C1YXwD|dػ?ǒerYu0p-K~0W1ǘ1ʻ֤cEY5,ǂ1]XW<߰L1yHEǘEǘEǘEǘEǘEͱWXc":b]~~"MD'wXtb$"Ȱ,08.28,08.2\+2 ȂtL1X" c8&\~WűF&  p[O.8lb8yc$Qu>-YE)Zp,XPXqoU[vk6)FgEoiTIr)Rhñ`9wy8!dR];٤X"/{yrhV-~1-f vǦ29VJEKagXmQ7 r9 {Aɱa1%<6<1°ؗX,߱8XJ K&[c<蘖l\cZqcĵbt܏gȱu̖g׊,Ù<9h*ǜڊ=0hq,_xDcrX1o3٣Mw_Jcݻ/`iqAg`RRysᇞW4-=hǂ }:cG<.28,08.28,08.28,08.28,08.28,08.28,08.2 fG x"< ٘& w##}Q8;|96DgWkWǩJb'4!>&cXЛUj6-VS!B#H>Ĥ2%',{;WR?XٙkfA%{6s.-;G%9&]ܣN9U:. y%cWxRP,-B80'86sɱpȱQȄ> 9\cׇ [*83 LǾ2"cp,p 1OVdNѾr̻`\8X1w;uUHI8?2#3ٷtǖƞ:s3c|W}'>ů7ƝysWUcS10 ,p 10 ,p 19v`O}0~V4p rL!\3A ! :]2ۮr`LaW|1?2wugmcc2+k ~1ݝo\c; s_{Lͱ; ZB_mNw>Tnu>ߠ%f˶*(pcU؟V#*7\X/Z\Ij73OɝA21_Jˇ|AK]ǽS{k8$6w=2ϊ*wulʐcK$Г1fʓ|j^1z W䎟qsc.gcVvfr}u{pjc 7ֲ!y;(u!ډ:zrرZ[v,%yWqoUkUZ:5"c[ ˩#jmz٦1 qlf`lQ'kXc嗳<|Ofc`8YfcE:#$Z\axIENDB`awf-extended-4.1.0/images/gtk4-rtl-menu.png000066400000000000000000001310401517644610000204570ustar00rootroot00000000000000PNG  IHDRcZPLTEGpL¶ʴȹδiL?wіbKocXʿ]I̿cL¶aKeMЍ^IɾͿꢏ~yf]E;ĺcL_JŵژfPpadL\H\HdLZH\KF71mPۏoa˽gP[Hȇ[Hij^Jyf[Jn`fK?ǽʻ]K0//{g]Kifdԡxe+*)%$$ˑ`JiReO y÷VUT;::B@?aM~tc654PNLHEDýџ{xv۩ǀ}zÿaQKJHqomݞºſ}VEM<4\ZYmkhԙvspt`pTG׻a`^j[Ÿź㻮gMµ~aTжʚfc`hU6NYpamcܰإue9i-Z$OJyȷo˱Ζ{ȏw<9薯Ԇrmb^䋅P{wx`)tRNS@fIDATxlTǯz.`ԖfKiѶniZhX/l-ڽ;B:!LڵW!6(BkSjL۬7:1gC,sμ}}Ι:_ߙ3'_  #!o#'6o~D g* l10x@<˨L޼AO[@6qdqZ/V Dm꼁x6h_* 薤w_~?T nYL+0HpR8o*Q]{O7H~AzO%I6JQ?,F=&yiOJd6Ȥvva$+񩉑>OEcʑ)("d&Tc74=*KU cwab173T|'>%PЋ;P'iPGFN2YhLRrAHm cAQ:5 Шɣɢ䈻-,HL'c:7M)Ӫ3|8{S#'i󹥰yDKeThYYS`E/dx'T ! qL42 saPQUAjB.GzOiPGPH&,0S ISJaE '۴Y$ױp'g*#C*;7(/߰RhҊGbF˅n2A^!i[q5E:vFR%ǔO>c*e}cSsRg'֍]hR޼ML!8;%3F5e! YC;xU W3|po-OFuO BӊԳ*ιCtj#ɞ"Yf$NN Cx$>>Ma k4y 3-<eLs1+֩aXk >I) jȂx|rupŧ_ă;FNa#ܧOO iJ8^$VS6#a+iNmio5!Lf7q^֨JxFjm}}Qǘ˾Zx,d~tU~uɪRtQ1 j֔6FA[ΧF_i`ABcr;d?E`1)ɔBcK }))9hcƚ5Il_\+^Fys,Se*Ci IemB2hW%OGWrqe6!Їy6ʫ$EGYp$r܅eC)\>oG$+Tt:v<˂,}? E yTC2l/AY޺TiU{l'6n|Zo&}:Vy,OpѪÑ'h㵑'&8)x7GbW@x ߟZepVK{ߎA( `=]PUq7*컱;x5 Tc{b&oX?{i LkPvˋ5SBͩ=F;14icQm$/Q6 wKN\`Y/m45ߚGyg[07eUa@'AkO+e^#$x|дaC2pee{K~?qc.]G!D<].W׾HqOρ:4MQ$(e? f;c,SN2bE轷]rv0<1eUaq-YZG;Ru}b{}@#WBJ6=<εHquk$mX^+(W&ŵJkYi;Gv9ECRZ<&,H_͓td1/@%} f'+=F[Hbس,F0֬Iڋ\AaP;Eo<݈M:MY=EgŽVJؽj}-?Xgmc{q\B%D0֬I+\A2)m7WZˢO1ұL:vo|̎-q  cf["w/HUbMVd ,A0֬IK\A2)m7WZˢO1ıL: Z1XR5?n-& :upt6౦-F~^^-yzT vl4H&}h1\heVCk"&`3._KS&/EBP$V F[ wm ݵiv׬3)bQ3c)QZ4U^+(W&u:e e}ڎR29N[,M<n-6O .=>ydp0s={:E{/{"cckfH-P^zE2yLWo*[U۱!t̠8ۡ 7&^=&ODBQh(2GXkӭիQeod|H5u, Gcc6! WokzĶdwV;+V;R]znmc/@dn 21m'"`4TTAd$]ckV;==-1|f_|&'ŢXmh|t\@n0VBfڽz6&3*6XY>?0)=&n<ޏ!-\n6x .y!۲e/>$X+Zf0xz|5u$z=%\QkY|V1EC6Q%3p0|P< O lg Fۢzcac_}ի3z_߸q)=0|$!ʋ[*()\pPKTRE/wyf?3=<&Ợd?5 /NȨcb^;/Reǜ/T6?o{')gP;FH2z@* @Dp>Eń~ WD\_ďqS0r}yތ%ޗ9)F7o2b0zzZmnk7z1XѾ%A!~2Ub 8+&H"My(XVV<*auLw{qkk%A_@0[2krTN^91-I`A #/[9fuscAXD=FL%YEȱ,c]%WSOǞ?}ynV,v͹ΐ5`J(|cD1sgzܺJ` 925Q%xSl8v%t-3J<һb# x}.]ޔ+c'Hgv#ƎV frEs\lgYޕusW^E Gfm 6qqPiՎ sY)F f~bgD"F$\QL~\C+FiEIh66d`"[~; ֤i(ۖ}R\/"YH%uޢ1o9Qܮ| DQ:뽌$kq"8s Ppcjs0Ǝ]Ai)M?=+"8!+RTd#sKf06)-Ec#9ܱG+>$8J*]$z{J%tMNViWy _%7quBIc >j=vRRfo1RIݱ8XL#1.tiU> Wm62N)6I=ZYXH%明>;" c1n9tmcY1M'RGaE X#b|"wD1O9tmIP#1?Gb0昈CɱS;4x;RLg1Gqn;Lf|ُHٚӒjg_)8f8q0H_q^jFO L UJɑQzB$ /lB,RB;vycX6H;gZαkgeڴcRRH{vm&R~L11*QWye*` $Sj;68O"Y욜qrTusm9zǶi8v5B;V(S(FR( 弓89mPqas7m4w/:.ئp@#õw&Wu:c oH/ p(@Z'z'ql[ =uQdh㍂Ƨ>}u>~0ǢXd%Sv̬H@{l*QO9cSOQ$XیswI}=s`~ -Я8}ct,8(VTB؞"u.X8.9,uߟZlVsr\E-V7Z:'.õ?qM4-Wq,X-YF}"mtfPI {F"qQ.>pb nd6[ocu,);(YD*?TΩ{_XN$$/"@"4b[jc`MHg zgY8Ź!ɮylc%HI+RQ+;(Ї qr`]Ç-QONjSlS(ca]nqhֶ00X~+P rU U J/A.%++uL: Xy΁sjT5є5?Eyǜ3S]>~P\;㺫m.>V7s,ꎽdʎ ?E9x12XG (=3z43tlCH|Be/ -/˥ňC*d5+2NAړQ~1G C#"._.]EnY[ХkAZ$ [6Ȅlo!I 0X1jV,(c̱pHA^2("/*QqL)& h]Xjϛ9T=_Mr+mozH1ucEڇK I+Bu{Ҿ }͠;Ü=Z`f˵ks]K~ō~p']^ョ|̯F^]ۻcv80X5x٨nD8>;j%6ܰdnnr./2-<D@T,Z\ 9 4ÿ /HH7XYZb˫$`qkt?n)ۙc̱pH; $(H&8Rȳ=Ï9$B@#b N"L"cJ\8 ؆H#5XQ0I4a||X&u26cр9lRǸfH,ZHwucӱ'&?{LOsF 1c\1:6>90IJwKG% #1=ɞΖ .jX:'nıڶ8icS]Ik8+IA3h!IO|]~/1hk9b_s0yGEi)wnc97IAsfSISLK$Z0U!cҴ{8Pp̰üUǦyX7Gv*A@|w]뎋뾷vǞ̴~]w[cW${"+< !\;< j̇T? &_6lgC4+q FU9Cw[c?6~;} }wVۏ|Dw~cTOǗvPCF;u(\' Lvʸ1rHv*ќ[ͷ"Xa\\ao\o'$| ˭[߄1/q r,Fi4dcq2\r ͹tI/)qcwZ^1bXP𣐷|W|fpL$W'QTs,Rc_^5-yU/5*/ʦOJU2 NS|쳯~xk4aW ՟Ӕ"vHݯ1Mۦ!ʎqJͧd;~n_cuuSIk?{n`>a%mR@D܃AC1@1cŁ^Eʥ"^o[ݱ䪪glڸ.&](]Aa)Dr$zdCtíem[A/NTJ0``%T-5-DDi/R)R3>>3e<9AOϜ3Sn~IuR_:?ף?m ʙjʠ+ЕJ6o꺒* r|}c\lGm0?Xު"FI={L?n5E+-=4Ϫd!ߙf9VG0+(ؔv {X]]Iwc_O6rc];>?fPe3KFѮ#ʻi `mi w oP>tlsqg9+Elo4[wPA);UKZw?m۝%u,}60;@+eRv>={_aA4ސ^>͜5"l|}6Xo`mW7:|Ӻ6tzuplᰮ X:!o]aΣչz3umU[u^2mW?oCC=Fs9ksj}Rڮo^-6ϋ\639X/_d-ߍ+8ֳzs; >abWlEZ9!:l;<iR4cF7!`<&X͂Nw}w74`;p-+ͱ*Ӷ*%jP\E!ǜdūI$lz qk&:Ƕ/㱿"i%1k[h-KUָC@- :>nϠ!31 uw9SLK7طϡTs k.}ж6;X9{[1y,u `ێcw 8- ybd9΢6%تm|~lG p~s} w_0c1YY!NJ1M:Vlᅁ}1 H%dP>wЖ5 l |;c@/@p M)e* sYDTalWŠ1sV1(߅l/ѥX(c vR~0UXUe:suSUUaVvTX;&[0,NKTWVfi[GZRYk9\ &xmx+r}'Èc hL@7fF8gH{[o?#YxnCyY0fpkShNj^.y^;WU}_){JTFe4B#X8F2s:lʹTYZ αޑN;q,ɼҽ13pU:TrE>p!Z'vo 9 n?%98ּxIuc@yIMbdQ9@(v8ޤ.J$)fM<7uRSե3&DvQrҠe#Bdžlt48k8p䘓w_fut"/G CNcW2Q58Fsi|Wƫc34F&`<&;):zkkq=m%kc8&u| r-hfWDaBLֽcXhVVcAe3m0:KB처 [vzMpL~1'<#m=!qYkǴGc ݵuZ( xǒIcŘ<[ے.N9m1cP+c]!( D;&WzAɖmw'i>=H좎I)ҹ{cwG4i1(zZR K:yu,%.wLk+fo7mngdt"~&{:/rCĹ)x]x&}y[[ntR$]Ȇ^V@T]z--:(Ѐ6ʎќou  be(B&8Ô|89Pïz+NT\܌o/ގyL;b#%4%Rl6RUz옿h;z옿h:\6_qc"YǴ|fYc{DJ$O&mmTʙ#qL.?8)cmMǼ^X)$"ED|0V=cT#u[4E#hGێoJm#u:; j01c>04F^<y~.N塈KݮobǸ>>FJn_кZ+a?0r}Ngo*}i7tb7X R,cPױTvTVԈcıyh(]5xb=xg;1,uo134 /`MISoJ#wL\s 5PsisIıcQy2\rse)y2DD}7r?d C9ee;6w߷{Ec9mi78{ +)v~|0G #[H.1tw|pYi3c 6mrpLdKc['u!!+=j>K#b]s NW/fyX/sc3oqLRHշX2<|g.0mrY1_mrm,I*(v B>ԎFLDu;FAqlI78VIr s);6_MzPicK/WueŒ1)~9ƻ;ɵO8qرycOFZŎc hN o "WI]r+g*R@Wn|J+0x\Lӷg4J-҆qO‹u+eq-+F±;G F2.[[Xު"FI={L?>DXMd#7V<4Ϫdˋ8&t9ߐac5k[.بœķacLN?T0cB8Q!Labȑ#MiGh}8k_:zʷH+A1)!ؘkan–eZs,: uL~ s+O++ Fz<6u*FRױKF.3HS&ta=sz3ӟh_gGLMKFlTCɱiDrrcc5s NcxFA/C|g?q *r%`"A+"K! 9u9-"#(Ljׅ";sqܱ8ccdz9(ϡTs k2*{j#YA@4s"66dCD $`jB *qXAlF7m5\ٻ|0R,ê^b$%3 5Yfdص l,mK+L[ JUD ~e ^e]3l6?~9}崴P;>#8#B r M; YOc[ 0ɼ$c}k&41X͍!ܺ(xee)6>/Yr~x؏^d"J!J.'fWRĻ1<'E.ڿ9#t8009>:Y ^z?eոJ3j2<0FaeHH}M))9&GvwDQAVo6%ed;R/UؗLRPhq_Y%J<SI K&1N~h XB؎%y k yBP!71dԾ'x5; Ď+9W N{Mc _ˌc7XDeښ͛71@8 l) &&7IsԃLPc71_FFDi}U{-e Jߤqly/'Ii1OvR GV ptxF+T7&sHoSdu 711_: :PA\A]W2,{wkÿWVMdžֲ%v9g~ 7ѱjmhĉi̷-lJj4:7dl?9؁:@ ncl mҾ☖mtpd u>ƘLOL|Ss ĉgLEM71˶+| Y[661'=e,5h}z̥~_tUۭX'qs?qLmTsv}Ŋ6za k|=vx?Us|/>Wo#if9|u_s=2NJ`][k鉆tQogϢ'|C\cQvOp1[_XJdd d,]ثl_Lfӑ !vbck v1ȄĒL:11rǜ ê@Ēɘ1qeۅhmU bD2&Rbkv!X2V^ <.DcÿXyyboJtcJ8 &٩vo1 1LKƲ1*,T8h؎B46| @c3&yM[0bY۩=.Dc4v8KƘS/cbw#rƠMǔۅf hc)^t?l|RϪt(H !qts3WG,/X;7m/V11;ďǘN Eq;:ϹgMM怍c˘cLN7)m.9bˇ|t 9S!Wu61kA&?xW16Zw=s0t\浰`AbӇeLN7ödY+eopOm>D^7i{aMض  :+:B\>G^c@,ct},c 񽌉&~(pځ']mZ#~]dc59^t?Dcu"k~bc-F3/KF[`*va9-'6h㳑0Vp²77_q p5 caq`` e߅O׆ÞiIQ'cLd u76\cb1,m9}}Hh0181ԅsK0dlE@&CG|Éq wᐍ /X7^/HƤ>w /X9XGꥊHgNƀd,#+F3'Tcp5 jYVcl6XmPj\Hj}a3|m>4DhVhVJsG `d5F"y[{%#>+4:J(S<>6E0X\c#h? )% rc6"i[.~;ՆwUIW71_<*u kr:p}z{=1uc頌F`o D;C 7Av^m]/c fw񛙂<>-η-#x"k l -=J^Z(#h̹dcNh<-N;exғLAd>LUwn[`;EEEs**0# hԈhMيJJ&V1olP8Cg> 9kW~_qVWZ1bhC,ˡa!Z Of+I8VTD݆iMfˣ d5աѢ"@f{Q1~~ 2c}XCUUcM R3`hq-%?Z9˃3Vsc@ $C-t:Zٱko  v:bjThCkMn/&TM۴quv ,SU ƌv4cv]b-Qce~-*pc/q9.nx}[:2P pFd7Hd 1Z02uh-mȭC_^n&h-j*BUdPKOu;ԷΗ2XH'7N / HK\n,xLاTeennnab)3{n\}]=nKSW~؃xz8btGYثCj y:_aaa UD!,zi 5-hLU1H 9As]LԚO<;t~׍e5zTEy,#m ^Sw#*+&VRSHb?`2;e+xyXFWr!t֔˙ mB}-Cn(@GP+l;\e[*2 =cv=Fn+50ʽF0 a۷+$c[YkY)ߍ) }QNII?b;66/xKQgVUޡy50^m5`}&aK 鱼:yYYwj)1.H &w?Qy@r )1Riud nL S&%&FkV5Ŧ\Pc E 0 D[jBjic}g>;;;_e]agg<3ywWUJrX5>td&rLKo|fxᶄt+QUQ6cF8gJrw61ZUƷ1B$k'"a-c}oo#NB ӻ،16=J=0ȘnEGL1VQrf,4oRH)zA!R>fZ?/[񗂱~,h\l$cNe@=cjr,74\@vרV!S$*Y2͘T , g;ɚGR0c'SJ:Is، btt=3>2˘T(1 >;ߍqLC[gsE~>cg@fr]40)ᕻJ' e{=`x)t8xt$dWD/d8 d]xV|H f,a̕coυ{*LCǫB+G2li?wv9pcv0Aoڌd3A,>l66޳>2ִ35̹s?$/|ۿ*11?9+.^rTU#G^SCIz$GM3i1?4>\ڬI|d' 4˖1߽7yl!'k c=b+|&xƻ݅mW_;G5w9cgO!_X$M/.N!c#H!ڣ* OrX-kh]UcgZy:+Q,b yh4Ϙ3ԂalI>ѱ[rv4n RN#12?hfeW fׂZ-z9B#Y1:gO&?=់Y-:8o3fU=lc|2Ys(=~F9W`K{w1f'Zp߆:UjE#-g]ɰ܈oDa|7WQlyXu11ɬM_k6"MZe5s'aN?=Snbl͘Zp01a-8Fhqϲ|[Ij|S~/?Hd[;NaγZLd-`~s\q,Yw,cb5sĶm=4=ŽCS'L 'Dy-8ߖ#1;6?&*C!߮9|f c 2q,@l 4*ƪKk!KE<XF3ȓ,MI# 6c5c6w^cF X{"Тe;.\ ]Vc&8`MCzM߅wc7 z .I\ ub(J2MkӼ~ځjjzCC_bcd8+\;*Q<2i /"wa[t(W}Jq63K'nwn2;z0ku1<aJLCFcaT渨_Q\%',*cWxe$gi7/6?M.˜#;鄕7gbO iô0!FIC L"12maչ":nAlf+?X |9W*pP<ZjUɎ`^SSMwZIv{F$XRq=fTM[q{iVŘvSY|϶p Wk Ó9]?ƜoA* itӄsIL9q)K3cPgr&uE o#3+#›16ØX|VwHcެKל]-B9y5ڦ5C^(@yιksϽyGU-P 2ԇBvO:{]*::*-P`"pA O QaD5}))VK$$⎝S)VxX:"4.O~Bk[픬m(ưalxhb)MT.Kmhf)Ui vȴTX)n #M:<bu43P)c f5ټ%v;1۟ynj,T K2nnj,X㮌(R@$T)DBH1R@$T)DBH1R@$T)DBH1X,3&(+kTƄ_*c"%1 3?p\@W`{W}ETm3Ey`45cр'WbsQ}ET&M{\c*ccl($Y)-pE[˥m:39c܀=0zsl LPMќO &fW| M-OcCUte ;&=L,\'Zm}(f|&fW:t> gc%{1!CE-S˫‚HsпwX.O8HŊP HvoXS5߱UۜpOޯMڴV۪]Lhʑ1lKJb}se-c%,Jid(NưaWAQḎET ?#?ֶȇK;f\<_D1 cֵ{Wk=+f1cGKc"s4a 8BȤQeU~z^BGK i{HR eYlf;΄Y'mw 0I<ƲwX)0f `6Z)120IJh?s栛l8a9T8sd "v4, d2&"`]^hnqrAKb!c0w5[[kp1{ d0ǜ#,\ݜ $ b,22VdYbdXNӶf7]a09E6djz8aD-LV!c&VWx86%{K4f5ic#_j4?6xH3&,08 Oc"F RǴZW{GϦN?12 T6ʣvC{gݵ+n[hpe3c5P 8`idz~(1XoH%G,cJ1lZ!*e3c/njqL~sb,28d]U` i(d7cw1c*c4cJ+DP iō2ݔ%-7d@g7g*% }$U%E2Ci(M^ 곝~^ⱃPh_[4uA"p+\Eߗ%(2J2ݔEX߾ʚ]_g;A}f )s~l_j3ݕweNyt@Y_qcʘXUG!(M^7AIZ` 0}([P,\(`.3yz cƠpRʘX FnJXD ;:0VhsZ;aXGo:[b *c0FL [$*952ץiuj^Mrַ%p}}&)XO"ɯX}.D26a`FE}/$C^X @C(#IH3rRI3ܺo\pI~c ;c[;q]t .?}zv.yl__~W"wܼc˯.S{ ƒ~ JL/_t 1@K^~z b20ĺ4IT40\ҹ< _yz_ыwnVwjڊStϧ+&^h-p@:[L_Jvmf0Vqk >Z>'DITے .o®X 8Mfua*zyj'^h-f%wz[G1ƒ^"_w R>3O.ӷK>ۑB{@h#-ݭ) p s+WyɆƒ_])q(X<*¹~3eDnʈVa*ҝGB Co^1%ޏQ%ۭT>*eƒ q(X,DGùD~|6{kN|5\|+؋W|=5`mĺ54xyE%+.,.x?7:lyی`,l7b2EpR r]**:KXt"2 ƔS  up,_6c7|%Q${Rašܣy=J :Ro1ʘ؎ zn/̨k[%bX`n]W Xv/ʘ؎c=1Xʘ**c*cldZRd*c٠0gL/1kMb4fc5Dq2 fl($9oR 4F cVqҚiqB'c0Q ǫDPA,OLvױwF ѡ"c+<擻k@+ڂ*.;!1fg垘]KO"rA1`SdH45:a145[V# }Y} %=q-f=n)P=,ow+>n.ô( !#U1.S#1- dxs]cSqGf,¼(W/:w}m jOZL1>1s-cFh$, 1a>_cʓCsm9Mjڲt]0*&F3 oM- cE2"Lzi246\)YWѠ2kdߢ21NX,̘3&cra!dk /3 80c3YWmS3FC82c# ق2QI#|A9[2Xj2] oMڎCK'LO³07fߒ`y2]A"Lmd%~1udEޏ~LeLcXoH2%]_ o@ގLٴ?OỖ&H݈s%Vl>A0z_Iv | ~5EŌ9nyE1.B$cXЖ0!c Kҭ[5!X#`)᭩)p"fxr?М xnegA7jo 10v"ĘYۋg260F5ERQؕ%D7wc"fce 1hy_I61#aYe,^}}'2!cP3iyҋ7ΟŒ1iavdLZ1x7QTBf}D$,̍m1[PZTƶ'yƆX420kjɿ cxcF\c4>7cw1c!Ɣ^|v oƸOpppIEEi߰51bDF5RxIb&@$ccf1G0 (l1k",XUJ0kw1Id)m8czY}gx0+la⻙w;hp7jTƄ3|?(G$ccceZzJ[YiXivVps_C|mn)c ŢgD4wutWJ$7_S:Ûj-FݥBy.Ц=滶< w#c*cY3'±mNJ:^o(cS%GX';g: @+z7T<g:Hj5)T7%r?{gՕqfLy)[WDlԲ䧮-(]h`KN*X$dIo٘h^Xju6?uh"-msΜνw2sgyI2ι=w}1uVxC36/c;[[_|12+;l;1f#;tj=cfc M cKˇ3FVcf,{[Zx,YI[ҘƠs\=lfFtm;褱_ھcYnVoX0+L {oN\Q06u18l56fId :}7h-3Q#DNtwuu,ՔoAdtH牱,FRfc홺u~\`A[xpރ*A;}:p!#ʈ0U(q}J/,Q@y2ƪ:w:b(TGcڷ' "$- Qz l1@)d ˁps2ʘOnj@c|xj"2}V<@}a+'07jq_q'AS% ObΗavb͝"\F 9L$on􁱿,Dõu*yJh.[w{ؿ#2l]sflN3Z^}N^^Yu}'Og_gp1ϲ1l44Wcs:aoTФH ex;6cJv$Μ>|؞ϲKgRr֋+ږЂFRXj|X7f`f ?5eeΘͫV=0J Xi2f\wPΟfcOwc=2VE|CcB3V`Z0Eƒa6nStx(sab.Ț9c}}4Ip~3QzTP3 <2%rzYWP)QO&?fX=cO$戈DWc/2db;GwLc~K&LޜP)4y)N~FXHc^`#P0zqBc3dlRjuYV zG$1Qy?'*(i`)73JLQ݂(q3jƊEJ袗鎰q~)8=W<.:wIMcFYj#< ۦ`!9Oڣ8-!cfIOboKTP=3>RLof JQ4c"%<;:t҇^̉(cl}XQ:چFhm}m9 {τQ;c2o3%Gp@=Ӟ01Tb<(>fX1RH^zAgcb=A vbx*b_jM]2k 37׼:`x~z顓q39нbbl(*10VCIrsQL wøBKe$ nw""6GQqt117pmاq:EWh1ugԈ*&*??[t3HFӺK^4N1`!4-cj2U͘f,oa[~#HWS3Kp9 E31CiU&0T3zEEZ4E3޻Dk/1 cFzJߠ#~y cPgN󡗇F7cpke,5ċJ암1,|i@=u6UxʶȽ4c :- %a7^Z] mb|r/WSUɏ'`/*O_"ilnS/䱧|K3+x`zƥ}(3 }ict{+:7J7-r/njQvLc1-r/XƢ%$XZ2i œjL{89f4?|6XcOoASW>E1p)6 ̌ٶh1&K0K`iHfXKPLJiᲉL|1 <оf䣉1jL,Rznrl, q0 zlAH3f}EjL,Rznrl, q0 +cྡྷfX[+. U*WQ ͘f@oTUv^1X*\Qw-@ӌr*:[v*#Gwm^ٙZjz*1+aUoꌤzk9Dc˫^+M-yZ-Owxzȸvv1e(HJs-D %{xڳg ϓN596o,x[7ѣ]_HZKB38E?E*&skEX!A1,jMkI" afwEe'-N /t°+JY5i'ѡ UKS[2M첯v}=9yCͭb99yGΧޛ{)aU)(`b1]V1dgxfL&h,w2OoVŢkc_=ݳLr8p\9s耲t;c,|%0ߏaL~7az7pL{Acb7;c]f|c7RJ/~/q&L1x3E^cp0lI Dž4ƪ7N/ƗYQןހ߯+˜ oL湢9&IkXŴo?ʟ+fw/Wgsd/m^c*gxSY޻ė+Y`C_ՙۼĉQ^?I\ 0"rXqIM-F!1X]CDž Nt2RmT~ҵU0vh0pְ1T|r@(L2i9#Ց#қNV:>( *=t|eH0G>cǪx&( 1#Ց#*5חb씖cfW+^Tz !>ORZZV~_0&dFΛw5~PqoK҄^K'Ŗ3˝7Cnz~1mQ}Ǜ0D_lPvunncYʛ!/ƾb,ٸƘu[Cm4m%.d,G 5cs:qof{ۯS1O0Xk559DXVoجcYX&c9fO!S@ 0tFo(;!t(ClN\tO2NBðvK\v4[u1SafXc9fO6c傱-k]tobVNw)~+`۲L=: +a[dٱH#˶U4[á9Qt`,}Fʛ!?+ u>R1 Cv9t6J1ٌSsJm]9j/7L+iƘG0&H:|XJu{H0;Hp蜯c:X?-=N*[o4k;WiiFjoD 0 QH0zd/5 }Bs fţ|\QK3R{#R1]O3şml0tgc>/l"(2`udLt=աyBƭ(hXҌވb,^ ;rԬB' z"J&Or9ߴqk(!w1Q9X9V,OR5sG1#}f̚WCFc;`LyƬ Oxs=chUq0MߕF#cnVCN2 "/1o1jlW>h'(i;d q654١z0l4Bma#_Iͪ1V5SE'°3rmtX~݃O̫\ݼ6+8=5t`DstCGu< [gv`ֆ!d[c`LqƢ?{Kw :{ bw(]g΁v؄;zӻW;GF TaR0Z'vUscy1a#~aHuV=ƦX?A7\Y ߽ϼ&˜nL`3KK3!-#dD\:b𠾋`ֆ!D?.]F0TP$LrmiM,w6Tct1>Pkޚ?=!_/Y hA0f\+V xc%0VcTP,x 4;Y9"vDDMi2zOr0UΚdK?ڰ]&c𦴢`]9/@d%} ~ m8M7uLʵ2/<ԌF A*\xCY|!@f1<øm^T`4@,U>(dxk{1uxZ7fSyf{U+,V Q#VlS[C1VX)͘"!ލu5*KnQ?{FqyBkdK!!7=xK*=MLl#AE]ڲKR n B+ ~g<$ƔH33L>ot2 ʼnϣF0gxKcDӻRi0n Pp7Jz+/ӻVY2_{rWN&qcr+oަj#Ek*'gxk0ƧuaAح09Fϻ*`,:l ZU9[11/~Vsݵ8Ӿa kA 6 oA4LfhMu7 gOi9F` h޺=XH؝e X1\Ǻ+cc0cc0NJc0똻)a,` 26` 2` `` `` `` `` `` `` `` Ɣ6iƺ)aJ2eOXW1d,+='^Ҙs$aNv>󬫩*Mc]Ƽ76cݑ%Cj]2V+\L,KV_ `,(ƬIڛTmQEk,=wiyOXLHvgc &cm =畱&cF}/Ie"i#z3ϪƕdrE;˖z풦iK?{ZBkh0 %oӵԣYyM+˒h ZNM DVk}sj46zvJϷ3~Zy`85lƗ%+uh !?"cirljc,aoƨluie3,X Ɛd9\#[aЧwo5~Wre3,X Ɛ#Y0Bc!n0BcH2G1`0`,XKXc1~M*HYbO~q7on:1v*'G1F#+̏W+cCؗwuPmul?2Whn1spXnӔD!lRi\\~m=ZXyӭ=u9&Dヅ"=|\,rE ѬHcPPBl'֍V =6|/?yI̙c)~gPQҦn=f4=;W#9TnȽjW}8Qlf4~96n< 1c*eJxulp ^0huMw,׎J v`PoϞw͜pqXR|1[4kqd1FAh[*+vN:yU=ubsJ A17J啇AAܾc y y$ 8ϱI, Wԅ {F±|ݺ18ǒ5XJc>&/Fup dceo`K-Cd>Ў^dbqi+_Wrq,jS8[;")GǢbv,+5,OL\drBCLrp,&sXL941ˏ8Bd1"cǤ I.28&Y`;Xt1ciIX 1ټ}8;cLp1&K=#`~{G<JHy 1x=+ 8ߠ#?EZi±1#9F Djplb'XV*G䘯&K=k bsŊJsz)áVp,DvoVSyUpY4eƫΪĺbXzmey:b>VS 籁ڽDvLlcÆ%A1Jk1c21Z5䘳 +p,nV޺"sh1\+& W,08&]dpLt1cE$ I,08&]dpLt}cssp,|ɱGpձG 8h\c)=s % I<$ I,08&]d8W,08&]d$ ,i18vXZcՎYf7CtM V[uulY\1&$xXI@X:{M_:FbX{#ajXI@XǺ;&f}JR98#c)g;<RL1[oh{z77%*L8#1.ёSbk:qp,ń_43Vc%8#c$?V=MY\XMcy\'&'p,F:F:5rldN$ ,sEJXg/Fu٥0-Icɹrao`^OkGVb  SrA' $`XXrB$F$HEqq /F"P0Mx<^GFJxfcO~'Cr`p s18k/0-:}E18nQp2혚,cX Ӿ 1Ax{*f=3<#hubj w 4(7bis}vX ,c,&8Es%U q:15ZԅRج~bZ8,vmԜ`ݱ};`ݱ]xMՌ`/=T_x~f8G &1C1&rmwLs^ Ɂ]15'Xwż [?EqfκRl?sԢ6(Q)Sۮ]p[Fڿ#3LsF19'Xwl8 6'Xwl/}KDSؼCM{3'hu1Q;>lQɦ!9~9wc6ڜ`ݱb=֫cI8)kC/,yŲ.|Wݩ'9c|=>]?{4֐;?'X9|X1 HW̟9[ObQW:nQ3=K=kEq,xg3^19sX9bQktǜZܱһw#阚 n}Np >W9p,R],w1wo>k(ޡ?$_}0$vm0'`c\ȱK)0k18̺3 cplǫa/ cp,p cS± :}u,+qh˙rǦSձgz~yNpZ/_c4āM+˚c;AgZϖhn[X+Nw ` 8Yfc`8Yfc`8YN 0c`8:e @1&Dp6w(87Z[[p(( c`$l̗n.ɕ/1žexNnƲ20v^kY5ݍ:[keJVU2՜(5d?U28[%2_10p%DN'%+55pl}P[ҮJ+;_3_10p04Z PAҲ"#V+i9F=JWIDd}>aXp+Бԟ`SkZk8&tRw2y8SS=0#HD'Cc7P/eu#9Hwk6[S]TE3'tX׋QD3=gck&zLc Ac+rK|HW zScZyBƍIQ$aMNX vR+P[t gR6ƱX O2ۢ|C`.E !x̂>}yI[AܵmhKi;2t#[PcL.lHY `mxeIdAbeSvAW:[땀+DGoB`;݉\fh w,ja\ccHsr8)Dhd5 IHͬFl u  mc[qC2""0fOJZ8UU`OlM 'Lpr Oo0$1{4c&+|̌81#LpÆhA!WHB6mIs,o"] lL#ndb m<[,ǬVvjߨQ;}(1+',tq}pǣ"߄r[u?9՟T8τ Mk+Xk+&,)h2U):2*MUR^X_wyUK@X*}tpIH3y1j0mQTU*\Vƚf~`6\G,eɶ2 Vэ)hv*g7SȠ]4UVJZj"91c aRta283qF>)͸HG6n<"=5Q=a_0f^< s䢣4p`K@i3(YYC2Vt+kݘ)mέrFq3 xES+VIY<#wz*3|5$+5f-5bY6ה纺Qq+]Yc;zP2):wW\,ȎiG}J׏<>eKujr쵦^>ړ%6\ZPAX'1ìv\jfi3_bLJw'+J7PI8ٟ墨Ch!:EY2ި @wo[g$M^@m^P{Lstv:AN+h&:Tb.z,f*h_h^%< X]NgX$Ν:Kw:{4R7k"ռȦ85++#DWŞjЧ/FRboWŒ/VsJ$W (5Vܸ$ЩڃS Du⪮>ߵ^H{>^PA^βɽ?^bc&j2t{kݘ)mΣуι(J2╮l1UQ[\` eyOsWdB{YZTp8K{vݳd{](*Fϡé[pcp8KR=1йWys=C3oU᭖'8s<5*-M0'Ud[[C'=C絊nLASj98|^\Y$wqs<[p]G*^XWUUC'=*ZE7aJe(sQrL#2vԪU*:ًnxcEGǦttT_}l۽[q=ē JVэ)hv*g7SȠ]4UYJE'{QX]K XS$Xk,8z\C:J#f/ݻGJapDYNw^hGgg-^tHp|s[Σ;=Qg|}|pp@0GB<07'o~3rkL;<]OOA!u"~ p؎#SX^D~{a`8] 8s]O:Sy{?Fko :ߖ}KZr?jojs)w[7H+WV;<>K*luO~MuWy{v+Hd/(fl?|k~}̨tu~w}3z̬Q!ǣM͐:u7}׮]C~}mۧܥK{}-]5sE۵MD0cIþ?7w=R+ǞylOQ>tB!*1 S.C1[匒fJ񴋦jVilC=;Ϝo:?=6srv?p%Ʊ;'NǀgS;~׽[{t5קܞŷ4Nz:׿aoVû1 t#^|y)ٱ0t1u?H4KQż^E2cvd汿?GFD21_SMWWO!V| },>t;qO!;] gI"no//%юmb"xEl@G$H[9@"nٓ~)7\pfc%s5=˯%t;aҺkoP겘pSMg)̷hÒ9J8Z=nsiS]xۧ[wx<Zv-fG!?Cm۹my I`4?Kccc퐄QT&pe$a+h\niqUc™>uN(Ʊ`KưRq\Xf9Ђ888w_(٢}j'7L=v,N፽Kmm0*Rχ'&;A=l8F q9F(n:_pq: VG:9V=OeSo,a>wuK%Y m>yۺSn߆ ͛rSY"3:2U>jݠ-ɭU>7:/H{D'{~˷ pS?7 \gI\q~m$LJS:Y,Z.r$$ѣh*@03X|Q38<66<t/ jܵ683 ߌ"XоK`xX@.cE ?1h(ʽ"L.x"pNLX>J;,MRɹhM51PQ( 6$Y9kɯi H@IT3jY}Ul<]cbH4dֶv S&JN|&d>*s0_obtiGwrt|c"r ;*8G)T@ޱ"c[ vrH3gP -AxceN%:O 0'Cc[IF#"YbpEJ8 fv֏'X>QYձp, ;tGYvN1=cX\Ũt3KcQrB>JԞ{RT%pE5-SZ-_ $М!9Icqj;Ee^heo3ϸM1l^l4}{khU&fձv IF#Y2q2Ⳋvk{~1E64\ >DTv,EZd%Xubh٣u,;[uLvǾx<| 4_e}¥8H.~bqf6ffN6̃pXdKcXѡӧ F?$E o|3t\9| PǞ9Y;?;yfv|c9H mcR<[nB Mwqcbah>504`ǿf|hm8X+T(Aoh8*djX_K7o,(4ص \ fiv@!V%ؙ^<6%{"$c+hX,8MyF^+qAÇG^؋ock@ KC}}ǙwD>8uxo{Yg4Th283+0m%M{WH"@kpkmp%]cHkst^ulhR3 ;fd/^W ShĈ@x?0YhB ^b:S+&"Q b(ŠK/^cM=|a`yzzֲ9mo ǖ̑ˌ IeSW_y&p IY=hM#3!{oFݹsm4DFA> DlmX-.AET4WLVYy)}^-;hzR$>˞6Ͻ7xiS+ncI&m?GdrDMiX6G!WFF`zߌ2cTYl^Vf2XL5yer|alz yWC7qD:6CnͲi(ym7gbPݱ~d/Ž5ct>AaY|nz87hijG YS籩EKvPcVew~=3^Eى;]#.cŽ5GL( tmcHcn> 0dRh$@fke[ -cٍY#8fݽoSz}-y}E~r:Y$䬠cuF8{_zeŔav3Dz_UʶTbKб,FavYρ&@-`,Ųq8{HбZC.K` W<ٱ+'$8Qt,cFuZEmXRcGb_1WwHQ0h>*|Dj]|ba:@Sj=Z r.)c8fm{F!Bl6[7Gd<تTĨ2b(ޚa8inJ%v 6JCwKnq-"@vjLXSFM6PchJX+x2 hgIv :) CdNjp̞K=:6@c AiI$ޟV#X Ei*y<E?F;65)121WnOBǠ昵ëGӎCK,tExw-:&]ɵTDٞM]|t[IÇCVx"9M6Ih|$:FE $X!ޱ'2|@ʗ1:q]F&ɢz?Je'D_="6WR-[$w4i{?k4w:1V.xz`>%ŽȰcG399$/k-E1M:kɎi4efi]:fp.}C5%;eX1MMr$4* Vdg4xH)h68u.Z׊Բmd)-D֞%HWQc?ҙH} wlCǸ;fh%#Ok._SFDKN_8\i'X}3mlݨ|+̨a6uEY.Z}bɖ@]k)swKImꅄJӆ/]cذ\[ز9{,u$XnI| 0;fqwBwR9*T1=>>ӟA >;&,sAԪT.yѾU8q0VTZYݾSGM,  1 0ʃCSRq ̯!(n%)(1z UGDVhKﴣigx g$'g7A"9{k|jL?xʬʳTҦؖ9PKU60bp!α`(Yr= 451Kd%39s:;S]-s,B% RDCJpF*ݫ!J6+ښeXM13X$h4#1"#x8᯿Ei*+n (N) 6˾EUe聵)v,9Vs=>?fR=a+KL^[yW ^h>أ}QeUS5a-rωt1DȡEv~OowzsH)TBgޭ94*5PˈJ!lThE (BW]WQz6Z-;,-Jձ*pls,0OrLÞ'@}C1kUnwQ!Uj bJ9vL]kv:jI0ٌ|+o A'4T[&~9Iɱ);-\HP塐*4!H!̾'|p,"+cp `Ase.c$űcẘVgK9%p,Ac%ݣ3(msY55_4& W]:^C(r@ҵu-J/aq]+"^$:,(Fb+hI^}_m8]t$HҦHkEOVcdF1#YMv;Vnk?n.k{UW<ZHYad;fD[0r+d+< ֑BOuɒyVKu,ZQNwhkDKOZu⣸p؋a,B7GX"bHJij{CE=T\96 +OɱM.#9V$5*L$QY۱7#| 4/(XNVűN{U&YEUF9F?| sѦX9ֱÇ/uk/d4ߦKbwc8uAD~5 f;VzBNKBXãy} ^_0ٕcTnnce:&(u 4*#^ 91l:cf:ϱ\cqcN]bXx5׏:M9Whlax"]S6Nce%g(*aq(E8Fl'8@^I;/9Mc">&3]: ={=_onl 66~xeeq[|uW)xrۗQ΂u)Jlߥ"ɭɢ|JL╼aX[c~>w{{_ƳM {?c=cM%)P +9I 8Вcxj*Y*+:J܆pr*;}C]LpVFe=)ѧ{R%8Ƿ7-r(Xf -չSB@RWp$fĐc̽v|k'ec]D9}б/NMcOioOަOl )/iK:Myd Aah>QFURIJQO,̲sG˦yk-Z^ӦcUu褮xlNJ(Dbˣ{Q-kHK'ϱ8Dzi~4R+\/nk;Zi%1lRrߒ;f)U=dWIc{+xI34Z NpZ ڴ"tl͈biJZ1ŴJQB$jXhDK1<ŠÎ=I뒎Ўt #5e1JɤuP{ZbKlXDZ풷Eh*7V@2ZQg0ʻR"X~ M<}r4.dǜK2|cyԱfe*VgCα%uk  -+媉#N "|Jhwk;ܰc"`ΝY;!33yX{RtLCS\Ī$\˓BE`s v)yU[JZA]r ͎z :e\Wfw4eT2%[5$Ê,Ջ(xԭV xnm#0>D9vQnɶ`ۉEs nMn׵Yό\{`|3"0+.֣zQp`ńKI{+U:Їr*z1CJ5f^5/)3PxSsx+ûHУqMɸf٧v{|)\ohop 8j.^DsX)yLh:iO캉W~9RzH969}ֵIiǀu0xZZMӊ}uuH9֓ =47Y?11(bZ5Unv˜cD2% c8ID2fI%=qie-hݢ׃`fO'\Zzxw}quqr ;I1=׀)^?;͙w CUñQ}tI?1-OCU5)v,ǖG-*c"-4kTU E=Kjxx:z# ]ŸpM8⒂,\Jx^O^6nL!ͽrqLs,1c 9sL1v1{a KWg8ItU]y?ӎD-x`oHF]Ţψ,Aipj& -q86;;(pyF{hQ&ẅzVTWPEU—kvreU+!|?~%_&巀^T;Cf[ B1ڱݻ;fg`%3А0ña113n%ӎmUBF+HqCxw- ݩ5_3Xǵ~#v4=\#!1- e9&S4\ .zn1!a2vpaWF3Fu8Ҁs(=-, :}'Q3ҩEٳŵ((VE%qGG"Lq: Wo85ΨWvDcM{Q)C &(# DZ7VyՎ$q #lϏe3jن"6V\veCa/@8F2JVk87Ч:(αJmgN%9vz ɶ3Bř[įIڝ_B팲|5"ag- e ǃ;8QǚFj#_yǺ=@1)Ljbm(gTtvΦ,L^>X,Ǿ~睝8a+4'!ޮF-296"QL}s^Uߦ0j55< )p?InYٳ^٥zwc9?,^ȼc[VK %)ϡ4A(qLjhVch1α!2׀p7i~6ӻx%o~Bc~>w{{_ƳM {?1ogngޱ-΍T\O#' V!xG4+wq:6A1A_c7'nz}^tdGK=zRϼއgmnb7ހ{ur#{%e=H[MRɔP-R ZSBǖcSd9?F;6ӰݘA?fnĻtcÔccι9G&鱆Ut5Xn$u)wK:i.\Ж2c K8,%z"~Rʑ -5؍c?1_,c5M0-P~snsd8?ţN#Hj(p̡-Ru)]wPU UjVXVIy]q % 5r"ɜoqe86x_~X`C&ķM/1'GǎF F"TvŠr,KWnY+] P #vt +y~;0 R%K}[Kv-,ӱαN1aN 2[< ǮO\y|?e1J^^p(h{?ah 1N#H:,D1Z09zag0k`1ZhltA` tn0 t#Ű%FhfҎ,Mz9^36wL":kkύdc?_Ѻq8iÌ{4op'^cL"I]KX3=2%"cB:[3+|V~Y搎(Ḱ7oE>:㊼3(\UM9NJm__'wL9V˜7R9ƳTSqRa%xur#߳u$V__YbTShG~3 a)Fk3U 2%e`U2+-p $Y _cu,\:<{ÿ 7A"˚!ñNXW̱Ɯoufoqng|> $Ip &Oۀ/v&:!w7XMP1$ᦡX-AR-靧C[/y|&vC,ɧdsrY9'/3h g݊$ T:ЇRȱRϢɔ lev ^dD;yO$TCF%!18Vdn8(2øh3Aјg=3rLg256䕔ҰCS ю} 1P,:P8kMVٜu(8_K **͹>6hNog=f";?.jo:\\'gbPc:T٪Rп8VT1U*+yHmJix̔sVTC"b8i^S"jxY@h?T4[ Pw`LC\[_J.c@< [Ff(6 lX 观 ` ' >wMP)e@KQZO,1,KɆoiV1fDzQNU 4T֞zXB eʫ3Dh w 8^3 Mع߲xtٍUg6Cޣhmzd=*GCQuu6Z~6%:'c+YpʓLPz(BRƾ"ք>m}ee}+~&kLFZ*СOYنka:KވqLLr9jr9jc2IfQ˅(k*3.UDÁyf{9=^6SN@ߍ%Rya(HKv,_q,c qpҥB&N)xe0Q;2Bc~餪`35T70Cbn2,ѝTi^}^i9 ۥy{5677b,Cma\L]XyI{CE1~ϱ_*IN^(L -yO_PX;&}#*֘uTkJН;;"cX\JqhS8K$Dz/n;tǸo8~x"5)pm)z|L@0!}T˝U9FT,XJ=c#P_ȈZ|`b:eӕrrq s&m㘿P~D8VY)'*+3eyuq;6wRcrs 8K%GctlDzTS!2e+ptǦd[wXh'DZB4Lrvwt@1 rr`c6Rqc3;Kб"3 {,#N#[Aoz' @X6tawlqIw X] 'Dz-wlj28{=ݰ2ix,q dX y?鎁bڱ,:F>ΰcQش- תUʱ1|a݉x9R:\; ǩql&1N'/ oD/ı Mplys̛w58F3cSt!(Ix>v[ <Jc6 rrLa>tX`cGJP7X8&o|4C,zu[ata۫Wm7=ޱSח @1)s7h'jSM1?ѱ6ïLaj6;vϪAb&zMμ4kr;uO{a8^=֛Ws3c'^j86΅cdvY&'vϱ٩n< cccM .u73s7vr͛[ ,SOgV1.8?DZm---rr m1:q [uh柣c ^r P[$wj딙pv&Ŏ٪G=JXQc)vVXzԃ.lQʝ" L92@ң48=EK#+6M?vu[>HcG1ՃNtEH ׃896MbiǸ|)r #փViЦ$LqhaP=c<Ȋ1ZTKcG%8iRPp`:gg5+vQ TǂP\΂\XY'1%@eR($∗qX;(v"}Hq/&bc}'}΅[w=Xs/֣c;WGi1q~s16{`'Sq2beb)Fv5ɴ 5Ktl!w<Xw5W ;cɎŞ}؊bbWsp m=\kz>骮vnNUC׻aBS__-,Ts}n πc lTtL9#_'α)|XN|{]KZ)JW}~T(>4@?G,J! 9fb+e^P,Q[ 8|;`{geKca'P@xh }Xi[ޯJїT+zp–}tӹX8_X=&5}iV)z8 9cq;Lǔ5p֣ |kXc1p4MWC_d`{%44]2rdwOC :v=bmDDz{wV^X GE~7zT(Qξ YzD!萶Bs|q/(2/_ Byp) L~~/)r}X h6c6&s_)quzB%GҋH#&9mnң'Gp^aˢ o5Vrr=I(xr#%%!4|6I?33;β̾1g7Defggg&vk<7*,E4Iβ8V%إ+s4,`\E59b)*6K/Rğc1vu˦{WBcsU|YcB",$k%[(pkby]T9ֽϓ=͞=a a$as.ʾUJc+V+o!RXk/_bdX do(<}V#Z=K_VH7UL~ h`>'!|D1l`w,!Jy| g̻G&3Hv[*JX'"D4;YA[mzMBc;;;؆U11Q`,'%'E!(O#H&Q"[ w2W4jC%!|vDǶT~/isQh%"H"V>;mV/b͡?XaG;HL8c1j sLl~=z8bPM±q؋bcpSDg[?>sj]u؋^o?ql|Fs6XН-Ց_<=C]?k9 N<#t?4b჆񑘹ձjЦWcuXǐcƆx _~LC%wp A?_Ebe1x}}I=W ۅP1LcxL,?Sw{`6ύ Kr86w=E )ǀ'OgYfTǂw!slGGH ݸ*ŵƠ'vֽecۗܘivT!dVW$d[H5 ##C,wu1U~b׳AY1!8O0A/*helE=۷sKw{Zʍy25܎nxtהɆ@ѡ/Eb ,Wgf_˙9fƶB{oǖcc qoex.cJJ*lIJ>~j[ֺ|}N'%}e yd2Шodp1n. 7X.XtǍO33gggfuat̀m$y:WcB X]+'" ڢjc-4}Ư (1=v (@111?袍.xs>"d$m yr~ 1,Q/Nr<LCX]1gFoz6Ν74(&ikR,dv rBm:ibIQ 9֞]9(J'cz(ZwiGQ;Y8d?3z1m ati+!XI?9k[iV8ihB|;_XBr +(6q /ȫZD 2I1t|" 1?r,$zEj`ώf1?X- Ǫ?R1uL폱ARuLh&cYue~v츹ccg&ǍT,Q2ձ cΜCu mb_ec뽹z0zEc~ݹ;T̠߽z:nrs)[u(1Kj€S4oI CO.tw2v${;ձ cȱaWHφSaٓWf1YB~| I;vwrem}ThuݝKE 3C`s?M=}2G|d ĝ,SI6 @\K]DZ"&&;IZ mHkhVqlxk'#yce:EnV·{TeOM=|o疨X/Û@D#B Ju,H  "siF͚=QljsJ+ bnjVA csC8@'JE )ǀ{RMD1M=ձmC۔"X΁O$L=^.ὒ'o:FX\]Tv{/֜Iqbt$[hFԖ͡FZ ,FR+Z$wDo!;&Hv*B9 `6U %r~Ot4V}9 vx8&~2?9g][׺nQч_}gbbsanѤe%Ŋ'2Oߎ$[-~w %.6ǬҀ0 ;h; -RMҴpߎSцfF=71cfc޲rtxu@Qǖ,[ E~OtRXi*6Wݝc~۷i?g{ cǘuǎ~4, 1TaN-xczx'2iPl/E.x5IKw J a1~WjG-L)lNij-sk2hcy;mٜN:vN~FS6fѿ2WѴLdJ:r}ߛk Bf;԰bjZxb-!ǤZ>n:ֵ}k)n,jaAx2XbTa7;RDǵdGD[NEK׆8lϝK wCN}qp.pYqȖoBOa;[z# mqcنi29iSh 춨&՜&QIdB7w8Gu MX0\GRäFR44HCa HuY,}ڏ:X)EmNi=/f`$3VRNvExsw$S(*j.2rq<4|b~]Y lڏ] -thO6!̟;"9we̯h TtB^AIGX (Q#,y%%v Q4IcCm犟s.sr&Ԕȭ!ZŐhgbj)M r$k7wި5sGk ;1o_K}ImI",> k3V|,`f͘xӟ_Z;fYRK22c6f cU #:ƪeN; >0)X2eYq\=Y#`3f9cA-fY  `#ۋ=ۂ՚@. 6Qo hZPoyl+Ra;{/kzlqy|L+͘Ōm ׆ģgQ2V~DvtOtg:P;Qz 'D&gUmު¥/7 c\Z[_f0cGQ(fY `?3h$~9ZƜ<`cEZ /1|~Y1RV~SLX)xCߥl 3vָfYRK62S!bLar0%Y//"\8oRc7q~G#AY9 m*6<:Yq%c(D`I.vt2tu;Zut1@]6c3v֡PqCFgGg5+Βa `1-ŭ̜1h-@kB@Ȑ2$ *Z[1h3dǑq*::Z4PW,Ji)sNy:s1|~gƘpM iCWTc*ٌeXH۱ƪQFFg̗G[2P'K|f06N86 e0l(&\,3JfTȤ5cYVs%cE>"VƄ&"3'"\J\L Ep.1CiEN+ɹ s';Y92P6e+̞"CsQ2/{#febxfcbH4HgEEeDoo>,O Dclr![Pu5+#h$e zlN0cs΢X_Ưq#YOA4 xNd@12r=| 4c@ v`]*1%ckHaBU@ax2uyvl'Vc_0mΩճ,qy~W|ݙ|؜`,QPEڻ2be`., M ҷⱀXv}f0 &ƾ8Xdo('ؤ8[Qw+Yڳ}xv~P+(}C>&O*] ^رX+9y(7>ƞ )C@J'kcGjMޏC{@Ah6&1vlN0*żOocrNl&6LLW-nN#;P(wcXCWpd,a+"g /ı9Xݘ򎩟(H[lL$S/bX**hC˘d/ ,d"FcNG--թѠnB罙CJ<$OCen}3#I@x(~C/YK=ӷ:e)4V4UV2>ƾ3Ș ܞeL]V0s[$=S@i8c겋컿|Qc9?zAs[|)tU3̘*u`؛PʓЊlvV`+[}_TK/al@krȫ.rQd`,`BX2<_iTp{/? EKEQRB~P4^(rKx6o7͋0V`f̴,6cz1 ^FhI%%'B Bխ'E4xOx6]KѺ 9c/1Bo7s:ǜh#M[ćﱜbl@J i>n.bc_~Gef22vHH+CU0V2̘kc$mve$Ֆc"/VnWܖ}V\[P2Fq[P}-36J ǘyXrPFCe50|,;!Vxl{}ޣC31z vs֔_G}~EecԋXl3mōᰫ`{ tX^d킶/wl6 u&IH< ccr?vu!u~Ećwu!!)/AWCijޏ\ɼ{Ęd|r.&=o Pt~'Gӹ|ut$̵sxⅤ"{Vp41%2>S9O1:WczϷl6B6cmEgLhjv YLXA%f;5alQŘbȽR)f{i}WSX&>dm&% }0]͜# oՅdgk(OBTVu?ƪ?i3=c*8dV0v&53;f3?Bc061|O„B?fC京TW乞6c -.ҙ=3ƞFǣR<3;K6cAc<ҭ9xh1Cc B1>`̾K0EXxryyѰ>T:wU驆1FfX c=6c[>~FFe7;dW2̯«1#Ƣ҂f-;1o_K}e )cM%I8\`K_<%zƱ n%Ƀ&H-XH(&}3:qcghg a$[@뺻b|֥ҾK/[&&u`bl]$3cٿ<p.eel\+`LXFS$[ FL\(&U06<>rqaayu~͕ML܂\[֥J?ܿ |g̘Rhy cg/RI6D;qvM>4]@f\[% ov5=ְe7Yq s cn֥P˵ʺTbVS&Ng^X:c'ƥ%Ro;qvM>4]` ϠTH$|̜r)Z>!=^jmhҀSvq.n]ϛ n9h^}A C"6#֮;ٻ2`fÛ"b⥬KT~=ͥͥ*f{H,?*UmkwmUgîx'5댆 ˋ:%Xfcp1%L6.@j-ՅZ)TWj8ar1%<4-x1n|[Mjq8V@nˊPQmO j;j;j;ZKƦKf;&cbR&LLRs5q31l*KXcTmu0?+RrMcr>ޖ1Π4gROXtxSLLIDcJ]-A]*Rٝ\WJ]Ս> r|̋9<(I=9EebDž&c&u/Or]*\fnY9|4Qӆ%gP3.tx3c2<:<*LԥOKr. B93&cztAiqxyzσ31eq=*\nԥM5pKHy]*8b,&JcZ19s/~2(=S{Ls5qEdbG'؁XE}tM ØTwi5st!upfL∱>(iKpO7eP{IXN9WW"{tR/y\- J+{IzlKc Ri_*b (w ]-{keץ%|-׊RAT]+6B]m7L'$7B{.c˫K5?lz]*T y4Bo9q6Ĭ~?G1T>~5wRwTy*c+ {ؐi%ͧ+bLJUjǘ{ dUi]+Xc!c/x-C_r#1c^8c_VcJtY:f,vE-2tiDp1?c=ZŋX)18nt9ptj1d w9|rRlڑͿhK)~ =JAcG &AƋvXUDZPZS ;ac{<:ch#"r\47mW>xCE11Ud?Įԟzdsci׊e6cW!:!G).@Fc, c2ĖMVLGɓlLkw2nfMu44^6k\&0-r/1G6ɘc,c2DYygpZ1͆rw3o2cn=Ƙ1?&5ԴhH@eb,*[䖢k@Kfccy) ʊHSgpZ1͆ry71k7cV_xss|[ ơ-6xGGZ2d{?<6`_Xd &--O&OZ1)Y793<ƆLl޿;/Fa*9/scL(1+`Ay|cy)isIs6;1f8h^ R^TcKM RLCyVJ %OZ12Y793ѼcZ{I+s02[7S#6;6<"5 cY~5J|OlL&qr7dƬݲ ^U|(('YMB͚͑U|~Mj2L>cȃL| ʧK=*YA8 ؚ-)67Є^A'aK/>iYI ƌ2I n퉠k"pQa q0D=%y?F3&M`D ΩG¡>dT?ז<家MC+f4\aH,vK\;UL] Nzr:%n sps8K)sgIa`}ܡIԖތ/4^ }iZAJ TƂ緥i[6@0JmӴa-l/ 1dORcT;&;EH(}4 cY{ybg$,$>c`~Yg\eglTƱĂwq@xtOC?XVX{+i1EןZ1khu#||/2 !ViR⡩.1_13yU|2֘)2y*蹩ԍ2Qd7L13yU|1I $iiNIxǪ|hr$'jʄL^ zn?lrZ&v{LZkgpU8\INԔ DirLF@}EؔcUmSyǘ*heQMJz>XgtJ-4e*AcRQ+ ̢Aե[i*-upd=rRoeꍔU IN{m(cmkF>RwYS$u@ץXRhB-3 4XKlKDXBVA|")K5r.Ě20Y3PV`ElBZ:}ثO&l2zt.~qbM֌'l9. Vw t>Jͻ'WE AYX:$N_K]l.r!D>ݙ;(b7u c,rq8NBI:z}]T]G2^eRFı{?83.UyJ2WR`L2ғ8O?zO@|R\[,kZtiuѺ'ƌa%H*pO}~MTnqKuln q.̻5/KcPVe"]Й6G0c>2'2>MCl#^կv0,T]+b AYX:$N_BS3#˜;Xn0vvp>Goi<+S]k^W0XjȘxC_-rxD#Y/̍ߣˆn z([10<+gLm0c:#585p7F &u` \zneqjPjzdLtI!0&j/v0A맼I}4 +kƌ.)b.#gGˠfIl&e 3^۷aSm+H JwPM0cW]&MA:܇\W)clЫriZڻjzdn? 7>hM,77_uZ[MVxss{gLwPMX޷_iǜ-1iw!Ox U]l>ZZnoih0.cKEq3RixKjwg[٩r{Sq꛱q3* ´Uc3(q`,>2p\*Hq\:g\܌kcG=.հe;S6.4Rz3vv܌kcKTm}fM"RI+71${\ԳTmsr|t^>x2j@ ٜ[YDžq~A^^bkwNM=8 ,!"0ܴz &h@M0mI")2*\5$L躟cN+BoR]G>\uJAVK r64s&3!kfG{^j5h!Sܡcu7alzHxO{B[bŵE'MЫh?^BD+0yBU`LG Sz2FSr"cLrUcNz/YgsӧrM܏G7}72p~/T ! ȘAmI"33#;|`&Ƅ0V1"ِ]BY'Mhc̿CH4vp,i !+eLMocrūƎ!=5vƍ!,Go"Wcȧ߆IҸuʹY0D`")nLQ3 `&d <(cfIO1Tt~i ;IW!7QD3P ̓ UF8,aYUgE{s7lmcd>NA>T 4)ORBlu,F3B ~n/jB4fp7ځY&% R۸nc iashnc 3Џ7Aػ SzXrց1|"cLrUcXj_:cӦ1$h\l6fCL L6tZ:i`&E X`:a"I=cd3q'*B*GC{݇J`z,ǤMЪ1ݯ1599eHD+r"cLrUcXכ!Kg!c'塿Aq7Y` *2gBJ}CCh3`f&N',NOa` `>&N»o{6Q\j{en:GFӍs:CHhy?.?EMPEUޜ?'J4,^5fAy~t[ovč{IOG.>|ǐޫ̀1k5&iT?`Ջ͸U`w@ %|!y»T%Ac+SFgLVU7c!gj@qKC)(%`bʞBNbk?D d2Ҙiјiјiј-mqj5h>јiiLhLhƴh4Ecc4Ec4FcZ4Fc4Ec4FcZ4Fc4Ec4FcZ4Fc4Ec4FcZ4Fc4Ec4FcZ4Fc4Ec4FcZ4Fc4Ec4FcZ4Fc4Ec4FcZ4Fc4Ec4&l,1 Z.4v\ƺ ەc80Yi\Iv;iVfxdZTAT3+'1)v4@-h Т1@-h Т1@-sL+h14s 9CcΡ1Иsh Т1@-h Т1@-h Т1@`׌NNFr.XQyl^Ս ZWyc$Ije(JF^E7u:Iө1^:.x`scقoor{ok 8u2z~έJlzEz߼ ìέ(uf}̛EܘJI:۫[9 NY0+wd֘Wtl,_EnwoG;.^C hƴhhL8}k,\8w5f glcHc: 31{ƞӷk8X߯|ܚ>䍽\X~n},|hL?{g6a5vCNf.| !'Vcۅ؉]DiĐ:%P|]idQu$Wj~:yL籟1IݚӾh9`AU㦝]\&p,;T7nCjw ŋvGau,8Y;k]:ܴF|8/vR<&;ǢyseVnsP8-c^\Ui +0WʖOWrܔZ6rlE"- DŽ ) 1tfjY'ִ%9nYB?:Za =v m1<%x.iPz±&+p,\3>Xc1y[h18Ǣv\jsl};ۘhDž리ez}daXk8[}M%s8;?c)LuMK:YaYAHmuUWUz;af~~_8,08.28,08.28,08.28,p,Z1x cX ێvWp,tRc[JŞ@czq^cy- bO0܂Xxp,t&{S+Rp,s-HUp΄c=?;WUo)M8{fZ+ʂN!,xXܹVkJ4B†Ji±ر,՘H\6َQAG+τcSJtbAeoh +Ɵ(;QAGGcTJs^fEzػg@`4}rlTQ|, &sJi~3 {|өTc"$y86^R_ lyx^1j"ȾʱoDł{CPǔɽ= v09qkEf1vaσY`p]dpY`p]dX+2 vL阀cq8,v̴[ !5 8cǺ'B'pp*1ujwtRh<5LãUc0vjMRh[U*1uLwtRߘwc]y11M1&Ur*~L\v(艿)i1Y{?fv.{2؎A :p,O/i*w/D 9FUL{8"c6}͉zt?ҿ{RŘ ]嘒vɱrBcWV[H,.XV\ZGm܏akEykEIsݙ0{W]﷍DZz/wtfߏ~AW<7c» ܏q޽\'d1s/3p,Dܽ{N4{ʟb_~?{߆c yEG\3c"cc"cc"cc"cc"cc"cC`vN0P']d 's|0$׊K=7f#qg>Xecѹ2c[}$08;<юcw>mQh)M)1' |0:T'>]m Ȓ0‡(Tc%vzjYk8RZocFބ'8UYǞ6Od3 cpl{uN51M=\Zlص *AQvD(džɡPhЎ8\-&̪cB9Fs,'xps"g\`>DLαbWUq:5ZM={m"t Z8/vmǂ}up,r>c)[WJntb+%3!Ǟd:<}$tUnxBqv;&NdîXOpб\G;k8F [Jqb>}5ZME+ǾϭGsfibq>co±dֱXcn&ӵiNv<"ʺIf䣸Dmx51hN6,Xm1'XwэMXj#\!'ԉJ52O#w89H$[AWU΢D|N6  Tm$JYUAq%BIjiY7iV$ywU/c>>Gz`10-p&bsD:]Luf$s?>}*.c>pfGX`قJ޳?Acaw1M%$5߱K]Ӭmz>sav }oHmM9v z 4_(Q3 cp̬+p ퟯ:8Ǿ*p 1186(ǞgHYJ6Z\zz9[KsDulcYۣk1ulugcv˗&dKS{-7lec^YۛXI:{wǺyñsϚ7^NNsaqcS10 ,p 10 ,p 1rm ر% "coaCL{C1B\oswdZu B #XcVg,Ʈ11+Uٗ9ݦeX;e \ ='7N=*R͎t6}K13_\~Y8N۸9]%JDz5>L_89ޱI㒺'ƂVc8f^6we]{f'Xٲe,*㑤D(رTɉwL+|_/p b%'"8gΡæ`a<HO?ǂSwsn~,}5>_p CǤ;`D c*gd/AGШcv\v}9qYE)KB#GsE1{[> ݒ dЛzZu̩lVrK&10;UzvE w11۶۵.ql==PO)d|{13wߏq?Wl o爼1n 8Yfc`8YfcE:=$@@z*IENDB`awf-extended-4.1.0/images/gtk4.png000066400000000000000000001341021517644610000167200ustar00rootroot00000000000000PNG  IHDRcZPLTEGpL¶ȹΫ索iL?wڼ̿˿ocXͿݐpa؛dL[Hɾ¶_J\H–bKȌ]IyiaKŵ~^I]E;՘fP\Kíxeyfij[JZHΠgMﲒF71mPgP˼cLeMcLn`]Izf]KʻĹ!!!Ǽ-,+IGEeOɺ110Şy988tcA?>˾ûXWU{h('&aMӘ~QOMüyvsaQL<5a_]ŸrpmligΒx}{x}WEj[{t`ቆۮkUfdbКrSDhUÿk`ŁbU5LZkPDw^Q(L8hנLun,YlYNsȷumR)Ոc*ֈGRsov930ϻfQ AZqɜ|kR9`nɯj0i9)ح.}^pq!b?Юl뉽됓z[I2 qtRNS@fIDATxmlSWGPsI2MijfϪLU! ² Mv -P эV1 2NLIXhm$Cב 1"*!th?KVUՎy7p;%:?ߜ?y΋ M~#)L6rrHd,dfVʜ[ѰI@6M&ftږI5nIb#';֙ӨTML-Ngr_$n4{:C"5$ƈ ".":ω@* b!]Ch(U/I(I{υn2X OizLȤ8FN{l+2}$"jk$`}5X#'!Ȭ0Xx,4=dbVW1wl$! I5\5aPxVH5 BI{hj[R6P͓ixzȆ#Ɩtɂ}pA;J*c gNmLؽϸ/44~Q?EGh8ܜA%D'V xsiB+ #0FJ:HTYK8`H`zIש|z2Bt 1 ΂<f!`1΋/^zN;'+K1Q 9P+2ns7D1@͐r:5%%|"z,6H( ̑suvkz6RG b=HdF{>ci@Kl H hQ0(R=B<sǶ".b]zxVNVQ!.IqlV l^h-n[% շ M pk礧)zYZ(skDYLWHm|LFW#{DzfLp8^ҁ5بEI+h#45cWDD&E0=$ M8r^zz ydp%huu zק tGEg}Ǥ@`6i]hPd6<XnO7ZZ7zey@y=vy & =8Q;8\:L DA>k&D&"ెdaJd$Nc iؒGr,錤J̻a[,{j d|p09-p i{q3sOX '43-6\sΤ.^bKK2sE29 *.Y D u Hva9ZFD>WL)z‰D%O.5IgU!1Ca;$:Ɯ:."N=돹r|HNx[1w3 ΕZxU@D@XMВ-ɺݐL=z;@b ns<|ýSĞIV㑑ţgnMdpO~Q!98 2? Rs`(tp~T썃`=:N  ȀqL4rq89i\g11')Zڟ Or8b STǖq8b=c9N1=v")e-]Zkh]BQäPQollf~l1zeêuGP*2mMZk01VVGtt.͒L1ml-H0-ۂfaUp ?/S}=V]YMjs͚NZJԁ͵$Jz9w$6 UB_SL?@وH훪t%FHl),[*IȣS~In㧂]a[I~tRʽHpl*0:G/<9HtՔУ*u/,Ԕn9t?w!^R!!i%0 a=ַ\swwEOvR@X˪1fA:] @$؈$oA/$ZPA_C= Z>[~ /etk?Gul%2OGAzUH#'=iWP\Ni-ps7"+4:{2T'*\S4:N]4ޚ#PBG論,e?16U%,qï/=<Ǽz&peWvҟc1NJjV5qџi8aDi*=kitT?>yhJfYn'I*Z$iYvO3ֲ>WIۥtp3tZK{ {KKmjiQ Op)<åj(P#PZ*jҊwd8  %0;ʂ$,hyxD(>-w'fGw"25@bjHcxȮwl mQ(D*z6 <}HAPT"yLGm?m8]Zڮt d9٩8xR٤,-ކ&IӜT{Ghc{Yez+m[=`@K=+X:rOKoޏg}3KWI%{:8ǖf9rr)`<{li=ʴFukIKM\Z[;)cΡɃ”eABMdPay[8c=ܶhp8#c{c+8N1=<*9=Q,ZQ *wZ'8N1= S 0p X~V Q\Or8? ۏWe=۟r)t7'^]*=^%%ciZk2rJ;¤V߲{^)%>ҫ#wq`9xꩽZr'^Q( ad9-դܴ֚~`X(fJoQm:,>#dU0[S(rr.%r.W931'1 .$ _8?Ic5I{ iFLA";wÊE:eUu0 b?1000NKTu6 њ^0[S.yaÌfZ׏Do7w}.z#O9\-r)mL 7\TC;㺛4F}Fa;44ArÛb1; yjx86r%z>yT=_JwϘ` yh:65:T;tu/gտ}yzmł$F;dxY=SOwR`96KmrTccki S!T,q,}MUZׯ7l͈[Q}V"|*`3gICrm[UFY_p)<oN adqc3*d[RI[x"65^ۆ&p,}MU{Ƕm#יn@LF=VU+@R,.Rn(*;Xl2gc' Lc!n;cw~ќwB^O|HX9mzl *=V114䉪_kIDwVjlL.r[d'X۲e:ݒdž|W}+:%sm~9>V癘e,}W=E0|F tkb EcW~5c+u[l1FQɥKױKdۣ/P^n5?|u|z6|ܿS)4ޓsFѠߎ⍮U*|S@`@= hg\jp B˪AW>0r95[9 "?߿=,??Cv;!Kn֒'Ox=_Z(fyǀ˔kŨccxm, ؅L[ l cߍ[}7@3?6g<<~{Cnu\f?)"ZwgK[\':k-_~80o-> CrpJEW_2k=St=է`.4 _%(v[ 1}6+G ABgQHnQ&߶'Xnoۓ[T9uMB,Шϖ* rlaa%VM:}?>.r-?A¡ cMA5Q8Q5>l\1hq,ZZ Rȇd9Y] |ߋ&V_}\3u=XUHXؽa}5>;EN9%fX,'T( ΁$"&;Wضz9ǎˋ,Ùa})WuLb#X\qL4ޑ$"(/;(QAWUajX=y <@̀9c& %B+ oTPʻd$QLWc̖ޚ#Yc}DeesnjŷL1̸L*KX1uV+{eOCr :(@R._"S|&@,(Ӡ V,:&vAZD2ZZS%J$OVQXH9yDz!9ڝ#zbPc!4}S>iSWQ;F6(^2T%o !H+P=ZHhg!'p1h)S1`yKbwJknkK1jXge %؍Z noo'GxJ+לo 1IŤ~w18qe|LnIr, 2M"a\Nmʀc{;/ޮcMic ;K*3pƘqJ%X;$PGpDqnիݝ/Gq Rt*~`%h>xNpq='=mws]cx:w>zesڽYk33/L'^<w?D33,$-=%[OoCg Ѷ-UliՖd I.i?lw7 pHmNOo]-M(9&+TSrc_CJ;,`_Ɗ]}%ÓRӗ?L|>7龚Ы7olv^^~L,s(rV`8~Hd h7nߞ {zx=L l/N>yۚPbqUDɉSLY/b ˥a$3,}703iއX,f}DWb~-UKVk&x 卌rs{/*g4xMe&bܜ8_Vre4X^ϒGȹXwq7#(ojdz{禦,n&O>10Vd~]ṅ,wǡ8f!_/4~:v ]Q [r?y4Pj:@#AG~є jf['I H0f ##ϐ<[cSqL #HF1P:fxƴB*>hWj?Oi4bHWA15O8xA Aq98]mcXc$?>s7҂[׮#1ψd+ }re~K |sZ(KpN&4b˞b:$йѯzGG} ` =q0MYDTY*5wW Wƣk/Vw#v={VUqLaUa@D;RCM_UՙBfXUKIP؊aBj pp"v†q\&BG6[ k|3P,A29.@ޱ/!bREáq:^Z(0הw_U\5}$jJ]**KKkjV|1@IX,^K*\ V;ްTcmO5q сEUǠxVFBM@d]˺Q'.w,{}M*d> C#<,C+   GuPPE@nB&ZEt LaqʅQ*7;a@hQLRQH*5()D9u,}q$kT<sR.̀Y_;g!Pȯ!(fC[V:X%jܱG)&w켎R C;IL UUQ(t1dloټ.ՈK1t vNg7$!T' 6PFAyэi%Z1]iv*IX4G1 K%e%Z\_b ŖT ĠL' Ǯc[CW>ܒ'"bm 5:*+8Vk z**zSu59bW9Cy#^ϘS:Nx2lX"r=c% hEc" ǀs.o#w`Kn]˱d,J`),W`>]Zi mem{wlA#|Y(8>=q,ɷ}2߶'e<*X֏|~YIXcأ;$~&;-33-w5$ ]p~8p3Kgt^"9ǥc#'cy _ol4 d^ipLl7NJ-yċaNd[eQ1LvbIN,uGʥ ƱD(c>,_R/L~$݃xy,ocх (|yFZbOKplxMN1u.aVKI=[+݃H:5dKƉ gEY.}0K| t]~^0Sش/S ?wL)!C.udց; ؂c zAzIBR{=f{z-N8 =7RkHT˞bGt@D1v,>Wt!% 3z=zg;x<,?9z;5z; $a.ɼ r3LYfWpLJ(e~]p,Ò{򘏽w/p $0|_Ѥŗ lcgnM&xgUpUTj2^owJc2A/>nA6vAzIBrAE)Kg7x>J1}Pce]]):F\`7GTc]┐jklG,[:7uPNp$ 1v AH8$@"/m A7$!jzHH==}fgzwkgwg_s\~4q% X3 a˖/Ǿ6(9~E/eRE:: T"ǚM}ڥu Vd瘓an lǜJ*ui}ߒ;ߋ', sUnaE9cj83o>mu Ǿ3*qj,jzM^ #hA`B Ԡ?^/ s@l~_Yds8gH╹bbs.*u%Kd`n?`'dģgc^m8XƊdf8d1rl$XLȢo/5Ec*a +QAЧ ^׷t+ %A9L+M:rfrCd [sK^kZZ ቾ/fǺpk\$9rY!ITO%h^9v4Uc~ Y4A| %:]&QX d% .+5`shnjvB,W=8m 8Qe(!Ni]jwz{=FΒĒN^eȓc'RP96cEB8qȦ'RHqߧ#D?=XKCU:}_*)F 61e}gT=l6ghZE+muQE%m! SVtL- ȱ 8V (vj.=Qǔű!S9ǎO"ǀxIc Ѧ1yπ[h _usq (@qqM%t*~*Wy$+2cp]]W1i{+QYYZ[g𺮥?:_Ljdu8> *.4q& I_lC5 5bzP!ׇxk8It ڭHc"uLuŪ( /n_fH Cd%lF$3j؎+ #RNF:9痢Z[9+Phx *MTr2 cfLƺ"ttyHX~cP !I1J@D(?X\˹wv{L6 V,LX*y]|:ac? :zc;B1yX ,T'],IT!`.M3,`0Y8Ubpl`975rv#C]>QN,a(LX_mcOԂ0;oc?OWَU}D69H\O6DfS=:/yrVMvcmh؎!h(D;y.gmL6ұ_md_yoRިvc%Gˉ+SY$74IF3$r-g:0Wd[ =_e̠feN]o'oP))`I_HH)pZ18ݱϔ9v`k,A9eO̽{J:$څG8%I1+6WWFq|>H_FW:?|CՆV;LƱO;'n{8^-/f܃r͝H0]xf1!+yŒԐs2XS Z };1}.bz_ݗA~]#5ȱV%ZKlCsqNǹ[:>y2:1RS1ciA&BN9e5Xeۄ:j:) Awuc[ȱ[cGpT$.1 Rala(Hf*a8f)$яi2o)t[c [/K ˝ FzIRLFc]B? ]]o(ţбjRQ%;ҕD<:@1a؜RMu,a`X"DF!:zGc;6ݓNgє5*m([۱L昋e>#vga8v;JUC0McY+bۧPGR4 rHH!U_9'6X'qL,Pu40m&HڭX޾すv}nCڎ|Nn1̒2B)9DzX1(0N2s`Q]c-8p\ v̨& ˱q=rsLse4-]29*/ z l(%A&GGG\KHT+,c?URuEpA]Q_.U(wdm X'~رw$wL׮\FW56aDŽ C0!D*ؿdPEeIʹ\A9R^c}suLs@sQufWɱfq hjhp\r:ϢIꘪ q) x]\Y,еyzākR}i{`$:)=:lbb\َn ``J2t <0$tdlv9 s a_q')$ ~Sy?ͪRypZo KUKUy8vcd{h}q7)xfh:-`,~o' َ->ȱell pvC:ֺEE{0aԻL\ Er?@W[`Ć t< P砼c>BescnafFpIZ5 & ؕUو$5:B]ck>d1^,83J$]6wF {B 05C|kN96eNBSu81m*T_"ljġ/@ä3:%ў3JOYh33Q9c==h lM=="N"ɪ5)v2/Ǟtםs|~'26wߵ5}m0 *t_ccc:AL2鮅\ _ x_f^.8\f{v;r n vQt2B1hFK-pcn!YYIA0 O{{uo,φI3Rlc>C%`P^Zr/<_ұO~LȱO]iOׅ.ݽ3+ؗI5ͱ\R_xo h9PPshv5|~ \8vB RA${7$1YsIG,X- 1FZ;Ց55LFFF6ӱG2=}=s]^\W &|\HwI8v| :ܿ,nRǪH>&n$@6DbiR)Kwo5XH:,6TBvcSS<Fq\=vmcveX90PHEò)%Hu@9۱;fS#o]ǤS kأF*Gd{?8wo{?eͦ>^BZ~4BNBbUQy>dN3#]Nsl-?.j1AO Aף{Т`ƾȷyxn%[nMǠǘXSU'Sa^D`VPdc%0]RtdGEӗd9`OKmF_*:cԖٳKG)g@Z)"Br-q_Ƒܺ6⻎O0?[c\Vc%8yJ$Sʦ<;J)s 8Y+]QLޱ,0mC)Inc(9녞# l} ~SXcq'11r䀯d7X c9% ^@gl۾v{?[1!_876ܲ~c~ܮcw`Ya]K͹k36v-8:O:G~7ߘӯyQvv͒ZԞu,y[$8FX'86t?~;56< sq 9VXcQsxԠD''C~Y媝i}v4Ş|vX1G''^.N-ꔠn]xhu[';p0纪?xu;jis?s5~+v,y(2!fb^XD~=f0+3vj?yJInNJh4~xWY< =cxo:cPpUQvt,ϹO QcD8[PZU6#1qlc'X,wu*IՉIל"mcy΍m5r H2Rex?F}4 Nڔж1P:0SCQSX@Z̕&>׺ kH}jT,^{o8sr#aF_g:jϙuP,.!+!dje|ȱ;>m=ٞV1oBnj9619SN1KWb4$~^{\!`>An%860Lrq,CWDs%WnaxpIlآv,bL>G+[^o#XSKFR'Rbf}<\Kk h"cM\IFR'( `"qL|^]>}6*&2QŨc^vbLթrSl&}:O R>({N5d|9x8^ua(2&QEꈴhyi~m}H_q!wңv{LI996MAj|4tBw"v]ǘG1"=FW8vs8ؿ0HT5cEnY[MV+hQ=_F[l"T?|/sv;c_y(66xr402طשz8=fH G+muQE%mY  R1plFʪ/eXLKRyc#IǪ8q&$~[c}pT9+1x b6K嚋գguFKRBX`^O@e%ZCe E{&-6GD4h\`'%<(Kޯ|Wsngl^D1/ (T&& $Uު-JehQ|ԅp6'Fcxɠ`p(ėPܵʪuϟ2}:9IO;e~55Z4McWtG+Œ{ rͯf3/qtN _}zMcf hRGMݟ *٘ z y#_ DZ8w,'JC9!-i-~f]k-#}tV73RZW-rlj2CTrvl9jrcfAAM%'$liP(6:&$GN S7VQ\^kSl M¢9FN{,ky A y Nu4g %M4:%"5ǘꆦ-es`ܬ6Æ 6ZCYS zfLd(+lcfdn;tM9&j3yF)xt22hX [&j9&I:v1?iUF$pX a04c+Вul%űb9ɹd8(/y] 5 h(89&ظ)YǶ1o p#% (;GzO\GrOT%-yWm_NV?xexŎ:eG^c҉cؖX i) ."_a+ǢZ9bԪjS?$9)ȀSz".fl1 1Bu \sFع߶x,{0qٖK ve>\Y)Ho&#R}=q=c݊7'ҀcEݭN1OYve>1$V?>gDvSV&ܧ,h~9v6|T{؄7;Kc$~cP?s::V>>(gyѷ; ̩cQ.Qjcϱo=Hcr,vlmNϚ&86Z>ƺ4$9/ g۝;Y8y4/H)Hg :CAa6=Ioⶖkߵ8R98UWfX/2C! O ?` Sg(`seOD;,mcs w~K=ҁWKPct.Gc.Mxc jJ)zNXI ĭPZ2`f-ay%yܿO˗cb᳐ɅH+)w/ݎMZOp,=f:>wϞ=\VOz?tӾ'T/~Ǟ_er c$:V\"ExV3|ccqbWbpGpL9ٜbנcAPנYazvm>}M[01&"Vܹe7b E46%di'1P(e]1u9x-YT(KѱjsBEtRF t c;w9&2L76Xꎩeω2cE@Ȇj A۬c駂X1n(ۦ.q+v"cZj:m@B61oKYLj99խ8y_Xyl4;Ա;[p >2vJ}OV:؊c~wlWWcڙ rr`[ql*;nt"[v<<wYsкJ1An [<Vw۝r1lݱɉ:=~煫_ ٱz '4I^@8zoۦ-\F]| &aǖaF}Lal9s ۊc11P,q0{wl> 2sL(.!{Eժ8Vtתe~[MO#8x7=_Bc DZ 8YmwN8[ \Okc~Ps>4YR1@N)D@1q󟫠yV"ca>V!V["j^|O2VDnC3:9N顦c1t 'dcn*)J[ cM ޹6?LXE/beżAzAm5h/)gb!;v}e]p,$ǦG-ɱ/++ ٗsnտbw:+zi㛟ʝl.mk/Xc|VɱR B2X03Gs[['8zWb^qju?~f"hyInk`\Yyh/hDpl8znS|z6=O]·Y'9/A]vmdǾ/ꫯ*e{;eƱ"?F#b} cEGǦu"%1'_ 'R7&CuY./oPňU}aR$U u ˔cb̡esyPʳ =yĜEtqG1kNTَ':LK)&SNŐu,Tcϥr4-{H9w7/wӹSj a`xh%9FP{FG{J)r瞝Tx=p(ѣG\)H;uȧPz ab:\2MO|u| Ax8O 4Qy]or7ymtsV"~>FH_|F rV; ÷N8sHj-]xRR~Rp 0DsPx`<Ru칄rHoM0_7 >Ή<$v,Tc3G:?*{[ct|J?FƐulvlF-1TrH/r1dVMձEf͙#^>?6Vʝ]юe*O̙TNjFpL9"beIܩTzȱ3b8&R9"8=eHU4cgplU|s,vc|-@*IT$_VL ΉCzu[Isw(e4NM)&c~KCX)Y$,]J4~5qL\Z9bԪe~c"쳎q֪eP"mby wDV/>bk33=iMocvjWʊJZ $TbʀPV~eVtJ#ǾHMkǍv+BM*~!$xsS;F@Rɓ:FI\R2QGS\(&+|ɟ sDn[AP3ߧ1M5xp~x/(% cZ Y'/EybI9HMkFq.My d~|iP·22xD8< "Wﶾf>|Ch*-|ZאyW > .hn+]Η zEQD9fCi7@PSB?'wcfPa18aӰfޗw:/{}#9F7h[ >=MkF. TWD30TS|,Qg#Q4f[v"p)3s^'q+:v8f/Rs_R e :ݶqLd2@wsqONn5l֬9?{]/$|zȄXPbƭ.E);V㤈=;3yq Ƀg|cHvVkJ.;(4ۚ61DCC6]'9~89@5? .*]/ GsJ=omg:?BNcw: #Uá}k@62IV3 Hc'#F"zgRTN2Yp a0|[}<` VcN`by]9~Tr8NS.hIa$jc1M^͕n,9<(!Z/`ylPDwPx`^1[ZK19Nx aݞIa$ŅTXԱ=cޘAer`Jd$ 2뼽O۷̤!1LQ P6Īc͈L!ii'lFFDKdDcp ? S'ߎoev"`MmZ512 nuT% ;-,VL ?B$1%2~6nǒX]Ǽ`%c$cc@?&!1A N8fb?&?BZrBjX_"=kݱXDA:\츟dw ,Ú r&v1s5&T@278rψXF&x&;e$P;usژp3:!cdw, !~!ҒG(*٫L8ODZ?X Fau)I#4TQ-H%9`0~-߱CzZ}Ob?&1,dž֎c1yM0ϱߞS&555McquLz}v %%33 \r3>4Z_>Y?F;+-Ccp,#' ݱo^| ߞ+w[*RLN^G{?N< %iJ8,r70aw9c#hܭc8ֱ91]xwNM9?Gø~-& ߊDmñ]+E=c!83qL7w^VEQ 1qcũYU{VYRvJRdqzfK1Fֱ.R9\XDıť/pqb1]{۱2:a^"B񩰰7CvFSOyqv[ػays"pzј716WvgϯfD+"k ""{qť/TWE˓˓}WȱcMe#ԼԟMloڷssk6܄  ʹ֋NWݢ[L\XY9F blEdžcK t47`BWW!+ZA =Hvh)yp ]lW,۝S](hx4Fy2XoC9&zq &c\6[5BOuC5تc Ȅ3hzL1 &mCL˳ =¸YYխ>c H W19@L\bvhk6Q&~FSB /bn,ĴPy삹|uӱ]2Ε"\zFo4x5ln~dk]dcyHt H`slZ5昄ܔ_&2أ>5]\W cz#@cWB[.1f`z^Qx~S#lӱaʹb9m`Q+ZG;e)EڱvLb ?6$7"3^쮵¦|˙>b[+UVvӫ׎QiӪh" ol(H ,v؄riEU7STc:CPҔRn5cY1Ҹ71Z!B2džtZpƞZ8j(tZc{:FceJȥ`ƎjԪnKdž܎h{B{c-DyU)A0f.tT{^ Î%kk (gqlyxSq _ Oښ9jm&:fiïNh$3?vTGSC!Ǧ:UP ܿ?)WJcǠ÷cьc4(;永L6~DE 9> f)ߖq)AeGϘLZ,,۴CpN18k0Mv;v6"A;20yVR-XeBI d"šcM4u32$[LJfD{3=[ڒHRZ9 u/uwuL-G*6|+]̽m@#EbqTXOɋ9^OO3;0j4i?np,p_u~~4PR"}K4i?1P,Ս2H9؇_/db1s٫i vFh1߱lb ͊F`fH(9Jٻ{wtHm@k,d(4%60קH 6LG!E(6cFJq=\t A Hk@h^J"CIbR*-@ukj*sioGZqE $3tʹN_ݒe1Au?l{ /ܾuk%? g0H1$&3:ŰddN84*ZsmduW/Jw@i?"7n, 屍< KDv!xFi ى,he=(\*C[~grY@V4S^lğϴr#}ܸ`қ`jr]?Z<ǗLȱmg6l=K OFd]gtnHxlmFG[(X\HE;;Sjі&6b;3Òhi?Mq_,h=>/TtCrlOck%lh c@-?0qy: #h3\уEE, .JQǸ8?XP5jn^x0qzeq8s,V"X{JV+%#mBI0AYBpFD1}^Nƌ"XsLe(%ǥ!_J1B_9f9%EX14k> +D`H)mb3Zl6ssVuDyƟ+ {p,QZ"ԟ}w@řcCsʎ9;bš&.+jb~ 0"L++hDY9F}X#=۱{dJ`3{8'śc޹6q{\vI'r*QHt Y H7D0vqbz'§'$B PlA/<|[o|{<7W4Yfz>T(RۖkNDqL0az,MdWqHM0ԟz MPH?c'd nc]lښ`ضmkJsT/C%&̏!2Â@\-(tnޖ=h~ddM<":׬ Ex+^݆b1h"< naLKXض5紗hf0vc{FzcOh5:Հ`Aƾ&c۠c0/ֹ#.DIߩK/c'v>I1m1I؍XHZO"c@W$ 6)/o"^X3uXiBM#EZkx29G:ET#b1wdG-!L.T ɤX=F=}y!ڻ{14H*`c &5'+8e1qQbɌJ1̜/vÙ9I)@IƾKw|ː0- ֭Hx)lUM%;pV@RHi$4X3=,%R S673SdžЏ )cF1c vMvcVlY0I EJ[./G mϣKΖ8cV`MH ) Ϋ19Qqa؊ſkRCb12d1LV o.D $ BtU Efa6iKp Ζu 7$ p$w\ӿ"#q AbPg#vA&j1 Y˔30slF^Z&'f_\X*!5D11xd Ɉ2v\>clcKWj1z1P%=y~Sf7HOs=#j~Ƽ# *e2ha?v#e3,ߏ17V~@^ %cUtv"vO؄@Ӣ`#$Ȉ딚u0oH0n c j5cڊ%؁Y+OԳU)1&,,*͐qf}E&Y.WӐtV_c4~C#Dh̆ccCh cQ@1K1'Aࠐ+lxq%Kp#i8LSIc3Z)}' 5CŌ:dsXX;2d1+?q9C#-BԳU)&c^[S93GN <Ƭcy *f12@*Zmd6LD (eclX*cem8+XxO3yёO1hj+潒6-JðF2G'Z[Z{ۺ-1[yıXӁjbS~KE`Ȩ@SQƎQn:\lxɘ@GÀ5VulC9;s[cR7#8F06N&:1nf%E;M+G1:rU)&cy{!d b<:cS:2 nc0m:0jёOڋ2+Xɞ!{fd/F0s> =YԂ^ bQƆvVO1:rU)Cgv 0rp0KGLƔgZZ |efE`%Rt.BSƆmP?#h)fСnWlxJq0vgɒX ;2 71kP=`FC/%ӽ=%VT N-94+XHdl}3{fً ae[%PxK ";ɠ'dLc#O` kTl IOB#F0Vg"kbuц^8D bP cw2U1&cKB~\$j'!ac@2k.+cbN@t y[:<*0)=_LZ@E 91h(bEG+cɚ+5BXbP_cwwt22+oc#8@$ Lp:xbdcnRFٮ`˩kgɗ|&EQ2I u] ϜCPGa̸0pԉA## x/n-sAn뻹RϯoùX+ 7_S&^cؓgO-+k2Vc Džb<[Bg;5iV_FKSu.GAv}ԧx!Y\0$9ɃO!c ,k2V7-'w RoP+{[ΈD۞Sw:!<J2v. ,K%n[oD15p{{ˆ3#{B:gs B?ИG;*~?$=]XY1*`S*]1Awעj[(y$&vw`?F1|(x4e1Dg*HLƌ?Ƙw*e)ލˣ~B!3tJIwi Q ʌ[|1*;r5^\}{b$ZaL*hxIäu>p0u,*ϛtl+.9x(j0}rSIfg벀N-8dgKQk\TF1dkcv3.Y[u*|+'ؕoe eױY!1ý7zϲ i$%ȵyQiA M8 C1ES@ȶ݌ 1ƾ?o1^%Z #flEo.d^OrDJK8fO7|XL*ggM8!Xc׀15.Ƥ9#fDfYL^<p{^䚿12qYIyιj &c3fDdF;!3Џ1O|+ <Ș`>\3+Pdl/1VFn'ue&y+쏱`l7vcA0bt+.d8wY$"y>!g ѵc7ү2WxjPߣ2G 7yWA9aQhYZFS=rB5Vܽƨ#VaktUu@K!jk{ni.GXaH#Agj1}*Hބ h*dx&lܰ? dݞ{1yy2L6\z/gTZBusc 0:OhQh-:(˜2s '2ҳS5co^?\Tl܀414#YK{1<"cl=1fZjyݽ'+8ee1C^!Yyj1еM>'1Fv 4ZayvEƒِ1#~d0j2V R ck7+M-DSeĽxݠYDLyGV)cAZ ~p4uӏib 7a'~]i_)rw{^~ |ȰɘHUbPgX7aDz{/ԭ9pb/&gלf<ꏩ0y˔Ah2@,+ m.c/pAy ~e𥱱KZf]߄sq\qAWpg^LV1_ z31c?-ǎ~ՖXS]RÌ2|>1c j5btcky E~X[ M_ttdl26i2`#?v 2elKØ;d1q?$aw̒ͦ1XaLY29XVw,XP ,1! cnwr:@Øv2c3̜m8BbtûlmGOya$*Xf^6 GUMDm{'7yZ7{_RKGXɂ`ku/!]j FRbJqWe1cֲL/ZtdbUz`D0)4޸gy2"7/'z(1/!;c/ M/nZ8uS/1ffZRc~mo>F$!f+=j"݋̤йTx桹1z'h"lx!//F˜V幝_.jchN_( ƈd~L+/c&Ƭe/~?x=#k,߶=j"j0)dN0?e`'F:0?K%FȚ*K+7X?;1?+.U'\i/̉^_b,0}B;ϭ(i1أ&8a- t UZ~,\YLW1' FFKv?e,{4/FvOci }_ƘM!]oy8h {TD&8a-h˝_qoMytM޶޻'g9s9+oK%b*Yʙmxmhc5ᚪ MY90LO1)EyWJT>'v:ը`^*>B1m" p3c_-3v_^ZH[wHq㺌67M,̘DebRsqf\p<+1$cM> -/c0+&B-p=%\mc b ?#k& -<.wN{=8KgL[,[ia]l_XX!(?/P X\I>?6Dso(W?O"WqLg*qfFʘZb)#T7~i_c{aj>M27n$c.j뒤q<*1Ԭ*͌~ hL[`f,ɼ;s_GTt2MƲzPjc߿wo!h?alsmcb 5+Q9+U/'-ј=,2s@znOʷƏ_cVĸrmv:4ڵ\}NxL >͍Ia,jX 3O^ Ҳ38M(N2Y W谷4iEUGL11B1v&vP/"i^Mb;XH Kw%Nӓ;uLӄ aϵtN'ׯz Uumb>iE⁜b"b,9\+o(HY\+1WnN1&`^ ƔU_]Os]iB4AQ<}gq#m)PO+baQGtBIECmkfMK^:J+/=1L17BQ1V"'N8Y1qSLs)̼7[ 1S|,So bO0t|` †M+%Ƥ(A+B,JYV>%#-L( wF񮶜RK+0kmFRF[[P@2ۓo@+%(/oFV[D3b ј̼T@h6G[楊9xmE1UtqV]E=i Trֆi7SZR#8e)F5*LRy6KK1\n&Ƃ:`L:fmc=c[OKKuvt*gNeϞԼT!c>E,z1F]fmc&-D Ø*ӏ?{ƑqŇ6@\~ 脥!![TĻ\$.YB`d 4TD"*JTU{vg!k{Ўw~<3c;Rcl{sv-zBIؔ~h ʌEO!c}3` Y;G1D9cöh_*^%UKEkPdӇ`AFݑEJ3#b]]Ewu c2Pc]ll}iK^sxr=7olў1sV/U=Ԅ~h =՗wo2wjLx݉H$SElnB|ƾs)d{7cZwI7WҐ0FW(l~ UzG3N{U/QWCTW]=_އWCbDZL8O1Ob&B,˿V[gttˆt^CʌUﻤ+Ӑ0FWg)תi\W/U1;7/A~쳯*:vSXGU362Zf2S}9C1 +3Vn${%i(dyK^v)gFf~n}Ǐxƾa,#g"QD,U xǜk1/Ř1wI7Wc4o.+Պ)Lf3f,UɍÍO_+V<= XDǢ2c8k%{Ǥ}9`ףk+^I Yiޒ1yc1)F୘xS{ylucu#p5X *Él횚ou-R 4Z#eGc1[F{ko?FceGc1[F{ko?FceGc1[F{ko?FceGc1[F{tcbjDFP9&&&-ĮcI[1ƘcI[1ƘcI[1ƘcI[1ƘcIUy]K/W1oE䳴^sjwƴ (t.z-ZZDK>9nffs~htGUapVp:“d9Jr-W=ַW0٪."= ܃eL:+e: "XfY1=CFIhW]tm%1#ξQ$M3d2˟䒹݈vq^<,afӋLdaB&(`,H4CfM6 FMD3'尲s1XA)/tњG`I`A5.W4!Q(L=AU5~?I h kZ?éDpy (N cb [4x[1Z$,˘!ѕ3k+%3AWAMT0 /qpH:!w ^˜gl1p0L(*`>+!REF H4C)] jQ(Ɍ IPUx?M쉧4"C),`M$1jWZQѥ5vo+%VTAMT|]+1'~5Dp;$`ɫ`ÍdaKoB0+"y0 ь j%`lLƄp5E*N4 +߬ T1VsCh2BSXе *=bL5(N$99$rKpt ԎB(Xc.AČh;wUUP(Ɍ0uvYs:7c{;[J,O,CM'n-i9k%q,~*cl3ʂFMKKJ/:Z,y1 w܈$3|Ow hf]0Pfy`u;rn7aߩ߬o?i{V_"!>".XFz6Gmzf{:MۥȘ$f =N$*&d}]xύT27N;gʘTK> @ $3I~].ǍLfdnr3NPW??'s*5]y1bu-bcǵ|vN~1f&WfUZ;䢯*?:od{ccVzG߷Kj+_*Y4?VNO[6X*5in+F*uWfUk-eJF3a/18*: A[㠪jZ1씼 ,D.2UJP&[[ogGG6yਪ6 #Y z1w縇ꘐ嘐,|Ḳ04ˎ{9Dyxt,lfA{Ўm恭x18)űmN%q\"cpr}-? 8"Em 8Uű]6}؟w3n9׎˱Ew5,"[αҗOX@41c-3ɪ it:%3m."nH7&I:-|3z1*p,1v1f1v1f1v1f1v혀c21" c;&l&ӕd 1avl\q<&ʃO[  <&&1l/wǜXWͷvkwI88Sjd9* 81+9Vnˆؠ gʱ:!\e{_+vY<˱ڀcsJU⪄1sX!*TcT<3º6nXWd?NJӧ?}L9Fu7cǣylv͵5]5WW{x,  :c]1c:cvyԨx  )ºκ(1yHEǘEǘEǘEǘEǘEͱ_}8Ȗ>dױ8Y;$8Y:ǢDŽS1$o*ҼX EJX`wLj:U*Bߥ8oKIܸ1>. 02Ǧ1˜ܖVl횜%obW dZ|Ƕbsn~/Ü`Dk([9_mbղ~s1~CN~\]JNzNYco=k%]C؂ ސ ;LǼY؎C1M;C1Q1!LJhZye1}s9֫9Z8v^y93L3F۟K/s25md-z✬ Ի!LG7c(cvo y2]}kmoeK mi7M*QJR[&Ncck%ptN ǜomp?q6fvSON]JM ֧y &k%X}4tNm*Tp 188vGǾB%8^czc׬Kl:+fhMkB9]gsߎ7+ |8ȬLsa޿t=s7`Ń̈́3Ɏs*}PN?6#xw*t @/p 1 @/p 1ЋS[+8^49`"c1Oqo]|fg LB08chr\t*:`xP7K|gVj/U96j=^F?KڣS3P :&?yhaȷ[T0a3uj1nqp%/k׎e-/b]cNK"~:ƀaCUq,rR*TK::ș:HQ&ѬzT׿+:k,.Xrit(?<\0r,Sv`=V9S9I {{$ cj0%U1Ҧe[Ω"V9Ivǎ eqCcuUp-ZaRYC1u\ק} $cfn ayD=(MqҪm Űcn;f; U =\"Hc?z얂ZM/Y>ϖպ-]nGav^uq1FQJyŒ:ϟGT9I@<p 8^zc8^c?At/6k3R7IENDB`awf-extended-4.1.0/images/qt5-menu.png000066400000000000000000000757301517644610000175350ustar00rootroot00000000000000PNG  IHDRcZPLTEGpL¶ш\HɹͫŴocXȭҌ]Ižs`aK[HĸeMʏ_Jޓ`K]E;ŵ˿ڢ~ĴąZHiL?bLɿ^Ik[jZmPF71dLƷhYdLοcLɗcLƺȼgK?ķ]Iµ^JǷ̾²ʾr_yij[iZ#""u`obnaǸxfٽNLK/.-yaRVUSzgnY+*)mkhݠ222'&&ua][Ydb`988IGE~{xvygEB@þʻ?>=sroԜ}yԙM<4ɾͳý}VEȻgL⧡nRFս꓌Żþ6NYqZPة޲ɑx8h#O,ZNHwˆdSzke4ejP)7c{\-q6 ԫ|-e%w.׷*&Y2NYzu3Qo87"!۷ٻⶡ\E}NN5]tRNS@f IDATxKI]HvHʐ!8j0A 1EC<| ʙ%^nd@;I#(̋:/E{83:̘; U~궾Twk74P `@P-sY BS{zTbB TZwj |7 ;` nh~CRu*U^]}kp B{{eXSL.G^=34*= "pxP@)貞F,Mf{) EwU5ةEjx,l@=ᱰpbP<XE_EHR 08PhɣBahM_Bir(k<Att68m-1YFvPǸw &z 5<&Swww1(˂C BvR4pIn&gq L@4utf"%E`A hUhP h6(]CbkЅ̃S#wl>%YPuX0U0lgfxLb)c- ֣'?Jk ,(I~D$8Kf"VޝL#`Ti -f%b4uL Ӕ(\}e1հz1)UͼWԸ9UW/2 *C%ұ4}39=q<=cx+d/ fX4Bqxb!<<_N鉓f7M.dB]g5[ChU%$jkei=Wc e}c2d̥(eBb%+*J|{4Bi9y״&h-J`^ьm1"VmP*)Zœܱd!oB!^1TTChFz/rU)uǎd2iQVGm ?ci8F163=%bGFM1fRz̭Ű1'2zԅvV(EHK/aݫ=΢XZ )D7UMY*w[l\\:_'#/z,zu]IU+]m W z#HkDxawaZUxL H[WǢ@ 8> @ 8.~bx3R+ 8|y2SǗ({5oC'.|Ow?Z.>ܙsQc3V}T{>$T}{/|.Gm'cǺvVuׁ#]t}~dVNe}48soQ3D +.]Oau:3Hȵ|Lpō\䋻(D,5ZܹzNV3616<+^c۱e;/n6lH6@(q;Vp@(q;QAZ[ Lyc&_@#?Hl;&ȖTFrS>Ӕe)vi`TܹqOtpd}}dsqc:v2 +37t ދ9DnwOfeAi37͉{m :=wID] QoX8 nZ~<dx8 g 'OZKqb/{pyrvc!럷2Wc@[;F$#];yR{S+<ك5y(Mb"28pp}߶X9yAXp9vAI \\!-&k CvVJ숗cL9ov̱be {%䩤>2^[;Fb~~V36/{pAu3YWCtFQ)y$#aX 0Gc;kr䴧cӡu"cCSqcW|ك,#$Tz8Ȼ+Ƿױ<|t~ңDcvS5 0(74w{(h8XcԲ'%o9U0(vڱ#3wY===GeH>s>`{;XcW~13@{1y`GL-֠)6r؄!nmqDZd0Le>RQШ6Ḏuy2Ycz,0~53@Ǧ.,;fkS ? .P,d8x/tnqYYc ܱ7Iyk!@t.f;69=???MZd@DqQ]`4ʌFģeeAdžHm#_|@rl _vt.jhHڱ=nyПhqp-RnڋɣSbNSظv٩s턝xo$ƱDp,l,Lק@@t9۱i]fW1^Q§c 8 :{cȅ 4:Ǥ6R^E|$wNpžy9r5`QrL"OW0%|/nHώIcK9.e<24‚ ?1c#Wdv1d*J{ f~2~U z 1ubb9V?,ٜIR[{3'>슝0,v 1+N;pL暟^pǨrc ݙr"CnqոETvgNq%c8ƱS[{1ydCm.͊WcI, OIp ۇowYvoUv u-4/>(.]Իch)`0Ydl],H٫tY Irt ˸tLQ5]UHi/&cjjL#2D i;Y>H:&(svac[FZc8.nEc~^1O8n[e5C0N hc~v pDZM.˸)b1 &Dvq=YFS^fXErͱ dlzus\J,8)󒔔8K6ɐVڊvn3 }_ҙ3prD\蹹I=[#U1?;h-X1esݟc5m j49kð6d: }1P0Bܼq8FWJOA:Ɗc5+39\0Zp @m |>j dJPkczZvjƽ705z>F9q9FXcglH=|sr ō $E/E@r9jU]?D|Ih-.Ww%v18N\p79$c |w%^SdS^"HТ ڀmUIxFsm >ynY7h@1d(J\p亰Z  cܩJVuX6-}~!m0oA#džLuYWuEØ8cO\ݹ"U"w (Cv"$ls?'agmp,nEi\DO7[78/UC #LN;1R)J%S+6V6$(  p:S|\1'\osEw{@46 '[1υ<5x ]FS*Q%tsLw|( 5~f2庀'(&NEgSWQ_4+o`OG\Х|R@@V{C{xfI}q65 "Ɣk`JFfxnY7SxA15 |p\ /߁4TcS:3>scDVO5C2! xcB3f.ΐa|:::(y26dD QX-|8r])7s9Hv\TΘw 97XףJhd\Zm`%8odk1v8xiyO40Zy=.Q=j$\?_ 86M#H/T8{a'?0p۷'zc2yٙp-3g T㝇i)ԏeH&؃yn?@k'WG_ԄeL[c1ĘLE^XE'a옴<:2&c- ۨO<X3֐J26 c\uKu٤2ƮBp:XW#qWTcV96Xa{nMTOb(ŷU1TcfJ5,͘Wb}3րqcce2Ng6/UaMr,?:3ۡ\(=bl*,Ҙƶ xozYc2k\lUҗ!6Y 7q&ĠDxCzhrhA\c-{ ۉcb 1iƢf, &hئ߼fֱaE5d@}cJb̺zBւ[''wv&O6>c6j6*-Q 4w 1$Ɩ e ]&c鬙 &7a(A_ښ77ND6*LcPXv^qT'N(10$!]3yW?|Kbد0؆ҡS3cH 3\7o707:DA7<ݓq@1;KK0Q̰WDikaz\cWBo7/ã`H\71VaZg̴44FZZ~xS19VI;N53:,:TSv(/*+jF_aiմK cU]kcm}ƺ$Y7>c;9N!c!2xTf-i+bLreqj'MfŘM1c|SE*kQcb1 ?ݖpO c| O|dzt197Scإqc;j-^:V]0rGϋڱjBi<ܬy~<Xij1q;ge5b#.Uo%.Q}w)(M2BƞC197b k6A|iX;I4\W<-dv.}k^j7W39`0ۢ'ҏyØ/5c}'ǘa?N6cL b!Z1[e ôJq6jq8 '3c 1X1;s-Xg-#Ex܍p23f;fBØV{6*Jظ6c"?c&p.ʦߩ5 IDATq^Xq*\!3^=>?ݔqvl`eU!?FBT.cƥ1.܁zȶ՗C,gy~׭xso [⊂Uc"/?f ޟeǁ kxU4\1wp{b0,}y~3ğ(>vc qk :Ec+!mq` f]]wYaAI%A;c(nBp}nA1l6^Gue{>?LuE^F|Y@Ƃn 6>lxw!b^Sb{u;+dQ}CqD0cל$1޻? ؓHc\Hb[w¤{9J+($H܎!c-X3&Xl+/ ;h5Zigϒ#bL)nXlOؾ{9Q2Ƅֱ6u#cby3h^}|/ AlNHr58&g ect}Xo0Ɠ&cg|B۸8`htC6B}XQ,c-K m@h5jd$[7Q"R$KlMR(ƮK )ǽ^}WoF#˒G~D3ތa>ߛ7_#Tf=b 1.c!zbLeGC~ 1b2fz4-;GˌdzK%Y{kMK/˴!}E)c doz4-1Ɗ7Vc dcN2*ڏ`gb1*c 6،q9MvmcH "j4:Qo29c.*C5ja 7JIY =uL;_^WƯ6ظf팱mъ,CF#3E!8F^4a,P4MMÑ2Z=n2uu3\*1nti#?`fN~,TB ou!Fc7Ҏʹ0<&|kfr(]N2W s0ƞh\+bL\.`c gFXt.fQ]1vf6Fl^$ pD}c?D?ӗkȹ5ɹg~,oc(wiMX6 Mc̺X+m! k,n2f䚪6Zc[kSk_D&LĢx3ꌥD0_ZXRr_H0X^a雖Z80aoBp kG,4Mi0 G3Ǣxgj5+&Q#aob"JޤGcDuߛjXh$sGfb'9$oX, ث6XO'm2Fљp<bR5cnUq"py> $ݞlü",W{0sF=X"= ,nc1jsQĘ^Ȼdl>ܕ3ql1lֱm;f%, CJ5^o+[Q7!?^fUL\^]' m1MKF+J{p<,3k˜NjN3IX4} *Oc=Zw/ݛ9NJ0e, )inKQ6a֎ 鉱i&1*CtXXf c[U,? ݧ+]$E/(Wƫz+Sig\RƌwHb8?MeP1Ǻ cN%Œ/0 LMn92ƌP?&vK< }t%,S?h v<KNTn`+WecEVڍq 7P%$5z,G nIcX4(+ơHgɹs\5cRͭcW9PvcHNtKt߄Y{/6cFj[>"LvxjGPا5(#y.l~ tR-WV 5 ccQLMcIǺ0֙);n 4,ʁSbl87s{Vfexx T=}_(\Q5pE?ք1꫑cs1*͍'"cl<1X;aຣdžb (1MFƌ4|%: cǹ\?1# nD՘u'9ؤ cdGŰU_. [Td!;aݷDW+↟sq^x/"=}3EsGa Fmn$v M{ F\|$?(܏MB@X=KyGi}eXp@䓌xzkh |!{mwvADWfZNv-7ҨBn$u/}b1_4'Ϡx!Dؐ )8ⱇ2(FBٕcjqPW*ANAMxy52S!k`.(h)/GPd0vS΂7䌧p01Dp+Ҹ$-и/0)k:q?Ј`LU(2f20wljIIsGJrrĂ#DA?&9A}em^j>ao mVVo;kmORzUTqz߳B^q!l\hA0` {1I-y+i,:t(XMk-7}I]pŋׯ_Y:JOZ9ZwJM΃Z6W|K%`zcNi c=^u3;cD$S=@Q#ȹeJW@hquBƚgMˏVƖRn*׈jA4AN-!P.Y+T&+ƴZ[#]5b ?Oy2Vfv>>2z@; U\-"22jBN1|$gqw|w]>iK_Z6%F}WSkeL'tEbSHDxA5ǁZC70\.\Na6-tvH6%Nُe+ų c$j)40M*S1mcW=O\Wn8G?hlZʚMLɐF|#V,n]U} ѕIcryhqǨwy$ [d+;fFce_hs%X:%~=NCOlw59UcZU7z+e?AT>cXj5~YH䭳r"y{Uq@I[abvcS tP96G蕌Jj-{>0c4.h0d9"uYvi=)>]V&ʛѬc-^qTkKc̍ce,ʯĊm"hvc JF<0Nmm/vʎ+ IPec~$YXR i* <1LdL^U2_ %L{N܏xv1WąGM,)Rcu[WطW:Tg-@]ƾmpM0d`LXJQd0v; c1ǠA,̘z1dlufӐ11f}EYMWԮ NU Nb2NϴACBp 2g%sA붘Vm9(Sgfa,Űl[ľ_:dmȲ d'ϚVښ~lL%s0$ffy^o-Xf ֪ݥ. :$sN"ǾO8c$F1;>Ood0d*\G4j0cY:g1gA1V0zk!x=Z9{|׀1`4UJ9g҇+;ƀ1;JtF)M&I~6R_ELm0vV̭?fCf0fmƮ5u`܌YJ|Ԛl^f11ȼ{>1fc+j+ZJ̾\bGSoF0VOcc`mO7L*قcve(^cwԛ1k`Lcsc!1qXѬXxc<7yc=?Vz=0X6+cKT=z"#RT#V9` c@±qcgO`E3ykȐ$ފ:1FF~01K-6z%]($Clس1YJ̆Y2뾕 oTHAxll4ӫ&=b*ØǘM!cbƊ(<[?\dȨN:}Q8(eoKLv}`Ɍ :Xx,Z኷Mc|SD'Qƀ1'1xPmNJM z&+ZJ c|?`1}b3;0$b?fTC&#F4:Ck\Vĸ"DŽY^r-f z\IK߲*c+5)0XCt!梁Ɇ>W5F8%aLl".qE֠d5搶^ΞA^*uf^N/44ƀ1 \AQC5` s*c!=4ȸǀ12)蠇'r5%sFcgL 21i `  Ѥ6scHcXz@Ճكb)t31=48Ƥ53գ)c*0?c]TSt C_i mXήӷTv ܅x*3cbvTTUZ .'A!szY+cf,lftq~1ߝQnj~3g@<^x*1$vs͉W+ͻ/W)~>34aƤ̙뭃13cܠ8N">Hݻq2ΗqU.w^`3VuE?}??#52fT7K0 1WǼbs.CDi7szcNscuɣru?wfs:[c?X=o~#OV3Թ:3'ـcX.[߰:0 ]2XBvcA.~5~3u7` c{Qr=ߖ~~!Oi\o06X3Oۿ*r516sYIB$څ?Ɔۿ{squq ԹެW?6 qǿ;㊫٦>_Y͹߆KYo1{q؞`Kc0c0ƀ1` ƀ1` =cƀ1 2:G" ]} c+"m㻕.1`Lbs~1` c c\#/8i:#WϬ/Y>A6Z&TELT40Ŵ~Qc1ŋx+YMR}}K$VGucc#l}zf*퇫bA%:A'_ۯ}}޿evxE?=iޅ wEWi?\?>BP^USYuc*rNwҝ?}EWin~Hҫ^}7*xOϟٿev7zVboØo|6[fB,glEK_:]pUuc=;?~rS-ˇ:ؼTHlf bq8ϰ+%p-Ώ 8_]pUu&ߕ!=ld1@/$]S c|+6'*?AJ| \h,?fkj ctOXBcA.Yo9LoH*!X*Z;u%16"0fƞ&{A7^ЌyeG]![L7R<$cBj+ : mލIsG_fl3袈WA\QqX35%oƤXL7W~ \YpN8kiٔ[i{΍I#>DF)$(]ha[~mנq+v d)/ZMI^B:e@N8kiux697Ƙ',a ڵvJ^*`=@ucmphcL9u,cl)M<"΍3|,a[Zk1g3SGӾqތ qE c t4ϣ1pcѴ%cNLٞ10c0c0c0c0cfz%ﵺ+|Yգ'sc mb|bc%N1'006*fAQ}R',0Ƽ6`l«1wi>} .4ck#؀1t-?佗4}n\WY <N|n|GIMd{¥߽+2=N`ls,c:~}u@;|ycȘ)}鋊 RlOU LEc'*?c8PA\eC}y+ 1(I(%;7<{z.KdM'?6|mN>VM$-]`NJ>3z\Nd윙GSo|?yTYPn"ۓPQ1}lal=cnNP+R|ita>3s`e'cAk~_˜D'\*nj݃ƆX}S.~d(f zc<+aLl"ӓPcn֠ح^91&J ƬŘou31c 0fz02?qocl4 c*{¾oWJзKdG`,0ykcl*l6)`L9c'[)}C3<ۿ#ggLnb9SM^ug-5\Eg_H8äV!=⻀Iԁh9?lh#rPCDV$+INdCH!ʹ0zugvyZ{ggFy11g_~,B168cu Pna*HMXż"[c%뫔dǽxʯ/_ۍ>fYe1VH҅aЉ0<3]b %{C1d4V* ;VfRF/}S3c_|П1M-** Rug}1tLvґY 3n1zȘu;b6PR1cKKۓkt6f oZJ펲d,ng,YDŤDŲwwxMZR҈f1x&+,=G .^ L(sc^1ja$1,MN#'H6:.ճ‘ d*d Bu=7jU-[!Bt"~&<Ć` cL~d⒊17;Hōn]؁o$S(44 c^_RY);xZ/(W "s_z| q]A1x&gA1{ %cs PIlUJ6I:$KU ÓO ÍNVN_tgbvf҆Xn'TX+ǽՠ/ҋ5tq3&0WGaF[Pi|3Jx&^ PY` t}Q167oz:X;cv~7Y7Q3^E0Xےթ+ZB3+9c;6}b@~dBތN;_c7ozc%+poȔo9cږ}dz7͛cL y \a-3u[=xG7ozSvJf(k yŵPG3lߙ97O1I希-~~[-i_obnigF΢{smfzF`Ӿ޼ۻ]bIcsS1bS1ՀW7/16Sf|˘v6۱sw.[]zN|Mi_oG+363Wi>O|y&ǚ8GuD*ףrznփeIcHV艉KL\52c؂Ho&'kׯgCQ'-Ԋ\#S)$$J{Ԏ8>Uɔidc1N_Lr.[a'rl421ŘbQ'ЯHA4H‰^6eŘbL16ε1ŘbL1S)cR)c#bq50.bt *X1v9iؙԶȂM.)"WK菠MY{fi m4u3XsL٨m{:Mo-wy=b[hTve  Ō,4 ĀHF Br7{=hb\clpo7}9I3]֕yky3ƢQjC2# bkb!1d Ia;c&[ "ŸŘo_pmo#be}C _}_Dվ|/cό(+̥=BRqԈ "ŸŘCo7EoB)zڻE}ÓgVv>G)CF^X>DuEjchTZ>#HY13S65iR䟆Q^#oH}E(cn潵O͘>>TVWbľhT]0Rh19d lӌS{RcVʲ@X)Mo&񗷦OȌ?Q "3R$@1vb4 vc^qpo3+!&0FxfߛYdѽ`E2O`@(1aomqI:P)z?ۭOH+4+ޭ?=0'\~av>, x.`oW$cW@U5n+x*[^r}? f6`e3dPcc0vc?/lw?kl\Ywabz)c`tӫmQ)cn-V)2c3470U)T; IMc1ŘbL1vMD;`1Tp12 kVʪ"qq lM$;{7נsu"Ms]}:tZB+ŘO۱,v'bv5+M4P,̨ߤ%,R;PĀc,c=0{?cG12V6 0 =׬DVLpUHu/dL?pB%[kVL Za[PĀisMcl~RXf42ƶ12>([d OS4+Ud?,ZaX㜇{a׹:a,; EhS7$o8v%@f6L$z7u ?xRu^1NϏP4+[f q2;P}]%/(ߕ@A޴/ro K|I"% ٲqtln%Lc܄HΏ,[+yOD}vV͏;ƶV+rx>lb|d,ŜWNJaL6K҄c&;cw?Lמ-t(&` noﯗ`q/!ߏyئTRtZ#wc4mWSed* S]F_?I\';%^gp1:a4fg cI4쓸*< p:H␄/|Sc7/2^p+$7!0z=BqJŏyťpxiYyw;D&> 5,Y6sMr3c kZ3c69ư&c` 10׌Į,2DٲEy&ޕGH01]YdX#y&ta.lc` }şA+ 4QWj[Tr5c`A-t5ߕ.%TJMxK+>` 7c+2ؤ.Ec+jxK1}o}W+j:;-2>` 7c+r5ąǬjTc` smǬ@2vSJO0f]ͽZo`)fW^70}މmv WyXX'Xw0_iw!soggKjW u5cel9g|kobTZo`۱Px9XXiЎ5~#R^ 1gkc*TM0z70n [fdq.gq.&c'Oӣ` E_щؖzY^f5ٿWCZN10ƺUbaY.ƞ{90?XB|1+~b,dq10jg3n%0&X=r"xmF103X=\7H%Nюě j۱V#[ܨfub#scJi eܵ$Q+1q( 2jd߼6JkBZ(r=3; X7/vqR*@|4c1fYk{P7}zo]dFԑ^,:` 9܎5~OuP]*}]d.o2%k:WSY~zcuq7#ELI98XcH5LW}cI.+T|.%5+Y~#Ry(Էcf5rpaΣƆ֥j,=%˜:l[* 98Y&sF`̷.c͵vK&\M꩚J)"q0cʋw}ζohmȷc:T`}1mÚ`0֧550P#0cx"Q#0P#0cx"Q#0cx"10zͧ^lW<c`o܈M uƂ`8 O$fMc=!ΫVH13lcY>`22Ce.?ӗUN#g?2s+ǁ\aBf2?2sMHh> 9/F"EM_e,26[0HRK s2L\q2c`cAOf 2 |3",8ۺH@foB]v#]bNk-0h2۬ȿ 84U=Tsh_1X?J;$̃vlo" ci4QrE;90q<]Z=3^AW'J cxãЬ\s<{0'D&YLe.w8e ;w|^bIDATش9H?fϓjo2w`knXK՚a-cX'5c` 5c` 10'5c` 10'1<c` 1<` 110ֿY~sC\ΘE7j1%Y~{X XZ~s[1R~N~]DUͽZoW4j||rɷF zzW0v]_q7MַccQksf<`yx̢ۨTaZo` Ƭj=z70sF}EKoSabsHh135v4/ozc03>kN_p%cmka- aM0  1c0c00]y[ʎW+dßJ,PM5mh&[(s`i*!;_ƼNTr_;ؽw`9Ƙ_Mϒ0bގWS6̢Ӣv;Ƃm2ƲcN3v|`̶e,-] F#;Դqj٩me1*T*l%ƣ,^F:kWkͼJ*~mx!Ldij*\PWeisSyA >g?̋~[F \aD z!/5_ZIN;̮(c 7l9Q&?m_MMƊ_jZ~껻q0<05>v^;=ߛeN,/zTAH+k]@/Лy˂,@ 9u1oX'1\-V&rxYؐmm$:r7]N9JO$TTU=yUmKI$$J" %"pD--)Em8ѿR){c{&v'8+d;oWDxk A R99Jp >V;MVsO(I"Ak"7,1HVcN *a"YE迹)Db˫U L cMgb9*ī$#bݰC6&2 \SD cO*k>'iԙrbTNd̢@+ U>Mgc¹:e\ YDTNVt.FPBw#gVnv~&I+ 9t*`YH%f52c:G[G9рߕxn.-<;&pA>$MWU>5yđqB*z<;9@X}elZc g4v\Ug4гc >2c-vubU1~}ceHs}fĽ$ie}ʒZO7*߽wǦfYX%RWxLsVJetڢ͖E~y]+7{q_Xw(}l*cH%i*q?XߺԱo2Yv*2'e,%'NWv<#W<I)*dVXfHkkKxQ,>NMy-+zԯ9@X%AXw};9GU\x$PۃUt ^]t4s\Us>FU Ur823tߺCPxo,;K7=2*[J88ˑyWTFzRmrՓR4or%[ח)ʖ6cT9;Vf7 r}E Ʋd`t֩R9ĄcP+/C'~Sac9ui-b3[ce~6攐br1;zdXhu٩כ5fQܒB~Z s0 ?;S3fwŶbi {~E~;=yZ[9urU\N[X16DIAØb07oNNT׼wĐF1` 2cow\\{LØgm/x&Vdb*Z2|LjcJd2ƲG{k'DD!-c3J2=U6SVAv1K&o[Zͤ[맥OJ2VѼd"b/zeܾ%jXTw޹sɔ3e!M|҅.)o[,b~` 10c` 10c$ bԗ'X 0\X3F>e"`VeLI4,M&Nse\vEʗ}|66* +cr Y]PBa('B6Rv{ЛgtrͥΙ9x"dBvLгcUra:cc`6GK6F\>c/G^b?)';{aPdB$tXAٝk* 10V#M|dӻ clb3$ -h9ղU8ecǡLceɼYAa0j8>F6CCR}EglFS'ktX_Q]63u9- ,i?mKJju91s:C-.zM^>z^GqR]>b ckl3N^II4cgc 0śX&(ZM46Ʀ&{;ynjۓ+E c Yԥs9k1SͲXrް ўqq+_dHXבƺV oÔ|bicB>YŊNfbL@˃ݐ+e|zVAS]V|sqµbZeT(7kE{VW'yx?vYXL9ydXcPT$1ͳW2N+!ۘ*폜,r++أ6fw Š|^Z܇zEr-UakuLDcpxp"c_ܮ`ek.x{d쉊xGpTV6h6UQWVc{A[>+*a4$Y}-QBc;òXxpuLugl01e~,'c*Bxђ?-.~]\TQiɇMdZqUsv_78,Odnw:R4Ui>53v5Q'2Ѓ)tc,=ca cQƶۭ7=+ O^UPqIa<c37g%Oc͏mX}jF#FE/NrC̑Ƃc}_5xcEѹVT=KϘzYy:iz{aonZDŽ}7fn[WbTyIYn}h9XplXx$|ap[{RW cvGpnBT 13F l_1Y=ژ,ڨ#c56)'26{CaRMkl!N 'X>K1a c01a c01ͣ\c4xX3-~6 &1B0F!#c1B0FIOYu !c`B0F!c`1B0F!#c`1B0F!#c!34FeMpz|IENDB`awf-extended-4.1.0/images/qt5-rtl-menu.png000066400000000000000000000756341517644610000203370ustar00rootroot00000000000000PNG  IHDRcZPLTEGpL¶Ȉ\HӫɹǴocXӭŒ]IĴ\HbK[HĸiK?ƍ^IjZчiY]E;s`˿Ǹߢ~ʾ_JZHgMaKɿk[mPF71dLƷdLݙcLŝeMcLοƺʿbL_Jȼ"!!²ŵޤygћr_yiu`t`黩̾xfȺoaaRy0/.na''&,+*µķVUSIHGnYʽɻOMLua333\[Y|zw988DCAþaL?>=ca^ȴϐpbM<5ԙ}úpmjبkigǿrro~WExus鮝֬rRDged~xbI>6NYpYOhRH%Qɑx߲ڨmZN8j0^Jxիc2zklQ)=@giÇw^ݠw( 휎úo4ԮYӷe%\)<00v@z/޸u88OX%$ҥ]99^K_oOĵB4jܺtRNS@f IDATx_HI=w[m02eAXBr[DqLsB%e"Ot2⒗<.^|U=O1O_W*R]64P. B]:XWU@PUv֦vuąB Qp׷Nzv b/LS*ㆆK헝<@ `xuҽǮ=@jogg3gra%I_MjS0]3a-8sMp;jT$kL!6z-!uXFTBۋ>eBzիAvטzL;#8(@9AUVf@.Iy@Q!,!q/Јo 9Х~ӝ״|60!3 `ADJH 1)PA$Ȑ1909$!ⱨ9F6TGm"l8Ų!qeUq1y\ma 01Eh64 FQXL|sh9>0̉<&"ް1չ:jei@3)* cO/ HkA6$-#+Pvã\ td  >Ӹ.}âLHL+=$90$c( sfj4X(҈~&mH7yR6H!!,hVxShU C9$Ǟx- 1u{cpZ12n{;{ǶMR/r^z`7bxdT5OBG4C^y*dIn яWIʁ T[`+AVKLRCDTWo/R^s+v"cUBm1s=F0 ^HƱ, <1,;9c23> XbgYdK5`(|l-:tXn7Ac>Dw˻X(MMOͦ}SVi5+n ޛ4d󜦽9 /q:9igX g3.lAX|4WOM9ݦ~㥛I2u/N8>X7-BdǬh(׸2&iTgwfom%l-yb>}OVsիWzW3ҭz;t@67]r>W<kH${7¼BtcJVb )[@tڊhrQㇴll3:o-:T:RW(çkw'cNh~8{=6|no/,Ŋ:XDwc;kJVD_Ү00$3olЖlkfqѽ]a[skUxԥ"P;OvkВ{s^mum*?&=6`{Ip"]v6rd&3R6O\)qmLiX[XqTQƃٜf,9>ec]ބ[n^B ],,,/t%h\~ϼw:Ci)<1;qLS1@q֓CrP%+ rl iq!ǠN0-8?R 1@W81EX?7?Ǡ ,},B:v2o`aKd";EȾ4 Fǀ9V+M_9ss `dmnl6qe~8[W71D[gJ3Y$9uH{xܱQ[NJ2΂_7!D[cuubO~)DZk02Pe+5QFw?) rԛPx7՗m- L8ֺ76&1l8&UrU~gwxG;vPd!ރt]"blބ/|&n.00"Ï23L's'HIg2Rt/9`d>hCNwLܧ@Bgx-P7 ed,ֳqz{2}` r "QH2Ŗ-N眹|L Kϟ8=g|?Y7#S@ԛPKrIKK nj'c[1i2,7!S:-GMK/R1RoB]]"~w )(:BW9=g =0ehX]z @𙜆?a?.־OLHaq͎HSXBl?N8v;cݱ"4~q/C8I1f)9{nkn;nN]cuiQԘ+BCI!N'#kpR=4<+KoXnm45~+BC>ŽNFXU(zѮ r\2 gZsbPDŽ+1bN̴ ۵ij!+ѿrL*yb(0{)ü<ǘ;]_ j_w=top {ŻO߽x.ziiV]hPuBl?Mǚ8 -%\>qc6Ɍ߉vV^1$;{g{s5/Pbq6Ʊ<+z:D䱚w?iyh%N޶ @L&liR/Nmm:2Y 4|J"xh*01LfO~fdFadP0_><3{1z"۵Pv$<9L(g&?~x>OcxijMWNhSӜOwMM7UhdMJR14>)ote{. pʛM9j3da`o&J|l11^MRF殮faX ~_v(T6N~a.`zJqUA7X0R %rdJ&ht&]_6cXoyE&^;ϔ^Q qEϘtScvф#h>=@},&[Ȕ +uhe!$1UQ)JKTJ|BiUv*Տp[I3 2?UD%z6c+~]پKS0hr'F[/LּیZz~̢Ex1<;cvvБyd@_S*- _0bL=ՈJV;jŽŝZ=W*ӌW[`Q4>ƾ΄qH(y@7pɓ̍bW*-+5` ,W,"tSWYE9c*ѩ}=QqcCB2D0{h0GSz$h'1~Vk}hOeL cDzuάV3\]*YQ{3j4] c/hA 0V=cn,OT1 ɏ10\I1)OI|OZ@Y$kК3W@1| ;2>:f̰0-[S$c)_ƀ޽z[r+3Ff{uX0\IbĊTF~=Y1v³ZJ`8 +s <Էh8`:c2b0\v'-ELjd9ju51Z,L!^kƒ\+J`LrnqՠZl ` "M .e8ࢭVqr=V\v88# l]bL-| Vb.2AF3F0}C`+0fnr瘬"^^Lͻ8`c tC$у :ı X"F3FI1E#˖J$kbTYKשH~ۓr*ib$K3G\Y=X ow6!ȦHYK>Dgn X,ZSL.ZGb8ʥ4eYAqhcH$} w 1)|hl/jcEGV_Xo,61LɵD= Nt/t+ kcs6ia.`L-#~Lrԇ9wQۭH1w1xv 9ɤJLŘ~NL>1$VQ>XMǘ,X#Xn~bѳ YqcvQq,? !Gq,>" 0vLlKɧ"c龥 ԳDp̣''f0kcoDűd̮%Bի1NN%/W1%Ș/3S R_0;{js=`̮̿]+nوo`qzmkPƔO[z*eΗCc1X5)٢Z~<#iK~7?c~LG5n;/6hiK>'OyRy]j؉̑*Wc#g3#{3._W=cP`|ʰFN+gKU0v}EXDZde3GnЛ4K\#1JDc0ȌQcTdjy$i`ٜΔ2Fo>՝10O'ȘVyH54kdLٌ9e^3 _g~Mt51k}_2PKp6dc ^I (c( uӯVo7)6!"p ؼO_K IDATcz<)^?U},jg}>+I>!m>K]<(ʿdtSS$Xþ RKZR10* lq-Hdg{{'/.GwI,+M uzDJFqL1 e4߸o9ɡc630KЊ)%L+-K0]d-݉{Rm0VW>7Xm1F^]]σŕ6Lciٗ!ȃS/)=alc+kvdk1Q]1^0!y++qE4B>ʿQ9qԌ14FϧMOʄ1xXJ3 chǵw ͏1H'|tmRϏiyoƑByH>ɧMX . 21~wtdb{dgOhǙ"6"KBM*d]N {Xp͠װfakK%ZlIvَLeMVv0I!=}^:5H434if~~.Ի$?6q%H5cPDE"X*믉pt9aҹcBC @ьysm?Оq)PYG2A3OVaLh2 cT<cWAk_1uJug1Șy c%FLh10FgBiϘU c#1AƮh cA@?g3dڌ d 2fѾ03>qHnF<P3F*gFP`YE^s}0͌6P`LS3sM*Pƾ45pðe}ZϬP,ɏ㯓\1vǚ5VMf EdߦXh۪.rXYO`0Cx~5mb8]*p>t^ۯ7omUyuQ-3Aiܸ =%:e,&0I=1nr9f'"/&ѢoxIuXހ^*T!y=skZ֘JhYfΏVaVcYHm9k>c`,v/'ca\1?ƋI{O;?&ӥb5xSc;l/E2 rԥȷk:2#ÑM%+"=X:'e,F0tC3c>ܿ&WdD$bp(ht:cJ-bCbzɆXqzyxκ5ɘ7c±׻Pw  >WQ >i۪yۍ6?&ե1u& }WW޷1$?@8i0vPѬj#cR]*cWATReb }Ǭ YK0vߌ3/cp&d 2A3c dڌA2-dڌA2s<A72vG_2On@ngBYnjm5lLe2n IBpS>J_g CƮ:`5c^ȽH 1AZxDΞl1o˴+oYFa\!]1&R]M?vZET/rl*Kwg]\ߩ!lF2gn<i'G}1Z]zGim;K+ocNXt˘Ku-ƲNU\]R({y^;Ky{//qE#TcFc&z&$+My5 cvqcu -g|R&FX(WͮtT. 8~!џeJR! 0sn\]m8*UkHV?Ƹ0ƙW$j8ˁg09XdF&0#hmr1RA:ݝu1FbXDntnl8__r)MFR1&UEكjG XX -˴ޘ7 ߶I$M̏s)گyW&㚧*k1/wwm~|cGsPx IK178!F}ARcU{~idn$pwn^c27 3xh%;%[Vr\9ZĎR/>K v7%$3?oFz#Yq=ޯX44%{{Mwc"~kGaMD7r|_qWo@:Ո.\<|iq*n}S n*T!ywnΝ )T7֣-d[SޭXg#+Rk\㙐Ṃ f^A?~njg,4߼YZBMuch=:QX~ӧPR55 7X>QqosE4.GZ똱1vzv1QEM!e0dPMɘR_:I[tch=:Q_Gdle u0d- 1l[̸*#=qq0Vk1~26(~~LTi3.6 7zt>\q~lgI}3(\a#Nsc]fW`5c. \Ǥqqm$1KZ7ƌţΎMRfTG'ݗc}#P1KI/"fsEŸ106 J^QN&:=)18ь.1AMuch=:Q4ǞWl+}X}l0-جLгHcκ9ex 3&hb؉_֌31ر1 3X1vҌzmڃ1KcGWl3HCH"1c?\3h\QW6wԥ>5kxl ëWIC.ch٭4{upݖf wK. ZFqu`~n|iQQθ}1~Bvv}^-+o 5`oRѼ$_ΌHƊ wI(ժ[̘.Ę5ff #;N27|77 qO{g5҈3V)4|p4(1Tu ^ǿ11[F'5nllͶHã~`oR\P}jѤB~1߀l>] ~U'րr`W_}|M5qWX*7ut<&Œ! H/6y;<>z{[> SrfXC8cu,ݔ(R?\lɜ.]_ IH3+!z.R;;ht"!RA7a5A/b" Ac~pۋMJXC80&ޔBNd$dcs~`,IҲᚙtlcߤv7cm EhLbƐ 2ᅅMx,^<#|:Z܎ޤyXj\Q)(R'2V1%=}M`,IdE:u:A<`6MQvm?=4SCۢӐ8 xyΙwCGv}t$MAd8fs7K7sț7ߗӬۭ1j"8aW-鈂%2JՌ4sɌQs{{sԟS}cpN6i_&2!68իW ˆ2:;E}7K4U+.+숌՚b\X1P#|t+l?|!QdWWfM>gι`)XB|Q0fkg>du:n!ׁׯ3=##ߴܖЄe+l⥌4#3ܽEГJ=b,砘dw,Ǫ,%c%K H4 4)BAt=}_Qc1Sj|cnt3V_'K+*XzxO0f;312k3fxc1c؏a?v_` y-֥2-c'_ 3[+b0c1Hk3Ì1cn 4a?ֺܘ10j f!+qZzG0?<Ȓ:Qs3&2yM¹f,^sѣ`lJ~iVTT]9ʯlS긫7 jcp\WՃ6wsVGJ·<ǘWEpС+;]]Ig oOB?I#ΗWJ3!5&k՚FJ:&A H0AQlƋcKtڹt 74cD1ǽUmܱ`icL3f[[n-@OZSQܠ-9EjxRg-f\\}Ib㵶cVs% vQ" & FId, '4r(.6gRɋ<9CcX>RY_ hbf!cBKc ڥǤq;*kN/-L 808b8R{kTl/U>8cQ,dLJu1` s2c1q@eN$yܽX`cLJI[10cV1HIV{_a&eﲸVLc.`l3<m~#g'^Qy` i;K<.iC/7CJU.jgغpJ)d=0憵 IJq`[ j]Zͥ| QI巉K'2 :[\W0FI=/ Acvc̀IdmFmgƞؠ~3ALPCcL00dx?1K 9mW16 COcdlDA%]B JΡRc, Ì)=^`,yXˈuE 3,alP,@1̕؝:>)g썐IU$O.gH9z4ȐM K;_k{ 3yuAc<@ IDATq?zG>2[-Gdưן 0XbIyE~蛏VwǚOȀ1`}yE1cuuZ n;H|8Ob 2cS`)1GQY άos c?FM_-8WjuX+:1˦{b*Sk`?(`LEW-WW ̩6[cҮvb[kSm>PWɘZp49sjZ:rjӿ`iiXcZZk'陘X Τo \`1ckNlSZ+"T~#;Z ?Pgf~ 97>po{p-VR?]<Y]c}ƀ11` ƀ1` ƀ1` Sc0f cɎmQ"ǀ1`W׊pmy kE` &m|4Xƀ ~ÌA` G;[ړnWQo`o·}mjMvE\rQw2 :q9|RA,G îXڏ,̖߯qx7s j1l0{S/mӷQ?3+n:jn2mk_P}ˎ]vm~QƸ%U>+È+;2ƴx;LOR&;k:c U؂E/_K$}WumT i?JF+tec:jvj{i|fcz>vŘip_Nڏ B:x ۈ5%y/ ie-d~vEG|Kxpj70bA1xGv~1,GD><KQƈ+ ncjEIC?([,B˹%ёя ^8~chE-!= PEW78c([쑏掴w#{!;U7׍u1yk13[[j5ސbԲLrvJqӆ; 3XN[ڔ˜cs0{]?̘o,-<41yG\z)xØc|Io HII Ds0c:j^-,o * 1rPމI#SqØ*c^n $Z$dAbMdNg̍cklGggd-n>뀽x^l $1UƘc3uqL'5Y*M91%cCKޏ m"_ cLy_icL+ m"_@G9"T[/{cP2Lro?f퐱auR1jqV좢OGى !f"sd?a cߴ|GKWfdz9!Π]qM^KԸKS B/.+C뇴yYPφn܄ +,WHG -ى"wukF#Y#dY:sfDc,npGaL^N6omW&ˣ>ݨǵTcؘ0vk[mzs[ps'e_Jw cAAZ/<81܅EoX_aCҔʥt[֕'ؐ)Wџʸ QJ gƮ/~Wn] X7=S2}ZITq`l}Ŗ910H2/k^w3^__q@<ܵ}eF8Ckrp9vąT+nxƌnx|1-ƆX2b֮a> F؈e5{, ^b-GعĞm>HaڟuyŹJ[XbVćVıdURߣ5ٕL}lA7He,<n ̶ٮDcjݍ(Aբv-]ͱێV6ع5r6h 2W˯d"SCXBC(o"X}-4gfwӼ>A_qU [*P3IDu8V#^E/ 䦱2ùJ`LaL2*GvLVۉE|F12?S+Q&(u8B3{ u++1zk!E\selł+cd<'j4ur&FQjٙX!i$&u`lXYMiHY9li*.s{ufd$ s`̝ؼb$˜w2QibYҜmg*XJrFNcODu2(AMEP$U 0u<)q=Gck">s`L2v]H"j$ŒT>ƆF|k{'͔flLI#X1V0{Ϟ>dyy]RLƬ6δ>HeM:’1=k^:'-x3puXKjΣXpCdGO:łXU~'ͭcg6e<Ă@\_ߦ͛]{Ad"!LdIðUR`vb*LVvOu` c3e^XpWe4OfՇcV;ƄEB6C2*+['NtEjd.BQWVćAޖޏuG;}K گo7>  9vVRCUN` Ejd.zVćc>cZ33cæ_qVCUOxJť:'~M_QnٚsWvq߱ 0cTqRI]9q"MFƀ1*G8)¤Jۼ"RdLMFƀ\c0c0cƀ1bc0=5 0//`lX%Y6 -UXkr^\SF cj^.S)m'z1`EZO`77]oeDf$3LE2jZ{CZwb1`jm{.țU+|++25)[hsNƊ)Ùgln_$ƺvV`o}lUG_}_^1VDH{&RBR jS#jYYaCoVx󉱶fLEHcq&ѤA-eҎ)Eu׻N8co M ccWc-)WYWWAY}W[?ܡ֞ƒ*~17S;LcK͂]16S'\z g뙙o&1o1s &$b4p3YxN ndDZ9F\cK͂5Jj/'mWl^љg91%g[Ur2)GR0Ʈb4ή;{+Xp`9R(Sf4OlY)˜){x`vGrTbr{1)_.:@OPC˛/{+N׍J8`J10A;ƀ1` &p|uCd\q(5+deU.R_S3 XHw:yOm9`1`lڱSNP30fe#j:lXqeVdUK FvxyRKb,JQq%Ԭ$P9|I5D={iK8Dr޼ ݼK[/ba)}^1hfj_ڪhl-]v$$N&g<9Q꾢Խ*ZScRz,fؼoxF`@ݝYf\`Y6n5 ØԽ(E Xc, yw$8U]I3c׭b0n~g{OFf% duzsR1GBu0` 1voy޲yťǶS=T,ٵ}iTiVBVxLIX]݋RĨ rM0ēmiH0?2kg9I#;n%_]flb!e2;L:G|e:{yYsQY4|27Z1ňн82\17_}cl!i1Xz=vf|g3_^K7=sOa_vBbs뢾d,a͖c)pc,HI, y[N3FZ\~ƶ?MvJ^scw,ci9 x5^x2&:>%ͩNҚ}%gq.{Jxleȗ<Š+%ڎyLd1JC0Ҝ[^c`u< 0yH-a? ߴ-ݮxErҒۅbad'sc6ƽ|~1gjsxF%%!Bɘ=x̋koo> [v-gWn.D0DCc5's7 77<Ȇ-)u+u( T1FO10Θv;F6l'LsqcQD0TcE 0|/M{p-ٰ0َ+JYP! U'Ú6\-; 3v:0Ʈ(c'W=='0v:0ƮjOno'mc`eD#c5/3?E\su< e?10y&X_` 3Fom-^j )JQyL~Z J ^X0:om-!RBU+1ul/ APF-`O9z+XX3W^λ*0yxɗeKE9̌yxmngDz9܌yx-ݤ Wk(jCپ(X co15BMp՜|uM۾(R1091ooָn cMp՜\۔뚶}SQ` u~vW)x 7џT0m&Դ[jc4ƴ6 1'g5OՔ[5cynσ.`̃[0NǸaUxL6[_5u}SQb?w}WwX70OTVH_7g^Q6-7hm fpѼ[yyU/e0֍. fSL[ŏc]0wEa+I26(-7bV³HAb b[y H X?Y)P6@o)C]Ҽ!mƺg<a[=QOylLf1˜JX"S޶iUy s`;c#,9r<a&IDATgگf&' cKNz#}9VҭG0wƺ[lR D2X󊲗gzpT% Dq8P)ڡͱʌӪ~X3L*t!c` kD10'wc` O$c` wc` O$1c` 1<#0;~!^p~c`I<^ _0֝ şڂXp1s>01zc 1m1\i cA6x>B`f w ZXmeIk 6}mS0JƢShfX*:**ݺ 8. ذU,֢wfc;)+Ey2-\P?.`yZ26u0Ukؿ2^El*o1X ⫿/]ffQ_0e~OcҜP?. StC w ZXF0Xܜ}pmpT78< >w}dLĖzO'{ЍCw~/mkTd- ᜔Fғp(Ba šz!ً-rxzrMCiH :SkUvKzQ\/ ),{qy}3IbmLF~)3;yg&? CŸ3M0-+}~eX(bpEԚK9 ;07̏y-dK97J&r~R+=r%$ QnZWB'6]~Wc\w Ǝs>ie6ICzV3WŦc6tcy!plmzLzh^ eEɩPVb`Q"%ٟWC$!ݻ1h9vR עL3Jh7Wr*x1^Kw xG3tP)MFcEDzG; e. e_؄`BUB e. ,cmcf)ᦃ9N6A7"=swz6 c}϶jb՚tϵ #cۚ'B?Nө e*!mC}Jmt>Jcxx%niOv&ƞ77ٲ#N=c2c›PT ȼ|-H^Zo0YfbM UV#>؆]쨳*9MN7v2;]y^p/dSpz<(97ԯhhWW<>{>f&ƛxabcEu>o+;aJ˘oΎl>Fc3X2)bGfQ sĺ!Ό}:[=c3wgnܯfɻ;UQ W F7t3GtĿKAf21שW,;kZECKsӮ\>yUUءZπZbg^x>0v(c.YwNY*:3XX10;c` ac`uA` +cB` a"c` 10c` 10c` 10 cKc` 5դK10fIƚ;ә/{t;? d)*AuehEе*cVdZ:ucO8(vu UElv ,bD 70fM<% ꑇK7bvwuvu讋/–%+_tޫ+y|Lt:zwĝ0;*c˒tcőfƊg!v v .E+aAƍ;pQgud|E y6@{Ļk^ ĞLΌK7c˒ɸ~ּn EĘ?fufL|/TƖ%+1g#` H~_=36` 0 11101010A` u`JêF ϟe0X^o /4c'11zja{˟Wc5dw-0ƬX,s'^뻮Tڗ;lR4c53Oꌹ|\.5kƢ dYFX%"۵d`l4l bLk^b%kU[%}a1zfA 혚a ƴ5vlރ1zJa cFy8>oz*v,X;k2!e,8+a&DӍ~Q̕3`jdQ,+R]b+j'3aPƖo4dEXMEREƔT{擓G)2d |/O ` "cf4Hn՛'e_<ЉeL Y?,/> Jw|TSSmqJTuwwUԡVe̒Wvmc#HG{>lW~/1fo4c` 10c` 10cGf RƬlN8c]o2){HCn 01a cc#M5*4Ln76s06_l=I1X49~֥֗RaQ\YY,7Ʀ68t c98R4zGNs%c01a c0#0v4a cXlʘ%{w1Qfb,\ݿ5ŸiulЛT6:7Cxub06ڛT6:KJCklZ˷ho&RseCo1bF{31 cQ<͕J+`1e29] c_1%ƪՃ+ͳ5}6Vm\wz3u.wػOцccqSkRcڮmiacSj_s#%W c|_c01aS1a c0a c݁e01Nf ,|f>cq1q1a c׊01avc34fuMϘ51kc,}zm:9 m̓bycэl,'g1/b,Ƭe#SRvhnlj8:o?\`,cV!N~&hL^++uZX1qhl5hLQE`,{ѹX2/k؁,X=SesyGo˜STkO0i0Y_?b,c(_cKKU%ZVnNu cyqjvؾ{5[DSyC53X];zglT@#8EG``lt1B.UxԥMF1ƺ9.2G *p0޻%o:Bg;[`q2Be2SƧVX(gtwȀ/*`;wHUdl\VƁ3@R86am<1 E"o*cS vJchV@-i+1HbEm=RU7oZ1> vfL;cJu!RK xN%hT(6:0ZemdRo5rG-t6s.n$mzS,:v||eVʍRV =ы葑4ӈebf2͍FxL<)aJoac[[4gTތ{{;+dE"hcIH-Jn`iv{M4qI%/-ԚuLG(47M@m5Q;i3ۤȘ[3yicՖluTӷƶtͬS{:|w1SڥMB6K;2Xraw6v%d5-LVzhL#ѦO4O1!.UڡQuhGU%:%d-Ә:dW0U.|g!2fXvykݏ0~vtv'cAǁEW2!vS[AΕqk?SB$nv.gv /m#cy3ӘX &7ZMf0wjϊT!cOŷsu t>gvd o&$Eǰ]V[ٕy0QKӪ7c:So7q3ML5ǜTE/\;2Nd%ޠW>~Mp>4J'^}%}{ c~h(@@DM^ Ż-Ï47Xtf3xX8rDvLS%]]?+Ҋr#ɾMoXy`=b:aj#̋fYj,6DZZ2GcCwxܦ%=Fb4VOUѨA~+ո7c,e'C2/uKU+؈<ߊZkTd06x0̖]G26kM{[ 3k!=30tfUd,8 p+|I#zѪ΍Q=3,o1_瞿<&}K?E^ 'dUwF&=UéEA#D}4XϏtˤz^2tb*˘ cGRA0A`e | A`eg {jeOg򡽕SWDqJ&v|QjOL7Ͽ"/'c>.^Ʀjʃ鏜Jt36\Hkw}&5l7\_,hUc6qfm.VJ 6J:oI:ddS&"ZY \~}0^ye/ߊx eY^rehJ֯,Ql^0:n),k{x5¶Who2KyP:g)J.\k>*g=\NqԇQE-[DvTׯ73~fr.ZTgacٗnR\q ö;)v;NQ:tekͯF2פͰc{yWe`e,\Hkp3ϛwMU`9L7KlP :Ec`p~yd)횗4κS^[őbm(U}eB0״oE<&cWfe~ղ*m/< .IksUGL_Ҵ7֚f~9/%0t6U q߮~}5<511oE<VƮʗA\兌]4Y~ f˫˟b7c>/cv.Z GV.0 A`e_h ;4\ d1c},[^BX yHJ-Y ,k) ]M='9zȿ?|IV;`a0`I >=}у?Ӄcü AgqcޅZ1Ƽc ~7hQơ`1?߶ ջ8l;^qE^_'J2+(о&)bl;Y]3- #jovjPU?J~=ӂW␿eQ d*0pd1gf2jBI`T2 zC*DҒBZ{ tnuc}UL$ʚax.$\%vpmp+NCcHZ(tiLgI#k/$uid" N|0v,%h:pcFl># IҶm`*˕SOϼcxuCI4@E>֪^Ǽz| mN4]c[vgSPPIKc5VL2V$+iH}?./Aq4!" HAU ; rez>[>nKD'yR]] woPۥ-uǮ%֋[/{(!))CҴm"yEdl1ƎLP#|?* qLPI2CS̺d :s''VcGI^@ Uձv_^lmm}=12eBUKHm˔7Qah@P-#He21K4[ sLEQӕ_1:ábu MTAA/6^CRuϖWi_C^={c.%+{V*(&I%W@2ɣID"9BFEq,AȺi:HSQH6Q5W6m;tv(Zevck m9'lk?/\,8R2%.hcy1Mf?*2 _Z8F+j7c7Wk&昁u";vQ'2;%s%}.5DZ+ \/..56؀bY[s/z~I*:F HӚf٪ ~f4M u01Mqu 8v!,:rȣK#ژEøTbȱj8扸V]DlXO OXʹ4VfmŶQ6>\^nc;5Jd16|:sllxyy=1aX>,4=` QeBOLo!;2ʚAR˒Km`JJ M?0XYX$h1|* _#wX'ь Dݟsu/ :kdz< a$OTA2L;fDfw{4J2NȐaڬbAK7odwX?dGj.uV̻]] ̷AxD\Bz9|2(A9Q҃tجHrC>]p_A(_쬮>|tf|Wرz,6xa>`cf~5jb}ؼc-W3mDZT&iZ].r)~fBLGv3;&)|!)aWXmoo/lt'|ԡcx-H"@ 3Sdu(bvEz tHCT<$kil) 6{:GH9+Pj:cqhT\&$$u,tT$xC~rf{WcG^bu7Ա9cU*ȱJ޽6+npLM cYAR'rfpLRjkAtjڜ̶SGO].{^ Ixֹ'g>׉u3'gvXc븎_xpu<B ,VeYHcYNjڬ.˚ȥqپq%M$jjj)cyVpLٶza%Z7˻]avd ݸ/03ż;٠c}=+4+wxsrylNOznLR!뷦,8;31h)!#2߱CghxSEڌg7o޽?11q./~zٓ1B=NJu;[q&I?{F񴛮45t,fdI6K1aΜ$c{((Tlڢ btٕ_= 33󌟙gyW Lch(6u7 BbqQru9&-mxb&w"%OOqpZD.\\kiv'%:ˋLc{{ jo/ * ~_U|Xz_45HJ$cT4Рo#^[ ǯ^7vz\4 h.[yQQ'O!qL64V-R-f8q6\}>#Ɛ]FZt݃Ī;HblV*ܨU"qDZquduHaOnŤl׊`cVo.~} r+@rfqy[H"~6҇_`vj ϒ)ZֽѸcpaNW Lg* B4c-1 &\B1E>3(&Td9nj4Z5h3QXq."IY|5gF3I' i@loK7"70 mijN֙,G/Te"HbPHX$%"(x5c\d05 ![ \3;.ś1bE>1卅ضiJʠxe/k=ffx0Sp'bޫY匹mvc3 w 1K`ZŊccl0"qo+j1$`Lxgfwm1jL2^SCoӾ׃VwLwl!K`v:E _*Kj07$w ݬM$dwV~z/k )KiZ9aڗcAKr*gLrR1OgF1O7hwཽ#/$bKUx|ji,flnqp yN:Ww֗iK!igxǤ>!ybL5F2V'%7ϣ1"y 36y1XmZاnיβ v*XR؟ED3f~ ƪeL<~ 5 csHf섩!R9/VC"T˘WԶ)Rb7 o0f)1 (M_w]b?"|kc_(`ԟ!(`C51GH^*cc1b ɯ/0cX:r:RL& C4=c.ފŢyMy86OǚR>Y\YMc*`^"0'|v,=7]{֥<"̟+Gm}Am_$RWvC&ۑ3\faC״:au6O̟J,;Ѳ}W?[_Mkf< L8`f ;aLa|̶K 揶!˔̌y~H/@T.ڕ1Y3:)6qJ51N517_D118VQ*dl[Uβ9׊CUjKOZ֤4/ݓb\= #TXEwBkrнA4),OA}{AseAs"X@6Ǫz_Q8]WD!s_sKy޻G@΢Z ̅.57C06;>*cL:DB;{BJ#"#c%,Ӆ'"dPCAs,[T\c"0|s/Dz$e=m7KVv{m% vHhs+#̍bc|xOcJC)7=3sc#VȋtCV V?\+ -vPDGn!vsik3s1i㸢'NvITK ?D2 IDATQ[ RvBXZz]voGMT1aED00ڐE3g7s?^|swO'҄Sc5cvx9c3ohv w]#c||1q29eG3F`~ ۙ |F.ѻ bHBOT1ѵ|qo;~l:ύI#E=]aIΏ?@ md(:1;3= Zub4AJƨ?~LxVqi9֛R?&b E/If 9z-~\?Ɗz_4;x?ȭ+6ΐ8K_ߞ3L(^ܕcȞ?Ș}3V%Ů}UcS;;S= c#i21c[[;2LJ?AL˘rJ>s>%gK%1+ _ʿdA&s0pa^FA$s,AY2fƴ\ ENJ1&0eg}n.!]\gdqfھc|e`>-SǓ=" FKHb]M #tіQes$WW:rTcLU22AKg,ڜFR5d͓{uroȃ}i[[\B8*oW1z:RS̄(wpxx`l+CV+KfY\:)#[?}3"bJ)YV.1bj = m;-xŒm1 cnn56clu'!_UOBX0>SC÷A8~lu.17oH (9Tc|uSP[TK^n#Kdݻ ̡$ KG; Y2o1cP4VKE:2K+&gd^={ZKt! v//3/d ǀ)c_~E5h^W$O2ǘRis߽)I d 2V;϶]Ɠq6]͐1S1jxՅ1{ Fj,10c2f4g 5CJُ4b4 c5؛Ɨ.szf!b5!Qklu͘o}n2cW/}3J{Ld!UsELMb 1YZc 2Vc2Tڌ7WTV*N}1\1YۨK`~X _gŪ l5eS1y^nD)PZ5a_i[>2uh\z2OײW-c9Cf~RydA5ו,K!t-+>Ҹ$R<ƌQʄэl`}Bws9\IG4bc:J5i&G hr!G;N0iIl'LayHR |>ѳ5jwmBZ4`b)oi;m s8|eo~#߰?eo:흥v ̘4/:s ~{?%=Ra<4sb뷚늗eb{e¨oʏ6BK^m1 2=ϙ Ųg a1fm|*`RQ$B{xǀ~uĘ2at;~Cg\h)~uRfLƟftԿ3``=7Kl"s?LX)t?&K%c Ǟ67|^ *+ǴD>m ;6W:@) Ͳ7.:bL_='F^iiܽ2F=Yl n^Ԇ1i^*unZnx$pc-oz:ѥr{ߪ2vQ~;FbR0?ʉRѰ?YOjՈ4/,"RFD:K1"e!V 5IErtᲜ!b/YHNjŅ iD$8NC ڞ55y$>3;dgكv{)!yr#)}/r1v$E8-TA(U̍T6y)Σ %?Ku'.FR8M5~5r1Z!cfL31@n$e/*cL3 kl檣:'MަbR2v5B4*+u;)cLR/wUl \tk31T+7R ;9ĈbvLe am9(c)A7!VkV*CtWqi T#w _ *y&"_7Smm1f4 _btaF :g CdPc4TV#'|M1ES9sfx3EQz[U *erJ!`2fط4늮ci1Gffzf9ds0Dž4y'(;VOnl916)+sEɸ1~3_h?}eQX2Ū1,d\"ycǖW=3b=䥧!ܭj@f="v-¸Fbn +9?ðBe?YBbr4-y0{KrA;d0nYc;酫>[:|"Q1MJd`rbnփ?EY c1m0f&E֎% Z*1D2BA;X۱ B1xЎȎ1 1he Wc"!c1< cǞbcPE*c%dy[1kl{gV%f K cЎi Oǰj=9H'|Wj$9.y>e{ boTTA2窽;XQ~cc:?wW'V lW|v,AwQܪ2&0f)@Sg˝nX5m}Iʴ[ިD]$y2}8ձ,O]2;[s~h{>Յ,G/d]b5DŽq1< (Wt',Dxyt5;utE-(c?!H3=pbmC׳lA썦%a dh))t4\18DQ0"0 lnd1K#F~ܐaL2k(D|^3Ѐ2HDI2!qC堽k}˰-DY IhZƘ=.4Nb+\W:s~8G49)N/{=.am4_f2a!0aveq]Ҥq-|Y'cW掙cLatJj4pq1N^ƎIƅi0s~3_Č%cy6k/ ˘2wƆV|ZsjOr6,c~S0PuJfuXJ*~I ž2#.[Fc]X+[Y~Wb?&Pma5Ll `I-A@lY>%ܸ0Vsˎ01W70cCSvold ~,1iu?.d 2 l7)D}Ȥ?͎9b Dž\r3Dl汶g7s 8ٙW>6Wbne0a!hZv,)3w7cc(J&ǁ~ځ¸1<>V:}T5-`DN됱bbubNcyBJT<k=qM W[+wNͺd;GoKOB ×N)]k=@q „Ky(z(AlGf'/"'+%@dRn$)Hp[kTPErheE,DP?rH ıI@Yb0IPʆK{D`Y[3~dž333o~yGoxkHu_M|,d1Ȓx2csz i=Ǡ{$Aqk1a緃\`z&J'a Lfe7(MGi⻲OyLqqAg42ߵ\*l+z *),3QUU8JwYgB+Vc lF7+AwRƔeIehOA5+.e"..+&Ć4OV9)c FoDZcꨛn^G!$Bun0F1\0c-m!GBPv>=S &2s[tӎ}!1v음ac`L(l8켢 !k_ 7{BLkAMM^_9>At\?c` Ac5FZ؉AcDC]ᆪq}iƈ 5c` 1>AwBvQb&mlЈ IDAT^1%^:Ԋ!kxG2vs`  32vo.Xic9xO",{w=iOh10VwlTcͲGϬHc* YƱ׳K+)Z O8ЏԀ10K9xc|Ew10&V$?#TyTW1012bK$n+7N6\G0FŎ=R{:P\YO.& P\>)uw>UmEX*]X?x`pjk%fbBeώǬ` ؄*UY:cKOD 0;q;~8OXfZ[fT[ˣx-Tk+{_PBwjMi7aK%Rb%.b X+8պJ',3~8w~˜uػНZ1 +y?g1;k('ǟ}ѡj3Rݬ?YuD|>_= _ϾRm<\hn^h?9ոڔНjc1zX"cml+'?[iu4c%2%`>XVD}.ue#T2 IFY$21~.4',Gh? Up,НRJ\Ǝ2k d۠8F1׹Gac䕮Gn ӷ7hcgN?M` ƒGaLʘ;6إi&)Zkcy=8x2^/X$/\K1\|yAS8$=7gWd\|iA&+`bV_M0rNA XC嶀10Cc10r7*UƜkU/QfN10gcHvŜkf,aYc+G;410j,>1]g1#Wb436q+`lS^M'Ƅx+> ƌk:~;eՅ:"Ձ1N"4ׅ1;`9ry80f:cͤ^yE0f2cnkq a^c X&4i hEs*[3m,z.3"UzU510fcy1086$U010Rc&{#Y /?>2UΎisau <yY2Ek,Dik,itU+e[vesSLcUSI;<SezihI{{oݗu:=ýTxա\y.Ip- B PWpgl&̨=3|W1-כS۷1F L8=tMO(Z:ت[7|[Q2:嗣cE f?֖m^Gp7ku[/آ<>o<ܵJL9=& ̩P6̑+SX+ '{믾'z'J5vfm)_7ży~| I]eC\9ٔ(: Ta\(5Hil !N(ȆlRxO10Vp2q%P!QS{Xs$`4ُ YN6NԄ2PeNN#SWۭJ5vfm┐yNG5בLpo0ӭxq/8|f)ʭ-9N^ecXĕa-iZZZ^}~yyJ(-jv% @\!<\|%c<R bWgh*a/x% /YK/$%&Bޙ JOXd s~]Ʋr 7$orE%`6K /Tpȼ!Br1JH I!j$ œJU\+T9 c#!\XIJ8km}GXk+^um>\pZ(B}b cX{R0/ɢ2rsd« 3R%yZ0 -ND cZb0aTpun(Œ=G;f&иMf`93v`%U VR;M.\ =H)υD3cG~32bz j~ί9cH2?M"O)4Ƙk%}L $1X ,'ZPTcII)\Bu)IJaR1v$ ~G￿ d,`-_Q* npbPUآ(ưqE,X3 crI`5ؾ4z|YdaկŔoC c.c1&%VrDl3<;"$?cM+jr( k˵wkSc̋ 1c C2q ?bbf</k #V{}Ecky/NU؁(رtLRI"s$1VPA 2fl{mǐc鿒Ϯ )}S%PLB~+ %8B|dNG^C>K5vq[c4cȱ_L(H9-ŕG_ 09qV wcŞ Oi\3(9@~McR݄Yd@NW7 ,+Ll .x"#c95{_u{FQ2A"cD9&ϴ$+\OYEMfC]swmnϵ6*av-{]d `(Ǥx\1Gef*j08c5A7{ཱȢn"B0Thd-079aG^˯Q=d^ё1۟ͥr#\*3n%EfKM! b`-LuR=dsLcy4`Z=YӄrYB GSC#tf }1Nqs ^x,:,ܖ|ʎQDsuǻq:Sӧr1Fqs ^!v\Epc=xQĮw=MP4c3BEpǟseXUS)6q RB'=c̣qs ^!X;XBPYC@Ȓ, aΌ H6\`c^Uec2}Ԃbc1Ș~[ YNc1XvL*ٛ o!0F m9݌91z#XsyCK~<VwFRAE{5Ʋrqe<1<%11Rpa]*o=F켋F>ҺTF-w?w.d89߆8 <ՑF\0:vlUU};T08~1_E?ҺTF-wvwtv&'c̘cLZe,J!<Ɓ.H1[DXتk.+ڎ D,5.egkroWGLeEƠ T` h~&X<ՂX01v>z]U&cKk&&;1ưω;,*g~88.Cvb(@Pɼ kU+UiU"+/+W ӳ] ^p9pM *aFJ?;3ݭw$~~~N/`,ʼbcRݦPརT̋u[O!Ug<1w#a"ocb0TEKce,b^+jBzl@uy7/\m>sy Vĵ4fuecO뮄b G1pL0ְEKeg8y]Oz: [+bFPA`)c̴ZnOk c"_+1б~[TcB?a΅sj&0x̫c:6]mc ́oyt\a36̏%&Ƅ-~o?Fe1L# a<;Xs0f w3yc¼bŇ\ZՁ1}zh uװiN5zi^('Lѹr,xbFmA` kߠeZLA [)>:^5d1L# a 0jjkdC򜇔,XưX]u.` $FO^a;UORGG$≋1 2X4`AٿfHI,c?jeٷ_5{Hc`I 9XWm!>k10B1XLScorU[ABR4j\6-` 4L?6D.ܪ-N WbOSQ 륗\z*ۏUR_XTgܪ-*zU+1z^-2V:kxb®xRq/{1dcIf,b^*Fy\rP0)/FxXR+C}+*c`,R^*49Rf=ӡOǑ{I]>b֒ XBcRY] 3<#/2}C{VVNVKJ?)/SF%d^,RC{ WR` %f<%/NҽTKjlkjh(uf9sJ X %(y }o f+yKŽԕVo9[{^{ =0l"0äQy^@{.R{^[(mo1ST{KUuﭤ۽[%0xvm^*W$"B< !"pDD!"pDD1pDD,Kd,y"JDգƜ{Fu0vHyzXw1^"J cR)̦U;^,mc(AHylwwOVsP!/bLy1D~,R^*ú6+1&#/X"cQRWརT X"jyKŽ`%yMӰg#bKŽ`5q >(%=:ư]_\&cnuMUP1o1BFY9BƶKhWޑ:;zE߻Je,D۱elGc!ھ\Ɩ$1RoH1{}[㦮QtU46zU}hd[ERH #oo卍UCo)eײA.}s}mI8`s\$olIiݛp{bыAȺ?-6rҲ/@y4oK7#D7]~)2gGh>bⅈO.3&]͞n?kÂJҁǃ=BɔBZ*Y%FYN ']UŬY<uqQ?)l)^)O4&Vwco~w%x>ͼi?|Ys/ؿ/͒w(89 =/@0B?m&Jn3v&dߣ*)]JklM1O&4(ͦ&u\ a( 1W+=O ; )fi@Y8<ۑT$V) VwwFqxjTRy.KA~ 0A` 0A` A.0֨4f᷺ o4]l7 WѪ3yW{wc٘My 寶X]ouAioŻ1u 7=W~ 1 10"1010cc` _` 1010cc` _` 1010cc` _Cf q&KZ}SWWB--Nps+~ Dx_G{ĻGǻ F 0A 0A` 0A` A` 1hX 0 0101A 0A 0A` 0A` 0A` &Uhf_NxE].}M+O^p=8`l,k3~=i>} ^Xb883ȸ\` 10c` 10ceL1/ƤWLWόԙȸ\b{%H`l10F5%o,9D]L5-zbr2f%ݪx?؈+/RNtw0֯7[i+{91>Ve1/0kI;&in74:ۘr25עd;%QǴu?jd$?jn*Wt0ַq $s2%W@8K}\1yh76 ђf58Shl4fw`nc\ XnWV ca,z-aG풢LV.A4zFHf}1|9cʥ%4s\Д ,ݜ gR"c`LL]KL׆il@r2֑"M (z *SSEccΘķ-sJ׋jْ(>ѵVj:)ƹg{i|s!ʰ1Hc,KŘ}064𞇍2QXʥgQ5֓)ɘ3U7^8QR.[^ƼEY7zr dW.Xo106Ό-^2cc+6q_>c?^c` ycث+6q_`cqbÈ<) f86yxQ :Gql}up>^񦣍ڒ7+{#CNglRc` 10c`KI`lI` 10\cdLS;o[Vv0fǤ~,]=Rُ`#:6/E0.cb-e=n&cVDG+HI! elM_Qf1ߌ͈,a?VOPf1_0ajhu] ZBüˌm@ dD`?1Ɣ"ےHlbmՏF*J(&60wzhTXDG06cfL~(W|7iʥ\yEʘ7+Z`l` +10c` e` 1010\6310cVpYu#1cpƊ` ac` a10c؄25ƘV+uƘ^+/Rȴ-)hg;U068c :me1c˘VQĊ'm,sQ/g鴕uXQknj{lU06cZ:u~16VOQr(V֗;3Z(c,GM✇VH@w*e,s~)A <c]cб|tf]My~ltݷZc1 ڴ*:=q_ϠAǚU>++~=|_18 cdp 18 cdp 18>c}R'8Dza0aK^FD u118cP!8Ƕ1ǜZ8v='{\\3/c;g5 :q,c^h뵝9^=n8XVpL Nrc/}W't85Ez-ϪN~ϱk9vRIJT_T 1V4us:v\yŻUjtRq*D:XάƦwliV;G˖b_%cμ߱@VOk?ïQ\o#Ŵ! ;=XѱeUhZ/۟1HC̅ʝyUcj7tL?g̱mqKbػw~S +>-NGk jfCڙX;oϱj1,:ybuv1\|=DZUuuv1 7ʞG<ߥ=Wm 6w>Sܨs,8cp 18cp 18XK6plKڴ-: 3`q #p 81p c1@̎}Z8c (`lc<8-Nk;ƞ&%mHI1),!eM"B Uk|qv_ 9fՍJ7y~vDۃQ-ݨcͅM:z9M駓>PE;TÑz=  $:6L-ڴ]%l/☜ZGɹ7c bzM 7h96jVWt.ʩnndT3սN[F_'Nl8<Hc0C!z\MwiK#ӱ0=sb]pIuLyCr~tkX 8&1q_]id{VLTiY 5 .zsj:3cZ3߹ :&iid^gWIma\ HcQiV ; utL+>FmüE21>p 81p Hc_u M'0HomYIENDB`awf-extended-4.1.0/images/qt5.png000066400000000000000000000737641517644610000166000ustar00rootroot00000000000000PNG  IHDRcZPLTEGpL¶ɫɹ¼ĸocXyiέǝeMщ\HbLێ^J^I]IijaKʾ]E;jZk[ޜr_ᢏ~iL?ZHοƺµF71mPɚdLhYџt`ķ[H[HŵdL̙cLǷ²˿̾ĴΕbKОs`ǸxgiZ黩u`obƶ#"!naygƷ,+*Ǽ110aRyȼGEC('&nY987WVTԙ@?>˻؀}zQOM»񥠙ƾecaĶKJH~Ȼ،{xvûM<4_][溲˽ytpѯƿgMnRFqmhrrpjgdÿ|VEcJ>rZOllk6NYɑy߳ڨ>o%Pիv1`jb2zlR)zw]{:TP r_F|kS65o:ޙ طc(gگcЮYV8OX*Zfr߆n1`q y'u;cO6HtRNS@f IDATxOhXS5oaְ̎CYnYq,lP؋4fib&S`Lqq0Ą&q,H݄G&y43X?zcKIڝ =}{o230pzCc@Ͳ](yS4j1>?qS`ƻT%l28?p6 _;Us8BL=Z;=nP{sv[= "%i^Z;0gc?[Ü`ʲȝMoO,ww2ehޞ2s#sO d[+ݻ)8_Kv{ 3O?JP1cnˆkVCPk2'v]ZR崅QkLLTi ? Msܮն!;cӪNd2L(+-"C YzZm;4XE!(%jeE$, -ER)r]'!.s@.Аo,[]@hc ؛7c QXQ=0n@{?ÉonlW :ȤFb-0P#aTl" v2Fhږ9tuȜDػ@5R4}SLnU>S-57?q], }AEYJI6upټrY&y]= g/ aSUCF%uybuYf<otFbyeNV w.mQɰX,)==coK"bGf 9g!2qADU#m&>`h[/%DbD:4&МՇ*+hd=Y`\CP]r@6_7:dNqTd.2dgI=fڱcq)]vs x>eH;-PJIy% IPD>Z_Y$$Yx䏠ݓX*b˭1kZ2'|AE-4esT+Ր:D,W`~^~~ }}=$c%hAD̔aEl(XyYWrIyzlQiǒvs$!IMXe1|T1/;8YxO+芎yLzcs)[H4X-HYcYxxәh ERm\uV Jau'ӡ6^M,x,CXLR%NO?"p:l^ЬwEc,oO A ٍ\kM L'$|1ĶmAV!!V'иuCNC ]d<:]6  WRiEfecM|G!hDҋ ðb;F\3rh)QDZ:۔S`|zʼ柶i}{2c-ؙy#OQ| );1 -9 ;`c?`0{Aٱ `0> O;@Y5`ބӽ |0^o] 5{qc㋄~&^R`0+Іs{t4joEG% $;&~;t !6ܴ5Nh1!ʑ:!hl>1> R M |"j馤GO`0?cyck1ɿ^ydzkRY\oGsH$vm00 (%5HyxɅV QS¨iR㒧w̱ZÎ1à4I*'e:Vqy.e#%盺>#qMu7 9QڢS~j7Ee r6@,A(r`D=Fd * 't-Vz8lᓟVm@ KK@pcs"C$S-ػ]kI qa<ƀC~ڏk?=})KL]ǘA;BhcMtC;ؔhNg@086ٳ4=T wlzz5c'ǐdʣTki:ypd86pr u-#} ;*~hOoǰdcn_Wm%xe|g˯^-/߸8P1(q?cjѱ4ofܹ`(axKr7Y+Ja.+uWY1 >]Ēc߮{|H2,@uB@ZY]FZȱ=Uh{nZbėP9eL04tK`gJaޖ~D>*"GڻÂ"(ٽ'.<٪u4c>}I^_k䖎`x O(5 @2U6KsbBT_&d)vjl$cgMSkGvM2°@XʑAHپXacbϗ.$cR)$M0i-r:qȱ4m Ot"yg|_[ Bˮ3,++А2\~$EVqZQYsh20"(Ŋ&Jv1&͏KYױ3 ]ױvv!E!w{c$@)ɧaZ@}cǮ\zrO]XYIkf>@why sd_U`Y-Bږ== 颩Vz 8m0| dXr iV;b*.zd>% $ǎړ-]Sj'7;۟<+vn{QjA}WRNw8tj-mH# 4!,B@6T؎Od;{'q2hW @Rf`;R~4-?ʸ[Xjb,5ֲ4hLҤiXM\mzɴ|v67Dۅ'4퓓驝AxDS_mYڙ4YM]Wߕ>80`e&jp7CʸWX)@9-C5 SSmP@(=fOrc#HSo)%ւz~4($业.̀*1 a,2e2V, /!c"Yz1Œaa0cX shK14D<ʍX]/GXk[!Q4\ψŒaaXXXJg&+c9*0c8?8G1\1.A#f f 3K39Œ9Œ12/A8Gue܌}uU'lէ+_}H)=\QN&cY:B%.jȇ[Zfo ~zEIP_mʇoՂDIRUgcq2$! Ӂb%Tj&󰓬1bSu!7$vw(+N^TIn>`UcZ Rj"w+ &X3 -Ԛ6S\""v&pV:]:AQjpIJbfdǃ4=:r0,#@iZt !\T 6O9z2_~J)x+V$fν b7›gh/N3ٙrNc\Ұ^]^ acl\p3gLE2lۂ9JG2NzZ>&,1%U1{bϴ` d B#U~,Չr9ϘO~~L?>9?61:, c:W1C &0cEcLj(ۮ%o@.cdp' SGr/c oM}yƪ3IW|͌+NcHbq:?&\OWVsҧ[US2ވʏ]Qt3{llhF_:8sM]-kr,&ZKVƪ)E7+>c{6^6cs_]b7rc0acLNo,h+#a0c0fV>bߏɟ3Vpp1cm؏1%^*3Omox;++b0c2&L_z=~]kϠ3cquLB 9B U[e?Uw32|-c0cXY)拖dL+_pg=u|wgk\)Yw4ssԢc{ڎA ydжm_?uO70&k|8bk`;1=^b˚d IDAT2房Ul6y}1Ì.O_g׸4*xս1`mFX ;(VeY IՊV*0𤄦N& ]_Ke~4)0ͨJ"u>emvMWʭ}+'sϵs\%ĶSfK-_5.3\ldiOXȃ1~l؇M+2~?r~Hʘ `|~?|C\?ܖ:I {J m=JwCәW-{ f,t?G]1gĮQIȘ.P3K m*9*Eg{';cO-TuTԥ[-1-!c!z쐔u<6VW%#s"N1zChcL{.!}Sٞ$a G^s/d \ +b(cakZ yWVØ|]1ɮA]35!`՞K2Xe"31#أ5nUGŶaȘi%в  gl#E0Jkbc3[З cʘR \y[Ɩ!҂J|"F?FfqW݅Bxv7;񻢆dceϘj2XZl"bwVJ+_/GUK^pAt:CD-P~PY_Q-X('/ADޱ c֓*c,b-mly<[bMFԘ'48Sb&h,NNp?y\Oq?[*׸ cE|F -)"q8t\̒!e?!c+"e6(Ƌ"ƶ֊oNȒ!쓕ظgNUCȼa6H݋ⱹ_sup B!c:Iz3D9A3*ձ&2_# 2BqC(!c/1{tV$n[y=K%2Y6Z>Ѫ [$YSZVIX ֟1^HY* ecZ[ہZ>bTib+3?v|A cy=cRf2v l(A%3fĺTֳKcIt-l"c5q4O[X321g2*vXΞEǽ~|@xBK\%-miM.qsqxsWJ.?^Zr-ak$rmt;ƾ9kMΌ}h+1sǰY01:4OP(>]eU2Jl7c&Mbcy1WB]p^]JƲOz6gnP~}D~j5r[̷TP7ǟr (1q|N??wB(i$c-U6w<%ϪWG;9CQQr g~+jHv0jԁW c;SYHe\%GX9J(?ݠ s~9/0 ۨ'e2}^1X 1F6A5%Vcϡa>b Kn܋wV]vWފ!TXƦ7Ÿ>Hc1U2f}$Pocvk݁Z2S{!lcbH812|L0Y:g52ȍ!RfO?U4zWĒ!͌= XcVѐ#8xy/76+1_(~9WɘŶǔ/j4Mꌵ+BBjKKL--o\!qb5ȝ'3CQ߂Z<&eK9ުYygE,Rn%b]a} d$QNJ~n1:#aIؐSeoyK@m7x|Yݖ15F|ȘJc,t[2w/ g>9]Z ׻~~twQIy72f̺Tɣ9"I]+H#?ND?Ӽ jy@xc3V-3V}t<'a1vsKʀ1avrXM|k5~ F1::*9b캂 cµ;r#-PE 6~ ⮺ Y:ow c*XcȘӪFb;cTͱ4 I31F"jM1 ?U%΍sީmKod n mDfm2<)d}ڜ_86qCֱ3?ds#if;څ2^7h0ۢȞ"Ó&RRG_." [ܐVƞE!cR祲7җwbl9߻xM4RƺrxC&<4Pbc̙m1Vtn$'Hp6sRHf_N#vc8X˰1VsiKFӍM:(nEP[TCx` h_Y UJV59%$I3m@(0R u 0O}v{'q ?s}G$HY2֯Cg,^XH!6R/51@c{E cZ ,zL!6R~/5_9}e^{=67[i[}S&|NɈhg,9c#_|Yʛ;" c"%̩p͖0]LTgb#}o{L!6R~/}cn :v:$v Zdf)+DM#~D1{qџsawl:iHZ7͛%2l"t&)xQ랠04~TbQt΃,X[mvJUT {l%TUj! $!B7>:I۪ˮʪX'9F̩p9jjli凱 .cIkI-  a7脢+l#י킹|HkQ<dsl$IltڂېLx[[<"nHLza;Ip 6rlhبB3,I2قXTRf )c;HG1c0×zLv1r{s9VliH;f6k!qH@+V}y3$$ivynWcσ~6S6I9cHZEmVm8ΟL1 0VTྡྷtөE` 0VX?11 0 RmAa41=XaXc41g,-:$\/w:bNw%2Q*\RbwRy_hs1jһ,RTu#dXPeOa ic<c1ǀc`!y=Ɗc"FD 郱9>< A%%rO X_cT'nYԯ+hpy]>XFXt9fht o Vgt, O-\}b 9xt3aRlphDT\ham)c=Bc./ǖ7 hj]Bj[jϗ]|ƌ=zLlBܢvC`1X.tUΜ;|VYcY3&UQb112cxy؊sNJkc] =F#"`,[ƘIٹCCs=_(yc7.:Wl"a?hh@ ܌xO.ϓ:H}dp$U>BhDR$cV%*U=׻]u xIBUl6QÚ M"UAlU YA-(dQՐ&$|2^vg:3m?L'0thϙ|MklZpUGF*Jm U|_a3#[D%$?Hx,ǵ=w=i?&,Fc|ߡy4O(RȬSQSQ|Tq^l H ^v[,;ĉ!7%r8T 9h< oqOEYo;+*"S|S>J33. c=M Zz%$?H1+j %n&?&Bk0Rl?djfc+FF B~:m(cۍҤ9n~Zo٘w`Z5TT<ƶIm 4֘"kJ~ƬEdLEy!Js2y>ɭ$d)&~h[521_|S.$:y߅VbSq}Qc'E3vlU"**cxght璂137v<~Ek?cj1ū.j8H.%0F+p}Ś#ؘ7vC{툱#x c\vؠiL0#؈kcuU";TcXڙ1k0&g"0vM{]5Ⱥ}uLy?V' :14灩myg-fY?3ܽ0Vl^1RރX12U4Xuc发o\9`Pucg[k_*#,@c"卍O?F1+1g2 [u9²m'Zbmy9 ٌ9_G}Ss8[[;rj=ac`cG¶sxr+^p2L#+L?7KmЏ~&l},1#2Ȅ~u*6c:cXFa9+cESFS1#2xc-{xfi6'Ȁ 2*nُqKT0c4lGEl^gNK}c;b vXl̓7fdcL-floΰ ?tNbEAp]~Nc?fq/9x B;Uz +~`7A 8eɂ&e9A6=Iβv4=5B_-s[m]}03_l$F֘}36:99' 4:ʛixxURݟͅ#?(Q0;^t q3tCF8m !k(_jL[i|! W1c;m<\ 䏁1 ]a'urWwvѾ~ IDAT!!_A0c|)c``T6FX,)?d :1j5f4~Zπ10Ř{ f?F跈 gy0N&Ҝac`65X}iU0VT10F1!Q\/g=ഏ!~̤Ơ#Xs/mG8WIXc/c`lcEc_3+[ VĦ10f~LXC!̈(s(#+i -9(hQaL9oڲ :ƊX0݀X0U1PznocE0xL0s8n0>&e24 5Gt10XL rlwfAXȨnT)czY/,Y1{ 0 ㋨0~aOC\ʬS~uuGR}T/M)^oz[Qԯ^ fA:10V=>11ч$w` 0ƤuxlS[қ_ ƌ2FX&<ܶ` 01FX&sM[EfM"9DCdi*>c]6V?#<<9 cZTUaMnƎZ02` 10cl=0f*cJ`Hcag؁1Lel^n<4Иu3>baL1S[(1M,h,2p;,?0f*c5Tct3!9 0fWeUӼb+c`ԟIJE˟Lσ10fcObم V$(BcM&,0iBgv5Wي/}7GX1܍520X{~ 10ƴs:!^;HX1wr>S%ڴcdc8C{<:b+{qŇ4f}}Y9F1'N 0uc;bo mBI[y A6`]\| R` T Qb)#[rv%++.eő M ;@9|p4%Azo|V2=S-nQƴ^L~RYۄLN$%NH1gUn}Wm)azZHo%c213.*NYߔ36+dQdK3Jc<<OU>LjySJ}؊R +K b1v:2g-e-2VӼys̯Hv)x1Ey^;,qSRs`K20MJjA(~5>?~a LjySJ}ؼamas]XV3FNp4дWDbRdLY _ʆrq@y;ƾF).pkc羴U:gLjySJ}L`IkJ$&Í/M $! &aBq7!5d3[XO" (eV%ݨ%l%rAN$u79}ųVTn1cj Tk> ,-Ejn+-&Dyx81K`Fl yDg˝_zӛ6)FD+H1wYb*B)^icdb}Xow vK+-[Gsm.uA&( !1{z-UY~H%߼O? ]U.i)c,Șw@LH sZw/@nqsCm"'ppg][Di5FH,TT6l=M].\(.eټcbUzCLO4H#z,2DW=f 3R<Nɥ5Ƙ~,Ƿ\zݸ3ba A,%xvNbl7[JoC1dN aPVKaImccM1X MvM&nr14|2Vet^u1'cpJq|7YT|`U)4glE 1&Y.Rc&7{9ݾ?Ua(Q:u^k 4{p362V11](cSf54xyX[u+F+JE@+V)Q:Ӷ2uRsXe̛U2|b)ca+>ez܍~?~)e2-uzj}O3f s=/,sZIei%>V[62>dNm֕ż)jc\ϲ_QQLC[AJ`l#C{N|1bޔR_a3,}ߙiv+@Y t(cc>SZ>ey;Vxi4vIt@(99n>26pq뱋3槌QƜ+L3lWq.D-c8 yneNV1'Ώ ]%+1Pz1D4vUn: #vQF-ĸ̏WI770ĬqtvCn1iw8ngX/0vk97b^5a )ٞ⦠Dpa!;?yTǥ1] K23nSe2]X;{Mڸ0-2rx?k!}M +91Z{1X117j>?m=Z8$cco^gP4^e]Xd['\X%*EaF=FGXqa[4YG28ra&xlA imUCҜ1dDc5UzovRE_a\Z͘=3G>n$qIÆ匜 BޚKiݹw L >8Rml2VI4K-%EPGͰ,k gȥP}X2zlIB8mMlʻTZ*X?3fEBo[fcABpmb N:a+pBbbƋ1+Z^~_KC61!2d] Ec7P7hDB}_X. BEOJTq1>5BB)c=@JR̘ Y`֊ Ye Bz`lv-2[-6~f̊FUM9CVB.z ]d8#tӵTXczʈb9e̊FVTB0,c-@󘉅|3u| ثF6>Cr~}ܵx+2O{cO}2[sC95^]b+Xs110V10m0̘[Z10q,Zc10V UWjC̸AѬ;~Ri셾 XTB\SS 9` 8il.s9T3]2Ίq!~EǨ*bh!Q Kʋ e"$*Vfٮ9V}ƇOߩE+ IL :xǘRR2{ByS,fNB$V; UB=v\*nOTzgSS\R 0ゲ}pf1&hVf,)Kfqluֽqѹp:Ɍ9q1q&$sK%4B8;m=̡B3,f0fynH[SϸT\` 1[~2sP){):crRa[K5OB3\QJ\*-\_\*0JW!#.SvryK%4*1Mrĥzo^F\%nƿ&ڽTB`,iJ1gҭ٩3hI0V!XRyK> $)ƨ4p)[+%(yzc蓕XIVGh…2V\]XN0>kfeq&t&d^-(luʀ1fZc%Cef^-E*)'+1wn2A ébX0>Yٌ+N^B4+Wxy -d.Dʀ1f]qYȼ[DBT1 CĚǡ5+ō> 2MRErȽ_Uc4+%&bd;LFr3c`,\ږ`}P3d'Ϗ꩝|s)y9YSmmV8FXXʿr؍~kb5G]Jdl~^Uqynhc\`ʖ1öڱR;' FFR[Pj,ڠϟ0S [Qz9szb^o=>ߣqL`LokV-mWUuÖ+[&)J_' -nY:=Q6'lfc>7*nd36dcX\QXw^U;T$[Zd;E7n~GI~,Ba>u5ٌ5J7K‡U*^XfNC0.K+>(8F^R{4|ؚrJ~-cƠsƘuSV{`, -|w ,ņ%ۅP '!ce@GƱUZϼ1rA B6WTs'_1O M S\t.P '!J XuZӫi~wd:}yê>2Jo c\7axqCsp*0)ڽ7r/u{}Ot}:C!3z S,UݫՁHê7uVs]Uͣ0Ƹ-n8Fd1T a ZTE[z{[g`m&kqP Kr#*0VYZ AR^*JfK&Lqѹt,"P /JU̚,жO1T0^ 9cչ0ŗ/\X?c"жD낈K%4ңWBأW9kԣT`-~ys\!.+G~Yjq#c30c` W#0c` W#0?`,!.z$<*@ =bsU+!.ڝN3Xq<*YrˈKu!Zbĥcs9mrx#/.G%E8dĥқt}R 1xTҌKc2RE:;۶M_/Z^\*0ʋ1qRz6|ƥc2R0Wj]'.U?LsYJSmtI"TB` .cϠRe q#Q x<c1 c1 c10 c10 c V`AcW0,\ `0 `0 `0 c0Xy0v{6}ޜX·- ~IDATSUIÈ<ʻHi01vpW;w@ ![TU{"2v^80ƚMX_ڇN9_߻h>4?զy,۟V19$ct48b汄^xO,uE0I4g4ZTfaY;37˽؃DZDg}|Ɇ]v|xWf]UGsN펍RǍ4q5Rfv.b.9|1/aXa}o (\`!PBpbz"N'!pH ?*tw$cEz?>ՕP^XD'mߟ'O;mm&k_^~u*yIY[`Gȍ7o3§ُO jHȄfȝ) _Xs N h};?0SN3: d2Uboy } Jq *1Ȓ2^D'X兂1~ҶkNFӁqL85B$jo?7IcAɌ?x<,3֌&u_QCo5CD;aˏ5pĝx#g?IU2- mhgGր\q9Dž7'}(d#C֕m1։Bc1։kN$qAu1Y=-dh#X(t iWǘfǏ #F( ZZZ%eؒVA8X!1@KcI=hBZH7t{DIT"Ԏ \}eĉ\&7jc{5p' F2fR-ܔMnRD+W3K(b$C>rtJ|C:܉fjX@8UcfL h0X0F<6=SB_D8+Qsmp%М hF=buc%BMXF.us~)S;.&712)9]‰ft9BN 18_.tn΃mBhzlto(U7:0:5< 9K9)՞ӹ֊n9bF-Rg̹kNo1 [#ԔҴXqfjA=cEW$ X8<{33~V9?wmHL#>1>gkJ0Jwj\N 0 '#ng_\wr6:K)TW| 0A` A` 1e\j6Kzeo͌S]r!֊r1(^ۂ+_uQk1xp L:.j&rKQl cрZ;exn0gt110100VDCc` !^` 1010cc` !^` 1010c` !^` 1010eư.SźTX +:XUk X'x;֊6;zes=ֻG:=Am$c1c c A A\cc 0A` A` 111AƆ[S_p//B{naohxŮk68Ш]^'ϸrDսڝc}&O''O^نp>`l]mق10͌Њc` 10c` u1%Ƥ8`Lc`$f[els1Iwn`12V+ Tr@&ցBVNVxrof~ew׊nyLy쮌ʍ,^SxW[\dQ+V QQzv(cSn]ٸscYO$K_~n^*1yKʆ[_Ņy#'b %GV+Vl:` =61V.hD9x#W$y'# LRó1J rX ӗyX{{$YkIRhi6xmFc0ƺ1.=&WzcTpP V}9 X"+j?Ń7R&jmE+nn XW36)/ӽHE:Ň?3aZV U̜j1b5JvTKƌY1c.a,:c,mdlR49*v{)Z,F?MNR7[QQQOTT-` u10&>i{;t/iGS1y!'{MNJk1pQ@qFzNcF[cfgL sv Osj=lE﮶lfƞ"0c`ՌjElc` /c?V4;wwe c`kSZl eY` :=ro8cqb 8^h՞Rƾ]ziݧ`0eCc` 10c`n$0$0c1f\UgLa.1l` z?I</-`<&_cky0f/cG)ck`kmmRXDY:5 f*`Lk\cGښ?|f=B mffE]~"W0'KSی=Jzcv2.ZdkM|vv}dU&rfQ`M#$W^ů԰x'W]]8Fk]To?o1wWӼАQdU&rfQ`]ӑ3 YpY6#Z?O O8ʟ]}bJV5(뱧0_dGn `6NYfM=<;kkkjTJتgMɑx4d߲pfN{•lZ}hZvd#NArdSc2*Wkx?ylQ)Tg@͈w] /. b4ԫq6޹ݼz/v2Vr"R(e*썡\줏NN^Kn tRNS@f IDATxkGǭ0\BTDݼJ2 h^uUA79.^!Ś\"nu@˶ƵRsz/D U<,KY]|V3oami!\p8ͧ@ öXG%S E O0pFݧ*~:7r8 Mٟ*끤;_旖á]$כ~:e΁jŽ8 $c=Ő^d`-lbNvr2ȻOMUdye"]-%U֒>e^`T1$[]%.]I=o0@VAGDZ[r͈FB@KXWsU,#jRg#jrFYɤ5wjVۂ ;l{aj8,AI2Vd:ȡ46I RL 9oC#i(EBTa7)q)*# }UU^ /\3pb%P Œa=s7(zk>^0< z9Vɉ94о#EiAțtB!1'b`u%b|Ή0bՕB(U9.sa!d V_H$2x #IBdRN"ZNFWt6, nhꏑC1!*X |e,} dw){*FQ*Oγ"nmr5V_&`qL[*lE.Ai,cVy4`g)ذˍ^c(jDZ}z$$9n";[eH=yLNQrG'uWƤz[d=f?հAEDҋ^4dT6Y9ctyFѢB')zJ}a>+.9t(W6!a 1APDmx ݽJAs{AE£856AJZ:^1Hj~@dBϙX4tI!$nJI@+v31;p8y쀟qq85=vZ:ic''| q9L|5{Nnrc?o} \T;0,۟_:RAH-COP33jV4rQ8Tvߍ}Μx=sqX\sIMW$ j|7+|/ߺ)I/^:?~=7wOdǏM_ogK0j#t?v$nN;hpYVaDtLgn;gf2OxiGH?=缑h2}Z GDn\?/N ɗqx8-DF2o Hh_=3\y8skD0|(GUv7&u8N䃉aDt}037nMziGm8o"UFV+⪧BǾrn?ط5}vP8VuS9ֈXRrZF:EWd^QC{}YVv(-ncQ@]m.һGveߏHFނԃ}QbvYvijb߽WlM1Nuac3Is4ޛ@PGP;&cXc1Ŗ-k7 8 pLVT(* (#(`:V:`;jNؖU;x6(6@&ak/0 0mǢAZ[ Kyc5犛Yr nY}lrǔz"0QV*91L"NaT¹c;ر$Y_3I 3. NI 9v: qV`.n$BӂCcI2+'w OIȄ>kdBC1 cd22 g_Tw 7êru=ƎMȨ\Lm'Ӏp{1l0IϿ>e14f[Ic_ׁc@ۄ#F:{:Bw|vSs٬kLFYS%=Nѯ6RLm$1?GЕlD6|Iyaf6kCu mYlroWS5sLtCA)Uֱ~D"eFۙf6kCuqlcpzcS+6SB`0w,%~,~ 0HvƱcc1=OŲe4atbqcG˥ $]`Q[ne8;_d>x!v)g4Ic{c?OaVo5Vk`PJձcFX Fnwbك/>:֜9oIb|ؕ-Q9 J4xbCXA붰1ɤVuLDIJ\sX#Wu'lXػ6:Pc ǢZ1MHgKz˱b`LcU$cUe],0c^]秔 ѐHbc&D** a3P8{a4ZVj4"ϖ*{p:ܦpmMXgan ;ds I5"(&eǶ1{^űYP%L4<t1yQpKXltl'$$ᵑXNJұr9-- ;x#X)B"?lX IpLݿ?6LY.ҟҡ~똒R\1ً.L>(r|Sc)9F^B!WqLnuUEfE:D>/U9/ 5P[1^ BaF71Q|6K-Юl˅%J@Zd3M159611>Hgvz U0k' KpLڎ8fIQDx) vh91>tX\,S {Ogsf9Rc8&Pe35o7}v ccx VY]t86ߞ=>m9kOJsZp,XWW!ǐegM>gG׉L)O`gFבUj e6_M ƥ4תǢuWJmC Ԗ82ݎbHw }w=z:kX›zt =׌VGh㻴g]%/KP_b*"'Oho=}Ⱥ9ҪQ裂[l=*M54B8q 6\1z'r[O1J!8+tlG| ű8rYp_8SO(=I6|_TԎR1~=zU%/ qlcJ;/W'\1l֪X*y|yĐIձoI+ˆ31p `Dc+wL31p `DcH8#p 1p F$8csF{%B =yq:F6lslʱlqŴ!{.s~Ct"T{Eq:VTLrlqʆlJ&昶Xc߾Pdı#c>DzpxGEXO̔A Mḏ-=<2jѫ~Y f=SDoGnK2S)41zo \j)58zWܱ˱c'ĩkLy1;{vb$'| O6MNh1](z٨q鱴csԵe< RhuL{65^,[=N[[xߑw]΁cMK;&{ƱJR̔A M0Z<]}-z3Ƚ}?Ew{hhm4V+-r8~ t;$NE ʣDq(EtE0MO0Ogo>{}f]H^ܢCC=:sǘg6m)0b.d8vPw?m$gѕ&R#]]$>DɇRKFQ}BNDPfMZWY'F>/13`ql/$@q"Pr#Et_̾yvo;ٝg3$̏gٙg.+'WJ P<Q(RќK營~%I˚zs${xԥw%A6P91e2Vdr%Qp7N-bΊ۟d/azIvz蓷ypdCa$k#ɘxRc3:њ:sE-0 d؞Z s^gL;Va_|x_gfz/)jc?'aLgOz`?!LvS{&,z'3q=`\Tjp\33n"nFa[][q4f 4!|?2yLmG᲌ ?qNJCC1?Vt=N Nd.`Rb1C\K.uIGzxY=D^Tg_Z 'F,(*\՝`k"+xRc\fk)aKler6W4R)dM: E'gL@`7|<5_3p؎ 1}-Tf71Y >ZcUO1X1;YȎqF.E>#W*cUc+c ;&Ø9c1y.NHzROgN*U9c1O2鉁? APZ*,Ɏ {}+~F6y<:Mce3֐*2rq4Tah(f"XC3zŷš̖Os]l@cMws%eCicLgt҂*1b]aLlR c]+IDnaVe< k훟<<؆C%.Z:#x.\wEΌq+PŻGScqX3}p 6:]Yc*k\|Uҗ!>Uw"p ̊s\ヿoAv=F!ƐSf,a` 8uB۱=a6ӷ׼[&P?!cmO"ƴĘeV-' Ύ/ @zcx`czeCiջFxwU8= zn|VHbدbT=ax{n"-tb|7M։1)%:U\4Bbv W6,:anQr`"+`0cx}N|]ҥ!!֛&-`,44ocj" U>cwf?NTf8%T++K5N[K xEN֞mvZZ DͪF~ q;:MVώ+bL;}9;nKX&cb̧O1_*N#5+?Ue"]t~tO cb==~(m_c1XYvZ~؍Վk7@n,feLʹ 1V:fc7lk3ܫ[ oO_GU1dǴ3V·}Y”9p*3Fϱ1cj0fȎG-XB8.۬?"1bLK%7 }*yz:դ-sl7! "Čv IDATS7V曣(#Go~A÷GGoT@[S|7q8&8"WЎ˘qUKPu g^h`~,'|ͪ#*$d% (cJcH0˂%5hDETr1~P}@!Pzu>LuRs!L;VUƄyE2nv?DEмbU\cA5)29}N6z D߾>NTKP]l?}a5TWA4`ǁ%Lp^QTDu&&Suߏ5b4ؚG{D)E_&*zy1+3Ǎ+-(;ĝ&1|X tO~Ӈ㊧K:d\;?}L ߺQ1`Xuc1ncc1`ly cFyҩy/b(3#g/t41௨d :}ҍ2191r/leV;*`q]kߌ ~ D@6[4HVxB46%d BK'GIbL_ZcCu[b EٰYQ4|8÷e7c c(eQ1S#i+$<鲑}pK j7$4$x "l eoU#8wHc Փl@c\\cWƂx6uc/tZ<_#{cfת51ʏlA ^.IF9gLpp]=s y:7zrٝq1(q1mS'1_uuF:36^nSs]/ƾˌ8. $#8<1%qDLe-uawYF2yrU#6bl;FKu+.og zj{MMҮ*XvȈ|L5q,/ 0i ד1GAg/ B\;pŠM:>oz+nyjUۢj&Ef :zbR Fp&1gٌ9$`aS0L8sH cQ]:2vr7)eg~RM.r.+#gŧn+Ars /y7\6o cӏmf3v9D!,Y/q%c8Yc'HBM2V>CԌ-F7-u|:gM+Xwwr);'yi >Mx<A CC C("S_0dM%QdclԌMalJN0i`,):ǾK*uD}4^w:>+bGZT$H;elz1[1`%VQpTnooc0nT1o-c:c2rhҵW+q+:gl~ *c/[c5AO Z1t[\u$u?>~x{kkݨ~|V잹Tw2nG0v 5J:8'0v ƺ'xMX{ `}zq̌8?cŕۼ1`?4RU1^YI`L1֣&!~cYClssc. VcS 6۹|2/Ůk TT}Q֮аj̣9hCl3J.^ާMkalb8"cX2֩-31L2k䡟Y}Qm4nl+W&tdv@"G>,rW1P 1X.Iom28k0fwMF|ࢴ˒A5Χn,Dz1PLV6V1fvS0FBcw*kx3 "~IUD !rcq5yYuuZC1`67CUv0t[+|ěYl4=ı˃lɯ0zpL`)^]_|&4o:9al'FdJ4ZJ,c q~-c McR2a|0~V{>e8-Xk#UnT/ WxCxm:>>dn~[EGP3q,634kƒ\KV&cR>Ma18>2ҥ1[hQpdFj4}Fn- qq}JOW0 ӏjJ0޳./ lʎfa-1fvwSbl=-i-V+lW.W|i:[IS=9aC D~9n8sDX`zk_bYK6V}#mƾӐسhK-3.kEv.a|ŞcVQslkThUpN -5;74bdm$йFm$}/cgŏKK*Y>%UGq.co> GZb}NE 0blddlv~zƜ׍eLEt.cZc16^Ec'y(a Ed,:jws;J qxechkbl;gFb.nfƌ?{Өoq(s3^dՌ˾imzkc{޲[r Ǚ#yW+5X2EC, B\{(;v?}]8hXmKzc5ƦA2R-JW΂skiK4'c3e I?ZqCV>51;[TC̥y9cJ €-5:^E17*mH=:'0XHQq 攌aoFƚb{%i%CY)Smcԅ=` P1;Cz\\8 xŸ'P3#oo[c-R5Xy~kۃd2 #pĐ暠gm;Ud?&^(Fj11쌝xZ[ W(ck7j$Ɨ [kh :;FAT 8rD71X(NxGZFubWXcy{CO[c%y5BmlX.D58E9%4(SÌ5c3$N"W` 9y1R]zhH|&50ءa1=HWIA*NmX7|dFԐ`̽1Y->κҏhZ{Fy+W>dp>ŋ#r>U驾`6pÿ\&jYh6 cǺ0 u&A-Ɣk=Dl8ѹ :C>"kg 3V;c-f4-?֬ :1+Ӹ NJ~GhrE"h"0cV+6+cKuÌa?ք`c1c؏XU0c1F kL?f8cP'Y ÌaƬ͘z`KQc)#TpHC&U$5"cǠKT* q0d+y/j ŝNi,b `!7ƣv|:ii9lu:oro馟N0yOu}A^kP6C`Ɗ`! Y1-VMju'DRmCNg0 )=us2tFzKUcgzKtdb:+&l؏5 cVUR9cJ?ziYJKߐUX+fL7cp;X3)F2cB$& Ǫj)40HoMEd#7n41,voߗʅʵI$s?ueua,/_&=T^H"kH)XGA1ηCv8I};i99?~)ͦsNi:*&lMf9Ʈ 1fͻ>,~E$ UcpX޼y?m lՓo:|jQWñtɈ}8 Gآ'OE J 1R_OO{ez(k`Ƽ <X3{(^DmE)wmg=ݑbf7fA1II!k`hjͪVq[EP$xUI/ٶ"[!%hH1 7@c^a'6R_f41Fz oVc>2ۛqal"g!vo#e{_-m߳q 3Vo+Zߛ,w,AOKymq1l^n]q!kEĆHVc4㞹kƮ}{^+f~3V=13aܖ1ca}~~줟U0c1ǎ0c1Xy`0cեM]1++ZcuExИ V7pOwYcŃƌ޽zmv11@㶘zm9)ƦB{heiz}N"w &7};12OOǃޚ/>mG`:r,dc^8D]c*tF݌3){8=OM@[Aj~J}z{!X~i f Fu;McCO1NzkL<1jʡ1:+!y./w2E\x=t4TVMi .3F devďq`=bǩ& ." u| 0fJiFMb#c34̺cfZZ`8cWDC3e#BO;Ac=f Ki[ķLxc'08cT.Ki~0RF!.mu /fUsc;˾4k ^Pֽcnc{{5136Ѽ9X抖+;/'̛ 0f1O _U30n1Ǟ7gc%=0f1OcO0r\vne cp)cƼW6oƀ1{negjvuَĺU`/RL#VcĆMm}Wl?̟ {Dt{E&Mgw[6ed=[p1O1YY`l,ОZʳ"J8¤hWEw$R;]M;x oX{11G3&%*<ޮb2Nf_iS.#ήGHc;cKfX yvbtI*1xStLGMc/r!c |[lj+FNKsEg?1S.Dxx-a];m cHj-cNM`utR3R5٤Af0yLp dXq 5=h`_k^ ١A&Ǵ-`=f1ԡ|Et(c63,`,rE5%1` ١A&3m01&gUƎs-` S5ڔt s1;4dƴ-ΌQ],q(m}U+jƋ@.n1kbh[nKgOϪbqdeaVWS olc:k IDAT,;vzZ,3)߽yc##6RgXWzkb ǀ1Ui\7vEKy\뭉1ƀ10qSFlB~;~0\o0梫Dmǔ^ ] zض]Ew_=36KbcXMDlWD9I\یMDL"cc=ylFo==zy-'~su7/} Oh'34.0[{s,a{J ƀ1ƀ1` 0c0c0y1d id0b6@0Wƀ1Ŗ, c0g,c0X()xKUK퍏$>j[<{6Ebj;D9<f==sԏKׯ˒~.I]. Mei?HSDbXAFcG 61&~CƾMw߳Uڏ4%J?t`n O?uuhHAQ538XQfJcˌ{fL~[cEktԾݳUڏ4%5:豍ou]ft(ƚcCL@|c&roWJk6Mu{JcQb\v̀fal@H5!x! 06oJ)80M3)aSj(?ɩ=G(n焻 7y5i?T齢:1 1p3^`,n1sߒ$!Bz'x[ƂԐ>я d?pK~w݀i*Np?d6oX*ث%zJd,^yHtcV3 !%? }AZɌcc>e,\RܘaNkZZSqM3f*[)\+^*)Z}TLGV2c] s>Zݘ1pY;Ģ-ܑpkz13X[yh0MO#vs\Ue7X1c)EW(HB3x4FYI4]^)b,`GVRec+cy$7SJ?논b3m"mMz)ոR?hPN8[cy"ٍ52Fz TBh;K"v_S㊸L51 ܲ?\9`L1Oh1c:d&\˘t4}X8>}tV0c0c0c0c0cX31UNIMc0lÅM  cfl ] kclm X[>$C-Olc$ c~fl,"'(>ևYc9/Q6q Rv%]tGRkl?06ƾ]B2\>fZe|N1B况)]IݑHmL9gW-Lp$w-$U,q5r >I=T,$GAc먁u^β`Q?\rPʭTsEb1USRv];1Ew$1bC!`IW` ***hfL+5 cjHs*vk?X?0ָ?&^fsԵd2izt$=0F茤>/p\1t/{΀ه3%߼I˜E9Ke޹qeqMMfiҚ]c nC~qnI ̊k4 zDj%"0rU1k)d_пhqHz=b43w\?9s&K%j>֧ |X>\R#gh0ך~;W 0ce#ma 0S>60v>m`JIUrv B2- HL1¶7fqxvEgLɹȎ}pnӴlj jRWWNr#09#F!FjC2ޓOhѴ⭱+;4:P(xxqp3Q`7TG?\4bx3Wȹua<Q"w^E2'J`l 9nV#Wҏ']Ͽ')fi[c0VU"(T.*,N-#l[nsVXM`Z4MyXWcc`e #Z IAJ\Md(h~uv܏On?b6V56c)kS~@R!비GDت JÎ}ftU>I3ȸ^ kɷR@"cz0" JH2R_0Q3Jj9ڏ5]rZEsJcLOcltnFy[c1fQ(NT"1F+uEᗞG)c06M_` ƀ1` ƀ1`"11` c{q0ư'qƀ1`[,UrZhE` <3zHeBZB|vU~N.̘cF̙P$*Sصz0:ҎHEgu;>b~NU+tk̈S8.Z?:L1>62n?Ə8,b5豢zr_ǞVXH{"I)[b ^GX^~4we1cbE?E4y FlQGSۮc}#Իr̺2`_Rjҏћ2ڥ))Tg.Fؘb˗~NU+\cԈ a,e>ForSKe"ǿu4S̸y,u6GmCg AX9 +Ʈ隦_ 4c,yuE; 5B)5ņlW Nbf%:{][췛tÎKį"v@gz凶!_A$|;NFڄ,}y+'v_J (9['HV:|Øg3vȣ9x7F~Mbκ"6/ys,=a=p&cu!u:Qj0'{+^y XZP#cg,F.cxu ?0^)E ](ƺc;ye}FO|~L [>I5^^TJnh+# 06 ƜĴMӗڭj}19SDQnؑcǦY\zDյvӶj˾@eb!$?VDZ3;C?ַ/+$R|f]?b`,@?|̚ ԏ&cTRN3bLL121XWEP'9Re#6c\C*51kF`,pnnXVWj+cαXKUi] TPeuca1-㏺M1`Rj32Vދm(؅w\4 AmNJ~/n=|b?`f6600Jn~_[lƆa {c S`,h2~ H?c0cQ֧`9T+.f22-1$" Mw:&R` @X,o~w*f%FjcV5Du݊JX~^":1 0]2FE&W\"sJ*tK%,X^'15u0%1`<rkfY (^J #$Z[*a#FC38)Ʈ?Jx{]"Jd{gf :4+ڪk?t[ ֏KL>7XP CŚ%^:4+y-Z^JcbGB1Hhs"]r%xz:-F\XP?{HqnGI݋ q/p PXa^ ̛ys7'zü! Ƌ]#&8 3aa]]U1t2I'y`쮮tzfr#G\Z7]I/%D1!e3&J[+=p^|Uջ !XrQf(Yyp{kP;WKoE16ND)H10M\2pƬ0Niݛt{lXE3T{ (>3} hk[d~fJ1wtX#iuSct3ٮ~'Sk+4ʥ)W|E7ceb_]YAb',R#/7Gan)ccjs|۔1vH̚}~~QJ%/gwygo}Q*.ؐR!cc-6YY/ώEtn#iKҺq(v\\0K}A1`KKY`.2E-vUYDVV^4VeOE0'x㢖 *9RZ+u^Օ8D0Wf UYDV^4VeE0ƛ1.jqlUYAii:yKcUuoƸE4J\{+ƪ\c`ls]~L"[d5̚q106ތ뮈EWd Ӭ4"[Ҹ<0411{13&-LD."ߏ1Y BZD>01e]S7{13&-LD."+2Y BZD>S7 6~c~ӹ R1U9`l E0s_-1}ٳm=ب20_iպ/غ]2֑ؐ32i&zĘC qcD|^G랱g>`ceDø"^~_M{6XH:Uh,\ʛUb"{0 <*[<|K6Ib"^=<2`U:U1062fotίjKȪΘb{|p=c*[NIB0(3ome c# z0G_߂=F?106 Tv4ccEoWy>cjo;'riٖzX` 1e7A9:/bKZc`lƦ1E7R.m58WŸyݰ%u}cn^myS~#‹yH417g_\=c}rG,6U;ydLxǨX+b[vp-0V {j^kvrH4DŽ㊬d5y.o-%8ט13`lÏoKDc` c` W$Zc` W$c` -c` 10+-c` -c` 1ևNi^V106l.?#&?106E"|u=V=yY%=bT106xpB[r3.Wȣ,!+"!w/Yx"qw4߳]fЬ؝sXH!0ƀcB>KBDang,;'3ӉbZ~B(B` X$Tf!B2,8L;)ߵrbXφT>cRLYsx0F7wNTwmv0͇r+r\EYBb',R2GD*y c`l<#+$tzW^(ݏѱrUb,zQvnݣTU*NdԽ=^$l(Bb^+^ zq6s)1&Q&T.NdD)i<cϘh1\*]qAIDAT00'W$ZZc` W$Zc` W$c""0c"chc`l|S~C|ΘZnX?bbHb%cK~=f^؏?F7\jo^oef~Ȝx{70 c^³R!#` !C10@1062rbfŐݴ52)Xz/mMNڠx~U݌4;\╇V7uy|٘l^"V`-WM2:/o+ʘSoL١ч vT[Й m}^ tX#cN? ƺcpMNSlWI 1綂-[WbX@zdȝB X9ו ό`׊β4Lz5iZ%h5il;OՍeqU[8o$^gw2__߾ eWqf<Z %<}}ӟwu|~w:j}3߇IP@?n8\/]KX+ƶ@e9p+b1E-[6S7%{V6sV {ΩY3~ٕrxS3j? LE'dU[c?qȤd.W/7^"v)v%!/7Zl)#lHU$6Ѩ#DE@o, |s6W]gΜ93GI|љ9gLs3p'}-bV:ymh5)gI+FjInVqAZ >まEV TB#l חc]j7)t_I~awiA6rbƅ7. eăouq9nfs;S[G+IJưCI6@7u[0YV~ZH2\7 qlF7/cQVYyc+h`ʕhk?cbٮWZĄƁ+/:\M ǜSD cWWA7tMSS'짅p3'sZ{|UBN-a)Ce?-.s_Xh|!I*]h4 D?-5coEb]:ʉ5^kǸ`;ʎIFʟQ1cHkb۸1Oq]p)i!S8hsY>c7; }1e?-ci.=: zvL2<.Xe6ʼnoWX ͎ǸͻW87P&U qGtY|p/`|e^P@+mx<9@X Q b=}Zƞn2M{-S_(1K fu5KLz*q:Hx$;NYd+fR\8&{` #ccѤ4$WdT$Z1Ac5 cub"jw1`qkw1` ƀ1` +yч%c0v ƀ1` Ơc`ǀ1` ƀ1` 0v 7cC ` *c@0}E+c0c0c0c0c0c0cdf\Pnd:9NV['F-65c"OҴF`9v}{uA[U|atڊm4MلƎX&PC&,'0f@2㢊rKәW|atڊmZpdY7dLF ,Xg3w%hs-W|+f F SՎ]ӎLI: 9 X6RH;4ӹyk}xLp F xL͘)}iq=}^+љ%NY%hs-黷ʾCAqY'|atidzdžL2f"l ƲшtK%gɔ(:/NVcxf2='LeV"02cc ` cc ` c0ƀ10@2&,cM6|0f0 P2Jsƀ1U3rA۟k ~&VilU8c-"e[k?>J]Nť嬏¼#Ս1 c0Vp뒌M:@ KK bM%߈>Fۤ6D'삚f׏Q kc3Ua` *c{ϣX_q҉6ccOB)?]z=u.wi8 kRlnVǔ3T-3b{/M9)ۇR佷J9@'ez\p11`ȌB3Ȣ5mm:i*ØӿDݾDiBN rIyՔ#O-+/ c ˜K"c 0fW^;5\Y κ[s-2J3Db~&.+Kƀ1C3F.OzN?ZN*}#s'hǝn(Zcymی8*1XObC P)CaYѠMjR*1˽1a{=_eKn9BճuV_}~H>%[FI%w[3ںo1=c''ŭ92-aكc c[r[alF7O0LcΔcf7O{ƲkU` c6p06+ӛjO7eCMblWuũQ~W[.JݎMa cأ2P[[cXR26<1a, c1n01q0]cx-nX,%c~F?1a c?xdLƾ1oJcf30?aoÎCc1X?~xp^G3;_LAccK`Ljw>f}Ό0X cΏ<7ѕ1%4덡065040V-X/ƊX*VD?&cydŘ%;jGl1Nd>z}K =%6oJĺbVϠƞ1Y&˜},7,ƒ},cǩusyta|ݳ1a,19VmB%{3c>1%4{ԕSk|:j1%4Ƶ,n;70e`wTXQ>=c1%]nGcr:&}X_}cXcmh7+x l ` c[+b[1a c0a c}oc^~ŝ-˭vVث8mIqs$j1a cˮq1%24Ona c ڪ:Nn[cAcqRXT;K~EmOc]Dm1jN=%Tn-atc̽* Ş*S'W7yXt[gpdeۘ8̅mr.KVz{% ׷|㡶ޯcfiF Βg*g>4?+ƧNry O'Pӥm8VY05 gkU3#5Pl?8^^v34\ġSjYD\zLkl{:clS;kk*xk뵵Z!2@ddCW sXj*jkǧcl9ui,nCt^k:iJSy&_->t* v|fm<}'2601ޥzX??Jc/;/.uOq'8 ; ]PZhǷm^qc߲cjq˩ &F1زO3fXYJ ; ^5. w|ַJTtj1-aUHcZ;yNwƎ~cO;a7$xո$6m1㹌] =%ƵalI8iqRtis1'flҴ1y}%Xc[LcqR\_=n`xvs\ZYِƯɽԙc`^M<4oTHúý}VEgM޹6NYľbK٨ɑx߲oevd7h#O,ZjP)b1MEvzkˏy֬vƔ7@ZXӫ{,q6e%X xhOu44v.s-|0%$Y8h*FHz|i\n]tRNS@f IDATxk0M;Hzaj ]v/<)8?\^$NPqZY^:"++J7=ʻ%ˊ\}O3@kr ضm@⁐l2Y ޱld n[rC%e]!no@R+aٱʱJkaX.*j QNr$sXnŹ71׋v0&ĽLcQoƢ`r 묀y֘QJĿzz*لBc&buDq4Fh)sjVQMk#QԚU#8r$(AF0gdZ'PlD#rٓ Q%̽yܯ%0l-<0 P\#`@nh%rZ/48uV+<q#vWn4l191ju a,`Z2Y(DBF1I%hQ Yp4 4M2בC1).a 7G+<&yL:DXV@){hso\h읉 (-ksXE09WrüVn\D7kLnLa6}vϽ11Wc`oP0~ɌebdbA ӧ-2Ft냒mg ,¢Һ<ÂZލЖ̵Y$XUc+,0˶̍Sgns#0~ Xmk5 ӛN$lT:ɽFƨ^ 4/A]9elyуHkF !t31Vخ 78QmAИ@ƚ}g`7;`>>Ǝ ݠ@<}) iצ5ИXekCHhΟ"u;"8ȡ]YP#C{P<s<9:ߵW1\*J iרը;|;@s߇~{k/7~^i{&uq;3;GGkE3ǀ2rcqќ^ګ'oNc o"ŇnXÅ5ӫt{hfߎ_/zRq4 usd|iYW|>:2z *o2a!NjgVƱM7#dS8Ntl3(A*O֍ŢWzzwP6tCdQ@R0Eݻnﵰ10DQ-KNDrxfe>1Fo՗GLJMdSuE1ca{q,Lyg>ER,V5XٱڡLQY4d 1yLyҜ4V!)Rg 8IrlBvlXBvql&[Mcl-ccǠN0 cږ̦@A` Mp6FX{x18`:p0EX?ӟcP`Q}U!cPXeToc|pҰAe%c}/҆l?n`zp Hc{E7mۧ& wps*/**A'Î툍o_2nA^AմV*"1wtlmDy\ݯݾ{7&5y"VM M7^<+}SE9 F@E56^nXmLhM2PQUBk[7 ׾kk(_[oxQo)mSLcocD3=hVPiM#\޾c#1/8UsԛT Fd!d$2PAxI18ވqsU׻iQQq ^)G`bU.ƖԛTr[Q\D/S_lA=%$ʠ1cձO.z9-bM޳>~ fq hz@0yHx_xA18&yNbv(H,Ng--GWgxݱLtqԛTra~/t )(JO9 ǖ9-**ϊdEC=(j:# [[7 7>睜}bmsy<##.-RE%.&dȢ;ϲqyNcߵO;ti#.1Rorm7}SƲV)?8Y]*F"ڱ,wqa1c7 n+8+(#k2C28eY:C%-\^XB.f16]"O/cQ~Zf4 8{1q=n#G$`~!_p'"ݬzZCI"Ccpo$ɲhO^]:bhVx .Xfj,c~Ǥ1Q 9u C1Ry|>F1]ǿ#1+1E%ShZoqyiw]sر/3\/9R $3{!B4DL1ؒold1Qq=qwcDqץ* 1IK-UAhN:HtC# 9615e7ELயRBMMEzd%[1 QBhA}Hf}KKYұ@7&1W4!,Ӄ7\uschՂ  .1:T|`8F ez>6|tplLv명qƪtq?V`'֠3rN7#*ur q!C1uzyrVocui1:$Jr`5I1<6t"A1^\<65ƱMuŶuEtΥ#k* B8Fw؇?n`1:$cǤLNJ~"ov~7a"B8Fw늼8ֱu"i;&V^Wc8;^Q;&1p w$"p 1p ޑ8+6I1,i6s,rm0K-+Rt'_1]!X"[2aosV^>ñu~bWڂA jÕLx>(/cS*V?c pb0~4D9+gR4bL9*LTPjٓR94Ԣ =>̮OE!@YOzB +KիZ Pxqx6|ENlag-vL1Q/2_ess*1ʏ-aWcX ;<fL~BAkKK.s. jW@qF6vmq]~ʿl4EXg)ҧK7rM|nUb˥0%$2#<˘O"1*[&g!W_>z[?6!x[Jm&q6S[(Rr(Ȕ Sm:˵*̔K0gxێrkJ +uВVd '2=~rJ xJnT}[s1vB?-_`5>|=a_*t=N}P"c%3+ȝ3v2zڋXɌa"c-<kt P)k8N&Gb!gJIMRM@KT1qZSXW<4J2v)7 n?aoTd4swH"/aLZo{<::hiX: [kvふ^YB03&'=A" ƔMئ {a,dfs17f3 j@HjzblIWN<. Ğ*^1Xxk ;V3<3yرeڳ0%J])6}471c0/kƊK#vp?(s\:kO: ~ԏgi"8 :ӖȘXSmVeGg9sʚ!2&2vJ|ET7`n&2&2zw/2#7{IEDEX2y{Fm^21)2Vqfc--Y(:8Or-X+{W֏U(EX1~e۠0y8wCdIMDJn|Z9SٌX?܆~}+yfKMkKWޘG_)#`nWlKK;21~MccίFE$SG1/c);''Aiݠl%0%*WCZK>q^{s-Y'A~D9 IDATiWd׏^40SpfR;b^;#*!DŰ6۰sKCH Ysιãb7yT-D2Ϥ) Ǟ^loL7*TJ 1Q"g[{%;dR$w-[̵c!7so_cB {k\mcㅚW1W6[:͛f0PNbv:[cd/W?=Ue,r0wH(A1ytD*u #ƴ+6|b>@Q1~y&MNg(Jr"T%B5eGh{uI_ TD0ƶ+Cyj옍lXԆ19߸2Љr T1Sno-4o<30%Z2z;xlhbP<ƶDsmm#;8 Є㺡$E4ҼkVIzgîȺXƒ-$YXl%^dAپ~j.gƺ̌Fy@G3ё3ϙsۨӶ U XB7O?4=n zlgَ5-̎/5!]<{1$O*1_<6|qEP:+_HoT3 *c )[*Ըb1m)6CF=uҘ(1 N}A+ w @B7hǾnBp.U1<694Kp~c Ęv=b#c1b 5C50/֏z /]t܄10wbLkEXm@<bo]C c+<%WJ^$9hWv{rt3p@PX"f,!}0V O_~ sP2G]6(kĈb.+~`$c.nQ&1҇>Bǜ>H:y`D4eLTp?zvL[1м Zc3c 4VD!cy@cc1=cH__w.0c( c_"c̷t1.~t0_)Ę p0j(19Zb2gM&/&8>Yޫ@@Ec1czzیN̶4sc9!vP)}"cFDNj}0Z91v8?] [-cNyN~3;%Z"L6dKB?6cŧJrhXA8]{u8oNo7gbJ~Q='xD#wl-]1k戅R/:%V]1|{mtsgG 8a_?fR+bc6[=11-XD#V(j0ktX0l4<5KAvvoO&q|bmʍQc?_UyW_X5̷0Ѝ1#h$aEZoܗ ߊc^WZ1V3G1h=vXwʖ 5XL[8a=Y{=h:ɝ>P8r`y#)[Rșg%&bҪ!׵"6N"7poDyQ;hlw7ϣ<\*SW7@1F;`9~F0BԳH|PmS- fL 7 )NfkE ʞ8}gaK$Zo|WKmtP 'Ę4Hct)*Srl"'FH>\Xp<)z@N,훯s{^?ooA0Vg|\Vqj2Dj cqE/NIo$j%Klue @ӇcKeC|[u_c#?fʑ+\ZZYݺLalcL$;i~¸z>Uh4 +dw߽ϧ~k)"[e)ך>\Ϙ9ոuKPU4?YR&nWtNnGgnDR i. G' sVܽǮc`rf,[l21}c֯?j/)~,QT%q7\׏uJdÂJMsap=:Q@Tfw_*ԲT-XƠX}X4mCMtɋZ15tWb1w]S3FF4*j*ѷpd㫊18A]5[tap=:Q_GdlwwV3v^3vڌ 0U^?&u.v'WUTn щpUGw^6c'1f5 ߨS1cq3[XYU~,[\$$d=:Q*57߿!/b 1vȌoT H6Ǡpf T"UuIn щp3/TmIn4 cg$Sp:O ^bтOI=pLWWxIxoB7W5U fY=]U%.ʖ0ؕ͵1>1窸*h r; E=hĘĘD;ä v?X&͡5v3Ԉ.UCᛥE b+͵t={ [oE4õs69w!?_XxXAc-'.6p=588V^s`p]R>^>xNNqMSSP#|kS<9[^+h@-7KKib|])kU'tbQo4n_c0V i1/D{`nX`,LO ? >åP++qM] 5?W/Jrj9ƚk^*_$cSANN)idnΌb@9tQ"B5МGZy,]JxDdP/^H޻G1C{[ggVv1]e+k`,`“{{{N,ib̊jY1Y>x?[|2^&2bfuc3Ԉc:?[Lc^1'ؐ1cm3;\S$cH1nji+50$cHʺ؊~,H7WD!Ml]~eEC̘bk~Pݖn1v.b 1-1T@;fcNhu1huL:b†3XsH\;yP*3:\kfk҉k:2n 15 o~&n} l0q\b3~3I;y+a%qlFnʁVIƤqQ̐մ!1;߶+d~ ,?L0U.0% ̦^#\)Aml$%%vC]#奬)sW^YH>9R;2V$ͭ]<43w~6b3v8.o>w8czAohJV]nsr\b/7*֊syqoϞ5` t[X<׾P\J-ܦ~D1w Gv0 f?Sű0w D8v"ű<<11V >y?X܏Ԕn {|clYX2Uuqܝd"uP#^Y[H+Eז~r菍FlyE1c2gF7`bXw].㍔?':Q~م1S!-fY^"kUcva ǘi׽k[ۃm޽bjTZ+~Vq Zp'3[؋:0;ɇ^E~p-8cjmycbB-R GpØoqoHm ~b=1\ Πo'wû Fk߭~nϘT'S]>菵yrAUmU}6fuׂ,x^cz&'Zƀ1` 0c0c06"c0#%m d=0VDoۧ@Vƀ1fDO7c^0c=b`614 ceEH--%I:;ciϰpSnQ)HUg9~<#5g8Ϊ3( |$cg,79I+c1E1w7;foLGiϐUKdMb $}k~YƟ~ɗ*?t?5Ѐs_2oњaƐKoӃz7b?~e /,쌥&q%~lusGhjF^oH2^cal".06;0޼y^M_ͪ!G]h2MLC/b\kXo cnq I5~><\Wǘora\ QwIJX=HH ZݑXӕm'2, =: EZ`Dڏ1$9;ci?1a>2H1ƨ+&DcL[MuSq!"뎼-v#boAHRy219ucrqNY2&ۢB c(پdW-$uc;p3IeMVDl̘o|(*5ސjTI!f'Q!~p劽"YzIXPx%%²& 6}$`viƳ8jSf@hoʘs pW 8&SiM`ƌi=)?cƛ1{nqAD}[P/VR9D˜1 ֥Ǥ6tcNvX@([+ݿxނzN&w_{cL+Jm* 9YGs̟c\yX1Ѵ33o^t41=-e t4آ1&0 1t[1`l،q0c0c0c0c0cFiF$51` k &*0fk&ҕT>7y~` 3c\O2Voc@݂R9*Ep6U]?$/+0ʳ6N.]cC鐞3)+{ `͊7oٜX\aR4+5_ߨ>Ú+H"QiǢԲ1y(s&ڛB5i0f*hsMØf|RRB@/cqHx Z^٧-#W a:Y/[2UQi;c+_ON/&>[ ,۷qLw;\ׁf,B<t'%gmr|B%m'5^&5iS~9.dcXܨΌ58; #~2aE?FgTb34, 6c-17"{Ząp۹˝#/RHe,qT$.;0vK(_ЧDaX>oYy1i6ktSJkkA,5} yEZFe|fl'OZ쳧OW<+ׯR*wnߜ+cd<>̡ōfyGOW5(pس/%cOuXtIX8Vƺbl΅r+r+.w!Vl'S+1֋x-Fe=fd ݾJn*n;V]F<|RKcfI#?ck][O]ܖeIІ!Σ{-~;1 ]AAfs-ɗcU 7.3A '[_o70cحVei^g7T_; 06xyӂ}n.ow~xdl"$狦[aH$5*_d 0扱_*ǘ7-1߾F_ӣc,Mj`ڄe%5TVA2Ec{{~e1i7515hMOGa@8rXI ռv!Qܬ "sd1/mnGcC<c6ZpKZph]2>i!vk'ƑXIOռ~!WFj*sd1/hq7+vՂImd|1GJc#'$J.;LE%0eG9:w5%ZT :}31ՂK>0FQ8NJ \s%=%.;울 ;ME%0vS&o֪p7Xҵ[,q45Wy,[{ȑ$]3kzRWKQBƀ1` ƀ1` Ʈ"cƀ1c ƀa {2.0y\qQ<=&! ycƀ1ό^;0#L4o7ЏcCĘiY+|o,ںH3YXN OQlD=7޳FhR 0 cBg=oˆ"fsb8B-vVS}W4JDb1g c~TGʨ_,tWF,#X"XԾќS#D4W^+^͟roBg=⋷f1gM9lQ1Ps+0uPM5fz3߄Ns~Qٱ4 v&reC(?`>Ƽi=STfFbTmEVo ئH~q 8cSW##SCØ'.g/c5Y|ǜAy$?[ٌ1@=MCOB_~mi>^y+V/7vGp+!o1k_۴xS:`؏;|w1<^GE`,ƒuIVgI+vQ71f-cBŎ6LnE+}1 ]8co4AugITm껇[;hފYyEV}Ϻפz܊V_a>rFp˟ώ عc`%݆a1'l>DW1L#3ZxoѬ% *eT3@>]_6a9~l_c}ޏm9'r)d 0G2;iyG OPAcX;soFb@.{VOAb G=2V81` kŘhC26 ܖa_@dp1ժ5ϗA'xH}E-|GZuvQn|XS1` QkW2 E欐Ȫ" 2텿f),"6\=vcԏe_hňʁseX%rVR'OIƵCGJChwZ"1g_Vrp!L _18Z,avAٙD]]oW1xJ.пU<?iLasj[[# )b]c`wۉ/j+, ϸt_ֵĕjQO$aVS#JXǶϴy%ʿYf廸kFZu]bRP#JX0[Fˤnb$4+OY-)Ռcjy݋Ǭ`U|ev]f} g9TD?~4+{-ՊKcnRP#` NJG1vȡ"2dM OܱZ1ޏRbb SBjʝ39g$*h8}3#frlMXV3v}kҗ\;'nO$ cYr~l*5k7UbSrUvͼf YK_‘+vк{0֭1_t.EKTf&c|3X$%j6gSz7z”Z%wΘq;0jűJW.J0o27#5*c=]]:Tj󟽯gGc`~ǗK8<`R%^"4Z-)zq }ͱ]njAXm2;6A/y{xoILNd-} X_0vٷE/z+巢]mՏcCsU|DFc` ͆]&(50n'5aY["zKLQ.%RY|O|"D!x&-` L2|w d^ĽPHE{kTX0_W(Ȭ-!BV1_ٱiF-` xlL;3_ Q 1fX팑EZQ10muac`1oޔV+10օ9y<╗V݃10x7)ydyeRzyXo\B`s&<<ǛO _7jNg+eZxheVc`☳[:O jNsۼܒoʌc5|06M>xƫnSuXnI7j c`l8z>xc5U=|ٟT} &6\_q`x"K(41| ``RǬ5}Eovƚ[͍w{ɭ>`̅[$?/cMaLǨ9UW>rUx$}Vf>o.+Ɯ=.6"V$zM_7k^QT_DVԭWbGxeϠktZ*0+U:eM010 P10H\c` 10H\c` 1ܑ`GF?]W>c`oTa#` :c~PrFҎ6'#XygoݐbU.OzM016fl\H/أW ^p~Cc+M{a- Ú`0PPCcjnҵBWyDğE:o\ km2֦q_ryZӸ1 k47";daoM_k+W=|yS'ͯyDwo0Sl1ř}Fqy{5{uOWe3w妯ƝUX}BR0N(_+;Gt|1^l{=VyGW fQ+:YiZнTO9r%d+a2))8E^nl*j\ ca *W R(<5*`Yp%:ƾ4ڎ}ŀLj:>52W,F`A x>.,!UVB ^˳7ekN;Q1x%:i7#6}AI:+c2Y&)v̪i1]l8-B|Yf#/(i|kʚ jB:;Kh)P Jj옮cy y4wgoéprť J1bXrϚ3J Hi|옖1V/.)P(IJÚVv=VcH9wo(cx%y#ϷPG5hѩeS z =DcY`ؑwu;LVS1n.{$kk+8_qEwd_zM&GdKےɘަcN< Pd_z)X_"ݖHFUϠww1)A `S\;ƀ1@0ƀ1` c ` 1`;3VX70,Hܟzr0v6c|i[~`  /Nc)yEG`K;tڱ,E15_u }XLll6f&Ffg#bCm^؛OȤucl5.bLmi_^bƾyc 1&nhm1%Æ!Uƴv/>|ǘ{ :)ɰ|#ƶywߎ1Og혧c[xAͻǟ1yc!_:ͻ]7{1 [ǿȤ~bX}b+ X72cxEc 32ż|,2&?N>SJI_)c[/|?@fd-N/w͎{_?{߉~Ag1$v{^=#rtnJqm^v{i*Q& \pOѨXE3e.>|6ۣ_$Z/\_v_į1f c0օW&ƀ11` ƀ1` ƀ1` ;c a4)pҷ*T:4` 3%cA(35C^!l^q MeAQI0fv|YeQOsƎS8@k)c( DUuN13FFv7cߋHS=ɎWtD#SbNۙ0vXn=crez6VEt-(9`l0v^8z,y4WB޵f9|l{j;VaX|AX\=%=cso |0;;%ct910GaH";==)s_1 +0ToXgS7W\D,xz;S;c-fl(#cҋ 8z|:244.dY0URr<ꕁwc{ŝfZXXM9vNq˲MH+LL帰tÂ=*xc{dٲzߧМ3/V>s(⧁&}+*׺0{cVVL&@\7ŧ-:t@XjiyS8<{` cy7&ΨTA&y'Nm:ojhAc46 1oXkI;Ph5Fm:17o řޜKcv}rc˽ȼmk4m5QH\cOc˻Quf(0[c '0tqƞ~:GjU!J0<)~D#0(yX`lX5L_GM9RQW7*݋y ڸ埍-b 8BWq8W;`,A}b5Qa,^ʿcy2xj][>ߎ1a,qL c11d߫{calva c);ɍ|bva c)+0|;0o URX1fl|TV3_Y5c 24z}pq1c-c1a,EcۻMmRuB 7%k11}eصqL cx|301oɁ3W11el]-h'119WtUk c1a,-c}جvb˘1f9xƱ`cKϘfU'`UcXfh)b]+.c cK+b1a c2ale,n8dK`qC81a6c1YcmskccE02k5e6>1a,1u5lcv8.2W݇nK˪ɼх1Y8ߌcX5k1p00)YMb/o+5ƪ{{UcX5q:ؚƱ6`,}YoՋ+y>f3fgجma,;c50|l}+^BИ+Vtal(f1 a c1%2v;rA̠1\74a~S0o̓10101qO18!{q,` c96?jΑZa,~5QHJGQ1eal]E!J0,q Qu c[ǖQGM9RQ1er>.6iSS"S"S0ZpjÌ =a c]Pni2ءȲաp ch1v1T(/5 ۜ֝dN'Zd`oB71L~5bsǻ{Ƭ]j]cys/>bRln_VBUz+֝79j05JN㇁&Zͣ#kgɚΪƾ!c5 `*/z;;/n 2~!`c}4vw||qcv{S͝?rg,*fU' ugM~cV-cZ3Gw7XpǍ"s5o607cU1fhIBmyqߘ3Tx7oێ>{9mɝ1YӞݷ DM9Rd7fc,wnG*FŲvXclel/~D##k ǘ30h?AXWdƒ L11T01a9;K~rY6s3ŝ|l'BR !#`1B!#l{BHa#"!#`1B!#`B0F!c`B0F!c`1/BHf!YxOx v"IENDB`awf-extended-4.1.0/images/qt6-rtl.png000066400000000000000000000744051517644610000173710ustar00rootroot00000000000000PNG  IHDRcZPLTEGpL¶ͫɹŴĸocXǭĴyiƶÛdLщ\Hʿ]IǸbK^I]E;ߢ~iL>ۅZHοk[s`ƺjZF71mP²µķhY[Ht`ȼ[HeMcLeMcL˿bL_Jɾ]IŔaKyg)('ڜr_iZȺ̾u`naʿ#""/.-xfaRyHEC}ynYyvs̽;:9әjZj[ʻua»543LJHqokdb_m`A@?ƾȦû͐pbjhfƾM<4UTRQOM洤rUH^\YXWV~VEƺoagM鐐cI>·6NYئɑyhSI߳5e&Rndk׬Ixc3сȕr`Jy>w]qv;P qY|kU4l2 گcaPjײ?o薝kfrq y'O^ zOoIPZe:tRNS@f IDATxOh .uQQ^.NKV%bPҀEk(ő #cS928h!S0a qA}z1!zof%˪9̇of4;_fwø'ONGA%jԇڙwdD7%@Д}X(eOd>%A8yޮx(V Dtu#yo=4yw?]Pp.0nf"A$DtlvU=ҙ!X#@pƤ#O?*a` qȌ(=58']뽏imLǡ14&8P4i`:iO8 9&&'G|:[{ܭij1[q RU=jyy[ݽְc\c&hlXph)/QG & PoZ; +Lˆv؆:CHe P(#8U nʪ>Z7(l'@2j$=lCbׯ1Kݭ@-0X҄kG=A4[@q~AAJHJN&Ji|L7^|Ca1eE-IzQJ-U/x8I{cP86(筭̢ 3GD2ME6QUˋ'!A_۠M5G3+1 B56"Yem|% i7|*h0UG+-x{gCdZ\&jfBm[}X2f7S㽛c锪&Kcׯ16Wc*cg߇?4*hCDQ#qx\o*q؅L;NA/aCIİ`L0FxQe3:8hLQǞ] gQ؆c}7я-/(?9^#v5csc̎ `~qmJ[GhU{Tc+9 F560u`v- "UԨeiׁG#Kzj>V _1E>&b@7Ѩ1!`\/ D ڠQṿ|ps%1­"2ؽ,#!2I> Z SY-CCYS4b6}L6$]Msnh'><,1LWE^Šg"BuТe+9 RX澏G TV% /Ǭc}t/{j'3*e󍸧6i5e Z+o" HX$95la}Q15/GctM#Ut@5XZ-?+j$ȿ&jJ[y7 1 M{Wu !ŊE*CkFc(dhF-n'GJ1_.cXM$gDBՇO&0%[^-1?Id𵍩y`L6?mqLخ-`8"t#[K4O\P ڼlN7ׄۇ cn܇u55aPdPyRM(=_7DЙ7jl/1]Ύ>R W׵*]SH'ux0qg^Sc EfX!ݨDP2v-H^1ٹi,.. И!W_ @hL D@ OEh췂/3fhς/҅B%}+HS .6j!7/eR; ܽ~[^sg8R"NU)>3 it߼:[yk.=u<#Ɔ9S3/V)US37ZE[+lk3o,d]@r ^NCfwY:*)ښY+tr'V&bo1smg 8SzM1vՌ 8 .%sʬ8T˙Vvfj1s*eIfo\fͅC 63u;Nb7Pp'V-0ߠ% LKwz[ψG&YVV‹s߅eqey4fca3RKm}d8|s-5ϸLBQtZ<r `=a'mZ+g& ə;f$P@hصES"멙ߵ_9"O@qPt+lǡ_u#$ (Ed$)1F7wǾ9Ǿd?N1nͱGݶfKXo?Tx\/WQ\qlLQpkxc]b&!,}eXPu,v\$ȈxޱaBP:JݒidgSqlsɦ'1.Z6A+cSBMWKSd,u/X&bqqQcݘH tMX72:'KA1=~0m>am㇝tؘscƜS:ؘSvVnu nˎY>dP&\#byMwڅBĹ8D]&"v#sCѸ}($֯_b0cӏ߯>Y}_Z^s^ŧ7RV9;)DTǎm k_sE_ՓPMQظzPtP_ױ\04:eQ(!֩wL`C+= ) jɉۂ˒]sau[scYKJ諯?Ŕ7Y:uUe^n.z)|װt^2u7oNG8}HX8X"}t8fgnN>6LǮ97h sDn 8+&U3'zLSYZ,.X' ͉1uL5 %cD͈9iwOwlۗeN68֖K 8adM#JޝO,l M8ʩu,1׍# cд% d)g D2>ct&Lqoi6A իj|B# 8rBL0b(.ş>a>p}Վ_Bq,a[Z..c{8)1cE1R+C(9 y5#\4`p,dR-y+dpWH8l>O]R?RТc`avC^(ʟY7OԬ|p sŻ;wsŲcZqJ3Yj\/Ҩ1Drw?m#yWxuelyPX)R@Nקju7mB"&:#D %8645e>1Z1jNc\o7 Mvc}˜o&P(:fW$eSoN8SWnZHVkw󿛆5 I{FL#8k)@5ɇ":H*,l=:n #_ϭy5[^S3lSLYGG]) ldq!M32]CbTU{c Sy1,Z)V|3*h\1ws :ZK7Ìaa?ƌXXXJcXXXJcLj=Q13 f 3 a0c b0c b?13 3 cf`Tt7 :Pu ^TNC*gQyr@>u_`B<ʝ]W*aڄbLI.>Jg<=Vv(D>jhƔDݿ+ک%c1: [ӭ'Nw":=70&r=vbK{S7;cSN)8ycxMDh:!_,^C?IIz[-xtzAѱG[A:<vh̯d)mϬZ8 #.V F2%u+d8k5e̘Fjh4:Fcn4ڽp)?3vH#,cM|{8m̤c1Vu]+PG, ,}W&+5G snxuUw]G(`;*d) 9{۟E&0˒5x[ |m1r"IH^~$IƨsΉB"d,I0;y|b?ÌicզKP_gj1u3ƴ׿CS3Qx1BېD r_یjS0]5"fD@ܢ̷9U czƌՍOmz 6UX1cx26R=#Bs̺b Zz <7q9ixFj5[n(B ɜ t!-Ge,JZö|cA>1=rªstɕ`$RT06BI2IYFu_=9ƴWIQ=UR7f\{+XzFƯ=%cJ_Ì)Xt[&旈Q% Z{RAŒch}}]i#v.Xe+K5"1%ÌadL-cfBDk W"_6C_֍W0vu|0cSr02vonؾا//de~ώZ2VAQXcF3&؂Znr%HZ1k}xg IDAT#㊔z( mOl%%V|(*:9WZ^#Ϝ`V..5V@aR#r28 @/ff/bzgfvy~Kbc) 6%ٜǙN4҆){_7vpp6@,d$dx-*4mָ{(0~M/i<S_C<% OgSLfg=$ CƸx #3=#3wvϯpERP$j2fd"xjxԏja}"3jO L%yIE!*[c_baDMb9K%8|;1%cA`?pRAxc_dD)+#Vɭ',TVmRha xl5G#F],2d4|aLƕ , |M⦚ŭ6rѭEc.jor<ڈj02 c%Sj@ȱ ;db|6ML[d (fLWnRy$.bQ{_ZZ+޹,9)cAz.$W s/zcB(bwۭ՞;,k@Ǝc?bzA؋ܳGe!2g!s\ % cB~ 1,kU_~ ڋx(`I3L >={%yVt~Gկ5!{;e8W4Ӣ'87MM11n<=|b1xujy^*XC6Cit~euDA!cyG!X0V_?c5mS1mfWƬfas)K&&kO{R;l1[)el ˦ǜn&/b0+c23>*DEЏRȏ(#7ҡ+6c̯0߳>UTins砹J' _%c3{W<L^{33ErZRo  |PggJi3v1E<43Xf:JGK|\u}RW-aJi3V/3x6*bLϣ4?}lG[ܖyj?Ϲ^[Kb ÇhӫQc uGNVeG'Ռe!W2Ƅz0῿U]RK_/cJ r/1$]l/ >?o1e<6/-x`=11"[}gwXw?)S3lxpD7?Vcxϼc+9}EcKEg*p7Fv3ܹ-ucgŏ8B~p sKiI/75vQŎC/KbL,e+|ëPP1c/g'rցMtrJNpEKۏs cD0]ꈶ5c*{lD$$ŅOے~? 'd8?F>vFho0 0މ{Ǡ2JN[3IgGt2DZ8EKx-[1?uU:È㱋2Fop0  dL3ǟ_C vt XGG/ Rƈ 1&ԇKVbc`F _@cX/b SHSc3#Đe ZԪď-0ۄElGi_S{4b[zx 1f2Ƅ9`9B2A_ߐoBcA1G cb(i^?b ظT`?HU|bxEQׅGÍIE̚2&̑ybwo DN’bұ9"Ř^̬.8q\z|Z5[#iWꪼdU lW]վJU%$ghHslӔ469 {T,6TVZiM__q;H$3<&[[k% 9sbl%~>ievpJ'q9c{0wwDF˜چt U)0^D838NDpc֠iq zqr*+.36RL,GșSgFB!ƌLp ?CX ?'RcHISm$Ęc:cz4N mV}OcgH3Ipfɬ~]ݥS~Lhl1i+u4uH36nE+Ǹo%*쒣!4׹>P~i?V-1v^0XŌIc/'$sNffY#NU+5\E ).:U??Vda}03Mx1fA<(+m=7@b>ƯUGF2>l8輔 5 W1[ btWԜ5bKRO(bpm8VĘ/b 13ƨ1A94-{׈wYfrbhh`c|4b 17?NmnR*A '!\D_?W12Q߾T0%ƢslD)bl~C/ӫyYc260l<è4wh!KO t9as} 1鏙M0֢Db0G3hivڱ%qW;X8Or x 1;Ω~x\%Go^(mpop>_@lp%cp3!OqM*c2Ug7fZFtl/Vk8$ÿalkE DI&bRݡF>Y,E C/oZDvWD,&>`]Vڿ,DMP\)c- ȭ|i+0&1Ahba GY,Wd$~r2cg3א   'Z$xyi Kox1cc cb4b jܮ$1W\.pd\d{\H l\R}*vX|η2iyb F^Tg,#gɜ%c;y'7ƋJc;œsE?_>En#{DDw lI M1b|J0ɘz78c+Itt:;8mrܡ5fL[#B}ȇ75ceW| mc㉟FSwgl`qY,ۥ BИ1S^zg'2։OS4.A66z畞W5U 6b _~cFNq $>gjM#>C2vzΜ?KW0R={--88EŻh?D?3{=[2?SԈx6.e1M K,C_2[# >b 1WT,dRߏ!j3+cȏՍui2FDsF}@ ,K;KC1+"'4TOtLUR!ƘgH-z;kUa ԋdӶ!pto"-c&Ъ՘1CafYŚ1bl7ߊ#.[QhD+]zYw9 /C鍱rA< 2,mkZ-1_Ę^;n=֊! o$ÆC[wP|*dczemH3*alopF欙 [–b}2?Fg -+2kƌdT c;~GMcزyxec1Pccc1_c!Ui)܏ٍ@}_cK 8mcE_^-bP Xt"72Яu?BY,eop֦Ҿwx‡Qp/Kd !k*?f0?s79zdUJS$ąExQyq"Һ'-U <$!#bDl\ 4D&/}34YUQ|mgOǙǖMsǂQU~<[v?U²ka\4@2&H]:}yx*Ǡ+DŽ| Yz> ĎfK:cKVmcT;)|<M67&ߏؘk1j1jǛD\F OSA'14vuc1Vg4Jc T=tF(rc-3vL[BѩcLjcPyn>F!L :t݉16Ǡ7cB`z)J!$LRږ4=RהŔؔ}0J":c3uRa3V ޚlW)mCsd/]]#=)) S4nxںNZ7k+j1mzuGiM)>ͥX[sbk[( }pV31+Q7:98*mKQndS))=Lh*_XtUƾ Ecwo10cڳ #J_-9 gә=+˞y1J&ӑGU31DdqHk?^(Ɗ]/ޞ]cj7X 5$3&oa1~aVPe ct2tTD{zBۓ s{I3$<|!qofXg 28c3W'Ƙ݇=={80olr-<쎬Ah~$ڼgsczRS #J_䶀1cŽ4ۍP!/mk||}cAf7P&P>B ) a7ee̠0)fk0=XB;fviQ7Xr&i{>unPvs;_ԳX~r$~) IDATY?5ܲ1bg#dGcyu M5Ti>.1W/>A$B or+ ZDRh kIp|/O#dHX3q10䏁10fZc?Xc?v<01{',7 p3 0c`L(cZj ƾ* d>Vn,>c`LK]p H z*! TyG叕ۛ/lDk;zzU#F4N10w[3qb.XOc}0jO\"[Zq~~bDx)jǛDG'̽'cjY&i2XB;>]2]:c` 5F7=Dgp6Iqt 0>y壌WS{YͬǓSi m]m'3X7;DƊĞf#;wXWc-6E'g,w"G{):u3*xcI҂z` X<4SasD.Eh_K~105 p 6IRQ sk)QLM QDŽԜx$[pr\b/JLӍi,ZZ=IMV`̠~,:5^l"m)e7qMh?ԜXO{ z/㴺_ ޏb,ȶѭ,5DS6ȥȹz[{~ѧjތ?#,0"e-֘b6RDG"R$b?5(npTږRה&4MH͉`L1_y9!1b}Äa.?~R=XC7̈h?hYaH-1bZ?FFwh2o{Sq~תE MGRscTf1fQ_Ucӳi -38v]KִF MGoe9!H=\_|1f GJdS5U)ZY4 2lȟັjГu4l g42=#@c` +>~1ucUѡS5 vDc` 6FNxQƪCĐc5c 25 #t8chM10w~&SgL\WdhM0<c`쐱  G1fhan r4XK6pc`lf-` c` 1ƔJ1FŜUY~0l U۩U1q$ckG;sc` 10foc{N_ c#g$Ƥ.3L&<61ًc` cٵ_˚˜ŀ10횇"ek~0c`T+8c^f< e沣@iΚB10fjcŊ6T0 R/KMC'uB?5_Ôt$YKZEN|lHW;#Ɗv 89/JwfgvfW5cݝ}+f7@36*CAUb1zuc1 1=[L4cG}mE`Xث0zf#Ƅ&BڭcyelCX7dc|X7dm0vIdز V=&Fذ㸘8?A8&0ĕvxƘό}]=.b: `e:XfOnJVi(8if40ީ7_>Ņ+Wffڕj$>&U/CQqص=h ڸbWs+cY8m>YhK :.R((+}]T]k_X ڕj$>&R3>L[KYf;A&>RGzI9n 崔LvX3UPf^PRqP+3m,c~HƘcYiua"vlrof:O3VomvW»%@Ƀ3bF kq~O[w cnܠ Ř\V e"G1cHuITd0Uv`rO0mc,l ;)ՙcg;X{/]}CCjW_;>W3nJ04 k@TT qEs5h2D cDÙHƘ+cdbz2-;9oycL&U%BBQN_i؟y/߾=:5X J7@ow=:Qfer|F2ѕPo3|f'2۩l ks.qEl ɝ.n#ƒJ!dg=MN3}O z?&E;<1.b$t1$%6@z1z,2Vo$`(pN9c}Ƙ;.cyWƤ8c'Uwc c3Q#OKɲbqEq+hǀ |OBbdc-1v֫0z_!G6jlH*֮wЕ]kXK@ X3,G8t ڑѢ|T$0Za'cǜ+JIǭ_Ӣ$F1 c(wcl+J)hSr&jtOe,:c?z5Iƾ8/c`, Ʌ˞;;:q)41 ^(BzƼrz ~q1 8n>>cn,GlA~;|/yͫ3VKR~=@}ڴh&pxeV ˡFbZ]3 Qz$ei~'X˧i\ةbaB8müq1@bhPin}f럺Ǎ)9,FVS]bWcBK dcU:ŘGख़d̛P =5d)[`mjAO83E4;Mqg\t’1:iKK^scA>&![Z}Tcd)Ƭ<8j/?k !V,fL F:p2V,ghFӊW,'J'afK~+%݄ ٦lE *0ڇF8~2F tX&]O"čpF;h?KA[yq ^XɜmS1[=(ʢ^cdb4RQ:Kei>J99ۦf\Q1.X1 ni3iQ+$zǰM"_@?)\)L1H*u1v4BMB1fBUM߶)}~̙"c#,#ĘTP)c$냌1c3 *c1ΘzKV%c,ؖ2&#JL 0Fϣ`5Z_o11v K)%I'xm0N1G1LUNg 1Ũd w matrc@>ObUBk#/'o>}|'xz1fz;yAb `PJ:rH1vqF`1vܼTIAڕ[w޽~έ+RYWyz,,?t1'm0(@e3ƒ\ac0&+cJ/In}en5y\EcLaưa``*.0Ǝ` ><<`27/7,O͛;OlOy̫\=<O8vc8EeT J>n ozƘ7câhb!/߾=|/g߽~>2ru&b|G쏥cW1§޹qq\XƣЂa;W,eUDf]YnKDs<#*..7Y[l:iVQ]|b,#ђ_s9̙e2{;|r9$k1 +яLMe(aLP3Y^2Śir+*aqcTB1[׀c':XT'ɂ]}3Y}K]޺ͧTW$6r` D` De~Ҭ,/^Q_,.J8 *bh#`,>//zy W4|Ҭl]Z8#aa{ֽPE mŊ*R'9/U"5Wt{|,f 祚ІY?>p||Z2RQ/N^\<"Ŏ1T -Rs]F^*KUږbqdXD{c1dL8/uc{^.RY^3Ejk=DṘ%?Iyl/co-4X\cy7si|ON^*`Nfpn|g2-gЦ4Zp+.yKaSi[K%ÂZKEE-j(R@V^q[ UXu+ؤP[ RU kXcuW+ąhV *cNڀ10oX /q!+o+:m7cBW5 D+Yc&8c4+` $$ƴT!01\rIWK8]I@Fc`}٧3pz0<$c3Ib3` "t:oV܏yPA :6\[Ɗ{"G?84#1VOXRB˱͜, `8!ݖƢϘqv06c}0'Ur5Aƈ$`R&c` [BKnd1T aH?Fc1`Ly;𬞚Q,ۨ6{=sv*NKLwYWAzAwYCOcnxlԳ{E^82 iKW7t/'NC#w0oc_~2;k\k]]/m:MR 8ml"=LzT9 ltӛ+gO^6(JCY}z_^b+%L0nhmNC02`,4཮(EfLfd۾?gb|κ gD!J^b+%LxcDC0Škmȸ]{rlƬ͜f%2fZX1#/#DZ x SR)"Q4ٵTG^*0Oc40c` g!0c` g!0DD` gVVG|,M>L%_G|Ϳ`l%߯[oC:ϪU$DTqN >.K|LTy"XJ0#U;ߗ64SNrVńPY d)s"` $bZ1*$J}S⛾W9s$1"q<9|9#Oj>xFjj,'dniM-^15}2bVEZdoi}YSc9Q&uKmjq^HOt/ wd{O'yY?I)kӗtCR2]>{ O]o^6lҏLBce-ɻWN3N=C;&I}|dj Yo\h~ cI^6"Hߟ2XnylJt)h‰P0]/;q}5Ʌeޚ cFEa2%ik.~NS!zP4`̱fFCʂcB^2>N4VIN8&wbblBƴZiWLyi;kM+"(b0b_[>UzJB9U‰v:@D\)_h)c7uZ܆<>fRZl~*ElXwvϖ Bi| ''_/hFD ubby{;}Y/>*jy0 _ҧaɪAdއN4ڀpPypJ6m)_hb̊]mb}3cnWlbndcRv C3mVcsxڶ1` C)J⌺)@z-I$P811yLx YBJyؼuZ&ҳs3c+L c/1aNcB^;VJ57NK;3m@8(Q'c'591ڏ# n+#(> ER3Vi9wTM\Pk\wj괸Mͺ+fS' cId^K;ذ6$Hz>z5%(%|5&[ѩCT].R\ƚ2 Yji4z?:Y $Xw0Si[TS%cMk͌U*ڱ. S)60SRM` u2c3Tǽl"sRgffۇt*?} &K[k1Þ-%` u0cR0Ioc` YǤ<T|2f10fccʘv0}ex;c`"J]ړr` YƘ\|.X6~cLc62oXH>c` Y]WtBogoX=#|YXu>\oyLc/ ` 13<%+^N10Ƭbo@'O 0}EoT| %t #A Wc`2ƔT ,10Ƭb,p?`KOc` YȘ\+,=10fc^!`` 1010VbU!dF8CCȐcoƤڌ&D24cc` !kw7a%CzBҐK.)C󞶗t F"lK`,vb(ƎYKK77:,ũvx4QLώfnoȶ1냱#Q 1KbL.!kqo"a ë!!)11[^Sb~(71c`1gl1+vI6;` `,Ûrȵb[ncc0c<~SBcX5XBcݫ~cFm@c ǾNcQcͬAOƔ7Oum7jԼ:(~X+>_c~>T1}njwj ` Ǵpxk1z%ce:?1xkPےEbLLZ*7b+x1yH;vxV1rx(X52 [; Xcݫ~ciD` b~cϏu-1恿W1a0c0cx` ` =1Ž<^0q oc)O X\ΑZm%0ci6?D#<Ut[*7ݏ{؏6fǝ%2f̽O.QH6Ǭ:vTc{r:Gj`1{5w>X1ƔPcZG0f|yƂ;[ iEoť!1[aU0c+Vdq",GwU,l.8rnέb[Us(nzaa Vq5\,~~ce>oQzՃ1)j-+o]ƖL%y:`^p/^.)N`ͪ5c0![W\k&u9'EZK]ƖʢX@|5V/. 8=ma Vnlfz.bQz±")vwKMaP, ?Œl2Ioꩻ/;a Iq't֞QHeY+C9G߶M|fYei㘳l7+JKw}~1$}v h7 Ә)+>F CZG69qؕ)W< [gu0p>FHϧʐqٴo.=ɣg ׉~8v:vtƱW֘Hꫳʮv0јP{̣vƄie1qf=-7;uǓ9{q3u0 UJNE^c 31k]z43[Ǟ&~1oә~s_naشUTRpbPNL[YXȾĊn`}x֣{xuM<4oaKIGpmiigeαytpϲWE܏obwfrrp㬭cI>uRC~þ6NYr[O||}lSG٤ɑy߳ncx7gdOGJ@<`G<جk,YGw#Md3imR)_JoBv8P ci.ҧ4 vnT?xMVѭk*Zl߆y'\^ [0$jhtRNS@f IDATxOhSFUyk79$/ ,A5?|.+]%-Be/!6N^ a ImvtЋ.N>zofV,EN|7;3_F"p8gȢdLr8cLMN>p8hF\4NN@r8 !"3&2;>A8Y# Ww?H4Mѓ6cZe9IU8B~l4h ֚6RZck)T3 iI7QNMy)`Z({R +Mkj, X)`mJI4G$$67|ʨE&$1k8ï-j gs M(U2pnHfSъF1Ƨd!˖zk:*}TU,͌Dak//oטqV2U>ӝ)gQfj%6g59?6+b>=&aGcp;GUM#MkjL&SujiL朏*Xq-޼2`5/aYQ(KPۦr֓Z&!PouXЅ [„6œ!m~x>=ZGsR؟A>ރct%‡wdE]f^T iJnA+ŚYBˆ>!jRwx_+B{XV ù,@c~\!?5ù,~4spq8Icp84{s/ʧp.[cB| /sP8/;[ };YYk7E:.-8^6>eP8:hLIlrL(?{wkե7ui5ƹƢ6߈F[QNk'_jy6Fҳ3DEƢ>yIBϦg9,c}0 3`RbEpk| Mir&Q>]o=+1MB!'ԓ}8zjs < ʊ ;+k7Ϸe([O.(Cf^KV>vԀRnҪou閕:єVObAzv\E:hLNC-1o|p}uSBz~-To[n4 1CXq^KVgqvo@)ܷٝ15j#G_AlOaCg"8WZc#6 JbdDNÑHϭ?6҉/;##ٯV^nU. 'Y:zY.YӷI98A#Jᾅ}a9:,"MiHA씢Dp"FmVI1:*GGp$(GGyL\ݝm ,6CG/%)flWpL!#PˏGij){hM*bkkOl}V" ;ξK^%hs%gX(+ Fԟ7֝fEG/%ٵbqovvpH g:evlw,*yN~eBFiQِC҃q7ه+Gf >~9BUR-( UxU*5*N#'`jh~(ӵ1pB)a%%;vmdY_VU7ѩ#>ȧcM1B8x)o/}=/_eѳ gMx~|wp̪X8em,Skt髯.IQ0tS4K9l\Wt*;NoIJA@>ihi!7 @ lOc-ld#?_7<ݭ6c{1-rB>- >a*:@cȧ!l8v uC `1 @8-O%Nu6@v­_[N܂mcqϟޑcm6Žv q,n:-A~&{po*FUEQTtB?oqsHq+wos ~ZUZp ss=A)(s. 8WBX"L31uA ۱|5:-0ք^8 Irymu9PZ|ϖCPcvXfJel h=>%c<&K0h!HL)z=s)ɱĵkS* 8YNx"@QXAdvh]I7tp3p ~/}S}HNR9%D:Mr#{ձ1ccccKKx!Y D>XM$BQH2-NWyi4JK8 C@cDVb4S'LGdq`k^@0y[\ۺccKt۳9 k6ǒhLCwLў-T7Pi4H$ns nh8"we%e__WF)_bahKl8SǖƎnptFYf XP[ tbn:2ZA\N.=d3 ] ػ6Ǣs篞t?#nHf(vʽX&ǏGIwrqx ˒ǤSg5&uL,IߍP~N[EEdDBSSS@N9xBU27_$UoL-M+ Ox:j#bY-miΞ>}zԍq4M/kP hՔ}Rrt>,lb8}%%l>SZ,N?ibl/űjVEh<))ȤZ{ɂ;>KFs+vsFjLWvlčP=cB8 ŵsEǚEY-98f r9؞v`.g>,c٦{J T0Fa5e oV.O#E/GH+MCD\ hd(teBpTDRBZzXdmdzrGrcp&=<7Rc'z1gGZcM89V);R 5vu}um(1$^19|Em%F sx$ߙe N]]Eq%".Vrlx 4^؂qgbUl8ѣ=?,qvtpge7ʎ(];Ut3MǦiA wŗ9ZE7/dht|E *)FPXޭ01ؿ'G8 L,D#ͮ%B-gMJ&S]q 3 ݓEM .ٱJf* 58:IO.o9=lo;x=dM\~_Ȩ)~CP_ՌDgT$dbt'$r"I2I%"" \Dv'q4Mdžk,XYYW6C=]NE5|ݱ ]M^W] [rҸ#I&dcxIIQ200c\ޱP8|8"01)aı*OLML ߦc DX1,f0։%  K kai5S1\\#nAf f 3[3-kÌap `p a[= רETEC`24{TJ)?ݼ>S&Ӎse뗄L4zp'_fˏӟ~J?= %d(ƞM0\#S()Q}R;Y Y[?J[R2v3& +()I$PiAƾCkt1vPD14cH?&SƐ~ҩ9]Fkt1vPD33ß>4cFY;@c"$ƌc %4ce6b>Z"Vk m36NV`,fҩ9jt1vPD^b^m-Pj?֒!`rPB ;;g ؞dZ|+ cb1U^vk1^t,Qb(,PK%hi|٩9+|cϚ{;MĻBЌ;@. p EB3O@".|M.2I.ﯘUErv*bY@ ЁNzq&hg2pm+v[u>a^ A[ W+c+LnHŮ}C]͕[\`\ XvU($|t#wzBNy\dM2qޛUs) + A]$x]\__1ۏcec a؈-3@)pLb6_]dY{7&ُ C/ /;cūWǷ1bqL$+ =&%+cpj]bW5̂I+a/7g,v8GT_d+آ0 #WشA'3A53@lLey>EJ53V<۴.&ьu97LJ&`;@Bw\-fҩ1c;Bg\LYjI%1pְw0Vc vgL\n[get慲S d%I|HrUjX5?X'gh-~LUxeǢ0V8+1cXz5pP1½jc#\wH0c cLq5ؼb[rG/U jٯ3r[,xMlc]gi^W`+8T?oݹa`&2oz;B>g0Rsd`N4 R4 +?:e( JG}K2Eoxb}&s'7\,MSrf^G4Ӧ%WOO`߸gb+ߓAaB13Lh.gliZ*fKm)N&qqI_`zwСьs:tv@sAx*z%STfUEJvSgM>;S+zyΣ 5G1(pc"TN}ff."0cXÖ3Ϙ޹yڌuRmXZEH@g~X3z cO 3G܄+gLNy$TKu]njqƐnZo~EؙgQ d4xظ}]Z{=#n!Cί-9"}#Z/Z1 Xo@ѐgEg*Y7N[-euMFGJ.H@ ggF tGdkr[].4cuʘ ~"ip3UCn3Yqx]ڊYcfE;^X-f 3VcR^:ݱ+c4|1cXkNvMg^|lHMj]kʯk%EeCs> fsE늘`LfUެ=]r>Fd1HLSwGN%?kO|i_uhhHO94QV'WX?KŴg۱dL+TU?c໫-'__ȕ1) IDATX <̴C6uů_h":8(zK`U1f\ȿ9ԇ_U$ @r{j&q9M^G`e ccEOSpΠ8.o6Z[)#WIw7mO'ز'e%wڿdN $=e1~l? ˵+~,X_?ƿUib`e`q~?F~L-#yD ;5r1U6]EqKעQ6c O( cZrDoyyĘ*5"a;8%J L`ny{:#!{j cIя*zC b5/XcNԏIl؟oS1〱fR%ݩDŽrhSb fƪ.3ylPd <HvT?wCt0fc6%t:i[K;Ud(!JaLʿ>^;26̠qbN1č=cŘ+Jy"]:1H|X,tEbϗfɺeICX~\Y_Lx '&cbX6OA}~OפD%&>OnϊZ1 :c@}r5!cK.cet>_W3,a6Y_fUK M҄\I1K{NIUƠZQD\c$c\>3-BPۜF3b1K†(5/cM'bE+Ü˙_}bNJNnwlR̒!e?C5 c!Xlv}b6㴖9!K↔b 1PMs V/}9Kw* `qC/1v Ax:M8X̽TK%Uvy@}2v>X V1pV/xJJc1H3ʘ1VߏHI]v/c/0cנbhl?/(UKZ<<'jK?}jɘ3z<5d)W3;iuAZ2fL&C33V"Vmˍc271f=N5o޻*1a`J#)/45㣞J݈_| ɠb'cNy[Mّ_fTc[ pa0v l$RF7bߨR1uX3m`t8>;s{ds6&a*)Il0i ǹisQhs } R~)/GqBb%D/J3VSS1JJAnIj2f:ק wWxu3^ED< 9u(3ǭٵįocΘqx%7Id! 5r",6mcӷW*| Up۝vShEJyj>ydXOɁ{fE(EVwG*alԏ+ aԪ3Vd?ukO$9c$l"?I!c1V-syQv|B/ĎMVX7~v띕2F]J,]l|c26䶵;9r+@no0psy^yNK}X0LH G^jkY.|+bIؐ2cυ3v[c"AgY7vvb+D2rYl>#mQRgfT &O`&Ӭ+<܅ޏ͉ޫZ2vB~bk0|I  qhI;-ے"D )c?%b>q&%aC~ ]1㱍</sbAҦدB {crNAfc,:w})0ksr##[Ku->V a0Pƞe_ cp3u_htp Zif6N³po.)cƘ ob~ quN(uhd<BT 1V{c%1c1X:t:~GTal(=b $Zl7pDG#|cYؘ1g 3~^/Q1bLu%jfP1X d1 zmQ.S+Ocȏm?fC>Q`L浳5U>cS;c(Q9ieν7(\W BC6ȍ@`"}M%qWm|M?d.3=ӡcι= 9/f;pYoD"j+ŏyIygγY=g|xr,ge>VڒAK1dg3mo1w1mh#Sț#dRc'UaLK?cw:ڽY" V+ڹ%D:Ș~70<_#` y652手dr#i~y#kaKzČy0:%*FE,I&g칌^"/Ǝnhg0w1S8lZrCa kjc!41Hf_jc:xɏqϚ{?6O֭{VGF cdfosyc{BǾhkc;s#+jHW;QeҍWjDjˍtLkL&7ٗNn :ZNJ>cK;sĜn‹0&#A>̶ !~p醃 2Eukr ]GcWrFW!1d'Gc|]q{䴗]r0{ɘ&;Hܷ\06NNM0wqUta7zC2Uȍ cE\0L%-[F;J~w ;l8R{IINX$(~4$f,%{&ȍX`+Ll'wRWkj-?6)DЌ3T]5t+ [˒%DؠR+b1GGCu\T^su^ $H^#W1 4TpgɓW^e>5.z:Qyؖz&eڀ^c_!iJ.0 畷H7<ĘtSX3?k`wlw62*=R-XKu UԱ_#iJ:Vs6,t@m6tg)3.T.P+2c;k/=cV :V}O00cccc1]=T1`L#pM@14u ƀ1y?>/~|S?"cKbH!T:ɅNUTZXW)#"bS%X]62V!^W!=-Cuu_S^PZ}&)r  0VZqE179ҢF,DfN90F|nrjl{?;Gkd&=t3]` }cu"v-Ɯw6޺ :fn4~m7[F-8ʜva2}dh\P0dvm)c?F,aX1.b3K[Y0Fr$lakaun6%s`F .@DŽ~]=sXY0D˜TnjCfYdᣇ um1A'a `logl=[ƻo}?j_e`E{ɏEU`l19Sv]ҜZ1iƘ՗@^Wln { Pc#4ℓ$'cb=nl<=nۆ_کq<] I.qQ5'+;. "|J~Wtjx6J|S8Q0S+u|1y0eLHZ1˾ai,bNxsLcx:bcel$rYO2% IQ7_~{3I&!01r^V`x< ? W<AP략U)9SeKRw@^YL$ϘB7}B{[i"iF H&x?O%g$HT{+A Ș|xH$avn=>!dI2 *[blVnuT-3XjQK{ls` CynN5OK~{De݋ٷ}׶w{VG*)Ĥ<찞}T~SK!|=^Ϡ^u.3h?4mc:'81r4qܣ4LU;ZJ("j}{% ꞪA` cX `lc91 -z` C1}iNJCUJ;&X1t ƀ1y+|1`lǥu 3t1T+Jo%J,40ffl|=S #޽o+e]wU3)"9$J"'zk:| ,UF̋D&sѱSջ'ϊR TΘJo8jԧEd0U{~ mC1c͑1W;"joLiXw1ω9]r^bV͑w &bЄ"ةzؤX@V, ͊9%k.3U _틛̴>S;t<<7_b{umO%[e _MjlpU[Nՠ ;B]ӏqµM,t[΍!1K,F$򿐼1ky~87&5Uϋ7g>GeW\/puPQS 4~c &rr٭= ?H-!1kRQ;:Ʈ&DŽ:3 ;='g4kk\3Di^DiM(MYle <*nl&ĉR7$_HS06RCgyoU}gO-NvC74sB +j06ncJV؛$sLfk+?s qʬl$Uc";n*XU14j"XY?FHz91K1vK]Mb F$MF"ؘ76vJ1iƬhq0k711";Xc\<1H5 _sL5khVA%Q䏁1cB24ͯ:Wl! B7I*cLh>hΔ=6nf IDATHDs1-D ޕЌiCtxl8neE`̀1F1~Px/8xH x08?)y;d4?(w ¼!pd~B` Ac&! a`y~?006l>^'׻c6>{>?A0csݻc` 8sKIcݲĺs 1ccFjb9d5>Y}g3R3R16{#ry 2&ѕ-H'Խڜac`ƶ5b\izcGٵSsl7NdHdA?FUmu:=T.Dؾb i"c`2ct B1sg>G5Vt.ȷ`?&ٕx&nwگn?0F19pb5Pt%VܗnwT1S由xڱ U7V{JUtکɘel|76s؎1XW"{M#;V{MG}Tҗ S~ax` 0Vbc{HL5E àj3b~n ddR1 ;|_{;"PnkowgSIYleR,Rs`LhG {2c?*v>hZ>/D}|S>/gM).kNMݣx(↷*_EtqcE+ݍ ~?*nBnXmfffoE[3٣P2BƏ!VM$v+Ol*>;/:i?}q'f{ggշƍvhɼe(ۭh?~,U}ǟhJ{jL }yƨ 7`R0*lR`LC_y.گS'6=H嚃15c7,cT=v |*p}&Ec^Gyޜ"N䖙h?G4#*לJguc.[c-֘of5q2֨bY+5暙|cpM\W.\10XIX1p-B[BM߉` 1cŻoFnLbq\MPHHc2FVƜod11470$xoΣ?F1n] ̬Q` Bsa".k10t?sEW2#,GHc1#,GHc&+1r4 4U[*"+1\'+K:)/xnmKª4ƴFŀ106i(c` 10fĘsqcr/1ksãNLɾ0,m> ڱ0&bQ4_ cxx!aHsfv6rf==cL\q'¥$Mļi\1,r|b!/hԗxidmJnoKf츪_=U^TȘ{={Wt˘qElFr;ebf'vzP:cW1v??Mļi0V H@ TJ- sˢ`+FdSW;B}%]V%}=gkkql $x: ` *$6 ƾ%_rIkc}aП70ΚyJkalΛԭP":\iUeQ)H1cGTP&gg٥x0KE1# l$^d&+,>\&ci㠬߶hBPˈlF"^0v^a/99)yy% c5%cb[c*^fg=cB16dWW /c2Q1jJC[A J@_H c }ڏc+Օ*7$-Jbdc]`KsJ v '[JuM>qh^$6Q+F16}>#߭7֘ƌp^Z[iNVxKEe״=s18$ۍ7wZkcF8q/Db*񆘶gbdNl"cnl<8ڜ1clX;M_n2q1K77J\0栀|TݕIIBo~zcel -Ą݅tguY6<>Jm]T;`̩1AHScYU5S^3Ҹ ySe@\:Gk81q޺>kL-q3Zi+Ne!3ŵp11aĉk'5Kg.e\x$ ݱx '1&R[@=&/]y s&ldxcXˣi\.26;ob}t]#q?-,$^1H7<PpKT@3FzضnsfjH7~ƸU׆,jcCi*i\RL)6y;ƒ+U:+zulEnAXO)hd?޾䱷+VJ{M&*0خxg/wť/ 01+9Z!+5Kut,Tjn[=(ʢŶc^16X1fe?oǪSۦf>ɨ?FWD<*cl;vf7a!cwᓼ#F-t+V'^30@ |~BcB865 Ř}mYSY2Ȳ랎+2zѰaKJ8`01X3oUz<cmbR)#KX06h-CXbK&LAee c-/v<q=E,dGTVZ cOs|S,/+=XVcg,dukx*-06KT^M|1vׯ?ۜ1߉1kR W,Acխ9*=K2^^'{v~cؚ1l~:~6 }4ZAތ0'ؗR3^R,/X=B^__<;zM:KEqKʊc?JAO^٦p 敐%PدoǕ]%8D§; -F(պSu&^H%WpHB&%1wANHQQ oԻ;3;c;#a60Ov>y/~1}׿y#/Uťc39.@˻cӼ=5Ǟ w~r[-[]td^QkR0nj0~}&cLJ\oXWt-.@SߏjcpcYW|uuꗂ Tms#HF?<7iw7mdĥzJXĹ"ѽГĴ)/XPc3ؚr_KJjO2:E&1{ZHh c?-)Kgf1 q{a^8f\85v\*0h76*zlg5AxeC0Bp0#., [B\+yJc.sIK[F~*4YlޚR\q˖0]ua^"Ϙ;,#.Umts\*0Ƥ\pE1;.N?=.տ[b[9=ťc` EN݋dfeť7{(T߀10VhW&y9{1&).=v15.cm3f;V.s1qX0I.3ɉK~[yK5ʘ{o(%.Vz-.8V{{2R-}TfK\*01{qf]w ǽ{OqXhV[h…V2¢DcٹT}-FcQQde&\`. o.ا2K,dɩAгyExu.4ds3FE-5I\X. o0*.'1wn2A ébX0>܌+vҕ ]qWxyKaQaeds3IWx Ѭd^-(PU -'Qf'WJjV$X) C?Rۂ> d0(JkX1O X15*c]bɮ21O10V ZxX2f]%tr%9<lkwt.X[zXoac~xl#c3#͎)T{/E׽05ƂKآ(N Mrp&0VYƌ9\nЎ}>[ߟgd$oBiiD:5] zqz 1!U;%| cA`%l,kDOMq*0d#Θ~rpHK[U/dmQՑ:g .I(fhqӲq{쉳9aWp˜t̖F:clgg6ZI`,(sivH=a΅qCOr*01R zEʏ5 j~2D}Rܰ׹]^X,D`u5YHcA`K$Lqй0nhnNC0[ K.fr|ޜ]GjGάˑJ7ƂIsqLj, `x!K@!XgZbX9 #X+Ca? 8ccA`K$Lqt,zb˜ei%3JwOe>#z33".b{굤x5szt`,q [):d1L a̲l0>}^˿t3χP|3=Vvǽ{sQu9 D=D{gt}W0=)Y켢w;hI0V=c\jzJ 7RV8V045L-"zU+1sjN+҃"c*[ zly[Dbh^L! PƘhe R@0րVY#NԌ1ĥc%kdL1 qDuW R9CƘeËU2IK%QT1c`AS'kuObc2R ͓'eƥc`Q[>gk5~'#.ULe{I=.d8 Jh᳉sFB\hMC[dOOrXb\*0ꚱĹs q ;bc\*0֘EX\qb'hܸTuJ=ťc 0dŞ!&޺*7.U@v̞TB`!= 7 E6btzbBr\빾(]".kHg5͎]%ӧ .G q# x<cx1 cx1 cxRG#ό&A\*012RMGĥcsvrx#/.Gui8dĥ/ S؜P^\*01k˃cLF\V$EJ[hR 1xXɈKGXJhƚ+ʈK#Pd).U7G!#.'T؞T`1{qԨnoI".G˘w qO2T𨶌 x<cx1oIDAT cx1 cx10 cx10 c V`0/a0X- sE 1 `001 `001 `001 Vskkjwݬ?O(P/`U b|VXJƬjw1*aaQBnR_\;ߗ65VX5ie+;iB0*FJ)Rr7Y ŊvPH!JH$*!1A4}}s{̜d2Ith|8sg9|9Ng<>tXj;OOo1$ d5LjP RNTNdT= ˓?tB&ȶsdJ3? MX Lxj3i`' 2fqT'Jۇ.@;=Bm@9|߹ɫ\nGe=^, y+šu=/ 8em^>JjFo&s'"!Pu'.VwFq0ڧzh`{p*GsKH`T+]ї@޿T:Ս."DDP/Y$*zVZTj!gLݩvf>p'lg'ozmm_/3C^Xy?!>nHhzy}xxglf #φ6@36Q1S'g"-vWvyDM*;۹3*aJ@˵W=1vU u]];x46g%yuE(oCq.-c[?1;u;7(eeOd9|Za(:۸0':Ɔ V1y軑$Zr"iNew/.׷s#N]"1"V@L+ZZPǘsE:xZ;=B1ej'&eR,eEf.R΍ / y 䱋WΉ5Z;UcO]V39:G<j:RԷs#ݯ*c$4G1k[ $1f݆IC@Ǻ&[汨۹䛆w=v<˘]k2VJbUjPH)u䈥6l};7GVȮtHݦv֌YZ^Lv kw{0/=يWh~?//ԷsK^|mөoK>Ő;Y5]pB|q^oІʞbW.ԮwmcEȜ!\Ku]Kuߌ)cv/Q10Ę?d )Iko<2/S cc` !^` 101/d10!10C0Wc` y c` 1 sE0Ɛ/0Cc` c` 1 10Cc` c` 1 10/0Cc` c&o3h}c` 7Ƽczod;ǝejK\٣W Vile(^Aoa&70/X%@P>UF6gBC 0A` 0A` A` 11 011A` A` c A A A A؈1}Fx::tc3پ܏쯛k%ENG~ShL3eԡT#S|c#}ܽzc` 10fSE%$ jc` 10,c!N Mf jlwԥ=c"ƘZKG@8zꜴUZ0e4uu510׌qjjq9'-6"EDK HmGDX1c6ap?L~̄ߵcl5ۣyKџ9='-kIZLʗLQJ.ڮ:G63xuUڎ`Y~B%9R1='-j:*6p:v|y}Yvj[4510f)c^8+U=KKMs~u8v뚸jXK:NJlϛ?ƃʘz/`s*HRf)9c/e)|lLE?.| \ 7| ʗV`7<&y 3c4HL_.>~ y)puqLϷe@Z2dR#%,_jZ10f?ia񤑱)ET G߅rtjD\S7NͶ-NivV-no M%XfNQXX>,G2+i\ljVfCi1qֻ>Ŷc` ف5ڈf_w\Vg X_3Y` 10͌Lv8d>e y<~6ٟWO` 3cc`bhv{d;u-0A,;F=>|HtH|ʟeVv<c86h*#JoEό c`VuHǘzo 0yLhc5c&1{Gkc`$Ƃ>e` 1X5c&1Vp;e,318(hX&AcLc22V |H c`$Ɣ;_b2?c1sR3i:AcBseַ` 1?b>(s90Y՟ Cu&3s<@2c,Ȃ10bl=~t|$Ha]1 &e݃10fc{5-3V=yc`DRAIucf0Bc\^2֭0z<c6H`ۻƍ0 lYrl!Pa/({ ЛX,LpS9Fь$*U9$xF18yglhŽ6` ׊0cN E6Vɫκ)c2ѬϠ'{rƜOGw Y0Ƣ+n!p~/?7aϋ09aNIY%:sq?k0͘ýƲy|V_Sn><; LhMCSt/NegZ)8hL  1~0o]7Yu6۳Co#|(lb;͇eX'"D儍]O 9|0ޘUۜμ:d,mӷ9Uʾp_)>WNBU&KB ߆]aXʔ w =1.կf9;]I5!߫KB Z ŒճQ6.:1RgcW~;gP8;+ c=F#D̺MZo 3fާ9N6#9727p1+ ;GS=m1u{1(yg@[ ߏ_T q7ǘQȌru/[TO;ϙg:99yE#aggWvo~77K4Ƣv]*77A0C`?x DdOixeXs{fw?oHUqZEx;,h3ԥ_9-Ÿ.y|N?!XuN??Aꠈ9A9UU'?䜈8"'G=w>39'r""rr^9'GjlSowAAfoE̩_5t2нԍwNh;y5non鈠r ՓsK5sW}]uc;ncjVz.?ytk]~|O~kjfFW :ρ7vt;ԪF//Lc.Vʯjh9- 27~ v/?fn{K~~;^ѡ@~#_?t;3>VG3U~^UmZGji;)WQ5?pbpjDvus:ˏVOr۫tW@@:=;z mrf{ %g2%x3 ɳ&GG;Tce3mcjQ24ig? og<ti~ttz/o c4|CXv}〷Algggcnccc=lgc y$V:;`R;Od7ݛ .TY쮇ȫ8! ɲ>G2k7T66P!dr࿐6dȀ5T8X;d{ȊZx_5 /l+mαְ~5+fݷ%m p9r 6pL`daj~jva~vOw8waEv&C(1::(vcߓٲ!ِk8l(`[kelِ=8*6*egr09Ltupp4;!vA29[6ҟ=:6*'2 ĩl8j̃!CZvh2fqBM秦߃d98ܴ^hBQL2z5t{ڡV8pв4W5\EhS*yɭ +.jMk{2G;FQV30 JPSudP!o S+dMbVrO$++- 9`a·fA٩> v}+!ewuCvL;tO;?ֺ:h3dž^Y+ɚ7GW"ybp|dW;:f Aezc[cAE+O5X *d`(k XqGHЈI;V[ BgFN̓}ϧ߅ )ZcG{=nEX젌qpՌ%)4}cqxJ-ZM37ut҄2bPؘ&u_?cxH!KV]eڦQGx[Ok_- kt$5>Mؽ^|3k׭9jgĜboovc8d o*t ِ)8!3;dxK}vL-  z݆Ҳ!k8>iٔ!>Ӟ]R;pfdf 5iBU lx -! e8 t` ghAt,(vwӆ 7Sp0Z*8x=ʷGڋm7+M]ጥu#_w }yߵ/>ě=8~C{Ɓ};֞}M N>tƨa6F~kؙzg,}GdOS2>3׆ f!;!byasֻf o {Ts;_A"wW!S% h8w>ؙ? .<9tpRv.vAEt > ?y^dL^yO域_8k 2'zh6$9jF~88}Xr'A?M -Y rNvozpON@l-ܶ#AlbBM&aF9ۉ >a·,qv?'b)XX1 NOl­^Mf87~?/"/0 lF$0ha㉉Y܃2O~A7xYDЊX/#9jaAI"#32 [8cOum]+-NKK<\M\p$\ii++S)! $#Ʊ΄ݸ, fb~DX 6I"A&@/Shf|84_S܏l1U%EVgZn20 Bo fFA,^4GMf0_&%=&N/|#: 5rB6hmal"/`ub'wA*K']5azAhRN QBBƜ1|~T-/ζ{uطH")'ޟ6%'  8\3<1R!zf &s3J\ʻ:<8E8o+!fAFFHCe}(shfg'FR! mmFh6w9mcPkZ,p8Lک *SVV(UɭBP%O./.FL*`2&覒PewZ!Ǣ Œ PAf<zllL@s|" G)gw=1P&iDoAJ< 2AOO`HNy@:95* F!kIָY"KE ^9pA䈝HWbA*L$"59`3}V h,@ ܆(BBq􅶢az~RVpa|ae1A$ {JIѰfD(2&+dqj~QH`G\OC( ZRE' KSR 2"u3}< .R ,G_JB=qRbd n e*'44>|x*X3kkAKJ9rF,^ +W䡪DM]ST)xEMT%rXUȐ+m*}&=`$)iZ1z,,Ib42ca.B%mSW_2XN>L>1lSWz cvrp,5HFļʚ&9j໰Zťk7 ['l+cO$ XdPЩB,{"3*I"ieC*Q !"s('''K sw33;jҩq;U²avR'HA dnU]->-z@G&WVw 3m9/iRBqi6gY=\e*Hqqbn ˄s a!Hu%;kNLcQwwȖ q3\H> rKv?YFol $d\wkۘ٘ckfkfmg })Rx gaFA,OhٮaiQVH 6<)np%@M>,u0L1B@d?5ayۍ~ؓ!B3^&UJYV0(DK) |Z?X#6AL1h\!D}Ƒz}lBWw9<xB<|3n[D.c!:s ®92xQU']?il4 Ks )g%]5!KXNe}%]Vr%0VmkU^*2X:5ek.HIzDOİVe ?'H5{UQ)R4V2Hku1uw廬xԺTɋ_X˫N#2|N^j+e(IWʞt"L ,NP*MëlnV 1[l!tҜ\_q{'֮?|\3^*Kt9l$c;R]RHA~W < 'F0k,a j􂘓 Uj#Fyr 7ON\4>C +ȍ }Ho*bmm RAXs*"x{5†"P8RJ͚Y 4B b a07dӅȕ =(|F9틚ڋV,$>ZD0_; B] -w"e6ᙸD{D` X)4K*G-LwrN'wA9F'=FN>k%b$! M\+!_bWH+yIu[H8'XTk0odb li$\7~Mo60 z . gYJ' }k}}иY֥SWo_kWHT7r#&} @ulᖶ'9bf0͆I){ #XVG F% z ǍgYIB07δ  rHwKJ@S I $~KRv>"F?2< $%Hh9S+ieoktZ1ͫfKE&&MS̐BX={,$7qX!韩;V}SAܾSv_~ZR8HrΝ@2ܨi:p;#AҗģKTc*ERIX.T3{dk3+A\ Ce0!fքB`Jrm 20p[o!vZ WwkۻĥWWr%v˹ %9A*{ ȱB"v:Ns`Rb'K(9RҚ@QB$죽kɪ;[qh~XYmwsܟ'@گܼK Ձ3L7.?P'¹[BF0x/!ϲ6BDFsUcC|}眱҄YkB':{7#As\Gݝw<4Ro!H=z<b*H;gMoѣ9XK};CB\*꛿Rqy ۷J.\SiO+u꯯ KN.~䰑z8:}<vՌzmԟ^,in~z"(%x~bb~el$ItƧsq޾z 1ӀU bB7jnRO%63A7yz)…*Ik]H49,w .#,8-YZlʛO-6R0R%>Fǔg:ktVvzpxBԱ2Bt6$ͩK FwmwnL*&,.x39@!`ܰ ks'\J #D"B|vDUjl/i^M=ne\)jQj]NFlh#p6'`7)؞}cwرw TڍئTSAXB?OC^XiNfKNwxz*]0<=Z.gJJJzeqZDlmA sJHq&ﵩ~鍘 KzEv۟I1,j &"AOuÀJ0ɷaţ0 f:GJк>T"c>"Ϝ1%j螀$mܔ0բ{&[],c xXi^MfH;246mcȴǮh@ך!3M1l>J ?,M)rJB80c)?$;G*YuuDU6-jpg +EՂ"~ƕ#olY_B>*&t*X&R!P\|⛈"9$,6Twz.Н%vW,d;lA\'G._<[d˗)19 U-`k`yU8PT0aR}Kݫ+h"Vo[69ph#t·>zLJQC{^ 3Oug~ilAGB8|Ͼou^AoPxm ?1S/yľ$:럏τE@ l[Hr-ڏ>5%9&̣B5ysv[Xț/m_+!uxuzUߑr@8LTɁsÀq K?K`!y>Bplk?=e3s!$9EҀvzxᄎ$1uS}dV-iU΢. rgwo`^V͛y6xKk@jCi$@ԶOu6CBD,7Ag?|z쀷wDEYGtKr+(@Kֈ$9,$ ͯ@FZ@_H +B NS-</R.+.j{MUI_@P졍"WSQGDg˨F}m0VRB VDXeC5mNNr'3H- I᧺n,^F/eVNr dCx=ofRr gc!$DٟF%,i+%mQ<N>!V8a"Jt8-qxb'Ijn6׋{o6r>ex ;i )' %G9%b.C7h07XXzkIP%+Cܽ6! J:pi?</D밚MF(@] >޺QZ'],n O1xXXX4,MŪo%T/@ }cXC 2u dNۆڻ zOCvPD4 r0t6~<^ k\y1Z 0`)itp8< _S-[o9_u,M@VCV\VI,dj6L dw|z}>\O.5M~H_~ߞ"VLEGg!bNM,78028 ?ZRDR3{mq#x1|è.f/މ3iB oN̎p3cxW̠Wak~XO$ڧnS3o;GK6xw3;Gc3 @^>g:*')hK/e=BC\&Iq@b&Vߏ :"ܵK%U)*zn["Aeڼ;/=@'{ ) 1OJL#o/l"hWXMXgpoe <4y {ޫS Kq.  [v,tj˖+y LK }=z >@ԵV9@.k-[VUlM -iۥ`!(MaQd!$u aL%*Uoi"&h(|{+Qeاd곫px>)فg/Y I]L#N ⧨yv,z:ֱʊժB xiS:Iw]5g*ݗL ǞԆT=zd%vrK=u:P5tba% 15`Fe4lB+}-X@ [!ebA(DEBdm}w߇'+97mÍד@3ӫ-o\B&O@PCi7l5=ZC;-.gڅC*~'G߷=?^eAo\'1+EſKX=Z#2^c19ryՠFV5{XaW[=jCq 귾.F1 AƒH[Jrv|l+ [W |S%I'(Ϯ$ 2jY^ega^Sj"ocAi}XD /wp"Wc^_erHO3esYAmQ2o*LRJ0&TV*QJ'ERb"81\wNW1DE狲g'ΗEy{v8@23 q-7qC? (IKrNHސIER:T1*7Ⱥ3u"Q98ߏ]?^}n9 Žigu{ @sI(K JQAc)ɓl.s@WJy¥)W~ ^v Տas3[f9eoCi25|<|s<@* cjTÀ.qH\EEce54$68Pyk3>GNLj9Zzm1"AѶ+Q0}@H\O=덚k R~v &P*T "ca]wXyVR`f1k@f{ap/F)%eHKd%&" @P ڄ ႃZl`Z$TF55 h: ]zg; $y12n1KhafpHxFπi Z|)yXDz@M#U)񘚅Xf ھ7X3,shb1뵽^Gըmli4]zfjqƁ~e\' uLɕ uG'Ml,GND , Zdv㰽=>lyd>oiu!ֱ jUe=zD@Wމ<!n=jE qjsn m䖱,Kmn44>n[[R-? R1g*^}CMp\9ެVQ+/3%x UլZN|{ss!w!B>B=yE@-: B cQ˯SsD nuw뱺x^W뒱<<3Va4:-^8ohtTm6כD:!8D"V hۦ!)?U @zJ*:!f?MMG5ŗ|nr_6݇h:地ɐboZvWD>Q?UC~-VځO*Ae~)~%<’@]ͼ=@iEmՈ9x$A\Ϡs$w5AA^?bh8._L|zwG?noqkdwֳ_ZA0@EI,QTkM5^v$GQtpߑk-2<Ζ5!d3lP[ ncVc728\Y;Z@&=$SԵX ϓV/&!_YŠ.p4.bǿVE(ȗYJb@^=@↗lOI9$&M#gg.KXǨ)TFKXWơjɢ qN2.T$4i tVrmˉ1 " BSDEɀ#$`d ȑI(VQ --M~~e*5BS2JuMRH#RTJ9iS0E#lB ť8xAN[RBxnj6BZȧu.>d>Xj;p E99TKR2芦&0 d2M A4) M\h!YD@Z$9 @g҂j$G!{IDܧE:- 8&EW䰘pc^Kʘ,r:EP  sTS"ODPTDO QMݺ5gkv6c[#@nnޒ8n?CMhIHN5ڲ0"G>ѱ؇D2* @ɪo#< ( wT2a^bW=K 4DJ^ aے@ 8k׶EɎoIXTt!ޒ*Mi>Ce}d ֆ:l `߆L2O!t_>n}@ Qp9XH1JhpǫWIX%Y5tQUU ig RSVp=rDyJ%% vuͅGܨn7==矽=Ԟ18X@J OrrwPNU+Y:#Ȝ*i!ܤT+\BԈ&.E%Sh(2T4H3OiĿfۂ~|$ʖQ^ї^oÖxQ<Mjm}[yyFт r[M tg1,${OW8NS!EXPom>ttAFi90h-kk`NRa+A fu8+h+p%`aE/ ٯkg<0bJA#)j'ѕUyroppp?vNg c~hhwt,Cج, f'B坡TcK ng `w;@C8($b8*81䔆F xp껬 F=u(LDӓ!~`Ԙ?ys{tTh~,d?9m]Z__-S|/MMp /'ڮ* b۫\29hql; ]dIvKU]%BkR :"ʓ1 ]d@jۦo䡌Pg7?< ״;BS0Z &ouN BhB`Ky a+MQK0j#sNyLplF%"N " Jn1ސp4kRm8"$D )T QT C,&#hĐQ@46[^Yy>o3*kmS6Govg']cCw#@j30Mi3Mܞ oߛ욿 }}Jgkn)?l:751;1%a{N/ - e7;j;ݡl"]`< çpUUG DT-;p#!b"hYuw OP^p:c6Duɧ?{gVlxAZgV5*aФkt!!ۂbPnRtB5 ݾ1}$g+ɕ\_p~|NmEKoiqZёu0i 5yV GgG#{^卾yyHm F0G yœtĹݿ Ác0fa(uKan]]i ?/ $#媫xn=ߔAݼ9+y3l;uoS]U D7wbCdi@gms{4 ֗N6mzn?47hͭ祓օuk/"Lr D&:#sv^&LXoM"ax޿XW9fn`0ܳ!vd|/ÛLy~w)}kY 8}>N^)H$- )4 ν&=7g"i&@ߴrm`?_܊N@W~`tm@e|=I7oٻrHuS"jX2;\![Uq/0K?+pR} BJ bd@:pZxd{p"mZ^oHk @oend{q?3'0;6g?<+JrƇ}AW?~hd"Q:Ak_k<1̐ӛ:D;.O t>+y|i^ \6[J;`2$2@3AKzmn_7Ox*N;򸻬}P5e+"u أ&Q,2vFpa#].ҴQ=x~Z޳9m>T}Vw_OSfoۻ1::\CSCFy_YhOOőSRp#rdYTbiH,2e%R! ssD(e6e5;cP8qP;[CN 'fuv8;m-Ǹg@~?G9CͥH9a踼Ѡ\&\rN.<;^{сe<0 H|$==o $qe„9pKD$RQ 5d WPAu::Z")tw@ t77_O|f<ý>i8W}Ԥ328 oGMyۥ/><1 N`|l+i{Mˋ<|=7ٟ~ ,[?["Cc][-2*T$ǺZ%cNeL"it["ZYD s#~H$Lk*2:72h+sKx|7=8V# xB!1L Lw'J z`em uJJ'_,lM.օ^lX\|ܶ3K^N=s|źG Ŧ逸>KM>㳮D;*6=D 8t#:݇ 5E ]?wBp-a܏0٭'wX u<هeA+ n]OdsV&\K{x&A`ݺy4=Hc{(]ҍ>O( 1H mCT}|XҝpKOX---֮\B['3a&ȜL<6PA-a?uYk>Dǰ1r8C{/U0fvTvem>eǼaoX 6z %{W:=zq1ܓ73X? CD8 JH集QX'2=qd)n7GOe<z_gZ.1ER4c$&98g`}q::)j7G028O܅kEp.IfdmlmE[kk$?ܿuHk0(!"ekka|ݾaum7WsR}Foh7:67LC; Ε+\Bt/AiM`cr jyPom6(5=/F`?mi@F=E־1m̒!v] Շt8֎qk2]>kQEOyu"HJl#$L3qEe6hLOJ.~uSG{258Pb~*qIܒ(WEQ!ҟW7̋p!ٚ\|dTrѺ@w#_$qy(xlHҁPK$.x^{I"#j"nj[ZMJ$C HTY 0\P],*u.x> ˦ᦒl-\Ak|ËҧbPL2õ ^eخODeBC`^-/1\I>0uA \[>T8WiǴh?+yI 2p :镥b<_ô0mPK|\fkU"e*x{֪HB\~dt TH{^! qۛx/(Wj Vt)@`0"ơ t~`t\Sh)`܊F ӉMrSC\B. ۳TlEm!ipJ|#s٠yBkv:gBn?*nf }~셭N|I bwu.Qt;dx8ꐑUVB.k1 Wk8"st5"Tͅle(<%1:UX(TT,}BB+00d]IӶ ,IH-U?c)RO2hIYŬ{|2/ "AEExH&ŵ]zWTSc7gA <.6f|Z^ļQ̵`gS&jP=iCTG稹Lu,Zb* PVp!Nlj!J(Wki~=IY';)c0᣸y^[&.%ΪT!N'&68(F%}L+%!l^I7oh, 2JkԆeTe,T1P=l@4C Z JQCH!Wʗ/HZ {k<Ս Ck= / W%[1tH<|lâfم%/ž:=5F ՕU1|nE1kWNג;oB?ThU9L]gQ fRTRp}* LUP-U(Cr@jޔ+4(P5OjUjc+r쒊 0hr8ӭcSf.Ut2RxOHx-y>f!Kl"5dG2LDԄyͤr};O)Ývh,pV`REz%q=\BX& '".[+ r}PItƂlMs"¢3]Uǀ {H8IGu2j6.SB! !nFd|8󨻖@ ,&|A?N43E<0rJՐO%~kD\OGC&$>]Rwr9hUD? t<LrHP\' rxR:'*܄2.W]QȉYA磀T݃hiZ:]+JOWBLbZIDkOLX5OFSI4/k SIݭx*TaaRLt rV 2kǔ@t]JUnh)%ݮk蓴స ' lOBW<8dk t`EC1Ͻ$%hy7r6q<]UJ99! ::֒>g )*@>>H&Jarx=]2"W'X4TX|V 33c:!QTZ|E%FU‡٢Q)"a ?P}V_W 8dS/Fc1S2!d}8/nMȠ8 $ @?ٕ}.+u::*/7CǼCnmY\C3BNuؑ):B?&T]r떤Nb{].%g3*1/_]}떬|c@F1]06قCNԋQokk *{*qjlBN泓&#ϣ$]-@"c@FFF7E;ǻdVň억8[e|x'*eIǁyT{T zDI<] Jmi< u%4ZYb:\+e"w}ݖgOr@dE<7+}շ [E!n @f  _*! ؿ,PC1!%>7j%D+ڕ)eC\,]ƣIllhkk/_-i6fkk>\)ZaY^Z/kKpab%!bonH> Sᠨ ,S))͖y44d*yX[UZ2Kn\xe_WĹhlI\2VaM->||=2s? ᒒ>˻@H`wdlIoUW3eb:11,0Cd));/#[ٟI+ p*9E}uI@:HdaTKv c@J|Z{TOV{洜QB8̢B%/LdA\ZUA&r\BJB 9֟8SrTڜKB}(f7O~) oz 2w%~xxz@=WFf _P\f!}[o-AS @$ Bo^ /Mܔ"΅fdNfxE] |XYmjqҔ{ې1!͓ 1MlÝ@r5bZ{=.W!jUl̦:r]XXvKbY7@ʖ;;m]ɹ@2]ү3)D]]uϮ頵*a@2U֍2&̔oeAW )U#KJ:i!D7$~HqN#rU2F `C,f֦0ݮaq>GRv*ā1Ӹd _6 +!U99'u pk+oqU/99PB _v+bxg}.2EUy uJ)ǰY,)Na LF/W29 =UY wC Bኩ^4u|]uayjzcvC*d8Øy|AYQl,/y>3u|p)֮N]lpJHHhf}UZ){"vm8;2tauvce6isH?5]xv4KAc Szfs{Z ̵__R(J60_bWWփ /S^e1X_9ć}Y.їJ\szx|ց9O@ G2or9e%YA_VRr/xz%eM;w'&ޤ C8O ˹w$j^V^1Iol[&hP0 _΅Ib¹SVeb` t fvǖ`7A2> (~Co0g͕j5\4{ FUdV7zay{Ja,K,sG+ͪ,,,KQu̥P0;NieSS; ƾ(gV2փ8ԼaxzTff5m3x]2)ۍ%7M+R\n,n.]^XVzKXe6BoW۵Pb+Nsi6̔ xn.ḵy6ܝ5O5<٘0tk~#qYnݵ z獳s{; 1ێOyW2^X8z NnuDFF%āJRXS0n4\͝NauY,Hmňt+Pyl6+@5z$8&zSjj_XHO. DNC.qt dXSC =!7qM"yz/  Jȵ$UD;wPQ.2 f\eZ8x}񈷃 8e3jkP{CE[IENDB`awf-extended-4.1.0/images/thumbs/gtk2-rtl-menu.png000066400000000000000000000753541517644610000217760ustar00rootroot00000000000000PNG  IHDR`PLTEgI;yRA91-¶Ƚ˭ٟfMΐ_JƙcL̆ZG]IVCʿaK\HbK]Hƾ]Oĸʿ˿̽ͿdLùŻǻǷۓ_IǼƽWDľſ_Oұ^G˼Δʻªǹ줤Šm`ڝ{~VDǽح[Fwԑ|yu厌znɍ\FZH¶ܶ{SB}n{wtziZ罴ر}okgurnkYvfó}cJzettqPBeRfb_dVwMQRq^֣nWeItȦB<9*;&EYzZyֺ&mرߥvC;azMJwFz}ƴeRͺv, tRNSjwIDATx{TSg $.1 ӄFDE"Fn PPBL IDU@ 9TEA ҂C,g8ufZ3̚9gso߳ DEe}yodw_mor%S9ٸ1^؍M_>\حX#6Kn|_n`O oH $ò?:-yII[[@=lܷNCZwy=$RV-3gpI9rħƑ#0 nu$IK>7H׭IOvSdIIAۃM}&:`4Ţ x:&i[ hS7 [|>Is>IM%]M}SMM-s o' J&Kz<Knϵ zN]IkI}ʎAc>tųejm3@,e3vn|g7<@s> -?G}-]]M>n܎ѾҎqnGg'yPQ!(A';: Ayf4]0wu5r2-!큮R%#@VF7n Gen$|:;0O}aУKu?Lz?D)yR89 AawݵZ[S{ </WJMɗ;G =Kou%iG0Zkߣ[-$Ǜc<,賜e=kzP>zC-_IR;L"v-A 8nqNpXכcy ^o)A|S& :a;,>^p8.]4j.7,rDQy/,N;Xs͉st1;>>*Oq).jE<5^ Yۀ fg<dvɃd| N`rS#7hR5ٸBU;ƩyQŔX%؁m& 4Lȇ 퀕 - /VtLWi})U!yS)ŰT*U5no*T}' )XNpˊ~pL~zzzȄ[bN?:,#W779aٟ$Q%hHqr Uq=nC}*V*R1+TN}A=)=)I^dnݯqpoySt*hJـn!(nthH֧$&OI{7XExp%/il'vL>ggjк0A\ lR֎} `,;RPG !&EaT%Wjd4nv^JN}< )ã~J$+@ϛ`$\D qCFSi7Fp< K4GN$lp | 8bzcf3Nzzv`8X;:sL fMlqs K\!@Ζ`dÜt0:-AZנHWX vb#88,h %AXn!(,b88NPcC 9,!lsiAc?4AxGpDG!aOuYH$ Cd'l52@Sq㰾xǧ6Хvԝac;Y^sD_㯘ܽ 8.cdUTg! غ5 @'b#g<. @汞1A rO?] p}bɽ{7>yyv vcr!r(# sq.yusA"]iT2*:f~2;{ߋl\Yb0ÃYA&'4# db ǩ?DEp$̃7حӆΧSᩍ 3Gfgπ |Yg|2O?\{y5m|p `g7gd%z`Ӈ=Qffis3ߧM=~|{$=A.iSvEj޾? _ vyv aj(9ֺ#] 3p}7KzuL*빊3~ aMgqt;A ܘdO~1ޡEDXƊO˰ @>{盫Ff~&P1AE`>zd3q+c"jE b.52-ArsQIsWRBXTC$SqD5$8T2 G%2"-Բ~O4db|_8ElZn_7p My"k$d`N+R]|H@/2} Op'79ž8𨃋D¾Y d~9}"a]4YllLSmܭmv9 WC>nJ< Q1R=b]  yD0t\k7 y 0K\~c匄 ^yLUV8!Ј5Hi]r$\XNPGWCϴ݂͛]s]l~BYopeE%)f+ `KL: qptD+A* AmE YcMqS}P/[1YP=?}$*]ހ6D[:׿ <4(snqE]-\7@< 4hE`Q2-5UuF R lLqVzAZu߬mއ:G$@>Xm REK aj^@W1Ȁ7YY".yaaVƚ Yr7ZȖ_il@~n`N{ fiM]l!Gul ^ 9aiQ g޵LF 9y,,:`#S'iRg)VʏUe=C 8*0{ )|o#;,ߘIf.V^TTQlP?xt(TyMZZ(<>䛺H\AҐ)IA N| ;?? >$v,9K-放QpTB-B\!/H9E \]U^)A"r瘴\xF{Kdr᫽(91PǛ{b{ eBx ,uP e6sejk@=X,i'er[$κ V+ 4TKߜ_v(RߚB?c;,|3)<1f ~SM1r2)h2YfeYY<w %0 "Y5,k@.6Kڥ}t)1O B*i`!&|B -+ 7\cng1䰃A@`BPaFƙ\#6 W\.I,zuuE6n M\T9{ճ)uBpK'2/kY洃u,iAv`7:7ԩs{~*jyݲ@^ +A5XB&h Vvn|%NEɩйlӂdM4|7 &ȩgx y(^V`藩 OYY?ff(wF#0"z `[A=bA5BBpvuGݼv0#ۓ6\SlAVi  ?;%FZ>6i##\5fi8+!}66 >z9|@=[ NudB^U+h檐d֎ +>>3jI&޲ g 5*Ȣ::zc!2ěBYEC]>HH߽C:.+ B; hFI#w0"srr7g&ؼ/'~4|3̂upG|̧m~5A6aw]&+DG'G&LY94'S_(x *Esd9emσ2OUSg3?(H4G54vտ5󹿺 nƊ t BHΉJ?9>~P{åa$ŌWSᱚ(A$|A"֙x%5X:&=!8ܤg*Hgk=XM>}O{ lSAPUn]]љvhgH !PWp\~W y<&[Kb&4~dr y/UvVȓ %nב|  I`rl Ĩﭯjk> (7a ՘+_co A_a `Ҭ_X#^4م䙺N D|fMY+)*8qQJqDg  5lQAA"׽tjYR5ŻKK&mB(T RzzT+˥JrqY RX.Q>5NJKĭ0"L1,cV12OJ&N59T҆Bպ N6U]S (cs=[ ^߸1``!'/ ޤǯH?\dOeUf|NE1n!q2YO0T'">&k IzU\nx/c']x{s TUQ G)[X7wߠ x+]>+XS?eY؁{jHm:B01#Ug!uvly2>&-|:<^Al~]gCÁ炬FC!֣^Z+1{LL Fļ_ ^(H6VSgIGk 5*}59#}O b@^`QGtEAr 2*\bv VrK #m _,;/OpGBqTF| %,5,@@Hx-$f)Wp ȭ KFJu?N_ c]5%p}*-M0ߑf aٹ/漭ǀ|2h 3$JA T -[“ Gn?)!@``0d N*d|NmD:TY2<$!1,e;r]-hHC {imfi`A^uȌbli[(G_HH+{ b"H.VU2ᇁ͕k6YӨ5ش)ʴN+k"La*mlJt+). @B ;>䲇wMig=(ϝmVpiM U\ Be 0<_pT"Nζn֮o,+\!]:( o=V}?oXӐ<0 x5xeky2z{zn6jdkwGaЍƆ[GksÏ4{@~NDܮIiDʑ@)QD  VqrORmK^VIsCHn0! " Q'K9TB}-Y990/k:RF+ /"n<G\|>拨(c{~PW1 C%S =DuHL!CbN|A}RA 3h!'?uxSu.H(i KZ\<}KG.;Hl=P @nЩnb/i9\PR/9HN-$?-ml?CfACx}ih: ,\4ZX] %E1%wKo[.wU }5i޴}l/Xk ·7ۋM\~gE"/O"=?zHۊ~2_P30gN)U҂ĕ5wv*QJG=|})oι'4h**+EPS?3KX(ݖ?[{Fl< ?#]3z'4^4 "~t~x2yȝ%AhfASP3֋(rj}4K,|me']2]<-@:F2wXlm@Kzv)Ur*Kkd 1H-CJ-(_By<:3O"]6VkڙNӅR-{LݘP`h=ޗ'+.)oN՟>3V1=X]uԡ=jvܸ m:kBYߊUʌw^n! {i142ee|YHjʸŲRBDNU LSRQ$)*+vH+k{nwӧy@=C} }}At|o._:}ʋ AUgAm#_NJ1X WZHQr7ceسHP lmNw;wr=jg"I6Ibאj$A1[V-*Yjv,j4ORfdfR%:d*j*Elxﱪ3Egҿ/rz\ȝxD{Z[ixB6t5r4%R?a@hC#cƛ ԽΗo{1A5ʈN^N;SAQ^~b16w?ins2(t6\ Wi"?C>}풀~LN҂X )mHo^Sw՝X} 3u.kf,  7F_XZ:^Lk]vgj߳˴PbMGu~^ cf*32Z[JB[TÏB "HDoDfF[N23vY޵qܿ{Kh;ko-i'~pḨT*QZr 9]I \,1v54 eHstyt9r:KRԑ=ErL@+ɼJȺdkH&G״!E iɹ3 Ϭ$3/9@Yu~m*؍-\`G KmMoH^KlIRs=,! ,W>.\KLqk "?4g}B"9&x拟GLݱCV|u\;%Z<`d@`&tLBKH\wNb 1-RnYL;RUhȗB-}鹘{71uS'KNȮwLGG2\&.$q.fYhBF?؆!Fx3 ?AQUKVV:{;ξH˹X\<Yw9nhLjf[\F;Dxea[5\vf2TTWMu]dBr =~nxa9:yI>JtZz2!$P}-:|CwUm+/̚DSeH iDaS;fBՌ@:4f[6coMCATc3+~'G\'xzpiqQŶᰚ5\aHc&9o-,'Rfն0L*UBsgcS3v:T ջ Aoo;oy6scn zNZGөŹoMHv9+cյnd7tG4tIWI4p,ٸsTёb޶UQ?j5*gh`,M;[g+a eMm |Sf (NHԲ6nVQp $.ٹ1x˄$ŵx7䠾4a})VcIݱ:]@H??;,<1+ RPd^$T]F:w4\qu`7XH%Ter$2!K%K#z[m~'uzR8*'C2z뛤7:O{6*rWC.XēԠʘ@T+7@ǴȣgResh#{\'玸RXȫuރO͓*cBp<$ _|ɀ`48d_KAFf-S37775%l}l(A!fj.͍)MIItԖmKC M_]ˁmEEL2}Bocm.?Dڟ0-TrI`I$9 G<~1%5 qzM8>i96nv0UYy->zSŒNrW<wa_~b$=ZA`SVu߫x[B ]@L^ϣ0bӴvx-m-;NJpxll-s_x{:y N`K=/M TcI40nYdE G,7T(*(eBo44-m&Ӑޥ (fwֿ8D;KK$7A0Q%9 ,9VV:"0o~/{cl9S mY]@ށNǟ0VXy rŁ4~*` N;GiuieW2SlfYSwfkN{r _~u\''c< ѱXuL 8!dqKrʝߡI==?}gˍEpVW E4«E{i064 b NX,܃1Hl) v!GTQ#|۷~?nhׇI33Sc7'!$<184 @Br r5%9̈́g{ J;M" &|3o\XJ,ɡ EHrTtpqzHJN/}@t}fmS/%GnW(M+xwR q{̽[?Wy FTB1Dߩ]٩dS5\6+2n ]8<,@zEtj@Z|?|3i* 78ZV h6'1 Or@дG/Y9 wᣏ>~Q]A׹N "@?y BdےM5ʶG Ȳ#/=%/:]?i ' = _N ?R'ݮ~]pp%v?L5= Nn[&W}i,uԃI@VySgTQ)&cğ/mn! fE'eaNŔǵ7^=d6RT?$r=D*bZQ [* 7蕰Gd9SFYG$zUeb^i8L 7"(y/p4'!"?+Pn2+\6W=g:zjARAԷ/=Y0{C6cV !mkԴy&@d}[;j6AYD9DoΛ.2n,-H:-_9O1n8":_5 ^e}o|W3|1WYC3fwfSe-#\^?T]AO%\jVTdj:>3mc\AChU6c[.)eN 3˦boܼJ% ̘`I 8"S|2۽-NOCfwvzZ 2۽eJ鴷 g,-Tܼi3Z&J^ (^kO1M>c(DdxS(N1dQdШ*}\|ʄ{FHem 7@d|~W-ʆN)~NQvg汶ălck-l!'fQQ]xp/H:]  oox:{i[3u٤m/Y20 Əx{\]ӨkkrzCkѽ3;wn23EtdCOVB&:$z}? EMB#Q2%*$ k'yDx^pb= 8NoƖx$uOɅ^ӭ~[xObAm4w~ҊxPW\M;rʁI7Rz}I4Pav|GNm]'>'_zT?wW}ggeI H5^2.~]c`'oFzp{Fz(Yrs7Ic4d-mh/-G ӿM ? d*rq0xXF.Ӏ(--vy!# *66қl~[,[aZ8gX҂ :PQa~b~YȎ OR HJ dhЯP4XX3$*؅/˦({ijMWyUo9>W y dD^/}v8(i #G2PpL'3?R$0ۍ\I@fIɑqh QB.ǝMn:_G$HƍdCl}Rw7jv4h)t@MBJJb¶2+'2!C?۝=[K$ [nVӹ,y@|0BB G]/˥]N[Zu|э_`r'/wDawYv)/Y)^ĪMqB02jii&IҒB^){^ɍo!:)pZ]HĆ(PֳB d<8P;4Pɀ )XH3tvSgH-| J` L% b6XB /IEZ UZHuZoiK{q*4tJ_ַi2hD8V{VK]=#[oYhscO"糲uYPܴ *ԮȤn͎ZHE]! n>,+(<90stSDJ ؋Cs K W)dL9TIZtF+CiII [urw+:Рa=*<Ȓ@22n9%:A.eKmrqv}ۋKw$^ث Ņ2抲c=u ]|AX Ağ^ cOfIa&V5HdXT NT#5JHE(ڂ>Mڻ!-V3CGҬZv%1z&̼J\:( dА (=X\~̓|xSVĎF!cLl6-;F"WVЪ'W\8h$؆K{@Wecn4}8t[ -N޲e BZ  HhO-(zU@{6UΘ20!>Ȓ,JJdƢ"|>1s OT⎺NF ùBjQ 0<.$|& r |_u{3.ǚcq)س8 ..ΌXr%6Q{f~"8MPOQ ]d=nP'HeԬ$$"Ţ-ND-Ҵ͡VVd"t5JVH*)Fƒ7,:uЩݕa6XJgmQ\:XeBrpum209 8@%iX$;—_{?eUMX϶WC% TsT=/tk+MAOU;@'pu(YFk-5LEsXJT(r%3R-Y|0q]#9zAp%ZNy59k@h{GX̫6=?!:6̽7P)#zڢŞAȕ/[*pfI{W& [ gcI I51$ߥH/6\y镗>BHO#aS-&"M(_ (K K+BRA$#hRw>Cdg; &1ũX( R8 0 :+G=Uؘ#pibp1 Ǣcir)8:81@`r zF'B#++HfU^Q4bH"1Z1T*b(Ӻu#*2 M}Z2KT2C|$ 냈L<=d(ɩ<ɒ\*7t(QJZi V{ =KFp]2=WGCC++:~T~r YC.7Nln]ʹUʛLf/xgKtJ;, od%+B =s8Ԛ4C̢B]4bKЈ˹ÆlfwC7B@&_P.I+rtLȯel5P%;8?D-t0 d`="#RiD k b\1&bб|dXI4"Rr"8MDJF>1[d |B%L#+B1ǐ-Mau@pd`lqq3#+yX-&5/ |80]+;-I"@1?TCRΔ0t"1"k1LCJ7$YwLl}Ht=o{ז'=ᥰZ<5R?&L,F2^ g" ֖#@r p4X] L {S;Kƈ!NI"hhF~S?RV|xVuϺw}u0>~?jk~/@p85KZ^7Axϕe4FG#-ipmnٙ鷇4@o}. ''i#g3ٔå!:l:"'զ!R!A@)#'flz UP?$STTTǧ@7QSR ^ZZӡA.Q3Dpn_h*)YĤBZ4[XAXME<K?Ӌ. t}zE/˺hTڊI"5Ak bSc / noLLUU|Q0pilb{{?, ? DqzB<Ve"=~H0eRTBqodx AJhHQ-!}g @.nŠ<7X!aMTE򣋂iMEL ^Vk;P nY?{@iěj@e4Y]][K'p{<y{t>|:p`ji:_6M P6 L,)D^*Iտ6!d9E&Vc%jFN.(\x"^Cv„^)"D,XLs?= yޝ}azĽ{ӣ ;?gL)w|>k_\yI/󱇁3!޴F[}>]h(0> ͻЇqRzۆ=^R;zFg`JziA--/ZZ`, }+!]ce5ddž/f2hyIԵ;e{ҷ`v ,Vܻ^fVzGfC~aaS-&~e0oz>ch{ttvv~L[{~`ǝ5f zh>-4ӁYlN}T9l:5 +&ۦm#X) ā**bѸTi%2ګ/@ a{ wGh}Hx6Qpwv>D?G߼|Bl8 SFa:'>y`SWߙS^K', ǭ*~o-Z- ֦5h{ݲr%s8~S&!y텺!zN❅?v}Z|td-{fv>+ A:_Bjj@~+>68(AՠNFyy>[^l{~kZюógܳP׷6zmY{q?~~;~qPƒBmt04a7ǚ#7@hꈔLО ro\w#q9E>;i'5s>~R $"X)AE@~;K-iϟO^* LuhLk|f¤Rj| |(We'dhS9.vg,?G$z3el& ZCѐY(l7AFz瞧տƧCQ<68r}o@`P:pbC вUEߺE"l kū%Et-@|N CwBIet]=gy;nf Cp-ngހTٺ-lL\fIaam*թFmAUl!VZo/{m`ǴӦ;ٛ @B3#g D'ap΢C#ɝQ(!vwinb؟!d}+!}~m5X-;W(Xd֍AŲtw/ {Ŧ%bo\쏾xp:k-qCUOWwo`R 7c.^g Xd*֎jQ mDݰAX⋂%Vi_\z3ˆ5uWtw79rĂzbaG,'~ tVp))!(pö^sfxXn*l{S]PoÍ./YC6XLh6-ec! RYi?J)@p-u/`Pqa^ 6pz< 6*2"['gɣoY7nOSR'rɺr%O%?~zX-~jH`r@lC=%vDIeB +"[(쟎TRr"&-C(HKy]@aOxb>aA?п' )q@fízfKH|Y0*51GE7#x`|ȍ;鬞:_rٜYڌ\^YeCF)iάUə,ֈڌf&炂fX6`e?Кn1%R>"gХZZ_bZsxVv) ewFPQ1j+#uZkD>Y%\תfV]\G ㉘`;!f\OB|VN/S?qJbg!t=1Vϑ.Z;.`DW˸. GaF)WV&6qMh]ݶ6eW]÷eF6͠[k|67ۂ [G,VUⷹ\z߲OYW2n"LI6I^@]9j2|LRTHʰ\Ԩ"rFnZːŸR"AʤHg.W8E*QToL/̭is5}FWZ'IuZV׊Fr"b ]Li˥`V.BK;vJ5EES.v|̈7 W*n9ra_$)-BiDD pP%KY&s$xPP@8Y^] ecl%0}jCdk]+fqUMOXgUmVZ}3}т5+|;$rxE oCeUdRadLdk"ydJ|2!G SlC"}[[B,DZW 1^H.(`9p9XF6bUi-b E1iV [YHA@pKڤ!jb 9.鸁I\`@O@V؃P,Bq!V2rD#q1@{ Hj裋<83 Qll8#D4w?*?U DarN5qd\ԕq(#cSĄTjL"mW+`q4E\ydN]㡑"1l3(SNĕ2ElTQ'bD2!ILCN . CAnWQȠt<6 bݠ4 8 * $at.I,H~)o!':ash~ѱ c9@ސ<oMněw¦}eQH7%T 'U7r _C_-``I+ srͮ"*)7|qWG]K`&Q#'lܱY'#:6u<WWƆ= Y$A'QRL0LF`lz:uÞdM%q -4LDfkT I0-KI` QSW! L/8$ Τ޳ЇA+PF\+TA  d 4i0dFTiMGwX͑T*!tGڨda{0y*?ã+xEBg*u$@` 0T6p'OCt.l'oHTҒK<:~bSS`)غn6qHQy=t3wS=)Lyǿ/Bor\n~Q>4i.G,N3'I/[!msEYYe@WvǪ&ANLE0TИѽعc0pI$vN:٘d ΋99laN= 2sQ3{JzDEP۪hP1Qxli6YO1; /GJHiB%c2AMpw$MP8C=HB=ݪc=**zRU`},*&:"*o2LLi@*:u@.i*E$K riũ@p! )N4H{_1담 =Ns(UOn.@M𻁧OduOfBB׹B3A ֪9}o{2@ŒUBNw)#ߋ;Xt}3@c@F.M[Gsۛ )Ud UuM7<Z0?~5ϯZZk|_+~r/~忖>Fs,~\+Y.{׿Ɠ_?~V{˻֛w?nnge9e'J Fe|#@؋:R[wB@/^~nr\z}c\*g=)/_2֭t9z^gz_+c<\Q5_ַ4/ *uӀkOL|$ N% Y{3>'b=_3 yt3+ueȥ SJë&A\bY;LEsbTrvk YΜbf?TYXt:<.WXQQAݟWYB.Bkt⒤srȀO>f?=&vVRdy}YiYؤ'jqrD)!2Rܗ#^eJxg(z1C 8Y w8,*";j?ڑ9vYFz3Iv;%e2)lb埰y&kw^jKAd"2%<*i_Vg-dFbOU+2DCb@nb.nnA+v,rYP $7a!aͯ" [2_EB!"d,’YXCD , 6բWE.-S"`A\k` X QD !k48d2)2d)buA =(|8o|, bQUYrv~mVD"W岴Z|,/+u X1Ika-F *#Vڪog\[ _ Nek=b>Ϧ_g7RW1,or|Me5w}ݟ Ke4}ō0u~`LuXw D6r#ujۨ5T**g1|B8 j zˢ$YzX|-Gq1[vM8S3lw57@/5P9Xcqvdb ]U`aYekaZQa,ɤb\aRLj]/jeTX  @ʂ xAHu4E6S}~TyoC7T {pPDHv5aBs_P(IENDB`awf-extended-4.1.0/images/thumbs/gtk2-rtl.png000066400000000000000000001004641517644610000210230ustar00rootroot00000000000000PNG  IHDR`PLTE91-gI;yRAʿƽ¶ǼΌ]HZGVCɑ_IĻaJřcL\H]O̾fMʻ̗bKȼڎǹŹżĸ˿렚Ƚۥ}笥Ⱦɾ١ùûø}XEķƿ|xwɘ»ƺ}UCǷk]ƶĽܷЏ]H֥znyuqȾqmi¹̚u[F•ٜdLqbjZ\K}nsdTid`w³oucwSB׻qO@޾Ʋt͓yك~gaXUTNKÿCuqmቝێU[W䤞G?;8SeȤXf(b@v?vÚG؎}oCؤm#JFtRNSjw}IDATx PSY{&[ AAmvZ쉶#[I lP TvTiV}qڿ]3=5355eͼ% |In=='߽/~_zjĴd藿|r֭On}/lɦ*<pVw~ykӦGkM?i FFE9 [F׭e.32r&I1( 7*wU0=z &j/iܴ#zO@ssDꪜ ^y+24t'p nk{BȹНH(AVp{jvOeeG=nCXN=E`p=gjj:1 j|ܣƝ߽xg' |G=ӏLU^4}gs[hdەs^7;)3ssss"#CGSZ}kgb.4gnF?zg* #ߴpKy[5f7| @"C7??_w7q]/7V^ڪkl;3cV [z+}CTϷ 5=gML<1tNOtΝyuaCL}톞롡3-]]Q-JIKTVQ{6lB@6Χ[64P?O?|QXˬ|Aa|z֢ۙgg6TU=Qק4ʭճ[!*jL6Un@: yqtTkԜTz 1`zH|ekk㪀 3g6@׿ M+jZ;jl 8sv}~xOe~m H{zc%L TE߶mۆ< ʯljƞLWmV@*+1 U==B@7o @|?Dq+ *j6Bh4jE9,Bcd X*V/* qmh]T x( qU#\T}W@cj ig99QTw,BUx1*w6K?%}N_hw:vB<+խvR퐧3EtHhOO<>=.|QZ\Pe"tg*ޥþœYX!9|+č 5,hAi'۠kBw K2 >2@ۇq5Ohx5tn.jaH+&z21.J"7iObbgyʍX-qRbTHE`vb.taXq(v&[|q4?U*9vq+LР4r /+Tr \z6X-"Mܠs4&^Lk4}J\|Q٣|ix!N36hyarMN6/.EBEAohaA@BtըBݧ F:#̖IecBžv;fRdDX7&KjvT'rʆ> .ru}:XTB_.jM (1BLR'TK:7_'Vr2FM'r#.jhRPkMˤꌀؽbM$20N հlY!0z\)<"ddZan0\bT$B"?A&Kꌣ2.ߓ>x Z1W P˼#_' %j}Bd;|%l]GBBo;.BvڠH,5E@$LEԠÉlux0_$^'QU0GeD/<ɑxvPW- ^6_"lM۪/J2 QX-jD.R a,Lb'$v#ԦQ2D@`;G rLp! |}zi5#;b-BWGMԸlK~:-@@?7V,i!\xt`jZ *R_o-l:tl=`ZnϺc.' -gI<90zzQhɡӹ&Fgp E[Q/= Cm\\(:RCǡC X%i##Md8HTT$&rb s(X,'vӂإF͍ø-Jzo~!|aϷ01y\%,8x^òqxb9} :4U"MJKp.(L*rXθ9o-:R҈32tb?ep:&f}xI&axzVUQP;-يD ,g?[v/qNl:?6==?_?9OLpp l[ /=V*dզ +Ї " a~36U[J b1ZaUm)*XMOӧOmw:m-c;;;Dtl.Ql~=2Ytg ȎO|)ⱈ?,O]߆w?=*'8vXXڎb)ReUP"rTl3Wj C|& /~(t T/fCD9c!GOۇo|ek0lA1(VNFVnÿpgGŬ6ud s`jưX5X5<%]iA C!a--"(Hݑ#wscC>y¯s\/$1r4bݟFGWYN,9 31}O2-o cnB#H,\5ǘWx RӒĤE)ZbPIK})xSW-Dp1 $86KL o :}:E6fծHmC'"7zacY *Oyrnj'wMR)^T W+k r\m]zˀPN.֭& r+UbN\8 ,PM@UYP?%!|dg dFO}|LZOIvD6ar5s{6Y#HjL@<-__wI, CCkFL ru建`p0d!!;Q\! XZWǟL"O 5GfOQ\r5a(sTOq }= js2ڷzj:h11AhL9@qRtW+~otHwp؈nXfuc HxȝHY! F*h`L頵L)X"k= JA6+X^X دK+M ^gAkpSqb MX ; #=8 G@PhU>{-2! vl2=V$ #fЩf81tXtLKuÒqW+eA'LL?W* S]_k 2?ؿI2@wu|@H~EDaIЗZYI5[4/aO t6nRnzH5BUڈw/_+i.W}RM^]daIH[f[MkG;oՔI~>D}H=.;G"L8,A8ړ|N\6xJYޕ;56y%'&GF\r{|ʥ%wFx.]뿬cvN*W-Yݎ Aw  ea:Ñq9T{WṗG09Us_H!$0R LV@laB?LzVN^'([v帼cOG  *`|.8@~O\wIGGMI۝;6\knkn.ɻ|9ɦƕޚW{S._ΝKrd/ϜYگW cөt8+pKNrx3'8`?V8ghcerbJ_nU/y"8<NĨ\3$ E&ŘnlOlai%A#ZasA| ."teIe)Wۆ3ۺ$E$utx^̰ٗVs޻fjry67{?era/}xh?$v< `.2a !/앭iK :dMő@>EBL=sPKQA`G灑N[ aB@^P𥉉E}۰@ׂ! _E)mR^Z)@MYځ :LvXqC±@.ؼ8_X2\0L nC'RA j5YԼO z?_kT|6Qi':WM-8 8M;۬/6N]*@/b_ES]|F,́}IXA,k#^ BvMA`ハڭDޯD7j #8zXdI6BKm 2a%$ q!{aT@Ĵ'8?ӿ{/@b@8M Ł4]609(.Pq8q!%;z> /d$fs9x.kM29C/bl^.8K!Q\l|d.a xP\1 tى8'PN< Eå&$p:ȓcw,Ġ&R)&Z?Б%HNyuHdԧC{]` Z H/ 舝g~$D-aNjs'I& vؘ.h $zTA#V,w"+cA-ظcOx 5;SA>C'=\!@J=q )L NF_KFNSJ1f Bɮ?}:s| }cWV(,pA.A Ȗ.EeqrB>3CXЇD:۱ ^",dv~'\7NYqP-߭WрF! YJ%S̻ter2sx$6mWCz !Щ[ZSϻqrkBX}jv+2?{i4wwGl73pfe]ռBo7+sKde©8{UkB|r[H. 9<~ Ld("+ _K_PpjpD}a O,ֺgʞ%4sqI`R)e]+R(y)t~uY+ʇcPB6z!B ųD^ abd,FKt2ZBIM%Ǚ#U_9U JNyey/3<+s >_Tk Y=pAtV}Z+?i8 *KBYg 4LFqwƼOD+~XL^s \Υ]9I¿~DoP@LƳ2PRp~2m];Z!p4p>)ʱ#[u2z7<n6uǬi:X3s/ǃwwPI~pK;]?ps#n8Z,\*(Bu?qs 6)ޅLɰIJs{s6k 'lƃ3UG-DsyMl04_ھ du:6TW}Z }uxC'i? 5锺ԩ+|UZVlU5R]Z874<)k BXtL 6T̚8-%7_ɰTb|mM&%|T :琜 3D[RRc7yZ/`q .ayCPE@AsH9 ?ILx#Iy]L-=Q$GY RP&&b5<Ƿ=s7'8"RSѠKesۢl)5$T.EYĥ^fN=!Ks-4cUZɡth([ks!>!94CAK TM[W\|x4GZTY_'>DRI|ݞ=in9’68fА as/"6FؠWMN[)R{O'1FQtB(Qj1kXDž[zV>`ॾdR{}6PM8X!bn.a+OBdv4THg󟜩{2T,w*| Lڬ /np'\M k8ⓕ+Vmjl) Mtчhk8 lŚPs^` ĬK` W Ym!+ Nw=OL`a1,?PifIGu zV3Y;-|ڦ-^aQX&+H HJN1Rosap2!ss,$B3_+)dYɁL%^|%m%x UÇi4Wv+yʬ7qDZG-Q/! a8}y ROGkş% .# 7{ݽm#57]Wusr u? f oڴy4$2A4q9La04ߎo@|x.a /^v؋61G-Rf踻*JЂ3s'x>4QzlBcn@pv*)voKY5%%jN۝@Bx3n4RZ:Vd\6MļPD@^[Eʛ0 RN+ت=άӳN9s]kZvNCgf޿Kٿ{lB&9WW$/PC~S.2-$;.E:tw1)>I5HdM {d:cc+c%1\X%j륳P!XNI u3awFFB}ό$: hNݕG 3t=HCc$I9+8gӧ~ϋ+ z,A119-CBX;*INDcC<.BJE\+h2j:A,"0zMw/ýU׿ErW_նDI BOtDCOKRSֱhA=qZMGcĶRc"ͻOe=\sF *-ۊqg y! 7! _rs{DGR)~Q=9Xɑ= <)EsxBHB[e.@*5Ah4 40cemmU b!l^S%H/?|8?A-~ l x:/C mv<:;e‹˩|"يvFR$le{!$׷9o; ,Jve>yY#.JʿFSjS:ydB a(i ȓb|@sp6jQFȺ'@ V=]g^XmFN4 ܝ<:Be.%kbyqеOPk|dĸ8L,w߃}\ʇ)bCQuscNEr"-djz~2239ؿϚY.~2 PlI4qwmN C# ^!/xa.VS|ÒLp\d$9MOONC8Yay`#ցItLT>_nUy視[Yapﷷo} rt5 dnxnfizDRQ XHT5IJrxGneMyH陣T|"6#9\sMhA.DXH 6n]Kj>~i olQeMTOBɍ0݄#,D΀%9\J$|bOr17K ۔" ի;}i8UƟDxrsT|]ʱ鰵e AkHMT޻D@^b0rl==TlΥkM\t Pdit{vx* ل$@~W,_o&!/=1I}hѪb=1֒* L?쪊L%/99@/\~`]ag3,yw(}ITrY+96+a5_A* g>H|ΪKp&m͗LNeV$w@[/PU7R6Yf2Ɂ-!s{k ]X4aR82Nְ%Hqʵ/W.N Z:U+3FwLtPIeey$*@0?n^Ҋ??mDi@=}@ªͳ,fZ5n 8\;i!x kʼk2$cȎ/z5άH w{'23UaU^Hrg;(>+ۻAXg6 dk]+÷7ل&0t,XzՓyz9-9у"E*aš0<3<9l,o.Q&Pi@EjBfFWf7N' b"}."bͰeR U5Su#^3;oz#p$chfGȪB@ Lr-dfƦy8~W? _rSdq`x8Mwjދ7n-£hIV K3 Ós ^ȜZ?.u(vbYH[Ⱦ@hdh6 ^-DV] ,]>i}_U{. c3-Pv:[+ɘLDnl]ذTcR=ZR޸R:%!|VE.䰇eAn"f $Dbټ,޽@P+K7#B{4SuW%JFf:Y l@6=@o,qc!3ם4P\K:Ho.fNB^{mE䄦z]!KmqwNz!pɂZrPZKg@_mܑ5$uaC8plso@/%~Tk4CjE FjIJSA=b߄! p.:JHl$uy/ DSY@cȣǏ`p(a * #Б]zH)՛*4ζ"> z. !~6'/ZE% 1o3~DtyEؐI|ozުr'/vhȉ@**GݖN MQmSsMB?}Շ$Fb^]۬=/ǹޱљ0hI Ԑ#p$f 5qeѲv=B!N@,^G cB.\1-R:J-A7 ^/ݎ C罃|{F}c(}; !:r^Vr N$%  `Қ@ViUi8 ݹii@fpw«YSmPŎBbc278 Hz]-R)K`}[ i/. >!u|=uO?#{re{]M哸1$?$YRs`4I2?{cK{!7n- /_uvO6IM $?k" 9{װ<2:fѱ?ߙ1u֭\*:Kȫ{"rp7zAܝR2_YX?U;j 4{xwAH xA8 OrJnfJ˖q(?\8"};,WCӗ) G+ote8^xV߰XUYKٕAx5oן@$}Ƿ?KJ' MWvnٿ~QgZlb,VMf6Un 8{ґI@^^H_-5iF'`0I\bFs(T[Wnvb#(X#3ê޲Ypryd9/ey *) {VAw:G[A^k"yy}s%Rkb(caNj*Z*+ WM&M]bm2L?:2Fx^Ne16 Gr!LC,uWp1ѮuĄBTQfwdO/>}W8&MyZ8$(**ڛG M_w%R8OMp@"rqM9D^C*X˾ khh)jEC\|M`M z|8'×t{Q 0B5>T٬KLom0=Un鷾`by<]s2B"8lWTD)½__|v8g/d )IdcO%+X߃9~m,yȎI(\&?"- !몭ȿbm?WF"-hƽi!-*\ۻo+΅hq@~Ĩ̎uٷ:1"AI0UjgfԧG#3C+a0 "C!+cVھ5?s=Jnj*Y$pG.cxs [ )KZ 7tjk6 ێmGF{( }&V P]~p/pK" m~y\DO_Ζs$D} qǘ:z.ޖ˹}Y~G.Y'#;+@$ _\VJ{gYӳwZT•ev'cR5%RrX1<R!ݚF=ldAǎF==3޽+zc p"vhIEO!PΫ5] \k8aj.nh6 MV#&ea_Z,sƀȓ&\%7MS8 ܶ.|E;~B.g~#1vHQQQVPTQoNot^~Ae: $fj{p"5ǃamд l]'C/-[@P:oxr"(@ ()'dcs醮bӹA:|.rt[?Lj@ݦf0p0%T; ХQ[em .Ζ^OyJg7bћ#d|@"wL =xjgz} gtz5UNDhQB"@H9߰focw DBQ}VĂqc!b|m v9$Wہl};h@_,u/~V7D ߤPS% .B:ijdޗY? ,~&g;oUޱk2U:(%']^$?s;@6ITC)o:ףjГOUp(FK=!w*,r{q]#7 @s }}B' jaӋA  />Z,!GĸbxL 밐kt2U x&ņWu??7ėCnpBћq6mCk^LJu6% Ǔ_sګ@+mx]~IqWFzW{q–Bt\mh2uiic9%슂qU/u!@%,%A<' <$!D4 $N=j7ki4mT:/"F3% X*<J+= HJEcCN/9"ZrG ! AG)HpP2qڛ@8Õ69CeEE{&B"-i"^1:p\B@N-N:B 8BD1 S $g ʵ@1s/ GwjLgo(ͅ'-οd@rbwt~nq~qKρ3ͽqG7B3#(dfP^>$. :s )+ O ^Ε*2bc3(vɒtV*wYfWLMuz~̉&} B^=H˶Wo}v;^9-@veYVY=ʿw0ֹ%jJ9!|V2[@8Fy /JM~OnJ#9P#y$B(*lQBFL~WaМgv =i/y$n6T_3uE=N @ܵ߂ouB8NM)>}'% W4J!jZQ#@&;K/=p\O G:rz'׭!y/N?z>63aY,]a_d׍-3óIrDecMMN~ KBzAd '~pj8vOtX@wwc-q nʗXKjjZP?8 %bJǰJ9TY1Jj .|g 7[re>qwl9xۋ*<\yG.mA3 I*[7dϩus+30Kelx.oj;fW:F:2gGz㧠i-c)~3NiSܶ(b#Z~av1"=^CLTBn:aPg AvElTW^ۣ,XW ΃,+͝TeA]œƠnp뿑֟eWU), m~*JOLo|h] F=*-b{0aw_-jal" n&P֢lD %P% ͛3L 9l&A}Uu^OO.SƁp?~Jl9~ioekk.7wEus/= xMp}CO(uRX\Q4ɩ& Vk^wmk8*뚀_'SSSע9s Ɇji̳zw |@F+ Z "S~bI핶+&ԋW^g1DT`ί(Ho\JLShz%&;pKK֙|ruF֚2l֍4SPfarR?@P\8N{$kPĸtk c΢XAq[%8a@¨Vè&UOӈH9}P =Ek9z q-UƼjVք6f)uJuQVellTNMay*2lhi4`3OջT] *9p$m#@wc!<Hȶ8ODF HlR/i3iЯxAQg&?>)tpS&\S,q)My-css}܆.}s^Vi255؝W*dZ Ɯ e.fMϚZ3Yf̍g͕ Z,es,eRpefj.lx-#᲎EKzC,B^@GG _@CRõ"|2bԪ!+0BiO*&i=ppȚx8>;.6.bzGX,S2f~\¥#@8t]_bYTewf&,; s,jw<>R6X68kY^Hc);,w沦3'ˆL'FXpPG 9 $,`p7 1$qՓ|q$b!sZ{cdwFkz222=<8.S,({BF,s0p, )3=9 2]5fى%elfClE~QtȈ1b(r&k Ew_VWmUx1rz* 7]5daF +Yʼ4UKKT5"ו:k)S9_5g*EY y:NY,o{QЯGec FG р$EPewsECa̵OPpkj1az}@X8V*T;:Ldàh2bXC!F;F S$'P,,Kl75WE ܛp0S} -9G^LQt%- 1i30)Z!H!(b( }!"\{0)b(^v7v1kǐM4tSb}[`6ܸuƢÇϣz޵]R}Q UۺJz@,z4|Եg~3Ǎp2:7XixYc)&9b@ #tc!J5s] 'VjanlK>m|)&zAiSW{zƇj|WZb ZW,qw9&*Pa㺥<gC{ 1q*b(BP,y1D WG MT0oLPaH*V$vJc&6"|@ >3apB)*;6ϯ4!@2re=@""u' P/1&[+$Xf/X;"aRnƒ]ehRުC߰cL.44!/gr˜ Lu}s&kF`*V/\ ׼ WѪ1>>q dՏ_.=Гk鲶1\Ož ,?qYד CؓdmiV+4]7ǤR1!~1j\696S< ^cbY ]WNj +r=~ 6,?hX[ хXD[#Ol3zRR"QmD 3vk*LAzl!ئڔ \Eb>"z wX̖b~8R8p8pCɮRt0}4&8~|ޗ)lFvtu5x;;`DYVrиlmmr0f 'e' ?| jbHCE"]Io<^F))1-nDc@9ZD_]]Mf.-ۮ6!Zx8R;ϲ0=E\8Լ'ٱ[ j~P;#o3o$CZ{lэY Pᧈ,CM?517Kr);Fz9X> Ύ5;ψaG5]KZGvD,uXf(>M֠x"/1 b0~ueqZ;*-z?ih6Gʴ[v[YwcW5xl T/k' @n;h_@jC[~MH.uRԍ^tk2Sz$|⠘Wj:&>J^7QmnP|4=2R]k N̟vG;F+ڱkq=΄,?uՙ{^t=|46uǽ^Χlm*I66È*ԽVH0bB.8pM9^8 P:mm4F3^j ,/VOPx٫FceZWp<$ciO=ҺGhәlk:\! Tvk"Lyfelvoivb#!ðl6[cm; aq]Y7X#j,H舻z*7Rt=ZV׺׮.jYWזY5*MG''g:X5`O?qM=uϏ ~ $&gny}TqRE#3gLƿꮭ[^4,*O 1keً`FTk+* x^] T_-X,h:6_ZQ]kE|=Omٻy"G^rtNZ}A̪m&tֹu_UIXR!O ڍS; ,]G˺1׫Uj ߥ-`1nFM0a[A8/vO?xL"?݆|^=|#Q5 y*1v߄J7HL1w r?AGBӸ J1 z IG_o|)]KG,0Af7krkÞ!{$i[B6ipd,9R^gKbty09%?yp/~g'ܞw 0H*B/8RKO\ǏF -M K=y׬ \r< l6$伓Gٷ22*BxY_R˽*G_ߥw -@^|w~/z@~|O}G|/_LlPv[ aPolXUk ̈́;ZplZ[?00{uffaqxdt2Rsp\,sD'&U%!(gCq@>᧟~ߏ`x/^`/ '..G<흙]q݇cp>^r>~^ Ԯ />.gF']ѫETsP$uթ)|,M/<C-XR13hO/"@^?oy/G \nt*bso js=fUOLZgX`ѱӬO]OjHvflԸ&i;w uI ҡ[_tyn}q^VK[?߿| Ox%xBŏV 8£S‹uDpK\(%S|Bd--:ۄܝ4/7h!Hv= Xp] #55 kRTs@HmQ'<"ed8`ލ+:Ly,H1 aMIxX.dERln [-*lc괷,fOm;X[n"6( -TE\.m{bM <`pNG#CbIy2$j)nܯ6H_3"2A3mua̬s(!aθeqgNeOH1Z)0L-/"t *!C!Zf)6}.ˆJUZ~RY26S# hرĜaunDʐ2n<.g))gS0${]X"!0Y,NKUEl(R%Ufh 銆pt0 Ύ?@c(29-=:FZ/ĆmkK%\ayTsOOC ZtR#m)TWڨ96@!5i*& BEsK$![(=UMIFl$r 4hZ" ,KPRؒ@fky?6sʥn֯>ݺNhFy{["` /'1e֔H4XsqأB+?G{x. nh^i1#KSEfX;ܙLI3n'~ ~mvxqm~u}M`Extelէ+@iiV{fhmk|1zρн*脄D0g+n;o4XzH1B#NQr)|(Jx¡\0hԖ.dRah36akRBi@10+c3˓RL4gh(kfrLQt5{xl@ξ}}}%be|G4SG6)%BLS#_Ouu~\HCPVmLWײĥ1(Rr$%VE {$R#%]RߋNw3[-9W1U<zƚ:]R疣I&ru86q݃y@z*7RHadu"zCotyz %.ɊZ^pHcjR=T{$rSdMٟ}N"z?EI+rtf(yR7d(>X<1Uf(Q \ȮkKy*uW^zҩ"Rjpmr} %u26bh=? ~Ľp4zXzCT,)~'S;J K ^GN^ LdC+x=donVRק3-DdGV`ؖ 8 3U\FSdK *-XV ֐,%d!u ΗI$WV&pnn!~/60߽0R t'%g=6R#gc10n>@;B|df ԇ R]z>B{ oyjakA lS.VFN 唥{ecQG @hbpXjw QK!?{GlSr80v+^*HdW rUNYdb>\n*=.өvw1ܓ!UzcYY %u12^=yz'CU W+qg*`tvLfa0 sY&]h@c[F[gl{ [Z*[wcnSڻcL҄v_`bn"duztK6$Ǚ9^ho(P¸onp V|:37F;)352VS@` t\<OxN+zh`Г-Z)5z\n`{H WÅzÅUj.σˌ*5=tEk0SԜ!_t~7:oM~LٳhHg#٭{{CF3;5ݸ!0ŜNuJ.gNg t[V p^ ^WxӈH}N@L~nmؑ k`L F3ˠ_nn>cNeՉSbƶ`%:۸n>o"᧨̤܋د ɔfSqb2a*y7;Ś ,Rf8FţT5,zKn9˓IX!ϡsS4Xbfk4) vȱ::;_;wzm~h.i$ X͛J5MInQ>Ն8=DnnTof.M-7QzV @nDĻQL濑nAK~Cf/9Ҟi/uX$DVT$;ik984@0ۜ{ C$+aopNž*%͊1?mH'<aa!EVCjiJO [D漼z2\#--2 =:hjK<6@dgatqMj6~J&1{;3Zt&f1L>+ݜyB mj; C wmU sUye?\-L !|..@aDI7gn1:QS&=fjb/'^i많DrrgC z$^ f3 z3[샅2Ezկ]ow ՝n>.3L۷ L 8xI̾eKN<4wP,ܔpuU)6}RU5B;m 5DȮȆqs9iq0x=\4 @vUfXb4ig!4s8b>hsy{cO9.k4k8lt\IKTOk>3cu<IjC/Q}xl@>.LPR~j'zMcq.=#iO0 ? AP ץ\t !!L( %gBiة4.ſƟdUi3 d썓@!:3\(D]z )ȱ6@&ےqt|D=w}Wv:|@hlddtotu8&[%7iK$Y8a|v{v!u!>`C/$>WsփCXm>Od?= -nJDԔ._>:P)%)0B y C1D6H!pP,lj:@2H )BGz]@N< cAu|q|:y EG_IP@`@P _?nCap.Azi9 =DcJCX" C^n4WfMM{z4ei.ʐ:l_E$y8zCwd~3d n)Z \A42|[d S肝=6j$9yr[)xU8؊}uHSaqhOB-l~沛 k=vH]a쫀>n9N. ΀/Չ1 *nѪTl *'B_: pjYVzӺDġiBZxJx_a|Yȕ|Y/J \7W 뾬/Ηem3^ig7 1&/ 7g|% <rF}|Y)l_( Ⱥ/ ujTm£`/.gFRp"+=TӡP:i2 e.*l !'c{ ~!_o=gsO{=_Aa`\dZ0IWsst߽Ռo.=ݦBܸ+i+S1b3]W(mƂkVvv=@=k ^۶8>xb;qaCI ,]y Ňb 9IA*ZBG HAB]racͥk)^7oONn2p3o%?{˺_?е, QpTEH}"(NL<.=uNxPb}AAR]X ;8w brQ'ޏ]i{n/reS(_EeeBa4_)nS1&ot1J" L^T#A.]R(J#;EtPI ZNsIW%E0MQkf ٖdma,=SQ6t5]2E)V$2=p"- ֐ ŲFl87(<됶&}=p=EjxPhrhi}Kp1DZbWoe"A.#KUwj ^X4F4@)_'Ѱ`)U!&HGDXP(̃ =];5"AdO TJTi6yNݯmƖypiR:"wm਽5UkU=ĕ:캌=An U:>t /8d(٧ hH *E# SE(( sw) ^%-ܢK֬d̰ś6"f[+IENDB`awf-extended-4.1.0/images/thumbs/gtk2.png000066400000000000000000001010601517644610000202150ustar00rootroot00000000000000PNG  IHDR`PLTE91-iJ<`F:¶ʂVC]HʿƼZGȼĺ»ƾ_IϙcL\HĞfM]OͿ¸ʻaK͗bKǹŹɿȼ¶̽ƺ؍vɾº÷ƿƾԕ_I}TCƺ~|˽Ƕs{w㨩бzlxtp񥥥ŵМyl^ĺ䟉~蹨[FӃ^MٖqmidLeVjZýrb쟯wsPAhd`rcؼoõcPƭXRO|zu͒x}is`TGoݪ˼_vƿ\XG?;qv jw(I5NYϯoa@{<]wDzŊ0ˤQ8tRNSjk~IDATxyTibY$t,a *`DDHw4:-HXHB Ȣ:s9zn93L{̙?fzf{?~[K*aii|]O~uR1gj?@:\*B> !YY٪UoͶdJ TPY$6U+*6C6j ҫ)JSr?63zLowVm~G@J@ L+-> Pb@f<ӊ]]F'HfS6 vɛ*/>v^lUHߪ{OvBlNy?@)o EOS* ܻwok⽮ۖG>M}hӧ gk`^EJ Z?56v[26}ZoOX)oXR O] {gOR@o>?}?~V=?*1h}6e&,uϭjFn}80l{e<x7pmbȄillqtbB}T^_&HŔH?W @L,IõƊ<3螭ix^;{8=5]UoB2vͨyQHv{کڪ~}O< 隰Na!HɉI$HȭkNV??05V=rnuݐ*gw&`oyx6:U=:CCHHױxɻpxwwCjtcƌ!~]k4 HC?C?Lkt]}ホ㄄'}&'C&YP"d/'/liȄelU $VW_ޏS~CP>ᅢ2c q260B!x2*ᩪ﬙\fcͿyLPIw !;{ 4)L[Qo 4ޑwC,//us]F ebrlN].cge4VZ+;V`ERBdoSo*r[^#.XƇ^‘M>[!dAQ/+AE"kǹň!"Ɉ R.CePiFP!v+aAn> ߫3ha}nX9>8M|ƍS*\Vo|bU+u:'F˪W&!pqAnY3a`%^-Ֆ7$bðT.VkĦj V[LZڭјa-jkx M٠jyŖ֠ `ԛ,1jT2me4R\m8 $ZZEXQ*˕efe5 7FYY]n=jmRYѕ Z+͕JeZڬPu2O)sTV&6:3325Rn6pp$bhY\+fqtteՃPת45ʢr4>aŃ*MMMj |+pClVWn+uE}yZjD֦AA*?`45ȔlRhzz&,Ե\S*DeM1X55+kfZU).*(S3D*8J5UQcc`:4(cjP<Ҝh}mTvͬVF蕰ʷM fsYg5׫"ʛLZɰɬۄӗ)ŃV2\SEZLJL,]&T[Z"9ڬ)k7)Uj[d-:jsY¤W&dTԫ9j*FК+Me2Bb]KV/ x`e Aɓx1 |̓g|xAVHݤd-pZJj=.!CJ4g11[> ,,~$m4w.z#A {;—RT{7H^)Cl!H^T2.7m2@V@Z\ ƽ}Fɣ.no$f+6Ez4|;^*ux8%k&j4Ey$e )T`HF>\" \ B>hq\CAo{傒 LV[I% ߹Kkf85G0A6OZqa@,L?=]$eHm}Ӝ a BRFR^WWQ/ca V"3co_"u/ /e4R4 bIvV`kF_bV j# T kyZ3hAi<ކ70{جnz>'aFiߑ U{^:4mBj$hZ#!*_|dK؊?~ۡ$m烗WAX)}K3`!O^Mu_N#ΦM8< R(-Zj1lgKoCѪa_cXAѴk6Tk`$ȗhUP:]y|ι=I̖iGٛX'z0i{ !Cʂ^RHx"l[.ѣOYL\8B,3UTZ,3G 7XMjuH 6B&pYjkURblv6/A4A83VG䎊/xx=yd׬aY,ۊ..%, nJ2- IӴ4kkC]o# KzbǮoON۳({O>.R?7Mycx  )Α+߁m,upOfJ^q좋kq1.5IuJ^u4^k`ZN{pt5q}o7uoAuJ:[x @ Gb_b;q wmBdwFqX-$Id"s R]ʭ&# iIg nySwSgn6(?vDPhQ04!Xģzr]NA >ӣwm`2Lp`eU+I*NP[q5|eI"(ՕM/CARv:z I|uHƋ}vDGGӏY[9oeiΊ=i?b,A~ ClAV}vvd)-  ͇[a`i4z{ :"zHI BXc+KIATkὤ $^w&ZԽB;WP-db%/MhƶX>bC='u" 5oGhR*.ȵ=:Ŋ@[IYMk~`ԝz•.ᮕՀR+!r0Oj (k)cr ;iO[4"E[m0 ;* "ܾ fU( 5D/0Csf T4ST % /dBF'ֲD_&[R'Sm>9eGd;rtnATt|y wA HAJr  f0/k:*Y|2B:!;"F7 ??9(xk !HoӅ>8ޗZu)/FYS > ڲqݢ,t3m h qbb)i"YN}~ x`!wn\W*oFhhqb8k |1&JPMdi(87(NFmn&V\uא 2&s/2qvvƟG:R*QG \Á{; Y6m0P أ;vO/ԩ' 8)'=Fh da <}}CGoi<فD8QZ9B-2R=sBո̂6#ar:E_6 @^OQsul st6Is H/C M0$ YB@d@쀸bHAv\] k^NH=nXgC< l!>}H߇8AXeIqK% D4F+9L۳6hZv2#)Fs4g DhK ӕb'#_WW8N$\W͍ ه"Aw/urv =h\a cV`z9b/ %(%Y(5*O!s`вr`!9$~XXciI`!a5B `r0#`wabHT+o/.Tkt1D,0.2`8'/;w.]=(;GJ@< AZ A-Rߗvc|?JF1;;#/ rX4/< >{D ,3\ CJ3ϷNb &Yt!D: G QH`w~$ sсyhn RoJbwN~$$Ԇ ݹ e%߇wЎy?h*B'Ss3a>^R{ʕe/ =УL1ZVusëFP[>e!?ಷ =-1 %px)#?AN<%%2nڰys|lʮ;1x{S!ȜQIvc`$r:ⓔ~|90Pʉ; CHG宩{d!74R\30ww E {&[YygnA>pY<$+\'.J*NcHwo:|s䊼Leӱr+CC3EFFa .|"9Τӕ{ g Bg8n`͹`+tC։nBt_צG?LMւ :;oimFvr`"i!tG':˽'FZ{3F ~)?)VGCnuJuxz2/"ԘiySޒWdxCWY{mp)I!.{Gnpfx" l줠Ű:[;- l~fbǻ 1 r)!lQ{)j;_I%җ&M̏N<5qѦ\ms|A. I_XqN)S[v_d;9v]PW:a9yB'8h*<W4%!ƭm#m#/a>,ra͖e t ㅈ#c{n!<,jȂ[zx1]G~~AEƳogj_^]^QejݩK\U%DqS$]~Y(B|f7:: 2C6󛚚m[Q,\ vUPɶ X;^}t!1mleؼ6o/h6[؃D!i= tp~AuuJMOySyZ\:>hS),iCÅ>@B(NƦs= @A@9cTn+=Pj=eO]> I:J 3PBB>/&-QcrjjT9!QsQGooN>9C.IIi9 $S|2"jX6HtuM}eUCyv! {~clzD?IϗB5%N""91q^r<0Օ5T+DsoWF+".F6 ܛR·۷}b8sf!u8us7XHԏ`pnsA}N'sr;;qn] F *-f3CB&AJ-S) R#2Ky)ڰ¨hQUWV6xz6 l9bihެ 7 pIDA:RT4U{êʰ$UeAk/F>X)^Ÿ D-,L$ dhB.}*wr(Ń`4},a$HGk&9XHۍR*a&H).oċդg#-ޏ|5Okۙ!<4j,dĦ{Kt?Pel*gGoool|7geMfO6 Q@AsDyF%,@xP@E8 bRA}(Ah@acH 0(J.y Q*@qYU| SnsоF@kzR6h^A3ytμP#ݥX(cW ѯ>#{CB_pu*C{{Ňz){yQPrU(m ,޵ns}m2k;ͱ9 Pcۀ㏴$hW+b6+gmsD{3kQqY?+/)@)"2ؤދx`?yޜ1y gn8h 0B6b@*i[%'w 0VyvB_Bm!F8t]d>7Z[= ϱHf*o- €ds \??3PBI4Fh\D8s@cȏDB($(Z,XurVYs̹mzguwHsZw ~wyg߬,vtDd;G{@b#/B陌ر+I-x W*)#O tiSqU~s.<iMy?P3bO .zxB\qG޵-M\s3 ]CBv.![Z%>>T5JitE.`Dʿ`yq}qb)#bZ<eDB8hO0%^<Yگ|ݛ~(?u4dgyvwÈd{wt^dB aKY+OGslH N}bK Kó <5!@8#DC xC*u*\X,m{.~W{ ԢԜs5Zyy¬\s`' @bbg"j>ݸ~p&:W n~×oޜQRxDxNWWłxjZ$9l 8P΢ꎢh։!klh>W')eu20-GCJta %%=ONqIB_]R9@")P 3 FvJ#Nm v퐧gkaq:5S DX֯ @8@2g٬?/w@\/lt;2z f@ŘyzQ@J~VT_Tt.(O.ŝ*Tw*[.S N:(/΃:]6Nb!K]I=atn*75eרeI9r\1d aAyL~(,mA5[X @~Jʟ޽ꆼ'e(Xbt;gFIu}cd6& Dތb$y$4U+ ]vl{)3d:99:̦ 91@RXlͬm-I7/02MRF$pF=kxcƻɠN ~Cְ @~ Zy8\J(L՝~CuQ EJe?:eaYT]:s$]CLB`.-4 5NɅDy!COsП1L5$s?]!5W%// :tF$ABǟož/ g7T-5&",h0Ãb<". q%92ѕv/PIi6IhGW7pᕏ[346uЄcn5qPh*{'參.K;EE9a@P18' bcAI}@=t]cY0, xA\KGjǘ-Lu j z$_TT\WP5:lG^&q:\'(ɓG?}͹,yANTy%ӎF:{'v=!88粐~qd*FB̂ @ >@ݠ'?zr'R@B9yX1 8@t7MEX]z_ G~}ddsd:nvRG Pz ߱؇*(e!'O;4'.Z..}ҋ@Fzvܞq[HWBl~ol $;w{n8%bܢ @.2s6%A>@ *4J>{Dhg s$WPCG!7?|Jk\轶4;v ,:̓0Er%9ǟ޻wϟA*r@4͇:Hz.A\p,i@v*Tj=l.0WѳL34B_W6GGgY!Α0ȃ3פ{w(Bq/"f\*`!h 2m!G#Bps15\@@~vY' 3-7uq!R|VR q-䥗Bh!rs#׆i,m9o Y9~8 \y)𫧽*NYPv7TFjFgl9dI&)eAw:l^[e<\}V@ bhTԒ6 `&wIBO]8mz}J]RVW)YO}H a)U@cprC(bK蕯rE5ɍF͡bXp[,HFi@'2GUuҽT<شUr:/ |7|-@ӟIͺ!; ,ē`hk$âsn y,mM[}B_]P/cꕐ4ZY'c1Cτ젩A`-8٬} \?~'@s9GDdbƫ v^-hKLL ܺbi=ϔyշٔGn5UԡCֲn\'@<1suNy&9߽{ :|ّ lԞ=*I2 9?K;+(<5X,9UU*(Aܨ[eնή[{WO(}!RZOPXoGx݄Ep!Zo lkL1JGk2 meږƾee-𬭺 ;i=]F=|rǏjF¹IlV9T{p8R .+$, OUƭ61BhUHlAZv7u`s4>ft>"TK!r%m /nw+H֭8N)_j<76'6X$\ ܼS4% 1VRqni"Cw C'l˖-1ZĦ#1Un_@~C$ GH%Z1OHVtKk@R#7Uۥu{ $i E}(^omQ\o-U,>_ ԆSX\DMƬ -4jTb\ooɭ((ViȆhĖmrU=%F0||w>ӼhAնnT+7fv99T* ҽp)6<ˇyU^~ T y)@Ξ=ot! N}Qٚ#?Zh(T74y6C p/E'W׋~T XFU]u_eL[*EՄD%H ">.A@b<*iZ'I`YN<=bgcqHC:6?q},$r{ ) Ș$8Gd!\_B70@h{`it`bq({y렫4O$8ݳ-jqN6_hccO ܦ59s{q"R.!k[G=a@=A4GDgGHt],뾽g O+TcIvI!p{ cqzw'5#G/}Wa9qK`\RDF طcx~+IJaH_+%H,#3(zy}]!lrTyv~|{b2}v-$wh&1Qhsl5Il [S1e3f.]ηv%Z[Um`wD_;w.w{&Q oH8I4,a'}{ș",c[b}œu]Z<1خTz@O{}̟="(d|mgJ;j豵%l61r%P^(k!ĩ?dp?Dl 9te[D γTu%&?|K7{Pz oҿ 8W["|U[b6T%T۬jV}t[kKg8C6L6qA_6YqZK^VK!Ξ.9^MY=4|wWYj;kU[k&V`۞w`0gDdri!q~%PIk ZIqT%- RJFaLML&+rҘ@m6; F>S oIqH[Ifgc6I0y?>\N|>na`.Q϶lt $B('}]kBMVw$Zed ,,H]E H렷^o!xxl FBȓeجxMl H\NvJjrC{'rX6&p\AȹyfkDC ? $z7W,YG]d`BaRH]"9w[9J.ɬC˔W*<sg9x7e@@ O\lo~yIbֵ쀄VOK!I o.7 Ȩ3s{F.I@bc ! R|% v/ ~r ` Q4\ )Qi@pLЏ<1Nd.CM[!h_$Y $V9+@je|]|[- MƦ8 l rM_,|}NxP.H&\CUDqDD oxCJ}޾E"Lcr ޤ4˕G0!uHZz? 1R隀zYB`ypL,#OT<@4m ]@* $RR ym f]}RHb@fx}(@!+v&Tި,:k p:@fYud@"H.$IS>@h>؉w$$)eB! DF }BHxHP>Lu?u~ c RW += tK`@ [m=Eŵ?Nzګ>p6n@Csqę 薰)]X7:zr%wn۹)#eh]qDruxZM)W$$ A(e)P ` Uo\%ҥS RUX6@4N6jo'Z-Eu_"bYD%] ˯CnpHڊF-.[냖FmbQs2$;-m 4&[ga!)GnH$BԋsNJJ\gKvy&K'GܖCF2>_&%O6i~m,m.f%RCZ@?&塩Aztd>BXZ^[QtڶQk".!%ʵZ%Dc l]S Bt}M&N' Z,8d`R/ ۧXɅTK@PF|>]@7RmZ0V8ǹH$yKJ Exq{+!/湂*BSTk;km)J9QeIExc۫zi n޼K'ґK& xT[8@1)di{$0e!#3|]X{}!` p*E更$]C(AF#'R 7B1n A9OS0m HR [`A(WxK yE@*QUU&ĤR&1\Oŕ~j 1|3֛ >1ۛϠ̤VwR?-5 OH." tR751Q[ud\3 L'&zo8x LtiȼJ5V08}r8o yT @UPOv72[ D"D9relK<"Ͽ,r ? ¥]^e4]1radz 0! Әya1O;x!2<HH*[j$s+=r4 $@qGQ'oz.zQe# u"oPê9MZޢQzLY69-qg4{C'LM .-ޥ΁ #CPAyzZOebx/Z|׮]$2:;p>c J;K8aHY7Oĩ ]#`˪;EvNElR :--INq=s{#/,L`/kѾ ے/hgy#b{ʮ2^3M ` vcatsefW̃Ύ?@H@7+q|L[W5y8ѯl>i𳓉}7N&vts qg&Cvj&:E='[ q_dK ,..c mܿ{)xkY+ݟz/xu D}ܱuKp~_[;[m >\UT=0S nXmUtuuتOQMzVl?iY;q%@p@pz Ub.]9t$\^XH¥_edfz}) ~rzCK!+Oe2IˡTP)A V-r# WI!bȱTяȆc33Nǝ;C#C* CC%c413y煁C׆*A;qV·y@\Atse-7tXg5n"# :b&uivYZ0-&T CwGyA C`X11T{^5d0A> $e: T͵tna[>Z"_,!#Z[qQ$YkJktß"9ײ=j'ڇywGexwcXr7{ \O,w:T-QKC 710!!R5 !j[<:YXBRЂZʩNLDd0QZyhh/܊nM<Zq2<C% 5τlMvh/ !fgt#=~D?_Pַ:~䤫FkZSu1e[TcNy 3h !3c؛J$0! >袷 7DkaӰԵ03M$& s圙M\igNo6_ccTdD@׋?lhﱣV1cw[Dg2{evmF/_ŋVMzـ]g7YVפ8hͷ6 S[~S3} h_40x*g[MAO4667#bn.,mǍKR57N!-@%="o'@)Ʉ|%_f3[.z jjn c^(.u &ԀփHa ,^0ڲ ;BULoґ'#ٹ}gx)B5fYjQ&c4n#K"Eg"=Cu'_&% !yoΦerHx|7a6kud{1#*پ|zHuN\:GChm=/bT6!e;Az<:Ơ )`VӤV slKOrI`I9Nɴu"3kt_ #_.C.CaBMSa)t7& KBWaa?\Z*^z~NlmyLp  `T$3ۧή56]#v56L2%ݏ"cAڒ:^э90oFyO4z$n#Ro#TO K`bY0 Vpu炱 y bAipe:h[HY0釯E.6nC=$lyS8/3 dd=+͈JaIMeC.zc8ƙ(B  tghi媣tN(G:WboV5P02mצc3// '֪'xtbGЊ!e:n{5&5u3ZM8"3{}/k5uKFkD~QA t0<`t0'X , %& ѱHWan!"\X.[/G'<[7aX~\E:#C01!1q0ɂ-{Ȥ$;8㭖y EL?z iQIM۲xI[g|,JFfB WKwE?2)>SB @*FH[ا A{\(tMCb,g /.yA 8RP6Γ)Ɔ̢C!dԾ 2q0zxdØ=х{<=F˰FJ{0VvqZFaK0נl(P FSR %E?fzDO*zԍѤU7^@ofB?X]_-/?˯~ ؏Y ,a<}|D $/'#ȑ3IHlF֏4m+=}C N '͠5Ԑϭ?w~x_0~?㫟~W?|ݫH8 ^\n|]),^d{:IrIl_{-Tפ"iWzNcBr$!=껟W-lBJ\S7H=)ג$EU VP*&qiz:z,֔S3 ݊LtL/:c3 9ˆxSgs8HB·#${H`oEZKȳ n$|^A_~s6!z@#ǡxԕ:I yE" J 1l,NJd,t,,tBN(to,?~0ùHނ1= +vz\A&ig[lS,%+o&O?] ?} zmwހ`7!Lk/::/;r߄L!Z,&C,$ a-V ,5@\,6`.NKU0 F\r)ȣ(xcsxl=wSu$heb$:PLgn6jUo஺WY|7 lOBAxr950Թx%^umS]ZhCj\!H}v,/&r>`!riJR0bKd ԉ$|"d-C6JsvB_3\wb8&Ez_u glVwN+|Bzq㤆eW$ QA11+=d6&CVM]T. SXZJ2b- &qA8lrNpXy47 [G4X_>e"B`X +=USB`u!HKsZ85>) /*ѦEb"IӾ%ZC'׽9c(Sgէj"D!xi)5s/N HS<:S#\yiP9ԙUKS ۞l*əLL*81tJ6MW%Ț&_#gsh9llEN< >>-΄ 3k+%3=t4>_\. I=d:L({,-aǑ W"hp%GڳձgDV+Clt?؊RfA$%+ Ʀ ]3crײ}bEo.{eȒΥP'DǓ f] Bÿ!XwCiiLqyqE+Eu~$}r&BCG/i/^]^ KR@'R jTB;ubz*XɪGkHAUR39(MV.ҍYVV8}"$ԤKܯIqʆ JZ 8!zR!JHDڛ):n/6**|Zxp+M][(Y'ܴTUd":f>0bWn>4.L䚴ckp+CJ FZS/Қ:+ޤJש:6͵l봦8СõKֳI^9:KU =epXG8'Bi)Ljj /{tb]Grn% ]5tiaCBadr-!_-kTi)0V^Dq`A oyRS%Z>U p8zԯhuz1N*ŠX$=fdo!X;>H ={>"\,6;ԉZglZ4a|4M0hy-M F#vZG_֞ko$ಈJay)+Rsp&ʥxl09@hm\Y̪1NR>w5̾(K%N "k !bğfH wdf 0?Ċ_``Ѯ )Nw:cǷg"2}s #+?dj "w 6 ]׳Snr,_PJ#:eRRxf=k!=O j "!C$ s&`D'bCb5X62\4F'Ƣk5֧H 3Ty*&pWQIUr^twDpCP¦9p! #z~!qT4@ ŧVBDPz( =9wpSzMG׆%d1l elh@+Sq}]ٿAaz#; G8`#!(c8{Lv t5tk Kg=tK"@_kƒፗSP#+Zθw҂ZfKAﵶ~8yI*MѮ(ha]Zs_VoUB yh3y[ޡ'L&mdw0enr~0tye(iv5>Z nnA-7 LyXݺV&| ˙;-ͻ?mMgcIcPi*OIxk pCOeÏ' 0Z 3%g,3mԣ3 =Fre D(!I[`nx-{1AtxN<Ҏ|񰙣 EÚQٟl\nr{A-fn!0=6/@ t[x w1,Fã N:l'yQHx{y\6Ɔ 4 ݃Ck:ky}- WA%J Ajym_˵\TyZ 9`JIߗŘXϧpJ: V^#g;@6!houƀ:6ݎCF=hʌAjuDg^\rd:[|^snv^ǐnLJe"z.go=%EO"./IIijXnQ]O]GIhF[\N~6!,TAj k!ł!HYAxxY$!W(bt  C (j-P<4QtP]Lxa'#0:cLZ EF@=hfyS!)%eʨB~e +3lB10RfD7Za2MHjq}WRONJi~1QGVrHZoE#Cc+!Zdehv>XBP=9&!*vDA"DyDȁ"4{Dȁ"$|D!Mr`9=!GrD!G!; iE [{ {B6!mywS"G !e"@n#p0 -)(ۊ*u.7uS rh~~߹>l:x]C y<+&^_~Pnd p(ሐBaػg<84h+*:!*-u z: !G0r:]i@V{3D6]9 6Iŋ3Ɖ] EN.^;ONvVRV bJ6+(@R6 '-R,/o \^ɥ!*!׾lT~nT E-K^!DvK?ر K.؅cΞ?'7ߜer~Jh9y;Rܤ` JNcgwǸ i.!IJ?k8I gw MA~9 G}`}܂" [pBx[Hrl&3m ¾ݯ"~bxyaɆFi6>wtw+lNm4vc(W|]/]TQ[Pq=j? rٓkW]_|'!G+F\37@ 9*VMǘ{Hb8iT2lo :ᲲFLZa]߬iIl\T|uG.!.<~vћ Qy/W΋˜!ǪG@5xFŀcַ pG5>WkJ/}8ʾz3!˥ǟ>lHƼ;8xR$翭9?~},u߬[`]wmnFR4P_T@xQτ|q|Bͱ'o&DtҥΟ=K׎vHT_UQ@Ҙ TUm. /!, N lPef!}Cj_S S|#IY (ǶRz>gEw>B՝dJ\7~\$-A#X:4vIu݌vc!!k(`z ؍A'Du19jL=#^$N;L:A!eRj&eEVD˴d"y.:mm7SȂsӔ@H~EAp,\IՃI;I\|DM@U! dp~ǢWjwx{  iC)/)JAD>YVoC!p!USQaIE²r6U"m|R;?O)5uTrOz!@Ԩ'ŃKȕ:soku959>}9ǀ}~gZl:]6%䓒o}U8} SCCM||hEmZj;,DEnuۛ z^&FEcxau΀+?=@chk^ X!)ssx7dU*mU<|R"WSP7l3S6`Xs\VWANTܼ"=>H[زʳǀǖնŖ%O[V[Uٸd+MFƖٲmYeF_wlWrT-+e:|Zx[V%,`"˖v|:6ug[:F6#JlĨl-)29=(?[=زD56 n"`_%((6ڸj U YEs4(QE}`F$K -L!9!زJJu(Brp>ڲDgNk^۶0>P4YCH<;)vԵG-I iV;X} !g$$pt +t7]&?hܴܚeq|sa=֫ss3қR)ɔ$Id=~GNXV)w&9 {vj r:N싳 ȕKS\3ȕ35rVg/)* {Yq*\9W뽿;'{*gxVkl:>5]S<!tS[rlq^i躼ek;;n~//HR54A/_f8+e[]ҍ HxXΘŚf r:zkQBY~Rͬao2Ce/%^y^~󝝝;ׯlLR#!*5Q9bC!;HDe()Ua|8̖  eJ,k, ?OY Qrs{j*Pq42Qq/48A3yY+6>.O*ʥ*FqJ/ {Yѹk}/[W}/ ȆAcWODx"vDt3GB7?ܗZ'}\I G"nw@ tl=OAɺ@*X*;6 7vlPhwpF\>F }A>#NY#b,<< g "OY(JE2첈] 0G"Q&ü_s'k} "#Ӫ3A1fɑ1~Jۨh nG)y53ebP ""xk$PAW(DCHA1t01l,ZحG.֖}0[02#zm`Yr9sUQEk Ss9 7mעxY̦3m8gZ˂$H RQZ "22Ga3ǚQ4Sy?C[ 36GG2~>iЦs# isId5`7G%QьQ@N>}lX3Eifd@UYH(y# toĘz뭫 Ȓ10&]@oOߝJ=b4n =?:;$c W nNR{ ƏƎgG%CWcjuDg+HAfgSRGccŠgѢ{cc 6<?R:4w_Ό&"(ēńY0¹j[uv]\ubɓIH:nlHOLnZHOJR4&^Mhm >o|oK<_LZޛP+a.z&[2;1Q5\nl2装攣Wfcȓtqi"zHW:~[} tG)&MoTB{xSDJ\tVB{{F 0_ 냂> ݸ89pvll~u+tK1;cC lȄG~ѓ٤9cJpR`qsXqҸi80p2dbaaq8iq{!p|n9s{*}l!ibv$ 6.. 4)1͍m{.FO'&a4]e/|!+jÂ|'n'Fn00]~zbb$=$__PB6?d$#N$Bȓ!Q:*Dgb6l^άTi<gVFVU2&LV' s3噪Fnb =\5L fis;PM 2pNOakx T9gewqpvx"GU|2êYSOKI@PƗ$1:1 @Nv\ _áЗ.L[E 혘NH}6i VB{]@eBrk,W&0&+Dk;KfҜdMQ2 Yj0k^vWH)q)+pDG\!A(̚GD.qL.+8  |\!G>($UU\HJFPš H r W(䊒&Jt 6ÇRs !l%Ǒ%@!HA$\:4Ru/cVQ!jQ3@젾# b.J&GX#VTD"JRQUQc54 $s|LTQ09`嗼)Di a QV#S0Ti!mSVw tAEE L  i'K^ GHYYEl>vqDjPU4([7 *Uª]RbZk˚PEu5.uWC[%mU453]Q&JepHK6piVM PuJUwg5ie}!7@TQZݨNayhhc|eo!pLfLU&o54R>JQ6 k;:; -UKgWYAY_U#faWcmUkc_ÝMƲ;& lYZVY}q^Ҕީnhi8d[5*V_cmyYԵ^oΨZ n:# oVwrQ0TDȌQ&y)ᒂGoUQ +(E AsU 2MNm.spz\wfmS9r/w^iZߓtwhS[*[uVJ-lG%+HK[\ YG{3:]u]}NeKJ^g(o.Sש%sHVuԇ̴TikˮwTjZ@@ƒG ]xih:Ye `hKӡ24kkMWuT7V :8m֩EШihb9]᭐\S=*Ȫ-+l AbH=xkHWPUuj[n¸Z)k-T4:i_,Sv nwZjY)ᬬ(C#I(Y, 6 V$Xtn0,\%Lp"|U$_)MӑYi~V:p4NTj\b H˚DPtK@& YJ8 ɊH#|eg,KA,%9" E"rx, P:0yE\l/8(4ֲl (35(@9_Po) 7Lgۋ'r3Ijq,d Qt2/Ȗ-K~7zl{%2D3XVKq9l<7 j$.aʐ<"a?a,VDJ{2haI)I9Rk ),P5 SC2'.D\w+ÕÇ"'po +Y. PO;98 ႏ 5>I D|R~SLa Ly$r|ROݞ+弌)A{D ) }"|MXSf "f]!B-r4sΜU-<7JBU%Jd -^O9|[ ⓙ$ንp$ZC䢀0l6o 8Lrf ArOBwc~ B#3hM-n;d*^M %z=U= Jm>q>>>?1·UBMBV,pH 5r/!&A=_pg_cg__Lʍ4 ³ f;L[}2'B.$Ӭ!*rfl4 %z:T["Ȝda\1 wo 7W_}5dޞB7( z ᓂ=t"A W?^\>M]AAͩ EJĽbNV!m \ٺ;|Tah:gTwD N()|*}UokA&?4[P8=̠9 RL>}g;z,z} ଔM]2|PI<?]2 AZ!ʡCÎP U\.у 2*$VۄSM IOe_oHw*[@|H+*h bJe.5ۻ #@ʁxpK ~파O BۆD|'"ދ= ΫtiU[aP1҇d!)Tb||\jބ#9>緔INIXoH.D@/#]6?ylnC^'X\[߃ |(9~z`~~G֐ӆu C ˴fGI61oʹn2mĮx^}spaRjp2 m Qa0 E/!, ~ÇjȦ+h _8}N\ᅀv_??>~ s`Z;ɶY` C IsOOCP(R;甆ÒHEIGD ȅA ,l!=_:NrL!LpTVT&sY}Gi3MS/^+7bjAzL)]LbK\aaɜͪX%8)aφķI>z^be2re ׮-mnXeܠٚ[HHZZi b wt08A~ePn.AE 'Z < rs 'pM fXB[~ш0Wz+~elzL 6Qzij<A.:䛋 GYT|b8N|sё~`|=~a`\ ,6@/rGKH{0]δ EcJ, gLÙ1~` ly͡'hMcl}Yۘٯ54-&4BfFL=P.O ;3իX-< }~kxJAG&^^;`?,;:ȥoT6Hi,ts(g`Hmp캣lmGx\H|?Xux^Gu}YBm!shW)MXGL%$o?p<۵k͎^uw:"ohuy޻zVdwjϓ5T{woG} +ҳK[/l+`Hh8HN]fC=%{A#՛dGx z[_}5x/y]K$aU2IR=P} VE Z\r;Zm͛=vGt4z/QS_R@Z5=ZwoTrrZ֜ysGuo,A[p$ /\kr1:d.8Yk'r//tӏ:sRqsArAaRUxGǍG5|ݫopu7C<BB`E9~N;<>`BsbO$3a㾯?3wHU\I@w/{"⽦VV{A&.D(+)7 >!!~Ne`˜SSK/n_єWU7=S=}=ݽgvn}||Yy[\2Л{aƁ'Y⑳O^ς7ٮ|V .W˸2\jk*:VQh]v:+zAI Kpm9x'|g*6 /#5 OP+ qeyY!"*&!}GlD$CG0X~ڢ-c Zr@097F0<L:]SōB?B qk8τXIA AOQmC7sbd~I#%*E@ j['\&uE,{"{uD;ZL Nh"}׊_eDATN m`A ykڰ>-"'cSS~LJy.rn5m)\vPI&v4B.w#?+.pېv3~ C`Sakr![l G'a!lwͳUà|+ݗ1t {l?ʞoehFsE4y9V8yV6i30Ì&A6n-޺d+\uùt#:nΡw9{ |%\&{=LcyXva-4si͉Y1;Ukic,5 23}9jٙ?yS_ɃSlRpIUwyJ-E659k LV@І"(Ny"Q\bY6w״fKbm!i)ѫn- +MR r͂8BA&=.+8vt=mܓ{\8 Aʴ!0³gHd­3bfA*7_&;Vo13,"2<3 ЄzMRwå3 t8g / YKf7Glp^*hvL&'Cz0-aiavkڱ|p@sAE{ 562aaG|xуguJ~ T6=rSH5|vZ< t N.!ywNtz虣Gdzv胣MKo;sTows~R}nCrm,}˭ʰJq&s =^`>;`'!_ +`J)a0a80f+3%H4=utG7%x~DevkC/a:P9IpkYݔ!%ȏ(b}ul '7soj5|NAyW'rp`N[vs69[sh( fi*{Y4ޠMIN=>-KLMLL K+axX&e\Pƌa+fos/t[0)Y&+*K|O~@hV:s"9~b2={ Mxg sL'`ȁ;^dӒ&w[cI> [6d`vv).~Sy;lJ})η¼l }.8J{)XC\1_@bl.lah| N&<"ޑ~{4Ϭ7f)xAJG3g_9Av'Fqvҟ"ԛx d鸭 ,moٳn)BbCReDRA|"]18sqN${/s_X\P;$C6m\)_{O{O 7|lM'1"$a2,mvיLcbBj+9 ߹s5CђOpݶ#rsKsA%N5T zEI=6c8|$ :#s3yqc1guN [iz 8jx9 4Wc'ԣ),&}~#k `]Ic3N41lKYz(r)}* vp g4 nC]S'Bk*r>y<;Tx Oē.`lO)B% fg&/ cSf^yƇ _"',( !? I1&%TI_Ymm5K)k;׶Ƽ_ܺE5|޹[%yHRJfg#7crg-oVA…'|=`A>;3{y%ߎ|vBgpㆸ9#Xf#H&0HfBTt PJK9& YfA0w*Nyf@m/eȪ;U6Zu91R!>.n;_Pv4/7ݚ7~0}%!ƅ(]U 9d/]v'!XNf2 {y.KֈQ,ls=Al3e&67X9;pĠzH\? ;o˅q`cN4wJ M J=24^|`  =o}an%_cPxy޵j3K3ζm;;a~^ҳG]}Α 䵶(Au8JDG5՚^*y}[t f)skJI@.Dp44)?CA XAmDvBQꡝjG;=\ ܓBڔrx.5+hd)&Y>đu0J;`$1nCAq[ @6ck:{b ?GEvGsz'&L+QTʉc>p (A5Ĉz{D8|#=a |w^i#帓;3oK5iw*=TIA W}w nmzw& J/?7oh9 )}J9^Q܇ް![bb46J\}Uc#$(1'ͮ0Un\~z<[_<- #:s/F s'Y sʅ ^[ԗުUVTVTnԞן{j|/ru{{!P@!+6*+i;ld]jqh#Uő#wrq7 |[mdPr9W@{%Qr=InK %nJ(A f5L&i5DO(Ej_چ%ofbc C\ӝw,KS{Fkom}Q}ƍcILfxNW:Y1+WzD I'nv4ɑ#oO|ۿdkI5 p<| A y:J0< `UU'Hқ\^:%D6C+9 ?lmOŅ!3=VoZGLR~+(6u\|ݐ !))K$ysgpM[ZoY֦:EkU߭=b/?L~f-8@IHW'lM * +**" R!N}U]ݿݰg}` p(_PT+z|Fz%}b$yJNEܹ2[w#$+:Ҡ;Ys1MM_2f_=24b!A,"k ֵ֦j{M[{x*!U 2ot hcDU"%!4?iS7x=wOԁSNQy]WA^`8I"^$wQAd[r_ɬБ΄YafB4941>~ؙ{׽aD핛٭@W9D'U5ed l ʨ UД,qcwm֝t >h&`PdO@$7V(žԺ^h[B]UMn` >ɯTر"aH{qTd^'ᨬ7 Af2 N]C1P?\?{A oV ػwm\AX5k$ىBvK8"fpvdI,1Q!hn(J !\YyJuxA ]H,t7aInBY]]0SnLF/eT7DƉ #ݚo Fܹ9qaU.=k>AD 0_% HpH¹2. z۹Gx(I ť t &Ls!]  xޖ:C5PZrOO }ި׆1*r(Sc^n+CE &iHʡ8˖:/ 璀I:S؉5&WH,2FSLҷvMmL֭N\j6Ư(qi@3cly3OL9QVt9д(44[AJƕ-\!-p: Ə&H:j5XF+b( &0pXP\N, l̇(b7=n6~: VcXQt.ю89\$9x@l( \202*2ѧ, %d [{'o'ڵ3ѣ6+kPU LM=89~7qR}1:Dþ,6 J0'y6֧>= N?ο~9 ݣ.=m5m6^&gpx0bSN6#eWF3)^8O+K3tp!] 4p;^qi"oFabte^߈ӟ/jBբD__l Af~&CONNڝ |!'c7_5TuXΝ>V~8e֘.=dj! y07oٲtȷw x!YOfEb:*e(q~jF/KK|> 8u!C LRJq <(W| "Ȍ)*1.UfXo(hI3WRG2!%tU08EPD@.95*I:G;At͗cfp%5wYM\?V>Hm0L j)=Zq 0y8Yx4ksq"CJJzZ9QKNAvp)B\jT>y18řIyjR+q:B(u\\p L>1s Hh08O!K fEVF8}m@KAC g ;FoO)/#暴[Qt{ʬ[8A:fST mt$4RH&^8 N&-J^46# @W& 6j%E%E L`$ 6@t4&N3yy5 {v>u1aY08 j(yu5ETcq/޾}=vp?~@Hk)ظn5:@`g9l,F* ;9݀RINF{?k62o'!H7tua^GŢv.6F ? ,A__'f 2}Y:9 O$`݅ QV{S{ \3CcmO/ N=/X%Rf:^:3;/+Hҥ gΕ0˧ˑCR/Ci/C+Ejԧ>u> vooF#AM _ YGˮ ~O_?0RQKreu_zBe Q%C\ɹ-.5蕯 RNXmL :39mwA:_xGw12=GGMV۵dա9 +[.>A[{A [ӯAtwr lʨ;ݚO/ykSCQ%2N'vkwo.ݸq|C)fR-u> %! *+Hμ"+g7 / Q(r0ɐyhb{Rll [G9FrtrSإ-OݺLTU>}n픐ʘ%ȉy9?Wؒ*APtr(kkx[PJ89ij-0QSh΀K)6P|+Įj塚oyp$g^A.#ȶK-P x&h 6(`&)#1(HѪBMuuHҗ,?Ja1N9-;ZsaA9 TN)(FFF v]`vnV0sf>UxSٶ$A0* sC= }.@^O>KEdܠkL³Pˈ2  e$֢8hmpbN.Yۖ [/^=-ɸJ8DӢĽ-DU ^y=c`aȗ-)iwYqRef&Z+4='ɉa)GkT,Zm)\y1p_zosxxi>Ä>GGۦZꙧ,M 92?&yƋ9 +*4%̙Z\zFf/͔ʏ!@:D΂w4V?7ނ4. 2)08+xRrDYAk3X'֔4k)&D˧,]L#4޶A_7Ѿ^{g6[ac(Kԭ8Q&wm_w/S^yeE4QUnbm{Drڨ6RyWO6<ʹǐ<L'B (QA0j={Fޣ4b/LJGcc\(K)7`A[򹯫ԉԄ,Q#'1Y%d, ;Q3;zZz-i_5PEΪ:7noX2*"*䮙O.GncBA`!A.:&-LS#WԼĥb5ὲ :d(01˘|#(2b^bQxf،Frx_~zώ Z$($!3gAp Ѯo4nh9)~=ΦަOT5hiV: eKno^%RPw\:ڕgqJ]“8ɡ̤T~ ^HM!^ud^UՃ恺Zkk 4>ljuT59Ԑ|"*}^" ^7~ v<xl^W`| #aKzu}OPP\bCh@蚷XDQ DI0#|1f50q<7*]MRWUo9RӺR~4NKߞ- z5A  cG0D,ޑz~w2xb[PqrWWEϏjx/z`%/ ::#NJ"DI0\5bX \CvH4CMyMTU_i eEH$ҊTt68Y iN$6 cevmuJ#1{ncG*$Ha`n%"뛞Cl jrk\K8.`]~6¹, Y7{?Њwߏ˕l\+p*DР?.YY4; % + AMnMesM Xq|6GmǪ+N9$0>!pJ[(mZ[ lxa@/t2ouhX\9 JA~6fr;נpJN# ق}]$H 4HD^ih$ gce 2'J6RZv)D&+ѹr]ƘO7- H&!_@ D[RRGPFSUZM[u.Ua"9Α$yuYoL_vKM>z Es*4<jAk/EM={3!B8t}cиoܘ9D_8yٲ[ f}0{:,4Yxu Xq6#uӾSfzc,:f+uF'Y cn -Y,dJiwnPLqkA>߿=؉MbJ |?dJKR=96f(q9C`;E"0B2WӮY㟭İ P#1<0A~mwԹQ9d, .nl>A?{shtlިe0!Y4\}Gm!8]͕ Yf@ e1=80Ƭgvu /.ߙg ~m{xӾZ}]zֶ|#ʁD&xi م NWW}ԩ$2;d_\A:@ļtMs{¹ o w<=7~ei9pj}vcP lD8@'uٗ yՂ2s=[bW`6Iy>%`(hۂupwhwn;z<"Y|uA'tV mj?0I K?e//B(cu,U`TRn\Sn|--Q: =K?ں a8tʍYLKKvG B*fWp`H*"Lp/*_ ۙ24O ŰHA({xpkmKS֝֎Ɂ~)O 8d3qqA@ڠ!$={kot/Y$l:pj9RFV][&'}ď8acT>CZ*a?cpںچ[}bM=-҆p)xa1|>$GT~/}zc\E\uH50[a'jWnҴޞVKEƉع'UYJh]Rר ㇹCܚDV7w?0[oXaXr$HlκA:+\;BYe",a4b 4NZqS 좂݊[/ q_Ѽ Gڛ`>KQVh7+<+4dh-BX8Bd~B<""ۮ9YZIdg]{dLvg-E1~LWOԗ(( "KPceQd-0z_([s6:dbQ~ F,r؅ vl~=j ip햪Uۛڷlk^+eo2ed$ 18B$J!`'&, 1 =%tk/#wA mYKl™zջyoػC1|ku0_i> 88BJaq>uUb^A|CU?/P BDyy5]VujH^9O 0ƯANR S`Hc?E:X*]p aW{1\KWt~jj@)Qq")1׌}Ŗu)M:)Ȅ0wO!jan.䝄6 =0lІM(]XÓEhKKKrS rYĐHqKJ,d5ũBƫ(&#,K0ҊDgHjV=w׫]lɀl20k~&N޹$ TĘQx p,{ T%dnC6\{NirMqv3tיߟ{v%J`[I~=+GsQ4t# a>C!p!_1xZMz}^ݛX[?ѐ,ܩ@w.?nJN:)"N(?.nx#drђ8ǡ!8-T H;)oYasAB2x&z<7o<=ak8vaes{`; B C̓@g!쯟$p~I=R* l׿WS RT]$ wgathHF9UJ?_=z}6 C^x/꫏e& aD[\H;Ds}۶!?G4-u'7>Op{ATbTnT?.nV) |Beb].366xr# yb.8aZ}BXkvw9ID_ub8x8ĩ!G=+o G_7G3 ևI2, e*걁Vi5; ֍Xei>39ow1O ^6%8Fh|! aABhz`A*iMecOcK3:9+'SCH7JG6YxF+j[LR{ls4XVxN198:92=2qbh|vtO>;:.:@ 6#R :!Щӝ#q# 97VF5$E6AK_)@fLh$k#F(-$r">i\Rq {3kar@/)"|ho׎d Ґsp& Er %Jm\!.L}[XzbCqnT=/D~<~]bn-Aqk U'a;$eA10IY:-ݗꅡюF\VA'g d|"JfuP>[ԑC@BIf6%"J%擙!Ѷz2J?q }(d َa*1ƁɅr~- UL`o.!(G0!kggz'8{YX/ܶԝFrP\"}tʕ? "~> ErR42@7'4ciu)5_d&w{f5=}Pٿ!D-L/R#;w.e&+2埣[9AJJqqv&΋74Xtj;6'ѩJ!Z%NW DF(+Mپ>b q_Ґlb=RXtGHZ!G7w. +u@/,KOT7?y<DDҀL2S`y e4$(3r,0BIsA__"LY87D--״\3xLnbkSr(%,,IG`ڌ(sXnbe}Fgq&p-aomX w/l%6# 3>%?櫫`Eq6uʆu$s/5X8-rrld` t6=D?>N0t`3Fc!(N͈<E͐qѡ $?$3tAU$qn^X.[n">b͸잙ؗ.XX\8Vlپ`#khb6 W!噻eX ff'mlJ*g)zgz<]e npxq|]yGIf);zjV5b%֪SࡄA!@:˕3Ĉ|Y{ e<ÅUeWZ$BTeq(jgfv~h 󃉌K2"gWa_ vb7)! ;uHJol7C#cնv`u`W:6 I bX*Ytcή*6;dL19H⪒]Jތrm=b([vOE}qNrSnakQl hBfMcWu% ).%vYVmʫS#Szt܅VM+JX8Z,#]NXzaY;6agM.iTP"0CZDTdaWs( hh?u[.$r( -8!nḇݚ"#*P]}fx+.= Sr>y.Ƨpr|׆'=8+(ߙZ9QZFlPvÃ&@pUSߙ撾Y骹ffh$%EU+w%s RẍprIQO'!"‘Qh7b ,0iWod,Cpekϔed6o-qN ޴M͘t3CTU9xS).h /99bqSW;3S+c~}GMqT'd`Q",XvJ)v'd bwA"7\ g!%9\тfjk"Z X(j+"\Emf6b0\ta,k-.8'2ZClH(Li%6eZ3+VU0J4f{Ŵh8%O-G 0ZJ5N#uhWźqJ #2.FJ9"0X TitS.gsB؜2!Uuy Xvy<7-\+ e\{緗"V s,O'Z8+.Ocѽ ${{B0\AV ¨B)TBmeܜPVR ]ഊU3v{1¸5R%FDžЫ0 ٞqE>c1j|sBXlN@[nb]Xw,F؃NG@Xۃz`mYCt;v"`8oy#Y˄ǽD,'sQ{vxľ2{={-~ߋ|'c=țOẒVAKG">J Ia #NZ Ai,@4QqHC!c 0qMMZ>!hH5"AP?heiLծ2%Q皬)RIT Ѯް_j#!d&iIѓ$_MAze!wrozJ݇ I^&t-nÆve{6/D5$m4a:nI Mtӿ(MZ)}5,VvhTVb *lWgڮb"%zr! bLb&)>P(B;hA#s؛8kXM>5!ZXJo 4|̀Pd>r8ooo !rw?}]ӖhdV{:zJ9680rudtD7?}:`v?ۙQ\52?ig&:&'!GHn \=L6FBv#B/HBɽoЩ\l3Br1A LHj+ ]>˷4b2"60B ڽ,4_Tج:=MwLF(ۊ4ZڊyO)XfnVzvzܩtV&̸dfNSk#)KM`#$_ FSj+H^D@'R2с| BĶBW@CSv#:u\Co\$|sĜ ZZ\-:n'(/kF5r+JlxW\MD~?zV?f06g:{͓mi)1Qz(Y3˵#JS!95z2zj'y$!$,RMFN8C2 IH`шSkאdIJF9^>ǜp plvh$Xh;IZvRjp#dgzͧ;JܧtvY wq¤}֮R}GJM׽NUҧS껴:fz:j4~#.pQ d681uB 1y*|B )\N>_S+!hI|ڲ(Ekkn{{ν.-ֺזD{S Z p8_\^;,%${a/ud`|@UR$M9"UH %A"w}\Xp1H%bT)\lΏFc},!m s<_{5'9jrHj`vKI^#D } &TDad^\y@ -3€j!rFηd-?Ԇ:[U%hKaO:=Fހv.mbkaBVݢX")&~/^_-F УO`$^ð D(& m`d-® :SX0;}Rt1TtO*2|) ˔"d` Xpg3qh!"ZB\t*ep- TaTlu!)FC޾5lS`Y$hJY4]CjM_N=AD) >Lѐo )dPo-:s,Zg&?6W^-,xEY9kye\e6[NJ,umD'jCP%DHӅu~1$}/駯_8EyXJtZK0X5THJXJLǟ> zǦ'(F 3z^MyC>2ePeCFe gEκM~n7{p,F{pyx^Z_Z v#/uݷh!Xzḙp('$w| ')\5:͝zgg\]e[qot9-S]75NRv^vrvzB3l93vubXeFveؤU>96#$w6*okZ}^u=5ao2_0N0=!CLY6\^^P&紻a",谛s)}SѾםPȩ` -u+wKfG>15S>m,u3kGgX>=lA H"M_x (C텗C_loCPa{Al/`҂nݞa !3߶l k55\)0Hk_>U;,jyTOϐ |YE53;011V:;MX8qJ8_1 .U !\EᰃGB+OQ&G_}vk{e'n}vʥKOu뒿 z|!֏3RBIlMB%HP \V{E.'bWgwYi. UY@FL50AY36*Bcʡ:kJLnܑ:ը‹#ݻ'u{_}W_~y'\{XըTpi6dﬧO]O.-6j8 3 ~7 LJ ;ZAkSg٫vN* C G&< |Yzr#,>ս{s?hGws~ KXd#R&JdI͍ۚN?Y*rN!=T UI !y{ }``AǼh,4-,g X*oYjfszp~OC\ [Tf3z9.uu,t{w3rܽ{﫻sg@%4ԧ 5Ƽj!fւ"^t|5'qi!Xh]synE}@4m2 IPTI$x3BxN3Z\լ;S)ThHRt8ber d.7/'_|ŗ_~ l_| /%l 1:U{Fxp޺EB>!@ g#9Z7 w1&ŀr.e13?|w.f9f\[/&Ir*>9[#QK-V|\)h.AuJrBJ4)%j_bXӢحM]A[>r$PHt+j{ qwfy&-@##K? >@2Йt@Ƈ\iM@ED2ux౵|m5Y74cȞee-EAgqε#@b:!V$1mZlMs}xJm~2E4_j, ,#'5./Ûf>'ϯdƛ Kr2Ȩa%U#BopjU {LBcNNta|h C"S}r_Qܰ7=Gv ޙhId\Uy0!9 ɐ#INӅxMbyi'ޮLdԤ?ِWL+l#^Y\/.kVԟ,$7$7+% 4g f 4K9r:t;ϰxʀ4T^Ͽ NFG`~m&EDp& GF|GC(Z B͵ɥٕyEE}:?;APJŽ2,iP%IqYOj)k(ޘ#+-IW)%ٽ2?+?=>s/?),wD^UA"J"xL4ꕦ;S4$=2CJA𥔛۷l3mLr$5ukƗ[}kUTTrR5CY$jةzb?yֳ+J!RAfJ/Jq-uS;͢ ʩtj!"j*֊ѝЂ*@Br%N(Ln4r|agfvH)t1, $[  ThVDSKΰdwY;_7c O4m;E7状-M1yj2(bѕk;$SXy0BwRyL$W3jc@_gR|at SGn‡e~ǩD͹%_^w|{M7-/4}N͟:retɕ'#W/_޸݉+׊n,wԷ%SwOM!7%}0Z 3љhَ^=dryc(W-$ȸ/Bo-jJ):: !S7oLݹ7=.Y~zn꼿><].*6 CF}^4ˇ?[)9~k;Ew痆4!ۗp7 䏼c9U m=F~:+g|{=#kSs7oN [*Z:>W7G=%EK_asKwF΃-˞{%Es3w9?g=G\ (E0@._e99e(T%e-+1 }I_ 7澽vZ|эw;lo>,*epn`-E_SrF<|/Lݼ<|ԝ;"@q БtS &@5"?4 <8̢R}N1z(C%g&U- zQŗ_|\'B|?,vHZށ|'K7R-}uO`!bk c3LEU&ok]hyW$i:iPkA<ص,>䀎ynFxv4.-[gBF@?@c}bĞѮó.}џһ jRRxN.tZ9A,"ꨪ剡h'UJ۝&bԙ&kLc Z𵉏 s*MjI'k DI P):58~1̖BМ!k ]_?i|?#RO ad1};zޗ}mj7 k[ﴚR )Km1E?cP4vS˦k)5ͨa3NցpT#d߯M64\DMIh!F _+[>,8yS:ZU7=<_?_-!hy_/ûE˰ `N͍\wK/AF }zJ/ E>Ѩlx-D%>a`WF+kfXb*ԵvY;4uRb[V9YLIHUJ4YNZzc;a#. moζRm;srJ.逸 9xnl'!PAR_i~K^BƛϞ]_?4<;̍*)p}rzpꋉ%_?||b8s w7緐 !nWg1bF p._!S,ewQbqX ^X$4J99S")Jl1 2.P1 )'f?߽!zz{p 1ږoL/B#G>/}d23.l,,3'-|':\WFM_p׵ݓ[=yXS%1p5VQ<&E‡[c9TH@I*Ac挩dqnԑH5.RSfz&D[P1Pmh4襌!$5jIe?A $ ;2zTR/Ytݢ/!+s΃ OM]Xq|_.*Ewo~555|M=SzgK~NSf˭xZ^Q{Q.^ӵ@X{*/!0l "lÎތꪾ O[;ߪjȻutm܂ӷxOwvWxh׭ӷ5UuK֫3Nlee^ IK?:3ZXQg|vҥ醓*J@ S8ۋQn/ERB!#Bŭ*>oY,q4 ݟ15[b4 /zÔĄҐB"X÷*[% &+|h"xt:z#R`╤[q8J†{T U(P}IupR҅)S &10NHN`eeLspykw (P3׬l",Gur yV -FZPZ D|ƕ8$خԢud9WAQU`&~ONhyd;~a\97Դ)_+$SZ?9fX(wĐ[ͫTqY!m.dj&bk`ߩh($4u{m]EMFϹ kw]ji_# {U2j>-ϿI߾.1<`d_/AS/e6I)_x$鲸zx:Kvʢ+k$Š[:| m2ZÚOt{CΆo~Gz껷A @1͕bf8lꤦ:) 5v a)63Y*X$M]w;5.a*NɌٔ+ʓ$ּC<v;ynOI; ^.:!*;juJӀ]re_4RN5+eG. +ŔL a]vi (d: - ը1\p(-Z& 84Ĺ#;!aTG4g<6ZuJSy &#6,iij>Τ0 @AF p&SBơ#mUWЋY`ԪyX2y_Jч([SP~A6b d9xIo vxq+'!!N=! ),AT1N!lQ+ V!AjEG@H74q_qPӷ,)Gz]By"#֐]g_12өL TAWwNvʶCۥ⫩&$~>];BHvRb|τ $zʯRJENgTLG?䣙QT ]2 RJuśݳFP=8ɩ8 $$L铬7F5fPŔ xz/v2f+݃$cVHV}=B|S<x7O1>`xP9Eulϥno{/?m L &owC.Yf\!a2\_SHAjp<]mH(I09f{3 Q%5[!d  TBrH1 \gעPj`x]( &GQ 1h^{< eA1F=ޡw(49Xc dЀ0RQ׻/*8 Rb+H܃m ֻx=Ǐᆥ_$ZH--UTTFo:9b4d33A˔;q1NIpdxzn^'Lg3X"fzg/'$IO8썄£,\JZ.jA p" B f{3FbD {ázPE6BYE!݁Гh21x =1voݛXO EBaXB0 [Dh &`r3 kFL.$RJQC7>n;Ѯ?Ye o0%.UXv Kff!66D׮P8f6сϫ ^'8B@ YgvggTq؎`20Ii0l 3 ?8s$XCC>c$PT\Ȋ!7DWq\O8'@ÃLR5^`_Q=V]jS^mk*LWQ leg&ɫ*S0QԀJ3PVzz9:#FoswcQK"@>'YZx,c|p, Sc$ga45-S_QI5PA9VRY0kSx!K2P&1I THbBkJgCN Zskȴ"d*2U-S.@ImD}X:(.5nD)Ўd( Q'* l~1l d/f)≞K[mHISv;7"D=ՐYхCR)Jf_^ɖm'2 )B2#^ʰk~{ $v7o BLw p+Q_Xd(%ؕ^=HAB6qcBӘMeCǷo>#? t-0\Zt2T]Uu;=zjcp4WE7^=[QHU=qUEq/#m448u}>)<i[[94B_m|nfm3ytR&DSlyϭuc/~~1p>qE_i[ۜ>{3SIMVႿ/-bSlO___$ oƜn{=2Z0R24\TErFS8q8w@.!2~EOi(9)N>j.`ҏKRlJ4kIoeb6)7yGBb7%Ɉ3S}d: 90 y6'/3yɴ\B6}kps"ƫ"3[MOdbqanŶ"xD@t= > t MbĚ& HUouC١:yZ Dstug5-:=p_ ][.!dܬM&C@ʃe׻n|np{!J˃lm{ܾ}ktsA ̍4C_RtcCSQUK'q8$"zC$uzC$:8ɺ^VA"Y6&Pz(ǀr C#5yQBP xͬ3E#UZ}:\5t46\w$VxK VC[@v(F* ErVP ;s-E8ڱ*TR JTZa)iؐGȱaڲ7{Ot1[لt`\[h۲y,`CԵR%[to KXMH- ~),۲DXu6ukHeNBWdAIM:9ʈ-< e!;tmYp]ٶeq˖%rp o{L#f;ࡋ9pSƎ6), ( CZZϾeɤhGIe[iT-Kd!5toD{Nk\zb{%@ƺD[flJ֡׮-~<-dT]$f{VDDA6ƽ0A`O`QY`?D`DC!MR f[ eiᣬXkO<@."J5'>7xeeHysﴺ֚JQ<KzL 3`z2+/ oM7UBxPfd-J\[egӷ {Ch; O.ņVeӿ&}OTѠ7Z`;Q FBhelYm:'7' võe]׌wnk=.89w@ 0-Z냓N( dА)eW9n y2w}]렛])زc+'d&z3H_pŋqX =ԾŅ>L:TZle A+\s ~1 AkbSdL;1`8\C-@HR+rK8/ߊ!chIc';MthG+BVJOb+%^xE]ÔR`¦Ah{жƪ҂Q2=u,86Ysq))FAWȽ0u9UYA=bHQb@*X UY'<ڋlY:l)f!.ui94eJ~ B(ut)S @P(B0 5c"sESR c, W$7^pQVp *0$ %N:,oׁ\>(O] 5ȬXAz# Rm<*+1SHn!,ͬf pcPv@)x~_|*%* G3}bBh-xT`LSER bB4`y\9!q@Db+)m3)e`+\fۃ80、y<q(}9cX{k0\{Lp!ҌJK1%놷VvN#")]JX2xC ѓ|B8X!>|*9^Kmb1ZO0ղwU;(g/MbT෫Uyjuu_I[f53a D[E>g*ngпoS_Q C|w se/CWoRH7ǫSض9./lڥ/ejI;!'Wt0D0oc^WJH&yJҷwK<9}7<'lZr 5$WBtX/#llA7O0;1U|P&pOE‡>y qPi qGrI]D, iFLnm[Ey7~,]Q&h(w0[=CXh\k:"b^xFVMy{ŴeCbtRNSjk~IDATx{TY\H Ш<A "( B$$!D#Q #( 6DFFE|`LϚ̚5gsϽQcχ];P_~{_|/ =nw?~?y,o‰z~1L/Ȫ֯W}]5__/_5,1Ђ嫾̛yzBMdv*(h lT-an uy k˸&%—iG6?) %yfPq fcpdĪ<.c.Ƕ@]X5HNNdWWYOYaͲ#)1GqɜfSXX#o<oB,zk G}<\vddd2{$gTs,WqPIdOW]]sNuy|>̻ eNʺsA=e]A=9OW>4MŸ"Az $7 AE >ٯ8Ð dd]I_0rv(K295L GY7)ɑ ʊO{?ԅ?) /kf2 N3]矝1?4ML8o˸𰡜\QML!ިB=ԙ[/ke-,;.GҪhu12[Z͓L7u$.KKtR>ԥy{$tZ{`?8 qaװJgC`8T Зuweb{ +O؟ބ2.)šZ`,2<'hKְ_&Co02_83Xn5Ņd߾d^ُ32/?:ە33]WO1wÀ;m89Y ^^!IFA^ z5bdD֋/&&J B^S_0ְuBW6 F|~w_>de >~|:&̛͛7d>sOђWlh>Q64W(Ww+-qr4ό((4aO\{7OŅ/^|Ƈ&;w33PbT؊3;zׁ'^w{5F4T]6g NwN4ʶ-ðY2[z/Цbzo8{s2}CJ)z:a!qV/*0ekc):  2g0|?Qv,ZgQD _H|䳱;eŘ.va {$*|b}[?} ;xAA=qLKی$mud_FA< ĮwUNi <>#??d"+'zAnp||OeeϚ(7E^.n^WxQ2tlb x8&9"m !}$Y#ъ42zGA/zZbc&^hOG:M@|ޮ%&3Ai󃷕ۂ 4 a7#7cNd%|OOcL&^*f BB۟naH"Qnδ^ a'?NcofMgAT {e2o2! ;'8&L!' /O?񧟾Avt$_#o O$Ǐ{\VoHT8x^P3pAf_t(vwȕ0΅qMJ2lw8b%?4iTv?~s;/z' Q@)%iH"% iȘ@۴}"*nrҦ;I0UBKV+DE 4OۏL@:P r/)")r#"".O+S?alCKNL|$s xL X}',Q Jgڽ興`DW9|w#ar$:3]Š~݋H{$ŠE^tBH)\TKAyx&-=dTv]+tARr5ƍZV-GsTָH^ xlfSPɟ\ y-Er)a~,rO.W蹷Ök6mkG#<~?& sgeɅ .W|Z華 $Vc<}kA 9iOLњ97A<CHXm?)2 |Hw{"}鿛@r ǿ/JZoɶ´C H@% 6~tqv6R޼k)ʎ-`۶-`:ȦX:V֙ .5k,<$ਉ sBI0 ND=8xPKJ j#/%hiy%TyUqAƼ&%JBZ_Ky<*H,˵tajV̳C仼7Y:4۞@Z.O E a̛[_DӖ@MVE[Wϵ_$ueWиfM*xH鋷ۯ ~niƾ{(S,>yKFGOC ݙx̚b}09zEU1Ok 39Гcum*Ȯ]VUn *HCk(M9d={--v),ܻwOj/ԁbaD :ev/ρÀd;i+3@@;D7rrl 0=>!qHɬ\Ԃew O8{Mr, xH mgN1QW$g,$zG:ޅ`A_A#+g9!r%1#=S1qz=[a)X/kM Qԍ(>^=S8EMRΣ;#w N <U 0)vZoBͭ6Ӏ""( Ή(ztuH "7z:`q"Jׁ'u69кxsߠh MTa;W/ؘS~]b$H(&IIrH$5w- 4hZڬp :J{v*,YtuiʤTPefAWs"*Z6^NUayK0 ^t_E]"18=)̂50>OQʯbv#"Z|7Y)2XQC`Cob2f8E̖#F12( +oˍv`իWnun^q{P4~ ͭˋnn巪32O}6AZL̸>> r:}]ľ[˝Y*CBKRXh &]pM,"QƀeSre!AknU_U2ڋyҕι jOuQ. &ȎB [- ,U[K5jHCw (hEDĚޮjVSWMr6w]MMeU"g+ok!.YgvYӤL~KAJ^ u>,wpZ)rF9cc-xc^,D׿*4~ qK+}HITH}M#6ͅM;|! JJ=,;)rCKW_k,/ws;wˍ6^?!AmK~#ɚ,*tb{mcnafܑH'},zBDimDŽK<;@`DwM8 Ga92Jn}knP$[u( B&,Dfx]/B~\3QxzGFHo (ҖcYϋei?|&GB${8D(}"jNSH-R%'RҮZ>-8IL`m[>t\ 4"AL!F {{TQUGnKrwA43o ߃ V.;mz'S<8"WAӄNRg[]WXg# Sa{4C7dd89bT%UKD] A)V%l6YT@T7`#MOwb&/xΚݕ®4ط))ڼJ8׷^%[{@zwz|h{Ivo0KUTS귿B{4 a Nln;< r\q+ ys[+jsN=iG>JſHQ=חɰ#t?@ Ni7:-Jl[~wca5CU9uiN  Ns꧿zҥN𐍷6_fs#zp,nF,N"PXD/;d9^F;;EJw󈅎AK ț=V4]gri5)\H5)@IPUV[[]K; ?)I[50p/ϕqAPJp7$HgjeFA ]bǂ[t^O+I4 LƚCXU*ziDجV E"dᩤ(3d-DHzcAbg1\8 pzmNkfIw^޹ g_'9V^/uDEUn$Bݑ/P0gѽ5ߜȺrJyC3 *;aYs%Gc_ۙ+h^IIQ餐u.HK=(d8 B>DNZpD=hsAt t%9}pɺ* Or ׇtv\-D*R]g…¶͎3z/#u'L!rbR ;:1dJ0zޝT_g:J(,xpj 5]VI@CA!F$QKjECR51M;L/fOv]]?ͬYܟ9|PDfs9yeg?ه" BٕWW&(.zx>*KR:1HNo /|{CxCiGt|ܲJ:J;F'r4 B$}2Uxڇf:Q`P1$2\C`&| @_P˛cS)n$IjVVʷX,[nmA^\"ȋ5Դ,)32  ^C‹ JQbQA"1F1ڻN5h^Hr؛4|OLi)`PW '#fƪ܀_#@ⳄWrHR Q^+ڔz'[ǮW(!7*m>\.0|!1a*f…j&Lt펡FA`B_0)ۥ PAE0pYDuR@z? Y/t'94ġ*Nz@#Ecrf_UnY yP YW4[nn89վ".&Gl$SS _@Bͨ|CUUl $9GESǰnT+ME^kuݪ|VvpFɛ$~<:1 u@J;ʉN?"ٜ{:$)LL>љ #ob@@ wh@7g&W lwZ-e&i´t֢=~IV^^  (mr)u#@..{XW{d/RK$9fL܃ŕ!I(KНoy#͛`{F'@j{i@$ֹs]VO-= $Xy!gQ7 جқOvma@Qр|a`(-kfqߩs 8=:ShY:KpZvtNWrWwGLJOZg ,|6@ ixçqlx߯ P >{C@申$N}Or7HrXRu$ J5)ܑk3lBAw75nY&]eBDgUMf=p0luKxL>n43 (:C^](ƀN&98$-›5s] A*3?ܹc>A$9$@eDs7fgK!(2  /=JW`}h ?y&A^tzlZgwfyP!끭++A'xyU #g@nݮջ RM*T!J-o)4i?k2y>?7#)e =܇UmII/VQέrUEwV73e!t:ZJ禤fɩ!^%ݻt!/z |xOw`%m%Jd)aemgm I׶mYZ2! :]YɮV(Unn[$ZJ~8` ypYqv$m\JIy8Y՗ӍmN 7m@._pɯ-. i4~?&g}}_*.*T3p}oYpec{D@Ϟ{q ߂ νœ%ҡ+tPzԽ#^%AD|*늃$Tf&[[؀}X( oz@@@ rxwe ѽ/("Zc*CX-0 % B?HYY(ͯ5|rvSvy0 H6##_ 0e,xQ źe.//BP!K"U?1%_#aX(2Cp@pA5/Mj ( E5BCVM12ħ*%*rl@v )pC~Ewە@7ߐtCQ=d՚BԿkyJ8A;NH`6xf4n"cr2Ĺ*bR`/bDc1b{.14Ƭ4>P]Z `ѣodsj!+ǥ򤵀p gQĺpBݿG+۠s,mMjEPbҠo]7tf#63 ֶ8\vc\X=d..Fߑ@mC^ tI ǿ[%`vEIߐ&QXⶩVnN˚٪A;NzES[t*rXe3u+JVԮxÐ@ׂX 0rpCQ@|Z8€\:@@.!B>\`ܰ5T٘a]^iW rFo QxFR0(&SM$::VVC@81HB،{Nylκ@ %GyUZbޤTmdf{ϐNԛ=`չ}.~Xw6)vnc}: C>siq/'~IOxJ_@0ea0xR` Rnձ 1}y-dA0(pfn ÇoX#%/>{ϭ? b} |$4t^{$1W K` [) \0@|2CX;c|󤼨@.}.^*ï;RQr5hPXğKUBNU/V+; w>AW -uƣ_ Ig{/@< :(z`u1NIt[w+)X0KFvIP ZN'QEE*@\))40/vF<CT7H}JJ4W`S(u:`A@A$Ay:W^K>UVFV(1@wV-HBeh>ީ '''rYe#)8d@IMjB!dрdP$,QQ]H cju1hb;D5Tg޴v (gH@޸혀|af3'h;%2XX02tZyH^M*%[F渠%Yۛ^><t@=FΦ&#s@mORDb7r;3O^Q?RCW#wyA _6!*b :>1 ծn))S5x̖A~iq Xjz>z2N3Au\>q]/h"(wtÛNXb2a-J2qLjJQ1wDqE^ Nzvť^qMfvE]n[x={@@=!% R6& uOG:!&֩UZ‚#Zf\4[0ybz4bt}߲)R;T $9vԫ$B@X.Orȃ '|~wUH]TlR:Cv3]}RaAՄ1ziSsZZ\.ucsZCrح4yqJb%ۅ!o]#EHr( !Mҋ=z ~ aC|"mЧ@I6oz(ë_ (@V:B;>&jݕN?>S1$ GB(;^GPU{zF8 h B#1*/Jz:"e D^ֆ=G>#goh^"45M}"6uShׄŢ#6 IpזAa⥏vI3t`\w/ C!xT+w. Yla'CPg6A X=UO[)XhjjK#΍>>(k1 Fn[L- ZaĶbT 9j 2'MqΒM[(Imv%>*I*yidn<@DQ?Rv x.y#U YmØ=fbs<8<tƾbcn2=qѮg7x <@ N@I_}WMBn凉ĩXp{?A-U½4x< 9u2iT$VL! Xx,<}ijNmMB'M|nV+1esꇇJ32dYMVbUinXzލ/ŨQd\} _$>(T\ C$%CW]$I45J̢7{{Tn }EԷ0>} ƴٌ!Gmr*UuJeؽ`T[zvU0X:g, 95\ogýQP}g4ZIVwoeFO]l7[8/ &)d:Ǡԑo2p8v j aKea4D^ңy{E!Y)ujP?"RBQ~ͣc ILhC{r:"&@ڂP${e^sؾTM/KXbCOeU&PhT.miaaŽE:q@nxȉ@Ђ=ڤׂ%M 5C,X;tqu*I8tzU}r =3qE?XADm\`߲H~d9$,aJLsi Wi9A+r:Z Eb [QoDa{ ;eeӹ䢈@Op!o{SR@vUWgSvYv1%˿KVl@(s V9, ;i}~8dj-ߵ.G n:ܚiٕMB+L W?* | piU@BX$~ wy| %KpEAWZ-4JGb%an $K40$>je99G&):54%puXQ;5Ax$.'OK!,A@|`K@R$W4{dڿ檄5$LLY5 G%G.XeÛsf[S'A*em9BPaN<DX|Z[PSG؀|03792RqlcvLܻӽ3# Kcގ=c&f$_^>HYTq m~?8_.vY Gf}r(iE2"H~ϺY E"(YSW$(trͣ-_Ȳ+F 8_[\Xk[o+M3;6.~'0},z~.e Jml2C!k#3dxWQ";VoAՙl.`D0AmZyh2=2+CHRΥ񅉅ޙ= ٙ΅əٱɁɑc 3gg'zG&zc@01Ta vVה탯2pbo)k0k+N#,%}ZZN%`FoJwOV=YYX 3]]] ?rmNMM"m3-R dR($9f#j2zFvT+&iZqQAe+z9p"\b~(-Õ ?|XB8H?'3 H@Axj߹Ty7CkL <E̯#'2dD,fu K5JIH/.ƒQ Q2 C8NK@?}o@4fN<<;Xԩ ?Ƣ(l<=Jܼ&|- %q1\z==MnVCd=6(J+#V{˽8N }ĝWTN< CkN t1֩R !@1)Xwypx~jq __( !&g 0$w;`z {l_y:{: (b>6>c/1ᷬ[c="TQ;v u=ߢky~ʿPAQ 턊B8^_pnk9_t <]qCɩFI0@H?QOCB?}PVf#3paxy10X\9  x09Zk" Ss3+re(FumwL=//7{۫FPQZ YY0^B V?G{+**6\ۃ3G 15mcs9-v/F(@B"WrF wPBXu%> mz~\pp_G{ZuPAhgن6aцlBMw<TGk[/+-$_߬gx0h5rWo 4`a9kہ uѭ99{kN W7ܵe ._/< H暚O=70u6G.ϙK{;>ky\ei0XCm!0 'nQf\A̬.]:߆Ұ|S>TX?x]9f`r}!8-h5757n3b蜫;SEcZ\樫sp009,lt9; szC]iӝ.㕒;ڕkK+ VF\+P0_%6e>_cQ SYB_yqJ$TXCu{9tEu_ۿFVkjU ]3&B~C"l!vRH,ܶVF]o2Knv|1zp,[8Ud(j mG D}e++ZB_F( CVOop%\^v4+ް2Ի g}`;>dGm 7vd):'εon DӤ!Y7U22of&A$:Lbr5K"T;OgNӕE7!_t˅Ϻg` 6 MW #W!pZNzOe}-&޽ 5ȾVx<{zPAJB qY!TB~Bo9 .! p 3 U10Bcܲ|<f"ނ1 u̵!\k?jrUgZ-nIPYւQ ;WdV́?i{f"@"+{"=&QL]u6q(= ̮JC+2_^ ˵ d]0N4W`h=v5ӇǐúH6Z:̝#ygiaĢ: qj{;q܇3 K~˗D~^p x_bp.llx̝}6}qњNJݲ 80t t]k e%H8%';Gp#X}ӛwipnyY$a|1s*}T!LjtHcawt k>O :uefku3,![ѣKnw:}%N7Q~$Z Kh!|h`S[SZ Bbu:X ` V%H#zۡVTY\OY-2Co]-؋Yb'f.DIʾ'>(" Cvp7eS2?Vz`:m6 32l0PZP?tl;#Ư#, L\W  ꦂ07Z>8j/<óݢocf#=/hXN o8Bf+o1L1:VF\$]y3 -M׃.60t-D`ޔO燉Ew?=̬o#A+vqJ6%"!Yf44Tag!oz>]"yw"H޼:mpAfI \X>i"~j!۝vfC60ONTkr, xSw2{`"|Nr"?4 %7&ZwcU?Fq=d`%:H^9Ե@n`-6G΍EQ}?rn<ɻRj Tlph@atXCo>zUu0[_8ȭ[m5m-56KVӈYZF sɾ̷a F&>󢆟\9*[dŮ6p5Ra!jGey9:1-|*f~nKͪ]0C ~ Bx߻ ɥpLnUQZ^|'Ci@2(Ѣ}@s#6 Hcٺ#t߭k[Ѧ0@ډ޿6143+*|Y9&v Yp?kθ]S Y\T&;, oOLVpyP ^Gpa!k`놡^?bi 5Nkh2uUu@Q?s Z:Onch[ǽeQksssk:>{嗀!/ѽ `׎O5- OCa_ }d0T>U=ayy`hdy,+`,6}t,Hᏽ|ϵYOSp&c|.rV.d0*J)ة|nX+x@~.:XCr¹(5$IIp qv8c S>rzʵ =S&'g\ Y߆ FgӃ+SCr^>b]CxgH b3[HBQ*mY(#dz*K~c^kV 8|3;'~ɚgSgݔFSZ::Gl\c_ bi 6kp/lc:dUREL3D-(RT- vu"ƭ륺@$V4t/oQ΄"቏{ܥ__/׳>dkj"-D-ͣgyW+7N\Ll+\GT?w~~ec̀y3ٯ!4Ѵh]$FXΚB Őe .^u,1D^{cz#[w$oP}@h2BHբktW(b@K PDzFU%]3aXNQ9, ,{e_9$3vә| 4>>] hH!fa T`"H >E\B7#(Tr9 tYcDV-)v㈺gQEҁ_PNjH<ܛFXbE5zUB %dQVXeM9ZHR)BNR<;] )Gl$._O~PA*R(T6nVUdxEsVAC$p/IQ$Pp8ERWCj)ӽewp߈:vlx~*F@ oԄS. )ƌO>[!vv L;L; w@pHr?'z$~ # M &|crNdnP1;d~ {k@CAzn!f1d7=jBR pW)\ b@!͉H~B褨If,xG܂"h({A%@uON*ItUG +䈧.36 Hj(ʠx2gBԋV#Jo|!@m \^ t1Bd ׹h%EBF*MV CoXw?1;{ir>&`T/gBL!@r4.)B2_3s($gϰۇ+ ፸smmw|+#_yabHNT#dp ͖ݬD&2UlM/VS&tӞdҎ#d)*Zm! [i{ |O .3pEvOFZdf6\x8p3Pc'i N_d$BQ;M~pTM7);R`'ٱBY1%WRBȉ:HQ;fT59-.mN4>_Uj \*bLεT-ypV 6z (@Qs'Lɔd(98\$jdBNDz+Sl$KM.S,%5G$idt"]F┨Q6'INr,BwG)>H%fi!*}ưf4hM&@Wy/d :MMRj5ܒD9bZ5$LZX2΋qSw$b(zS)*TvQ% Kt|.4Y\~V ^B*ъPMZj3JHd2hNgQD5yEJHN? iFj0{unu8I6Msع:nì3u.[%9 VDMp>un\P5fQ w~&%did#[Ȍ#)SR]fJdIuX-25ME Ymf LArTЌ6r"PD7)I+wd^!؟~2^ {7>rmto!?"n&W-bRb6!=>Gw@a&QH3)x^- ӻsW3l#׉/ƿ|,yd?y}wM} ZDr#ɢXE|xf>9(_ ߵZH "J ћT }C5I^<;z! DƝ"@^K~Ua^m3H*2UNC&,|u(jToOMtrt"ӥl^2T580eHtiV#A(ԜSdPhr^}Cw4_tăt)Hn *f""$b)n((`EL<{Sا#]N$?BF6o0Wdd`B;uqoLy!! kVb.t^r*<>rGLPj 8 tzkͲ07 +i./rՖ^5e7C99r+%T[@t#s|)H`up"^ba5`hkQ<(.OŽ2 {ѠoiAjjj̺zQY-AME~W.my] SYqӥC.Æha\O5WYy[ d߿?/RexLGWWGG]oY T[kGa}d?{e=_\18`op,krݲc&wlY^Z,ܻޖʇjrfw?>B5r{V?~(w_|"uw>)yW%X::,p7BLPHld/H {QDG;:Bz&lUVD"Je(QKRtQD/&'-֒.+vӉw#<%n/0iIRw?:> NV p & #v^–m_Ctl4_&(! p( Rą6oX+2T c*a&Z%+)#Yrsⱉ`VYFsW&&ˋi2;"#% 9·Ԗ&(E$ŀ[ZA,F~Vsc߷-TݯЧWQE4jOe${ Y쐙I$afUɫO.<}u=drI59wo4Mۗu@Hda||xduNua('Lb2-tvڤ}Z|}r|aNө48Kʱ։Vy:6ZԹ993dܠl4Kk/BN%DS@DZ'DIJKrgTdd^dS_5έMLKOВUna ?/X2LΪ ȅ':RdM0f˘zZȅoMwLAsq'K)^|19R紼%}. sKFY7l<@ÓK/^Lqb)e=cy y#C2q 9dm`R0`"9lDi^B—|`n2s?8/t&g'2y<׏yI *4?[V nlM7옡OsBe M [l ^Lck2Qj[YCw^+ ÷^֠2A>y#˺ +ϗHq/bV֋eQ|R^V W((3^_ܚ4f/ ^/pyYȈO̯P@Jչե+Gs^V&t?]<~rcu\[_s>xN+ CS Q c|.øuwgbQH^Al*cI<1*.J] s~i/W_ Ōn犭v9&sSz?ǸsAyyOwxb^y[0ρ7r|.̿NT{YTԻP箠ؤ̫WM Ś[*{ 5J!5Wj.O<]< wb}Gq ]5Auy y^m;L6'ee`\q׾n[q`<⯜Nwz% uJYj64SR%weK:y@?KKA,[AN˂᤽?ti_~^gmINk)biG1RI)mf.ittI`A0;JSYzYF k7zm e7nuPB&e Ύ{a5 ,fq[2t_S}2cM0ؘ yzܽ{'n/9C Fૺ!{$d 62cZϘplJ}@;f܅- K|0T] |h2oC0y8yZh}(nD_Fb =}!De$|"pH(J-U:YWN+H&HDj)|i' %R٩dGdr̸K+bfmj,R3r( "Ѻ! *-vVtL[#pgTMԅS +FC~]CAymF%gKi(N|Y $˛Q-j)jGsH*]CnS¼.-t" -K;"u@`* *~VZ.:(1;RPHC6HOԎ R $a֑ 2 ,HYVJnyAHVXx%tvQXE˪Rt=8(YYbW[J;\gE&V!)]ӭBA: &K)ifWYYUYR$иOMҖ}9њtgܥY ,88eU _dHA"DB(92x nY3Q:3毬9cjU7 IENDB`awf-extended-4.1.0/images/thumbs/gtk3-plus.png000066400000000000000000001004551517644610000212060ustar00rootroot00000000000000PNG  IHDRPJPLTE91-fI;zRA¶ɿӭȽƻʻĹʼʿVC»ļ_J\MZG˾ԙcLfMǹ܌]Iw·aKbKǽ̽ʉ\HŶxe]H²υ]Kݾoa㍇𽠑Ϳǽk[uĖĽȿgPraؓYHƿ|mƻȚŸ~zfW»ùtƽْwj⦦}yuֽӴޘũq]~vsppliھtQAuԸrđxOLJifc^XTޥ.?}-ywGΎW--aݞ{:C,ZN'i݁duu33-u-Ga`ll4{l%*?5jg`ooylT\\c{kwl/@u ۏΤ.흩>T9=0X7[;8s%iiȶ+vՙjtnki;gRg;lbŪ.^\wۣ cw[b_:N32ScUws˸ifhpyf&5v9mww+y1Ы"@-;fƋ,;R@~D ޸Ǒq~.v>W''(.tw-?*q5Myu,<=W9I!5QwVZ8Zs me&># ZjK'JCs(k]d PPBVlF+Lq}, pDfɅ[bu8Zr}¹>[}[ݹ>>d.< r5!Ir@ҸC,A8 OW>,;]ojfce`f}ʹL=;ܧT ` ~pYH6nT&UcSWcH0k4mf^`^2z<ʑi͸ѽcNcim\j\c׫r5Fkڴ͐qYY46jTx&QՌ'f;51V4!W̖kk!d٧vO"hjStUfC@qb2ڭsMM>EkNVlXk!4:Tƪk&EA'Ύ*[]9(4cx6#U5nVY`ho̠4jCW\إoRj82JV[{v\}qSVv*TYɠ+>5ϵ4JJ[?ؤ l)IP=&H'R6I4zPah2;b"`uu)5Mle~NoW68 3G=TeS*Tpf|SjP4LaNY=Љ} Bɝ_@(on4A^M;Gf+6+MO^ijA]>w$a*!egkk{UJč::~vR7&!UG;G7*tbXoRL E{_{׸Ja0VśC jqs+GWۤ2)tXZ 1MjMxkBjf°YT4oW%: , }|X9jbB6 %0/G(K0 sc|I7r65JbB(jS0 rn}|aG [c6q8MBy9*bp yӗ+lTB~p0Aœ|}l ٌVaaFW°|XOAXQ,f)$˖=0aq{4|W 80A<]~UEOf*:a1\Z kń#A![4ϲj\d}݅%?ys"Q^KV*Ȃ [NNN6Wzꩱ Uצ ()plcp eeI^.w>Ub54 XxQCMMI&;jZmȗvrRZ6J ۅ,(oU&嬚$W7 Mrlʩڰq+S|_hC"<{Q?WYQ!'ЛrV//%5T na!f2 7PR:B4۽^ij`¹jۚ Fu Dw]|u@oNROmbHH+CLh6pm^ŵGxf,(HnmI!bw&K/=wGif^1Ivĝ ] ]j7"Aآ};22m][[#5礂<3a"V&_{#ǂ-nstAFjVi:ved"Af$wꫯW2M}ަ\T v\"dS8A:$ c溈>m炡"`#Oɽ?rl%lmE-47ˈdI#k>˴"cĘ6< ea˫_"0Ifܜ,Wߞ0~ c`ARٷܽm@_ē+<ˋ)8Ltgfn#6r]0|B302; 0N}[eh/iarjMm/V۴)&TBZۮsƓ;KX,> q:K$hekV*iaTξwm[8nB^ky+$|>=Ս,yIC.yH T$'|9UA HL?A6ٴn _dsϗPCi/::gKi/$A\a\uϷ|g7E@ hoi[m! fXgb&!(A-2,0W,IAIIð :9L AK NZ6 AX9|&XTF}H:dKAҜNTD "{"~&ET-*E o7={9n{[OdD )ۏ}[IȄA~|B,Ko)"H H=F,s*J,ThY@<{˼GF'.矺sr =+埪PʠGqT)O?51 mw*r1A8Nnʆ,GD&%H;9/3%lGG8);geey{5u:;kZL~5G\ -pqΦ0N\./.&+'DuCܙsIkw=Y RA{sw/3nYN 6?[pDuVCc7ֈa],p* e?TWjcs%9VǰE pNY5\f RG4P`8bxw sZo7ꌭ`b&*)ac^\^LWY9k2Rg!C_S+% "?on#^(d&whE(6dwHH%3vη Kh?Jž6cȉ Eoy@xM‹a!6fX ,1Q@6u8IwAUU^mXb6& - `;LgaV~"AP sH;Mh#v"J%g5pN=$4dg >%-tfA㎅,$W;u!߬ f$C|HC.$p`0q1BN=4Џ@^•@1DDe('y.eXh 6gjTwžkM_(ޞ}_XNBExa}P" 8,sJaqi*-dQAJ`b-H*Vޜ 6/F8bw>Vxtfz1=3;gya}rtDE00dlPu>Iᩱ?'9.;Ȩc B6wO1Dބ R  Iì40D -$-6M(iPB+1((/%04ƦB mAI$`8eX6#rĕ!^~sT(J36&2r3)"0Fd9c:`g7 Tw U6U^+BUBENSnP3AL$Hb<;&0y4?䰘P>[c1K҆Ell3.JP[nPZo MҎ"V. ^&b96nvI Ѐcy Pׄ {y"$"ւXZ f0I HP)[(G 0 1 U"[&,YL.3.Wd-ܳ| >XĂ?‰Xd>T^Pt+r $%ҥKp??>>>$GJ{`&&"~fK#Q'8,!Ho BppEȲETU,!DOe#i%h $c)E^d-wAx~٧-=oO?$ ×? Н𨊡#opV<1A d0UB/1 ҢIBVfU C X2|%$Z'oR'埽5fčg/L\zxǻ:y}7p8Y l ٶPk78NReNAl%INA{{6T 9Sm˷7y7yg>I 2ϟ|yZy*F RT/れs(CGI*;Sbȓ H^trr?79{*!MBO.b#gY׺N=:U1ˮ}<&BAY3O)asbF PٝLA.t),-D'-T>2SN^s2eQl]mk$9<_Ib"O|`/ȶ$YHL"Vў!JB*jtin.3]W^J `]T o=${0 E-,C yR\`ŚUC+bG`!TΣ.Ja.$wI8,C,,ezYWf+Z ߀ l\ՠ HK mC'lvąTA[)i-HjX0lǏnDv#&lBEPY0ܧq萇[r k9O1(Aln?w.^mB'H׮Ⱥ&o>q;D8g^ُ=! : A5i|. z7z\cgm^^N~cLJ'^Aւⴐ3 *w߾7طQ7/䐟 "ѓh{Joo-_̯CVUТM"ZlRZsMEMM͝5 >]l٭k6Ϸ A88.Z^;oRnBu){24]vِy"3όf n31. u8(qx1v^DꐍɲX)i2qtJ ɂΪڕ1XrJٮVO$B1u: ~~9r a!c.PfqP1`hԷLjNo UƹF^ܬuqiV׋\lD zP'v)tm#HH iġjR)ǪvE3g+TxSla,I&v ݺ琊aR|ɡ299t]?52wrq"HZ졢{o,%Ht »(b=)f ]gt.-|k8*=MLAsO瀗@NXÄ$bX^}j!'/ZC=:dYq%驃W'/]Tk 9viAa}yqj8TFGb%H^Y ļװ%=E[Gs夾rRG^'F7*F2+S΃@ȁ0AkCE zy;u!%c>5D*[ ".(?N/TjO^b,!Hw1F]uZ/S%Ł%%Y"q A"9,ĚH' aFl99;AźB烐IZFVڋ~,T1j_C޽;hTU> ۀ|W~V\:|u,uek3G ^ ?_/x 'QͿ_ݝHI>!d,[AC [^^1hrrulRQڒc^C֭𛆉@g+Y}+ @Q w>st^5|9"%-a0jU8fH&֭nÙj>͜ГB7 [wf&[)a_PCDl1 ad%/K#K + "%R1(<0/V߆0 bP#=AEE I})*h)S%f%dhM~]AYM~Qi}XapF6:-pt(w_ Qr{XG9s7K]?2: Uȭ}8ʁ-Jӛ;!`֚,̼L*Vg1JξD^JR&I`hk*'J4TKRQ0l͹. LmvӆV1BۏYڨHq@@ӆ$UIJY\$IJ7v_JVXXKA(5Noz?/J1NN )ԘB\hҾ$MYYiJ,G$AB)OPX4t9Kj6-Ze9KX,a4Y+kj%`Z>ZZyAi*9 > 7$&j|:}a'ٰ'W?7&>t6h]Dd0Z̭g cRs8,L T-yZqȡ`Yb$F|kbɶ,?d9}ڣQ2n}IK#9R+e\"&@NdJ \-)d~Hp0D4xç ߕ#͊f~gHAJ2ZV(ƥRz~pVmQ3N 8hnN-ܭDSG63uHtD޻^KZ6@ĖWJ.g~EFtۨ1yロD\%,'@2 8>}d Ꮬ_yp}`g7~'*)zdcݰ׻6,hqItW/]7sF&[ 'Jn5< dnsbψ23! Jxz]Vtܝ[ yr07 9WISM܄&5T#m5z:H9*[a/An. 'Ȟ,17h!cw*!an8 Ho-33A+kD#Fӳ"m[Y=ou:>}*;[?\Q= io/DًSD _\D&c{8y /7p@2+JCv7 W!= ހ琞!xɅN"W 'o*zHr A<~䐞ŀC d5zjnn5yxzS3,8R\@Wbx@,[X@>~da[Vg&^ܾ<=w|hlAHB]a rM @z=_wr@֡;wXok/dE{3q9ퟻ,|h$b@ (>A(]HOrua 3Oy^+$'\:8u,SznG7['ͱ@gJ8 |F(Εt]RK ȁ[KirKW\r. }Fh0dc PU;B o@8zHK~%8ujwq8C I+.=[%_*rO\2JmEh ](ظ8prE:H7 xH%0rWHf]b S^XFJ!A%ٓ],}ca"@| -[vob}<|99}Qp-=/낯aҧh '._殥38o^:sHP*GnDEŘ,*L%VFB [W>ǘÁkv}mX mpm$|p,+.@)y慁,^$`$(zsO 4z[z3@99Y|MY!SLy))ZU*Je& `f֗UY0}Uu *++y0veep_C:&~Cpʑnhg P|{]8p$cKƱd'z%u.HöT$禎Xo[a^0ek;9Cԡs!bQLRcjU,#rϦ~*1{KꖖΑ{wYu>uc m#3݇u eud($T/lu< ;>~7W<|rqǍN˜y1kXc}dӦ^ \MCF%CT}_ַۗoGI~{2{gHv8{_K4z|_ٻ ː֫\됈(*0&VR l$b1${uvZGK[M={M#Fz<^YMCeX[Eueۈq88R~(J zG3ziW q`2VzP. mKU$gv%R q_S~'I nTQTJeW b$yNc -.=.`Vv^p-GJ B2ݺ;ŶF vwe[ۺw;/k2xckqč6Mۜڦ;Zԋw-ZădqNy5.Y).@R)VeccN[ўF4֚S 2M@IJr<&J2.~V 1^BɿNoIΎMy7vK{4]MN/CT^YdK8u/nŴ>ɏo~n FbE2RV$x+e55@6\iQp>Yr@h`_9{ > |ZyKP Ug UR4-6~;mВ +@4yH4< Rɶ[w#k2S;£>3fZRsNb"^L( JS #RE`mH &@Tۍ(B{,ȶr{7 Xl~u5d8^9"@ $o&ߘ,XJNK o/ ѻU>i+_k!|brqEO@.! ALRo>Dg"MhY^'FdWvƆG[(P-E=[ȸ C `+'<ٱڭX0@6Zviº̣ᮡ32&D?=V#+C!j1N \ -CŦ&W ]܈@ށoos{/]zsv@Hp`oK* :tV # 388gNHr@.`\ dU 'v1Q_4{ٿ_t}dZc%& { 'C 'oLho/,~3{RZK2+\4 GWp߀wk*t qNMc_6 E| W.:p-[^gٲ%b72yq=OSԗտ F0>||NDcLZL[ HrTPFGd:MлOnֈԭHoL#&$x*@Ed4T?Am}| *\6,| R(p52ZV:;HIB~H .p'?0,JGDRsw.(N-G%g7 =y>bsw_HYf:w$55E h&Uf1hdkdڳg9[ns>N+ j{h;|̏ WΟMXTAͺ,8iP<`?U/>v~ݏU7ڋ<0BVPl p AԐ8Qa* e{-a.@i^y;zp578Õ.@pw& =@a.AA6.zlQ8gm|Ri"\S>aVs  8* 8 .n_gRX s&`C Q2 02`m|?jT/C$!IμUv@ˆ5~|y9$DJ#h=4R`I7ӍJ"Y4'L K Փ]C !,obbbp!eg}lOk.bn_߆wvh7U3BD4>}c(+jmǠ!6Ő87o+]].YKyGEWGMY5By,Ģv !ӥe䯟}JY1弼Jq԰j y9K ko#K1HzXs@7R^4理} GH[ݩڪ{e]VZn6Yu$^}I锇 -S'@H/@9<"dɠ'GB\'rFoƘz߀xfGm"v#{eX lY k?$+RGˠ Xxre+ $/+Tr,3+,T.C3!IMڒbNbyD) :wn`2&rKBXc~<^[ߎ5ۛ ZOV:Ey&LnhzΤ"d! ;li$TӪHaa [ 1`%²  m\lgck^`tYAdDoĕ!EjnTC(<8 hPINefrh./JGbÆ l#Pz.$F$IL&Xn^H\ٲ$b fR&【ڷߖZB#bI1&$u#G(!e+,1$ |PjuG9-qQ6Mn,~'J 3'X dH?jnN2Hܾ}$:h ؘ!opxM((*:bjl֒eRDڟ`<D^'#Bkr[Yb\ AdH](j",)덷N 5񑘞$b<&\T1N ~1^%Xm<Dͳ)<ƻrlOeF,!F'RGa ![!" "erZI-H$RbTb9$h_O߸_D= :V(}x3`K4@l3=I~ g^sJaX Ck|BQĿHj n&S"]궄:CpARPlPXr!zl+ɽs&Ctܐٌ[k{'>^>gVkC7K7ȹ ǹ3Q MBM@`fZT0pZreA)1$嵲H{YEZ[~5ʊ)"dt++HL%"+0k++(yffGiǷLݾO!N/9?3yf𣹛"E\^Y.@MR[f ΦV̙L$77b6@qO*$rDx /%N G( GOOD@憏6z"%#IW P3l$: iZ#eu eXMUveiQ֜S_cks4гJ ( >\6om<,9eZS'ܭX?ҢC0HL6wo5K,…lⴉh)J/mMϏ@T옝I.XFDE@Up RYzQe+jGhF "˫mj\SI|v1XRSPUYv%htTuU֩ƥuIT©֣ ߺ @`?]CE{wDvyAb &uB" :I5;k:GʺFU-uƺr@YgéΚFS7FFE˿Ji $9b^d&/@pԡ飓TJ fɀ~GD'n67fJ/d؀ԑ􌌌K ^CCH\# E]addmlQK&oaةSDBl;gEܩI =;;eccpUG%ZyN-8W }2qɵ@݂C N {*% : yBorWt4iQ x㗦s6߿t ӣnB8[㛇{8>{~kn >ZىKs4-:P"%]%Qk gjtnDu#a3mZTsRot :}eE'H|9u8< SZYi&*$VSB /BSV8СĮ06t ts:a/0 x[h3WN*TNT?̿pŋJh7qڋYZkc lXiPN9hɫ0Z-S.A Y˫ArNpX-C-K>oaauyenn:0' n!^ ~Cb¡'o#@J6!:>I@>N8,e4uF c 8$s0Ft@@liBgReM&|@=qo%<;d+y(-{Pc-͎'ܳU 4@j0l`x&' W:9jKHAAiJ )@=#PZ 2[Xj1|󆩚Ɋ;c)(!scj 4 #5 h'CeQ 6O6Cz_dgOiM54HP/  ${6:%pXKz i+năNG~f~J[e}+4A 5%D-d $GIVnUDWQ7!_㓶˅"46W g6R f[,8jl 'b4#[]ʍdRo'&6ǡFcYY֡SdzY聫[&@">(0LŒ)fi\ 55H2s"M h5$#HX16X&M܃aJ}Q`*,^iٚ0$}zbЧwk~pk$YzDJyZP @@u;XXkQ L-& Ѕ4@6 CEcsE lEV,3 30`بi\9K @lt#@Fc9  TܨI_Bտ/zR6Xec_vlv=8XmVe1gQq7W\ojX:+`ۛ=0nÓ*BD3 _+ Ѯv79d#Gq`'Z KNA)(m~@:n#s͌ٱƱI#kZ  j=y4⟹U &73Q=3&|CCs _shhz.'=(!Wײbcǻ::=V9|kÄSo@ K}tvx6;rGG<Љ,uwXp".X<;7,|~!8ygjW@[g]NrØq$YalJ *&dd4w|%ߢ?' ٹUIˢx{_%ZmJܣX& [yKuushCJQrXU6y4ay;J\ ]iY<I͢c|HYc~0|B,f"͐ 0%"~)I^4Uԩ |:\1 ia6:boJ7 [,RRC֗r /?z_L{'p#绢ި6'|F:FAcxft͈QS#mn̩0l6OICp4%pFP8՜R~pڍkS{Y|zYWw"cLź@bUJh;o|/:X5fqQ 9[p˝m+"'~:%h1?آq&g&݁1/N43+>&4雘_ ,S,nhi2/qOX3c?D8wܵ,udeoW:*.kԝ`w]]3 z$s6!6kqqm0zwl7QҢE $ 'SN@Rwag^a}>oܙ 1[zK\0gvoi7e1f&&݆O:"u8>@@Z;ţ-jNcx_etfey\`.>no]6lt9`>a6W_/T61a~54 y3x<ofKjt#zٷ\30_ ̓ 8laT/5[=< z_EKȸ͌w;F;ƶrurK]uߎSPTPBzz+,NjvK2I P`F3"D _^x ފש@?샟e*%?iȩi2֠462U70r4-c FAjSC9ȝ1tQSmM0R!a)@([|[0ԃ{;+NJ vTvXaVo:4=ݶvWo1 5;^S%E:\x2@PU.&BN@iG"eсU֗!ST>B~LMC2Wch&aQq=vuo _~+D\t ➻&!,4vHdQ(qj/דSpNV_}u~rY|a6TjNG!\p &込r•_kDJ^%DRTBRɳH7Mee ,u$xThtˆ׏~ݻ}xw|x|wxHE=&jAcZ%9y18 j\e]~^LCJ>O=3dphx Lsfdϖ#D}xJȣɇ?|8=)@`#S?̍sºJ)/\;.b`j`bԄр bXrߜ^fL,L6{ƹU EܢHyа -Drf_ceAq&&r-l&*TgQDW-Jd*y2 Wz%TP-"b*lPࠄ-.dP HPn b)nZBiCrnx #.ѯg/D.6=s3sNI!,a rOiޔ~kMNgr%EZVOx8BX!R :t"( AY5N\V\-t) +Ƣ:R5uTSN &{\OW~/\GbWڳrO,7p憂FVܪt _C(rOԢt|rZ xSU[sJ"-r %ZW + [T,PRƂ*TY:%Jkq« JlL{)B+钫,zޘ/ǚ`z}+bx<ºzʕר.xF1ۨuDw%s9 ȼ fH(1rpI,OW)tpy1cF  :z1iסKF*2XS4Z^u xiz66+M}H},d{%{f]ہF]Ԩt/h -*xdҀ=ci@'2 gTz G dmMpEU%lohG|NF5ŀx<O*ŋT$WPު*krN w hWSV5 E҄ſh NMfZg}0 ;{hᵏ$MN 򳷾EU\xA CmKsKT͑ /HC%̃8 Y{eSd;݅ǂbN!^-P SRA~(i#gğp~<է4/1__Қ|4ǫ*Hbə#& _men]"n׸뤊!HU 'ԩ7Cl),u6bK`b l.b<\tˈ^+ׯYŐ;,tW&lؤjlQ[%=R߼|`Q^T`Kkƹz[ᣧlpy\d <6yG`TY2a@(HLMVWHӯ>RFD={_|S@ %`e lR5 p JJRSeuZ0 9"Qq2 % 9'A -Ѫ)Dͫ3JjŮdnQHy U(%dKH N=((d* ]&<,Nr#V(HB@R&Ud#K=)CZމJ!2!ʏ">8r" 8O Y@+Jjy2jLT@Al&LbTL!I7cK%\[\& s2j*̙5sJqj^!0Q&Ez 1ElJ(G`8QO=V5Y1\Cfm}J IJUlcQkcNJ5D O9jׁ󀣣mf;z=.l5R}mzÐ7k 94u[FPn8+ŝ-2ˎVh{GvVy<|b;^kmq=Nc۝]&Wϩ^ @عO uR_(VVPTj[+TBNS~l YtiD *^A-lXDf X84:1TGxu8.Ӕ68-QGgw} @vH@ ,<-L|g R<&&pYKP>'baʟI8S&~&Ld4O^MIVJ-.I#3c/s(dhKRuPu2h1S^p(SpOq{TpЮXm]rD'ts メDr֦<QzeuW~]WV )TO@ hqd*\s@^}%)$0<-nā X@#Ty:ـȳ>yyX#"i~tU~cEKϟf+/6}发N*o6l'JUAkg_RvzQ)"9UX :80k\)cHg0<n p_^b pK#t2;G@&;Eq2"\e09 _y"a9'M Ž"",!Gn;o҆.*ŊXHKGtTDJvSهΊ%z^YyB5x^$}sҩ%)/Y2NA%ފ@~ a4/Tӓ:ΑOFIJ 9DBCMŒD $r,@#BR7D H!87R:թMuT,B;'Jt%rw?BzDe UQ)eb޶x [w܃)UVS@z8? HIi[ vɏ;\Y*G=/3n+=Xb)T3  qCM&㡗ȑS_ WyQ NnO9Xqa`f}/ )senCN؁*KXNQ1GNp~4M>Ŵȩ Ha' SQ3}`,J&pJ%,\NJ>;/o^6>UI8^'TmDCEж!O{ÈGa)?;ٙ.l2I8$ߝJ W1;d7 €+O^'ܱJDe̳%RC=:'Ƨo> IYŵg!!롄ȿ&BVY:V_ubqkns廧ҧF>+[ PPaBT'j@kŃuZS C|9pH~ B6[]{r^Ug0t\![;/Hts¯rG|VfNGB!^#,Dڽ3 CRo~YB[e^<9.={2C|Hnښ. 轳ޙe﷩!t aۧs9B.>BGH΅*D,l0d\$ o ى_v|r[4id=Dي,#WrnQs>9pi5|rrKa&/ǃS¨VܿNK^>^vLo aP!wM Ol,|@#ΔB ä_ D&D).JŤóሡ G?T61dXK΅g !%ïI:je=D_d?;G{cE B$JS4A$+@H "pP̒/C-Fp D zl/g51-ۖm(ײ,*rd64\UeIuhꊭ4t}ʺ)젬*E" IAM]qk ó̮< 1KEי||'/'/" cϯ~_"_%|}xe;_~}=š-X˶oXm[)JuP=ƽ{0"`H+E{s/g=D윝M߳z=@PCӜ9ߘˁ%8X_Ѹ0u0Q/tBESE ;^?t>Eroߞ7l3Í76<ܬ657vt7֍?go?1ܸ0ȶ9S\סjljiN8k:gY1sϋ()e|H_9h'}%^ڞ9p]=>E=٨54vM̖N)Lۆ{>6NM5̍;w6^nyqGÍw]1YgnLH?y ^fQtcLǶ,*JA|˝/M9@]5PjmRnh1sgfHvv>oh>eh^ߔgTvf6̬/-BvѺfyͳv`߽~1 rcn61 EE;A_~@xdNCy6}|7u:k^7;}}+Fe}~zrvH|9ܸwLik>ˬ~}H9d2TL%h޿  \_?T(d ɿe '//3ްN#"y7+uHH%P: AB¬^+pr(*N̄{D(q+Q*FQϓțK_Cf=L2T %{5t6+R+))NNOUz ZvL@.b+9b)[ɐ}sk%^ ;9mZ6%YuN=&3p(VGb09H6^6XT9W@a筐$*!kUp{!h+RceVjqʸ] P's˸LsBD/ \$7W)z5^wTңm5)MJ_ȃN#+3i*vrxT4j{5:2봲X5(2mYF͖`ՒU=RUiojaL[oQS\ *Rx(mU&ի4z4^ae̪߱iEZi~)`Om]-e :UB۠0 r{*u)z)BPWWiPUzmjAޠ9« Y\ʤ㣾3~gBWB[ P1AJjtbVu*xO\oTh㽊^N*>og4zR [M n̽LV:MԷ*tJ?yJGV0q&z\(t R]RT^ߠ Ieah [a֫gIl`et29Kݠ5**h6|ar}4)z }AQQZkHÊNS zxRQvU|hLSCtS%kF^bB!`}G"G6 򹋀ZI@I+J8MCIm2כϗn@bb&'m?6oG9 .n[ڱdk`1(TU;<܆GE{˚ZJKED𶱱$K rmB *je7K*,ƼA4?R 6[ۊMA"EUl$`IM&2BQW ?Ç̽{L×_!R^U/X%m(dW{ 2Iت}Y{KAchii '*Kx>Oan(q~#4J$˚.0^S+{ !Iw?"X3eL!0H!!$ 1&X4 .m5KًJj=M^Qg}DnEwCyl쮞k+ FLM&x _J0Ah!>EĨX1mX4fuJ{l6&W f 7;S[XXs_=q1'4Y'%7+3ef342χ<3Co8c/<{v3'bRÅARFG{FcOG$M\,ZaUjrjrOw4ǒ/FcWʤ.JBB{`zǶǖ"1db,'])`~FVb66+>>K }Wt1/xUɡp* MF{0QuihN& 5OP1> cr`0 !M#▌44-}iP[=1IK`ki4 KfR6&ՁP$5X?tz=x5Il޲A[E۲eӦ Ζ`HDA/Ζ6C- ` %1jZA E˖$nq'G JN: 'sw2; !9!BgRСKߋ~oSBA-RX&}."x&cJk7^;\sb ) jg oY;mw&= 7"> A6oM8P0>c7{66ׁ2hσ8JJհaT]l(_V7'_:zi`뫣s]ٟL\h9;=}tO& LLws=ٲYgR~lw#&75m'KGßThO1_Y4 l+ϿOr0A%Lz6Ak׭k??~$6ĺMA,7;)(0ssiM[CEQ+=Sn˦`SO@zNP|^^`kkRT e)8Z0PrvnbR/whWLܙ<>pad.::dy)n^qEgǃi$4Bwrrt NAARUg>YWMiӝթ6qAAqsstrd@mhERwtC74' cE*fR!6;R!^A((F*R@<H9oj]1Zm(˵ъe=;=svp's7;:d;:yCɂs7'~ua7YBa9`3w }sܬ0(g&ExRnK< :ddNຈUYJzL? j%1\DI*y[_#BdJ92dh)ս':7}7s/Oʯq5UW~FHߜk͑%%݃WN:]=X23RR:wӵ?{wI_Ind.t-%)S(|NV6F̽Е1`  Ҵ IFU91 k{MQ ZKA"PjR~dOeR=M4>%L!Z$XxKP'f3{lv0C @8SP*Q6hÖ)h "0Y,^;V< "/"cA/^~ -`7Zq^DWG2]D2m6kPgTaY*da8 29h8خB@L u$5U$71!>A|G6 ðN겉w ʐUĴ/4b"LPo.NR|VA|ƶmRX 1,(  @)! c9D+DTVsQsL"H_,( )EV[%JaMIԊ،p+9.LԎ(=Ζʼn1Uea %ZMxͭA~6wP`|i#V̆HfDmWդP`fX^A-W9r$!`$..]>@b;B']l7BCMVP A){A9Ho݊h-mF|SC܈kw1L{*JcFh9!1 agm.<4j1V?lZOQTr )O֤OP[AZ~2cK;\'3K]g>spȟ@v; #8$`\ T`N:xZbV74' n'qJXt`& >{32Mq9>A rA,wpEK.N \vat֍=: rVs$LV%l?8&Sz tE4e.n,Fa;Z^\^ؕPtAx,b*صX/> R{`!M׃!ii Tk'Q|KS.BRd&@7:FIw L@%Ipn'Hr0oZ E 7~zR﷿=:N#N%'/tvޜzk_3sqIeV(}*^$HO"tfKi6-EB )dq)1 (!erR(L. tYV6'tf0/cb$ pDĎamF%HxrzJA#mf^ e NaEVV]R@Oy<RX_(8{x= ^hLok!Cyi~Qy;\Xq-=!{?, \GG-LI1<2R%a\ ( ?;qCȇV;T*z$2ĉNK.!'SO@E ԑFJ<+k#d1Y~AQYNtd l-6O)6{AYȶ >`YVVX j!+#QFH"%aC9T8\GHذBnlabV{܆*R#DD qrCNg[D (bGńf&bb#c#nÙ#x6AnZ"Tδ[)N9^k!1uPӤ8&U"aK%9lHJxS"ě#CwbwK@/ R>;|]ˡHP8T" P#= ECQdȪH] ]tx \]шiiK)-+@V ;^eYar߿ b"LbJ9cJQ x% N]+)Q7DPg1ѓI7H)ΌkKe`ֵzع#(h=ʹKko5;Q˜rgeo ݙ" 0#?DD1zI8hAIde$\DԵ6ôBRMSVHH(*Kr/E;_|14B^s~ڟy^ԏ!* +t .?L H4 'O مThJJV(B#Y"əb+ܝ1\vomzn}oi`Iߥs]ssϺ>~"oPLr &HbhBA0j8:K8$ T ?B]ck/rm:B.:30,v _]w=r<&ɠV#d}hGlAsx8iFĝ6#UPaEK~oJPћ#ȝvs~!ubn]RĨ'k}4jİwcI=C@w tYF?~tiu3ւs}s}]-73x,1Bpz %V`0hŀ7a !c鰲 YX.$xoPȱ" 'K d!KdK!+}e5rZu*@+j6WYuuS9N!Nnt|$/$+,hqr(__H@3W.$ K? Tg7WҲ!Xǣ=qyKa{ѐLla q A m<-˅^VOgE5d~J$mJ /P'[ XaUS7ܩǒ#`D3uۦ#,7K IGgσE-I\%&"z[4 #&6Q#! (`hm1=V4H(ZUZ[F@)}JSVQzS'tmHrDf'! й4xo/E, f Cs[?.o8e 0455bg|(Gvl,~ٛj{J. 9@Y=,_VI#R{،ቈ'tm/ȇYK0Y;9B(Ne*p9AැT5S:6ERMxuAҸ%kFZjۼs3e'U[ޣ@'UĨB!Q7( }y0Fuƃbv3Dxam eO)0],풺9> ~L^*YjN`>|#QBɛWamur(8=Tt#Qk70sHbAhVTeb&I /1(MQeɻi8>H`B=٘ t ^n+HO* *չ+ٔ! % "P<51e)v$:u s/t}5щfrr7Su0 Y#7:]\*a k/)?/E2 `y{?ÍިƼ ' oܫj+TL@/lAJ[d妩: ^8b$<`4&H~oG; zB0BN>2Uw!L(AFo;$ ~ŖvKGm]/vO_dAܫ{ox];Pwy.[݀kkb'uIA(Xpd ,ign;_YCEHip;uqg#e#c!l[BۓJ._} M,K(NOalRgf9(gH R,ɪmYxݠ%lgyLMkc88?O{Y{#'-HoFiii-<.&*Fpm~Wsk h-EJpg<6BOMWF vJ~:1K -[+?!뙬33VAfF0{Ii \[L . yX=m9u 9gǬ)trmo_s2,y.bq's{" ;9Bjx:-ǝ,#L7Câ>G#fѳDZn$$,!!=ϟh :a 'ė,]e]Y(~*5-/e m;"TL_ϧ 27>nq~>u QPw!~͹kcWn3OUi =0j0BXF`CyƗ3c";HxcQ M1ؐpb񌽎ߗ8Ը2;uJj33٫ڽu@ںןZ_brݟTIt'd7>Di&u5Bx! ??))I"sɩ(dz{St!/o=b-KLK''ɡ=줒Pzw B_}Xf1z鬓gϞ=p`j2^HPPQ9(HO)DF*;8n@rBn Wtu(KT*Zc~1U"L|1˳1嫒!\dw_8}= SBB^zMr$3?y 2a,4N&J"^!tnr!顦l\-:i"!VQ'j5.ҨӧŤũ2 z]K}!".ntUQˆ0'U:~d?nSƩۍFS&T'ر"N#J6bbCx+x!;Ob3#4qiQcʇQfTE@{|Ƹ,7QP5t~z,2B|On4[/If`Yp؋KZ`h8/Llv0/(g8^qʕ.BpuV6ȍ8atI\D^Ș3%85mtui`uka/G~ER ?7gEC|Hig'l zj)4j7{Lr`C:[/!ɁB%UU |!\nȒzXv S !?^&$. y0V|D|X @^5sIeWà D'p70y2C{M5_kZڣ k4P gg;N~lUE'E}2 rr< "DB¶+'0, $ݕ>CF!~*)SԢt33hB>ܲ%ͅ@z $9Gs̷ElMqC5)͜&ȝ}06YThSELup18keҀXU 6?A9Bp䆲'3`,qIfQ U.4C )>Lu ;]S-= 2g7NZ&r5׷**<Q> r@ 8CzʀT@4;Wzǽ2 0¢)jL5ɽh!י$;+$ete>ܧ`4fm-(dI:&=*nHWbܡcsxP'IYR%L.Gy?B5.zrDa Up^t`vVӋ!uqgx=|&9.6)& Cdo';fjh c!xfI oY*t;7~x#s9C+Ql+::!M´[q4^!zhKy0oּh!c3&`7 œu2ٙ{s<<}C LvvMO͓B@H߫W< "iSH\RG>eA"V+W3+DOR\LXL f{6Þ{F= ilG8BBc&~K_L*x-W!EH0ȴYtN{L͡NIO)twHrB^?}UȁW"Ȑ%غkaBݝ3C0ͼQ$ c$߅rMB™BPݢ>ڀnC tB{ 灝i!ho A3g¹ ;/|ɳKءE~F ;!pջҵtWOwou9GrhbpH 0v`h`K/ B8t |WHfS r!N;Wkr4?xd'߁NPcn4qa4xIBׇ,~X\|x{!Xۥ\~[3{;#%%LOd-W>-w< Ytsb(Y&k~ w4|Bwނֽ04<3260=#9.u\r" t=(dlW/ r~OBκ ,<(Mr@%TtOOS Ԙ6x)C ~$X֣ҀA[N"٧ T>$0s)yBFh B_[^~Ҽ^Ep/Dۨ&6=(C5YrVx B/wd . pI[\9 Tg)x  ݎN^\!h&ߑzy0# *-K}3hY!B0k-BFVԚ,m+ՠV7+$/. A\†N* 3@F %N OHh$$7@%q(va!3ih!?h&!ћRSs"$>$Jr5`LHr|Ғ`0&vN߽sL]ey Q,(U(| IEBїTU^=QUiڎUE\i)6UTBuAesA<ԐSy!6B\&`7YOO/€*$dg*M$7Y9i!rCGCkMG7㈛0ɾ͛}7o_ܜj-:3QTl+yꉛM S; ē׮\&($M>$+ܨPT#.B2  ƁMQz[I^MMvYyqLeemӇ,ö2ZRސȌ5DW&ŵMQ[b׀74׮=1N12r[\ؽ[M* S$rB[!a+Q11ᄒBydYW E}Wp7[,(Fk/X,]KZhu@}}Y rCVK|6j+ DNBc #|d)klV ή) #D|OHPD>pk>,J_pXOlBOgn?TPnoˢ%5޽##q(*HAB.ev)S6E&CL[x<.VuCEN(yp5 r !|!7K݋eQ{UM20xA_}F0򢫐KH420PJT{!x_!b[H>aQ)BR@>P8 ʉ()X\&MN=^ fG}8g 4WEHD]Cl!(DlW /ޠ@tVG!_4.r'D'4iSU4 5qZZX]'!XFaрC{Smy%Dxe@;qb/ B.W .EHblz l.\szꣳ u?Bl+wȊ+f.Zd }=?OQ= &36<쥁9W` g $D&B4,0hWeBzz/&> kk< 1?` m~4;0y}i}BW]_n/L;"g1|0|ҪB ew]||VΝUeBӍWM^ _,N!7칂ug?맟^j 1֪ڦ3%MHl0Qd vǺotJ,URpp!=0Ճ̐M rxyĵ/ GnX&}oCq+i(!dGD:\]4I#-?/Dsn₊#O)%;GEij5u\s8+dN%9}M$$l$ 7% y饃/},dNwq2Y Φ_=s,|Ճs( vP)6С[K`HNW%+6dâP#w'uYDDCEϳBBve(yIJo9GsЬԐY ۡZoJoFN"4棒hQgԳ4D'I.$l*d`#m<![o39PE/=,ɒ5L<!HBax [;b` hygIb1._C\_w `/۱hnwfHd`uC=创$lhݦ@Dt0@x5pU=NxIY:|G/SL&Sx|:N]*_ڎцz"iWsbGs.D@aB㾆x+ݳ|Vqoցŋ,!x_v+_QR Pb)A]E]SW\Sk+o*-)i:WpA{Ld>a^/k075&U^]j`O V2:Εaj|B ~ѳk~WVꄖKDRz4~iP5w@su"k9E5 }Y#^|^_~:Z7B h]>VS}-L-BHAނ.#̝vQ@`m^ _!|!#$G{'!yh!Zt}BM,e5WEgIdcB;(r7?z|=XBB"$j\lO%o_;ӄCq`NRAqB`B=+}g _yB2sJW|ɂJ;1 nr\ωavQWRSٲ*Օt緰ِ]4Y!Lvԗ]aݱ,n$bcAV04}_ [ v(Gl,+l#r"&WgGSÞ9 i&">!`^{(HBB~?>)#&BPL! h i_$plO*~'_HLn\LdVZLdo~%hhH\!"88!ANHW_uLrR W$O$V| <6Ycҗ.Du2_!5˅Bbp2j,!.Na>+$+%_;!M.ݩ"gpz\qZ1B)1QI9BNP^-$ 9>KWrWeW!ԮGOJs> .Ч!BX}S}Ibd16 N/%_8Q|V\ӧp$N5GB𓳯+ ^١\.BBj;UW50J p#x>WKͽ3ezKmsgJ5dެp^fˢQ-6N^?T6BPGoޢShaQA˅/BhN$/yB@zB¸-xxӴ [C_Fɚu9[ϴX*kv5lUa+!e!t>4 <,?o`N '$ X&*V%]YHb6$8mK u+S\@F" y#-D5Q` FΩW)7c,.\1#~Ea}gC}D_!ްwmuh')bJ\9٢r5( \kKdNYDd!L+a2.SY!DxTdkC5S jU*)RH2X,'Cbr*W(E{.Die,e6r/g"[$D"Uax I +h5 oAG`+V\FrbufWB[T>FoL]SFڇV)p'0B }QR?_ӫT)$m }x'$xXxh&3_3[$~ =|!B4?-Eyv2EGY;c.u!rHװBTZ[ϑ.Υ#.v`R  !ą*L 'h쾰fŏW⧔Fq8 2!"h!"@%=fx+drv$ݰ.h*4OYE]'ElgɓmcӅֶB4 IBab B$ow&Hw٢ T[)XoS{3~NC}δ_S&ԩtMYZ. ;/ /tN >h)ȕͶLwf\h!YiDR V"v]U%,x_t!eOV?JQj0VH`z̶ͩ*LщNPK!٧R xtkfddet?hkGuj{Ա0mo3(!O=I6B#BP+hK~عJ}H7}fqzI*L¼vPXHG X=S߲ϐm `>Ԥ25Д ꬄ_ fhx`T28;l4NAˌ ^O=؄e-D3 M\LE2#lmh}5:S|V[ Cbjpi=cl|uwŝ&^wB޶ ̝fAgpgQague|c~[i t's0X948^HB2%'$fsbz2.TOzjnc nîQXNJCs:,h+Toc!eenWWC uc9%:X^#&Jxjqt <18R=VHhŝ;FW!꒱v RpvR^U\5Z~Gk-5%‰$`UxHWOTZjmJ6vL:)پ1=+ ]j7_pBx)X|#+s[pAHxJ;ǷxWWWA}me^Y%l[!I]\PGdcۑL=RWk?V?Z;PYk%J̮:RϽ_ T@|kjl= Qν,{]Bc vyh).Z Y!;\dgf!<y:O<(`AkL'9{8}ysԓ+sC+#pgҘOk64D5FT4|(r#XsvdhnDqBNo%$@[q,- m%78sT8Kd\7icc3_J"QI|NBjal{rbjٟ!B@1!5~߬ &#)~Ud a PN Fk;Es&曐QNCB =6px >*@j i)4d/aDY`p vmK3ZpĨ!ÏRB^( iо5*&W6gra+!&'o`.[缻׬4u#@gHk>&c ͮ1M>]J0lI!DlUge]:fO/ 2b0N e|6-!_B*|MopyrϟL|s`&YonGF18B#8"#O"{,yW0Yt tv:0l`r1 ጏg`j2N[lcsm݆6qAJ/9яC#)p>ZݠFY`qĠW;w@HN\jz:Y G&VG~n/=A: ;1|҈Ÿ> A{F;wY}?]b&Մnuq_h!.kb|X1g1BV5BzI5v0hͧvY2i? `*܇vz]vn' l@̧pܩ˂;U{ Օy Oӂ3#b #-MQ4]Ќ)ѥz0 W&Wk! Y{7.@W7]Z6ݵ架QnNτm>`vL v3f$nӼa=j\B4yuK^KGFmqMQٹ= .[S5f_p\zس2FWDA4bd}e;;{\ E'i;N{޿߃:cc--ǭަP=ZL;<>.޻190j0Ǭx*JX1N !Pɘ4SM':&8-Yu"><Jԩ4BJO.m<$sBVj[!G<+SWFVij3myi)2C5# g]ʇm(XOkx&&,+[k%c~hgBLO4O7j:Y41oDj BrIJ-x]JQ] W LD-Np4iLDK2s5; F`llyXc9dhsPY/4 &h&^MBkSeO$5r F`%r=>ʂѽ{(y1Z'džgz>7(/W UHJ FtmOΣq$D# $/]#d&BM.'GB`(?FL! yl8pTW!#8* ~/^8J%GQatA4\у(Z}c<\7v-?^TxF p^/kF*!|| y1*M"q+J?~m:! 7ȤdYb+(B#VRǕtq3v  c`2qze?d j_lHobIjvMH-+nH$TTH` fωGpr{_nQV I2TU?ノo@~ " .S(8HҜЯ]. iA%A>l!+4muq=Dk/NOYC2n@Y=hĈ ꧖d]l>YCj(%XRqQ\X|6Kfg#_!!AZF 0a6 Hf` Mes$h.Y,Kj~?Ԗ; I`P)r2ESDfHMEi[g'jťPֵE&CW'ƉvX85251${ c`oOB+)5J&42 yJ2FRQ2RII煪MB7A M4 So%mѓޚ2EG14p"Қq[&qH8@']eNTZP\lRTPMJChxF.( : ;8 E!^qe1.'o$ Y!B*[<F4, ?%S""$R Z BZMJҩ*(!բl (FPS TS:FՁR!d7~"`ӼD>v/pio{n/.dWR}/!G,6[ " :-L΃w_T ^!\8:қq:[`"A=H`СI2z{ bK'?q !`NOhহy% |@@I&m! $iO<Sg0JcTccr!ScSe럼x;, =O Gzy't91gB`_5Gu0M9a\#3G)$!T,VCK<5[ZXL/[x`}BvW o-E0q\Z]~4umMz@aŒi d"/.EjK V,,iL@œ뇦'H$6~u99tRq𜘦8xpf8"Dxb |o`{ի.W8 _Mb/Cii /ّ \]1BEP|F776oݲ@a8,H?BX ͦԅLїIjHSH)JBPVVby|IeY1M]UP*5-D㚺PEB.O8Zgc3`Z9znoT~rKp8!t/ͮq=z+_G<Ӗ`pf\LӦgn{<lᕩ[aPtͳ< Ӵ,Hf?FT~|`4N~:/դ״I5yT-"M*^kQJ!FI9cK[-]sJ!T!RpMVAL&jcXz6Y{ 7q|\5(?fLυ^aP$4sZHO) Rh,TkR) %@$(Mud JKiUK!ҋDu)Ik!!΃8^y&gB<j%"౐SRZ@1M"7w(;;W*@S*( %R^ТV czY>8]?8b!\Bg<B"AXl=CTȋ*,  B~iER-J*޵{$EPN)E"i__J t߫I+4z%I)X]dRj)=__,*S*eD(J ޞJ O'j6tfYi==arz흦:.[L'taws-- h,T0hsXmn8wFB 6utP @5z 0>n _͘I;\{_k@42 m333qd:ظ3t- V[Q;|Ѓ2D0tT+Ԛ~ťbER&)IP^*:ic^PV0JLBqayR*c* b`2f%b>uE-7qng tV4:&:괙LvlU2ta94130u:v 59M.0ls513m%Ԏڀ0v\6j_5cQ[p@ nfmQ{`myiax[|Q`#2~z .[FHa}E(#4Ƨ$*4e, Bh+=0eDE)bRR,l\#erAK&-)Z kðW&o+3ۃôK+ єh=tjh׀B xk!Ԁ6k`0}ke ZJTmb[%ZWz{sբ#SP8+{ȞX|,.<&V6Ɩ2l% Mt D%\@N8I6Tx%F20TƊVd,`6$p\͖D,!w[2ȭ#룩T<ï8ր,>bd$lk# ׄtKTm(\o7Àn Qб=b5"dd0/ܮ;탃+!XNiibb")}I DHX@PKB^$BxB򒐗$%!/ yI$;,&=9'>Ck/ER.*>O<4" ٢vJ={>CY;F.fvښh|8;$dsP2O~^v1!cc?~dii^Nݾ'CTQВ!O ^a|ۗs@2F|A|\$tؾ3${'Oyx򷤓i]^-J@)C}DtG-<6e@WZ>] /HOѓA*mBO>yg y44oEX w/-3Q̝3(yDIIɣG{W ҟ;zɒ'^;v&;wCN&QD,6 !Q/\bIBtBܧQ;g]D^jqy"ov9SLZٜ޾rWT^-![\wrVkK[^#Y`[BJΝd/ٯ69.SrÝ9c[T̹;gum 3 Lm@Ș鮭f;LN>u!96kvzsmnNk|>9XB uQr]sx )8ySsɊ964p'0콵6]- zߔ"~+6qX.{0j!C͘7Ek[ȝqǝ?BJJ,}!_ھvf3}-(w: w -t5w9~rx# [ KmM z^].Qst_'~T>zT~i[63O}p!VZ(~mvvsoԿнqtWVۻ̣▃$j!]3hZY݁$zxo:YXGQl9~ٯrQ +_:tmmO[Z- /{ۜ#b'>XBΜ^!'[ ށ%GK;zرI h|bq)xHH;׶>2|40:>FuG.f =$Aroaq Dm\.ytK&a[`ިuW XK&٣L,;8yxCێA}vv<!o{2>\nv@΂v -6-CHOX^`:2.{C- P|^/KO_0`!K ז ,!s(dŢKByǞ5/6>zޘF@͎.dGKI3XMr[~ݰQgPp!s*dDKDQ 4Bb].tjBBkԶ;զ'ɢIZjz6.$~`TMSMiu!7R$1 Ϻpio "IiH֐P a&``Z]!9(z~x-FuG,\<|a2vUCVWt M94˚y+>igqjp@2w78$!PRTꢑ~0,|(`!yz6w"sӴ{n2:>bwP[V۫bd)oȦ\k-r*w(KPep3 SdC3&!侍cUG! $LQ/$čAV 񨣛UdȢwv f ݒlM !+MP-2!(S܇pǩF3YAICW>$pu䳬Hs oOo ?D'xqeY|2Ͳ>OHyI,6tGYcͲ!#Kna! Ox=Z0f[c݃YښK_ OGJ~]Hemm8ˊD*7bf\%e :*{^*:*2S]GZ}HE#&%\8%q2ŅL?jSF2Y".1s5Y˕= P{?+qt[[y Ãucz_#? [aF֔CfDKM OѮ7KYC$K$Ӊ#"Rmrt$ %G'."-7)hĔ9햭7yA,U*BE;OD*C[ PjRL^8S-QC倪؂K2"S{BVбη ^ِLO ݣ'$l-$%}BZP0RR= yŀ?|h"H $-c}/":[ȍ ό ˏ̌zѬ|$pu&a M `|XQ(_D=_Zaa"_<DPdK'Qk-P S *7gqb<晸/N 82 y`ʚNF@.p1h@.XA@4) AZVQ P3A*ij'zۼ>Xh)o(:'|#Ҏ5%lց:u6 GiB X \-a$+ɣr? Xed( `f @iQMh 4f(~,Ed:`dirǶm MvwxNt4G1&vut({F o:\^C$avΑ"w u#`t( G #G٣Wvz3ꠋJtnl5P}JQzXmDTtUȜAs/-W̗7 2-r剉 Ή(њ0*RJ\՟E\Q?KHRw9jQj(G xw5kF1ʻ;B aap(G氻yklB :tHjm qʡ.mC59R R;sD,#gok G&;&Ǜ$@vj d{{KiWw0 X$`KUtQ(P* tZiV%щ-/+s{zؾr`NjANq DzݾNDJ$R:De[6QrD=J(`+U"5l[HENC*O\m jEyyM܉:D@X_ā}}G c}1U... ߕ=\s)khinJNt!:M]`knnIgh5%2. <jqOe|MM-ayw_\_ܔH5ug6`+K_ѝn`$鉖`3.vDn1.DTG J؈.p dA%p xjdK-f A֖&zH6|GȧijDO¢0bF68":jL`6Av8 CxK3pH4;{}#ڙoK}Dq7[nHQQ݁˱={- K^UCP&#PZAm|* xkYstM uexB1.'+-%o&8[Y-/%<<|IlAP :/wn\ h/&/Aڷ4 ?Aab(&ۄ-ZlXr$(Oxk *HT; vO@.? =\0vbx{SoO-qo hz(+_捤-}oˁ `ݳx3Xgx-y /i=617=ẔihzΦcG&y`x{ "HL,_r A9G7AA9 g j)!%8 AuMtNlko60o;'M_7ihΙ^Za(DI9Y9A@8Gڀ5Jj!lZ(,5:0#}:Aϑ#}Gy/:5:ם!J,d2CD?Ǘ. ~᧟~ _곉`oOX'JGG~#AMwFDB>XYb&|3EO<]W;ABj엞Xd_PuIO7P<%e5D:x׿K8(baNTl;.'(HP;. VX2?>k "e~/R,#Z>4 MX:;m-i;?ucO\5XGg|.RŸK͉#s1B7 _TvJDp\]敟$,M[<<"pKg&aill55e M.:%`9U#/=շo6,ŒϗJe򋥲 tZF0#CgEdP&UʋMc$}Ӄ}kitzzJg$1|ih!AgaJ}σ/(i kLʮ$\^zp5DyQi^%@>- G%Q ;z[ ͏_$Φk^ J,@2@O^h$Fl$F/ 4e`E+Nw8=BBKYZ:.,]$BK(SGĢk!0v I;J| Rgϕ˵XyXG,YEb%޳uYn|!p$_6NeBr l\e$t¶c 0hh%B|戇˲ rR)(T/M10 0r @l$qjJVbLH]@ qWjJbaB|BQ\cO37neށրCcc==00=>^ ohȮ%]F NHU<Kom+;4II Y &W*DGznd+$&I\!0 $SI[ejºJY\,nm5Iy[QHe'Qbj@#Bx++.}Afc0M:xժ%FIm!W`geiBAl1ʩ-dr9<͟g#ޖ&,^hRF¾^] γw 8$r8Im9 ~v]"F g1 bdo p^cONv&ڞLgtv!:R ')=NDKGg `._\1.h1\[P. k o0"42N+dCuYyuӸ6={il)PCP6#}AL*ʏ9"HBV) B!,XUz-LژhEtرa1gʖ&ZAL<ϥLjk5R>LAuQ#Lg|:m!=A.jie9#)twwy8ֹ{A:k`>/@SԬBL4veM  "җ9,cѽ sH] k!g.1U$9u{yWXC jiYv[[ Pmӹ5 ؅!T/, FGѣIVyV&kLM"M;GToe%fsk2n0lm[`0mgNyi$Ql$x9-.n3<$v0[8Ӻ C^qBbe7a%<Ŕ{gW`Zl-d,:}3+F)w6cBУA3E–FeSQ ̫l}oAs& n VnNpk.UQA\n"8ae06 ϊ9wld߾-i ;f'O|m!)ƿ9۔۟~?e < kn|z:[ۏ.Y-ʝDq"1Uͫ(-geg)8nܶlvv!wFYf[|L Bp4_tLk}Y6sSZS,9aTݧ_5۔24o\{pū:͇'O^b{AD;i13Y̵MoUf26~1 dVKX|/ۋ7C>{_B:ӾKϰ~>h{1ܾ[eɋSl/AilQ $؈5AY{,H@bIADC|y!vDsM9n3uz~uHey@AfCQ L`BK䐀9`,GKa:]I ks\nX+P1BEW᠅BdmrY@O*m`=>ةjLBZ gXri,k%€GE3 FD:dzA^\uElZ pyMĭ 2הx~?;].^ Rw0#**&fM۬/?e?(څׯz\A&[`&[ xeWu_M^ޕ:N^kхݯ$ AC^vch&_8i虲q:c䖫=. (]} bۋ^hzb^3pla~  wE%~WDJ_<~kFu:%nn SVI GfPTHp r18" yLŬZn?!8\t^]JP"2 `6čӚj$zxNueMv8;egxܶ okZ+<>W|~oT\Y r&)n-iGAQGq1}_o/g2[p o:A~V(2ZcTB".o){hz5Pڡ熲Is?fSnT4ܒV EY5]:z ^3A!RVU,UЪ%jqqI(<\ ,D.(aR,5DLpSh<6MS-) YNWI{&Q%2+QTҪ2>BG\[{[E晔&1 FY-񘕸wz`|gf]g/f rw rHiiL9[wsA3wr (g3 *D(YOL d: ` ($aE47jr+bK(v1vX\pB@?Jo'h:D=AO}~+̽:}r^B~5騰;m };9>4*}:{F9|5AjHjYތ翿~V^ep26cܿ:}?FbH  J&`szl YVr2!$&sA5h A,/XQhmKvizs vq&3|Ljw}g>rE.X%qU.cq2V)+8*72슢Bh!5l 9}뇁r?94?[#Jzū~ ǍƯ^HO&Ox>ԳҨ3%ueyE"ȄU "t*dk";3ŅideE"4c~/l PlAxs`10At A q/i_*;ysch5yX!kf6<:@0:Ze^+08Pf+'&Wp 9 HDϺF f]L@@P>(<*}rnt Jf'fLш44vru춫 DE0bߧUU>MjK9IYY&Df4b'9]ϟ#nn| |7br=JSy#W*BwRh،2^ bdnԫ86fEE0ۃE0;1S,*^"1%J}Xikh Xd"Bݙ@i I95ns'{ ͫr*JFUGtzMv[-^NhL[,^pQ_s%{W=rAԆw}m lYSAcRmMێg ѣ4m᏾z<~AhUUir>CoWz[IQP7|N'vm6nMNk4JU:G~Z'6#Dl S528s؊bY0IϮ4A?h{*e&~/Z[cAr<]Lufytj]#.n2O0xs`x&jäX0ͅB++^7\1Z=s۱:" 2ʘ O_wuҁj'PɡA(2k(dğcHrx3gt0^0|Ja7cd.B[aKG]CKȑ#v_C)pmY~jêuܥSV'p`;n*rj~65}C(;sYJԠ?u m;ϷB> (5:6S5jrmǛ7v!v},J[VC'C*)%2zk0X|f &jRK_! 5 j/=lj@O:׮ uA5. &8ķwEU`y&|ZX3P R쫬!$GԿg#l=:7fٽy@<$H÷/Mq!Qϙ *:YC '.@ܵ3 =2Tf|o.ĐѫVvx3e690 da:f}B!?oG99 w.> &9;Q3W{=;iqKyUO2ʝ?uϧ@Φ|>2&C/RG,0eU@?:/1g>u)dI:P/ChLԡI$ǁ'ӆvCS!5^Vv{~ H.mG# _99}u47Ɓp.rc<M0X7Ev 9V@q"ɟ .Dqx_&/ x\PǷwgϹ8p# W>Dniq!%0SVO y]G>L~A;?[AO~A<$784v.=FJi!edOB"<@Iڬ+=ri~T_ex;g0bS-9 /GhZcC%P7C*˓7 Hȣ`p~is PģMA(piSto&ԭS˔J4.d/ }?X^Ln{(='Shƒ?뷚4^ z'lI6d@3K;Á'˟Oi@Jp@ k6g^|:xƕ/~9qϟ䀀%矜:gdvvgvX2mu/4O#^]$]NNpJn>٧9eW=)ã'/ ^yŀd6nĔyX`I IpC:Pio5V\W_}_< ż?d{l3ZQkE@XAw*]:\Ὡ{.GʧUƃzQaċ/"TLFPzmC.)'vv¬ә * X- [8X,`M;w1ٻ\brh,X`Wy3x9ޡ ґr^Đ~Dn5xRϐˍ; 摫 Ǧ٣8p8 i=T =\~^)|6üeq܁Pr!,=-.+ӲPBײҳ0!h\\K jEϤF#֛j4vQݫ+&Q)c{1$5E5M42Wl9:rc;}HVB B Eŋ>iV[QlaU,^qsFx,(ɴ_0bvmȥA.3e*7ldBwÎ 30 G?:0Oy0βڭd3`v.ydU8:avm zl "ͮWv^On޺.wozzmvFZ *z9ښf_t.>ȶ'cJyG?%U*Y*P5)uuVD3zȩ:E`V%HEE~/ " *hAT ENrcx6 |4ljy&UD~PH@P)Yu;Η"4q tb QƎ8Ben&:[,} `SB߀7kClـl:7 ۾}S|FߌgQi\MȺ -{3*3dIJT$zʢ9:h \J[O){2aۦ'zpKb@6]) !/Ket=7j$+<.:閛 ]vfhL ܧX !-ڳЪqBO )AB iOkV%8jujN*2\4zZ3wdWn3RZF )_24; %90%z)s$.m8EC@^}uׂygJRGc`srmt>:p9ߣMNg5]:`mWUX* Ғ1KVik`K.4i \\B~?@dN\h>1-#GR` AUXcknHmTY KVvdz-PK]^ (</XЂ`K(e33 :C_.۱~zl=o% sV\B@= ; Gw z2 {AC`SRރ[m*䀇JGB?_2}JOّE0Nct@mh.iFǾ0z5zAu.ln:d맆u.[߭{ |~,ƇС`5 $ >7V7'Bl{3RDE/ݽBN;`9mW ̊md`o 9~ [@W1HaOJҭTy G*ydߩ2rv󮛽8_q1dP/L ,iҟ0Qg;Yυc%bhP x:3oweVCWj O&stlu|4]:Cn#wW? H{*ڪ8Ѡ4j] ^MuZqz]=wDY * H'[@3('- ]- ٢ϷC1=EvB})ʝ?S's\JMZa+ |24J:hvv˧0L)=L 7Xwfe=GSut^^gT+I"Sp7UzK%`wûgC3m` -DdwP$@Z'4fHr׉eF׹r[6GfF+ .Glc,̢ boZqR-԰IS}-G) I~ ԷFdlǵ!.HvR>̐ytmGor*Jz[54:3='%%'m)gQW/s(a@m~┵y;e+"(оSSoN]'Y/ s ,ؠN"D\'9DqȯL \n`U 8Hbb'a ^>,,2],AeizhELFzaE!†*??G, À@@ ?;L mEnItP߲z %$Ξ V[꿊TYWk) H`ҫĬ"()I&)6RAu QDI{iY^<5,dY IĤDfSMi WDkL]RTA^ YڒuTR(P։ZSu,&-BS2ϴY!唓Z#,aaK* POz1@Yt2q җ5=űOYhKQZR! F(\AY2òFp]Q1$J?V?DAVڅ/ #-BkzJ"b#7zA}Ȓ4&~ʦbzVfR#W] Sڞ};vۑ[SCھzzkg1 'Z,"I}LKZ-\],A!\ ~_[`ŏO=.wf K0B< ϼ Ne$L䮠'e.BH^T\%V*| 8f%* X4ȡ#R&oVo2>B?% A$tsBV%8Ё` KLƽ|B3Иw?zs'nR׸#xY*x2?b5^ >us; ܙX*]rp3B,DDu>&<2`:Uu+- *J~1bQt6\buJdȖ%ń?B},۫#DzQ| rg--KqN"2=r0oZG*wRKi< MJ ҩAL'qYL>na*,V[! $"vuE3L!(pw!*ɗp7q I_Kβޏf/ 9B!lJf9iveG|:B@0!#sM\ b|B>bH`b`Y< M ƃF:jxRXnJf)ļ(!p IRyjF~VqXe9BHVz@9$NX~sH\b?Gx)nG bO#!"-'N iG_r{Ix,!ACYg/mȂt"fCB0Y'wBνrx"r03:w,rLSҐsɠyBD α^QBO FG։\ EaFzQ`$6+fϣǏF[I- pqrm@s9r5`` '/:5 tno qNV~gי2׻}SQ-G2.{ 9C8a#HN|ًG֑;#K.Ԉ ʝA|ȂO~7Joa/O{ ?= LK'ENa-!g^On?H&Duk(R~of6C rkv6E |_0YNkF<< ^#PpHboѬu e /C&ɻI$IE.72bԣ@^VQ_?@ HduWK2YfUPo솃jxi 9qhyz33w)xl7t4S1ZQq ;-!6t5}tw:uS^9ivtۭ::l]&H`% #PHǭ!1opAGE5ǻ&5#KcJwav402YqyBA0\ToɂI ~QvF#drיִ2v4:YÒ!cjld3B)wMnjZl:4Fsf,n[%OFp9h Ǚq>}uxJ>(e󠄌<;Oh-2^]`ZvFxo7qO.-@;I =Mq㲢(nM&CfK{pf2$cjr\ÚvAck1l14Bv>P%!TE&2$G¿..,;Bap P0un&3VWYl@,@p2*w@rXh:={ D BWYSlN EÛ騈HʈFlICv$BvgYy[?T2ۇUJ~{ 5@Ú&RL #eJ+q >/E|}ԿTfߜ? _I~2=wr匶t%B^+ُOg~~)Q8S ҄pЪS"d+łAd~DqE0Ny}rACHOtU]wWT<>gFS hB#WdO Ю SEpn&I]a{ƙ(!o)P[ \] ޔgsrdI{~3D%@[_*Jzܓ#hy}bbg |V'+E@ a⧧ Fӟ~zBW% H9?Z]AF_d=N\Cxl^s ͍-f̓S{\#nדř'@ӿ("Y;ǽhM Ye5յZIa!3&vP׋]6t!? D@h9|#H\{Ƭزvk i܃X²#s~5/{ffű@hY T~thRAD})h!a8aL5a4bY]=V0^m!TE@ PifrdWU7B/a9.K1(7bJ (& Ez!<3? Pn|#o#{ng*=Re |Bnx׫`4i jmڋuv4]u&]AXeY{;1F 9qoXK(W_Ic&unlX~j\k3(ߜߵEdz8nt:vHu N:+ڪvL-?Lsh喩#$AAU ~>u}KjK^!ܱͨd߂W!YMMtmYsOkl*eSbcƨ4:l}]&c~=<^ B Boj6Ʒou^ !eGE>"4{ekLl919%io6c;JIlmi1T-5-7o2}W]]ܰ= ~}rm=R"AmXDmoX55Tv y]hxq*D'Q.w~! 7 .,rJ"bhy5Og?h礕C?5p h7\¸g~-{qۭ,.?lIXx* hF ,rI㞘+{ý.đpP< AhrfG5}2꟟]x3###sB6+85O \#S3F\cM3\ak>T0Ewn<&?X̠;GJl< zN35&b$4sq 4u_ep@0e,W/O%L^nߧ}~ -/'KΞ~_Lt rPJzVH+!(z\x5ZG. (<' VYBncKB֎Աw;GYÃ><ڥZ3~ :f#dZ'r wD(ջwwo%Xk/%m}}-v14Z[ldմsֆk}K_qZUX'4tMM&X>(9eB W!_}V>0VO mgx tA{,|@kw|wGT;nL]eCYu`:au>K1Uqo:4ZV5Ow٦:ȠoF!5Er/LltU7jktN8VS{Qijf#Ԣ2jl6s{MafµEg6!_c"lP*aBdF dd|yҗt]Fޗ,.>]!c#H7#4n͌΂&1&.WOP31ɝYpNBsf|v|vͥ3{; ܬ2t:luډqܩ5MXv9 -NSu{]NvWAbn06Cr:BDPXs&kv8Bh|7E /~VrOlO1<  ֎=3zW0tA&ԃ&5rH4LGffPJ̔~ۄxtK Zx4Zh()5m*CŠ3H AW1I*KT5VYS9|!JN3&ކ(xɜG HYzrpS͌Ϣ#@GI<(K\o&{|=O]7\v@ڻ{5C(7uӚ5`"nlPTW&BVZy*2E-?)H U`ZW{S&eغ )w6!/:Sc2{W2C*bݞrE1_Qh)ν:fep zC4=)G̨m"+q|#kp>/rF¬4K!-%6ItߒI+(q.dw8BNv3kc8sx9agYIS-e QEڋr9тbgq1 .ftrn?}}ZK/xH伀T0ԐΚ·R&CqA,,":Kx!koΩQka p- |ח$Jҭf(2T*`E (r}Ce_ P8HlWД|ScvB{@m{}+@}&bT!lDɧ9jlQcVJ.SlHX+˨P) >B=|D^+m? ,|ѢH@GMU|H7CVmGd!I-(UH2]%(KȱÇ4$4r&xRV,|`L̶`-t##J&G)19JVҰf7ֽ >B7@Pk*bOr5 WK1{ٰbmEkB ; r@/ C!dNª΀k#c0ſ"r{!< 탈nώR -l zSю PF %Mރ#Oٳ.ۿ (r;y Kwd:Kiqa-dRe nAL5Fр@ %DH=C=ƞX!sİ.T9 @*AV%|;+d.d2Ȑv'Jx́[}d.I-D,A 0 t ++I`byd!$RŌ+|Ƕ9~<-#Ȣq`:Q0xhѯ(8`U4T9|DWlr^e JHꊁ&Jp$VO<Șlt&& LӘX 1Acޑ0 TL@ H9J,\^pIǝ8GI䁕 3lBp[7چ=)Q ="DpB3͵mʶV{ЅaCSn%r{m!CuR!{Z{/2?\tԶJ*;R&A%p $dc ٙy-Ĥ GiC#l($:b,|b!%Y4* ')@H0D: ':|[aV'ňh4Ne>2,q#շ.8l&c7bR2upowkkb0lCCzaopݪ2Voc^0ݫQU%d 97J\3 @.%j(P f Q4VHDBu@<',G*#ggDL' >P*U , ɖ&z^aO ? 6m蘘a0ZPļֵR0CUnmn7UĽVByڻ&e]L0ޯ"&Yk!D AuayaVrz y#BID ŃԴL$K$8zFJ$_Q"LPQ'R ' bIF#RT(*Iv*LP Ut"ÂXD&Ce4bW2ea %MRSu[j]m/C;e{X[[;dR:e<4n>m1\0j …ۊSm[ۭ[ Ƚ[4i пdQ`:֦4 丰&Gj5VHxsb)Ē$(}VD)y_$IVIT4Y|FHP g%D!0 s4ȡBF7S uGRKB WIJ8Vv Oew"#P&e)po%eP1| \>Ѣ膇pT fe)rpݔn{W,菱+(ʪ, 1'+߄l87T Pp4J*a(4 "].Jf}h!bZ&"dIX&3 5GMF?[fw+%UJFP) ',b8Dk#$^g#D nŭ|vY߄+_[}^hu0\yGq ڛ/04>_J$o1|KZ*#E2p!{%H9U (vb: „&dUxZe9*:1z99Z^V%tnDŽ`n4 Ȩʷ3LQp!.\f_&dWuKloA$b;y{ȲdTfH7G-& %(%fӁ¾chH ݂ R5lSv 2T) 3|O:/C-JxvLʡL%qX9tYi'6A oģ,\ br9mͿfR9dW 07!-c>Rۻ [v{I޻v&~b/ A"7c9{Is0)8=&$35il@=P5s8dN38 |@v&FzRC}FklX;늋87;ܑ#G )jfґ]]Վa[֛uuC{sck*y GF&#BH>zk몵*5!/N5tNꭝ<:nַ75X;Ï&f2񶴵ܴ 4׃" 09-t;ͳD'Āǣmljcm1f$W!sX++0y6`׀؆)*ii\ayy³U]BU.Q(2 #7SšV ׃,%%|g׮12SHoX ၷv 鹻uNg0x׮, !%Uc$b@}Kk #@۬]Ye|pmB%TXVT(iiHyN'WPK$C%%%QA,v .H$%%wZR"@_ <[ؘFK '.[%.!BȁBne p'ױL5 E>;-Su_6GZ<m:`u8Rnѣiiꣷ{GOn[ ģr3X+ؽƄMOLo"ynzSMl@w8:F51[}{;1]0?5 (w׶Ijێ%&"Pڱ&->m-kD`~H$f& 36$u߮2a0dt8U:A;|~ KL9߾Vmə[B[۶Qǩm4.?\@Lhl/h{12 y'L_ !wlqFH m3ݯuODM=tccݪ}GuVo&Ѩ+)~[Co ʔV놡4LX)#DK;`}pƄ̺Nͫlay7F{C@H^7zGtp7+zmӃyy⻣y/w8k_!;:`̀i>`!Āw4y#5 JDі4ER /xd*Xahhu +ķF @ Y=G#d-P*vAr qTς9ј AǪa$S<ԾQrR 2<#)d ?!AQh,nrJz].$6Z>W%HQ YF!UjsG+˅Kiy0(QHXШuCs(7^k4|d|*ylYu\HdYaImɍe A?c$%( H#gI~å 6a۫ˁ,,![/e {`x)!/!# tNkúRjswAy;\ۅ 8*SLWGơ WYwoGխUX!^ع2l6R9F*? qe]^QZM&)I.Œ2L+KZ0.rAf6{/!)MeEl|+CsbϢs] :3Ƭ8BBɆh%L0J&,L@ B6Bh x*ʹ +Ф\.$ <עP &$ok㊚Y7!&ʖ;jv6?8z ؝^hE/3 cp-X3 XŲ] IJ>Q8>)췳{[XV](ks˺VDnRLQ7ycB]ˊ.^voA`D7F/tnoI,\Se ,,lԫgKKحTڃ8l$MR **N J`R:$ 󻱄m!˫[,dFPn)kDQ.6;B^|AalSJSKjOH:oIU_TE5UpFiT'}0H7` * {]Hm-IDz _ +u %[8C' 0M:;+KhzVaVй7 0V>8F%=RG5"qʬB?bT-eѺNF BXVnt%Xz{PZL{W/~eUMpVNhVV QZrkfVV_ ɩV.>{VF1f{˲rapԱ,b㇟ZklTLe4k(s Sij҅3Pդ8jbKjr:(\3S8A(<(Ι7"cYcYN )MJȨcYoz/`5>rbY9b1e[]1T嶢T-j\!bD.k"CAXgVkk/;3a҉enC(g{1XVM]B,ꠧ8@ @MJ A m!WoN5Be"#va,WG   d a#cY~;|g-|06[ћ6EKHRݽX"a᝵(;!h%d0u>IJ.MlclXPDdžEb-aC Po,<|!%J&Zd*HUpΙRYxw*ejNIS.ftGWbNy嬼@wqSƋl*+rժq]4&:zPiqC) QhhԤP8R+th~*[}L7u8Bڵk2J[ OOM Yiw!+w/M~#xzyHyd,o^~(~#%/BC_7{ĵB7_@^^` ud'=P်uA?ƭcol.ml87ē51Խt=o =_ t;~3'OիUmv6xpa}{C}c}kƎ [Kl'3mjFa#b,͕ݥNzi%\͡ w۹qٽ͉^{@?߸:O3uRC5\> ;9FΜnRE'û;6X%k w?y'C+ uJ w w7^9<dݯM0" 2;wi7c雑KOjKS0dBd0e|5Ex=dѦ6kZ4$&k_ ^0Gx < n( )":k2ڃ~ F]`Vo9b>u ?G+pk[J@ vY32C F;!UzנyKW'S MCOz'O PyN֩C':sՂ5V"ߝV*888HĝG*o55DDt cNMN[ X &&p~eoiwKx=&dף[P_ʺ:(^3^M>@&FF.@'iO<-< 8dty5x'yŮ8Π˵k] kfQ '&2b&NgL^k'f L$cHFLDċUhf՗ KQ:\]]m@c㦿7"@5s5Gj6\[ǂ@3F1qz cjށ#2F.=Yy[Ml<o 翕!@ kOw\\9٘:̌qtoRvł>})~zz}`{Ĉ<'\f81d+[#Zf& @,F( '<鯈6 銄 #a}k"/PpdeX3kX][p:BX1p,\ c^ c ^hb/GLnm'?dCО= gydg}@w͐\X~y(<4 pĈ *$~}ຘ;~L+V_)HX)} FR2~-b:f.^T'Lo.Ss +8сb}[!l29ֶ2R28e@N'yD 0&&̛1L d{c uMh̗'ycQH$*Ĥ`2 P6 D-3SSL$Dq'pđNc2z#R5ݑE>;!be8~,[ `Bd@oY}%2zǍ3'>B<͛NGƤ@ { ~kAoQW窾g-deф@6x[AG*;cdpx߱bTđSvf]`:$_,b_lZHI'a%vt:H$XJ]ԲX#&xk!Ȱ5jˎWel.i 2OX;~TW)\CW/CSW6^, @zn eKn2QO >J+9vd1Z ޮK.C?6vr50āls^?Sg kR,\dEf|1x́3N5:u-;)ޤrȺ%"#xx ,T/XaR+E0!p~xki\ ^4-9h!gPĜ}j!%T1SB% J(ufqyƾH7-XZ ^>?6%.(] <(.>n!UO1(FH4QY\8ZQAeYGs7 dBäK/C=`yS_&S ? G@L-&b̐3j+s|I6W+Q$O(& dE ?%rZKdO)Gο1._TLiq]v4Yf:KM½hlѹdqkef-\|I"F-@Ed*7kfHLixm:@ =<.v$E<=9OHo*8L e | xxB; =<<쌌V؈wux7@u勹݈yJ@V59ȹϙB$i!:24LJZdggˇ"NQ4W&+$)%ٌwiv.ခ w"l4{?hlKXܰq`7>ʚ7pqiDE:D8;: !7(##;,g]bua/z @+ `cQ6>>h<>'11U[Z"B,/ 8aa0ZyFhl02FIFj h{C,Flschizbk-K3(kldVYt~7ٽ%GS>_+ $E`f8\ݕ.u JB+-*fR V]e*xeѩ ؕa"f~7E4ʺbnQQ(W[i<;>%Gw²< ,p.T*(fQzIyIز0ʗֱ"} jdMlZ`@*W ',H㖒▼njivA25$B=8x@(еUR= XW@aeрBzŲ8oLVB{I_HQ@U mnY yjBWo$cRIaxEV ) @x˽>`!+j# PÈ>Qq܉W?X¼*H"$ )UG5@1s4vK2ĊN3= sF~>!8!:A-!\PH\Aeu .i*Jƌ@'~B.}Yy] D%S/;JZ_+fHd2ZDīd(6x2_/?Xs}roĒ 0ȯ lC*_? h.Y,@.(9m2| kY_A򲢾zxƍ7K}HԳoF2zSu|1ҥXHk;_#p \ZF1 `aJDFÅQ"Vj^BFYVU@Vi!61:F u]9Y/Y:S9sއ`d$S&U.1sM <&U$d1F7yѻSwy^ѥ[~RVm[0=~v1ҴFQcAȅǙItf%v%$zg=B)n|Yˀfe&Z)bQ~B]k:z@|ׇ|!e r FMf!T$ ((4__,&@\9oo\t4 Nžϥ={|8|a S#{I:@Ba@NPC .NA߉s~dM!UH>-ZQVX8VOy7#<_"ylKg˸;FO* $T+h:5&7hCL rΜǰ&փ퍎|!X~G%ZȊ:]V ͝tCC3z-Nzu{rH7)bY>o\.8,e sʦ\ǂǹ|ف\Pk:w Lj/b!VWLTq(,:eW=YlTVQ\4V܌|3Yy'NT!<ֽGeyo:b dȗ AO`;!C5򞾖Aio [} l p ^vBauϨ2nC E&}\sR@2lm ÂN=va`=WY`SΩW=x~J ZX&\?\BM&yh aq9)aY^aKo`KOϺy:r< *1fj ԍnLslX_)V6 |e%@cQo&NジsQ۾eyEh 0%F}xI?Pn>aVU.\zdC Dn\Au`\ӣT U1:V1eb@-*,x2G!x$2&yPhL^/!18B ^"+W}}y–mv"`,B\I|G +?)ɺREPp[ w4t݀\vA"P[Ii"N5$[f {%+.k١˩YaQVq*\;t1Ɠ0ةQyw3=%Jjs| .hrKrcX6 IgԍL%*]f`܊FV >3Z׹!_ oЩVW~w3!-k.׉v>UsQUU\M&St_.Ȇo/XVlIE49繧R8F5sL{ ϫfSj*zeB oۻv}C HBbh~-@eCT&4èqD2 Lx&kyS*Lc^0u2!,<#e* S߸`!OF׊EZJKKb&ϮD|QX4-_F6_[,jz2*Hn?.Q, ssYATtbyqG+:'EnVQ7Y\ˑ{UQEQU_:EX{#l@>5~J5ɘ{!Iylz:'! y%iSS$\~JDR,N.)63 Y.|(fbUǃǏrƥ'knß_J͊x8 p|ݜbiە`3B`k-aӋ6MPJJĵ2d,޵ H,3a$|P+͕$dKSwENd|#/B- tr(zx_8= /tNIѷUuϭo/ Z?8at]T΄}OD6 Hu:ոĘWGJ%|_IM&XcJGS&I%X"xIS>T V/d v~8 N-$/ڝn|.dV]Gw ~ˑ C躪'NY[p7KafjۅdaGv ZfNsCz>!ЩG(X@=7V,U(t{lTT¾y>e%7Ĵ1ѸXe,MqU&!.39IH-&cKS}kFsU۩Lq Lra9?ˉ#ocP:P!QFKdֻʩߠrA xs9̧&A] %Q6Zfr}Lt"kmohAI'"`5~d $dA7z@6}ؾwB};+E-BE/i}Q! }!FCqA(`2/#r3Cj-iE]c{_2yT9 tSI̚k @=|  w=PVwnsfj5 ?VCF]C}kYs nKjAoO#9ޠ{ o&[6ʜt"KXܛˍ,߹Bf࿿mU+mq }!AW \_%-6^c.SʽK$y"Y.,!y C"?+O~hsn |&_D!Pss JFIuujJ"I$ [$& 0E0RY  5I0D tژR6b/"8Lit~/$@^@lMrIfz~cP)66y">"44pvgE5 27c€Q 1\3p >(ߨ0X&Ha3j94,z@j Kn-Π r6}3B%6d SqXam?!)k$>p{V3(^}J}yT-9fV=뇠XYoCԆHg)~8rtASz"CCEX:P A@PIE' ߆ : )soy 2C-_}͹B.M뉐}4}7}k?xA5zaBR LhՙL3*ʩ~u6bCqj<3QQ)yjODy\)Cϥ)5]w%=+E {]lj2=-+XMG.\DgÓZ_?<~%u|!2=*oߎ<~kSxU6˟/ۻp4> lX&_'o׍?$NU.w=ƖOߗַtMKQiif:\MM rVؕh͙o/+N &ophf"Ӕm 9~饉MHMjJ%$dg?}?:ǍԨxlj $*(HAU_Bv"yP@J{M%_W@B+"ן<uF~ʨ}۪Pj:{ ZCXCĔ;WFΟz47R~S}ܣr_vE @ v%l@4Hّ"&@ SgCգG's(@ (2[移 ǟ93x@BZr>B6oAEM _xxljʗfk-(‘,# `͵%}6")=!IPꁴ/{;4oOŭR|#XkoI$ o|,t5*PJ|d`8wP *\ tfzVRIa;1}@7G#.i#U/֯ҹ΋Ԩˋ~NFաK['N? 9)خfJ9OH᫁SUE(l*Q'VpwU=K^A   N#!3?MX0 S@I=ʎꖕ{{AfrhV7 UbϷj@T9 r^7ubAe lW@&kE@2+ oW>z{sdGґ4utu:/f!~p?iȬEz9-K ^wkiA+] ( rEA0S+rp@C8 G99}}B: jXHOxaovXb">Od 9AEg4@|Z7-FsZ}W?~w)!IS{y>;P҉=?DrpC )'dy@?> ՕLZX3S uj`C]O͈ Vh+V8y,|>oÄ-\{Xinid5OWt˜B;3LO5]۳B&-^+wnCMϋq,h 6>}]Fgg!D4jjݜbPkW:j>g׎z ޖp9ƦQD)aJOO+NJې! !ڂcd_E2V$kC@.b6Tk.^$?!\>3L}|&#Fȇ(?kVObb{ఙ=fP뽣~Ɩ#A5t͠U\'1h[Zׯų֞qW2!$ϫ; hJ\72ܡL’< \$glf`>a5&6Om|_` *^od@ b8X)'L]Ⓑo\F@!D+QoD71 ڳ'H2  Lj2Š% u. Ox2+.]KMuO.ZsL20ЃOCs- $D=4*f9\xi0@m7qw" >ޭ[yC_")0۪*G p_[ʞJپ4'O,' mK8<ٵaAH Z)g7ra6억ERw|"mѹgDޓ'O"9{r!$jAEڶb-_Uw9qL98n;4_Exx h9kͅ?0AEz2Y/r1*\g䍓͎@ ~O,p/\W^lt"@JDD㼌up5@n/篽^F5$ Aֲ:B ^}Xןi0*%셰AE]%J>y ;c”Ѧ쬕mh<\ݥ@ᑰ@hEHI䉼*?4MYbl聋CpxuV7؍Z3}Bdq:ط/pUFH RL@_{ wgۗA{8 }9{NH }$X9 mQjz(SXodeptԨ5=guYMCi vRd ,]@2@k[úNB SXE* ywᅉtc?VHZq;XvۤRm6FV=8kUCY^7mM oq)r0@3H;';7b^ZFcB @(ڮ0SFvUY}v5?0bv(2׬Ϫ5^`3CIaTUhN$ύsp\\t@= 0=^ 4+&km&wTwPi/AmF Cau㤈"2V2зRzL 0/J>R*"|Q*a{N" d/a۬N] ?eï'p*3EۄQ9Z6"\t:+>caaV~]ѮLYԼMm>55hK \la^တFX &Ϳ /ʀP7Ak=C Ʌ1;Ж=Ĉ6ۚ1_$qQԐxEx$ (%*yH!{ --/T0m>Bo0*w|z3#}~{h {1)n @7Җ=ˋK]_=p:d57xd Qyy3pyl/֨׻t̨^sZoq4j)lFz>s`1@k1 „̂"^e7Q *.φLe_itV3R_ȫlB[1@uQS#š lCLxT@}*XPN9E[V<~ߞCI˯B@j3|6iqf೏2WU />ytm \wW A"Y~;}sGB"W(ut2_c^ S`^>QD'Gרgs% II$^/))a޲>7z}qw8hȑOۗq3 t%/U| vYQOk0+XDogF`WCt G 쏲^+u#w!HP-oأr y5h͕-1! ,j= Qi+:#50z D h fS:><)``>Fh"nYwra 1{ik=S/.-^UXdֱj8cAZR|Z,:XY#4R/8kCPW 'P&0 'Fq?'aA  17yˈ dzMpgMADcxf7s|˜Y5Eouյ6N)ޅL\vl۶o#*\FN4V͆Sq-al?ʯLLZnk->ת1ŊA3FBduLnX=~@ص{?J70C@W뷥 1S`.-!AvyK!;.7m/MA*"+9<'Kb ^!k\ P^בQo2w,ԡ]-(tWN/@2#׻:\1^/9u;)~l@j󡫇sQ񠞙F/\C3qaz/$]L*-L9N +GWwH{_DCD??|;=0Ԑ`;@6ZzJ٧{,J7*VAfR3494+po`aWI_%(Rv+@X=z|u: Nk>}5ia-[>[iCnYtꔥ7j3 ZV78z|[mζY}N2ôy8sT  Kg:1 */na1"iduh乑+?|W@*ЖsÏk&ΐ!?Ygpl>f MV+L!^);bH:՘lz37:s oX;KZ}Sr^jVHhT~wzb{`|ipS$teQ٘ iJ߲H"d;ﳺL6k~֦m99_ΌoS+FeBp 4H< mCgQ=ZblP8IT+M6u¬UA%ϙt6ܨoRc-s rط ig/ $yu0;TP*M`2,})K!t5҅f!û.Z0|JF,6+t>;,BC['fEf alZeij:>t|--#+Ц?j e`{CyՑRô-1.9~G6\p1 > }}QgҚj1e0:-}vdWtgz}Qh-ZѨaAD؜Bl~%o4N71|.uu@v!) Ԑ5f\F,֙yr&$rFQ:JFop+d40),uFV9HQEsipLBa"zF^ٲyxFii˃^xV%@^pi h_zi;C],1"xdGAo A: $Zr2 9O.5e}p=%HL=k7#H}ƬaG-@k_3RD ]Էdنd@F_Gf6Ԏ2e( %QL/}zF _C2".:߳\.԰g=̘6ߣzc%qV,^YboY5l姆mCJYA}%VB9uwYvlB\ǑTS)n(4Sx2(2.,+tV9ò𠃋MqIǎUIٽ5D aQCalMCt$|{EU>,˯Zs@,wi+oVg!G,fь{J$e={Jy{4޸!4xeg$ɒ3?KeݝKH{O=qCe%ۻ1X#GemZ0gVFX@K1"&tȶelY0xt.I_9^U(.BS`Q则},YO&9N؜ccQx uqL0ms|.3OH[7ڲʊFe)v -H-A?N<6Њ߲%'0yB4Ϙʠ%Ư|EdFo1I!nY[ҒDJY(U΅CaUɈHNMc^%~ RFF*%*ImED`RՏc7{ri<0=4x$&Q_v#[l9leL@?#.*T$-JDHc 7#$dNU"(de,]a4aٜebw{m"24O H ZQ Ir$M}u97BBa{C%yRƣT7qovqLfY\fBӄ[@2 hWTL=n`Kwy9-#mmn [WtMa@ڧ.}.QC %bNm/ޔD"%^\y%^:xXmbD5R-)IY\Ɲ)̬ e^Ъ]J(Vnp宂FDj/mߦm[^<3t,c#s,ӖwZov \wZ;bϫO$mӡs-ēJmmgZwb-RRt~!5 *Asu]t Ƀ6L.P]9%<%[S$se(^5ݷ\K LGZffF5 |O{CIG6!Կ #b Y(1իiUj $EꩀnG c)(*EOPP ZGxP!BĐ岏~Rƕ@j ӣ '&" e[K0 YK/;ưe,epDlV=+)(2*@_ r*'. bx)o\y{' Y\hpq*0 %ԣi[%$C9.JLrϤL!iLxA71t"4Ә^ 85O{fqTg`[(qq\QW{\I=l ~Rg ƴhΏc!P@`{dy&WStE j툪gɁԼ[֮բj\豮XmڹZ$wd]4[-&mnuqjkYjCxj4\ $"U#b,76?<bC}@@rcI1xb@v)h8 wwW]&`s.֮ 3d"/MK&`.6/ Eh.1ZnvZ&pZ0QvK DH]עz!㲣_*<A#G^;},TO]NT> suBO)An2:E!Ue2f Wlvk’?0˝fw@_ꒀf p{IlG?< Dpk" d&me==}aq>H0MUUe +Ns8zJzzqa*!FY!]j\ @5K`[҉i#"P"Ӆq(ywaFy.MN>-MN΂.Ĩ$)5uh\T@FX^1d29aJjL^S׸A 9D.7y;8>zѣ'@9wTE([T.S񞞘ueb.zǬBג},+0\vYW7A !r*d@ҏDQ'\ # q"VDAEDJ6gO YOmO?y)Qُ {E/ǭmqujV L"uu"4mv ,E%ƚC @M=<7#BD='ԝK`.̐&.tI2݉z OϞ<}wO7?'$7_o's?j̄2em| b'=XXvVM~ + $Z]rk)€!?yƜr%%t%'VrI Ѹ5}w?#|`w?|}=z* 5EͼbfxQPO@SUf1txu ybBǪjђٶwj 1] βcuȑ]0m:XTsLY H`HRv"h bA[:yoC&^u;;ڳ";1D c&/H1v34hjd2xuN05VzR lRm֩obw= aO] ѣ(I*u`-AP6 FghxAG 8U(ۛMj&ufR+F2ٿߧVj^) 4nB)}hV~U|6DNlO@FLё͠F,r^g*ɆnflԠ`jwGjyd.dbu\֝ceWO ;#>˿G -:߯*)1ʱډvmmg툦#b؍G@K%j:1i vXgD9A!=S:<[ۢ|):Rh-tp;qg[}Y 6~W~ao~] udJzg~g_4TR**݆+xzwciMu UJjn:ԝMݍ¼ ƱRJp.,BUzE"tt٭|yVhv睄R=1bƧA.rN,U4 ߃_b/,`Chb,h~VŅջ-&Xmb鞩\`n.s7.#J5bH٬<{w8u& D7Y 8!5>k%}^ƣ[  H}ᡱnv!&5zO?Q2!++UxPDpM]oy`גAAUPVEeP:#"HE/.u =/>Hv@$H=l?]ho4 u+.8bldh+h6Q&C`USĕdiWM^6"I >EⅩ6zgm&PmmHmt7=?>}wz7p0sDZ&9]& "=֙-Tkk;#5Ynn&Ek06j&Lƺ;edѴ0ேh5ڬ{d[65|p{+03TZe2/!fs9$~+ ߀0dީ@O!Zj:QMﻶR_+;ю4ѴN@s\B g2j4R+Pi[ cLL{1sl5)o5v2mk3Ѵh7tSY}VYFZ6;L:a틣 hH큐N&^?.yIŸPBo@{Pk @Roiu?=Ό}BswfuWh葦+3#@{r<퉕-veJLX4w`N,8f8L6:Xv Us4+ApTt\jV U||RQRJ{睈ND)-bHjx,"ݠDqjʡD큀L)wU*2jrsh N%"4N&SAC-ig!=Ql(b zWUs:l]6q3l+mloWLWCBmJFobx@ʑ摑HP^Mz jV2ٷC}H ɅϨ( *5 Y B;GyQLo s\jߑZ <\OiXH:nU*9:-6 iTO~{w,/.dI(8L>Gf.) :֤O8瓓 |$ܵbk:9i#Gx0*;[ u ɫO-?[ȱ5m\ |ںu~$ΞcBzU d]Ow^}?B%/r~{!HOii\f1ک0`$\‚-X 9d ^#cc/\W W,1| Kg0> dl.CW ^aI,=́#eY%z~2?^SЗ2rv_s;` "]Ra|HJIezAAEgqG!㗳ft\jVB$ XyE'!"HIoW^j{҇aL.&#Dr&«sR:Eg)20kaY냵xJ|EO )G/YЀRF4l6Gc>2+O,I % Xd|NS3`1Xjo[VDIي U:9PYcaz2WY2]@!$5ڒ#SoUpoWCJ@>*| PI$4Od(|022GF{T79K+gOG)INC暁~*%=Tz:T"rBc:*LKlLх\.pu_zG;BYJcQ$Yy|nBn FG E ?OqNK%rϱ3lxgh0' #D9n(\EwԵ[ͽZdf"e&V?4I6M'nO ߮Q[R'Zo6ߺ:q5iZ krxoR?He7x.4._ "+XUvy= }S_dLcէc >&r/J%s9rx@0CE/#OUrGEV>D Q=Oƣdr'epl=^փ2=U/ nj,T0Pkj%5 vv X@GgQ gaS!G"eʚ@($?]>]F6rIP0جB*c YlhK2,5$:=faIzG$,zXJggY"H",tX*\ ۾}o)NQ"J|^|A@]!?~)aU[ls#H_JZD4TF}kPBcIjKuM+'` s+"1ozLe?h:yVh%),NAo0M%*G/)`,ENI4L5KUN$^Ņ oa;ёCI3X=wp7\'*0im|:,eS {@`H\鐀-K (e%7K { A oPkD%gIŜ̴:_p؜>}RŁ1[ ٘MMx66.-3D){̐0TzB! ԢHixp.cHI#pw(WOn9ikC@w#YX2< 6hrā(1-`aB\n6:+C@$zt-x3.dD- =&SxFGI#*r0k:=9 ~L WO,u̮a 8V/J8 `&}< 9gp0t%3)嫇ʼa@]89,>/]iiT~%]+;N!@V!웋^I7-zutrVn!nsx@n2e*ij?Ko dАHQu_103T~ +th[wT =;lhQTNi#Θli?04M $l WMdJH PTaiFmYX`|s|Sʁ+ɼSWF{d Z4Jft8 CG"<ۻ+FF:kk=:b䟧q_T&_$V!K 2t : OqLSV<`o.8\^'f{gēy9G{90 *cSЦ(ηouF,J>yiLIME@_֚rI =utVy' C=!sHǙGA9{Cek ! EZװR]0o3jȡ=ȡrE#3C{r_Q"ټbt¼^DÇ!E'hRIIFT^q0//0擄FIqTsy'e:.WvǕd\QTT^ԛܯ6g"}cog݃Bw).J1bX7dqcof%!4w~ Sܾj$`m[[g+elI>馽U9F{:^h"[% ie귦}^Ĩج8LK"᛬ѱVl0*5qF䵔[7oqh^D\Dt}=K#kַM3QMmҡJ/$x^,\x-ȵi]ӽ_偏l>kz?!*+wZ-^V9+--FG @ڏ]OiQ[/Hޅ 73Ӻ Yӽcc7&xyQ. C1F]8=;=::~{fm?8BmޚoyӢ\!-`0miQrfTB0k:S;/P.gRt.#wha^r^΅Ƶ޼QBspsn@T6$A8e4yoD;TM/x}Hz| f@REDdHo /2+!3/!?P 67uM^ o&|~} ߥGH{UZ( hJ҃8@֒؉A$Nߐ*_c|NR4@^͡h>^)ZBp6r)'z$Ft8.WQk X;^jkR->&Fۛm9.c k:x0+\5 *AlƂ Ɨfhɺhԏj5r1+bj| ,RV#dZ~loJuσ TJҋNM5bQt :X\{Yt 7 ;#dt2B^ ? 3^ m.zYl&vSsJpubfҽAˢ^'/k4Gz}eĹG& xYg:e]ֆD/, ;U)۱A [lH@z^Vâ(3 M2Lu,g6C/4);x `.e; W"I8S?"B o߽{t|wދ"2]^V'W2pA@`!50Xyڙn;ϗqS)2 .MD@ɪC:톴fxNqufw`yOc̽ww^bH_BXa-ȒbSXduǃҁh<lަ䓗5O8H}F˂^V<Ɖ<^Bu>anQ i^WuyN} )yYS6ٴ$7?D}_ L8@ O?ɝrrE~2]GA?$N;`-@g>~Ͻ! zY$]opC'stRNSjw~IDATxyTSY;!#`aA@l bP@IJ!t!bB1(Tf,TTZNU]?~k]oϐsBZm=N~wb q9R!Lދ9w~~СXxЏ#GÇ lkpa!4l 7Oq㤈))Q;Ň__9#0B&M#@$Pb.) )rFteAo.].43G,Μ#o$$._^N*8p(̙y#߷bsG3N벗ON4s^zxvz4|k̙.]W@♻:]8洪kѫJW2/^<|q@ki"@ʙ+|+ J'gN￿'q6軎 x5*RP5vt*Bz7.݂骁tfWnJuװ<p; 1Bqďˮ!CRV 6"RÍRfhlX/ZBtn2R2î(jv3?Mx,]?}u:ʕX۬8a^[@\U԰)0"ArЏ !u^>=56WUw sH  Tld> "sǁ:k!\W5>22\¡sPkۈ[MRYo_.$rگݥQTzЏc 6'~+M&MX[q ETdn,J|jWncb[yc"!!+ V;B?DBc(H^Btk>+WPZCavW?I\9W*au u/_QЃ36UY+6Onޟ/sXgyV(u3\lm Q% noDMk1S "kW+T5"6L0ViyVcϟzfӔ >?[[bSJeoWؘ؎َl=,aiQ cA3@L吝0]^ xK|'4:ZbhX=*nt2s4abHy ; SѠjӛ$~H7k*5DH~p{o;?:zԬ$@&!R{LLFXurF^w[{! T?9ġ&uxS <5yHȈlv/2XW z5@uR_X{_m; Tʫfjr`}ſ P^AႼ_ .S718Bwfs7J lN}L*7WyMy1|ٜy7_Q.t/ᘧ}ic!a!Vq%*1ײ 6QjOdƈ]WއzP>I(?@S.DpA2Ĭz9B lfyl"Wl&CD&޺1"u|TWH;t0?ӞA;qׄԊTLԇ|z:X7$ "`|>Tr:`݌s'v})/} n׵,jO$OnoookKn2vPb8"悴_]4?tk|v4kvyVVngU_ͺu|{V${:\J TX 09y+֖OۈT[8вVx6oj0Ԡ:`B`dB$yHZd}DuڥsgGGWzX]??[m>Z]ToU4>jz雮{2Hƴ 'o0ȌBqhH/kJ53ZMA4Pks`@m(ɰ2BOvuu3-8vm8DVBbEg E*5?P7a;&*<1t Ab+P*1@ևO%f;9S QggT!C/hdLԏhhC @yP E~gC$$A|;TVjOXc/Q>eِc7']F'=bRAlPO })(QFvQ @&G `aqvW&b 2%F`7 (LĒQ[OLVLqcMߍ4>452 rG''>-H{^75vq"3Sǂ BLsd="礴Ou#ɓ&ZjtfA&[f&!X;0`:D(TK8JTe Af}x~XIi`X|:x DݼFElndQƚCBe~AO8Bbn3A>`R|QZ^m0ηĊ 4 7A8hfQ8f"HheH2/B7VqMdžG!Bkc2xCNxS\0Bre543AҪdž&z&!䵁 @A`0m$},Huu$`\ՅO6̇kd~fCh#=¤XJփ&\-=zJuiKD=nACAE8 vUBBuX03_Du, ba-C< B{G+߅iypƒ;,+ " BrR5.6 ]Xt>ó h;(&֌O?=7cV r|Td|6ف [_Fa_}05Ba4]Q1 Sl@/C(A@y*v6x0ifzxƄ&LqSʕ f##*(+|ĬxY#&# E[rrۧV <_"ez0 &Փk-9f$m]rΌɂ]cRKpeT__*_z (l̤:;h2ELSħ| Ϟ=bG:{,ӊ,ImIgP.ƹ$&/ dCØL7Io7G. $n ԝ;ΖAM#,t̒ BL&G{Lfdl4#Ib3hd~|hY @ AM !Rb e[K& e^rQHzJĒօSg{A11Hfp4ClA| GdK(!b?["FKr"dޮ~ҐLNOM&Ȩ!92Kh* "fI H bj-瑗g1X4L"=$a7y}K wi(5T*-"n |Im\h\/޸ $A,j +OPY{=՞jkm^oTciPiYl+W%A(|?6CTw?!6C,8ryl ۛϦDSa%!wMA6W` d- B*6bTa iH dAg"oDsE۶@z;̚V X\ 0EuXAօ5M!p"k "^ںN#cr**(W]bg&rӧOG{CdAf}lĨL1) >t tt0 гCpNL}kt§Q~ 4W<`IP8B[T-{\0av.atvwݛbç/?SuçZ!sK $A8nF8"ٲD6ܵq |AQs5 Fn6.ՂtZqANsH|ƒUς"a~]g,!wVB!×y]Q0cK<}={!6GHBpy](0Ml:4W**6c68'm"3ABATn!EG':&;oMFSlR/:qp~\"Z&vQS!Hѩ?KVY)k-`j~OYvE W@!F^p>N>(=Sjp,>) ?DI{Z B߷]tEA8ʭ`&XhI;' EW aNAz/يt*q#$K-QBLT:E 'yƐ`-[r@:{]9'> b燙0 E"An$tP}$#Y-;< 9΁ n6D݆ojH%;" H,dkD}t1ֳN?X08yeh2N'3N S: 'T*Y0*blJsB\(Nyl=%~'QUDBgsm'o {ׯͨ9#ysmNdܼu) g'#m[vD5.GDĞ^QQH:9فm^Q"683i7!堜k8ّ3(Q4ZQm^117lGGC/f?z{nu!Q))525)+hK!J ͙BJ^U. ʵjCcKLݭjū\SݻRpGM1QA^TP4>yG{'o |q5aqEKsærqbIQ6zj"KCȳE,-kh*˛hZK6bdAEeFdO^{1tQ?جU5,A@c4d/MoEU%Z"+V{CAM}*Lv(kFUߟxp N>Cwr / _}aEPYp/)023c ·FGw8A;"2xUY>F't9obomJtAO^͝ǦG!Hd+AKGUlQ|bV]UgycpROd } v`:iz 1Z]I9Mr`'o$ \@q2p N0'{T!Ţ-Khd.5țJ7dtgIq|dKKYx[z\b}V.욗~|S;+a~2֋ "m Td WI(_q%fF%yS:a?E܀ ܠǚd~g9"Iu-'qzt:=vd:DLYEPݛcTaPNf%0iB3 ² zE u O>^?TJ2VvDٳOϞ={5o4_#'D ?1ns_uߩW5˲ ZZ۝Wn`Vҝj0f$ը9Ou)P'sFA6*׶ƾ8[ۯ=x 1q%u NȞlsQR~8KW&;nQ= :9aNg;Ut'G_b<M_fdHd.q|^{J g@7X&'p~Jl Ώ1+{W\n*2 bۻKVNc>}zd{Ev$Eٚk;9vɈ- XDbdhb gIbiM,u#[%~Rx»1#T (/irm%D%][ɩS9@^yD$.zz2lRlڸ|nFp@Xb`;6+JQ%01pAcf42b  b  $N2ɗԭ;3L|Vm}NE@(([>jCtt?9O}A⠣8<2_*~Y (/whlP~\I^nk3J,!ΚW+P~/k~E*䑡4aK;+:!A񧓝sO A/ű1 qX0(N+NAd-'' 5ȃ==gǺZwz>݇@Գ/! d4 taf(zA<!i)@lx$.ۮ>*;](>Q/=p4691;/2R}89!%vX" Ժ$кmŽݝ:C31ґk/UVu<$IB#p(dx⃴jr<SA M^m7~6r|T4(OpVʆr7" 3F,N /gk{L=̇+C=SIh)V2WJxsQEM_dO Gx=x; v)Cq5 QccvgyZʴf)AlsRЊAfTYh:crKGE}kFSL.YnloZ:W\<~(;9q3\"|ggXHK&H&874Xrhe9C^7{ lUXwvI!ݎ ۢ\>f`|EDO>aOU39͠LQQ'z= F @>ktuQdθ >xd “]x-(jOœy`nbtP s䡱⵷C İ\o^r!#DόjPYQ-$U#?>ZZ┥8t,V yFvq<$=˺ѻ: H/vUsNⲦ\5n]HX @Q:̘u՛>$,qqPHY~NB`3ܛvC!LЌ;D7W%D|:9ܐ0ib\J}iS+OKއ zG FEZ*He֖(ցg ȝSﱁ%̿V%3@p8V-b1Bn Ȇ\_Rip#;|۩{  $,\_Rҙ޻G?d @ցQ)wi<4{*؋LVh1EWo@n_}S1B^ yujZZs5 wtbAݮAtBVT.o?s 9 7Sf Rf7B-嚗ϞZ( 4>4Xn󇨑aj|]ZaR9:lR:&D#7<@{ȇb2>V21\o6 K e*gyLߢXG&V`ԚU2b^ kS,O"3:ӌaJ kpw; N^ ၽ~ZV.9V' y|vUN޾uP26?j2 M@&ŵ)[C9䀀|wQ}wllK-D 2\ȩGX@_}8|),B<_e?vUg/9t-̫GfTc~a@!ffBCY}wNJI6 QS I|O c \'1Đuy [?IUu -o~00NY>ܩ:Ͽo~% $Xh`:t D3)\n LR)zEтΧz()DcU>ރ5/;x^/}xod/-©_<Ir0̘K P{ L!\$Rz} XY̝q;ގ)D/cu ka.$])O@0~RR::(#ӿxT3 w.!Caew`ύo HbCI@xp.Zȅ9x{޹W ]s/l=HTRYGAQQ>eP/@+"g-[VQH(I8qfarp1q޻~އB 33czW!rmJAH=G?ڨ [Y874tfh/zs4y~x))#=.*'((8It0 rݼ:[k[d}MښX!cMd,֟>[419D@ܹ;D0!+y4 &c u1; l))]4W \Z3?=k\[Vk9colo}Z3_Tֺ>i r DiK۬w~MbM{R%*R+)2_?u ,]D@n314<+|0bsQ푲HQ@az륲'hjIXmimjL=QVK=z@Ţe8C +v6E% Y.e/@n\} a~ i>z5~>'ޥ'#$>Aۃy&^әsgZbJk:ff]$A >Ia`O@P 6责)I.ؒAr6)[DH[i>?>" 9t2*߮6CʅP:ITZ4mMY'U&`o,%8C"NxBټDPdM`U`_npH.<IT`[=t,8(ؙJO/&#'oA-k%@.?vӮlzl_drۮ-y#ay Y|[D11@0 O" | .Yt/@N܂ŋ9y{3 mm@RN_t& $F.#(nT991¤ØzݮPZgg1W-e%Q[8 G@< tgN=I!wR8-r3+ʝ'bQoJDrFo_O0Nڴtz-#1/y w.kq~wt;bb6XJ`G|#2|l!O[u\q㫏yT[ /&;W}.ۚQv6B=v|l ?YYۿdZx`4dx`4^Dsg/ ȝoy-S Cb;]"#%scGi2H@G}+2I8a@y_w͖@b߅i׼rF@(l'/a1ƌ cCgkP~Sɏ: hQd#h.og,G )9dnb\Y1__8^.ޣbL*Lީ$9Iy/ek,2Pc/4,ծuT]/[.tm504͗㟿b7 \UԠ^o rdKS8ۺi$;*pL'%h!aOeGtrMbl/k_wnqXufG`{; QsO&8ZCK?8gH!)ryӅ9༗|<;m29&xR֘ZW!Yt/!']bzs |[o[ [8ښ3ښK킮R4kyml;39p`)>yQ:!wDt͒h[ܡCp#}_^>u dFR+NȎ:Y+_J(ᐳ| zN#o2si3V&<4hGI:p,bQW0$D n@sQl8XRqֳQIQŨ}O_lڡ3zf ny ~wC$NԾT.;o z_xRx gg- F&1ꫯ~=v[ <;'%!#S#s?E{E`oX~e=#[ 0lQe n]wh__X'rPT-}R NK~~b{[;ө_OTUBz)$W ),@/.@W_w{CKjq~ eEE˚j-{_h9w<ulj;kFde-k5OwOWpxl!I /۔ v+W<ȵnȦ('=PwOYW/c,@ۮѬ'}2"7~vl^‘N|Y8o{<$Z̴86#I _^YH9aDawYpm?ٟ9.z189(~,auGRdR<{}'BIG9C6p.b@/탅s)?@ NBF (JΗ;ցƫNmKRX/ I >plc?au5s GF3Cd`L@~.6WN,((zق옂 p^sFgrK-ńF98l/{ R> VF{h!YJ. t$MrgNJgFq($I~fH8;'Ž" (ϟ+x4bG@4&\i84YRszW txE}55&*9Z8{4?rc~kOX Elvy4rhQ񡑨 #pw@xߏ4 %xwF`\3@vx<ב^VpCV1a$a0"<8-1:!%Oduzo@j.{,UmUDc[]jcGSG#|?o(vfYvF:W3G O,'.m b ڃ&D$/F&RB%< Ez%m(JNNp! <P/=uRKF#ē[Q + cbamHHl v $×&,uh?JHP)zB+(U$|"*SIBbAn"꺣W:њ^\HO㲼r Ta܋XlQrg8Ni ύ&}:sNp` WK^=at Py_ۊ'mPTáécͿ 13kgn%{d/@JR#i daٕB‰R\>?sca@ v rn@@ܐ~iH47D349*HC]?%ᔨHs) B-) ڋ0;\v AB)+k7\~ʞ̀ DhWO 5G}@&͆9_=: izM39SYWihec^+_4XU恉']cY_QXK8!V]<9B[ց()8އ%-թaaCWrx 0,lIRQ"(w޸OD#\،|tnbunmX\TC!b1C&lp&( +HqP~dJl:,@y|!t-$:IIrv9('^B<ή^^AYV8eܰy~:}QZZ=D Q }Rڥױ~>[.IڥX= K 5b/]:uMMpT*^x ϕ[gG9!*)rq:^:<FIyS IyγղZN2 |„k0cMAͦ4F=EňZD8!VCmYK CPJ.38ۂR k#g,hҒ#g󎟆qpyt@78mo$?pr]/-UeUKu6㓦j:Wmn*ZtK2JmqIW[QyjO(]wr)X"dVOlWkWC^Z:} [ (PN-.#(qP,r.GC Q]ǍuƚHThDY*)9m:a|uiKK(K -Um:yr=yR!2[ׯ6K8\ ¡}<ҭևprtk4Yԫ5!V*4UUt^RK}K } B!P)6H**\7%P)qTb>D #ZHݕ2oRtLքciO;OƞNT^niꨮ57WF*N668H'm}pT*zkm6 fLrK1YWV &@Yo5En47?f ]æzihmhtxd1|l!GqB-:/\=MB?HfARc}I XEQ`k%&*{R>QRƣGNJȞ4>'D=B%ppi*W-5B r:zesuG 2HTYc_[0L,#rfԜ)sakpd̰812VFgƺ &Fj)]p(o'@64CӘ@f)9n0)W>$U W}B&Ea "ZRC*G[ b3bj  Hf%7%o 8}ȑMXGK= H3~ H2\(MJd$ `Cgܢ{">ci3$SO FY|]tԢ;&%Kꋠ;][1H_c^*Y] [I="@Y<ȅC4}ܪo߷7E>)03̶hGА\(pwʲ)0 r4|+.}^WnzoINfe:UWY >OJum5:y*l3ʌթFS,Uv*m#PO߽sBf n ?1<61nX6I\ṐaGc0, ʄԌυ .w9ո\5W.N-Q)4@0 $ZS'+@9( I- ̿@<)65ue RLwqmm쭫Pb$^uR?ѻ>vDEln GښTl!pBD S6LV+ޮZd Dh5-[Gf&8*46ʐj3BV]+fӰA?1`N LþAxʊyWScZhJ~ /K)Sٙh[Vc,a ,jɌ.IvEVJ(xf;Tj`p2(Q28z#(;BᔝJ]TVi #q `Ư99::A+2cybSz|0xvysc8K_{\FF" dOOO]u"N_d=uÈ7 {5ucJLqB( FƇUC㜼PCzH8PO&FFCmC+{USPr@-/wQ?FF8B:ͳP"" ]\s)tFnH8fI(n9yB pڻcx^Sֈ Zk&ߴ! L?>hhWrjB x@}a88t355Fhqqhlnq_՟Ig:2@__XdXqb9llq ǺU删 Qf!6fIŔ>D5]g*e pd[@M %pUpZK װ٠S 8.0_껩ȀY%?Jٚ(بAjE53*kj=/"E]Օ PsYJ$6TV!ϭƅD Y7PD ZeY~Ž0[%Ye0lY,WR!}JO]KmRp]]\tN ^ٖ+~gC^Ӽt\КR5?[d֐ \m~ߨf@4վ]& V65?dy45^Y[7V那L5I*[De}Z_MZR&}.B!kH +V{ Twwqt-&9mmE]y֮k㷺jB_I^CWDuUrr!907]5?̹2?>QSYC5ֶkyE܋z(R-8:½}bWH}uP3>7 ؇{SG֩צCӋc֡r]q@Zh|1/$6l*9]MO 5pG<pǀP#n7_^ۋQ֞ w4.: QYg1w7@_TpV(`)pwOk5h\rf_ՕH蟛,NW_dq.Y5X aVc_x59S @'e 6WQѵݹ <"i?$ 5bj A`"h3)@[nyAo!p]B~㲾ʅ[pYk m7kcCcw9EɅdb+t`%F^L@DN݅k,m݉ A}gLӴPEGm^8G3=uԣ 1`OoC/ xS">g1xAj:߾&MM5!$EjSO! ̐aȟ& ZBQӏ~ ?͏S"b)&qdhs P2l`f qb{A,-oZx&a FWo"Kwv!p29b.):TCeZ'j#Uc\uI /?էTT|)3 WAB2)+Z%k#}292>g)+|/ч.ŝV~9.G{x VB?w|R\ɝx_<.XJY{8Ⱓu ' HґVqpRW{y $Uɟ/VT{q#AHddN%3"ㅸ(,"$(L={M<'GO_z?' 9?d{쩋+ɴYx 7yQ5> u-8݁<!ifjeˬ!Ba11cM70ٚzLϰGϞ}ٓǏ/w>ɳǏ= ,ϟ<}GӇzCZCޗh&n%ɆD+N׍y yBcL-1tƵihMtO H́L$+ ظdx&0Q8Y3z#LT @>{٣_~ g.!O'?p{Ԏsg]Ĵk*y785͙J&ƇwRiIXRy<v u6}D3zBd*M6Be2ȓOO\~T'_XE) IEpGޗV/Ke( qsD'1_4KalhI{>z_X~)]ymscS7$+9גy ӕEyp:A0ƶ+C5yVB$ݒ ^\lT\<=c$4Wv?{R h?rP,eA֔[afHR[)D|E땇0BR\" O()j2-*.v#['a1R4Y:uEQ֐#N~co{_>4%Y/ѯ*NlPt)k{[{%afSTELZwbPՙ* e:sM': &QQb2|=ML\ԓ|€qa3i m?N-ǀR-!u8Yco,pG3y&bF6dJ >X}UO?g6Cvּ&Xw\'eL*T(!Hmt&[PM5`b[jQHKAZCl-J55êr/4AB}:~u! 2XpZ'O2LAQdZT@heD·ܔZa8QrLE) %t2O bO~Jk8cCnnq&B+s+CwkգUCqhl'&Fn p66\YC0uu ;Ԏ׹>u6`-/ xcCITf,SO&ED;ofF rVuG&nfdffjnnz*45=P+(Yq yUu1| 4{F!e ޠ`3Ee7WsgaG >bP zB 3CE~2,K$woqCSoNޚ臁q;lkd [0hU%쪬ⴎ/T_Aur DıCɬ-x!NY"Yeβ KM7x >B-0!)XZ\%:-IDOF%a:Ekfv3@0/~֟V~]9 xwa+{ 5KLø6y'I5+ VoCޕ=a"HhPAlDI'(-h(N$uZR ZGQG\sD&ө }XO?8ſl'n=@Kl?^^RH\c}SdRVԩ*L q+pO`8,'(7hM0Ed=u$ĸuJ-T\ 8 aEK-kkl"M0gd)JL\)΃ʚRcYpY? .o2 }xoHe) %RAOsu\70Nh.^0SZFe 0q.y$Iu RA[ܴQ \C;H48quqGtr*T쯁m)?L O!"U!71].?Y/Q9 |o?z/-71V^XʘK,:f ^Ҭd0S%2h"UCVnT -bdS -jabfhQAadV/7Gr_E'Q7ս!`a8o MMpBD} Ś4@SԉVEӿOqי!6YCkG !{/ [{1VI?@:BJ$%Ub)LH(5  hsP󉂖uH× q5-VsP*9GU 8 aqU-bk!.韀n*bO&ci4~umuxh \  ^Y4onq0'$e 5k9(D.< 7@ yi~cBC궚6Nt[4&VUk\U`i_XDc~9 j5r77/Րf=gאӫ0@pscM^gDC: # ?6l哎NvȒ^t9,aZrl 99(xi)C3O^N9S ,;WC"̇/gmM?|Yܒ7ظXh(SzC!1 (Ɔo$W "|YhiS]%F#E~),% .X߀Y?.wn{!WKKKnǰP"m N"YxfIEd☴^)F: s0h&3_mV*l,LCݑ& UB; C ?)ǟ\񥁜C~Sxu4#0 r+P"' ٬Ssrc+40\4^S%]n1JI9!OZ^&|%@CqSbwʶ'^VMƝfxYr :eIU  !*_ 5DO}且bx:h4`TbTC4|WNR #%|i9 5!K3bjF9r ĶY\ . \QUr^THY)V(Ä UÀ(POk_5n{ݹ)mfWV+=CT.~@^ rWd;3@0V@ cX,ތ!kgp,z:'=Q7N#Ad|+8p]Ng4#hodH8 jU@I1>DGI;P<*ŷ}a7*Dq;Յ2vd$@).:]ξt<݃> ;\kbaS@|+0D}A Vlj$=`Lf!-%r_HDd3+8Ȉ-FJXp) Zx)츷'|ָ1ᑑ>iG ahiw6{/Eūk>(ދI&a^=&NHOw Gxx`'lF. nmv;ݡk}p:WOAcxڞqRiuQ&`Za=A0B)DϩMMf`|tB"iJ(4kdz000*NH2j_HGvdzp"j;768(N=0.Ȉ[vzo3ӊHX $|$P&8L#W-:-QF^_0yWGq{、1hָЋ.!?+ȸN5y_ @1>-^7`Xx*^\Wu`XCK=&_\ Fu`J^qWC*)Q~f/f-Cj<8QY ltaZ*6 dqhAJ / +vrKwg@-tLy53͉@dJټȷ+rco R % @Me@X!o of@W!J$XٸB+īl?%P_L o7tJx6|`.|%\0A?dT eo#%t>ՈDcS^Dz J<]浳S׫v!J.Fb6 ߍcuiaI컯H] |(I>|u Eo2 Nk۾GcHrW|LemκsC-!^Up6XRhT nV*[V,$=USKR Dcj%JKRV~DP+9={8r=lEڣCO==zyx߲?Εkڵŧ];])’+`b;dϑ-Ҟ#[%#<@ [疵?sLBZn]"I[{'} @lC7zu/eblUyi Gås:@lR@rWPqA՛T,Hq|ϧp)%_fggb |{$z@vOow ʾ@O. vH~q5{,62>{o+PxO# g;fg=nGF aRs8y &/_~ {~m }CNٻ/p􃁡v3puf8 :4Xp#vX=Y, F}00BwᔕL!|]Cnw??ݨ!Hdnga̓zᫍX#})N<{GxL|[Yf{|,vifdqw{oSCX';@|bˮ}Z Ϗ #yx#cA}#嵗='>I=DzF#襾^r  {㗏ގ%0n2ѴfY7)-(C@:Fgr[owwm):;JUܼy}G:@k9zwNW;{e,͊ S%ebȂJ:{>c|tx?ȇk8m1b k8;v}m1L!vGVH D9? Ƶhb?g@0MKk)]^@DgRqjᬉ\!1 A̒S&YV?8g@LgYLg҂!r&jhK-g=[~[(H+?G@+@Ku @etYms!WpZT;De#S{=otW)t;ܖpȟ zt@v2SƷ4r Fd8fc>;r#=/2.o$}L辞s#=A.?eK {uX0uB6#fzGF9\{i;M6E#}ş`×}0~+-(mX$#d?0Ŀ*!_Oe}BffYcn}%]̲;:̲R׳1z0LeVTޭq>!0+egYc|? Sr%"_T/ٻ&dfft@D S2E$dbNEp"YVKP}B,BzT%#R ҵ#ػR:tSϧI&TAj52bTe`'lC7@~"ˏZŗ;\,* D cHM !IK9jh Fb&_Yf :kL^ Z5VH?tGi^U>|̬X~};Z6z%!/, s+L )Wz*xwi)DŀE1,F. j2t]K=6;;\Pȣ-!+̲C֎n!0<gڿef @"WWg߭Z-ax)=լU܁ڛz̢;g.uv<4?!?,+¨pk{YV(QF-8fzwyNs={УQ舰WoTk#F>{?_~2?!q6ȲAقY>~@&!v;ȴZ5w7Le8L!U 8:ےgcrkׄtLך?пj=o֞< )z=eAnurSBQ qW<"0=%~7x `.@| c.%dVo ?e^[  {B>KH,+2&r {7ĝ~MJڛ7 ̯ Sߚh(fMRލsDW-ӕ!ʍ]8l󊐝"^$gI^DdD P$1L@b8zEw|e>_e3O!K>V|Ý߿+vn ˗v ƁNC\P|[\RBGN$QS'.w\9ubw;7qxɩC;aLl[l\]DĖs/ĵRysg p'N̶ ǜhe]prsfj0waxv-cm1'l1@6uQu|wy[zc5fOM]܇踈Ayܞ(Hęsz߫oU.ĴO97elfgeق1q1 ʇfvϪ'd3mɎs1-ok`=499KSSп.bm˖6T)<.}?}UOT03nQm=7:}Z;߶Pg33<[=;0[%;;߱gxrjհcF6?S>T[gWYaOWON]։(HP3uAb/߽w;`[DLL={mܺ%w~DDD!Wٹ`x6~6SiR7;;[ uk[9&Hė˯r"#?;A+;홺3+" -ݕ݅<@uMhlh$ONCX(mȨ{PvR>;s"ShL {[ at`WR_CY ] {boϢ ,qgl6wZ9,=u>@trS%ZgQ@ueww`ftF> ػ;-qtaovG RE-M ݡn=RaIG J ,P%tn`I, +rP;JR{JP:)6oLO4ҩ \.]3nUm}QS"W)=P :+D0h 522l+z:oN]ӣR*V =rUIrByUQ*U5eWCV29SqQkJAJ"xʭWͩ95+ \7W-g"ƻ U]oR> v!899QeDRׇjA^upFYoU {^/=4UrHS{tjPUuW^[ AFv0#WsK5OXFҕr媻=ղz\~˙nH-Dž#)ذxI^SH ^\R^2(] pA"IOG]u=*'IR_[[zUUTUkBk X!b*T*ЯF)eU*cmOV#W(zJPMujPZ'博ZG!Bqj*UUrgNYVr5!چ3IuBV%KUtOECmZ1F 0 D"~c\ "-J<Fq^ 2z6O,t:y"HzÄ$ST,IR‡e<J3*+Hwj\<?|8J- n^^tmHCH tTxSS;7 4x|׆ڛ5f ,K?CMmTv!F E|%%N}'ARzz2=tmht+[dM)33P;Fq fR=#/}#Taq-^b8|la @Ul*0%ЈSoo Kf+!O:C^@Y'5sz>. ;W{JZ>z`9~2.R6y)8U9:)h8k(lTjMO/0шȓ][jGAGL'ط7d%ӻ.?|?g;1h׮UEV2$=pQ.|ukRJ@dŀ'־hrx8ӝ Y7w4JN Dx;KQ|'A1>u˗?\vdVVcXX+҂ } FAOC}C##(S6dI,ԬԵ`'4(2s*&GmaKtrX 2<i`H&Rѻ"z:| 䴴\[cn5#)$&x+% |L.a8,!5*DSk8:Po6+ 2<lْYR j$o`2<,3-Aod7#{ɀbB=ЈDW(jT5 l"jICd:Gb:ՙJA1]gVD?|脖MhsA3 [k2pC$'|c" 1R<|x 8 s+=X8Zy%ޖ9I%%E# L&㦧$VG/5/In!s8Y$5+mZ1GpM-1G"-3-cDP Fl 罁 $7u$ yo 7yykͱNI$}C ěCog$1p xpY׺5}h?M`䵾kPVuBVp@$5!r'F(]iD4o\wvG7g[Vch1N*1BD'!ޟ@8q`6Ѳ\p6BEMy8DE~#ժ @fQ-fٔf1$M_"|/0>DGek>e B1Ҭ\ AR]ݐ"?u)Al͉"/7 `g>!-97 P`Xυp\]ø Dj% :ƱA  etGPPA2Ϙc=Hȕo%;4.bHDCo?pHlX>0`*!XZ2Ics=>遤 >קǮ_?.6}ր4A5`q/v=K0{ ~kҏd3 >@,,: (_[x 6iy 1/LiфO_Q g G ^T .f .l(ȱm)eeMnZRʌW^ 7frzthmbw{+|=6*к cCk.$$m 5m=)W~Ge{"4!ƌ 'Nqᄉ8<PUY쑹'esOXv3ƷŦ"P&Ռ^VT5]-3+ݮLSճPQ$0ֶX%c+of^9}%o06N+747zfkSxMZhœ|8ص붣Z0]{"H45`;Ѓ$H#p_т(С>P `BpUYUP;j6hoP: J BPAA4)fE)0#w* pssQ1X6I5nNMY+<: mG}HUxrL0K Ts8F+ Ihz,>cZQmef__X_QFGƴZc2+ھQ`9bM͆BcEIY0襯 [J_5 ə7cxuMV6)AЩ,GGg)G "f4dస4VJp4k@p{J& 9ܔp8)tc2f8Ijb=ʵK 5Z8 :wI1zKE]YP5PTu(4ʺu Ga8P 2-<A[NL a[0;MLeҦ4p]{I`4щ  2ah!b2CGU1AZ1A3r)%&@HE(H;` 8چ1D-Z. 2ۙ6D4¸+޸҈yڋ "wϰ'ܴy$+OO" ax)V WiA1ArRߠ [ (LxT?| }grQA(|"Z9T! "!i/gxlGَ:rd\U9:~tfmTmh6LhCikj]v&M+W*[aQʠa=VGG>6BeRqO>i"r $%:es$Ѷh&ygh63tv{ EdA(%^5i c886 9Xm9XGG\犄]c C`4هl"E*|5Mp463mEE\j33AmvR5h9|aEps*+|=E1+6F7n̒d荾a-b~EVXJt4m)Ab!Xd FRl0'1\|H:>2$2-4ͧ8ifdDd?Jf_Lb#5p஖g[LYF}d6} !,)đrd~ \a§8,0ȂH)6&gx}"xY)a%YY"}@ ==ֺsqyܯ)`e6TՔ8؎Jh./]q@&[`7)l[3Ȃ=Gȹ/G\|[c#cO\p9u*a5Nn9XJf5Ɲ2q lY 4)J!1B~.3N?2Tx{ҥfB|ƵB|!'O`1 )  B[Yn37qxS(l?$|p 28{jaZ;ק^ӏo:h;t#Dٵj pWa,6a~gF87AiG G"''دS#xTX9]9V<:BAXU=9  Q(%%pA_iZ)kOY@_悀o!'}iҒH 5rE'yࠚ/iP}>4I$%2, 1\@1B4z-4eW `SFȩ! rxLLaf[~Y G 2r!aB[Pj 5A4U\B]_s6m\fAS]:g&4tflW\͝MbN79QŤKVTyfN3hQ{U" %@.ldް]f(fq,NȋY7o/0h#%5_/5‹ׯ]#pro@T vz-wstMC%4#g+ mԺ}`A{kY kad@1BL}vسg( &N _gk]dwp}hp6&J{B䪰/ae![W A}_Ԅ̶#GAnmk{qa_vhp4 YSEɒDҙN|90Ɋ?ul 5r])k ߏԁ 0o?3hOGk}}Q iʖR%Hqr)ȅLDcށ + BE/B&/ "fcҦzr¾mUK0pgC,7hZ\ a(Y6 i@ C+wk#u`űS}8ER7~'~DMzMHgVӛ4-dN=u7NR_CWa&"a;/^~5R^yz%kABIp#Pmq(hDrsqdxǟ]8䚺slY|ڣI)dG9 ^K=$y1Frsq A\5^@@[&ALcpZ۱ l)pwwlZ@KAک Yr`U!ϧ 2}qnp~ǃ_h]N]tmh"V/pzgr29y_8gB NmLo>(wCH悈"{46lUf|lVd@Ȃpwu4uŴz/ZS/bI*1£G7JH'y'yjƫ'h'Ou-ESwBi:֊{сqiq=$G=dˀ"Un!:5' xid8U'@(M `zB'k5[Q/R~qaNnYNvU]]=2nl0@ $!cs{r FǴvnQ..?v譂8MQ"HSujU=ݢyAPMνYN^ v(tNLBAM" +I+IثMi08dH"j aMCVt}MJ*UŢ`rh!V(P)|{xq"3$CȈ*P*R5ˆ֢@F6m1nA=:Zgi\4R tԷT &ݣ3{d Yy1, )-/J,ڛVăgiM6X1Խ7sDF8_+" :`oK'@C)vxNis'xȀ' eEp0NH?;>u>z++9㤭L W=CޤwVk娅$kKy)j@Q)Óbvvr`~| jH1-u\RNnd:0eYehU2qPkꨅd%"'|Ht_gkYAjݵj!p?؟ 5K BwL*=bdCI7ĴruΔd^4 (BTyJg:* Hd+8 O@[o@Mz XQG&v>hiB[&+p'hZp`Ӧ?OZ쒕C"*抋$>gn.\N k' rr<0|u@?覅`=#uR|e 5nȫvra@NAh x ix5({Pea$dʲQ;rjLw@$.ٛz*Nwraw@>y #DaUs<Ria_}\͖-˸0xm -{rYG .q0)wPAryE~¾G[ wKӷ7e R|7,Ur_;y U;9X@NI> L;9Xh'_P쾅Xj¸u^09fxI ro'=b5@k}jU@nRDȿ|ѣ+hXч}XWRNVrg 899~ѣ{7aKIb\O* 501_ n!OYT Zµ[cw& Ǔj5E[}அB8hxFxK ޏ~M=,e`~C9{<# g U&ɻ7^~ Б Sz  pҕ _ - dsQT[ښxl t'`bNGX'~ Zcִf4Sw̳FHRqx+gθBTuo4_* ]YK;~g]L u􏇭h@NwH'E?|ui`q| tVӵO.999:s,4\/V hg'.A"r|3ufPNX'kYkkYɡky7_AF j!WɔȻGX@1;GI~q^Wf #\ra:_<8[&i*;QY7)j,LN !9 %@NeZİ.)V#Ѻm['2tUu! { 1@\>S4^EE .{߹wK5JVTg Ƚ7VF7}вƶ@EN.#hJ(_D=,\ `HC8=1rS BrGo@>!P_zr3 6% ?60`^hg1֬fn|{ 1}t Gk:`GJxG =cyr"Fڞ K+{Ae`=ushI 9sm'#&Kwr3\ 7Z] \5'rr8'XJCI>il0ޙ? -Ǣi'Kv|{ ΰd_/KHxG\ 9$u7-NDMhޗԴX$bgd\߾';>(iC#' @v{3C?IaNH6'S^q4s Iujdq}JCQMGjUJ]1}]6.1B n$87`~_ z.9p KU dYP\1҄\):NrgoxK oƑLEQKHFͤk@inzRY%nR<»xT񽘇@ .?Y6?jJ9n@=єh&꬜ r"3;JvLA?{% gwuG ήY(ӿ0N盯NO/,Iˋ`FKKiJ&rHTX 7-g hgoZ-zIQ/0Mwm.6$hcuIӃȜ'M}sK#!ȼqtיO4D|lb޹"g~y Apa:+J3cGRI5rUtY}_UnqtIK/{D{@Gco+n15V2tohj߶a}YoCùlKAFtrJ-B#EnS:] $U;8VLh4F_!K~9zzBm+#mn5@pHHO(;]T[؝Q[ ڿN*b9i )9u뻂+ సV Cڿ2:d(C-t+wB业2_-DڱW7pփ%Cu6Wm1xjZ_HV2_vw']ښ+GpޖF`m ꌽ=J&$US*HAҳ"͌[/ MWdy <ė>nX(,B]a /t,* _/Œ  h9y:c ab3"[O('~_47? 89|% w)Ff{_&v8߽t:KɧȫrR^'{ DB7hӛW'p6Eno+A,P6$n VȊ3a$bJl7<bE+tчo݇UR_.Ix'ʎL7U|TNΉ ζwg f`_3駟~{(.POrcxO?n@ zi23{"K n~[YbbI#ˁR_ߟ-۱T T1kÏ ӄIS ,K_ĉ٥XĽ{tGnp)bjdѹMǖ? &eKS1l?7 Fi;[!І?&Y:CK> ['iyl ۻh=>,jfg04ll hjhk+ijlolQ0 !HEt]%, :yt.b n@Е|D](djUlD!д9^Vq(X.a,QV1RDq,.Oy!m}e ^ D@lw@i'~9ndwlm f Gl Fx[ {ȏ& H3J"&V_)F/btu@zy;=v34RM~s ݴtm@IFL~B, {h S ҋnb[ԙ!!H?B0 6=kșXO>D'!UAW1H 9dG)r-6 0]TuyuY` -)1ydI6_'A5 : T:YC}8GeH(YYj|Iv%AK޻^@NUVXHk%+ve$N'y~Lk6r7qɎigBLF@aLa\j[ mOҦr6 Z=`;qHkˆK J3""|(ăS(Dž }ڑ^,9#g$` `IThMFtv@/. vf1T0-\,tAB|opd\F鲖@=ukon Dpav6 Qf_qЙ$t=RkM)WT?6W 8_ZA],r:~K~ⵡd$.0/' aC (' _rqDNM(=D}+r݈F6!"v5\qƇ7 KpOpe%N@Ake[KƗʪJ NDf+%$=Xвy0G$coEX0dc\B4@zRyWlzU*at"t! uIC|ve!JM' _l𛡒V`Ĺޡ*Ss{aـ{钘dv3GXLdDKm IXil‚}Щb9$q ^ HȆ|tJ@)pBN.$=8C[;{I2YYS|[ W{ƖfC皡-/>VH'WOGJ1` Q@!rV[' %؁A<Џ HK 8@ɟBn!>׮Ka#O[#j--ݦљ6Qdir` ft F =yzb(& !$; dI˒ aL\9H @}V:H> $S?H1(lX\=ID33ؔ_ULbѦj k ^J;lidEIG]:u4Ϯ(|9 <ٲX_Y@'H!M Q"1@=;vE!%8QfY9̶ȟP̶E@3H$I<ҩWT-e,K^ |C(U)v1gY%%3@8 Hh6*  yY:Oy}V\b<$X%""du=@B O@4¨7JpT@v&TEnG@b NLeXqUďڬBb P@)cK CE,14)'yp$&h *qdG TJ.H?J[fj2*A0N@CDt9xls]>>R$1BuC ƨ=K*{YpL!Mdſ|~^4 |sܨ7[%d9-ԒUZlB{Ko9$B1\V%*? }וM*LE¡ePj G`ld4i!k^Foo]s کkr*.ƷuZ_ҕb՛w&ʭK҄v Ro.⮁$Aev"5ZkDV#2Pghjh vm#~~o#h9u\B[eݦAՁy{lc# ኡ#!k*)\cJ<*\@dS3(Ei ,pr &WMmlV{ 247*WAAs/!DMCCݦvCanjoOW4|:^X@<CG #+]"ЪDs.r$|ǁ *Skl{ЂU֗iUĞHajh0SohnVVŊz{%uM"<Lq̠RqTnHo+Jm!WB+/f0@^H`>i;Fꅼx*MMa)u [T||ǙZf x`SheU}Y G ݑD RU3M3Cgn565_6UUt7 vb[Ҙ.ks'ZdPp'a**6^ uARw a  :"i}`4Othkڤ$ՖBm1$I8 s8|'EG>3ƶ㦅=_nwo]wW0;9-OLN,% Rfw.=o\X0/키ya* $RG 8_j-qD,v.3@(r}Pf;PqP+?A80r .z2v8ذ9^0l:L?x0qsr``'ӋjAʤ~lҜo^_iF%OR 5?7ۀwL=D$:4 hDHનR9<41擉IY0n^<慤',.6ߝyuوtwd _$9{L6 oiݷtvv Q&&<{ _]RDJ@rcJ<B]ԺWˉ?mzS|}͇7fΕU=eƊDުi`&Ce:}/ + K7I4h$ 2%.t=!(_=AINVZ:o-E2QS{Z.ƌtZ?WKV'qw#IKJBQՄWBh"\݃f[o 0×w+@1\fi>iU؍6kmi[p\g"eс6 .@W l$SHF`Fg5 $;Z7 7GFہE0uÁ>h#ld8oEDѠn>P=?\=N׭+!@ȧߜ2ހlo1ݘg|@S@: {-{f;a4X#koj4 >RDƫ ra|pɿ?*! ]pJ%cnl5?~{?^cM1B3 g=sO/o禃DltcA=^Xc%࠺CG E96mDH&o ;~Y^`?M"krނ7ޭfQcX !dǽ⬯=Q:,5Cҹ)Čvl}\?(|z_VYyoϑ23o 6k;!V[FL{znMݻ_~.b3, !VC`^c^Bӓ _~cx kO.ꇦ O%]sՌ{}!ۡ-gFD?X<:[|`^?e: ? Lgؠ灦:P4u Ú:j{4uXibrShmB/*"„`NW߿4mYPFp~ `{1!HptƄ^=ȀWډT{44 ǃ of~ApN@v]X'. ?$c18ر-f  =ŋw#9 ۲6#m6, M6UOPe! gEY֕6[?"?[$?G_y}oUWWZ\ =)E{@±C F)ʗbԲO15Rǀb޲^<~AaPÛ了&B}KGdOtNOn0<>G.+`Y {@Co*|ERt-hIQO=(BVt G+8^f[6!W|_%y &/곛#303j\$U7S8пC4sP2a2VHeoVzG>yfE!v* ƎT ҝZAPA%/!KBFP۷ M_TV*6h:BGO> <|g!Z"DB0L ,{i&!l4_8B@6!{AY_ 1;7vK B_h"J0?3pw@ILԄv!۲"h2_FQbhrE#1H"Ǐ={aW3|]!L WwWW(0CN DJc58_(aBZx"nęX <*%4YuNT)@qJ D{R&VDСb2A989OqD6{h=$dW^rE뒸A=<džvpb3#BVbNEl[A_mx%G+I1I+PR)#2ZrG3"!#S*3:~2I_b#qtp[G)dTơQL%%!R`NJxNJL#BR)j kf" Q׳L S/0jg&Pd+F2hQ(& GW+DGH-<ʼGH͚"Vw_3s#5AB`Jv)^+%%ÊT!DVA1 ҵS?HBԋ|E[ ?SljtP+'S'@jIcKktu'~6.ntg3í@hj6:1ѥZ!n͙wW~ZF~jȽ)pPGE`~b分qnOxS 3T<uoobb0uf>Kqpވ\px}DkZ槃ݠ۴4)F 81ŀ 0vutB&Sg5 w͍&BsH33љЙP #0JRO"d9 ϋw W^qķQ NaHu V.cq687 P:5}&X^td,ç.ڱ ?pZ U SšdgMq# > aO)piZ/YBeDᲢtb *61M$<: GN;=$"$+lnô"dT`:Sp>Tg X8&մJaLeq4 jn[sڿ^w8"ʲ~`'SS'ѕH_:o/Yvo86':JMCH]<EqB.JP?K|XoTHz\J*=T*џC3 ȯ/{,iQ%\$X"-;z:]RR!-?frP \z/]&:GߙvBX*3 RZ8UQPu4 z~ԌK)ypb:/.wD) c*OYL)"R4+MI[,hS=q|Ǐ >~G!+tN2i,yST9B hjl@I'2 FR":GJzqG.4RBX)$1L8_À+ yVT5!aCMYs 44I%4G iUr>UX@.+6/߃q;<al<(!o΂ 0~' ~x”s#Be)hNSy1$w/54D@ Fɖ%8* r*=SgG8;砪:|i8u(y PD_Od!?a<uTTӤ=&R: b+9,z%\'Wm*?z"t$4nTnjf<,94)WqAN9VMOP3L-RpX8W@&]AHP[s@砨g[{;ILg+^@w>[fOY,gD4'ECݨAؠ[Hb-6&`7.@2ؕO'7I g1w%mjhh ;Ikr;˼ih.a)l z֒hv\|"D[YKyB'Tx\KHS9l)iNNL@j2VI,U,2C!D>i MV1v[;6_hLl(!Dց3/Fk{-~ zaq`{{'f{k"+j+0hhi2tV~6dl5v0`;o[6w{l!DR^$#wJ@\I4Ksm/eB8v!9v /SysGҼe"\ܱcO۷zP?dW^&T0,z$όe&"M+jr}{^zYWNCFNk^"yARmtOB B~ ^rBW'~/!MDȬptI/Eco&K|Hity<*0B  ,4yڵDog&dz r_tuy ӵk Ν?\ژ|fR1V{eT7!c7-Vn ؀iLÄ~f> vx-ڄՉ_uC!E&oy`$cVzj>SbfMWchHv,=HBv& = &Ss.͞:6`yrVW&Dkv髆WެK-7CfkCj!ʯo~mѐzAoj35[LN򵩅AKjvb!B0oXYU_w=t~q˯^oa52QL&7՜CǍ0e}qd2;r,!w> !=L6!in;O+d^Pͷ2k:4ޗoԕM[W_;4^vdv ee{?g 9q vCgB~{k:FO۳ _?áP^@2 ?}셟K/uY + ~53@:BYNBP7k)/&"N#BVS{l:8ujݚ ~AkXrny9_[t =p(j\9kyW“Pa(;@WNP Cت[>B2]XuR@؛^NB Qhhݪ[vJ ȇ 9aF!a%rzv#h8 Ef h5)*RL>kpR99r`3\kf|_5wZnؼ ׆NLk[#Yd)4|יczwX_ ~qk3(!Nerkr14t,;׶4om#84zn-}k'M Y\ƍC(ؼ=4 DJߠHRA{kzZ>̋)y/kM4MS4#gFڷr]=m(..j%e`^o> QN}/D(`!iԻ>tbtx!s/Er#d0> 4&9x l>Sx,S`A3}!d!$ CĐ*h!`ukd+8BE8FL Ajʚ*DqF>VY0!@K+ HfXы4̾McXzz(.7g7ґNYʉcAStse.AUq6UĦ'C2ǂ0/k4&z1d1u0d_Y!%1[uې.M&WWY";^A)5U(dK7RQaJ~NE2lĹ8gybc)Ɋ܆0ANUk#^+4tmwb~?-\`* ѨP]eM0w ?~ ۅ #/&X>I_"x<ޡb+`xYM{Yԯ |x9S e}e'뒗5~s^f ;FA>%;^' (Kr* 18UVUY?ˢwgw7[[/#Z\a`X=< H!ZAit?  #! px>ĻrAbE_+$QNݬ ͖Z,>c}MVs vH\5BM>rYc`aVNVD+Oki>[DsP#Ŏ/ lH˂aYIڋ-+ews |'4cuUVs˿I$3乣+YA%uO!לyސ@wsBMZ%#>l.Wܵ_CGJfVpcY莄#m[7n~IIENDB`awf-extended-4.1.0/images/thumbs/qt5-menu.png000066400000000000000000000673071517644610000210400ustar00rootroot00000000000000PNG  IHDR`PLTE91-gI;yRA¶ʾ\HǼ]HƾøʿVCحZGĺƺµ۞fM;Ƚ]Oѐ_JęcLŵ˽֗bKaKǷۊjZ\HɻȽĸijhXƻɓ_O˿ğӻȹs`½[Gq^աxft_Ļþюna鶶Ο׵˺橢̞w~zv_JgU}yuqn\Źl[w}y~xӅfW٥uesok܂cUöֵ|TBntgkgck^pQC}oϹtTHB][Yɓ}Bt_j7Sb(E޾+))9Q}OHcҌDʓxF}Ӥh[Ih tRNSjwksIDATh PSWmI2MM mKEPTȠ|T -N08È?,Z5C20(dIxt8H|Ϋ֙}o7>`-synN ^{] /Q%Saky;%;ν3)xNxF^k^߻ws?5Bn\R72SDe\@(7@\˔ILAШ_֨$ {swG6Ȼޛ۝P Am׻y '>}kHKs CJߒ_w;J)CׯGaX*Hr6~ޚ@~K'OkkG>av_}p8.!-wv֡iW~ *A&pYxdv6 jk*#e#Xֽ,B|7mI'OϏH|-BsbO<^=eMk7X΍_W!T3>mZ<ݎjѬ,p9rdaX ŰA\jP ڻ&>(G΁ | VDB:VJ$r Do=(9k+s|-4{ڕfn6~ |]}-OG+b8gj;ʁ4A-s7m\D< I;7|0.f\f!+fTB7#@ZOgN׆I0ߝwgκx׋<8xE_f]6pֱ8ZqYnb>E2. v "Kp!p{M:*!  F T׀F2M 2jڱ;jBMQU&>d?۝`J2k@ 52ESiZE>^5 +H> 4ğ̥F!Ԇ]ϒ‹e_x>5E^"qR>*n3{Aw' )rv8kР  tfF#OF[XFSiO4$^ںdۡ24BGqךw&p&Z:CaB`Cђy43hAt Z:(|C723 2G2fk^wyf}7B Xmq4ZBqۙjZ>CD[Dhl9;i=eu`fD#3V+N+AQtґ_RfS)fvt]t1v`K68̂02e~Vx.Ɇ(2a(ZPcdSm>Q;݈Ե.NԵ6!|En91W jmMz&v]|NiFNK}Αm91䵂 YfUJUzǂƆ+b m&NiZ֦5a… Zn 6Ǭ@as^uSc4F֛'uJBRtat0ٯj͓vx?LUbuzlvĄluMvhxl΢ӵ}VC'+ٌ:ZbцٍDm)3)^iz'&Ρ3m^Ԉ_9fj˨l&NgD+q!11C͎~3)jK0T6ˮ&ȼiMӯb[. !R?SہQkYkfQ[f : ,bi&"cc&F٤C\.VH#:20(+YGo@A@iz}4[.Rg eѢ"Ö'FP٢%2`.-(0&XEE)B*QG lMTflD$c"PMX1|#Hla3: mzQ-c 1B Ыy ɎdFW~EKddE˗F$^.lд'Kg#p!}ϊi~C~T*CO|:0\HS>'"@ H6/`6zgB5ʟ04 j_qϡnDW  )jCH qr{2B_=#~!qKKJ)UӽVSwq%jA-1(rhhP.B8z8Zǜ8NWX?!Gz^%ֳ5ޕ(2+or F@_ s峝s]Bܷ?WCbXL hh8$̑bo1*gV X;_\YG$I n.8& J!T5Y~&B^fg`:jZG!&!\YΎ-˩F0ȚYHa& JpN&/b/'I$ D?NPYljX)P'%٫r=3Ai_ U"EX{[ Ps󥱊xA[j̩06Ie ϋÅU%x5#`J<,~ɚ)zR:w[% [>!%Bt4PQZ,U+c 5WR%|5B &1u)̎~HB\Is[%B.G^,% ҷxRa,$Uˎu!·ίzo~MT,r6n0#X\\G:K*Ϗ%+vbŤu u9 xa!VOJB'ͲIdwui)<|U_껂^~Rb^B||3ڗ/$(x Azh!B % 9?X&)s UlzH+f/!({H3C4o('(nMeJW`WC޲IHK0C_ B:?<G9fh9Q~hK\1[a J:+$GPA\q[#9sȀ-.>HGDpq#.!iXxicW[ o=R١|췕zqBWO jeB\& DÝM,HF wr k Dg!!mB?==G:/^iTUh=rs SC:aBuGOe !u-qĶ8$207#$R1@ȩeR!Ǹ܁CnƤn =;OFS]t'q#ysp ҏ踒40$ImZBOpH]mmcʄnSTw!;Z_hYZHA@r ]y2!$'!n[\AAг/rzLtfI7i?rx.D2?yؕsE$VUay"WѺ " \ezSYYyΦ;rH} bU7wtw~ɺV_iKj?_YU~Х,? er`|EB#:"]=uAھȸ fqؕRq!}GΣzlXPӠm{JU'x㈻E~zIZu\ś;V4:zUJ tK:tSI0Mm͡vyd.UBd s`_h-IA4O3s ɦGk=]v.{lAI˂ t<<VJ' eW`JW2ˢ^LYyÈ#"6L˷me#]g/1l3eM'3zNB=X:ՠLiw 퐁5J$`G wBB%A.% nk-A13ƵDtwvٿv@C8O8dΓM !xY9_߁fܻ7Kֺ; !7vfyg7?ؼc;w4ߴwuLoTÞPUB^Wv8 zf/!,BJ6=+YF5BΚM{pJ}َ-0!drȯbЁ,]`\E!@*ɧRo8]G#4x1qsY vPC.utF 5bO|UsAnE 'n_$ 4ZC8z.!n3dIeZu'H4K[ScP;OO{%{"H"֬D 9!d'_.8U6 IUŲ,69hC,6Xܞ ei9CVG ! ?\x0(I8$&,􏫓`rH_'ӄ~&Y] |+NWv:e/>Zuh9$+nnZHD$?Bj$*3Am;j{21`LC+A-Xnm$7rjՆ=g#WnL5G󣶞@H魛ũjܦV]&fTBCLǎv ۄ7#;;SvnQߤmSpR52à."7 ghU1gHk1 69x~x#4s#\x?~fWQ,UTS^-SDvh|2#*b[f+ _q^?3tԌLMM3MK)Ojoc;&%NNOMqGBĤm@o^1.^"U_hmͽpF 0-" CZфd ƑHpBg,=h{x<<.᤿sO!n=_U^VRCVg?kfTqE"A7CĉN&"{@HionGXf?Ip%ᤎ!?UwWY`B7d,NΔr [8x|;`y_n=‘6UV-_CiL^X3\&ӡ/^yx Qq [KcnP4幄΄ZFj/]j,+Ee*Lee- eȐj-2L3FTVT64 v͊D0cr@\.(."_8+S_.ylGl v BPԋ9 &6Ǟ<^-;a u,ն'`kWr``d%{׮ZU$$FmNUX87/uJ"YBJ/c|O".oBXeܩ M !u 垈VizE!5\1Gf[`8XsDm$tbC2j{/!l4ݛq ѩ.HHmC2~<$Q"!r| mW r{,r,X .eX4cjSs(.b(*d αQ>j(^~_`7[v--,!pKA5L'׿PyjzG mv< xq!CȥKWVOsHZkm2+V+zfVPoHFukw1`峁km`6":G~6 +Uy~=FUA7r2`r'@Jnok}fHk69 1zB1l}-fSG#3O"O# /3_Óa&yxseA zϯm+Q N6)߉Z]Bnya|J$d"!q{OES&IpLbO&,m1[,OqbIeiza.@U44o82Vfx<}tB%,, SjÏHlhu$wt(3t˝t맧n#16Мhhs/"HۀhZ̞?C/G:ȸ Tߤ`WZH͕l\? hXk!u/V"odI@^tw?!7JޤYezC cوIrk#O5AZzL"-멧'U5[#dք ^:OP,d Fɳ/_>:= R|31fo;d)? "Še_;vTBc49ݟo(u9!K2O`j19]~logTO(ƈْߗ@_I+Z,u\# z/~ Re3M5;`09&N|°:Tv݅4Ԙ=bhgiQ4}Ij/t6[\x'gyRpDA5AuLc@.#a; MoI\36`TpJd2!ީLRԓҌ{Ls*SW1Li)",E!1ȟpP"hB,hmm=qm|wBH%'{;ND`YIf&g؍fGn$nKS iv-ׅ~}}!/޺s&"SXK*b"IZzjOa'i߾}?p-61& $a0n;Ǻaq4N7=>_^B橽#`0xwR{F2jo!LHm^xȲ>IcSSR/c QTeE"Ht'IыD$ 12`wDFс, mvwmɫX=e&dٰ&/6J=|sԵ T5pll I'_yB؞'O0:+WF ֳ!KTk\ *i7 mM"h߾Q_om8nh"Vb|?<*6 W^BHKI 09~Ka49|7irfADdrN Y0=ˣ"USia2g!]azwBKhzL}Ȭ ؀F0c&IprS ;9w؆B߹z;du=PM??.u>05߿|m̕WrΩ&.we#dt!EBHkguR34kr ~ E9. '^0DwAt]<|E"d=i[-gBu^ָxtt&88!Pyv`d5zl W͉98iQHJ]Fohզ\!2F|E@k@.6ljF{O:Ws2b]~sao~ar իB&UoWa|i#y9N) CTe )% 4S٧3&{uo]0|t"ꆢh!jpFǴ5 yp9 bђeF[ȇ]?{S_)CPv_Jƭ"y}h'+"=O翼JFHS0uz4yZbBt^(%̊ 2  LJOc*:P٧ #=Soy%P`JAbTΔńE:8gGڦp6~023[lБ!dh5G.}9y#n_ >s45_]⛷av"ތg}z~ͥ }3UBHitG z",{s H8MHđ@bLĺps =O:yL^/?:Vi#UE! 쭒ʏ/+SϨpĞp܉XڟHGF}`-#f{ԟzx1=Wyp2 PBJ ff|(&)ײx|1,y,q-KêY~"pyq1=7iP||2SʽҔFHAt[@2!̖tF~H9s~鄼_ZB9J&H݉7 镭J"V*-\xr2tDBs}F,P۳zmp' תX!\gE^BY<5{ڹ&l-$×7ڡ| ~^!-\tre} ~yVAI4?-JV2!.I~Y!Ls 2d!xCpѥfvEL^:3l| ы| ėEr4W 45<䚝dv9< enw]aVłfIi`I^ !FrYU6<י "YX5h[Z_6BM_POkAUeBWfI"ZʮǴ&Jͥ{̀8TqΨ6ÞTT֔!0H' 2A^\g.W6*!ϗj0!2͵x459RI y!ALa jݣ2@)40aUc.`VDVHyr/a YsR{aHi=RvXƖAYԽ86; Y ӧTּBBS9k@c)1p5 躠NA[%J"j٦eJ!d(Kt餽~צ'$sPc}p l5(>oщ)1c`!eT..6$HoP!TjJAsN}nHuжw457vo߲4B@Еz1LhܒM6\3&XQ3{`;!0 !fOwJ=pT+oq]=ZHLVg^I# WN Zu&3\:|YI7$C& 6Y`Έ*\)j `SHկ]GF'OB0 t[qBeҌՃ#b50WJm> FJn"BeV]|Bf@r_tP֝:D/98`R֠)S's& BLqLo6DH-H0.!q9d/_jϵ@Bv$gJFDWC3YR9BO\c45,ze ]UNњ3[_F,^F"/VSgE>3Zz̘̑ˋiY5eDFvS(Nj?+!Khلo )S\.'͕3zeM._6=`UI.T,8(K'87jD;-h X:NB.?S) $w &B;oKͼmNn!C%7{;A%5jNq*f:t]>69Qݘ~}p8l1#FLa!zD֓ՠgUo{/hl(1(cC6 RT2hz Fe?Dʠr oiP,ܩpR^/yB,D CS鈘5HK@zG8 ւ;~x=Ǽ7[=Ξ7{曬"AZUXsB@Nε`YB0B)](ĵIU UV" [1̄[ƜpȦU!3]ڻq{Îts7KC!!p~8=1ãw?ɹyC3=# uOA9|NJX^Vpyb& (>IB0㰍޴V)Rlt:T`Ue dGk5,^m;Yp'md=={xvk|XzBv8+FHȡ.@HǔƄca*Bq4G8BZD6;U&vaZ=813zX5ǀ6sz,ظMx2og_q8%=QCpD)fQ4QrH{l@u@FYKqG ȝojvw6r8tTj{{=v v_χy?oUD_||әs_"beݞ= ߺZ ] )fL:еo`xp:71\YZ Mݺo#~nrhodo?2/ugzt톕#BzD.+lwe[X/{ء<{6Qo]{1r{iط$NzԣƀRG#DkFq\k"ыa3Ѱ3ѵ9BPgs&$- b$D[VoD1p=;zRVۍZEkVO8&}v]0N `Z5:/*QbH &{ sG[ňzyܢ-^Ve(՝VWcp!z*@@@|ӔS7 ~Ѣ9Кj)M`ͷ}0HLk-tRq '9$AnI-"*| w>36y7\pƥEs/56@uw?jdnfw]U.62MIeX_9  a"SDZhL)Dg%iZl0tBbKI?bѯ30a,Jrl!V|Q)@N-iZ"y ?&Z%h@ ^} EB^vZ.FpX4Z A ai‚lrP}*ZײGo^݃ cUd:ѤLjGJ2PCJN<ᙶQ{!w 9#rί7 E9ls oZÍ AN4~LS:Qe$ ?=^-YGyj%ûGv>(mqgnsqV:Oa0P,gNண%Bb^ԔBb(3lv*F{Mţ%u G>x nbܥ[!J.$3JV%H/pՌȕX)/|\EUڝRw݌v9~ ,e”"@.ypGLkসyN%DgNs6ɇt M>ĪC4Fכ< t߽R01:ZC\;sO)+}|\Vi5cXhW*v?dOjFH7MxpJHEOI йr~UMQ|) a xOob*- *lriq>t)Sk<.sIgQm x7k$KVJ"e$9ugGy*R$`!K)DӐl҂npN ~ "7{ tGSNaw0wN<4HyqڶӮyb|k֘ @p+e0JAOBP.j:W{ Q$D w*rwx-tbq0j40:l4gM ?3Ȗ5Z~@DF@,m7̀n"8B._,rH Q.&Y'K-BQg 㸒*=eYQzh@F] x=h":ptJAzkGqNcS6e^L #cx`[P D^I(ȡw[9hZlZrb{kcp< `jak8n_ {<{*sE(Gi#-i(8 >(hڽXժQ.ޥ7n\ͻLۛvR*AYyK3B̀>!AMV, lYwdlAjVC@l\w8^Ի Y2-{2r @j4*j@RPvU߲trm\u=3?!ᇐ"$2r RU@*yP$J+0@Z1dtB>ݑuy(`C2</q|!!Ǥ*I@Br@$xyw$X@Z5[B%Ȳ(J@/ƃ%R>[f%&|,|XJfYmoRB=rS@3:ɿbR ;Xb۪ /+GZ5GY~vm:ٺ4$4;Y_\ovM]Cl0\;kFZݮe+@nFҒǒT$/Pf4 ?1ĘQGf,_-->T6L"6>mM _]kЖFJL/(~@:f A2Z$ 1 kȴ,8/ PERTU@g+.dt~ L u82}f;4>~#wg܎Qf(L._ J%pbl "$@S૙ R-cr*-rR[HMoȝ#wO>\z Č3kgƞ]YZd|. @@5SЉjp<-B̀bc.!0J4(vXBeWJHR1$6̌?>3tLĪP?jSL ŇO&DCٱD$٠JOt,a, "XEU 4|"ATx(:D$i *Xrwv>:lȄB}+ !utvdAT=4/xurbݱ/ j.RA: .M̏E>2z2= +CՊHɬbkc+Cg&Ǧ@~rwe]u7(Y\U kYA_S}JZϠjjdV z: W(ujkmC/!e0*, bH }q I[F|R vmu7!$$] `HPD$}E`L;@~*r{$Q0*q "AbP^ @#-ӠK* Ȯ*P РZXxU hLT+<.VDrg@%qE񱹯08f@(CzXziА| -- l ͻ" s.XᱥZ8 p<^[]mcl*GrI:qtk !+oY %,hu(zE=[\S_ D|aAruZ1BQ]{=yXd}I#/]i<570Lp3lJCLm̐@Yd 6$$HV+բm?dq5hp_f{ݓ{}VbZř9g·3= u?\ėZv;|XTj$lqiD?d\ȧ햖ݽ}FX+`+[ǀ6Z7֥%<1,K#Dhٽs{>yQw➃sii"cAb5hodNmNw:m7[Hgş&! q+-gŸx,!3jw-9KjQgM''wv\V_ɻ-zv8 D{;]>i[1dbZ~:DBoop :b˃sxx<6bT(u}&:3]xc.ve=ONsf/Lnuo.uW:x}/_+Y[]Z޺Tד}/^; &>ޔh9װ`9W~rfݕK G-c[ZնG+hyr{smu 鱶[$\fS7mx7rp;5')|Crw`#(( YܸTryKfw uUrw~󱒶/ .wi}仟CMr{ɁaE_#~O`ݽղkm[[g}?ߟ|yj_߳kOA/e9y'a<֥q8u 3SՏðշ5{Bb0{ |0b-=UfbWwT@oCqH+R!N44 f^8_qTHWxRpF NrGj('bN; aR|ʵJs{EI+u9Q`% 76 *(]EHB)Ǒ$)S$dj'f]wNZpmk3?KuyaO?O z"C$909|PI)!21<"õ*'3dnjJA+B^S5axSZU*Ԥ]pISWyº KE$o"!I`7 4FE7N"uG|uicHG5vqbרi$35XmrN>ө♙o̦,?F{AoWwœ[;b՘e\+ou34bwÐ/x-s՗_0H5h4Z<ވ߂BNm?_kz:r7 vwD,˝ EF%Ԭ{"2tXϋ<jߟ"=9#)/MǪOO" -˦z|\tBRs6?4L3ӱpdG,^P|Z wNWR'A"";N5Lf1]~ihW[ bl-sz+7(hjnD*˼JV\YMr0/TM8EĂ 0lJΒZu$eOz:i:fl"(;V&˙|( ɮ,G(y2VP P(JPRJ%+L$$P4qJ"&G#I`eBA(x رxB!OAτWZ0U + +!%8ZR*\+T^ ].oZ땟^)͛`HC2]I6I$ c*0P(5BbF.6LnBa&"q !耉qN6Q^NL^:Ĥ$,72r Ϫ)BBi1,i) APAI-#Y & F C5X|C1I[Q˵[sEgs䕅gꄚ󦠦RAe*X1&Sp!@+H&9MU w j@TjɓQg5ؑTgIr`3NFp6 jdóD 7%:K@L՚ 7D|qȮ! y+! ;A|" B~t6/|s8Ǒ$E@`g@ &"a͏$d(&)kt^UuH!'&ôMeO'\ɒ-( rNgK.1]K(r/DEHH l ,$ HHJbd'xeL8!^XslmBN%}f#83vf;i ˲$CѾ\<7W|;?ё Q4L[PpRQ^^qqիWx2R L7N ݉t=6 =Rnz0IR.HN H$|k|yŸxF2" y2DCр+>vO< _Ys._:c n=HZ/+ 8>\Cg}e:rtG + `C+?P* *v}~H{:ґ\ȉ^9:up$u_Y8^Yٰ+T'@n>AqnM&7/n~5PyȐ3Sg8"ۮ=Zt: p*j~p_y9$xtWDk@2@?&Ht\ }t]r}wн8v Ga"H@9Խнp §>Gƍ`0#Ď/$׈RTUfc܌62 ٬j8{Al S5f0p`[6PUe0kA5 =o~mk$!Jj[$9s#g63׈Cv\Lp`)XOq1DIiiBR( 5x5畝k]/)n:Q>y^wL >v4Dۭ3W;G/Gs֋gUՎ!CZ(X!iD_CupUR `<,Mɋ5~??kf ϓo ?S.W9hF2뺼d B6Wn/+)1LI ANRIK 7xeʇ`ɂ&oEGޏzmYOvSRȕt1F]޽=6❙TMobQ|f) Wj [GL8<VU鄮Ԋ2>|.W 7͝!գLYn/ F%"-u|ZԊzCse'*:_j'c8)$<" BCl\El,ĉpa>kj Oɞ@f]x;Y:qD[5@'^E- &](!gWpK7TZUt`TQ4޴<"825[^z ٗƪձl?c_QZG" Vռ3Ȳ5Ҹ} yN>e*dkY.QUu!vҦ`@ ( Owq4 f,i]h0<}wH?fK7+=uR|O@K-ݾ}&3UCvd0Sm|>@1?wwך.PEz{ɍ :Fv<_?ՏQMP `mX[ c/4zJRϵm>B Y\ͮ\{a uc?5>fͨm3]it_@|,/jXP)-Fo3h2 NLx΢lAH hLD"зHYXsqnp|kJG#;A2OFrPID+ 0e xSN9ӂq5Aט=.d AaNՊirM63$"hZCHbH}eRup: l7I3ܐZm#ϗ: AjjX"d҇:c8FUdum:`2qBHK32Ĭ@Z_ā-D(C,i32d<iOMͥ˗/VZƔi# #07ԭx+C0GSsM[ \%"n D+8|k3lvp80ز-+h--k5<bhG Nt@Z㑕D Á/oqʡJ.-B#8zqyx&d-z%ȗCdd<ccu2T*8-c&̐st\4E(s`rnJOGj 9ץFML$aziP(k'^9_&2* _-H\Mnצq2N) LAJLJ2LM$!եb eax/䩇OwߟvTohB̕p5B-ɪP9ךKpro`A0N(ߩ)+uhx2īdl#jn/ V00~'>z$?R_>#  XH"s0;̤RCV(Ru/)y>C8ʤ3Qv!{4~b d* @rSϧH6 Z`2 Ѧ̐7:ز@~ ъLSq[ךu 8o6/b/ Iv gsi ; CH,|7@^lś a2QޏI#3qYk;nMDZi)_taxOcjZ?ζ 6 tk|]-C&`qn7N~F. tPY e" kz(ȏ\(p,v}e C 522P}ḅL#".IENDB`awf-extended-4.1.0/images/thumbs/qt5-rtl-menu.png000066400000000000000000000666141517644610000216370ustar00rootroot00000000000000PNG  IHDR`PLTE91-gI;nWM¶ǽ̉\Hŋ]H÷ʿΆZGŶ_JVCƾ;ʿƺ]OǸfMɻŻcLŠiZɽȽbKaKĸǎ\H²s_ݗ˽q^ȑlZxǻշn`ƒcTyghX|þɿѮĴݧ΄_Nĺϻɽł{۞ɿľyuq~zwhVƽrnj㩇w͠t_qaÍsf}TB똘xkifcueqveZHȓ}dPrO@ʳ_IwVKFa^[dEt(:535NY7SoUw_ΤxRń;az]U|}zxh>Yx]&qFvv A nW{/ .xw=gepꟿC.HNv|MC 9hM^ayϾe,;@_lh`;2!s8xNg%wθ#rئ#3S<Sp99R)@nrf}Ԙ4Uδ GyƤr͇\ƌ 6縦s^g?G*o#bISR(mB'ΤcqƨږQ{OnfŁfd`紣M<̛?辔4z'ΘR3Ԟ|tx4tֳuo'kfgtc 6j`)4φ($>u1(4ק6cpcnn&̜?:3K22ZRD _ bPͷ'P4 b0xD7F:PfQX&Lg [fKF3-F 8ogBJL@2..]Նyca*-A`D@[e2Fu JRlR˷=@b6hZ5jp(}jBf0Mw,fbA@+:ˆPPdŰ!ŠpTdP:A G,V3xVn.Ԩ QԬZS)P ;Vn"Tk]ZZJ$2`7L*l6RzVSp_WX;.\Q;N;HMujfx|biwog%qeTF)+},M"4P/,l ޝ槃`?>QE setDWi1CýSPjb e-?9G)ih 3w^@`޴Tx.i)ؗڦykm2D? fTH(.2rc’Ozn{03idw7n [,C 6qIT:n^2=4 6ئ61ņdZb/!oBhj$w7r& {g_KK \o\hl ONð1}yz|z2^NqPL*&{j>4kڷcSu8+L> Ç}};0wz?`C.t$4?r].sNB6m6a?iKsST'BT}fWBZCv;dɓ'+{{NL|صyRBakPL۠I6l]W+d{']V:lE9 ^E).e!wi9m&KXR͵t=@B~GƩ@/ fR>N:=7b=}N^8*B! b8@.\B"98~81zH&FxU0= OUe"$?"?F|fР"^ڲDp?H4_C`4QX!EedgH`D5:4`_rz_U%I̓GC5 ;ULi0/R51~@F>{H.NNFR\QC *ˋ(VWU\$]WN$U%Y} lXFVLz{ 7yetXO+sBH0:fAN[:OIM~FJHYcXU+Ԯ'=d"G!+CED-d}$- kKKeE1UL{ b9V*y7W^fU/ 8ĝ Y=bq{H^&y{s-WOH$Gl[En$/9Ekp:[ϐyalB}Cv? tK#-&jQND36z Q"}P? Pzj T}cJ_25*KN9M:S\J\_qHOiXzoEݺ6`ڼ=}/\h: ʭS >8B#B%SpT@:υz-gM}WJ6UȅӝʒP^uw~o4WySENe{urpW'%ݕÝg÷= } Oà֭QVJT "d8LDr/Y83*I*HEϥ֒_]B_O- C*{}HOG9tW7cj uV}] Wv 郹\$ mE%Eк5.DZe@ P-4R,平nz2dq.)Kz2OԂ^_?$x .WbCj0j<6=s:LvD.kˤz"t֑HeZ}Vd+˼{bbXnGf;J&\$nQWNs**HL0gZQys#tx,(?^|SgF]|tǙ3;LHxk|pDZKO2XLucg !E]0ƻDP4d%=ȓ{9W|ww{yϵ"*%3TXM<&RDU:v TL{.6 W( ¥Q4M&؈kLx~`ij}} A <Ą@ g,1H)dY8d~"\{:X-Xj,Ȃ5*zsWpz֌> 1oH#&˷0W]jN"d[Hȓ{Os!X1k{ik\ ^sީ#u+ǁ?֙%n;( !DmTAm.a$Ӆs%\BRĘucᚬ0ƸNmlOniNjŊ)IJv;.̡N<`+ұP*BE14=rMg2|x}Ru5l;_}w롵`ԪsT#J*6 @s;)C$_ oT/¯Cٹg**wwehuM}L=jF Qs5B`̥ A jhϞ#[`t =`S}`ozA D`BtHDُ-qTa3s5Yyq%cCi 5asڌzFެ1)(1cE&PBjh%.zG e~b"7K y* H`B@!=-7{o-HH񺵃۫@䨆MkMA,uŵa6Ox_I$RT WY<ƇU֣t,uHԬK8vTΎEF=&ܒ!D]>+js4:fS0F=sdz[;:TOz#VG`/G! E!Qلl5Sp|mm_I$ʁoB =q%JHFו0)IΦ.d&*v5({ \VegU+!W[3^%|`bOG E.%/!Ƕnz1TL.]l9T*Qqrhi[߬ͧZ>ƚ뙻oS hEn+С\T wvPYV:LNLDz0s%3éf)JE:r4~ʉ)/i,YJ߅wC61q3l5+JH\%- U3Ա]@ˣY 2@(3*۟/P X8iEt~}L<^GEx{ pe+﷓+]+pΡ^]"uh NX g|Z9,kꢖT$aLBÉPۍGGwI. x+r*gm&HȎQ' SۀwFPYUyp.P|e=90t{n~S|c1Cl.蠰!XkB)_Oj!`zMOFЦokcؠ\~[wVB%,]'-MYP[Qɛ]V&C]CIq͡)BҔDDH,cxgauzM9抄gɠt?a*ϨOO{D"e /Bw㚐PXۻqSSZwK`EWV7Go:~1q͢c=daN#FVA ]*cI$"\-HpiBQE5!Vc :?~EJ[;vV$0SHgҫ70P+ƠEo|_V[rޞ͢+r\xE v$uֽ{JjB+rmc 1i) C&E"Lӂt xIC躨AƄ)L`(QTeNx8] !Y ?N4D:XJK؍ea^B}}UKѵ\s7(Vؤљu$sDv2HTsֻ ,'kZcSw҄|lla:g%XYXHL 7@5W j.-/Jo]˚y^l>ֈc7jB{!oRz`: h &D 2ا5 `Р&*}p<ׂԉ$0>NuNɢӪԃiɅ=gcM<ٰaWQ߳ 9DÆikIUAO!Su=DIwPcKLF CGCY(슻t KMV(hy>BG}q3tؑʊ%܇7<JgCʢGT6  bZŰȼ5V eV3)*+$5138V+#GȨ,(6YwHaǜ9|vb`,>ߝv 8>mR132:&@{xVqƭ[7̅nbi NV zdA< dހ[<r.u gǘ 񖈔͔59 TJƯxf%)DEie~2N")E5u7TNw$=&36J#u.8NpNgO|g! Ϗ9xY|iWT!+Wllٿ4xx(x`V&!Fk}svqh"ѰG;vJJ+= %ܔ12=Ȭ@FÓQՑ׿2nמ>p|>u0Kd}3]'Bl}!vjChu%!-dCTaLe,8L&CPTPzbhSHʗZԀEu>.$|_UFeoxNS_OC#!OͧF]tlmЗ57"zQFvwnc62I  >+#׼v`,:E%c@ @3ǒe *x"eRd$RxQ>Df |l)SR(؂ 50(!lƴXuHHmy$$+R/!0tOmݝ8K޺U#@֎(;tz:XPq<Wsoii^ZPuĘ^^ˉ+{c!Kdu5"Qݵ0ez 3IaH &PC#ؘ_%u,vunשZedop=$';C|ǟQ0N + [\ `9Cg?̏o9dXt}Ů#2qJ (âԀ F 96e`)0 `Qv)d{[ǐ%TePwƢ_ʘi]9SԵ ucx՛GQ,pS4m(Vݮ3n"ADb-g[ϫ' 1c'd Wmq!ӧj* $ xIU`rVM?//~ g/ʯ3-ܻ?mzoxwƀ[ -(1|˴pE9ݱφ˙!{ξ&]ѥvoǒ1Խx˸`{㳦 ٮ]:ep'ѥBhBQB,&3 ĦB0Jtbݾ~ w܇Y_?̊Eoύ?(p; rKߤ}iҪaїsåm s奐,,[KӔehq[K>eɘuJ; Q [N T 6F(gޤẁԽ r&?ЯfEINrB+.g4J6}T5*m]0F;Li}(0M} )}C!@ MK%TDB=+[T)*  Y.: pY:9/ ȕmCr@u;ÏLW?h6CDKPrhBY3 ϗ5|iMte×j)ϤGUOCx8@(dxj~K+.-q*s $maCya6Cnݸrݸߎ  kC+2OӇr/!o;jy-k~qB]/_㋞By??.=c5 !w_ LJ=U֞Gr+u%!B *᱿C6>:SThְ[?:L"5Է(gUUUv̀ `O%QaD Pj!Vcúz{c]ӏ́]wLJw@OG}@ΐOtvǪd׭J@0;6G6F"D)3>`uLǑ0gâ, _%~,5 ~_鷩uTPQ֣1{on`:F<)z('<8BLJ##p#Wc@/{m] pZt6:-rx]*_?̉v'X ۴K:ݔwjқcy<מq6'}PKMDVh{L9 f`~ iq?dmi:JPÓJhӆ z=%Hň`44ga2R~\(LjIn g GDP5Ui@(=PCҒl 7TY!E ą9 CzsY5 ^V V;XEC[1S~"imZ!z![A 13IHr@ Q]o :&]{Kd%pN8tI90ƔXTXqiLͼVTJPUSsU6c+~0*TrU\5ԁMNcS: 6 Hf)7/ІWNtV/E;74+h6}{ķ0Z|qnq_(>6ޕO Bo8-oOs7&&氺kA$g&\d;"I2a1.nqv'FGkS !ŻԝO?g`tW5_zzuo Dy۹0]tb<6/3 (~LbZ#ƙ1'|&ߨ{aF*C {VR}H_/1w ^dOG>Sq H _K-ҸC7@vQ—lb€4kvtwm#Hמb ;q ҙܘ X-M 2wLrOFsWl%_\joSGC{OȕlB>]lI/('  l..rV6` ]qp ^h^OU@&bY3pxN x~<*xrX ۏ"L0 ʡѠIdjY/@ZgF(8DAfЪ)4N,]rW8/m;liO%y: veVbFаN"=7IT$K(y*u ru? ǖ"Wf`L?MhC)lCFaRG9Q26ENXs2uXݕvۍڳ[pqԑs soӉI?NgfXx<`:O0eZGWw.;`[?oֱ5Y5r"*`( pv-/V<=2 G,z`eX ȝ [pk??@^B^YziRwm-o1C#3U*swڙNlY 8?fZ%*ϋ}͕Άpg͉o"Κy%sX~P= 8BE9' 2c0.rEeHV!T2+QVQJNd~dW9eȞkyG- o7[j޿&Cz/*\N˃S1dZL7/C{"zPSimNU ۦmyV% : ~!Pwky޺_F@G_ Z󑦼Æ#^o}j>@VkHܴ}72YBK^tbYYX¬BMq*qԯbR\_JH(>l \ɵj?Ņ1 cr#;u]uxH;>&IwGk漋zζn8_`- ~mʲ4ZhZ,S^# GUKrq/kb{efQH j:I2$ԛQQ`ROGut5|D /ݹ$ 5Z%?@:A 2'ҡ)@qHtċB`4|'v!XmU1IDwmD/' Hw2AX"t^2:eu: ThB<jf$Q8'P=fT'wd7Sp?!g—a$n[o?DZ r:ˁT)ɘZRU$h Wp]LHɹ~R(!ӐpSLAͪdl0wT<<(}s͎mGeovRND3kd+BYaȖmcm~'H\6m_[{Voh_(SL=dpDhmQz 3B!Y,iK-W=WdRZ:]y ݺ6JWYZE&}qO1 I;i~6i`?~H<ߟ-3Cp>(rH@>$HH>/HcDGь[--hĹn#?d$dݡX^sGr`QŒJ [~*G#Gx3u"xbU%v'; .vH(\+[=hjM?=:Sk<-Vޥ{ȧ`S.JrᝅpPhF;cb%B`km d"A4 p"[)1mHIұߑN # -ב̇ @cgΐqo<y\ГHb3؛ A4[sG2ȑ<&nt H系R\[M ::nh=! . YN#`ݵ% PAH[?GGv8L ܗsýG7v߮>N䃕՘zH߷)6nI߈G}v=*s+ [i6y5zr҆ ?- M ]6N!V[w4Cg8/4sGSgOMg>XO[}Q??yҟr?h"HĝV1JSd!Q5"?p:e -JW|nԹ.[߅sɮ _SЕ<ωx*ߵC Ii4eхFC).]9a^\'k@ \!B)9kPREr.\Nkl-t1h r;c}gZG9a߱< #}Z4+N|A#G AKu:JAxDAI˵UTubkhQF |UK*P50c uߐUʊ$@MjZBZqi@\`0|~jH@6@>hw>䓮EL\U+*,-k5Yi U%1/gVe?;y[+ /dn+/Yz_~w'T2&WT"),gB  ܛ"iVi J/$0O C"p& YPC"Cnq]䪸,}`$n.64ۓ@ k=M;'h <8=|~$Ԓ`?e\L<'Z7;#?b8r@%kU?c7_X+ #WpV"j:V :a0b{.yP*|ΟOC+]X[AM/4_[6i/LDbDXџe):P2]We ߿}-vhgχ~&ឳt>C\ݖ]]9/O:lBy2aVK>gs'I z_ ';m#+7]LuK *A)ue uJ@UJ/ JQR K !k@ɿ7$ڀ[^"gse~w|oχ b4[g;-;[ōT DtYN0#*pQd:-fʹz׿ڔ&qsju@@nhY+kU*+M{o[ ;6$8NMշ^=XaWߞdg=և8=CK֫*X:Ҽ3CVF*b_Wޯ$.^_`ԇ9/rlqlwT9#Pb˼WiĦEJc) N*ɀbwtAXAJSt%ԅW$sw{ m?bƻcZB<%=7/#!vpG˪"*_lРAe(R2epdS#\2jUFRU0|' ;p\t:xp4L&>` X`s؂XpF`Ϩ'h FQN .)e4`*N͸٪L(Adc5` }_? _M HccEpH,BJita a/paa@ # }AOxہ_L /yQ hDWPf56-UfE%+4,EaZ@hA*W-RE*n yD if඼ €iMPYux}R;`ށz @a] FzÀ5gi_t)o M潝y`86}?ځ+Y"TÁ@tS+ tPi@<×*b3ؾ=' d;Z:$ސ vF:} o"gˇdoO$@Ə}azX~?R_ ,.AȪi9Ys+,Ri& 5ZF6߳~>68q'pP ;Mɕx #q|7;OqYז61"Q$5 ( YQ'cȺx@n0C)@q_r"1jf*)!ȑ IcC3/KIZ~j~}8e\cXU7( P)[Q BD"8xjxxx %98L(󱏚dH"MW*[KJTj iVV%f,K_Qh{ ư٨ )hUd؈j]|ӼQ'¨@08hQ^'}@ I#C-b=IlFp .*,KV(U8Wd o۳їبIܛ8EƷ_Et<'O4FyO칞ZΎx{ߒ&Fk/t%nDb/bDE#/*VKv[~wl1|p!(( V23`@uxݍ mǡF* GmTH^xcj 7n dy(JN jjeެ EJ "~(&,3,Ii$g"*؁؝ٓ*G qxe¥>Xho]lsط5.UMvndXsxe\TYR"4YV fqш`Dw6 ^ \$7|[ٻ׳SccY423?:e;39;{kzĕC3זnL/ݝ}shZֺLdYʕR8q4pz;`A_(JƇ뱱˓w'=-ݟ9ҝAq#K7!##@š{k٩P4tOdzSS33kWƦnOM/PLܺ:CG4"HHP0K E ,JWu|5}dž/HHnnyL|HXc*O#ahM]Y%Cq 4X)ڢfT%>'%T7Ȯk ۷C% %B0%Ҙ%A5OEa3| ]'|qpfK2J.K:-*K:bco8!B-D5#*X-EH٬ˈ AF8wz d'op 5ZzY-k}*2[zb;{ Q3nn W6-ll;%@p^6 [ ˨o_95K)'XٹX|l6^jˣp,fc;3v :I7(A-rD/␨ *&F ,55jҕqhScsCCfMg&O=::oR|)F+mMj)&MgǾ{JN;!YGRZB,X䨗5ɑupZW$Q, Y DdQ([HBġeUTU}7}uJB .Bl=̇gT?1"#k?*?xKE; igcu64}>$qYM&6nʙdmYS!`!eO.ww {k\[7*o^]<{HW5jw聮<\ZUgcSa6&"\ɮd"{{h_0ڛ:.CNjb8<_֭]p ˏ7~sە5f٫??֫'Z_.={a£WWW޺ vKߜ|xW @X<CY`W/%΁Z<~Xy}aWc~ZXXJ-UE?V.$-4r<@іI:R#nKߵwe|||0kɉ7ɗ/~XX\s_\zX^\_L''&߼yo1͛'o .s2rnxqp(p'XةtΦn~H lI(+{0h7 )b\Jr WbC~Ken لE3-ca1uZ6+L\Vr-Dj⨰1T$:L¤áVH f8xsua9[nM ?0Sҁ D?E%@ Ο  Tɇe' Pphys-5ntnm0m.n1QE`;@+Ld[rÄF(hvzq@"Nr ؞!ӕȤaG!!%4\)X&dOTH]ڕJ YhevzSS䜞+d5 X&} L nn^,*CJ};R 2rQd6Jb"3.g$C%J3f ?x.AphJĺH̚9V̂GAbٲf=BY!P)-ytC>Ġo. :PX* C}Z_ -XjZV%l7u- 0D` Sq@ `wop9ܨ/t4Нwҙ޴w> ޹)+w>0wI-=H 䥋x炩PVB_bN)~T]CP\}UXeZ4 ZpNfUـYj Xbm ` K `jaD( 5YuA@Gaͣ4Z,7i!H)\S Ur-/p%k1H4mbpVjtAlYZPr,s@ &-i1Zf qFTN V!c XcTAr1/C<pvD)BrC* m!)E6/I鱙*ӡaTI8 b="Ƴv|΄\<&&e(P5G(~&FU3@eaYw(H؃08Tk!I'3!s f8;IX" Y0vBͅ%Cq/nKO@&_<(n*}&F|!R'S`O 3t1P0SטUGZ?t&< x )jIN@::~/(@ld_H ٲ)tY#9Ԁ1{$W Ȇсo\Vf*FyK-\ B;<"Өy8@X*,"dd? :TXA0Vp:W(! F3Fl/w$UF>PO DF}p ʹc+`)1$" a'=&?%vs5Z*85ʈDF11fhFp']@`q ,H!GJ$@1 5It`#b j %AmP98=+'IdG{{ 1; @z cAnSedu5y@@7|p"#Q9![ XjrT77O κiNdD} >Q 8BT4xԔ֜4a'k龜\{g??)Bٱ9ߩS :M=~6>5[ 뉢._j 9 WI}jk> ھzN h@Fr'e^l=|֏eϼ H,@&w]KO4'47(KDe;o8MF#"׸ EWة@<VQQD ##}k oWU ^tVPЀa߶`Z;}Aa ^ǖnlZcc÷]!NKCK]aC; YA7aMM5E5@^%R=m!g ͦ]' R}qqi$B<0KbYj&}tqfuxu2Œ%W0^,ywD,o9_ g'޽@ۼ 38ɆLL<Sɐ;w'^spgvB9roŊSQ.,`]ꩩxRPmQowb `W}`#}z[{_ =jvA!P]w@d, =VF=14}3 >:F\b5#'O<8)  !N_B"LL_=>^ŧm♥p\ɋjxMLhRRE5'5%Ϋ-4$<ML%0$UjOt5InT3=ǢC!n>;k2-41%!(rVʁ4!-)Wq<,6CdF)W)+79~3nϼH#b N_;Cڥ=-ܸ@`|KBD2c4 mг#g/yt2d89,@LT{m|QV+f>}tee%h $2*0CN IϬjAS*(* !Lq鉲֎UeȍCЋ!k }i^s(oRJ8A@" wC-zݾE54@b{89af[$i"9 DvZceFZ>)dy? N))рyԽrzg S]Tְ2qBmJ?08yRMJi/{C}T EMIe8#gЀgqH_N8uɆT6Ī%8 Z|`]wΜy4dClʱS{`>:~7P/SP(+qQf!n{~YIJ< h`_,1 'N0pX:C+)Jx {vtbYP, pI̐ $TƈbX &#p| FIA:Xjy&}x8`EzT>\ H2WHP5Yh$fHL tH>+5ҩ*49)~Zu9f40&DŽ XTrq,UpMq.49`d\IF,hޮ)5 La𯝑p,'hZY&@o4݅}aU{șSYr\a*th훃|~rﹷc͇{tqdQURt@ 6j&0X0]0i&6rմ EPU2ؤ\EY79EV/|w8HA d3WySՌ$Ib4&|{\XX¾EĎ@ A%[HuE_l211W<[BLR٘ˋ_y7{A!z ,Fu:o^ q!O_IP{Q궀z+q!^&wυv\n /!afr x=~ e/r^F-{5`wQPc&B}ʼn'V \󚡐:`Q chno;C`0hol?ŬX0MCV~\V ħkŞ>[띘tcr.Z HߵTRtY!>V]@,4!~I|_tSKWn~\ן6Fw䏮oLCb" `, w#EկSH:FH# # #422Ҁ=QdYJQ7VG2Z&pQFIENDB`awf-extended-4.1.0/images/thumbs/qt5-rtl.png000066400000000000000000000655571517644610000207020ustar00rootroot00000000000000PNG  IHDR`PLTE91-iJ<`F:oXM¶·ʿʿǼŵ̾VC»˽Ƚƾ]OZGžs_ĹƺfMǼɾʻcLǸ\HaK_JbKŻljiZƷ]I]Hǿǻɼ𪣝hXòxxfķ쳬ɾ垗}ǦѪûdUzřr_ݧڸûᵢk[oaտ{xvgǽzur䠠ԓl[upkn`ŹhVΗtfmifwϚĿqǷ؃\JtP@fa]xǵ̖~\OImqxpbE<8Ct䇛7Sb(adʸ坋ZAҕ^v?ɣVCy֟ߴ}R؎dw2tRNSjkh IDATxyTs_+BhEDB 0 9lȦ6Pknjj#@!!=1! 1xK oͭ륵6iNO=HG̳1_f= a=o^"mH*ۇk~~% ɸXOtF˕ ULt\r76N~6h=1_~088bHBYH@Sx?TM  %Sq  l!_l@A8@{-oUwq W,̂/;RPفS=e`K]X+8 >>QG4@wrk&ot rVq$jb~?@qsyWF F@\lR޿`|٬&b*ѳc՝9*#"f/;2s6._^ iCqq}wn,*{6~GxvoA'HCaD_$ȓ?o'6GhWvfv>jСhn?9qg.J|m1PlC;7J@PîYѮgvɡ _஫ g^툈wr({X#?< ;G5~lM€"Ⓠ% 7f^l@b``'cҁGbG(gcc{g5 ~J4c@,LA9~ A&v-5 $v#pNlhxlmUCo. ""iٰ)\i!܍  )#w_6 ܨ=9K 7,~wac)?c ڦ]f5eV8\}|8ĬZ0/';;2DG;ෂ9qUF`V8$ &Q^_ U.msĜF UaxҁYpt4R6Q7[;LF> 7GMӧ TMNi.XmSNF@35Zo NfDG@ L`F>O`G8jaAl_;'s8JդKӶ .#M֎i̶{J[4BԥaOܘZxR)&4JLWsBDnSrTbhTҔTM5Gt77kҺ\' miE'5}G!6QVR+RmmBE5԰J֥Qu:Z9YI;ZHj m%2m_)I$*O9,WՈ]Y_ܬQrJmNE-1m\q3jm-mkkm2mVnkUZ]S_qNWvDV.t.y״Z%*툢:4U*m_J+[d6 *"B-ISփ6MM!V]`kX*qs_K AG55m+4.PmE57jEbXY%ilhG ;]^)eZq\NeB.mc ].\!r<@Q]yՋF#C4PAjoTŅ&'4&!dhY\/i&C%!F#:T4EO4ڑƜƮ`E$`Aȯ !r$\ \2\L(Y8@"_s/}*H+'Xt[ ɚJx }Õ$X%6 ,H'W& 2~mOAF7Е3Ftb{hbvljt4j-C#{bxah4  0:zڐHpo'=zyzl`YM+W_EHH`jZA\$xccc}7n:"%eey&_{̞XΧ28B(+^h/ y"ZdZ%70oJyBUُ}]nrn}I4.y ~fb`Kv_\,as|ZWZDeK}]ʺW+$RE>WC %&&>7po;6_򗟕yꖱ**j?WwLc`qޠ'`ܱyf *yZY^ 4)WVnh6>АHۗ~Ҏ*O_Ux\$6w،y"mu٧sc2`1ɬ[r,-fnѡviJ]*_ ;-Y ÿR^4GEM꛶|We x11_}-&FÖؕDùR̢+o*83)7jQ+l@++3ʓw^,AV~'O/^k,|KHU 7_A| Ҟa74޶NMMeN]t .<2$ϓ+6͚S -GXi_K1~!TԢmH> q U ׿WSBH"ic>m,&"Kq_/TO e t؀n[۠j-|R'_]'JS #s8 555` U‚A~ $ 9uH+SSׯש;KîpIVQw˹>؜Lwn>lۿ)b5?S m" ޫU]_;>9=X_r8*J_| 0msS"]ƅӗBE@DʢJEa;Q%8`թՕ.p~RGy|Elޅ=0q01q뺬UAdd„,!svrRc9]^]oWQ(&3ukqEUssק"k'.X FdT%RKSTj馴`L L`&.$?=I0PbЂ$&P7 Pf/7יK6כ//-t]W]z 8a^mvue+q}W\ԅì?@]M4q}Wܹ//Q[K{:g; fm8Dp+CcpAldW}ɱ&KĄmB"ά%d8K VTf^aRbon4x7i^K&g-Mts۷n)nvfh [\h3(w,%q৖r*c^njN; 1@7GñV,B4R<,c N9[AްRhĝmgut ^{,$(Șxr+٧!7yz#37}n)7_xsUYhxC_L_@NNvv`f %o#i3H"h 7"-gn}~vͿ|'xekrsoOj$wRm$傅^/}߽EKq6Fbdj6Ĵℏ[l<O煇G%%aX,3/)O†m/`#"[" " 5w7ֈ9o^>E$G\_\BqPr'Zȹ힪^Μe8n)hA6ۙB{FsOy*K"%Nvb,/ ?O?w1+petљN)?:Ĩ>^vwύV̍'a+-ן76S/66v4+("kj.je9tWZ(~D-(X%Œ/$`āG`F~Q<^ -*ōšd]2a \2Fl'׬(i9pQ~P%r^Pnl˘w+GW %çJ+RqN ;zﵶ>ȚE5UrG*YBP4Qp5ąXVi!T*Kr*Hx)W6jos%i-}뷘h"EEEMCRsXr5Rm^w33e4 o̰HWs?@ȩr/fTb~"Z&! dQ@E'S:nG.PNxQA,d tiU5U{k[34`Mk*do5&I#f υ .ȱ&tQގ.n*G6G"FKRw26\=^<&v[*H$H^!~zW3rl2Sot!*ECo6(dXTj& T&~[(-jYxzY9$H  ܵhc+uvI/E&} 6ô%=aI¾ ^KbHM$ Fp, `+F6bJÖoM0 }۬LۘLZ4.&^Z8̶28 Pwf5aۘ$; ȕ&x;t!p6R m_Q)M/Mf0h/x3ź*HRA*"-[|]VoxD :)>62)bzz2J N {@IS(A,. C"XC0ۣ+΄7V${}PX \bs?= ‚$6o*0 T޾DKM|RBE6!DT}C&{&9C>C-WJo6+C{ . [ڎbY~j!g{>|B qE0죇3ċ%iBt{iUO^(yn f“4$) #X @ \Ap$!j}}A=r~zmDi+G&0 B8J]9xqr/'H<mC7RD6E sau"fMLg; S\72//O9$yrOcf dA vc 粙4O͕@`qРkCδ!blm߁kp-đl1 ʚ 1@`LS=S-ze r^|7W" xQ1aTp6GȰ|Զ<(wlnbkl^0Da B|31}8"@yH!udo;M⽷۰殔!(*f+[s݌Kj _~O) EE i5Z^vbd":{!1 n{vMRՇ\0[.=|"(EV.KQ~Rbvg!oي6(Aw'$q-Q̭ucX_45vYWR[o_aC C.}K +c w}B냋t+CE &BdSE_ٶaI_/ <KX8i$I>u=ȭ>zHZZ!ӂD9:yXs AIIbcuOyЂ$$6;11`?Hb K8U:rT8A{7M7P;Q؇'X a%)uCpCMR @=An@O vu{8:NKs 옰-/$^|Mㆉ#~"/>k&×t↱fIS Ϧ=$'( v~焓]V Y|P6nG/ Ƕ 6Y.w݃:> >88@wPm~> d$a%oBI$59Ɵ=鑌7.Ĥ<[ 1-f;9}9vH{dId"Q,VZ)n%#6YZ}sNSE‚,C~ɝMu.w݂ԻIO3 Wߧn /:2tf9,W|ٽFE0x}14{o1(Ax4*3֨=jmU46WIdr&YV-Qi<,V)A9m; YH:0znd rHV%'wvEكWxH!DFeF$Cp.!\Z}MkqF"$V8.]_5G:mY=VR&צuIFr7%Z/Qi֦Ś-[ ![&!i(AAŕcEE$lKggX o ݸ,98W9Y"À,&d暯CС/H;fg;:?Iɏ D O>D*=jj/pF>uf YB0-G= c$(l p Ɂ۵v?z} "5 b~k74_B| _ BH_Z#V!Y *~Fe2(C`[[nyo .:<IKJO6_ !^G 0戌\-6 xևn :8ҁ ='NNf NO/Sx˟ &w\OE .C=|]E0YwR8%ZBʤ7~ i4LyLpyxp+qqR;ǜZ!+#ۥ޺9 oÇtP Wp(hC7 1o6&ϲpQ;ևB1 *pwnjn\%()Wnjx;ԅ]|]eY )KfA>cuPwo:E^]}^l1enҋ|l y񋻯>| DZ rdՅ;ze1g0ĎxKIw .·hU/bƴ3AR .wvM1Msff1^j>!_>r0!ʈtIm<ټ]Yga07&fa͂:X[Qu@M ┥9jd0AzK:N#FI/ό֥H>2^oFt_ >:]x_~7lb~0=& <A7 {̟.6bm:]w#8Oz<ƴ v 0Pb &H YJqq14ba@D "H&,tJ%wvtt;::A:z|"\!TzށG3ChmrW ͦou =`'Ռ ^^ۅ R_H$:Y"ΒF\h⛡;x/1GG$8JG~O~G4Y>?n(yXb܌v^wL"O㡰cټ6; Kٜ^B 5ߧN#g/G>@! KG}͇ߗeKYo % 9ޛKR\O6'$3y(V*i=Cf7m>)G & ^pZvY7\!+BȻ¸d6o7;GeDyCqմ ́tpMAǏF{͆@]I.~^ϲ=LG@*m$<29˲-҅˿58sIǒ\DfMyT;. '֘k+emF 2օdiPpl\[V =81G{ Z_ `_o0pɮޏ Fmr`]~S8iR r0$ԣCI)um.h/~H;&o +Ƚqo=zZ&{>$e%9Y92LZ#H[%bMF#o;jdU>,PfHEȲM)D 3tfK3<~&ʸ9 /@HEʭ!BHԸP$L\ߛ$9?:ӹgsޙX` dg!i/di?~wy}w"sAʸd5O䐚3W"p}\]5~L^o!˰-ro?::_t·X]rҚg 9Oh1y' 2E g_O251\\cA>C+'Xw|}gж03P~oҎ YM>sTwo賜_g;Ny'b6U >QvM [՟_FC39L!ݰbWgrpgrpI \d[d2Z{{jNm76Hzz3Z%F5|jn-Dl @_aUȽ/ {jZ{1 ?-s6C(459B39uFQ,+G *3?E _yDbb/T@fғ5@H@Z#{yYp$9l ;w79~s_Z7K}eJT>"(PʔȱzK!%9.@2z2@qc}eTȼ1bȝ({v!)\c&\`A j-WJ/f^#oSGkNi*C6P>ͺF{/uo*#ߎP+aHN^vע HE{26~aD@WT>@rIPD>x$)>..>$]QL'?ޘ1H.*k7IciL}||u!  ?3'!(|T}0 ҈aMՈa.@T͢{bD9 O)ctt?wTq(zzԗ "l:4 FQ#|)*dL_@6O?"lZLr-j'9z燬]xer_Hf7qa|UtՊ07T B@(v LS''9z q'1164rNku}xn?]7|n_zzv뱳EܻwB뫺zSPeC$9H@qiuDf!&;u:&4~%ؐ@LhfB$" (DHم1GT^7ԾapEx~ BIF DH GYoycMgRAZkKתOރ};{-A@tk)K<*mGϨJnQ_\k}$ӧg M:]~@6]ћt TAOsْiB By}]^FLFgo~I ۣWk4 qP¯d7V9(a0$F VkI[5Y\NI3b]j`gaE!@~ǴrZ0^+ /3^m/g&y%{̬@ HQFU@ƒK.V @*Ƨ eԅӗ+d9%4@4YOY>w.f; ~[B+|Ȱ)^R\kvFo}P3a#|3-@bBô A2XO\x`?4mL]׿JQjyLiLR fxؾ9O@肒ҿJsSg l=hPJ^B H~h/a-@_/Y,eWȔ2^kв9 ]M|ˏٖ.(ȝt.Dp.$W Gy]WpAi(ǟ_V+4dsӽ@r!lL*t4G4{ۺ^:B;4ڭ@O3+¨6mT^CF0ҫ&`˲b+ Ӱ",($v#9ѣ5t.w?WVh13ٰhHgsANl_0Z?q'S!-"7iUBkO|iFYB%1\,V}!>-:-~TwptTlbIjXaS=Q;_h 1\Ѷp`7N[:N8l^́.$Ƭ4<3XLZG oX{Maw?$v{wr^c>*(gϞbQި0MXSS+zZ`Ce$KI@.퍮Ζ!2/4ִ6Hӱz208ŢaـVK\.Z69_Hr I ۿjR7;Do?o!\07PY'G4nY `e쵾: 4ysӾـ=Di~.Y$(cu0ki@{dGf:QGbuAe opHL77cH; @s×,*A=z?]+Cc`y݀_m0n52/VbM(%TDx [;6q Fm $j](r V, -s$8*HyTQ0O1y`#!FK& ,h55 9nS@ XiL?WRRK?\nbH {wG쉜|<2位 &hXI ·PPPL-+;&`6V?{luQ7 uz6쟽R+|W3rڭ J!&CmSts2R,(` ͑E}kD])HaE!Q9*͉DBEN7E3 0HRe{`:ı%cyqbv*9)4HCPMΝ jj:ѷ'6M? Hë/wyD3rNOҠᎧ|A_8rpVwеO17nCU[Y1_ҡ3M[ڑYV V"Ќ6"2+Sm%6,c{.<2q=hEPʒI 2J6?]~mH٫L@fȫt"`a!銥V| w`aeE^i[?{ \XZph,@r\̼m)Ev,3/\|c*ULh%C eTaS+N|;Xq9('w> 4hEEe%=!mh퀁yJd4"N.@?NipVtU {*TX ~s<ʤxIP1qc1TgFKN pZzpl {L@@I: _JAܲR5;QjNeǰh`.~dZN? }> "{.BJ[Lisl>yĕApм8h7\=2ɫ/DDR:xrH0}6dݦHHl܎`=EJ3 b빗Aaa/4J.%#d4Έfxu&M`xF,]vԳ`#F*HXI#t)LTnלg>Bжv)Qk'==f_!!9@◭yi\amE6XklNPvi00-7jXܒIoG!NV-zd}ڜnհNAאyW*! p|.]!tnG@)yJw["2r V!y.S \0RW ]V"BxB iTs/ @tp%R!`3(B C} C;wy8fKڂKWBbM~R {f 6zY2 *a|X[|@; O[ c7-.}2xSD9Faz=£AiLjm2G60fUـbc3!N)J4*!BbCDT + e}2.{BӌO9{}f2,.f0HfT^b;que)8fBeP}?Ē {܁` 'bIJ"vǀF$y4,FL5D-ЍXЋgu|א}Wez;׎z3Cё.]'߻t }z^юMΈ9s#w|wr.Dhb.sm"d D|E|SxA bF=e1J6j.Sԏ,i=+Ow[FhiOg@'&.b^iB,X1g/޻qD]xbI |(d CD}=IO\:ʰs 0b,7:uJH®!iX;=743z(hFd'Ov?ް;윲tYuƛяi~F~]sq=ԲDN*HJE_$b"`㠲Xj^4!;뙁<;Q& g6Dzj )*%mNTɻ6x[vijٍtĨL>!i;yʪ)dRNb)5x7qY֮@P:Mr{m-?`|[-/{109trWA:0ԒO[SwO9ov)ym{kHhўXXvw /}s29}ٗ\% Lx&WhA઴}+-A.@LʎA#x0y#2l><֤ 3 x!3hX[ z_^ܽ۫r!:$3",7Rb0`K,/-ɢverQyZq`<bĠ }\k:~f9!W!Rcv5A:dzz絾#ޙip >I@K/-V͞CS7SGt |ӯv#z5O ՃNO[iM]?⋧Dލ@/նD&wȔ~`h_e]3jLЌZz2TOY=ᑩ1ݐwtbYŽXM{^= Bp1"wΡ\u˥beÃ*U"R nHwwd![w#B@dE{$qC(]3leヘZTn ̫h|?=r0Lb KT `A{|"ZBwH:?>PJω I(_p+ ]Jڜ6߄pdGUa #G%/=?rYT 8,hom0 kX3\ɦfa i %7|ZU^ёsBpF`n2 [X{'"!"d" |K\61[&a sL Z\Z( aȳ66ؕ H !;]ǦB=AȶN,@H$M ZguYm%MG j>.e75rYlbcΪ"&{vki92א q m*CR)t; Kh[BJ`6)]oAHq@>"ˁ!t4H iV"oX9)aLhzz m\ܲGJ/s~5Ȥ!&0k#ED`Wc_sHT)<~D![!SQYD.n<BIPd6;66bj;ߴt G6B3uI!NNmA4"}3H;+0J"S1U3/TD鮢D;hVm'R7/:y1@:IcP+αɱ<>>?~;@trxm 9|w??\_o_7|~;^_7|yƭ`x+aEa@E*nfHBD jQ E%P@|,9KAQπNcP ;L8MV\juZp ~-bSLxO>,dgp*~~ n'N: '*+N੫ i61K -;?roy"Ԥ7NJ,Ȯ 1zb\+, ʠdNƠ2੯ĀD`E7(u+aNo [FS7c2! RaGT_wឞ1|~}H4O-x ZȯrYzjLIgE"lVN0#1 6h! UWA*14Zְ8,i{ S ChEy̔H/:K UUM]Tؠe\A mr EX3bKa5x`˂>/uT# S_pNMइۡwHN,&[Nd>kq pEngV0uu/MDXٹ` @GB'i^4%iafFD+ !xR@aUSV5򋣽Ȉ Uf&!a*bAVIt362N -ԊxqzucxeV,Vʑ_㩷SLJGǕ0Z~tC_A zx  7BtH7DNUӭ?[ zE*/ +ºv4߭@=v5nxu6[[?: mm{^AiE0!evXk:&B#PF`1H=ǬXsdj4 ;&B7"$,VOk-D@GƬHRFJQ+BeԆ/_YlF* (gA01ȼB"\H!P&l9䌠TgּLD#ȫKڬk3`/wPW.HLhDKJvڈj -ҙsy|[֯7*j&Ka .I΢ЉPCTavnvcb6r&):O龙$GbpABeeM5^֧&Ui:OB̻/5P<>i^3uR1/',5A^j%֨+2B]AD(P<^ BlDk˥ U+jQm=歔 ]/F6J+f4P?VӔzjBSxJȶcqیi_88 6Sذc#&fA3VFaaӽnĂ>% &t*Z 4Ufs˅6S(&>.I>Wg@1Ub@ |*Ħs[񋛉:Ӳ[F6[ue$ZW J{H JF#YK׶1ST)r"&-"P)z ZrQ?Ycb4Ngg@ >ţ]6nш7`@ɿC\TPHH^̼i qeΰUdqЍ;Bp3*c8LÌ۰ s1Ngp N8dYLxzeT1Id8$8\Ť\$X"^($z>⽅xJ.]F|bV++i,s>.Aq,l+L%(jXڗƐcÅrBi)B& |{_ȗ!sH"$<*I(× g^8 *GJ.$*&H2*7ݾjP6&p`@_F d/n`oDdjp=D5 ki(XM«A *ôMu{B]5VۨN mE@iF B0Zh|WEJP(aњb{hE׃D Pش أD&WY/NN>q.~ޯCpF( ^S(v.tW Sp hyDF*a. f=d.j]RU8Uf]iث;'p5WѢ]+t2Tm1AV'Js %MtQ= Q*Ҽ ZH42΁l[!XPKuGp_= IuL FT<HKZ'uMt5;Y^p?C& Ѯ k6.m9=f @zLA}ĢPX`;rvA`;HhԵabm^Q p$餕;|m9--zi>d Ⲁ\ H1*E@.Y+:u +ت8%ei'r{ۤxA1uT }w%;s:~n#ZZ +8~E3hI/rډpēı$#:B0H:¤C@~sG6SҜ^dVEfT[۰5նfKU`O42r콛W"qP4E+;c$IU &"FD"2TU[Ե T~@(jRt+C7_^4Ovw2)XV$\e\+E"2EARKf}w*'Uy [%cR?tO+]>W^e @$zh!IoK@!JT $[LBʝ@> ;\r%>A:Z]}uwϯo}@.d|-dz||t8e.Yɤ F0dn e܅gz"HmpgdKOrs[TQ@r+Xb|3{Pݍsـgg4v[~,x {Y.T-ŋH ]+\{;b6٘>9,fu{gXn3:؝fknٲ}m;XLxfG&ӏrgQzAVȗ>G枰z6@@?tnʻ 9,`9/i&`b͋g>0Z;D~g K9d6Nk6r,iqfC\.BVDQ$ E1ЯWG -I1^m"- ]xOOu gm)NQB-/^<`b:H:`0,:B5;@ek'ަ8A{?!Bt$ni %aCΖ{9Zm;O6(+@Tm^a;!Q$G:ʙ !2RDF2&t6 ^#E<وM)n2PX̏!m6{Q p6"j2YU5o ̕KZ ]$Zt6|jPR6KT8pGG d( C[1~~gi%l-! YD, j6M!k,/ JQY!ޣ-ēz埥BHRG[Y4IL%BȦTK^ʾ1[ di@[Ȱy ȴ A}h  BZ[nmHZ $tq!DBȕPF4h!t!>d YCPZJEQ̽D70wSG1+ 4%9!b6Y.&m l,,g(AM)D/Opu?_ńb(+J΋'e R&X1SHE ŢǀLZ9Dy*[HVl>UHZfh65 vBƩR\ZaCV2fq:᤾Y"y?W}zȢZ$j^Z e^,Nj +A(b_O&,X=:){ZtIJ&2P,t̫/C~+bT`J$֒$J!U7 Jʓ_Uؿ_<2e \ipz+ۋ@\\ϲҦNRŌp潥|  ~ҷ`\RZi|R̷+,U+W{x'O?@&46.{g0Ӄw WҸ"or QwJ OY+j2=۩6eS͓j۸cpq 'ǐ15i!| VXbYUq168]9n@"A:49zStH@c@&:sM: ~w@~Y{S@gݯCXuZz5A>/kz^p뷭\/e^JL2 Hѯ)E RSQNvtboG}5/?@D @=#сzE#e@=#fnh&|^9U)Lf2q-,P0B580^)pdCPrbC!r J b8{A1B#J&|"1*L%#OJ%(cߠJ$-V@ v\$C@X5|jsXi^6ެX dMc6aC?oeȌC&ʨ7_O`%P\ =bT.AzNdraĸB6RJ)#<5?E/kLlqTr7ϕLoJ1Yx.R>[c`Jmț /$cD>@@&kh JQ>oQv+^H\('ýpX` 3_.ƍgly+ahf=ÌDL5 &cN#\2cD|̳ j0#^z969eb:Xˍ3R#7⛨̧pqtpzl~̴9 b9i3MښkF{e3B`iRB p~l^%^WJc>>IENDB`awf-extended-4.1.0/images/thumbs/qt5.png000066400000000000000000000664721517644610000201000ustar00rootroot00000000000000PNG  IHDR`PLTE91-gI;^MmVL¶ʿܭȽ·źƾȽƺ»ZGʂVCɾ˽ƻfM]O˾cL²ĸ\HaK÷bK_Js_ǹ;Ŷ]IhXjZ]HƷɻĴꕏ񶯨Ɏwࣣʾ싅{ӟq^ژȺoaʂ}xĵĽ渦žxf˽dU|wrѐm[̵ĽhVvqmؖueplh}TBl^tg֬vȗn[nhd`veח}oĐyrO@qYMGzBt_ҟ|>74ucUw`8NX!ϯᅇE^wA׻J;azU҃{Ksϛ^ȏӺp6*F tRNSjdiIDATx{XSW;6r!P , f"&A(& P rB[p MZ8әv:3<39x d8@+7@(pF+ :7,]I.*ZoXZ,$:(|Z{Q}9yxi˅;HM>7w$@oo'o7䳝sEsz6wΝ; notwu˵:?RYzעjg$6;t$99B![mH 9|Rkdw ""z%Q e]KHhV5>۷) AFA`A/^7 6[""yL@`KQe0$6cA?80{ːhȝ\~XQE@V೨@:ʖ-kX!*bӒp3 bE,g߲b#؂`XZV/6 1@9^$7yQoJP~@fdoATŠ"#>a5&<( CoalW  W(o}\` C>{BҠd7,ɎA$"3E ] 82)]B dԷ&ɭ NxAlNV"ٳ.oK6䕁 bɲFqF)+EE4* gfwdu䒚uYӥyJXM /ȕt2e2)]hݳ]jZI2Y@&9+ gjg%pPf[X GسUWsNw^[(,\#uV nW7 nӔMK͚BTR6Vi5:}Hiactt2ܣ1d6VgUYT"k!AJUݍF *M׀VߨN #DKCdӅU:fL~)2[!M.S]PknWXZ` mRU*lQTkU{Ji@PYWZmaV*)qfJK 亂NtOPrK [#HJHRR3/+, .U h 4L9UP TI32rYkhB[%3F)@#A $ B?#8l$q$* p$e8BI$q((k'<$PlVoH!!#ywk؛ &n &oիTMqAd7"q(cȜQ@5d FzyҊ/T#CQ@H̎ɿOk.^ m%ѡC|3XYY ` PÇ[ZÝCq5ooǾUT*n~} Na$l]%rE3KkT$>?p?UgI%Žg\"H zF{*+s]xx{|ddbXbXX]N4zӢ!Ao}Î!H(c'BVdlioOtW&d2 E{?mTh+ O[whvbpM2kjjʪ t8 M ݟ;? @i$\$G2-Rr ajGk!4l;a'29uNt׀$r.RNH(JqjiM #iy$ybSI'EBW&,}WF".+B 77{s}Y憀]']OumEzc7>djtF'u^>< A0}]WC]R`6J\A| HGiFw5i1 a]c#` K KYVC3bG2b,S  +cĝ]t^ڍIିULiBp7f7&gY E;$#1T 쀰m%6 ,c;yơ$ Uo_eEu^^Gfdd-qvإ x A>L5y9$EyN,IfrF4}ϝ3l@!DOθIJ7Qԛ曬If MH6~^W}|/f 6J6P_qNFƹ _q:A/ s t p3r>jOr@T JFj:#=3)5$NO&2Ih1Դt0e0Ќƪ'!JFkcU/YwvO9W.Kk2|l\䓗$\<Ό? [{_} O黵9|;?3WUSzA+Ε׊c@ yrKg&Go4VT&G7i%M%ӓ`Z\9fdWDO]P ,lƫY/{$.Դ6JzW>*[ r{)AX?}UNxwEiMWd N%!Y)w4n^: B/j&6l Vn=@%yN&A< a,;y9"^tof&;Ag-&k#8fo/#b9ƹ]|1d>\M n[x{a=(#?N:dӡ*,h`hD岹lQh-b!e7(0.Xd! WNLvo.=OO+_ `c B88 #6^]+KQ"=o^I?~.~CV˩!އ ښF7 7NC] έDk 5yc[$|ًcڳ YS ߰AVaLs 6nzh*'I&AwZ "YÌt1e%:#_wyjt&ʊ |k@_7( ͝+@1߫ +jZ?GjׇMe35d0΀Ң.ic3o?._j#rܬ (t 3̊F1(|-"JB7##O2i <̪8]=koOPNT heR]4Vr4p@xɓ{NyOgZ .ӓ @e'ݵTkyDGGeŊC"VOAy t QHGѳx,AV, fǪQ;e*3ĝ]+L$bDYl"0nO"+iULF޴{lۉ<ĸ*;&8E@eBy!ʙ['E4z-v׋ۺS;U݂pD^raY1"LV(LtYAw /aoŴ h%YVk*Z( 5bA 5s !(:OfQ9Y zQVJz (vJL$Kt)ZY`"F@FEF3&232&m/^:eB`IpT ƘHAPW'p!sH78׃w(IPQ l7nA(l&f7O$[!bP46.>KAN)vuMM8ڤX|ӟw$<5}hGS amA YkVO}}}Gx$ ].vtr\AP1ӟ}2M9ҌSsi~2eE֐esU@D4BM7 B~s,K }:Z(>zs;pqE9[\+@އmr. ; /Z1$ lgs{'Ѽ:x$*Ne j3Ր/~ŹbȜyOP|&UKsm{0(>f-Ys.([;:cKp.2] D˺1!Mz+\iOWB۷GGoΨoWmq @ wzZ6jHJWs y:PAٟ?Gm520xV+5hQc \ms MF6PߺTn!O?.Zt9zIiঢ5fe&C! A;UC"Y*Nb$vëo ]weOeO1VCĄHM s k!ny-`|,Ls8o nLDL kHZwTNN)khmaN 9ͭˀmvxt?ON@ 0]&aGZx~,I"[D'-p[ z yM@ _bmC!\a淆uyxqz~9>/zΰa0;B_]~^bUR.tС~^`RLv@=6<&ʺ$|;]~ q}ol,ɑ)Kzic~nZZ--].t*l0/9rd(  ;S SS):4Sy6J̳ttm3;>af/q-mjyr1'$qn׮˩h`:&Kq;`Ƴ?Ty>O߾O,fy%{k&L$sa&'sgЊTᖂ(Qvc&AR霭Vi5REeGJtL*oeMj7,6P gyUJ5/L5*'秆lZ.]Wqq-?Fo֦~< mM#Ssb|dq5:snLNW ֚ BHAYL\Ywn eϞ29@H`ו^e]P:@MZ 2t؅!ñv[^>AA݀Q9N ه2l :6QadaA2wOz‡-Wd^@#ŕ^2AAއwx!X} .pRLJL!$8652-MR3\S*CVINX!@ dCBSbN]a3` Ϭѷ. t/޵vȢx!+ۋ;"{da2ny  u:ɋ]1 @DEwЩlӀ\B2S+-Ed ;:X+Cl0f;96)iK?!A@&l#6i^沈/wâQub>:x{tziA^ۛfD Ю!KQ'gك&\]4Nb 71^u$.^¾З!iO?` ~b(V]22tN(7ʍ+&Af›; B߷ǁn:NÓqo 1.nhۣ_>6IS+X4݃=q,x<43Yr 1 ՚ +z@=JE〈}﵇ ~JA<O`ZA96mMg,:9b@:9Jn=y0*^LicuAPxO }# ~hػgg,$ xCY5:9$7 P[*l1uT 352s7 ʼnMd")6Qc% Y,"+[lg k;:ct;,z!Eۑtor[^q2+[͐4 | a :9q8dBeyނ`NN c=`𕇬<[ wǰt@5eAm yvܲ},8"LmwrxRL5Pd$>&:EA\hn0!^u8v4|ñ GAp9Ⱦpb A043 8PAV* U,fCQ../(2WYf9$>SX?g0 Ⱥ k 0^^ȡ'Ml rHLã(pܸdw1ċ.9#5~c2s~t5M.D<)d :/GHo`Da!'gSaNf* ]5G6QR݀LOZ/z Xx㘎jn .%52 Rxc7C *2 HW]HBkȱ8Yj@~oDVI 0G^0 UKyxЄ;0nh14 fu Z '9z vqLOؙI}׮;dĽtyYԛ=i@c^'} fY! BNq'}q ﭯ WЃ4|YP8eQ4X N0$ p]<$<}AMa4D&ja2L60m ;ߠ4|߿ަE԰k3A: 1JXczI U7̱v uF22}Ya6"GqW:. \tL<:Tly[͹5 ܯFOtKֻCyqt9 Vj3?=}tӧJǿ8}jz $OMϏOO>7~>HX"Nq& -v7հd{(Hé}4@ǖcM*iQe2tiV:u(mUɧf3g8|퍻IHǭYed}P oqbcv jj. 3[ShU_l##Jt+WX𼮅7rQkJWm'+H9@vb㟙 &iЅ̌%d]mһEjq>͑HֹߋVu6Q٤::b΍H sKJJB@ {<QQ'޻ Iov@z #Aث'N~ E>G"4GVB2W97/?-(.96&GZVtnXTQpZeif,,ădGЅKYs`t)&kFk+? g &JsWBw,wV`/%$Hc|FybYZs$Ͽ r[>|1%eɢ zov7d$͝TZ' d˒<ɣoo5dѧ0 :|YXѯCY=o~ݘ<"LR՜kɱF$JOϡCf Ǭ:tZc}W39$N2xT%9{r.5,@aS;;:Këq렗xMt,5kR[439${N>wkҤOps-+zGr@`$E:7??>S|JœN*=`VN#UtB xJw{{aXk9Լ/2/_eAka9|/liPXJ҄ K}RrW-,$7:ysӴJ." 0:OMƶWߊ:Ab2yg orAbӢ zG o@*vp7z-Hn >U|iPxtJϫe3}/gNU(egn"iu(ߥ޹[;A($?!iQP$I%9䏯| ^4_ 8+Ԇ{fiQxЊqdFeɥ:biFViiU+F\USB/rX(+; 糳2ٸ>;{J?dyN?OǦ#29=!$~ާ?/gpyWaI scAc."zqDT:ȒSYq>nbUujSh4Or\q;j۫HN ZWccVƳ^E<ߙL0+V[CIzrU@RcBiWUNŨNg6l#ҋ\npndz98:doovD>ixTԜi*;|4.8Bc"S5Y^ep{S_t |sO3ʮ+g>R錗L=ŕ_ wq? >9 S7O^>?iy¹OF!neSөS;@cP>͕H:"X\LȹPV꾹ɽqY IgIzD(t?>wgHv{\Y7 񒜋#,Mf lR~k˟lPEWW'Ӿn|wMEf 9rn?с;4BB[Bⱍ k֥߯"K=1;?"k^OF#s&^ Ҩb\4a~P8(l{0K g:^Иk=z|Y0k5b ?mŁ%~cr޿A UdpwJIsJiI G(y*I#o7 9 +f a>F-[W|K`':+VMszUƻΝBNc{)KHz5vOE=^%ǡ878:<^u?-:z]49gu^4奌ޗ;ռz.Ms`7-joל>lK]]^x `ī抮_(Vc^Z p=᱊8yyl tL9Uܟ{Jgcݗ*( cs]T9ecg?F[IeW )v\iPURdǦ2[QM|0ʍ+JJ+lܣaJ 9D`u:Kmuc{-7K21'"x=.睷kFcFG48t"sY٢h#W#ZjQV;|y͑"|Xd0R;E܄Ţ$~9;M{hTݎ%]/ v`].asU1mu:n-#lF}{@Y~[璵Rw6#'&0}udnmẸdBK:kHQ=QWTR8+j9q6\y<.|YTfBWKd~E޷"TSV# ɉb@r6Gmൻ'bt:_ 9bn sٝC:rB\(@]h ,ZG*V6\3uOeԶZ+B,@DM^cFIOw X{c{ʑ<ysHRCb^t^;ڛimQEdXB 2Zf\PD?l#|rĮr+gln/1gCUSON"dyUV@ڑ{\jCKֹyш9zS 5 1 Zu i @պm57汄wB@#37:IIs%+l$%ʭ/M_&€Vrվq{XBH 7gsۃuqB;6ڐs!hGⶂ9cFݘt@kI*f?r` y@ ,J2hN瘟1@}^%" @~ɞn98J*3Ӝd lŠ/?) O{>9ԧ{`R,X HlW’8|;N?P~Z us9s{:Lxr9NQq+n ׳%|"b1/џɆ?O?!?m:Ʒ}TbVAw5dyWxVBQ6۟FQA_ӓ 'K H'#@ "/uᑀōG1QEƃ{~ɮ|ٖo?7 b[o q%,EۛݠWP%R6_Foy |Ǧ{ ڽb_PE{wDD"A/xQ"n ;HEϾLSBUO^amN+ 9NVRr]HAoI2'.%opCJ^t-*kk)ۚkk I]%W%R}}VYX:My?x,@Lk-rxon5zḧ́,5=uCM=䈮Qϱ.SBH!}*vD%yɚ?֬;Mc̈́hAƢ~ [4A<HYaaaJrZ RUHBZRTQ}6 bx7B7u>Q\uZبC[E;q$jɿ7B1[4HԂ,lo0"F%zFz{^ol ' ;B7>\~T҇g ^R}(;P.Sݱ&Q1/)޽a@vM؎ y<̆_nT$ajl> ŏM8|l*}(+;[oÜ5}/s?rrQMcвb($4{w%~ R ,':ϭUϹCgx &fݔH5'0Ȫ1Y2}Y\+!I@** {-մ HrvW+ޚt!wG8L0K.7?_Sk]=@D(5ԢӚqXtN"^i;&;p_Da)4'Jr&`\^ayb7ooqo߽'`ɖ$.߽~d{#ٲྵ~1t8x#[l.Z'@bNC{;NZ@dQ2ux*@ aW[x'GPTTahtcU7FvqH~Y~mׂ<.o@w? \'k.?.qj ._jOa?TC֠rʹQRʬtZeJ{7|&bz$Cqj2;dnGVƺƆD朢ºZ ?h)}w?R9-pen:(xM~ *'o ĥSáv7W!B鸰d1VuF9'[6/ #ƙ927ǟA%F9l9:Ը4arf&` S o!Gٞ卽2o}x:a#@&U&UV"5LbFl, M6-+0qA-vX:pQ=H>{qYޘsdF7RswMcGRcW&N zxk\+a2]"4xdыk߂%P0:dXy`ؿRaК_/峰7N^D-+f!n;ꍬo-^_`t1,! hς^ 8tP"舮Hz#2aӡ{[^M(=2?Fh^}'.M;Bz?4G%z¯%z.W{-&]Y? |ϼdQ-` ZTlwΐ !T`c͝-쇝㉄=Ҡ~π&Y4}}r~( / 60Ln+%|,M Çm}i+F6RCK}Jq:Ĥ}T7y@oS`srfxDHES}dM$R i4{,* }>G]rIx_ >*f7=Qw)M'3;;_~ן&7LF=HL'mʣTd_UN$B5H~zZF|fƃftÓZ&Ss3&]C%>8|d8dLu>lHܨoaJȅ)y@$G nآW6VDx> R BNLD{RG:W #S*mF:6{+ZS;dBm~o^Q3~J1jkW WFm:}MK'SKGkEE^ ba[\;'@ý#;bzTC8ԋF'|Q = 4a0Ep(}IELp>^] ڐ *3_)QPinWQ  RJ:f'[gȖ)ǚ r0 )I6α DP@pGEݭY!߆c3 GZo8,OO 4T;elMVؔJYvuFRl}ާp{D1F% /O̩V31@q.ϤtP}r+w*A Y0XH\wY|[ -漋[b/v Ňޣ}KkRwVC`} :V$k_a8rѣ=:=N9Æ:5=5Lr\̥H,_߿%Cwdž 7p #zZuoš'! 1*VJV{Iԍݖ:u'+J I23rCR4]k:˻(l)=^3jYt]Dб!`;8s~;S(VL'2[` آoxhPȋib@% WDVjCdlG"9lK*݁C^ 7 |W"g*/-%ۢ0|RK\bq;+Y" ->7^u߿n赕@r¢EDVxՎhlhpmY%ZܽAziÄ "6]71sݛ[n\ . pxz-u99syIG!wgp'L}nΗ޵BvԸ:Hf튒כu (ޱ !1v;o%!Њ\KM*ŘT>-ubN:$7`ȅayiZ<~8UyҕX;l=O8UfF7`(顫MY?䧇"ފjS׳I!{pw-GB&u-Zdyf >o^yRP;GR2 I &SΦZeƮ '- N%[Le_HPmowd Sr0#ՎH(Qa`I)ȌQ=l$82JkcVlsGJc<0_f ^Q|-%P?_cqهROr3}_6#M  MJLԘ''ɈفP^Sf:e .)Jdg gʪ9ņ!y|vOO!bo9 0ڹ\n5w9Qɟw̄ l[ǫ 3l`w))畐jDJXd\" -nqf-,K* _`-[Xq#L{Y!H X$<%wG;@;ݙ7{JE𯵖3Y[ֆVnsʸrq C8+\PX~r5qw[y]ʍ^KB&KS*6uć1Ğu|C!Iy‘RFa^.}b8rMx.Meg"+񄗫mf+zqM@pSJ~Izu/ݖ `ڔ6qAzr݋Q5`D gYB@hBnUrڅ^Aq \ZqǹW pFUpḘr'ns .SzrĵrC,nnB ^%Lap!~Z[TzdQ9C)~J4Tb-U4 )ho`bu[X/'A–ؓx%uڂFHSiU/%Ay6#aB OĨۭn6q%@;P˂@]q( X99FCbT{>/a9;4|wqH &(cUT:HC%z0QT2Vu*rTэ<]uk'i0e|ffgy d_'ޠ.Փ+ƕox\q ?|qo?; ݎ~J:[uWƇWU?-`i;ߵ__Au>|vÝ?^C P̙kɃN!Xrh>ßF~t}w_|\ Bo<qx;L6Dv1V5)P<"`rA~ۣc'}H@ W|k}ڏ_~_~7?~6}^{H߽vLe-D!ݡ[8U]$d?ԉ!61sKА"*Kv": 30SY߿O߯s|Ǐ}sޭ ׯn|{?]'ibI3}f郎,>3}:%lvn48CfLx.Xd!xDe;<uAw0ZW<;AQ@q PXA >"!\u.?'RHRKoR.R7FҮ 1q˂aR>>q ,u9gLNdNw`:i@NIG핎Z8_j73vju ;|vΪDn;K(DUK]Q >Qe7|I .Dn4>i6jV9!BQ)uCfcW>̵8:^:g{T: 8g;7Dx2 c!}ЪK<>s^𠇻>PnOI.vo kˉWԑ&1ol LIݸ/0 8=".juu<<4$SBhڡvbۜO?,WVS3:!u hfi*A& >'1]h#ĸ > Jka쟚.zhۧloOS}Wݫ١ b́Pz@5 mˋzQYU_EAOY{[}_o=2|'ggЏC8a{{ѹ'`AHȱ#(OŸ/!⦏|՗aLԻ oA.dgO^֐*fˈےa8L@Mp#eo6S2y~j9Y.&ɇ}y~fl3\@͔[.Jg>7, ? ,k2]6O5d?_ hTT^D.cN$ D$ 4(F2KY]W|;5#i +'w"̖b 3ǰRɔЎWSL[PEqgzGcR)1%؂ɖnAYDpʻ PLl[b E-D$ .&}nw9[!<fLc \7 &.*紳kKMB%*qDbHWHfT|6c3+w:mY0 "9'im#6k@}Y`r ^K_x$N8ms|eLwVqAx6,OaGbH(LM{#zLǰ|6>WFH.ċ CYLl1s!2*̲%zY~r(Dgj6$y,\LQf>OT6QH,3D@(Rd؝n6;pXER@YmZ`SDZF0iƩks.܁pG10:mݮ^Л 6]+Th11-L /{&0@"Jǡ$ "((& lL0!"0 Np M "Fhs`悫 "\~5.,bl|B١V ҋz>"B ~Ku?*sv 8J>_/n1i\r&N`F8}8bB.<k OU*IM0ijk\KE}z4R}#=&KMAPX~1:{?CMH* &ʃb? 4^L4<bᄄam^oA"*҃b1CpiKC-O?>~̇~iD͓ퟗo{uD%7*;3y E쬛ܥJ^e$8'Nr$*[L4;Ĝw^@Zrok k?*}S~&!wӬs S07$am}Sm d~5I}oĆJC[rt86tl7:Q#lFaV&cy[4j gSv7K=h2ȗ7# dX^uW420ƿXNLi^pt$Lf26&GߴZ4dm';m;n[cbN&;;#:bX۴v2ZZO?\ug\Xej# |(|`~gue N+neySjߪ+'Z~.@ G޽ hrYvD*Y#YH# CD8@x4ISVۅ#@0|QfF4:f4pX~I9l =ȹsn⇃ #@!KG idVՁ.yz^_B\/otJ խGTStB" -k@FMpB5e(OK U*$4ag mU e3M288(CX^n+ P,:< 4GcP$:g;DCb &0#kO qib/K3rI'hi0mܤ-ȶ+OcX$^(3`KeT0E}۬M vd.%"HBL.ѶmEvt"VdxG_$x2Ȧ9v2lgH$ R[;]CBF)$flF]f*YtZ#LVCL 5Vv""ZY; "Egֈ=  `%64oFy}50Z49R!2yUgZuo9ڧ/WW %魕UI9@VY%KޗNdaVe "A0ҪjF}߶D.xGn)t)1ẁbL>`'9 <&SHЮJnx.$ iJl=yWCaGI Ind+;b?\7ƶkCJt{# <%xg` p>JPC2vd-"+ƕIbP{QvCk0?"H6.Y4ci6dy9f F*B`Mq\#qD DZn6dyLV{Y<wVsvZ־,!_z &,\\ 2N5N=qԗUue/Mweaa_רcf xC˪|{忺-2Q242 .4\uUƹ4x }N_\R擥GGFv- L)FdeMoG-*Z`?MjnYl)+|3jiU^D$#i{VYhU ri,-O֗Q SM%#v6ىNMΤh-ZMr@d+ÖK-Xt5~d{2e>;œsQR|@zGFP*#5]keflv7hjxj*eT$nDLnyBө$8@Qm!#n.hg-QG8I%;DOAXG; ؘcxw!Ex(0j5xN;øQ!NelDo&Cg-d"L&/Wg0~P-[ᜁV")9%=+dؑKV!(*RiԐX;ʬD0ƒEQ sW>?ǣ'|uJ(2Ir+̻dhX,IT ɒ &ú%b%'] 쬸@#X0"PZv%)v]&r!˪-0\Jӱx5|=5|]UP)üމ%ɰT,.%lYʄz =*$ʄY̆2y%bQ",9)NƷ.Yv>֎eUf5'6$2-oCCxF+0u kEdH*E!`pKn!ឆ@ĢZfŒq!XpВKC5N.#_rd^R/Ց8оaTrT"?H&4J48P[w{G ɾzNII 6^TC 6x !Mr7k\^5~k$b3!T/IR Y)h9חڄsρ\S ,"❚Bf ;I  xMP@N]]u'U ]8 ECbrFUh#:|1!@+}̱?<'E,u~9SC8͑ED`&S^$! >SĂ.]  O0w  pȳp ccFˈK%ʇtJ3[1w&fAX{]4d,\fね`#H$2EܬfJn FH6Y¡\0-xKY&CV"J@0t:BYrQbg Z -*fӻEd1̺sޢYuPS^2˅)7Eos:I>w;ׯRC 7Otp[ΒDL1yvk+3V|Ř;a|nʇtnlLē0EmS$KfRHѕ,˩pk"҆R Vm%{8Cl%u+w\^7Qf|W 5.Т? 3f^ 渷)u&n.@^!>C` g|>d:H ?|>j{N93U j#+ IENDB`awf-extended-4.1.0/images/thumbs/qt6-menu.png000066400000000000000000000671531517644610000210400ustar00rootroot00000000000000PNG  IHDR`PLTE91-iJ<`F:pWL¶ȭǼ\HʿʿZGƾøĺ_J͂VC˽ȽƺǞfM]Oŵ߉iZͿ]HcL²aKbK]IǸɻt`ĸr^Ƿwă_OǼ̔ǻxfעڸߌn`㴰ϱþԆiZĵ^HdU|[G}ygUƾ}|xtjYm[Ӭvwso¥Ħ¸Ԗufៗϖ}TBtgnqmip_jfb~p[JͿwqO@}WG@\ZYdKBt_k@MTeK(Й+)(9bCI߾iLJQ;azzҠF>rexF:Ca[C؛[賭28CtRNSjkkIDATh}P[iA^TGLHdMy11cL*&M3.d* Z'S01v 3ܑGpZF NMIGy9sܷgTj>/}˳ݰ᥽_x,҆ /)W{Ay=!8!!?mСjXw|&(UN/Yb&!rn剬Rsg }@p@諯aPC z1t-ߨ%SpA*\[JL QJ~O^Z\ I#PM,;i^ uTRȁ5̆NIs<T_rtIcA)윒ef)Q)JaȤcZ8bi1KC2/"E\+1uZd2)DZ@_XT??š.!/`=5{]o!kl x;k,p0xm UwN$@+,\¦` SIǔD`AL]`1h e;5u14Ǯ\M# ͣ2 =~/ڽ>b xe3ԼE\ٚ=O?xH6Zrgl6l TR`_xLm#7,,NjʖJ|-jKIv[,eۂař^'bZ\sTY'y3rZҖܬy扲o"uq=dq2tHyz̍*< zH -<7~4' 8.⤲h V\9º)b%RA cDraTP%.$q<:ՁǤ(ձ&f!Z\TtiR@E \X.#1DP}^:Ƥ*E46&s8w]ra<,ﰫdlZW4S.Fa9El|G )f݆ې1)5$T#'iH`iB.Fi=g5QB05:,0lVwQ@KOf0PY];fpQWRajt^3Fc@x8 axMRϿa'b7EIsY}Z@=^p~kt( ڽ >=Yoǜz،b^}l ƧCk+vB#jp؇mj:F:.pOc[1΋5N@/i{D7էR40&t`@o6&-_GLd_AT) :G*Z@x=VXBD#<!iGT7٭bRrytA|(0'zh N_?L IC Q& /LdQLGe!5? I2}=Ai){EyO|b뮒y%Cd*+U?0/ 8t)&L"P둄 8D<'Zӊs,jDbɏׄ{컸T^>$~TS"qKAM?g$p1 tck /?dM˟ƅ91̇_l ^?sPȖ/ϝɥY - g>}"Rj?Mvbˁa *A'\s\%ϧgw۷-e TA fNVru1t.i4LG/pBA$dr>d:y@b "LnZn)-|/ Droxja!%e1 ^  A){3)aAۑ#E"@+.T%~!.ݺ,6.iK*HRn0{5=J46G=c Oln׵LvAT|DPV%bS)Y- g'{T6T9sNYŅŅ:eb$DBXkD[^U9ψϬvQ ~k #Bӭ[ٷHE*i7[8RH*ܭ&r@.gFgr }[y,&Ȅ_s]''fҥ|UoiLg~.Ͽs~ HsW;}NI]gBz۞VM{{u=gNYꎎs=6p yFk{OYݚjW ПEu撧$A .N Hcjױ<)gPX^^^;?PޖmlymX7Tm^M|A??I޳55rS5GV4:UVUv[څ4RTZݶs1yAuA(ٮ҅z&٩/5lfv`rV ƃdJFLt9>l{41:wCXEjH/꼋PEjmySqW QV|؛xYlVczV+B nݔ/ reP:>E| 'mxr+kw짂f\^:ťf0lFSECK[oU!IU+a%EtFy͡xE6Hmr*&րYS,"|3xQomi]k!PbғLtIb%V:C,<@M\ q:=7E1ۦ>ƆcZ'pd;j褕3δJ^Б:RHpFYksw|I[iܜVQ0?) D)B^Ԯ] [Q[@U{ '0`)A؟#嘊B~'L42j+!@*< !]՟{J@\$ċ]G5rfj(AO-Yb št}z>'"52Gi+uuUs'7\sON w8+A4U#1-%h*Ȧ1ieTdJ&-҃[88WCEB$W+'zN!QhoŇ˅=\V(5,u [iJ]JW˭uJA\NS顔!ppB 3Yt"j4޹΂ĈOQ\8}ÊQg.:Kr愨b1xO# -&ZbpN4D_ !m^`2/{U{5vίq"B")n?N9AlAH6ʉO&"o2ETb F',]tQ!!5 ;9!B\8ׂͯjeNG56A&5lH'&/iTSvَޚW.e}efyB' !;aDN%,+ˉɥ2KjfFsePp3^$gj*+ߩȕB*I8Z WK究 ! &Xh\AɨzyȚc!j=$U^}[Oڟ磾i 򂄄\Q"XYm!ulؒX^ZVR93KhjS~sB~l 4BsN]PS8SVuY҉DcJY!QŒdO(-3 !x9Mͤ.,{߹NF;tNd'ƉߗXr雄t^3 a7 q|Dn$sEbVUxאv"C E 7(!P͛tRw b=B y2>,ba n3w]4#$t"s?Hj4bWmDKJ'ؖa!!N| ^( ,L3L厭 Tw3_ј:5^]RS+L| 91^YBCfjq%2Gn.jr-eu oyd;oA𢾐_,r2wY\1p`N\/N>RajM34JBT%z* J닪U)_rEװ;&37c}&ðe ħCs`oqeW+l b5+H!#05a.R< ;,| [4\ |0 OO-ө8KM d8!7Gof3u\=f5Q',g|m5d૙1xd23O.PŹx*ː!'.%D"!vSAq,.7A>!US'+Jv 9a8_1!*9>-|px!ߌ*^Ε@B&ۅg2%UCWTW8 ;vs3dv꭭MN,I UjF,p+8)B;=`%xbp;FPuratHڊYSᲨ!meazbEZ֪bk_(eQ 6- Dvٵ6TL{|S +奓#"B5vߺ䍏wvrnn0:KQHix84!:x)Y"HQ{'Xj 6lh8H/!Aהjlқآ-)1xNb#?r0pkx-tYHDqkNiwR'qQQj/w0ʣL!>+kk{}rZO*"՗^9FOR9O?+[67SH ^שDmQS{b^WyÑqvB#ChGhƭPtlh=}8t1޹5"_ka~a"1yq1 aIm0y:0k`>uN\A7՗:rmJir$Jt &U| `wƭ֣[~ZnZo E.ۀbBN*Rgf-vF=!r +S{wzPcMO/AkVh/~"q - bcX>LYSyBOL1B􊺍rDܲ^Xóӑ5󄌦 巵SsF.e m@VPH` mB 6:AD">ԐNeYciBXyB[>q_j6n7x{M47$DK]t\ So*5ePm4惲ցӵգ+R~X޷v'_ahN1߄c3/½3,lZ#IJFr;pT=2BQЧUws=P4 ñ9!؇4vH1 _36˦U|Pl2mc4!)CBSOiBfG癚]U{).M8E۬`p}fȡ~7Nm8.sF~ۜJ_V!ΘP]nL)!\I;Lۭt#~͠q@ C@Q @r Li/GHzcXC9ubB(plin9%19S*) bS t:t剺dnbK>C&ҩW~lP9 $ pj/!K1nAu>h~L ̧p4lMSbDv oUH)=Jm:-`RSӡBP)epeeXG4npD0 j)0hp RH mtK]ybX~o8}@vqn84ߗǙo0`}wVgSɥeБTJ6!<8~asB1\<L;wZhbVjU.:MK@n8L347emy3 ~cg_1np@oCO}>ї{b&hrEEO'Ra*7>.6 p6qjj37{l`'4:t_g ‹a<7 OY Ű 3xs+}<^gYG1?8YHr>IY339+ӡ`kI=[6[ԑ!9\/mNA,\f֫;1,ֲG# {xdlxLpGǫexu'>ϱ,7gwݙYN Mlx2y7M9BC3H'1|G 0`tl(KXMCY,!+XbVv6 fj@^7 ԴJ~ǎ>@A~t(#a0~Ȗj/bV[W>Ĝ߇sçyBu%2Jш]9ELHo~dr B#.S#iw0`L~v{2~G ~2t~) P>/ٮCs;صQH35B*O@^T֮RB=&ijT%[%$䮜xWW!y.&=uHF-x~;4_{F߈8(.'IiЋ`"^Gm. b:{WqasJj/t6% 80WNorn}A~yQ 4N:%k&QR2SѤrr%ڨ 1Q $SC2IP5^58Y )Cdc|!7:R2'E%{?]P)Al)E(6!F'ꌈpZcBd'fd7I@ $jFޱӓsnj|_p xzGbf޵{`mfl@ﵝ,_{G'J=:yI:Wr! =9Y:nܑ_۰~TKo?y[to`Rǽ!O_ܱTҡz&0lR6*iǙSWݿнM%zrZ!tEQ@з|ͫot Be#w8OggJh8OtVMԑ|}% Zezb+( O| ՄdC%gáML<؈fF v2O ցR-r9{fuk,7wk󻛫k̀ijjpUnBz)*!= X'^5/C~z󩙰YлJaTCWP`m_cTATXmQG`Pn 6g(RftAu8 {rWjoJ\_ϭ-.~s&.ffuAkEq IB:p?i5گ1&􇆖e2>!BZkZ"DL'n9Oq^$xLƝxx ;Kc(^ډc.8[ko]']×/t;z.0wCS%|rzjåK7ߺw9)! ,-YJKl+S=jN)gaξsq䣾ڱAGو[5;Jf%=NqU(.!>zܒ~{Rt~0W M]]OWV+_ ͞~g@FYU6li-(D>WCjd61b Qp(RaP( \0L]@ȼ$R%{QWL+?]c&G3S> ?|kfz4!i_\XxsJ؅]򴅴`}ZGh~əI?!,,\&0z?3ۣSSOFnπ'W| 3i7;rDa".*ԒȄ,Ew.]f;#=|4ծ3ɯn?Xer` du!jPH8E[:#T{m$B$gjF5MˈtU;V[/:+YE>f 9.rˤk F>zmZ7TgE-73z;ޤE,Y;!=^/B'2МFȀQUVD .)ΆtP*ʷH -#6eV{?hLy_$^S؏5(JMmlԂ@%U.PUg60] ZULK)ciziImJ&?tdt"v=b#BP':SnJ('e D,ncjY~?41:pzP/Z{1q69w<~3W!U]fr[tH QKadz҂)WфXPR zpEb/ ?96gU'?:j`hgG'{IM%GAdk ?BcMnAr 1Awqz-"D|~෵I563ZTM kE?i`[6FI%ܦRAII]^| LL2,~$!%4_1Kr{nY 23mt8G GƜAp8H vbH3(\m5*3!޿uK`ry199!\g=Ç36z Ä+ < ͋R,U /_Wɮ\U&#.Fu 7W8GpȬ FƠ{G!87dAotA_?&E|BZpBee\|0b@UUj]ZgF{K̍G,f#nx̍ >ac۝c?"M`E^bn !ɊL{N*uJX"Dm i+4tr;=[+i5 :IU;E#/4}Arɓ'B$Io7~22Co :$A 9͜}7 IH$勫foU9XK9!-E&&Gw/^h΃3E֬X W~c>č͋ǽ?!:VBYR1,UTBDDųYq1/Bc hW9mJLJIWdVĒAȨNk}־Q=[*n$;!EHu7_2bw, !8 p;ԛ4J!ʓzGD =E%Kn4j`xmRN &D )6a [$Y/ZK~Q4BX*6i ,*u^}8l"#4:E0HxʢBSeu1HH,n"m9'%jȲ0r"Bɂ$xF!6FAڲVu,癇xk#3 1pģ}{zoi`Ѝx@75B΃رŪ~`QY- )ڛTйA gal p#H80 :cs:G-/7!uyx;9mVݐTk= N a@<ѶTK\js/N݋7+:% E^LHsQ[;y9Xd jzZvi̘_E2N$LDQXo W!;׏LBRHFȗ+sqx'7džy)٫2~R%&J$xI~`-a3^0^#v$Fܒ$)K62-7B,/u% h*f^Tj<*; `lY^I!'D~QNVB||Q-_U-z&b"b+T׵xg/!%$7{Ôh;4)& -}աTTB8[B-obY0)p_:BDc"%\~ E-m"xޫqimZ[tSh- +e3UuLl!TؖNy䮇$dТࢶә5yzwg~0H)d[eR畇p|`t9a'P\>P1]<`t˯C+EȮV̑eĵjڊK֑!04׬i.Cl'BNfU%HPZ1#a$`Bv;UසPVIv8HIh;쬚=T؜ Dw_Pǃd>"5w9NJŇWU3e~AŒVRP11$@|ќzEaFSCܨŢRэ4Al,2M0f"ǫ|yBjw/p*/ZgmqtbK֪-9p<;wj!36B*SU0: lv`r҉ZMBzF0 SzsS.+CG{KwU=\A]/\j^U.RGA]m^B 9ABPss MH[PŝXqt@|= 5ߏp8{ _C:yGM٫Rۧf<߳}Z ?#EBm[U jNSn-GWtJm~l@%?HyZ!z=m @(B곔 ש@Psd)j[`FPu٠wjOxf^͌n5vRNwwbۣ`Z@IԍS#N,-b`0 =Bv8u$lǣ[֋icO $D9Z:Cv|17m9Bn;F;#pE{\!ל`#CܘBqjqש#@8]@1wb.2rnH@;P׸ NYD=Uo@I!H*ql'-,Lē,l^I0^fS;8rбi@p 73A,V k[WjK[g>Gj> v62BX.ì- 9^Dy ㆖O!mRkc@@t y\sJD0Y{CO g1;kؙZι+__V/B kW]HqR!R=T -"uFW2^ Q JGh B%n|UQ@mraڏ /,x5"h  ,}vזp]]s|g5奦k5~V_\'_ $+Y- |&/UU2yQ/Y$-UMeDNxUӏUsB #~gF{X^vXWx`.ʕHJŬ {񒠁?'w] Rs@vz{WvB,qp2'(qq5̕aB~]'x^eo Ä*D-o[/H+8eK` \h0WZ\gCH>)<+F hMa8L9<@OPU:W]@~I{5R N [6^DM@ d8a.;Z Bi ;b+ ',8OJy骝lo:r Spv' Տ»@ gkcq~w{tZPĮx *p>l]ֆ4z +/$H#xʛtg,[ԅXル1)أ{P-DH4I0 w@oE{=x UrhhY3+|.eRiAZ9OK(bE9,4DPOlױsu,Q*aѹvIbs4As}˂ksY99w\rv_k@.}xJnS!gyV3UYTVpGBQ^iC cUU-(JfE<-{JN$)P nGwNsh7՘}A[Zݱs&|Zrsf=[<~=?.@(4[4K[$=uYɫ_0ja ڒ`V:\^۾U/mdW~(6V)Ri>˹]N8_-uQӜ7qWs,u.e.ULF"r\&!]};3/;~?W%CBvv"=@ lp~ނPE8 (cE9͇cBTK `JGRie$38f@78L{Sy : BuiC{8-!s$f?ePZ{Fe}gG$ӹ ɫ!R3:_4U%eE`;AM"3U ]nn\!ϝ,,Wh?nߐ]Nu]no:z /"@a Y) <4 &hyAaNKw_hB7n7zcfGXBN +Yî@p,=C}>-Xwkx0zZpsv%m= tnQZ%J!aBK:&nѼ$,ӫFsbz򻃾 \ 6_{ D$鋺>!K$a092N!tߛ?IQKm' SɁ6ӑ."H9Li ֘27y5|ޛ/<6',d{qŊftyB^ W@i*(bQҴ+d@9䈸4\|e2eEǾACK!GVA؛hAJt^7a foRKSGV< @T48Huו=@4P0.uPNx?1p@`qC`Dq"AR..kDpIz< Gs^\r\JH,|fR:8ˠo-%;ӣ|0Lߘ ϓ=*R \r{+ 7S_\~86c<X6'7 [Ǧ' Y3cwo^HL-XVh~44=s4p`~`ٙ 7 YDpUl.GH4V0ObQ (Ltl͂q;416 7p:FL]@P _䍌+X˂tA󒴪hlizH L[ފ}kRW@|l+,NT% )ިSKCk  OoQ8Yt[NL$hf&1P @{*0eeYu" bb#-jXTb碽؛M698|o[:3330/<~^37e'm/0 u"90߅X$Da2PH yN;e kńz`v}9~ͷ )-m}?j1!0|ORt,#EpTȣsE]>- ɀwD, M,=ZooW{ ;5߭վ/l~ ĿR'c ˨ z&a!@c{xþx9G}ͮ/ڷ}+[G}M|Q#PnLzd"p <"_StF[[͛7@ tfؘ~j B7n~sR%D+a@^U(ey0H c!ؔ065Kkݙ` afˊ~޽oqWx~^֥[BdÏWް,ڀ e~v_۱@d]ޘ"$ m_mƍn_\ zOl>anv46ڻpn׷r{cq,CVŝozʢoY፭GkknmܳGsomQ@GF 3 [R~̷F LZcn WVzl`p$?Glj>t{qg CD&ȋ@$6{(1]EDkF#ֳ$Gvas4HzoC $a?6wFcn_3ƣN71zT9#ݾ_KQex3FFv'(PWgq%zMWu^Dv qse s!v='A!>;BX$5 &⛑neߴzq'AN,,ce vV'E~Јee( _Q8|xOd !#cQVβSm1|B,?qH-| tz6o4r@Ќt1ezhSo77 "BN "!G e"HGh D@ Ԟ x9|wHpLWLC-iRBkQ6I N4_$ʹV 43ACk9XF_YbnV˃ j ^[(]z#pAo4zS˂הi+5A Z9G# j )Z'B[)HGW*HH tp`cLwp'a.A/ 749Aͥp԰HĤ9.-YWa nWV(p6$NML>R[QɽYwCv|)|{[#ey 9"|R $*;J/:KT5R^S2oגP*w?}ȾRN,-k\x\ܽ:aG %uRQ+LS'?+ՙ%nnH.9"%G R 'T-հcˊ nUʰCU#xT([;Rk2kL/ ߈>T\9?22kWIrn: Fv7.ՒU߮)ǣ3A{4>|GZ#P]vh43̸c}GtWk'vr6Z}fpV d65֔7hLFN.E7u5h|]MטJΉp䢩QsLq@EtHr) IJxVZFoJguCns/Nu%5ݓ ڥktrz y'>O;G tz!MS4:PTd $)&56К2fdju#7 &xը a&0Ǐ{YBRk+;cdOSf𩰋(Eo4?ȇM/#;@>V機LP3 V%k!{zYWVY?{G@NB:QyB("!wcI@$THt 9qb@$~f r9];zB1{g`Wt`RWRRwƀȦb'_<k,E\s,HZN=; k[Y0L>?푝ȠNՕDbSXH@&?1+6r=9Ѹ?zWD:}t{T]U|pXy*SPOIR41:ovoW[ ep𫃅|+vR#l;$G`iO{La*8;(00)81Wq!h*T`w,zJ}5vM;E4w<QfU};jo>iiШ4qX^Z SHar`26 jU,,%"/4UFjTTSlqćK{.L.?fפ-hM$O=yGOf$  !S\EgQ#<į H1hqQ4ф[(ǕckٔMF _wo3)UZ`SDo-8)eSj><uݹ^c_ NzMn5n0 !٨_P놌 @)l&ST rhʴ&Ht6GŁx17Wo{}w|俷I lL(l*F!(\zQq4 {4VĄS5mR͆% A4ڈ~p6)ZA_P͍~ cC 6*UFH}@rn5]Rz 4ad߀x?ȏϏx!FXKhq^g݁~iCéKZ LR`ijs_@H3-3]'P4C t2#ێC mBp5b:]EûrS% }"Sus޵G FSۂv&lΘYԭ+tzGdN3Y R4D1#4:N C 8Xab9֜'ivΙlO;>9=\--C#[0zQGxU,Ғ&DUאN^cin@"jė JM!8/$ª唪ƕv␰L!IuR !H2 :@kQq=-S 3 ѥU.OraYˁҴa]4B(sK`rJ Ri YoM7dC CM8?PN- +X S=? y:>!ضWqu Ǭf362Njpœ p%S%!(D}%w#Ecvw{iukۋ`/a\ڌuZ#ӻNZlY\_LW>)u uS8⻁Mܻq:G'L e }!CY6X ȟg"NP{8e @@jdd,#MP4sjIENDB`awf-extended-4.1.0/images/thumbs/qt6-rtl-menu.png000066400000000000000000000674671517644610000216470ustar00rootroot00000000000000PNG  IHDR`PLTE91-gI;sZN¶ͭǽщ\HʿІZGʿ¶ƾޑ_JVC;]OƺȽfM]HߙcLøĸΗbKĺaKǸ]IƵƻʻĴƷ܊iY²s_ʼƻʾќwn`ȗiYſ½ɞ֏q^Ţxfؒ~͔kZ_O^IlZw[GzcTϡވƾt_sd~yvxtp}fVü쨐ιrnkዊ|TBzlՍsfҷlhe[I춥vepmOBdQa^[ƒ{IKKdKCtfLcx(-+*Ub7k͔[b?a(׺ 4`![°xWOn/_Om}᪐Hs\V(r ^fLT [cӶ1m(gψ.'9"욘l>f\ 7#ʁ($}nX-#t)jX,@9ɷe_9cWw%x}V=kWw0N~fD`glrmCr|=iq,Pcg![VW RlQ  _߃V&'!x8 5 $|;'vDFFyAll  Bd;/ $ޅ`J|&R`02yWۤ5RM8=4@j/F_i jz"wYO ҫM"M g n]s }3l-0onX:uz̚QBBLT8+laaaIr'Ђ lLgI‚' 8C R º!b0ҩJ C(($VS Pvҡkh#:BmE$A֧HVb@1[ @fUp AADIԑ5f#C%-`<%uDM)_g^F{:i(Sj)Q%m4}G.igD81V8J4&V:_zңSlVQ"4D$blN+1l&[,Zm[CKnN+_ѧsŃh\óZyZm"6NOMO2Qnc(oA:d` N#4&̨nŠ4fB-3nhv jq`s(jsL~::a*5RC2Y.TRCR9d8n3Y©6JaR|>P@4 Of A9T~NSQj8Am,%ˍ'xo~o> QY3$LnF ]GLA$ɚ]|, yUH ԟ4G뗢%ESh3ͻ͹5[JRn=,MS RסF>1RGiT̈!Xŏy3(I5 /uIe֩VO'7?7I|55$ǵ= g=D$myc☾F+ Jn چox5z ^d4.}Mh<"08?Ȟۛm55,82;T2H'V m'˶ј܍dXr}?읿Z[ 3[j a_ǰnR3===gįE1@ o"uXeEEe|L<UlyS2l`  Kﱠq8Q@tMzZ@X=@kyǏ=ttWTt?rTT&1(Dl xN~ғY~8_jC2?TDDIHB ~ͣx cju\9T6fCD===BI8I RÌRwxFjPRo-JR!\p&L#29,vWu j>9ڙhMZCn?ìa@n򸿻Ga'5-|^$o|nTM@`urތ ";#)R)2!2%<*/<1WJ䃁DP41PE6f?wE@R\NyA^"H4WZ,T eJyA46e@(E@>2gjE@%}GFerQA)❥ \)oT)KÕ 9H^?'৯ )S+HB(L.FrG …%I)H*v_IM˭?㝠tE@"S)AHcNeFd#Q;%=G=)GX{+Y I\rUf,b_4b7$xD[B6i6lDž*j!T" n~-UA; $QK_Ɍg?*LxU]Hy0|߾hOwJ! 06Fp0TMis,ӤRmÆqiDҏ<+ E 98ٸyk~ u;.~q_?09z< qyR3'Sikis@ڮ];&%ni^EچD9޼y4)]DF 6$"v|%9q/#tn:=8̍s]42y䵆mC@˹_]zwŪsuww||V#w92V22 j;!(n*2 jvb[K}i}unUm-;h/\w@ @v/kN ^.988xAB JNܥOڎ_T%8ڶoDhѾ뺎k\k@H j}{LGqMs4gсsG};+E$"8~^[ݽzd󲀌_Xn}vn{7՝ԠCT#%-eu;ϴ .Kz%n\vd_sA__7?PEd5F,Ie1:ck~ CLEH[%ʥ#,)OZ߷xEgGWR¯_.}sj?qEa6&'9blv&%ts,\J Ҏ8 >Sݖҗ XyyWY/8#j9QSZ[xHX^{-0YkM@QCZp_LT,>+`BlznэZS#̔0)e&%A)Yd0Ib_IrlZ4,^)8@l%ʥRgG7_Ho\K`Py .& -e/k2ֵhY> ,/5DC&>;e1]Kdhvyܹzp ὿hժifسgk^*Ͷh4L1oOi}z&a fKڼ'$ϓi; ),%S'Nlj%19b/.E0I`E mq|*B!*,՘gid~}`D1j7s}w]"˅"Zt:/.)4A"M1#7<KFJCgxhS᩹iSBO_'&}#p8yCĄCw_߷}3GۉFa\]JsYqNc88XÓrHYRSYp9Qܑ v@Jk9?Ӏt'e*oP:Jn XRwaOW_0ueh!B*?Mb6=v0 (#n)‹/ߥ50HO4vFyk꒵s/h,l@ e Zi(SAQxhR1+;<a!u.܊f cccQ0^^o.`*!'"S?\P/!^<{y .!S7)XctYMa!Fcи85e8e˷5k<3P`8 B L/G|BV,O_>K9JȩL,#/is k:=x _fFGo/cRK6 FQVl_,darZL!3:,ZшXJOD\tN", p#j˯f6u !Ⱏ#}HxH޻e3_1yd]BN&{>n/zH9kOk^[@Ȯ37ν8r@Ɓ݌7A79lLȹU8"g## 1ސÁIrk~ 9|Fc-k{nܨo:NsCD\QAe84F=R9e _Ǝ'djqzŦ8[x#'71M&|0gLx14J06k-r[Sօ_B 0 s4do DeL{:ʛe{>ur.]2!,Da7Ph7,>fy}\O -&S.,!(gd#7 t$dѣ1 .BocO&}Xl$0ZO&{C!&"C Щ%, АVM9s ƑbSܽ?CYB ܬP10 _uA믷 Yv*"ՒwO9=!+`u8E, qcLF:Us!)ң9!,KȰ{znC px`.eھa_~X ,d訌!eڴy0ep=Bt1INCj: IR"dKe:B dӓx*5-RccSa}T&C}!ʖ=}??z#dtl%rȅ<\jejGuS79&93^9,ސRnޡ4H,8B/41A\!Np2q n2/MLm0D"^vtZĀcE kdu  'X #ehP9fqw_;I<oO:J.>¯\mt ˚*>+?Iљڦ8#d4-*ھihTJ;k@"u{Ns!ơ'ySb1y~w!:3{=8lMS.z$;s.j65DC6B8S)\u3 g#TQMMIHk e؝w_<9622<;V J]S ju!+af(jW 1ѳ&hDH6Ba dcD$<;&f|/\\iobZZz]$ w?vڠʎpdlwOOPYxzDta$9 yAZ vg6k?1huC#V]N'C+G@4! C're,\:tR[HB)q;Xٖ3en`6 y'gay =Z(1k rD!V-Q̆xJ.P%9O ,A Xa`!WE *Oq}~wZZ+TQXhUħ|O;5^Aru>!x˥Uρ_I7o8{u=ɖl!a#.k>n_ DV(\W=e]p햟CPtCvZ,iYmNʚj7U~_vYԡܕ0AЇeq1}v/+Grs,K h_%]ܣiȠ3!!Qd8l2Yl/XV{XY hx}BNվyҍD ːV ȫ͘56(!f@ItU8P@PkShu'.[{=MG'|6GH6B"~{`?: ٖ G2}*,(_Uã!{f݌ JSz`˞|fV``zOoWSNQYXk ICQ$N  ONOM rʵ"$~bpJn 'T)`e%9XF!ϗ7TEr f6 gh&3fۢҬiԈN!`qᖎl5NG<$>$19yB_Ӯ`V;T0(MX/VQ1aBaY|IêM,Wڜ0a.ʒ%Ą,eQX[-_k3CvX|gU_="x _neCq#8No iͻU-Mmy7Wtܮ]n) 8Kxmz6yF!]X!%3E4-=2::iW e}>7v%[$dBF:hHxs:޴SOC=/ֿKޢJU~oYV-/Ϸ WIKkF"d y3"my])A .}"Ӱù|/燰Q1tOХfrF%j=GHUnI{i^RX~_;,>(̂G&$A_| ca0S-Z/~"Zu Uc(H.ާ{KsbZnQ+Kcu5:9Vg՘L3riUo00,dqNj9B20ۻ;<=ɡSSht#/P'kL)..f&͸!!h e]ԣp #'J}Acl(mHTAN1i:Vu@i B{HǎuᠠoE. tz#Hgjg 55_Kp7SW{!\:6u8J$fDkeZB#p:hAF[0l Aե= ~߿_-ޚ;H(^=3xi"MڔT.l{%\:#jl<|?ȭ!b{ML\rbN*d˦cY4nݙؘ̙ p9Æ"u RB6%4a:^5[iFDs3ڋXw3vȜ.Γy牋z uLIoa@l["w o*vUɦpyôի?eiy2;Tj+E41Idf~ER &a)S HK"xsќ 9-yج>X;ZHuk 4N)r%9"$ ޏFU ׷xv_l4 ##,@`& O+,YwH'W.M[ھ7ݼή fE_=r[OV.-e$R)+}F ­ˣV}Í%_~٢ÿ.lK \ hkH7" ˆ:=GJYd?wDXs 'Yf<#]03;XL:*<3LZ?=^7%x0/q7-{w. Yoڧ>: >~u|]p!\P Qdeأ JSχa=Kk,> (^`i9ӧkT ~ڪum#7 A`Q9Bڪ!@3"ڕkwg?is  D jɀ޳MmDCÀ[@",qDز*` 3"~ 3/#x܀Ҫ68n ׫E5AiWR@j\zQXgQ0'--QL|iieQiAn.o4C7HLsL|b@0=$f'giU>UJRft;1159FG4muoGj- m tsÝ|R,rxʀ41L沆_CsNҟ 2DP׈ͤ@vuHs9Hփ@&J[e)Mwq2Qb 8Dev5A 04Sx9^Օc{O;Z8D[ >&f@ѶTJDCD9awtpvԳ$ʖl eXKKޣ8ݟ~HgE[;j!u9; њՉ?1Od&7OSo^z歃]Kَ!Ȑ\0oi0V-3d+'InK) )!rxo'/Ȫdk;u_"nZ*93sJgM3pU,C)D"/2򀰄B$u׹5啕k,^W7)95WP2!tޜ}(?\xdfq Ci\*&"t8 7 W_~g`޺rzͷ;;?벨 {UnVy~'\G$H2)l Hq@)_rBC~b[n .:G`us|O½waq\RMڰ{QJE9m/%5j{; T-yEmֈ ap-dqu wAc}d6Mew4߀8$PXI,Em% !|D.F]]6ev%T mn@2MvjQ1ǀt`=jI|S5OQ5/鿴Ә 랳7"r8 /ro᩺:=8'p\Ңnqw/“pGXx1='m/_EIyJ*MDQn%|[L#13]%rIm{|%9N'="-%45E,k#$lEFfx C /ŗ$=N^sċ?y./ωN-Ɉ|Fsr­X&`"`x3/Lg8$7g{k ȝ m<[sfՙد_4Lrx!\ }F{_o  @>,f @I,p҃ ̧%y lJbi7E}+. 2̱!s &̝|{EtBT_"m4}{@Ȳk HDSUw鄤4 BG\E\,x@8^p,RZ _^,_eM3xv7 )\b7ߤ*K./l%{p]RG 夨20(Zb^Aug.\iewY9[kR VƷKrE;٢ _O!9bJpN*#"9E dX@_qdȳO;5Ey fmTD~. 8a4RvzzoFˡB|:QcBa-Z\7xUjȳMx 1Ьvuň(u+P q[i^eH"Ŕi3Zl:`ءujm4 5N,.Dzj8 Ue@-h[4bAiTYU8^y1p9ՈTZ׈:5lɽg\d;x*}yn1dRH Du9@K |P)5m\5.ʲ+5H/~/Ф ~D.)c\"T$"Ϝ>e*n%CZFMue1F[b ,plY]͐c=Bp!D!79 O굄{2Z7Wz@*dK'PѝDe0MohwR.(f웠 6gףm6Fl}e2{2-"1˼%Iz&awlݖb Ov)eCas:&tLL]^yCi@4-C8lt^k@J7#&?Nr<Kl8B3qaf29= gP202iӄ,iH ^S@4eMvpٓ쓦,$mQww t)K|F~cȓq4 Z7tɂ6e|E1ۖ@bL{<ӀLXܶۜˡ Ӱ6;VT4a,b`v5`bM=8@'etW@Z[:G,:v]_i@g^-Gt\y*Mp xH!iưŽ6Lg"ewqOLѹ΀=40)TTo#s>\<*%JGnk[v6c9@蚍|><3qrhgO8O ٻ7R~OIOz y{;6O cgܖȤ;| aLk T ٬[ D$0Y{!D ° S٭:lZ @a|v,;[,X`’ps$ Nl`{~H77 41xDw7qM@7 w3--.:Á k: U+2 oPR GHۢҌ"j+CB1Zu28>LMF&`؃>U@vuYATC}MZchCNRW`ڪƕH4%R/E^$ :d01;7a͎;@JM4/ J"?g!8un{O9s`>sy$ugtf& xw.4h=78~?3=ggGfoPw&g gsۚ1^ `zFLY}8~D~<3zh}ݕ/FF4Lc]c##{cvy49-LFON'Y&>V>E.0qcˍͿ7BtJ .'kiO/Z,K@6n? mD;^)W \rFP!{1eށ(&i'eMc.#svԿ)f$Xpe79{B{ݺvb=T^K+/DLMw=?|؊Ƭ۳V.CE\Gӏ>MeutQ՟ IՃْ݊Hқ4Z0݇DFl8$v;lϝGw^mk@I]Cި]_3գәSGƐb~DQOG4^GrsPBYڬ-3S!nm{6kK@nAb kZ,QP#DKڝ.?0y ,Ppۣד^_\?v=0XBbu4r+k>y wo};Ƥ[@ 185ć8)OOΘLCI3rϤ Epa(:DB+ !8Q( rCe fRҷ*=ep9*ݣsr%E~ʩֱ˝Bu]*mPeSL /l7Sͤ74q?zQ\ …|e$XRLfB"FIjVZ΢BJ<!=x䓫W>.a=e}'>S>_W"˗[8.?<.O%` PPr8BQiܵ|C!v1MXOR q\.Spx)b@tB,VЬȠ]mz k]) 7.mornjϿӫu >|o43K|!% G"C,dq4xoH]sxj@Bx ,%VxN*  qI+QYP $dP-6?UG [/~r׀3hS=/a<ϡ! Bi9^wbUh@`7xQ0r[?<`P Вȗ y +TX$!hSټCh%A)ꦦc}Gϝ= ;@NYȪ>>|] %; ף4*Q:RJ&ex"^kTIT*&fCMaKʲuճnTZ ,)a[kiGcj"U|+\ ],s#JU:%fS#8u6X>aš@DiWFvXC:z9UD$ J rAr7B4V' An]46/U4dLeaWفey-& 11b:@rb`h'w+@ haiN@la}^mKz-^ĭcN >b$u&= `N7Ɯ1/F. yeܼPƗm "b:U2IJ<,Ӓ|Inr~M ]VshÕ'u>|hVj@2!fr U7r=xXK:1O/֛HU4T:]+%.Ҷ uѿ9yz?y@1jz~ ۴2.*OD8or#c 6%^+OZtwsE]Xd8-O&wax*"eWĦT ,RA~+_t[Cه]xMo9b^鳢j?|ɽ/rXFׂFm2[Vs|$Vb 3|&݈}>Z\V>k=ZH5P5:"8+@NaJd@#9ۻ Ъb^5ЩHﯤ\2|puukk_u.I5.ź@Α=;K:bou_zWy p,0\,% O(wna DוV@D$g8fDqR2!7b`d~6Z1'Z Rw7  򗟣:jahK/?p >p$Ld>|!b}1kߎ?)$[vyAy]YmBH`tzؐ[{c@/`w qyAT~{ѐFK AuN.q4%edȠޡ,3eVCk%Th$ÆDJJL%Uw"E%g4 |rnۦqIes+SdR.,*Lvns[4.R>dsm9 , Ug(Cճ0Tf"J%6 SOiRbh>@}@,[HiQge3 BhQy Qb*?"H⋔8h "+QDSM늬-J)P8o =@XIhe%Y1p('U'Sst*Q,`xQ!)))v9E)>̧!Ub5b7GHngn;)2@-Apg78|"ϕP<)Gggg<>*,f ;''~E ޖJ])>;CFHzsө3cwtDMunǙޛ~ORc{<[L'NovlD%֑OTYgV0 z6Uγ 2Xo 9xv6AeLtS:W|j.=cy>N|=>sg|,S35D+Mh>͔lEx3E.U"ǀ:˾Ŵy!`nkRT(eֱهTUFZt(v*C6j,ʟ% *TA@ [P˕>4o>>h) 03r]XYܞHBm8 5C(mݫ500Ztmjqs=꫞ў&T .hl#(R sR4-6raxnCsӠ@o 72.ʩ G[n\Њ^*] M7:(zv$ o޺[yZQ/d-՝vbݐ w׶{~di:>C]2"l[ˣd Ix--nLFQn@@M7sSn}sݛ;P|\tkarFѝ)s;睚|7{4|!ib4f m.bg#$4/Cx,-[#oQ}kn5AnohVuwԮZ魌{NbhS~sgЖSd&۪;}H.yR 'SuL,&ƣp D&іؒ?썶OF_[Եy5Ps=r+tgQO.q/TY^)9z24Ymmsj3w,,LǗUEb`=7ԍ11[ʇPla!՛B?ьD ,r7C=ogGL 'Wzow. soxsh榊F%Ȓe0NxR@F^!}2Kӡ=mI?WêomDgRz6AT0)[E4F/ظsVv K+Ϟ* `jKLD!v`Lic,Ls|-iu!664zӫ^F +m7 {4OڛB rU,/`̀Wm1NK_ t֭oi?n.^oR dav}`tzr jx~kMѫ{tY`(k6;f_r9Pl@ѷE=#W G3@uޛ̅znM N^E;{աwÚT@TjrtT6pp[j f:M.SoCrˋPh6fxjxxx*=m.M͆BMuҁ غO:$7[M>6mo׾PPTM[;7I,{S3'֝e4.[| H&3kt\PH ApD=ԥe&[ꈚDi -H[b; ax͛N&K3$ I_|;g=f:@R+#qKHKLW^՛x]$fWx%Ke=~H /d ~Hr,-;uDpl !iz#y dg2^9XgMmPҤ'mOyu +~(jvr',Y#( Rhc-胄O]QI+ cPʗm:i'˛ H*mtmoCfd  L:be@jMa@!<C&meydtdmgG)iAޭWlo R @ @N dClac dv3j}W'"BSuKda>DiN-X%[ Ho+4(Hb,d ^r@z-ct񒬈M`N,$ v^uRHFD\hY1ֺ= @HIfMKU,B.+`Es+Ь )4_%%Rh[\v7,':AI9i^уyb]q&% #!b*H 0bȔBU`h"(`P%HJ6EVl @`v 1C @/0DOևB^4[H5[ŪE1Aېh5og7/HvU߂>7]Y6*Kˏ}Aw8.K;%!zUH@1k%eC@}gDLADqL#y/Ci}*sU4FcCRN[4D$%JlSCyňFyQuS#W$!kYf<(&$4-b-PD$V7D+8Ů߸4v"Q_'uV2NÿsB#UK(b**Yg~WƑCv{91 Y ?v.SHP8+Vk-i@Iʇ*Uu:p.7>rw : [Xw~ x٦^݁7 Xjr]rnD|o|͇^!OOw]CXH]"jk&XWnQO:%CokjNN>ܤf^>>*5; ; g󻺊gK.0 եw^Kp׵񯦤Mc:l~@~"L+saU}||殙j6=o.tys1|X.bI^g2o̗8i\ }Xw~LS4P1'e}ēe|xG'#ޕU^RT}OzKzRg-}`,N@\Ron嬿\_/FuP|Yb]vmv;/^6MUl(,~zg.&s`Ggw5q%׭>מK%K3g"<[{{<Gg-1ȣt `,5ny_˻_&vCuÑ ը. q?w]5ō 2̊a_ry=_M^߬oysf#)뮜w]%ί WOKftxCGjWcOHy󱱅Gg~H9t>,Lt' qY?5LtyX|dUDDkAf [r!W{X ?wz]vepȁpN:j6qqX~[ HPA{mU-H*UD]CA57PKv[Z& y`2{|c djtFrNb '|72hu39V"T. >/ϳaEq]ћPCoBݜ0FͳM &tl,{sd[O*vr [YONb}vEd,bzi{g<哓WSv+5]։)؃s$Kr9q=}w{rbwl.c tSkX^\-e-ЍY߅lag/X^&H@y~3I B"` dJSRU/'yn%|ZSSDP!T./JeU5*$7e\8(Np+ ǃ 5E;eiY/""Ô -fQzBXOD磒 U=;x;@zC,rKkX Y7)ȇ s9qtv8@-ǢK[E?:9 hAHgnʪZ]m5i٥mZ% dj4[jpJx}ύ]!] : р )\d.w<$ 3] \lM}*pi$f?@d2r'9TlA0iY 5(f"B*U5[iBx{{LeS:9/nL ݚ  d)w.YAtʨ=DpSw 7X;L,Itv΁آ}dVs-c:Fφnͤ}߱taP#L*t1P8@f"ZBvz{O MAL0Ȯ7Ry; 6h佤 C6d:A$>s#Z'\bEQ+uh8b"bUPʳŪ tt&NEJ UGd\ Z2.{  HsIp@H+J!vY 'g,sVm)톗+sCVeiC\`Zmz2O0̰]^MŞt*A~eX+uwej!є+\DY'wd9h1U{%פi]# wCZJElgs9mcX'wY'E{mP@nx4H wf.vE^b*b^MZwekYd Q\8D)yVbozKZ*uyKJFjomz+|ZRjYItUiԫY*Y:bwP>[O-vRSt{aRU!͕i]N>2OHNr{e~:>.PkucT,w$z2'ϙ**ݨT`n*sfa}{=GkF~y`o j]'q0}n}n^$N/ξlЍ REcS*dZpfIj NkVǃOcZwCV!fZE@Em@%Q`N_ ~Q7]"?P9t"LK3*P(j@) %}VZ6gcqg7n6岹\~7d^%2V=nrA~,@1_=[Z;lvmڤΩ)*}@ib_}w_ -O%"~k%f!h)S8Auƀ9mrk<;j:>8C_-4M@3N^*sij4_- 8xd ϥHN쿯I ^SЄzꗩ1ױ" `, #F0Ѥ>H# # #t@F2iޑʿdO,6IENDB`awf-extended-4.1.0/images/thumbs/qt6-rtl.png000066400000000000000000000655321517644610000206740ustar00rootroot00000000000000PNG  IHDR`PLTE91-gI;¶ʿȽǽ]Hƺ˽VCƾ·ʭ]O؆ZGɞfMȽŻcLs_Ӊ\HaKĺǸ²bKiZ_Jʻ¶ǿøɼƷƵ̾Ϳĵ̓Ϯn`Ŵķq^}ĵʾdžhXƾĽ{kZŻŻ˪ׄ~yŶl[sdɂcTytpsnjᮮӲ~yuuxfwfgVƹэtfyklhdvsQB\Jɔ|ȴtͧod\W|ZOJybCtraOBhmtRNSjhIDATx{TSW;) Pf&@I&6oP@1.ĄD!;rZ (Vv53k=3Zzǻ9@eCro_Os}N^{[a/1oU}cG pn/^~7]#L$xDXrί}$ɴA5AP8ѷ޿Zл; f3,!"'cb#ǀ~LbLd"H.@ @Ksc'c k^Vպ JDv@PtصĠw.% r~7ccɓE:g~zyXĘCēEEǪ/`8(1Øp Tbxv TyiutXJDz $HX 1AA1@ĭ?5q- LVLk'&&g;"O[)N}Ssڃo뫋f*^yz"ťĀ A2sPIB@bbxׅ{Ow ( 1 :: vtPgAAϞÂJ=\I x?_$`-p#<`Gݪ6l|`.jvzF쩀_u7_+.WuhjDWG^ wsfƴ[/Ui'5k> >m H8z ~?q^yjryɇAӓ556)<}L@3_pL ׊dᑧwF#V팎)|t-lԘ,Zd H{&' Rtjq 0OE߃ ?,r+DDFj8+h&2r;: 7[Aѷ_ [o _+voמAk ãMV"_%n;/3;?^-aȋ%b0/S œ_׃5G&cz8? Ue~QrSx> ;>'x BzUp-vU;V+u?e+HTcpUz6Lu,*;qzX죵Q)Q x;]ns <35(;HD2݇3EQQ$PHKPHϤ*(QW"KrչRT\"RKpn ȱzH)[d}Lv&DoyA;EJUX-UK#b]hE/kI)J5؈H*˕)[tJz1r6|JJTR"JeTwHʫIzH?ԉDjVFZSZ}&MH ^,WHt)RV'r Un*FT"WH хHPnE y {>AWn\%LKݔ%qM7%*ję"iRӋRn]*+/Or I!"e.QnWO__rF{3O'#R4>Ix=WR橕F)D8wH֗hH>iMI t*H*+)H:^R5"A#t-9t5XaERDg,U.W*-#"H'T+2$ AҢW@|TA]ʖ\@AyG(-/8rQgO'3eE.Q#+u Ɨ<xg ݸQȈ>W b@e>)l^䄏tj0)GZr]sg9cL|e }qPrm!}1Aw/ W'l;YӲr{:DŽ>$Hώ9YGsCP6p@ #M2GXDWQ[,4J24ޱ(O'r.!G(\\^7tdux) `t)@"C6< >u[>#, *B"i4l@ hK(\Y/S-u^b%av"0$8@m8zd̵?2}>Djy{Qx^`ݴPbvf@]4"J>CY$'ѠڿQh r[pTO B"0p΍=>ğ8sRtjVQoMN^p`~Z+EAҪJAM49Dw8Ɖo M#6t,VI5AH~-LBqnP>< d$OMZڷ-ϞuyIM`P±g9lfT/4jҘC$p~-m-%l@]d'(4n=Olݸ[ZNI>KhaZu)8a@y(..o@7ߨ|74ggچbl,X)jaS -EU @(L|27qdOH'%bw4uWAK37~ .HkKHiTHƦ ?62ȥ"m./?Sj++iVଇ'׏H9Ňu:mG??nMx^rR1h4f-Hoż6HJ0 ɇKEZFFJjyU T R֕?q)YZmXX{Gwx!By kTFUk!)))!x(XP6ȮRDr%b&O %JKui~.КX\^V^WRtuj}ż&J{Buu^H!!WQCEcY{͹\ A"&ڵo"Bګ6ώ{Cb>䶜C6hGciHZD5g*C8xcLm ֏FP"\_KBjByZϼrP>nx&'CD%B,Q{^LzEvEB/~q9(26; _rY |#|jۊBa(| Θen hYy +(kۊ 8 yXEAVn,c E3 ˷M6BYzH3gO#~@GvAq -Δ3 fAN[Xz?kS`!{vB=\Av ovu DXgun6͂|VL=9$K6uƟc' UX;2+ ijYvv˺/z.e1yF^Nq4e䓍sIJ/A|Az{k;+o/_8߰uIM9^\EAX΋}כu3XA/W(yxO?ܘe0,?4a47wRbpmĻa+{AvZSn~9w/T)7hfdgQM_}vm{9ZI@yAAu0W?'dVȯJV1ҹ錉$ls*. >+ Hg1[*jlpO @WȵD /]7jr|߀sn)@ߪkďSIkY/'q[9duOAMcRQT$jX"t^uAHwyӒwٞI-Sˮ ܺ|LC XuԊ=eTPE3} +⻇I B"xpex(W'Gy`34)D􁂻_R+"-'j@7ԳNrJE |P 4B>l\\;e3d.i.c;Y'<__PA,NG2OoFkY}VFT=ʹ,C<%HaovD c"Lؗdt)0BM,fI?̂8`ۑJfaAx4s;d@usѱ }ռ,;gmOg9XCFNGVM@Z9 X¹ɕ7<mjn.L*eO ì8EEo :517MS;U]ܔЦ lXgbH!,]eP~ g3]vb!Ρ#p%"J,(6Ջ`r:fi/ ȹ,: _[z/pP̂3}&R *2Zƶ޹5Q7UZA:8zH^t%e{.u|Fޠb#j "⬕xPm8qr(id0~ERzA.j?IO~в[`[݅{7l-Hߜ0X_-(%5(TѲ5hdnG_vn|PVaC=Yޞ!nV֧M^3ԫ5>G'_#hxAHT,M,Cu`y#Q݀X=dS̲ @ 4-y |/WxkF;8d >C@V6fA}`A",GyɎDZAĴMZ?|Mr< CHM%/K& M^b3\.b\t**Ko*"6ri0y r&gsٶbкd0:IcY٩30!۟L+PRYL?14V>/ >uy=7odʉG󩽽FB!⣳궻pWB4"3 rӅ.x{켔ttgӘ8 !! cQY21=ߟÐSs|ӢX<.-aqYi;qiRcB!7@q #6B,oֈ =@l4&=C&qđ-={Pwư=$4?/E=Ux%"@J@gYVTlDZv`p4ųTً`}t]7RWAQg =rS\'@d{6t 6y`8lNN`a3#r7M8 C3]cH8 Gv39^d3 򹩇PK/v7ULB̹^jaGEFzH_CC=szȩ#6ƲC,,Bo >$ q Ԟ,$utIsSFAwxnٙW]We<@v="=O|a9k|io5[b#0 B]7dE4' Nk"̅R[ GX/l/8s[_Q}>5>!_=zRF¿u/LBf#vgq|@w7~$ QKf:ّ-+dve==v>u\@i:>_XוTD4to%,Hٹ:Q mr.9'7dko ]iչF3=ĄZSe/s1 TdVN wrך؟R_4j^!7SlZVM {krV JCȨZJ2dYMjFYl;q(_Ol'H]< l9qc /V4 k*X~2-f +!AUQҋ,YX48_vWc)phA2eťڵybW6/Ʈ9\o:oh&Z)i ֭*HP)عk1luoPݳ tXCLC{Ut.BK{Ӎ ⒗y:##J><,恌q9ʑ8w7>qP.խku<,M>|&W烃]qF.Cs[d A`2 Rsq*plH>~*k$lU$,X{w`"=@Ҍig$3$9y=J8$JYBȓ':"ZrN-V* C68;vnLJ-"E?OG.h0Arvv&HEM|b!t0{1ih9tDP X3S \O^F|[.6m'z#O rt2%'N>}\E/j69%C0fo²Yi!#>^X6?  O0h`|0  x]1t_b@#fؗea5]'}q&-"]=stK&ߒq fGASѹW'^7wL}bxm v'5b VdW۸}c1xʆU :tݿhCjjzo^2޾Q^Vs(xI ŢJ FLc³w +&JkPn S`ԣGC0~$2b8pgc{& gwг  m{E+;;촌޹[8R6>A_cꗇ{G`pqL;; _x=fo,)|Aa#EFP-\[fy wSGtRc~o{nC7 qol7eXβp-+faA\ n6.+'޽ &U~}M.\^`{B|-[}nӊ dsEJun1tzdRUj, g4.<-so,Go,P^_] /B(d']3R.qIC66Zd?8xD 0#|=P8Rz[|772+p9KGrh;4lu3O&$3sNĝae0:w#b+42|4.+.#2) HksJZ*+9#K1z{۪mv,¡'NjvFGGBNΉ֌ŊCRl#4m/Cs.iN1={ֻٔ a`g(C+ҡ@!#$A!S '—Y`H @hyƍAȇ[~8V\ޓOfeK*mAb;C baiU;ئx ;܆^^{wO.t] 7@g8s#PZwYa'[3tZjMbn"V93*&.&S}nqPxyL)s^ž$Oҹ~a1<A[F w ջY~CC>-c '\!7Hڎ4&Gޑ M8_kUA=9id~MNt?֌AM^1P1 L *՛vϲ=x#|z7ai ~ K;$`O E&F}h\YRr[vl-z3?x"625I3Djqm'xoĞ&5ޠ5~eŶrڛļIƅ?Zy,HBrו0uYQmK465NQ`W 3 rJ<8|/U4>]'=FأG>jd LKou]lSb-o4IzI®Vw8ub!Cuw =geS`İV0ս3L4 &9t|j-X#.kg;rhwSXͮ f3d@kgH}_K7H$;w m,gjo*U!HfdE@gLDfW]3&{I&ʼ?9uΩSk_A';9_~18[{Ytl- o_38rMWr`% WS0NƩ9|͉syα0xMF{H4)'[<_4 N{lܲk*Vg0*@|rX\f"w* Si@ZB?}f|>6-V~.}n zVit&ǃSww Fwҕ*v\Hf$@c%JH*< %$\̄STpp$2ꐡ:>/)WU!"*-/N8Z4{^o_YG boa/u^udk{9zڻ5;Xcj3.=,=*9_ .ĺ?z*H}LBaMq%g"@>͆[/_﩯yz5}>hlqƩ'%1Ԫi!AgsXt V- ;3?ĐBß~S^B$Qy\ٙ5%MB>uXo""T"+ga}{@Gw7| Axm'oje%؊|lD:HPڲzUיV-ϧ8'G׶N6xC&UP,w9LSqY?;c qPUU=歁r$?=n@ƕo~a@x {f]x,&`@rJ{#rnD.B2'l|WB3KOZ @a 0@ +&]NxkGO}t '֒>E| lyx2ܖVps&]uGS :gu:XuM'm>Iہ^E[d Ndi7{eomǼ̍ 9'fU{"„IˮU7 uH? UN*m(C[*6c*Di4n7 +z6eܭ4ƭJwWJHuQU"yhm@T5}mΔUՊc\uD<ƚ4]FݮR厾x;2 :6Yīa\>kXɢrd@'qTU#U:(mG'RirW1w("awGox ׿ Q <\TGd澧ʭ U=WE ଯrΏe~R?/udҡhZM6i-+[_3U^v7`V;Z ;wFC>fc1c>V69c;@EcrPR!K)(v_;T/xSaHE3+4=uBoNȨw%DW].;4Zndq :YVzn(d w)\0$9XF|zC]NGZC=V$[9s6Q7KC?0:3JK`)1<\A{-o;"hQ[Y6kKO qNh&N?ho&CG dwA4K]hx׋ʑZyƇK B K4Pu_l75v_Y0D+TBF!sG;R <+X=k#i/ G pkn55QeQF naWIs+;ci 9ӵyf!ɬ;+0^ɹJԙ:|M?_6AXv t3K'>m*5v Ww=y)[?,(oYʛ 9,܋|{fY ,69RQ\kS:7N+ت[?_VI)̿2 ~džUQu]uۣNX6$ l&rYaO |s˱`g)[Gck Uw#N5U ʧ~| ad%l$֖\ӉtD<=QgؾC|t8gOko%փem,XۍwXOI vz&gn& @♪AU=/ w~ ׃u7ƻM:b!0R?ȥ>g9yrc%e~c7{cF:-{N1npRq˂ñ`׏7ʅƒq6X<07<2{7$,+"i=l!aT-9mҶ 1_՟VP ?ϗ߽[.,R!D?'6k叜/ ge Oc|hV]o0̓WMv9;D%doai;2ds9re4 HyC<]Wepg]XȀ`*@Z\ jKʀu MEW{)x>>T V0؏?: toYN ̥Ӎg ]ZY{Hr@t:vhُNJ7x^C@N#CΓw+wDٔ^@\V! q7ZM%ݷI tA5QO)֌?Ioۚkjz8*/!l>2@Wb_EIJz/ o޼U^eG ;"iϺT< &b 9XV97SǪz}|~%9b uuNJ1 4vʃaA0G~7NF-T=yO2^t (z#ë,W/ a8<6]dzz|%BA3@TGP(ÆWh.9k3*k/]O5K'r[yȳyZH5 񫎜~su +pE4,V9#=|x&$w̸PuЕL,P* z 7 e2{h0B;dD]?|L>)L6PbmVtb&U{庍<? 8_պ^ reKʳm<ZB0Pi6ko9ku~HduT {<1_S}2jOh%ΆPR,@vT,DȨ\P5g5֬mgU6av3zVSͷ_=o_y+U|,#$7tQj1-"$#/%aHwُvU7Ty .` $B -w>4 TPthpޅByYfZ˛_c/UֈkϾI:](OsI6Oo .1ǜ_pF!'AݓQ$JIPJJT' rƮj~jt74^.B ݻw}< D.9h=6V'b/J$a<VG\SڥH-p`"b_@.,̊zV]i%|;<^N᱐g@Os)*Fr%z6N!y" +Uqbz} C]4߾"ݢ,[J"L;N %L$@@;:ZcJApK@KW$P@IR{*_"Eer\t8OVE>X d@@jHsHΫt˺P^.D%K=Z2 ,.KPO't(H<`ftc/J%eQd yyXy 5], ջpׇcss9VGM3˗`∀,r X"'RKB;ԋrV-ǵ.˵`pQ+d8 Fӑ`ڼL@xe uQxJ@!*B\e`퍠Q7t:l!x~vzƄaNi,6c1.sf5ZFAkrHo7s8P =VimR%!\8|k# $hӎG:DŨ mH Y`uF.'H#:l 'ƞ` ㉨B>5\!Y@@Fm3aě-3NhiX~<>imE3zc_9l19Jf>4^s=&Cdc6>'/ 9I$=qn.tQb?={;dOr֙ /زi1S<Uq远mm\챬rY@;] {!|IMd;Us zI $dZ21|NWrB;Kj}(!Y⢊Y l۶U?~ )b4uP^ƽCAO,x<C㑔'V$5,zVcz5ɕxp)!P ,ǃl@ {@@E.)p*BIWY%jy>DhӻDh#6 ;OyoyVwZr}r9sYC$K4DdʵH.Bd,.g%J.ȸ "]V0Dͺ™{$o D`QN2$Rt'* P+:8]ymkJ]}ЅROH\A#! \ SI O*ZPLJ76m&eawzlʪGk~m.*n(aNO& KO &yckke"r,#m&MU5g!iq`+w:4Atpk2ٔJ7CVn70q |w}@|Qڹo᣹uJw{<:K:2~vFOdM' Ȁ>S\ ^k+/Q'r:Da'j嚍$pn$-wE8x R93eh[ָmt[lVưYWg+nbIubrQec촶 ㇠c$ڱ RiVqaO&BQd 2{B'sH6:5#LC!d^ƫ,W9mQkd| iz~g?@"j|TjI$`<3@f!ܗ.R$4O _pC-zҰCX̶MiE$`Wk.;'L s_^\x`10hզhE<+eNW}s.ⰺUf||s1DTMXf#^oUkT֭Z`e$;'ód" W< 4S*U3L4)*M"euEkX4^RՋjk4r EXr6[MTj/0Rc]/4bE+,!oV<@ ^ AG+P(Т>H(ZA^]7R݇Hꛫ+k33ul&e" Jj+۪T ғMJ:9&B-:}6W yB'msMg臬\bsZ `w+7V;|[#eLPţZYemoGH &r ֬Zr Sz{Cu: < Xɀ b\HL@r: @$9CC+@oXWCkDtB FΒZIZF(uEKcc;Tu Bn,jܙݽ7zŨdHQVW:oF#yMH0,0slr||2#>!:&u$\r.(LGQ̠WlNL6 qltgՈ Oc|{3 hF?G!-iыc{;ˈ`*Z5xnTͧ#r.*lg5L[ S \"Q f-~w Y. Z`}mѬ {O4$!ߙ(>o2M. 3@>sej]~54"oڼ! Zvf׽0')H ug Y6X+.jQl2lc;~jBle2BKzF̳>áVKhꙋ)]'X$<#"=8C \v2,|0Z<2+).B0ʷ)`,Jcd׫9D .;i|rꢑ:^]tzճhKmD:tc.7,u !PHt>7Su"ڶ.F-F휋1!:C~l 6="O,YuH@Zh_3a,FyqX:T. Z&Pf'|UxT`u(ǶCv׺׮ZVLs& &Kx.9 ;vRWWV+pwER>QBzJ9SZkxR_CKeu}vK\)s.8~S7y)V(!6Om&⳨GsC!?Lpfqo~ReRxCrAP oыX +MmÀVWXlސEoTuPȏC az&ϸHMB}QTa+A+Lul{Mwf z1l9`D|s̭P*Pȏ=j;19v7#=;QVW!]`3!ÖPPPYS!LYmx=,D/8c< XvYCKԇQ֐uŚu%rOĶ~td`,?tΉߏ !6#Z7jO=: jM+kKXsNF:BwVXY4oNF7Hks#+/ٱԜl2F!'KAskPwg:N# '-OͩT* DƎ., E6i%) Һl\ [Kr \30G!̓BU+Vu$>~llꎃ#h9WMzPM0yyĀiQD&u#l\U%T { i%*\¢yx &UA9sVFMFV"2iElμ(fEbڪM:@,(F,TuG& ٌXDTL̖ɴGGel&'=K,:A,^&Lu3?!bzᨐȉr^%+-lsX" ytْ3L/ 8D,2E[̳Υk- X@(|$d:)TB9S 8WGu\=Rmv}vd7CEÉZ|+p粙Әײm aG8_X ,0Yw !AH]L7[%9SږPktE X&[N˱dQdzZTC B|A*yKeR 4 y\L6E!Hg!u6%b`jIQSd6&4>^(UҸ}-YϭVHb 7FQe>[;|_=?|!nb45~azJ U%zW"&4\Y*fc4ɏH*jz`V@ZY/\Шˊ RŐE$1LKbt:yq\gV^jAŸ# !NQHDDMzcwAΧGԩ{;nt1/0Its&v!=%G1 m[B=BBPH њcC!}$5RPH ьC!#u57B KPPPPH s!FBNeuF(ЈI-5Xͮ6!t"X fM6ǻ1gg`H#􎜠ΎXP>c(! z h!018B!PHѳ_ƺ`)!,cjř9uQw񥣻,}vv >ӝ.@&J/2S"o x:f73{1!߼8޽{wGݻwGFnt޼|3225%m^4V3yld;7n 8νB .Jtd!#?pCp_k2r6,vH>1Na:F&w/Z%wƣBӓJ OaB$ղ^KFx*EjB %QYH9>Iמ(Vi{ٳg^<p;@]V qrwFL)l$+4JCIq&H,kOIqn,(')51U֡Lt\cecg??]~HG!S_YY yVO_ B;T+XJp ,\ BAؐs%X-,TO@ pdi}/-._|^w/߻q|OPb:ZxP\3]&yQܪ,Wl_YnU͕n˱=)و1~>3>/w_]V^B^|$!~B̸PBdr.Ob-wm$[z|݆SOu.sG.9yXg 7/\@: $-Kܮa!ַ!x8y{Mۆ=6\4khؗ )m&2|!wRG!^|E6rSSS7[Sqa: h] [^& Mg. {\ɍ7>`{* #3C/xQGX3e y N"dd\ ښlyaAGGW2}vG8K{ȭws\f>x0+}#­aV]_ dx82n!TGqw!!]eD7}s2&:S %kmv {L-*; '= !7삏a?ڹBSru!k&D6B"_wc7JVh 흐ҟBj5U{{Uq^,DO$RKO2UaT y4h!-] tn^O!^nD<%Tn1LU40e\Td!'"+wX8. 6&ul!6 wk[n{(kwKވJWX>NaZ+y\Ndޒs^g,$#*.n )$"XZnmu+|loB\3З%gwDʣ?xjo$_7*bτLAtkBnkZ`Zr;f+qWxfu W:]SH0☼Ҟ|#|BTd5XnҾ˻o迾S9+ڻN³qXu0_ɛΓQ[(jЄ:fÇ/\{aֲ61r.lƻmDս'gufsSJB'q(t֭q~Bz'u2eʕ:[J닅J]qlgidř oiK4rQVfgG.  Ga!΀- -Q 8ߗ#L8~@ּ>,=_71nk9? 1M,_ w0rJpCxd!Oz(!3̆{;Df!טWހiK%\cFնy7L|:|}t|LZc!0Np"݋0~0^=+BG_]{Uڭ]/ne!TC3}Amo .^W[>o6u򼐉w¥T҅L{^x*)CzTh<'Vۅ.{2jFdŊ /;;Vw׿)D{jՓzL?73r#!bgG̽^WA4J" &3ߊ+\l](u{%dJNRV]c3n^3cxRf)մUIVxz~ދ}Fz?R@uȹk\?Xu!FIǰRr,34' x6}\ d,q'Nl6!~٧O:^-}+]*S<Ѯ>YLLhIR;c֦ʚP<*AyXRjZvbbuubU9Lhe!pD~뵐N&ȕ:mO2L!FUx1rĩqUxBjcE23hQG:JLM!c)&dJё;ǭB6g˺a:ޗX 4[P,+xӱ]O|aVak0D Vw"kjcNyzVDŽS@ec?%JTF{ grG9贍ꞋO`p M!ȐA萾AyWCk]#z &DN A|,$2Q A. /$`Q|X 0^t8s"SsbDTluE1LD1]G0:H:,Cp !B'wJtå@0{8.cC!?H"e M\.V|E>8OZ:IW8:_-"<Cgt" * QI5ԓ"exXf *&+L2+ԤJ|2ɧ?̉bo|1` \/QTBMUf#7S5**%Vz^58SJH8NJ%ZRՌP-s8I~W4'0B#["Sdx> "-pD˔`6a\ /O&y$vCI1S*"bD9㞚Py El#+F6SdL i!Ņ,Yrx,y!Cl4LA5T0Lm~k~6g9x~uAr0 l(KCkzukCY_ANIENDB`awf-extended-4.1.0/images/thumbs/qt6.png000066400000000000000000000670631517644610000200760ustar00rootroot00000000000000PNG  IHDR`PLTE91-gI;]Lq[O¶ʿʿȽ]Hƺ»ĹƾŵƭɾǸVCZGó]OfMƼșcL÷·\Hs_̾ǼaKɻbKŻÐ_JͿÊjZʽ˽鑋ȾiYƾ𔎉m_힜q^χ{eUüҌm[~~yt}xŝyҪƹxtp̰uՖufhVsnjxfִwfŷgW}TBόtfvѵmienpbځdžl^qOAfb_|oxZMG~ٴpǒwCu`Ӡ>63*O:NXdTsƇFqѳ|ؼ;azwDPŊ̩ʺh?iI1tRNSjdjIDATx XSg;6CIJH IJY)2DYZ"DPrKDYDAkQnL<=s{9PkrNNo޳=O*֚̂=">'+M~? 5~/v|WW [̘xOH>؂$i*8pЫXW}|??mYD331RfK{ (Rnã1G" k Xޙ;qfx4bjj R]}CcF\Ι|}<~ꖈ7dCĪ f8W3{gјټ?=qgDLx;s1GN)'fę;s8 |x|V<6<"#Ț -F -`X颙_ HD+x1R,ox74' ;<٬t |7oy`EL\љi`Icy(}Yט?ܚR`Ƹ<awQ¾_ Hg;\g'7ʆ*OLVNVܯsu{NY9yjQ\!.WfjO6nwf'B]WW6NA۽{n $٩5W}] ݿz7\7;LWfg˂Mמ: :i;\ddČ_okJ~1#JX-̞8;99; o3ZAH{X^ C=2(r lA~pq8~`;*r8|A/o($ ofrr"9g[^} A,_xk6d Zch=~4⹿,Q/yQIP;Ixe lm6ATZbgQEOgGvh^քphὲlMy!,-m<۾G&/Ͳ%BҠdH SA-$"D[`R*)LAb"5O!,pLɓI]R@<u*+"=%{2  fu[^$;+'\/(KK *$<,|ˮ-Q)me yI+RU]IUW{[ B& i|DPP]).ɩV`Z K/+ x%ĮlG@Զ֭[Uv]klT vJjR*On++9Z7(Oy*\>ȩVkr`U۲x2Y\U["ΓnRrRYX֮cۢjExuUJ%ko $ggRNJC=1^+Wj໒!HmeFϒe\^P%)qL5pseEX.PkJ%TuJ`AOv D;:// UB8|OJ(`r0q8~%jlx99Dm}IH]z'zhϳ!DP4^~UA蝽 'Ϟ4kݮĽYpWUtn'jFrȫU9mR,@SpGVoo}YYcc>Ў5}sJ'W56o$D_BLWIFUbRR(IHRՌ%!6h<~NpW74 Y .ˑpry7.4&?~=3'DC4˕rGz#Aep܉u2ą MSS\.& \4mjLtE6:2t<8H:PV^[-`4Ț@ $(̆2y<iJɥ2ļqp.˘y0 `}&OP&q9M/6 DS7Z&X^^UK֚/i3,޽!A4u<ݶ\~hiV:?|dN{{ W8,N\ݒB}5A1Ykrִb{jc i_ /M/7?EgKEWIN$9Z|dkonwKKh a,*hrxg~ޝV{=fνio7T I৯G[ HP(2X\k t~zrj\bf~\ :=NMNIE?Sqq|~*< >dVdgswIK+;2SZtwR\lA|f&*~Wv?{_*{󠺫Q|=vy}U"Iw_ 2ȣ7m]ҋw&k?^CKM9tS=C# MN С =Y=4eeTDI%v]]'ƶnΝWkogAv3&擵n=V%/xq؜Z2Y"W9mA* QϟCz\5u;S[[o4_kJF5KhLD4evgfq.,(e0?bB`(HnBBQTZ]HR6R-4N ڇ4qpm&* GcH\kI'3qp4lk`{{L{^>'`lOaQ 'Is:_X. F0L  h K ɨ3IC#Lg$$t,̅Rs9AsTmAJL 8ka?,9'eg5@{m8;[-,J\DGQ b sc&\gՃ7bv 0DdDd@!;Xa!KMw1> 6I l8x{sVĽ+%N=@ ] n2H K =(H ItRä^f2|ArR5-$YytȬ{Busx'en_ ` B^[JQA A"N&ܒo!y\:27r7ΏCk1q?5GGAbDy-d}a='7^LΡy20`{1zj&3|G/0dz-8; yUdc N5-uc{ UROk-0UYT' " z ! 8cG&BNw6$aASŚB*yd\ 7JD.> 3ʨ e u#  f5 7xi!v|@"Wv-b_ZjZ2oR)Hy,GE0ј ,QO 2\7WHA1(GBD2jn$x!>DpœAm `@7\klAp ~{J dIc..UŹ TM)e%>k!3O!:9Og2!gZϭg^ˮ[}{nm ! \`،m贒T.cc3u-Dg[!s3ΦΚC7:r)xgƹ[I@KJa0>d_]ڼ +(.NUV .@Lb1 he\}lw_ }Y!~K˜;}@w[߇7Ei1z0yLJ`69AlDzCATVV<|f$GriyJw J E:n~Z@tIy+xmۺ Fc3]S]>:?}>^SM7?Se@pcK0Ot?7&B݄)W"#oơdId%'3ESr,h%Ra0qVWZU4: %!O9b&L6n@ d?UP5]3^M7(2/:aǢxSJ0wMs3 usWb":sV qo%k:+ bQVReFzP(T*HQ{]\&VowHU]>CǙKk U۪]g;,> M'YW{g?LY琔ޞt͈ ȼDLM΃=} SGSH# 1`kLlzs> ϑ=JXABW(rB28n&r ^Ptdˍ`9 :'/E@ hnQ/9fN4bnP4 8֤/+~?_5zAJOOLIgw7r/p4L vv5hKއdܖ l%k!+~ȵ!|!J*:INٕ s[ΥhYu x\fLЅOﴂyi|Dc{>cc,H< lc!cEFs^FaAxBQIop fw9o~s}4!LA܋[]k=h8 `ĭNm5ƱynQ2M}{tfS}۠ufғl;nl S_-Ns}5 9<\μA# [`~ )rvj~ 0Bt-=4~j<9PS8gK +*ݧȧ?'M?e,e PmQi60D3H4=a@~{P,WL"k Cs9\l56pg9*S-$*&(BKH Ga1tEe\[2d}d{\WTfU,(PXTh-G3Xɜig[{ZW_~}"23}8vb_O~oK >eiE; RdxyAYb#;EAQ"VG G #YάG07lAvtG[Y^TIPXX_̳a?;\YW4'7 o3>w.t-$7++:02!~' $ BBi}h\kKaC6x0&,Etd8E 'e^d6_ P,+ R:A$Sߌl^[Y|Bt\-="8 Q &oѦxx2HaB' 6$n/nLCoov/5C8ůh03AdB ֖K< i%@b(g<E \e-)IG!Z6d<d cѯzخ /LiK &(9@}zF_e-7 w^I62{nbR&otLy|>zɈ \'_M"Y:/RYIooeSBOZ'W@_uv͔ܚSO C@ _<{泐 .߿7C<GfdC͒A7D->w!]cX?4ȡgH`.$D>4$e߳gF[ƍLLKQgy`ZЙzwHK$HJPSCkk s͸CGGk\l8ug=A U",&}d{Ҫ2ӤV+>oPZi_ A?4[㔩^ZjMi])d\Bȅؤ2,rhiT86!vyۤMϴzjּؚ/P UyQ9{~sU<@=-3f?)IdNIXS $KGlΏҀ0Nլ4 *W;cOZejZ+kQ'fdَWs $Ź:x O7֜ 8U7joP6".4Q~OY?hg?5f_.,+[Qds̐,M m'E-+(|n.iZ{w&"AxpTÑ(lۊyswIvz2&*fF6]>=:֭2ܝUOR@N[8c~7Zē}\s lka^ n4I_fbZcGp#=%dOLK ԦѴqwQpuw݋ *l aInW z vtNλkл`1X\ߒ`G ?Hl ,_/W &r߉D9&w'j0u3 Ц Жg--᧿/I O@.S-zaDBUg2ᣯA"aG}<䰺n] 3X~T 햐?+R' EZ |r@U,u6>{ =k$n!=0<ϻ;C,@ȯ$}Y-yW@5i2ݱw5`qV:(e\T8.`pR#G\ ]}ϟ%ld!|HL9JQn4IOtT 6I,ziK}R$*'LNDJU0O>rNEO.}Cb&s{{$Ux;8[1=SI#[ՙl;{&wH?@JuܻO¼Oo{Gd}]wrS`U2yN7}^<)(΢[w1&N9| ^;?X9xV|k%7 x 9]_BQ/w2/R:ۛO4Bܛh7WO$4ӯ_::2|^0,7(;@,ZFa*$ AuH%QP|'D,m最4 W*S&}Ri/+k_j8U ʓv䂩gl %wv^e eÖض= X@na|6I"+HJ rfi&JejS#B7ȸ^{V2aN [W&T&Q66'R,L@Um´yV5QTֿ _r}j]xqsif\7{4øM;})={wOqgB=D,Wcv:iC-')*áJY1i[ZPw-|\;s`=ի qG_(P^\%Q(pǕ"pnZ7%wݝ>Q졤* @^5M wgSӓ٥ɥKFQM? > MN-Y"@C4(#~*B4)tDz4Q⫝̸::DolMmO>4@nrϋ}yc{d;{Բ tT#RSˉ {=> 5P|(agRvdeʖ,\nTB'O6 )Q(ڠ+ϷHW D?{Zua|gNR(oo?ꭃ Xmly.n@.gKG$JuDAT]k|FFu( ޲o@_*,ʎYTɎ[ч֧^roEb< M|뷊OBO$^"6/oңN $# r\ipX q޸,5& -/ Y?; pgۗp. t,"+VQǦ'n&ןgK`d_g϶o@yo`2p9rnbul 0>uǟO/MmIn+tN ο O<%$hvRd}dP@02?;EК[MJb%AcvavAlH|5) LHsI" ^>Eq Hc)5fˎ,ݝSfN7^Y*Ts cŒjI Ճ\[1=gyjY)?y55^t9^'OXŏ~LL]S'Qi IPiCӊFʤ@F Wik%7LQUU}a99M-Dho"ZzAxWoT|(q\ s -}s9ë2C]9G5NnV,H-,ac1)WLSs3Y7bJn"pz[r{;A-yQ#w,w;DPoz}=" $)&s&2ɾe9]2H zWcEnpˢq WHM)^0_` %VZ,jcꐭ3_tl6z{+S ]L{|M.F;@ 2 4KA w'9cSEeT)8@e+!euG%eq:{Xgd rJʊRg:QSo =z|Y,-A@~w~;|οB T;&iQ'E| BsXm+_U@u@w 沗.@g<톆jӃ>=,`XM3{Hٝ& |;No~Nc{ UU$ )/( Y/،rGr!^(s ܯ]IDcC77ߜՃm|P'1ڊJS5]ugR% }wLSi(zJyO>Sy $*&:R),f2}_ ewKvKBY!4\` W-mU\xXRV:N=:PU-i:ZiVM-UR43}rW5j *L=^GEi%k)PR KCT]Zm,V }H񪧓' ȋ`YԣkZu9fWݍ.Wrk@o~OOM|' >AI Hw| HmI6ti9@ܶ~taG/UthO!?@y=zVCAdhJK (+ev0 /uϽX6j. OD´RaUW]<0{P qQ)-pzӸޮ| -$" sqxGՇmʸk R]t'qlHM- m8/ aw~7Zvٔ'W-sg2d6 Rx|?QB$~8akr<lp)ł(}pY1gk-0߁D{}V ջb_!@P22?vnfvE({m[}v3ע.7G>t!wҺҡRBdo5ս2Ts+!RE6I$ YDntsL-WWfؖgppxx۔!W^ ^Zأ;*x]3c჈/v0 A69f]Fm1`v8P̗H13?9^ څ[Vf1ҏ]-u7Hu?S-IG*rT6! `U'A6@r6PX:`4O{j+*zz^j.5 *+ڧ $X%rtc ϦЏ,9rnE#`= T^~U3X Ze ΤXJ@NRrI`YG5ɚ+\^l[rV˃dž% ͛ouSpNJX8FQmhH b[؆\]GOcǎҋ`Y^x _S@pcw_yy~@`1Hx(S *Zl-6-IP^ѱ^BXNoZ5|_d]9{@%>C?a;,1hL!)b3x)0|[L K"E/ΏHeY PC%62[@Dv A)[.lER!O?ϳ!trT2Y[<-RbڡyD'M(I`Wߤ.V˴Ѡ&vˆ~@1 -cafD^.H:U*MO$ZOSl`[VSSs硁n># @qZ>OG,^by DPJ.H]w%MT$9!ׯE"кGvg*8͝89;w'@Dϒ(pcΘ wbu|P.ynGz ʃQ']7KH[WW_?2jDH>[z1U  o}H8B"d,+C:~A^BجpLGvւ PWtA;0@h4sbmuuP4tm^796"K/KP\|G/\PϊyfD%3O4I}y0;b6j/G|o^ˠa(S)s#jÊVg0kjʘiRCȭ2A-kfjb7>z1 OVZ2f-)fj¨S4M}m=t[W@BTN11y.b-_֚ӉJR-y<}X W~ѯ?IǑ*B Ԟq;Lk_P"\裏 ԩ*;jXSaz8V!#vZZ7s/\^ 閏{;_p-}D" Ʉ)axZR' v )ο|4_bg9L󿾙HdWm:=b[~=?3j >;үON&beAjj\b)/xYl)?b>O,V'"Mpj`OQw9Yk{<=PR9:m`/ b^#ZGc>նK6:^kV7f`f0~b !~u5/ԉ lkvP`/ ȁ]Xh5 GQ^[]hixWW=7CmA'a` >/qP .ѓJHu-J \},: 2L[%'kAPi71wٮ=$P8g8] aG}t ht`r+{= DVďn0ƆQ-ǣ/$6/?&zb;o&w(TƆ=4n,gChF *Q1zQ|8jl֮sv^ZVp{F@5 aG}t l-usFqˠGLX(ߧ S'C}"PUWԪaJ !qyĒz#3}׼RFA5lhffټ$|^P)I}A2쨯^X6Cz{X. .#{h>'};-Y*SG&N7 o:- cRiLc#N- aG},@\j.%G΢:l0 )A3%)R7LkS524ŝm`!8mU%eZP V$Î{:?ŒK7@@J| 4kɓ]@'DA7*}: u|7O玉.O#qghA #[x.^1poO5'*XAr 0vӧzaIWA[p5mX=kmј5f7707wmk4v5ѠDi~MPvn~ 6j`ƏAW#xX [7AmB,&wD& mXbLPrv~DJ󄢰fma4n+(SE.m g*>p:1CdY$1|%i݊K"HDLE&Ee%-"U'[>] ;e,!$|_R/qexеr71d!`UvXQm -Eu\ ;";Okޑ4CyxSܲ<ٿ(vJ'8TV% ġj:AEwD9|@E'.F _ ;zBDx>[1j8S)9–ȩrPJ)Ri{۩^.F?N$]m>I:ȵE7jjzz][Kg m7[Zt ^a64hŪ ]Gm[| `w0f]þ14mVt`^L(xCՄŒ락mHۍ"׶_^{~X&Dlsz]{bcW;LNnd9bgD1cЪ-Q9AtO.kD!U۶0!T')^A$H@87OAP1𬉗REo]u]lj9^k|Ӹ}_'e`<@쀍1 ɖ6$\)"aDBI^{u4cBJ cfQL "H/ѮVXʪ[EZkU(Sgdcsy|~p}QԒ kv!++no{ݩwp{nK_}tO;uڽG%D8+ZaH!w)^^y!" zD:'U.N^7*~TnͣLsqi'n~ի7?Ï^={7Tg~O7?y?>OϞ:WOl]=c`đBG ؉sB6apUG:tjW~O_e'etIgSoBOoïnEMեO絫o,SPȧ_<to!g[?vaob/կqc_׵Orxy $F-/= &n҃oZ7_.}yuԣo?>Nx>DCVv%+ 3BхѼ{KۀhiYޥ4DV0

q/+q>w?>{/^=2/Dd;LVU`S#,}dlckE )Hw՚-`c_Pm~P y/ʭ{ۈzzugg6A~1?{k?:g׽ޅ#,LA{E&b^_ V`6d?{l%.!0 6 0L@2qL.*D:Щ<!!D9 ggCsSᐆIP Fh8˄r,# SXh7!1_2AY/ebVU"\UƼPz l]vD9RK'pG6KVK^&3 (*%KC5.'pͿY'F|+{s{b-HRfވ z㹹r^Ary*IщU џZaJ/$ m|)YK$B`&3C*h"  4P":EtCH/F3sx0)T6S2 ѕT:$0#Ŕ=ZP"R@&~DY"_"|Ǯm]vyXhCfݪ2kW%p=pXGUùQg\"iˍv79B$z nG h Qo*iLA. 3q_:Oɨh\ Ih{+F‹d\*֓).0e v"Q әr9dTQ '|?RUHg!џHСX0؁,)g0U&C!E  J)L2 $d*ĦsV5öM! jyj\oӛ>dun!^\M'wQA˕NZ(IZF1n)$d/pFXt"' bxe2|n7ebVFÅ@9ij*FJ~.*sB0RQFB~z&Zc\""0 =HDk`!"q=d=)M0>yCeېxXx5!(APǎ&L`X!-xDBǼ;k/(0> BHJoAPkL/To<=YlƂBd$8B0A E)%"B!<}WH[ wy+FBH ^B-+m]!]!]!]!]!]! @6t qȔ7V'Ds1!QROĨ,DSi3B^,y23 Y,X2S =b2?g~~]7=JR||'>L?_iuByVc=%2bןi` :sgBHa!wOWz:ީ 9FQ_8'PԬtrDzDLcJ A9RR'NN,}9BٟCȍ$}2<-!zt&]#S@ƘT)qr!K8ycK73jOh!?=xxXNyҗE(6JakP`,$F)s ,/B#ʦC`x'Q>1_C#ϟ<2xXroZ׸F;Sbz&̽c^yi+b&]v3z?oL R$ѥEr!g5念;[H|p"@///JTYںxZ(`f+U,-H1"|`4SzVyJmşѼE W%T-rrW.w=Zax̓lғ>EenѨI@Ee@2-9sVeDCpD?b_Mx~PcBUue -*…Eag1k0e F *b\Cy &kyCgk=]}k>f;,*o/:3Bc> w,m\T!Xo ea͎ !zn1sz.];ONrxHDz 82CS UzED%w7loB/:Vx>^:͕v*[kVC&TS|bUO4䘛p게 ,Ej({^5777d1_y?ṟB9^8Ʌfaǯ  FsKN1/fCBHK&ٓ n[n~{W!D_|X " " ntܰ@ f>29(3+|d~ȴeBQqu| *>"'#$Ae'l,8]4Bih 1X\QIN˱C{Y)8&a!B r@ fH!!y$i]GA,_vX<\9 #'5**aY(PQ`&Ec@1ysH 9{w:M0یK Ѭ M 6;A7*qvJO侇rOfs^xB\ktle!j@!4B8*+D@^\ =S:1A0ER12zq)SZwSh5lf^"l] 'H3@Nl!+E4UPM6Ud?ҁh,X)t̛yrdNǫIF3AaZQS4m1ƝD̬;wt2/ƣbAdzNt9  M')/s:-$VtLP@F#%Y6[qrJ"2d*i`Pyg^T's`p'G $DщhLP&ۋN25pާL㳚dqmk)M矊Pt;5#Mk4h.Ϗi~&БX"m&B^g]"^/T>˅ .x~1`\6ba1vMcS{SH&:yc}]/B?<z7IENDB`awf-extended-4.1.0/scripts/000077500000000000000000000000001517644610000155625ustar00rootroot00000000000000awf-extended-4.1.0/scripts/archlinux/000077500000000000000000000000001517644610000175575ustar00rootroot00000000000000awf-extended-4.1.0/scripts/archlinux/PKGBUILD.gtk2000066400000000000000000000034061517644610000215540ustar00rootroot00000000000000pkgname=awf-gtk2 pkgver=4.1.0 pkgrel=1 pkgdesc="Theme preview application for GTK 2" arch=('x86_64') url='https://github.com/luigifab/awf-extended' license=('GPL3') depends=('gtk2>=2.24.0' 'libnotify>=0.7.0' 'hicolor-icon-theme') #makedepends=('autoconf' 'automake' 'desktop-file-utils' 'gcc' 'gettext' 'gtk2') conflicts=('awf-git') source=("https://github.com/luigifab/awf-extended/archive/v${pkgver}/awf-extended-${pkgver}.tar.gz") sha256sums=("SKIP") prepare() { mv "awf-extended-$pkgver" "$pkgname-$pkgver" } build() { cd "$pkgname-$pkgver" autoreconf -fi ./configure --enable-only-gtk2 make -s } package() { cd "$pkgname-$pkgver" install -Dpm 755 "src/$pkgname" "$pkgdir/usr/bin/$pkgname" install -dm 755 "$pkgdir/usr/share/applications/" desktop-file-install --dir="$pkgdir/usr/share/applications/" "data/$pkgname.desktop" install -dm 755 "$pkgdir/usr/share/applications/icons/hicolor/" for file in data/icons/*/*/awf.png; do mv $file ${file/\/awf.png/\/$pkgname.png}; done for file in data/icons/*/*/awf.svg; do mv $file ${file/\/awf.svg/\/$pkgname.svg}; done cp -a data/icons/* "$pkgdir/usr/share/applications/icons/hicolor/" install -Dpm 644 "data/$pkgname.bash" "$pkgdir/usr/share/bash-completion/completions/$pkgname" install -Dpm 644 "data/$pkgname.1" "$pkgdir/usr/share/man/man1/$pkgname.1" install -Dpm 644 "data/$pkgname.fr.1" "$pkgdir/usr/share/man/fr/man1/$pkgname.1" for file in src/po/*.po; do code=$(basename "$file" .po) install -dm 755 "$pkgdir/usr/share/locale/$code/LC_MESSAGES/" msgfmt "src/po/$code.po" -o "$pkgdir/usr/share/locale/$code/LC_MESSAGES/$pkgname.mo" done install -Dpm 644 README.md "$pkgdir/usr/share/doc/$pkgname/README.md" #install -Dpm 644 LICENSE "$pkgdir/usr/share/licenses/$pkgname/LICENSE" }awf-extended-4.1.0/scripts/archlinux/PKGBUILD.gtk3000066400000000000000000000033761517644610000215630ustar00rootroot00000000000000pkgname=awf-gtk3 pkgver=4.1.0 pkgrel=1 pkgdesc="Theme preview application for GTK 3" arch=('x86_64') url='https://github.com/luigifab/awf-extended' license=('GPL3') depends=('gtk3' 'libnotify>=0.7.0' 'hicolor-icon-theme') #makedepends=('autoconf' 'automake' 'desktop-file-utils' 'gcc' 'gettext' 'gtk3') conflicts=('awf-git') source=("https://github.com/luigifab/awf-extended/archive/v${pkgver}/awf-extended-${pkgver}.tar.gz") sha256sums=("SKIP") prepare() { mv "awf-extended-$pkgver" "$pkgname-$pkgver" } build() { cd "$pkgname-$pkgver" autoreconf -fi ./configure --enable-only-gtk3 make -s } package() { cd "$pkgname-$pkgver" install -Dpm 755 "src/$pkgname" "$pkgdir/usr/bin/$pkgname" install -dm 755 "$pkgdir/usr/share/applications/" desktop-file-install --dir="$pkgdir/usr/share/applications/" "data/$pkgname.desktop" install -dm 755 "$pkgdir/usr/share/applications/icons/hicolor/" for file in data/icons/*/*/awf.png; do mv $file ${file/\/awf.png/\/$pkgname.png}; done for file in data/icons/*/*/awf.svg; do mv $file ${file/\/awf.svg/\/$pkgname.svg}; done cp -a data/icons/* "$pkgdir/usr/share/applications/icons/hicolor/" install -Dpm 644 "data/$pkgname.bash" "$pkgdir/usr/share/bash-completion/completions/$pkgname" install -Dpm 644 "data/$pkgname.1" "$pkgdir/usr/share/man/man1/$pkgname.1" install -Dpm 644 "data/$pkgname.fr.1" "$pkgdir/usr/share/man/fr/man1/$pkgname.1" for file in src/po/*.po; do code=$(basename "$file" .po) install -dm 755 "$pkgdir/usr/share/locale/$code/LC_MESSAGES/" msgfmt "src/po/$code.po" -o "$pkgdir/usr/share/locale/$code/LC_MESSAGES/$pkgname.mo" done install -Dpm 644 README.md "$pkgdir/usr/share/doc/$pkgname/README.md" #install -Dpm 644 LICENSE "$pkgdir/usr/share/licenses/$pkgname/LICENSE" }awf-extended-4.1.0/scripts/archlinux/PKGBUILD.gtk4000066400000000000000000000033771517644610000215650ustar00rootroot00000000000000pkgname=awf-gtk4 pkgver=4.1.0 pkgrel=1 pkgdesc="Theme preview application for GTK 4" arch=('x86_64') url='https://github.com/luigifab/awf-extended' license=('GPL3') depends=('gtk4' 'libnotify>=0.7.0' 'hicolor-icon-theme') #makedepends=('autoconf' 'automake' 'desktop-file-utils' 'gcc' 'gettext' 'gtk4') #conflicts=('awf-git') source=("https://github.com/luigifab/awf-extended/archive/v${pkgver}/awf-extended-${pkgver}.tar.gz") sha256sums=("SKIP") prepare() { mv "awf-extended-$pkgver" "$pkgname-$pkgver" } build() { cd "$pkgname-$pkgver" autoreconf -fi ./configure --enable-only-gtk4 make -s } package() { cd "$pkgname-$pkgver" install -Dpm 755 "src/$pkgname" "$pkgdir/usr/bin/$pkgname" install -dm 755 "$pkgdir/usr/share/applications/" desktop-file-install --dir="$pkgdir/usr/share/applications/" "data/$pkgname.desktop" install -dm 755 "$pkgdir/usr/share/applications/icons/hicolor/" for file in data/icons/*/*/awf.png; do mv $file ${file/\/awf.png/\/$pkgname.png}; done for file in data/icons/*/*/awf.svg; do mv $file ${file/\/awf.svg/\/$pkgname.svg}; done cp -a data/icons/* "$pkgdir/usr/share/applications/icons/hicolor/" install -Dpm 644 "data/$pkgname.bash" "$pkgdir/usr/share/bash-completion/completions/$pkgname" install -Dpm 644 "data/$pkgname.1" "$pkgdir/usr/share/man/man1/$pkgname.1" install -Dpm 644 "data/$pkgname.fr.1" "$pkgdir/usr/share/man/fr/man1/$pkgname.1" for file in src/po/*.po; do code=$(basename "$file" .po) install -dm 755 "$pkgdir/usr/share/locale/$code/LC_MESSAGES/" msgfmt "src/po/$code.po" -o "$pkgdir/usr/share/locale/$code/LC_MESSAGES/$pkgname.mo" done install -Dpm 644 README.md "$pkgdir/usr/share/doc/$pkgname/README.md" #install -Dpm 644 LICENSE "$pkgdir/usr/share/licenses/$pkgname/LICENSE" }awf-extended-4.1.0/scripts/archlinux/PKGBUILD.gtk5000066400000000000000000000033771517644610000215660ustar00rootroot00000000000000pkgname=awf-gtk5 pkgver=4.1.0 pkgrel=1 pkgdesc="Theme preview application for GTK 5" arch=('x86_64') url='https://github.com/luigifab/awf-extended' license=('GPL3') depends=('gtk5' 'libnotify>=0.7.0' 'hicolor-icon-theme') #makedepends=('autoconf' 'automake' 'desktop-file-utils' 'gcc' 'gettext' 'gtk5') #conflicts=('awf-git') source=("https://github.com/luigifab/awf-extended/archive/v${pkgver}/awf-extended-${pkgver}.tar.gz") sha256sums=("SKIP") prepare() { mv "awf-extended-$pkgver" "$pkgname-$pkgver" } build() { cd "$pkgname-$pkgver" autoreconf -fi ./configure --enable-only-gtk5 make -s } package() { cd "$pkgname-$pkgver" install -Dpm 755 "src/$pkgname" "$pkgdir/usr/bin/$pkgname" install -dm 755 "$pkgdir/usr/share/applications/" desktop-file-install --dir="$pkgdir/usr/share/applications/" "data/$pkgname.desktop" install -dm 755 "$pkgdir/usr/share/applications/icons/hicolor/" for file in data/icons/*/*/awf.png; do mv $file ${file/\/awf.png/\/$pkgname.png}; done for file in data/icons/*/*/awf.svg; do mv $file ${file/\/awf.svg/\/$pkgname.svg}; done cp -a data/icons/* "$pkgdir/usr/share/applications/icons/hicolor/" install -Dpm 644 "data/$pkgname.bash" "$pkgdir/usr/share/bash-completion/completions/$pkgname" install -Dpm 644 "data/$pkgname.1" "$pkgdir/usr/share/man/man1/$pkgname.1" install -Dpm 644 "data/$pkgname.fr.1" "$pkgdir/usr/share/man/fr/man1/$pkgname.1" for file in src/po/*.po; do code=$(basename "$file" .po) install -dm 755 "$pkgdir/usr/share/locale/$code/LC_MESSAGES/" msgfmt "src/po/$code.po" -o "$pkgdir/usr/share/locale/$code/LC_MESSAGES/$pkgname.mo" done install -Dpm 644 README.md "$pkgdir/usr/share/doc/$pkgname/README.md" #install -Dpm 644 LICENSE "$pkgdir/usr/share/licenses/$pkgname/LICENSE" }awf-extended-4.1.0/scripts/archlinux/PKGBUILD.qt5000066400000000000000000000034451517644610000214210ustar00rootroot00000000000000pkgname=awf-qt5 pkgver=4.1.0 pkgrel=1 pkgdesc="Theme preview application for Qt 5" arch=('x86_64') url='https://github.com/luigifab/awf-extended' license=('GPL3') depends=('qt5-base' 'desktop-file-utils' 'hicolor-icon-theme') optdepends=('qt5-style-globalqss: for theme support') #makedepends=('autoconf' 'automake' 'desktop-file-utils' 'gcc' 'gettext' 'qt5-base') source=("https://github.com/luigifab/awf-extended/archive/v${pkgver}/awf-extended-${pkgver}.tar.gz") sha256sums=("SKIP") prepare() { mv "awf-extended-$pkgver" "$pkgname-$pkgver" } build() { cd "$pkgname-$pkgver" autoreconf -fi ./configure --enable-only-qt5 make -s } package() { cd "$pkgname-$pkgver" install -Dpm 755 "src/$pkgname" "$pkgdir/usr/bin/$pkgname" install -dm 755 "$pkgdir/usr/share/applications/" desktop-file-install --dir="$pkgdir/usr/share/applications/" "data/$pkgname.desktop" install -dm 755 "$pkgdir/usr/share/applications/icons/hicolor/" for file in data/icons/*/*/awf.png; do mv $file ${file/\/awf.png/\/$pkgname.png}; done for file in data/icons/*/*/awf.svg; do mv $file ${file/\/awf.svg/\/$pkgname.svg}; done cp -a data/icons/* "$pkgdir/usr/share/applications/icons/hicolor/" install -Dpm 644 "data/$pkgname.bash" "$pkgdir/usr/share/bash-completion/completions/$pkgname" install -Dpm 644 "data/$pkgname.1" "$pkgdir/usr/share/man/man1/$pkgname.1" install -Dpm 644 "data/$pkgname.fr.1" "$pkgdir/usr/share/man/fr/man1/$pkgname.1" for file in src/po/*.po; do code=$(basename "$file" .po) install -dm 755 "$pkgdir/usr/share/locale/$code/LC_MESSAGES/" msgfmt "src/po/$code.po" -o "$pkgdir/usr/share/locale/$code/LC_MESSAGES/$pkgname.mo" done install -Dpm 644 README.md "$pkgdir/usr/share/doc/$pkgname/README.md" #install -Dpm 644 LICENSE "$pkgdir/usr/share/licenses/$pkgname/LICENSE" }awf-extended-4.1.0/scripts/archlinux/PKGBUILD.qt6000066400000000000000000000034451517644610000214220ustar00rootroot00000000000000pkgname=awf-qt6 pkgver=4.1.0 pkgrel=1 pkgdesc="Theme preview application for Qt 6" arch=('x86_64') url='https://github.com/luigifab/awf-extended' license=('GPL3') depends=('qt6-base' 'desktop-file-utils' 'hicolor-icon-theme') optdepends=('qt6-style-globalqss: for theme support') #makedepends=('autoconf' 'automake' 'desktop-file-utils' 'gcc' 'gettext' 'qt6-base') source=("https://github.com/luigifab/awf-extended/archive/v${pkgver}/awf-extended-${pkgver}.tar.gz") sha256sums=("SKIP") prepare() { mv "awf-extended-$pkgver" "$pkgname-$pkgver" } build() { cd "$pkgname-$pkgver" autoreconf -fi ./configure --enable-only-qt6 make -s } package() { cd "$pkgname-$pkgver" install -Dpm 755 "src/$pkgname" "$pkgdir/usr/bin/$pkgname" install -dm 755 "$pkgdir/usr/share/applications/" desktop-file-install --dir="$pkgdir/usr/share/applications/" "data/$pkgname.desktop" install -dm 755 "$pkgdir/usr/share/applications/icons/hicolor/" for file in data/icons/*/*/awf.png; do mv $file ${file/\/awf.png/\/$pkgname.png}; done for file in data/icons/*/*/awf.svg; do mv $file ${file/\/awf.svg/\/$pkgname.svg}; done cp -a data/icons/* "$pkgdir/usr/share/applications/icons/hicolor/" install -Dpm 644 "data/$pkgname.bash" "$pkgdir/usr/share/bash-completion/completions/$pkgname" install -Dpm 644 "data/$pkgname.1" "$pkgdir/usr/share/man/man1/$pkgname.1" install -Dpm 644 "data/$pkgname.fr.1" "$pkgdir/usr/share/man/fr/man1/$pkgname.1" for file in src/po/*.po; do code=$(basename "$file" .po) install -dm 755 "$pkgdir/usr/share/locale/$code/LC_MESSAGES/" msgfmt "src/po/$code.po" -o "$pkgdir/usr/share/locale/$code/LC_MESSAGES/$pkgname.mo" done install -Dpm 644 README.md "$pkgdir/usr/share/doc/$pkgname/README.md" #install -Dpm 644 LICENSE "$pkgdir/usr/share/licenses/$pkgname/LICENSE" }awf-extended-4.1.0/scripts/archlinux/PKGBUILD.qt7000066400000000000000000000034451517644610000214230ustar00rootroot00000000000000pkgname=awf-qt7 pkgver=4.1.0 pkgrel=1 pkgdesc="Theme preview application for Qt 7" arch=('x86_64') url='https://github.com/luigifab/awf-extended' license=('GPL3') depends=('qt7-base' 'desktop-file-utils' 'hicolor-icon-theme') optdepends=('qt7-style-globalqss: for theme support') #makedepends=('autoconf' 'automake' 'desktop-file-utils' 'gcc' 'gettext' 'qt7-base') source=("https://github.com/luigifab/awf-extended/archive/v${pkgver}/awf-extended-${pkgver}.tar.gz") sha256sums=("SKIP") prepare() { mv "awf-extended-$pkgver" "$pkgname-$pkgver" } build() { cd "$pkgname-$pkgver" autoreconf -fi ./configure --enable-only-qt7 make -s } package() { cd "$pkgname-$pkgver" install -Dpm 755 "src/$pkgname" "$pkgdir/usr/bin/$pkgname" install -dm 755 "$pkgdir/usr/share/applications/" desktop-file-install --dir="$pkgdir/usr/share/applications/" "data/$pkgname.desktop" install -dm 755 "$pkgdir/usr/share/applications/icons/hicolor/" for file in data/icons/*/*/awf.png; do mv $file ${file/\/awf.png/\/$pkgname.png}; done for file in data/icons/*/*/awf.svg; do mv $file ${file/\/awf.svg/\/$pkgname.svg}; done cp -a data/icons/* "$pkgdir/usr/share/applications/icons/hicolor/" install -Dpm 644 "data/$pkgname.bash" "$pkgdir/usr/share/bash-completion/completions/$pkgname" install -Dpm 644 "data/$pkgname.1" "$pkgdir/usr/share/man/man1/$pkgname.1" install -Dpm 644 "data/$pkgname.fr.1" "$pkgdir/usr/share/man/fr/man1/$pkgname.1" for file in src/po/*.po; do code=$(basename "$file" .po) install -dm 755 "$pkgdir/usr/share/locale/$code/LC_MESSAGES/" msgfmt "src/po/$code.po" -o "$pkgdir/usr/share/locale/$code/LC_MESSAGES/$pkgname.mo" done install -Dpm 644 README.md "$pkgdir/usr/share/doc/$pkgname/README.md" #install -Dpm 644 LICENSE "$pkgdir/usr/share/licenses/$pkgname/LICENSE" }awf-extended-4.1.0/scripts/debian-gtk/000077500000000000000000000000001517644610000175675ustar00rootroot00000000000000awf-extended-4.1.0/scripts/debian-gtk/awf-gtk2.bash-completion000066400000000000000000000000331517644610000242130ustar00rootroot00000000000000data/awf-gtk2.bash awf-gtk2awf-extended-4.1.0/scripts/debian-gtk/awf-gtk2.install000066400000000000000000000004421517644610000226010ustar00rootroot00000000000000data/awf-gtk2.desktop usr/share/applications icons-gtk2/* usr/share/icons/hicolor locale-gtk2/* usr/share/locale debian/fr.luigifab.awfgtk2.metainfo.xml usr/share/metainfo usr/bin/awf-gtk2 usr/binawf-extended-4.1.0/scripts/debian-gtk/awf-gtk2.manpages000066400000000000000000000000421517644610000227220ustar00rootroot00000000000000data/awf-gtk2.1 data/awf-gtk2.fr.1awf-extended-4.1.0/scripts/debian-gtk/awf-gtk3.bash-completion000066400000000000000000000000331517644610000242140ustar00rootroot00000000000000data/awf-gtk3.bash awf-gtk3awf-extended-4.1.0/scripts/debian-gtk/awf-gtk3.install000066400000000000000000000004421517644610000226020ustar00rootroot00000000000000data/awf-gtk3.desktop usr/share/applications icons-gtk3/* usr/share/icons/hicolor locale-gtk3/* usr/share/locale debian/fr.luigifab.awfgtk3.metainfo.xml usr/share/metainfo usr/bin/awf-gtk3 usr/binawf-extended-4.1.0/scripts/debian-gtk/awf-gtk3.manpages000066400000000000000000000000421517644610000227230ustar00rootroot00000000000000data/awf-gtk3.1 data/awf-gtk3.fr.1awf-extended-4.1.0/scripts/debian-gtk/awf-gtk4.bash-completion000066400000000000000000000000331517644610000242150ustar00rootroot00000000000000data/awf-gtk4.bash awf-gtk4awf-extended-4.1.0/scripts/debian-gtk/awf-gtk4.install000066400000000000000000000004421517644610000226030ustar00rootroot00000000000000data/awf-gtk4.desktop usr/share/applications icons-gtk4/* usr/share/icons/hicolor locale-gtk4/* usr/share/locale debian/fr.luigifab.awfgtk4.metainfo.xml usr/share/metainfo usr/bin/awf-gtk4 usr/binawf-extended-4.1.0/scripts/debian-gtk/awf-gtk4.manpages000066400000000000000000000000421517644610000227240ustar00rootroot00000000000000data/awf-gtk4.1 data/awf-gtk4.fr.1awf-extended-4.1.0/scripts/debian-gtk/awf-gtk5.bash-completion000066400000000000000000000000331517644610000242160ustar00rootroot00000000000000data/awf-gtk5.bash awf-gtk5awf-extended-4.1.0/scripts/debian-gtk/awf-gtk5.install000066400000000000000000000004421517644610000226040ustar00rootroot00000000000000data/awf-gtk5.desktop usr/share/applications icons-gtk5/* usr/share/icons/hicolor locale-gtk5/* usr/share/locale debian/fr.luigifab.awfgtk5.metainfo.xml usr/share/metainfo usr/bin/awf-gtk5 usr/binawf-extended-4.1.0/scripts/debian-gtk/awf-gtk5.manpages000066400000000000000000000000421517644610000227250ustar00rootroot00000000000000data/awf-gtk5.1 data/awf-gtk5.fr.1awf-extended-4.1.0/scripts/debian-gtk/changelog.debian000066400000000000000000000023171517644610000226650ustar00rootroot00000000000000awf-gtk (4.1.0-1) unstable; urgency=low * New upstream release -- Fabrice Creuzot Tue, 05 May 2026 20:00:00 +0000 awf-gtk (4.0.0-1) unstable; urgency=low * New upstream release -- Fabrice Creuzot Tue, 03 Mar 2026 20:00:00 +0000 awf-gtk (3.2.0-1) unstable; urgency=low * New upstream release -- Fabrice Creuzot Fri, 10 Oct 2025 20:00:00 +0000 awf-gtk (3.1.0-1) unstable; urgency=low * New upstream release -- Fabrice Creuzot Fri, 08 Aug 2025 20:00:00 +0000 awf-gtk (2.9.0-1) unstable; urgency=low * New upstream release * Fix building error with GLIB 2.83 and/or with GCC 15 (Closes: #1096351) -- Fabrice Creuzot Fri, 04 Apr 2025 20:00:00 +0000 awf-gtk (2.8.0-1) unstable; urgency=low * New upstream release -- Fabrice Creuzot Fri, 02 Feb 2024 20:00:00 +0000 awf-gtk (2.6.0-1) experimental; urgency=low * New upstream release -- Fabrice Creuzot Thu, 09 Sep 2021 20:00:00 +0000 awf-gtk (2.5.0-5) experimental; urgency=low * Initial Debian package release (Closes: #959434) -- Fabrice Creuzot Wed, 07 Jul 2021 20:00:00 +0000 awf-extended-4.1.0/scripts/debian-gtk/changelog.mx000066400000000000000000000020121517644610000220570ustar00rootroot00000000000000awf-gtk (4.1.0-1) mx; urgency=low * New upstream release -- Fabrice Creuzot Tue, 05 May 2026 20:00:00 +0000 awf-gtk (4.0.0-1) mx; urgency=low * New upstream release -- Fabrice Creuzot Tue, 03 Mar 2026 20:00:00 +0000 awf-gtk (3.2.0-1) mx; urgency=low * New upstream release -- Fabrice Creuzot Fri, 10 Oct 2025 20:00:00 +0000 awf-gtk (3.1.0-1) mx; urgency=low * New upstream release -- Fabrice Creuzot Fri, 08 Aug 2025 20:00:00 +0000 awf-gtk (3.0.0-1) mx; urgency=low * New upstream release * Add support for CSD window * Add --enable-only-gtkx and --disable-gtkx options -- Fabrice Creuzot Mon, 05 May 2025 20:00:00 +0000 awf-gtk (2.9.0-1) mx; urgency=low * New upstream release -- Fabrice Creuzot Fri, 04 Apr 2025 20:00:00 +0000 awf-gtk (2.8.1-1) mx; urgency=low * Initial MX Linux package release -- Fabrice Creuzot Mon, 03 Mar 2025 20:00:00 +0000 awf-extended-4.1.0/scripts/debian-gtk/changelog.ubuntu000066400000000000000000000027141517644610000227660ustar00rootroot00000000000000awf-gtk (4.1.0-1) experimental; urgency=low * New upstream release -- Fabrice Creuzot Tue, 05 May 2026 20:00:00 +0000 awf-gtk (4.0.0-1) experimental; urgency=low * New upstream release -- Fabrice Creuzot Tue, 03 Mar 2026 20:00:00 +0000 awf-gtk (3.2.0-1) experimental; urgency=low * New upstream release -- Fabrice Creuzot Fri, 10 Oct 2025 20:00:00 +0000 awf-gtk (3.1.0-1) experimental; urgency=low * New upstream release -- Fabrice Creuzot Fri, 08 Aug 2025 20:00:00 +0000 awf-gtk (3.0.0-1) experimental; urgency=low * New upstream release * Add support for CSD window * Add --enable-only-gtkx and --disable-gtkx options -- Fabrice Creuzot Mon, 05 May 2025 20:00:00 +0000 awf-gtk (2.9.0-1) experimental; urgency=low * New upstream release * Fix building error with GLIB 2.83 and/or with GCC 15 (Closes: #1096351) -- Fabrice Creuzot Fri, 04 Apr 2025 20:00:00 +0000 awf-gtk (2.8.0-1) experimental; urgency=low * New upstream release -- Fabrice Creuzot Fri, 02 Feb 2024 20:00:00 +0000 awf-gtk (2.6.0-1) experimental; urgency=low * New upstream release -- Fabrice Creuzot Thu, 09 Sep 2021 20:00:00 +0000 awf-gtk (2.5.0-5) experimental; urgency=low * Initial Debian package release (Closes: #959434) -- Fabrice Creuzot Wed, 07 Jul 2021 20:00:00 +0000 awf-extended-4.1.0/scripts/debian-gtk/clean000066400000000000000000000001431517644610000205720ustar00rootroot00000000000000icons-gtk2/ icons-gtk3/ icons-gtk4/ icons-gtk5/ locale-gtk2/ locale-gtk3/ locale-gtk4/ locale-gtk5/awf-extended-4.1.0/scripts/debian-gtk/control.debian000066400000000000000000000021361517644610000224150ustar00rootroot00000000000000Source: awf-gtk Section: x11 Priority: optional Maintainer: Fabrice Creuzot Build-Depends: debhelper-compat (= 13), bash-completion, libnotify-dev, libgtk-3-dev, libgtk-4-dev Rules-Requires-Root: no Standards-Version: 4.7.4 Homepage: https://github.com/luigifab/awf-extended Vcs-Browser: https://github.com/luigifab/awf-extended Vcs-Git: https://github.com/luigifab/awf-extended.git Package: awf-gtk3 Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} Description: theme preview application for GTK 3 A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme. . This package provides the program for GTK 3. Package: awf-gtk4 Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} Description: theme preview application for GTK 4 A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme. . This package provides the program for GTK 4. awf-extended-4.1.0/scripts/debian-gtk/control.mxo000066400000000000000000000022221517644610000217720ustar00rootroot00000000000000Source: awf-gtk Section: x11 Priority: optional Maintainer: Fabrice Creuzot Build-Depends: debhelper-compat (= 13), bash-completion, libnotify-dev (>= 0.7.0), libgtk2.0-dev (>= 2.24.0), libgtk-3-dev Rules-Requires-Root: no Standards-Version: 4.7.4 Homepage: https://github.com/luigifab/awf-extended Vcs-Browser: https://github.com/luigifab/awf-extended Vcs-Git: https://github.com/luigifab/awf-extended.git Package: awf-gtk2 Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} Replaces: awf Description: theme preview application for GTK 2 A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme. . This package provides the program for GTK 2. Package: awf-gtk3 Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} Replaces: awf Description: theme preview application for GTK 3 A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme. . This package provides the program for GTK 3. awf-extended-4.1.0/scripts/debian-gtk/control.ubuntu000066400000000000000000000030241517644610000225120ustar00rootroot00000000000000Source: awf-gtk Section: x11 Priority: optional Maintainer: Fabrice Creuzot Build-Depends: debhelper-compat (= 13), bash-completion, libnotify-dev (>= 0.7.0), libgtk2.0-dev (>= 2.24.0), libgtk-3-dev, libgtk-4-dev Rules-Requires-Root: no Standards-Version: 4.7.4 Homepage: https://github.com/luigifab/awf-extended Vcs-Browser: https://github.com/luigifab/awf-extended Vcs-Git: https://github.com/luigifab/awf-extended.git Package: awf-gtk2 Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} Replaces: awf Description: theme preview application for GTK 2 A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme. . This package provides the program for GTK 2. Package: awf-gtk3 Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} Replaces: awf Description: theme preview application for GTK 3 A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme. . This package provides the program for GTK 3. Package: awf-gtk4 Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} Replaces: awf Description: theme preview application for GTK 4 A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme. . This package provides the program for GTK 4. awf-extended-4.1.0/scripts/debian-gtk/copyright000066400000000000000000000047041517644610000215270ustar00rootroot00000000000000Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ Source: https://github.com/luigifab/awf-extended Upstream-Contact: Fabrice Creuzot Files: * Copyright: 2011-2016 Valère Monseur (valr) 2020-2026 Fabrice Creuzot (luigifab) License: GPL-3+ Files: */fr.luigifab.*.metainfo.xml */awf-*.bash */slackware/* Copyright: 2020-2026 Fabrice Creuzot (luigifab) License: Expat License: GPL-3+ 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 package is distributed in the hope that 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 . . On Debian systems, the complete text of the GNU General Public License version 3 can be found in "/usr/share/common-licenses/GPL-3". License: Expat Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: . The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. . THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Comment: This license also known as "MIT" or "MIT X11" however FSF consider "MIT" labelling ambiguous and copyright-format specification recommend to mark such license as "Expat". awf-extended-4.1.0/scripts/debian-gtk/deb.sh000066400000000000000000000130131517644610000206530ustar00rootroot00000000000000#!/bin/bash # Debian: sudo apt install dpkg-dev devscripts build-essential dh-make dh-autoreconf intltool libnotify-dev libgtk2.0-dev libgtk-3-dev libgtk-4-dev cd "$(dirname "$0")" export DH_QUIET=1 version="4.1.0" mkdir -p builder rm -rf builder/* # copy to a tmp directory if [ true ]; then cd builder wget https://github.com/luigifab/awf-extended/archive/v$version/awf-extended-$version.tar.gz tar xzf awf-extended-$version.tar.gz cd .. else temp=awf-extended-$version mkdir /tmp/$temp cp -r ../../* /tmp/$temp/ rm -rf /tmp/$temp/scripts/*/builder/ mv /tmp/$temp builder/ cp /usr/share/common-licenses/GPL*3 builder/$temp/LICENSE cd builder/ tar czf $temp.tar.gz $temp cd .. fi # create packages for Debian and Ubuntu and MX Linux for serie in experimental unstable resolute questing mx25 mx23 mx21; do printf "\n\n#################################################################### $serie ## awf-gtk\n\n" if [ $serie = "experimental" ]; then # copy for Ubuntu cp -a builder/awf-extended-$version/ builder/awf-extended-$version+src/ cd builder/awf-extended-$version/ elif [ $serie = "unstable" ]; then rm -rf builder/awf-extended-$version/ cp -a builder/awf-extended-$version+src/ builder/awf-extended-$version/ cd builder/awf-extended-$version/ else cp -a builder/awf-extended-$version+src/ builder/awf-extended-$serie-$version/ cd builder/awf-extended-$serie-$version/ fi dh_make -s -y -f ../awf-extended-$version.tar.gz -p awf-gtk rm -rf debian/*/*ex debian/*ex debian/*EX debian/README* debian/*doc* cp scripts/debian-gtk/* debian/ rm -f debian/deb.sh mkdir debian/upstream ; mv debian/metadata debian/upstream/metadata # debhelper: experimental:13 focal/mx21:12 bionic:9 xenial:9 trusty:9 if [ $serie = "experimental" ]; then mv debian/control.ubuntu debian/control # yes elif [ $serie = "unstable" ]; then mv debian/control.debian debian/control sed -i -e 's/ --disable-gtk5/ --disable-gtk2 --disable-gtk5/g' -e 's/ "gtk2"//g' -e 's/ "gtk5"//g' debian/rules elif [ $serie = "mx21" ]; then mv debian/control.mxo debian/control sed -i 's/debhelper-compat (= 13)/debhelper-compat (= 12)/g' debian/control elif [ $serie = "focal" ]; then mv debian/control.ubuntu debian/control sed -i 's/debhelper-compat (= 13)/debhelper-compat (= 12)/g' debian/control elif [ $serie = "bionic" ]; then mv debian/control.ubuntu debian/control sed -i 's/dh $@/dh $@ --with autoreconf/g' debian/rules sed -i 's/execute_before_dh_install:/override_dh_update_autotools_config:/g' debian/rules sed -i 's/debhelper-compat (= 13)/debhelper-compat (= 9), dh-autoreconf/g' debian/control elif [ $serie = "xenial" ]; then mv debian/control.ubuntu debian/control sed -i 's/dh $@/dh $@ --with autoreconf/g' debian/rules sed -i 's/execute_before_dh_install:/override_dh_update_autotools_config:/g' debian/rules sed -i 's/debhelper-compat (= 13)/debhelper (>= 9), dh-autoreconf/g' debian/control sed -i ':a;N;$!ba;s/Rules-Requires-Root: no\n//g' debian/control echo 9 > debian/compat elif [ $serie = "trusty" ]; then mv debian/control.ubuntu debian/control sed -i 's/dh $@/dh $@ --with autotools_dev,autoreconf/g' debian/rules sed -i 's/execute_before_dh_install:/override_dh_autotools-dev_updateconfig:/g' debian/rules sed -i 's/debhelper-compat (= 13)/debhelper (>= 9), autotools-dev, dh-autoreconf/g' debian/control sed -i ':a;N;$!ba;s/Rules-Requires-Root: no\n//g' debian/control echo 9 > debian/compat else mv debian/control.ubuntu debian/control fi if [ $serie = "mx25" ] || [ $serie = "mx23" ]; then mv debian/changelog.mx debian/changelog sed -i 's/-1) /-1~'$serie'+1) /' debian/changelog sed -i 's/ experimental; / mx; /' debian/changelog sed -i 's/ unstable; / mx; /' debian/changelog rm debian/*gtk5* sed -i '/gtk5/d' debian/clean elif [ $serie = "mx21" ]; then mv debian/changelog.mx debian/changelog sed -i 's/-1) /-1~'$serie'+1) /' debian/changelog sed -i 's/ experimental; / mx; /' debian/changelog sed -i 's/ unstable; / mx; /' debian/changelog rm debian/*gtk4* debian/*gtk5* sed -i '/gtk4/d;/gtk5/d' debian/clean elif [ $serie = "experimental" ]; then mv debian/changelog.debian debian/changelog sed -i 's/ experimental; / '$serie'; /g' debian/changelog rm debian/*gtk5* sed -i '/gtk5/d' debian/clean elif [ $serie = "unstable" ]; then mv debian/changelog.debian debian/changelog sed -i 's/ experimental; / '$serie'; /g' debian/changelog rm debian/*gtk2* debian/*gtk5* sed -i '/gtk2/d;/gtk5/d' debian/clean #nano debian/control else mv debian/changelog.ubuntu debian/changelog sed -i 's/ experimental; / '$serie'; /g' debian/changelog sed -i 's/-1) /-1+'$serie') /' debian/changelog rm debian/*gtk5* sed -i '/gtk5/d' debian/clean fi rm -f debian/*.mx debian/*.mxo debian/*.debian debian/*.ubuntu if [ $serie = "experimental" ]; then echo "===================== build package ($serie) ==" dpkg-buildpackage -us -uc echo "=========================== lintian ($serie) ==" lintian -EviIL +pedantic ../awf-gtk_$version*.changes rm ../*amd64.changes fi echo "============== build source package ($serie) ==" dpkg-buildpackage -us -uc -ui -d -S cd .. if [ $serie = "experimental" ] || [ $serie = "unstable" ]; then echo "=========================== debsign ($serie) ==" debsign awf-gtk*$version-*_source.changes else echo "=========================== debsign ($serie) ==" debsign awf-gtk*$version*$serie*source.changes fi cd .. done printf "\n\n" rm builder/*dbgsym*deb ls -dlth "$PWD"/builder/*.deb "$PWD"/builder/*.changes printf "\n" rm -rf builder/*/awf-extended-4.1.0/scripts/debian-gtk/fr.luigifab.awfgtk2.metainfo.xml000066400000000000000000000013021517644610000256420ustar00rootroot00000000000000 fr.luigifab.awfgtk2 awf-gtk2 GPL-3.0-or-later MIT

Theme preview application for GTK 2

A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme.

https://github.com/luigifab/awf-extended awf-gtk2.desktop awf-gtk2 awf-extended-4.1.0/scripts/debian-gtk/fr.luigifab.awfgtk3.metainfo.xml000066400000000000000000000013021517644610000256430ustar00rootroot00000000000000 fr.luigifab.awfgtk3 awf-gtk3 GPL-3.0-or-later MIT Theme preview application for GTK 3

A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme.

https://github.com/luigifab/awf-extended awf-gtk3.desktop awf-gtk3
awf-extended-4.1.0/scripts/debian-gtk/fr.luigifab.awfgtk4.metainfo.xml000066400000000000000000000013021517644610000256440ustar00rootroot00000000000000 fr.luigifab.awfgtk4 awf-gtk4 GPL-3.0-or-later MIT Theme preview application for GTK 4

A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme.

https://github.com/luigifab/awf-extended awf-gtk4.desktop awf-gtk4
awf-extended-4.1.0/scripts/debian-gtk/fr.luigifab.awfgtk5.metainfo.xml000066400000000000000000000013021517644610000256450ustar00rootroot00000000000000 fr.luigifab.awfgtk5 awf-gtk5 GPL-3.0-or-later MIT Theme preview application for GTK 5

A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme.

https://github.com/luigifab/awf-extended awf-gtk5.desktop awf-gtk5
awf-extended-4.1.0/scripts/debian-gtk/metadata000066400000000000000000000006301517644610000212710ustar00rootroot00000000000000Bug-Database: https://github.com/luigifab/awf-extended/issues/ Bug-Submit: https://github.com/luigifab/awf-extended/issues/new Documentation: https://github.com/luigifab/awf-extended Archive: GitHub Repository: https://github.com/luigifab/awf-extended.git Repository-Browse: https://github.com/luigifab/awf-extended Screenshots: https://raw.githubusercontent.com/luigifab/awf-extended/levelup/images/gtk3.pngawf-extended-4.1.0/scripts/debian-gtk/rules000066400000000000000000000013361517644610000206470ustar00rootroot00000000000000#!/usr/bin/make -f export DEB_BUILD_MAINT_OPTIONS = hardening=+all %: dh $@ --with bash-completion override_dh_auto_configure: dh_auto_configure -- --disable-gtk5 --disable-qt5 --disable-qt6 --disable-qt7 execute_before_dh_install: for engine in "gtk2" "gtk3" "gtk4"; do \ cp -ar data/icons/ icons-$$engine/; \ for file in icons-$$engine/*/*/awf.png; do mv $$file `dirname $$file`/awf-$$engine.png; done; \ for file in icons-$$engine/*/*/awf.svg; do mv $$file `dirname $$file`/awf-$$engine.svg; done; \ for file in src/po/*.po; do \ code=`basename "$$file" .po`; \ mkdir -p locale-$$engine/$$code/LC_MESSAGES/; \ msgfmt src/po/$$code.po -o locale-$$engine/$$code/LC_MESSAGES/awf-$$engine.mo; \ done; \ done awf-extended-4.1.0/scripts/debian-gtk2/000077500000000000000000000000001517644610000176515ustar00rootroot00000000000000awf-extended-4.1.0/scripts/debian-gtk2/changelog000066400000000000000000000004751517644610000215310ustar00rootroot00000000000000awf-gtk2 (4.1.0-1) experimental; urgency=low * New upstream release -- Fabrice Creuzot Tue, 05 May 2026 20:00:00 +0000 awf-gtk2 (2.5.0-1) experimental; urgency=low * Initial Debian package release (Closes: #959434) -- Fabrice Creuzot Wed, 07 Jul 2021 20:00:00 +0000 awf-extended-4.1.0/scripts/debian-gtk2/clean000066400000000000000000000000301517644610000206470ustar00rootroot00000000000000icons-gtk2/ locale-gtk2/awf-extended-4.1.0/scripts/debian-gtk2/control000066400000000000000000000014211517644610000212520ustar00rootroot00000000000000Source: awf-gtk2 Section: x11 Priority: optional Maintainer: Fabrice Creuzot Build-Depends: debhelper-compat (= 13), bash-completion, libnotify-dev (>= 0.7.0), libgtk2.0-dev (>= 2.24.0) Rules-Requires-Root: no Standards-Version: 4.7.4 Homepage: https://github.com/luigifab/awf-extended Vcs-Browser: https://github.com/luigifab/awf-extended Vcs-Git: https://github.com/luigifab/awf-extended.git Package: awf-gtk2 Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} Replaces: awf Description: theme preview application for GTK 2 A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme. . This package provides the program for GTK 2. awf-extended-4.1.0/scripts/debian-gtk2/deb.sh000066400000000000000000000115531517644610000207440ustar00rootroot00000000000000#!/bin/bash # Debian: sudo apt install dpkg-dev devscripts build-essential dh-make dh-autoreconf intltool libnotify-dev libgtk2.0-dev cd "$(dirname "$0")" export DH_QUIET=1 version="4.1.0" engine="gtk2" mkdir -p builder rm -rf builder/* # copy to a tmp directory if [ true ]; then cd builder wget https://github.com/luigifab/awf-extended/archive/v$version/awf-extended-$version.tar.gz tar xzf awf-extended-$version.tar.gz cd .. else temp=awf-extended-$version mkdir /tmp/$temp cp -r ../../* /tmp/$temp/ rm -rf /tmp/$temp/scripts/*/builder/ mv /tmp/$temp builder/ cp /usr/share/common-licenses/GPL*3 builder/$temp/LICENSE cd builder/ tar czf $temp.tar.gz $temp cd .. fi # create packages for Debian and Ubuntu for serie in experimental resolute questing noble jammy focal bionic xenial trusty; do printf "\n\n################################################################### $serie ## awf-$engine\n\n" if [ $serie = "experimental" ]; then # copy for Ubuntu cp -a builder/awf-extended-$version/ builder/awf-extended-$version+src/ cd builder/awf-extended-$version/ elif [ $serie = "unstable" ]; then rm -rf builder/awf-extended-$version/ cp -a builder/awf-extended-$version+src/ builder/awf-extended-$version/ cd builder/awf-extended-$version/ else cp -a builder/awf-extended-$version+src/ builder/awf-extended-$serie-$version/ cd builder/awf-extended-$serie-$version/ fi dh_make -s -y -f ../awf-extended-$version.tar.gz -p awf-$engine rm -rf debian/*/*ex debian/*ex debian/*EX debian/README* debian/*doc* cp scripts/debian-$engine/* debian/ cp scripts/debian-gtk/*$engine* scripts/debian-gtk/copyright scripts/debian-gtk/metadata debian/ head -n -1 debian/*$engine*.install > debian/install ; rm debian/awf-$engine.install rm -f debian/deb.sh mkdir debian/upstream ; mv debian/metadata debian/upstream/metadata # debhelper: experimental:13 focal/mx21:12 bionic:9 xenial:9 trusty:9 if [ $serie = "experimental" ] || [ $serie = "unstable" ]; then mv debian/control.debian debian/control elif [ $serie = "mx21" ]; then sed -i 's/debhelper-compat (= 13)/debhelper-compat (= 12)/g' debian/control elif [ $serie = "focal" ]; then mv debian/control.ubuntu debian/control sed -i 's/debhelper-compat (= 13)/debhelper-compat (= 12)/g' debian/control elif [ $serie = "bionic" ]; then mv debian/control.ubuntu debian/control sed -i 's/dh $@/dh $@ --with autoreconf/g' debian/rules sed -i 's/execute_before_dh_install:/override_dh_update_autotools_config:/g' debian/rules sed -i 's/debhelper-compat (= 13)/debhelper-compat (= 9), dh-autoreconf/g' debian/control elif [ $serie = "xenial" ]; then mv debian/control.ubuntu debian/control sed -i 's/dh $@/dh $@ --with autoreconf/g' debian/rules sed -i 's/execute_before_dh_install:/override_dh_update_autotools_config:/g' debian/rules sed -i 's/debhelper-compat (= 13)/debhelper (>= 9), dh-autoreconf/g' debian/control sed -i ':a;N;$!ba;s/Rules-Requires-Root: no\n//g' debian/control echo 9 > debian/compat elif [ $serie = "trusty" ]; then mv debian/control.ubuntu debian/control sed -i 's/dh $@/dh $@ --with autotools_dev,autoreconf/g' debian/rules sed -i 's/execute_before_dh_install:/override_dh_autotools-dev_updateconfig:/g' debian/rules sed -i 's/debhelper-compat (= 13)/debhelper (>= 9), autotools-dev, dh-autoreconf/g' debian/control sed -i ':a;N;$!ba;s/Rules-Requires-Root: no\n//g' debian/control echo 9 > debian/compat else mv debian/control.ubuntu debian/control fi if [ $serie = "mx25" ] || [ $serie = "mx23" ] || [ $serie = "mx21" ]; then mv debian/changelog.mx debian/changelog sed -i 's/-1) /-1~'$serie'+1) /' debian/changelog sed -i 's/ experimental; / mx; /' debian/changelog sed -i 's/ unstable; / mx; /' debian/changelog elif [ $serie = "experimental" ] || [ $serie = "unstable" ]; then sed -i 's/ experimental; / '$serie'; /g' debian/changelog mv debian/changelog.debian debian/changelog else mv debian/changelog.ubuntu debian/changelog sed -i 's/ experimental; / '$serie'; /g' debian/changelog sed -i 's/-1) /-1+'$serie') /' debian/changelog fi rm -f debian/*.mx debian/*.debian debian/*.ubuntu if [ $serie = "experimental" ]; then echo "===================== build package ($serie) ==" dpkg-buildpackage -us -uc echo "=========================== lintian ($serie) ==" lintian -EviIL +pedantic ../awf-${gtk}_$version*.changes rm ../*amd64.changes fi echo "============== build source package ($serie) ==" dpkg-buildpackage -us -uc -ui -d -S cd .. if [ $serie = "experimental" ] || [ $serie = "unstable" ]; then echo "=========================== debsign ($serie) ==" debsign awf-$engine*$version-*_source.changes else echo "=========================== debsign ($serie) ==" debsign awf-$engine*$version*$serie*source.changes fi cd .. done printf "\n\n" rm builder/*dbgsym*deb ls -dlth "$PWD"/builder/*.deb "$PWD"/builder/*.changes printf "\n" rm -rf builder/*/awf-extended-4.1.0/scripts/debian-gtk2/rules000066400000000000000000000011241517644610000207240ustar00rootroot00000000000000#!/usr/bin/make -f export DEB_BUILD_MAINT_OPTIONS = hardening=+all %: dh $@ --with bash-completion override_dh_auto_configure: dh_auto_configure -- --enable-only-gtk2 execute_before_dh_install: cp -ar data/icons/ icons-gtk2/ for file in icons-gtk2/*/*/awf.png; do mv $$file `dirname $$file`/awf-gtk2.png; done for file in icons-gtk2/*/*/awf.svg; do mv $$file `dirname $$file`/awf-gtk2.svg; done for file in src/po/*.po; do \ code=`basename "$$file" .po`; \ mkdir -p locale-gtk2/$$code/LC_MESSAGES/; \ msgfmt src/po/$$code.po -o locale-gtk2/$$code/LC_MESSAGES/awf-gtk2.mo; \ done awf-extended-4.1.0/scripts/debian-gtk3/000077500000000000000000000000001517644610000176525ustar00rootroot00000000000000awf-extended-4.1.0/scripts/debian-gtk3/changelog000066400000000000000000000004751517644610000215320ustar00rootroot00000000000000awf-gtk3 (4.1.0-1) experimental; urgency=low * New upstream release -- Fabrice Creuzot Tue, 05 May 2026 20:00:00 +0000 awf-gtk3 (2.5.0-1) experimental; urgency=low * Initial Debian package release (Closes: #959434) -- Fabrice Creuzot Wed, 07 Jul 2021 20:00:00 +0000 awf-extended-4.1.0/scripts/debian-gtk3/clean000066400000000000000000000000301517644610000206500ustar00rootroot00000000000000icons-gtk3/ locale-gtk3/awf-extended-4.1.0/scripts/debian-gtk3/control000066400000000000000000000014041517644610000212540ustar00rootroot00000000000000Source: awf-gtk3 Section: x11 Priority: optional Maintainer: Fabrice Creuzot Build-Depends: debhelper-compat (= 13), bash-completion, libnotify-dev (>= 0.7.0), libgtk-3-dev Rules-Requires-Root: no Standards-Version: 4.7.4 Homepage: https://github.com/luigifab/awf-extended Vcs-Browser: https://github.com/luigifab/awf-extended Vcs-Git: https://github.com/luigifab/awf-extended.git Package: awf-gtk3 Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} Replaces: awf Description: theme preview application for GTK 3 A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme. . This package provides the program for GTK 3. awf-extended-4.1.0/scripts/debian-gtk3/deb.sh000066400000000000000000000115521517644610000207440ustar00rootroot00000000000000#!/bin/bash # Debian: sudo apt install dpkg-dev devscripts build-essential dh-make dh-autoreconf intltool libnotify-dev libgtk-3-dev cd "$(dirname "$0")" export DH_QUIET=1 version="4.1.0" engine="gtk3" mkdir -p builder rm -rf builder/* # copy to a tmp directory if [ true ]; then cd builder wget https://github.com/luigifab/awf-extended/archive/v$version/awf-extended-$version.tar.gz tar xzf awf-extended-$version.tar.gz cd .. else temp=awf-extended-$version mkdir /tmp/$temp cp -r ../../* /tmp/$temp/ rm -rf /tmp/$temp/scripts/*/builder/ mv /tmp/$temp builder/ cp /usr/share/common-licenses/GPL*3 builder/$temp/LICENSE cd builder/ tar czf $temp.tar.gz $temp cd .. fi # create packages for Debian and Ubuntu for serie in experimental resolute questing noble jammy focal bionic xenial trusty; do printf "\n\n################################################################### $serie ## awf-$engine\n\n" if [ $serie = "experimental" ]; then # copy for Ubuntu cp -a builder/awf-extended-$version/ builder/awf-extended-$version+src/ cd builder/awf-extended-$version/ elif [ $serie = "unstable" ]; then rm -rf builder/awf-extended-$version/ cp -a builder/awf-extended-$version+src/ builder/awf-extended-$version/ cd builder/awf-extended-$version/ else cp -a builder/awf-extended-$version+src/ builder/awf-extended-$serie-$version/ cd builder/awf-extended-$serie-$version/ fi dh_make -s -y -f ../awf-extended-$version.tar.gz -p awf-$engine rm -rf debian/*/*ex debian/*ex debian/*EX debian/README* debian/*doc* cp scripts/debian-$engine/* debian/ cp scripts/debian-gtk/*$engine* scripts/debian-gtk/copyright scripts/debian-gtk/metadata debian/ head -n -1 debian/*$engine*.install > debian/install ; rm debian/awf-$engine.install rm -f debian/deb.sh mkdir debian/upstream ; mv debian/metadata debian/upstream/metadata # debhelper: experimental:13 focal/mx21:12 bionic:9 xenial:9 trusty:9 if [ $serie = "experimental" ] || [ $serie = "unstable" ]; then mv debian/control.debian debian/control elif [ $serie = "mx21" ]; then sed -i 's/debhelper-compat (= 13)/debhelper-compat (= 12)/g' debian/control elif [ $serie = "focal" ]; then mv debian/control.ubuntu debian/control sed -i 's/debhelper-compat (= 13)/debhelper-compat (= 12)/g' debian/control elif [ $serie = "bionic" ]; then mv debian/control.ubuntu debian/control sed -i 's/dh $@/dh $@ --with autoreconf/g' debian/rules sed -i 's/execute_before_dh_install:/override_dh_update_autotools_config:/g' debian/rules sed -i 's/debhelper-compat (= 13)/debhelper-compat (= 9), dh-autoreconf/g' debian/control elif [ $serie = "xenial" ]; then mv debian/control.ubuntu debian/control sed -i 's/dh $@/dh $@ --with autoreconf/g' debian/rules sed -i 's/execute_before_dh_install:/override_dh_update_autotools_config:/g' debian/rules sed -i 's/debhelper-compat (= 13)/debhelper (>= 9), dh-autoreconf/g' debian/control sed -i ':a;N;$!ba;s/Rules-Requires-Root: no\n//g' debian/control echo 9 > debian/compat elif [ $serie = "trusty" ]; then mv debian/control.ubuntu debian/control sed -i 's/dh $@/dh $@ --with autotools_dev,autoreconf/g' debian/rules sed -i 's/execute_before_dh_install:/override_dh_autotools-dev_updateconfig:/g' debian/rules sed -i 's/debhelper-compat (= 13)/debhelper (>= 9), autotools-dev, dh-autoreconf/g' debian/control sed -i ':a;N;$!ba;s/Rules-Requires-Root: no\n//g' debian/control echo 9 > debian/compat else mv debian/control.ubuntu debian/control fi if [ $serie = "mx25" ] || [ $serie = "mx23" ] || [ $serie = "mx21" ]; then mv debian/changelog.mx debian/changelog sed -i 's/-1) /-1~'$serie'+1) /' debian/changelog sed -i 's/ experimental; / mx; /' debian/changelog sed -i 's/ unstable; / mx; /' debian/changelog elif [ $serie = "experimental" ] || [ $serie = "unstable" ]; then sed -i 's/ experimental; / '$serie'; /g' debian/changelog mv debian/changelog.debian debian/changelog else mv debian/changelog.ubuntu debian/changelog sed -i 's/ experimental; / '$serie'; /g' debian/changelog sed -i 's/-1) /-1+'$serie') /' debian/changelog fi rm -f debian/*.mx debian/*.debian debian/*.ubuntu if [ $serie = "experimental" ]; then echo "===================== build package ($serie) ==" dpkg-buildpackage -us -uc echo "=========================== lintian ($serie) ==" lintian -EviIL +pedantic ../awf-${gtk}_$version*.changes rm ../*amd64.changes fi echo "============== build source package ($serie) ==" dpkg-buildpackage -us -uc -ui -d -S cd .. if [ $serie = "experimental" ] || [ $serie = "unstable" ]; then echo "=========================== debsign ($serie) ==" debsign awf-$engine*$version-*_source.changes else echo "=========================== debsign ($serie) ==" debsign awf-$engine*$version*$serie*source.changes fi cd .. done printf "\n\n" rm builder/*dbgsym*deb ls -dlth "$PWD"/builder/*.deb "$PWD"/builder/*.changes printf "\n" rm -rf builder/*/awf-extended-4.1.0/scripts/debian-gtk3/rules000066400000000000000000000011241517644610000207250ustar00rootroot00000000000000#!/usr/bin/make -f export DEB_BUILD_MAINT_OPTIONS = hardening=+all %: dh $@ --with bash-completion override_dh_auto_configure: dh_auto_configure -- --enable-only-gtk3 execute_before_dh_install: cp -ar data/icons/ icons-gtk3/ for file in icons-gtk3/*/*/awf.png; do mv $$file `dirname $$file`/awf-gtk3.png; done for file in icons-gtk3/*/*/awf.svg; do mv $$file `dirname $$file`/awf-gtk3.svg; done for file in src/po/*.po; do \ code=`basename "$$file" .po`; \ mkdir -p locale-gtk3/$$code/LC_MESSAGES/; \ msgfmt src/po/$$code.po -o locale-gtk3/$$code/LC_MESSAGES/awf-gtk3.mo; \ done awf-extended-4.1.0/scripts/debian-gtk4/000077500000000000000000000000001517644610000176535ustar00rootroot00000000000000awf-extended-4.1.0/scripts/debian-gtk4/changelog000066400000000000000000000004751517644610000215330ustar00rootroot00000000000000awf-gtk4 (4.1.0-1) experimental; urgency=low * New upstream release -- Fabrice Creuzot Tue, 05 May 2026 20:00:00 +0000 awf-gtk4 (2.5.0-1) experimental; urgency=low * Initial Debian package release (Closes: #959434) -- Fabrice Creuzot Wed, 07 Jul 2021 20:00:00 +0000 awf-extended-4.1.0/scripts/debian-gtk4/clean000066400000000000000000000000301517644610000206510ustar00rootroot00000000000000icons-gtk4/ locale-gtk4/awf-extended-4.1.0/scripts/debian-gtk4/control000066400000000000000000000014041517644610000212550ustar00rootroot00000000000000Source: awf-gtk4 Section: x11 Priority: optional Maintainer: Fabrice Creuzot Build-Depends: debhelper-compat (= 13), bash-completion, libnotify-dev (>= 0.7.0), libgtk-4-dev Rules-Requires-Root: no Standards-Version: 4.7.4 Homepage: https://github.com/luigifab/awf-extended Vcs-Browser: https://github.com/luigifab/awf-extended Vcs-Git: https://github.com/luigifab/awf-extended.git Package: awf-gtk4 Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} Replaces: awf Description: theme preview application for GTK 4 A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme. . This package provides the program for GTK 4. awf-extended-4.1.0/scripts/debian-gtk4/deb.sh000066400000000000000000000115171517644610000207460ustar00rootroot00000000000000#!/bin/bash # Debian: sudo apt install dpkg-dev devscripts build-essential dh-make dh-autoreconf intltool libnotify-dev libgtk-4-dev cd "$(dirname "$0")" export DH_QUIET=1 version="4.1.0" engine="gtk4" mkdir -p builder rm -rf builder/* # copy to a tmp directory if [ true ]; then cd builder wget https://github.com/luigifab/awf-extended/archive/v$version/awf-extended-$version.tar.gz tar xzf awf-extended-$version.tar.gz cd .. else temp=awf-extended-$version mkdir /tmp/$temp cp -r ../../* /tmp/$temp/ rm -rf /tmp/$temp/scripts/*/builder/ mv /tmp/$temp builder/ cp /usr/share/common-licenses/GPL*3 builder/$temp/LICENSE cd builder/ tar czf $temp.tar.gz $temp cd .. fi # create packages for Debian and Ubuntu for serie in experimental resolute questing noble jammy; do printf "\n\n################################################################### $serie ## awf-$engine\n\n" if [ $serie = "experimental" ]; then # copy for Ubuntu cp -a builder/awf-extended-$version/ builder/awf-extended-$version+src/ cd builder/awf-extended-$version/ elif [ $serie = "unstable" ]; then rm -rf builder/awf-extended-$version/ cp -a builder/awf-extended-$version+src/ builder/awf-extended-$version/ cd builder/awf-extended-$version/ else cp -a builder/awf-extended-$version+src/ builder/awf-extended-$serie-$version/ cd builder/awf-extended-$serie-$version/ fi dh_make -s -y -f ../awf-extended-$version.tar.gz -p awf-$engine rm -rf debian/*/*ex debian/*ex debian/*EX debian/README* debian/*doc* cp scripts/debian-$engine/* debian/ cp scripts/debian-gtk/*$engine* scripts/debian-gtk/copyright scripts/debian-gtk/metadata debian/ head -n -1 debian/*$engine*.install > debian/install ; rm debian/awf-$engine.install rm -f debian/deb.sh mkdir debian/upstream ; mv debian/metadata debian/upstream/metadata # debhelper: experimental:13 focal/mx21:12 bionic:9 xenial:9 trusty:9 if [ $serie = "experimental" ] || [ $serie = "unstable" ]; then mv debian/control.debian debian/control elif [ $serie = "mx21" ]; then sed -i 's/debhelper-compat (= 13)/debhelper-compat (= 12)/g' debian/control elif [ $serie = "focal" ]; then mv debian/control.ubuntu debian/control sed -i 's/debhelper-compat (= 13)/debhelper-compat (= 12)/g' debian/control elif [ $serie = "bionic" ]; then mv debian/control.ubuntu debian/control sed -i 's/dh $@/dh $@ --with autoreconf/g' debian/rules sed -i 's/execute_before_dh_install:/override_dh_update_autotools_config:/g' debian/rules sed -i 's/debhelper-compat (= 13)/debhelper-compat (= 9), dh-autoreconf/g' debian/control elif [ $serie = "xenial" ]; then mv debian/control.ubuntu debian/control sed -i 's/dh $@/dh $@ --with autoreconf/g' debian/rules sed -i 's/execute_before_dh_install:/override_dh_update_autotools_config:/g' debian/rules sed -i 's/debhelper-compat (= 13)/debhelper (>= 9), dh-autoreconf/g' debian/control sed -i ':a;N;$!ba;s/Rules-Requires-Root: no\n//g' debian/control echo 9 > debian/compat elif [ $serie = "trusty" ]; then mv debian/control.ubuntu debian/control sed -i 's/dh $@/dh $@ --with autotools_dev,autoreconf/g' debian/rules sed -i 's/execute_before_dh_install:/override_dh_autotools-dev_updateconfig:/g' debian/rules sed -i 's/debhelper-compat (= 13)/debhelper (>= 9), autotools-dev, dh-autoreconf/g' debian/control sed -i ':a;N;$!ba;s/Rules-Requires-Root: no\n//g' debian/control echo 9 > debian/compat else mv debian/control.ubuntu debian/control fi if [ $serie = "mx25" ] || [ $serie = "mx23" ] || [ $serie = "mx21" ]; then mv debian/changelog.mx debian/changelog sed -i 's/-1) /-1~'$serie'+1) /' debian/changelog sed -i 's/ experimental; / mx; /' debian/changelog sed -i 's/ unstable; / mx; /' debian/changelog elif [ $serie = "experimental" ] || [ $serie = "unstable" ]; then sed -i 's/ experimental; / '$serie'; /g' debian/changelog mv debian/changelog.debian debian/changelog else mv debian/changelog.ubuntu debian/changelog sed -i 's/ experimental; / '$serie'; /g' debian/changelog sed -i 's/-1) /-1+'$serie') /' debian/changelog fi rm -f debian/*.mx debian/*.debian debian/*.ubuntu if [ $serie = "experimental" ]; then echo "===================== build package ($serie) ==" dpkg-buildpackage -us -uc echo "=========================== lintian ($serie) ==" lintian -EviIL +pedantic ../awf-${gtk}_$version*.changes rm ../*amd64.changes fi echo "============== build source package ($serie) ==" dpkg-buildpackage -us -uc -ui -d -S cd .. if [ $serie = "experimental" ] || [ $serie = "unstable" ]; then echo "=========================== debsign ($serie) ==" debsign awf-$engine*$version-*_source.changes else echo "=========================== debsign ($serie) ==" debsign awf-$engine*$version*$serie*source.changes fi cd .. done printf "\n\n" rm builder/*dbgsym*deb ls -dlth "$PWD"/builder/*.deb "$PWD"/builder/*.changes printf "\n" rm -rf builder/*/awf-extended-4.1.0/scripts/debian-gtk4/rules000066400000000000000000000011241517644610000207260ustar00rootroot00000000000000#!/usr/bin/make -f export DEB_BUILD_MAINT_OPTIONS = hardening=+all %: dh $@ --with bash-completion override_dh_auto_configure: dh_auto_configure -- --enable-only-gtk4 execute_before_dh_install: cp -ar data/icons/ icons-gtk4/ for file in icons-gtk4/*/*/awf.png; do mv $$file `dirname $$file`/awf-gtk4.png; done for file in icons-gtk4/*/*/awf.svg; do mv $$file `dirname $$file`/awf-gtk4.svg; done for file in src/po/*.po; do \ code=`basename "$$file" .po`; \ mkdir -p locale-gtk4/$$code/LC_MESSAGES/; \ msgfmt src/po/$$code.po -o locale-gtk4/$$code/LC_MESSAGES/awf-gtk4.mo; \ done awf-extended-4.1.0/scripts/debian-gtk5/000077500000000000000000000000001517644610000176545ustar00rootroot00000000000000awf-extended-4.1.0/scripts/debian-gtk5/changelog000066400000000000000000000004751517644610000215340ustar00rootroot00000000000000awf-gtk5 (4.1.0-1) experimental; urgency=low * New upstream release -- Fabrice Creuzot Tue, 05 May 2026 20:00:00 +0000 awf-gtk5 (2.5.0-1) experimental; urgency=low * Initial Debian package release (Closes: #959434) -- Fabrice Creuzot Wed, 07 Jul 2021 20:00:00 +0000 awf-extended-4.1.0/scripts/debian-gtk5/clean000066400000000000000000000000301517644610000206520ustar00rootroot00000000000000icons-gtk5/ locale-gtk5/awf-extended-4.1.0/scripts/debian-gtk5/control000066400000000000000000000014041517644610000212560ustar00rootroot00000000000000Source: awf-gtk5 Section: x11 Priority: optional Maintainer: Fabrice Creuzot Build-Depends: debhelper-compat (= 13), bash-completion, libnotify-dev (>= 0.7.0), libgtk-5-dev Rules-Requires-Root: no Standards-Version: 4.7.4 Homepage: https://github.com/luigifab/awf-extended Vcs-Browser: https://github.com/luigifab/awf-extended Vcs-Git: https://github.com/luigifab/awf-extended.git Package: awf-gtk5 Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} Replaces: awf Description: theme preview application for GTK 5 A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme. . This package provides the program for GTK 5. awf-extended-4.1.0/scripts/debian-gtk5/deb.sh000066400000000000000000000115031517644610000207420ustar00rootroot00000000000000#!/bin/bash # Debian: sudo apt install dpkg-dev devscripts build-essential dh-make dh-autoreconf intltool libnotify-dev libgtk-5-dev cd "$(dirname "$0")" export DH_QUIET=1 version="4.1.0" engine="gtk5" mkdir -p builder rm -rf builder/* # copy to a tmp directory if [ true ]; then cd builder wget https://github.com/luigifab/awf-extended/archive/v$version/awf-extended-$version.tar.gz tar xzf awf-extended-$version.tar.gz cd .. else temp=awf-extended-$version mkdir /tmp/$temp cp -r ../../* /tmp/$temp/ rm -rf /tmp/$temp/scripts/*/builder/ mv /tmp/$temp builder/ cp /usr/share/common-licenses/GPL*3 builder/$temp/LICENSE cd builder/ tar czf $temp.tar.gz $temp cd .. fi # create packages for Debian and Ubuntu for serie in experimental resolute questing; do printf "\n\n################################################################### $serie ## awf-$engine\n\n" if [ $serie = "experimental" ]; then # copy for Ubuntu cp -a builder/awf-extended-$version/ builder/awf-extended-$version+src/ cd builder/awf-extended-$version/ elif [ $serie = "unstable" ]; then rm -rf builder/awf-extended-$version/ cp -a builder/awf-extended-$version+src/ builder/awf-extended-$version/ cd builder/awf-extended-$version/ else cp -a builder/awf-extended-$version+src/ builder/awf-extended-$serie-$version/ cd builder/awf-extended-$serie-$version/ fi dh_make -s -y -f ../awf-extended-$version.tar.gz -p awf-$engine rm -rf debian/*/*ex debian/*ex debian/*EX debian/README* debian/*doc* cp scripts/debian-$engine/* debian/ cp scripts/debian-gtk/*$engine* scripts/debian-gtk/copyright scripts/debian-gtk/metadata debian/ head -n -1 debian/*$engine*.install > debian/install ; rm debian/awf-$engine.install rm -f debian/deb.sh mkdir debian/upstream ; mv debian/metadata debian/upstream/metadata # debhelper: experimental:13 focal/mx21:12 bionic:9 xenial:9 trusty:9 if [ $serie = "experimental" ] || [ $serie = "unstable" ]; then mv debian/control.debian debian/control elif [ $serie = "mx21" ]; then sed -i 's/debhelper-compat (= 13)/debhelper-compat (= 12)/g' debian/control elif [ $serie = "focal" ]; then mv debian/control.ubuntu debian/control sed -i 's/debhelper-compat (= 13)/debhelper-compat (= 12)/g' debian/control elif [ $serie = "bionic" ]; then mv debian/control.ubuntu debian/control sed -i 's/dh $@/dh $@ --with autoreconf/g' debian/rules sed -i 's/execute_before_dh_install:/override_dh_update_autotools_config:/g' debian/rules sed -i 's/debhelper-compat (= 13)/debhelper-compat (= 9), dh-autoreconf/g' debian/control elif [ $serie = "xenial" ]; then mv debian/control.ubuntu debian/control sed -i 's/dh $@/dh $@ --with autoreconf/g' debian/rules sed -i 's/execute_before_dh_install:/override_dh_update_autotools_config:/g' debian/rules sed -i 's/debhelper-compat (= 13)/debhelper (>= 9), dh-autoreconf/g' debian/control sed -i ':a;N;$!ba;s/Rules-Requires-Root: no\n//g' debian/control echo 9 > debian/compat elif [ $serie = "trusty" ]; then mv debian/control.ubuntu debian/control sed -i 's/dh $@/dh $@ --with autotools_dev,autoreconf/g' debian/rules sed -i 's/execute_before_dh_install:/override_dh_autotools-dev_updateconfig:/g' debian/rules sed -i 's/debhelper-compat (= 13)/debhelper (>= 9), autotools-dev, dh-autoreconf/g' debian/control sed -i ':a;N;$!ba;s/Rules-Requires-Root: no\n//g' debian/control echo 9 > debian/compat else mv debian/control.ubuntu debian/control fi if [ $serie = "mx25" ] || [ $serie = "mx23" ] || [ $serie = "mx21" ]; then mv debian/changelog.mx debian/changelog sed -i 's/-1) /-1~'$serie'+1) /' debian/changelog sed -i 's/ experimental; / mx; /' debian/changelog sed -i 's/ unstable; / mx; /' debian/changelog elif [ $serie = "experimental" ] || [ $serie = "unstable" ]; then sed -i 's/ experimental; / '$serie'; /g' debian/changelog mv debian/changelog.debian debian/changelog else mv debian/changelog.ubuntu debian/changelog sed -i 's/ experimental; / '$serie'; /g' debian/changelog sed -i 's/-1) /-1+'$serie') /' debian/changelog fi rm -f debian/*.mx debian/*.debian debian/*.ubuntu if [ $serie = "experimental" ]; then echo "===================== build package ($serie) ==" dpkg-buildpackage -us -uc echo "=========================== lintian ($serie) ==" lintian -EviIL +pedantic ../awf-${gtk}_$version*.changes rm ../*amd64.changes fi echo "============== build source package ($serie) ==" dpkg-buildpackage -us -uc -ui -d -S cd .. if [ $serie = "experimental" ] || [ $serie = "unstable" ]; then echo "=========================== debsign ($serie) ==" debsign awf-$engine*$version-*_source.changes else echo "=========================== debsign ($serie) ==" debsign awf-$engine*$version*$serie*source.changes fi cd .. done printf "\n\n" rm builder/*dbgsym*deb ls -dlth "$PWD"/builder/*.deb "$PWD"/builder/*.changes printf "\n" rm -rf builder/*/awf-extended-4.1.0/scripts/debian-gtk5/rules000066400000000000000000000011241517644610000207270ustar00rootroot00000000000000#!/usr/bin/make -f export DEB_BUILD_MAINT_OPTIONS = hardening=+all %: dh $@ --with bash-completion override_dh_auto_configure: dh_auto_configure -- --enable-only-gtk5 execute_before_dh_install: cp -ar data/icons/ icons-gtk5/ for file in icons-gtk5/*/*/awf.png; do mv $$file `dirname $$file`/awf-gtk5.png; done for file in icons-gtk5/*/*/awf.svg; do mv $$file `dirname $$file`/awf-gtk5.svg; done for file in src/po/*.po; do \ code=`basename "$$file" .po`; \ mkdir -p locale-gtk5/$$code/LC_MESSAGES/; \ msgfmt src/po/$$code.po -o locale-gtk5/$$code/LC_MESSAGES/awf-gtk5.mo; \ done awf-extended-4.1.0/scripts/debian-qt/000077500000000000000000000000001517644610000174265ustar00rootroot00000000000000awf-extended-4.1.0/scripts/debian-qt/awf-qt5.bash-completion000066400000000000000000000000311517644610000237120ustar00rootroot00000000000000data/awf-qt5.bash awf-qt5awf-extended-4.1.0/scripts/debian-qt/awf-qt5.install000066400000000000000000000004351517644610000223040ustar00rootroot00000000000000data/awf-qt5.desktop usr/share/applications icons-qt5/* usr/share/icons/hicolor locale-qt5/* usr/share/locale debian/fr.luigifab.awfqt5.metainfo.xml usr/share/metainfo usr/bin/awf-qt5 usr/binawf-extended-4.1.0/scripts/debian-qt/awf-qt5.manpages000066400000000000000000000000401517644610000224210ustar00rootroot00000000000000data/awf-qt5.1 data/awf-qt5.fr.1awf-extended-4.1.0/scripts/debian-qt/awf-qt6.bash-completion000066400000000000000000000000311517644610000237130ustar00rootroot00000000000000data/awf-qt6.bash awf-qt6awf-extended-4.1.0/scripts/debian-qt/awf-qt6.install000066400000000000000000000004351517644610000223050ustar00rootroot00000000000000data/awf-qt6.desktop usr/share/applications icons-qt6/* usr/share/icons/hicolor locale-qt6/* usr/share/locale debian/fr.luigifab.awfqt6.metainfo.xml usr/share/metainfo usr/bin/awf-qt6 usr/binawf-extended-4.1.0/scripts/debian-qt/awf-qt6.manpages000066400000000000000000000000401517644610000224220ustar00rootroot00000000000000data/awf-qt6.1 data/awf-qt6.fr.1awf-extended-4.1.0/scripts/debian-qt/awf-qt7.bash-completion000066400000000000000000000000311517644610000237140ustar00rootroot00000000000000data/awf-qt7.bash awf-qt7awf-extended-4.1.0/scripts/debian-qt/awf-qt7.install000066400000000000000000000004351517644610000223060ustar00rootroot00000000000000data/awf-qt7.desktop usr/share/applications icons-qt7/* usr/share/icons/hicolor locale-qt7/* usr/share/locale debian/fr.luigifab.awfqt7.metainfo.xml usr/share/metainfo usr/bin/awf-qt7 usr/binawf-extended-4.1.0/scripts/debian-qt/awf-qt7.manpages000066400000000000000000000000401517644610000224230ustar00rootroot00000000000000data/awf-qt7.1 data/awf-qt7.fr.1awf-extended-4.1.0/scripts/debian-qt/changelog.debian000066400000000000000000000002531517644610000225210ustar00rootroot00000000000000awf-qt (4.1.0-1) experimental; urgency=low * Initial Debian package release (Closes: #1129265) -- Fabrice Creuzot Tue, 05 May 2026 20:00:00 +0000 awf-extended-4.1.0/scripts/debian-qt/changelog.mx000066400000000000000000000004251517644610000217240ustar00rootroot00000000000000awf-qt (4.1.0-1) mx; urgency=low * New upstream release -- Fabrice Creuzot Tue, 05 May 2026 20:00:00 +0000 awf-qt (4.0.0-1) mx; urgency=low * Initial MX Linux package release -- Fabrice Creuzot Tue, 03 Mar 2026 20:00:00 +0000 awf-extended-4.1.0/scripts/debian-qt/changelog.ubuntu000066400000000000000000000002531517644610000226210ustar00rootroot00000000000000awf-qt (4.1.0-1) experimental; urgency=low * Initial Debian package release (Closes: #1129265) -- Fabrice Creuzot Tue, 05 May 2026 20:00:00 +0000 awf-extended-4.1.0/scripts/debian-qt/clean000066400000000000000000000001041517644610000204260ustar00rootroot00000000000000icons-qt5/ icons-qt6/ icons-qt7/ locale-qt5/ locale-qt6/ locale-qt7/awf-extended-4.1.0/scripts/debian-qt/control000066400000000000000000000024721517644610000210360ustar00rootroot00000000000000Source: awf-qt Section: x11 Priority: optional Maintainer: Fabrice Creuzot Build-Depends: debhelper-compat (= 13), bash-completion, pkgconf, qtbase5-dev, qt6-base-dev Rules-Requires-Root: no Standards-Version: 4.7.4 Homepage: https://github.com/luigifab/awf-extended Vcs-Browser: https://github.com/luigifab/awf-extended Vcs-Git: https://github.com/luigifab/awf-extended.git Package: awf-qt5 Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} Recommends: qt5-gtk-platformtheme, qt5-style-globalqss, qttranslations5-l10n, libqt5svg5, Suggests: libnotify-bin Description: theme preview application for Qt 5 A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme. . This package provides the program for Qt 5. Package: awf-qt6 Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} Recommends: qt6-gtk-platformtheme, qt6-style-globalqss, qt6-translations-l10n, qt6-svg-plugins, Suggests: libnotify-bin Description: theme preview application for Qt 6 A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme. . This package provides the program for Qt 6. awf-extended-4.1.0/scripts/debian-qt/copyright000066400000000000000000000047041517644610000213660ustar00rootroot00000000000000Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ Source: https://github.com/luigifab/awf-extended Upstream-Contact: Fabrice Creuzot Files: * Copyright: 2011-2016 Valère Monseur (valr) 2020-2026 Fabrice Creuzot (luigifab) License: GPL-3+ Files: */fr.luigifab.*.metainfo.xml */awf-*.bash */slackware/* Copyright: 2020-2026 Fabrice Creuzot (luigifab) License: Expat License: GPL-3+ 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 package is distributed in the hope that 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 . . On Debian systems, the complete text of the GNU General Public License version 3 can be found in "/usr/share/common-licenses/GPL-3". License: Expat Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: . The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. . THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Comment: This license also known as "MIT" or "MIT X11" however FSF consider "MIT" labelling ambiguous and copyright-format specification recommend to mark such license as "Expat". awf-extended-4.1.0/scripts/debian-qt/deb.sh000066400000000000000000000125161517644610000205210ustar00rootroot00000000000000#!/bin/bash # Debian: sudo apt install dpkg-dev devscripts build-essential dh-make dh-autoreconf intltool qtbase5-dev qt6-base-dev cd "$(dirname "$0")" export DH_QUIET=1 version="4.1.0" mkdir -p builder rm -rf builder/* # copy to a tmp directory if [ true ]; then cd builder wget https://github.com/luigifab/awf-extended/archive/v$version/awf-extended-$version.tar.gz tar xzf awf-extended-$version.tar.gz cd .. else temp=awf-extended-$version mkdir /tmp/$temp cp -r ../../* /tmp/$temp/ rm -rf /tmp/$temp/scripts/*/builder/ mv /tmp/$temp builder/ cp /usr/share/common-licenses/GPL*3 builder/$temp/LICENSE cd builder/ tar czf $temp.tar.gz $temp cd .. fi # create packages for Debian and Ubuntu and MX Linux for serie in experimental resolute questing noble mx25 mx23; do printf "\n\n##################################################################### $serie ## awf-qt\n\n" if [ $serie = "experimental" ]; then # copy for Ubuntu cp -a builder/awf-extended-$version/ builder/awf-extended-$version+src/ cd builder/awf-extended-$version/ elif [ $serie = "unstable" ]; then rm -rf builder/awf-extended-$version/ cp -a builder/awf-extended-$version+src/ builder/awf-extended-$version/ cd builder/awf-extended-$version/ else cp -a builder/awf-extended-$version+src/ builder/awf-extended-$serie-$version/ cd builder/awf-extended-$serie-$version/ fi dh_make -s -y -f ../awf-extended-$version.tar.gz -p awf-qt rm -rf debian/*/*ex debian/*ex debian/*EX debian/README* debian/*doc* cp scripts/debian-qt/* debian/ rm -f debian/deb.sh mkdir debian/upstream ; mv debian/metadata debian/upstream/metadata # debhelper: experimental:13 focal/mx21:12 bionic:9 xenial:9 trusty:9 if [ $serie = "experimental" ]; then mv debian/control.ubuntu debian/control # yes elif [ $serie = "unstable" ]; then mv debian/control.debian debian/control elif [ $serie = "mx21" ]; then mv debian/control.mxo debian/control sed -i 's/debhelper-compat (= 13)/debhelper-compat (= 12)/g' debian/control elif [ $serie = "focal" ]; then mv debian/control.ubuntu debian/control sed -i 's/debhelper-compat (= 13)/debhelper-compat (= 12)/g' debian/control elif [ $serie = "bionic" ]; then mv debian/control.ubuntu debian/control sed -i 's/dh $@/dh $@ --with autoreconf/g' debian/rules sed -i 's/execute_before_dh_install:/override_dh_update_autotools_config:/g' debian/rules sed -i 's/debhelper-compat (= 13)/debhelper-compat (= 9), dh-autoreconf/g' debian/control elif [ $serie = "xenial" ]; then mv debian/control.ubuntu debian/control sed -i 's/dh $@/dh $@ --with autoreconf/g' debian/rules sed -i 's/execute_before_dh_install:/override_dh_update_autotools_config:/g' debian/rules sed -i 's/debhelper-compat (= 13)/debhelper (>= 9), dh-autoreconf/g' debian/control sed -i ':a;N;$!ba;s/Rules-Requires-Root: no\n//g' debian/control echo 9 > debian/compat elif [ $serie = "trusty" ]; then mv debian/control.ubuntu debian/control sed -i 's/dh $@/dh $@ --with autotools_dev,autoreconf/g' debian/rules sed -i 's/execute_before_dh_install:/override_dh_autotools-dev_updateconfig:/g' debian/rules sed -i 's/debhelper-compat (= 13)/debhelper (>= 9), autotools-dev, dh-autoreconf/g' debian/control sed -i ':a;N;$!ba;s/Rules-Requires-Root: no\n//g' debian/control echo 9 > debian/compat else mv debian/control.ubuntu debian/control fi if [ $serie = "mx25" ] || [ $serie = "mx23" ]; then mv debian/changelog.mx debian/changelog sed -i 's/-1) /-1~'$serie'+1) /' debian/changelog sed -i 's/ experimental; / mx; /' debian/changelog sed -i 's/ unstable; / mx; /' debian/changelog rm debian/*qt7* sed -i '/qt7/d' debian/clean elif [ $serie = "mx21" ]; then mv debian/changelog.mx debian/changelog sed -i 's/-1) /-1~'$serie'+1) /' debian/changelog sed -i 's/ experimental; / mx; /' debian/changelog sed -i 's/ unstable; / mx; /' debian/changelog rm debian/*qt6* debian/*qt7* sed -i '/qt6/d;/qt7/d' debian/clean elif [ $serie = "experimental" ]; then mv debian/changelog.debian debian/changelog sed -i 's/ experimental; / '$serie'; /g' debian/changelog rm debian/*qt7* sed -i '/qt7/d' debian/clean #nano debian/control elif [ $serie = "unstable" ]; then mv debian/changelog.debian debian/changelog sed -i 's/ experimental; / '$serie'; /g' debian/changelog rm debian/*qt7* sed -i '/qt7/d' debian/clean else mv debian/changelog.ubuntu debian/changelog sed -i 's/ experimental; / '$serie'; /g' debian/changelog sed -i 's/-1) /-1+'$serie') /' debian/changelog rm debian/*qt7* sed -i '/qt7/d' debian/clean fi rm -f debian/*.mx debian/*.mxo debian/*.debian debian/*.ubuntu if [ $serie = "experimental" ]; then echo "===================== build package ($serie) ==" dpkg-buildpackage -us -uc echo "=========================== lintian ($serie) ==" lintian -EviIL +pedantic ../awf-qt_$version*.changes rm ../*amd64.changes fi echo "============== build source package ($serie) ==" dpkg-buildpackage -us -uc -ui -d -S cd .. if [ $serie = "experimental" ] || [ $serie = "unstable" ]; then echo "=========================== debsign ($serie) ==" debsign awf-qt*$version-*_source.changes else echo "=========================== debsign ($serie) ==" debsign awf-qt*$version*$serie*source.changes fi cd .. done printf "\n\n" rm builder/*dbgsym*deb ls -dlth "$PWD"/builder/*.deb "$PWD"/builder/*.changes printf "\n" rm -rf builder/*/awf-extended-4.1.0/scripts/debian-qt/fr.luigifab.awfqt5.metainfo.xml000066400000000000000000000012751517644610000253540ustar00rootroot00000000000000 fr.luigifab.awfqt5 awf-qt5 GPL-3.0-or-later MIT Theme preview application for Qt 5

A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme.

https://github.com/luigifab/awf-extended awf-qt5.desktop awf-qt5
awf-extended-4.1.0/scripts/debian-qt/fr.luigifab.awfqt6.metainfo.xml000066400000000000000000000012751517644610000253550ustar00rootroot00000000000000 fr.luigifab.awfqt6 awf-qt6 GPL-3.0-or-later MIT Theme preview application for Qt 6

A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme.

https://github.com/luigifab/awf-extended awf-qt6.desktop awf-qt6
awf-extended-4.1.0/scripts/debian-qt/fr.luigifab.awfqt7.metainfo.xml000066400000000000000000000012751517644610000253560ustar00rootroot00000000000000 fr.luigifab.awfqt7 awf-qt7 GPL-3.0-or-later MIT Theme preview application for Qt 7

A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme.

https://github.com/luigifab/awf-extended awf-qt7.desktop awf-qt7
awf-extended-4.1.0/scripts/debian-qt/metadata000066400000000000000000000006271517644610000211360ustar00rootroot00000000000000Bug-Database: https://github.com/luigifab/awf-extended/issues/ Bug-Submit: https://github.com/luigifab/awf-extended/issues/new Documentation: https://github.com/luigifab/awf-extended Archive: GitHub Repository: https://github.com/luigifab/awf-extended.git Repository-Browse: https://github.com/luigifab/awf-extended Screenshots: https://raw.githubusercontent.com/luigifab/awf-extended/levelup/images/qt5.pngawf-extended-4.1.0/scripts/debian-qt/rules000066400000000000000000000014311517644610000205020ustar00rootroot00000000000000#!/usr/bin/make -f export DEB_BUILD_MAINT_OPTIONS = hardening=+all %: dh $@ --with bash-completion override_dh_auto_configure: dh_auto_configure -- --disable-gtk2 --disable-gtk3 --disable-gtk4 --disable-gtk5 --disable-qt7 execute_before_dh_install: for engine in "qt5" "qt6"; do \ cp -ar data/icons/ icons-$$engine/; \ for file in icons-$$engine/*/*/awf.png; do mv $$file `dirname $$file`/awf-$$engine.png; done; \ for file in icons-$$engine/*/*/awf.svg; do mv $$file `dirname $$file`/awf-$$engine.svg; done; \ for file in src/po/*.po; do \ code=`basename "$$file" .po`; \ mkdir -p locale-$$engine/$$code/LC_MESSAGES/; \ msgfmt src/po/$$code.po -o locale-$$engine/$$code/LC_MESSAGES/awf-$$engine.mo; \ done; \ done override_dh_clean: rm -f src/awf-*.moc dh_clean awf-extended-4.1.0/scripts/debian-qt5/000077500000000000000000000000001517644610000175135ustar00rootroot00000000000000awf-extended-4.1.0/scripts/debian-qt5/changelog000066400000000000000000000002541517644610000213660ustar00rootroot00000000000000awf-qt5 (4.1.0-1) experimental; urgency=low * Initial Debian package release (Closes: #1129265) -- Fabrice Creuzot Tue, 05 May 2026 20:00:00 +0000 awf-extended-4.1.0/scripts/debian-qt5/clean000066400000000000000000000000261517644610000205160ustar00rootroot00000000000000icons-qt5/ locale-qt5/awf-extended-4.1.0/scripts/debian-qt5/control000066400000000000000000000015211517644610000211150ustar00rootroot00000000000000Source: awf-qt5 Section: x11 Priority: optional Maintainer: Fabrice Creuzot Build-Depends: debhelper-compat (= 13), bash-completion, pkgconf, qtbase5-dev Rules-Requires-Root: no Standards-Version: 4.7.4 Homepage: https://github.com/luigifab/awf-extended Vcs-Browser: https://github.com/luigifab/awf-extended Vcs-Git: https://github.com/luigifab/awf-extended.git Package: awf-qt5 Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} Recommends: qt5-gtk-platformtheme, qt5-style-globalqss, qttranslations5-l10n, libqt5svg5 Suggests: libnotify-bin Description: theme preview application for Qt 5 A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme. . This package provides the program for Qt 5. awf-extended-4.1.0/scripts/debian-qt5/deb.sh000066400000000000000000000114741517644610000206100ustar00rootroot00000000000000#!/bin/bash # Debian: sudo apt install dpkg-dev devscripts build-essential dh-make dh-autoreconf intltool qtbase5-dev cd "$(dirname "$0")" export DH_QUIET=1 version="4.1.0" engine="qt5" mkdir -p builder rm -rf builder/* # copy to a tmp directory if [ true ]; then cd builder wget https://github.com/luigifab/awf-extended/archive/v$version/awf-extended-$version.tar.gz tar xzf awf-extended-$version.tar.gz cd .. else temp=awf-extended-$version mkdir /tmp/$temp cp -r ../../* /tmp/$temp/ rm -rf /tmp/$temp/scripts/*/builder/ mv /tmp/$temp builder/ cp /usr/share/common-licenses/GPL*3 builder/$temp/LICENSE cd builder/ tar czf $temp.tar.gz $temp cd .. fi # create packages for Debian and Ubuntu for serie in experimental resolute questing noble jammy; do printf "\n\n#################################################################### $serie ## awf-$engine\n\n" if [ $serie = "experimental" ]; then # copy for Ubuntu cp -a builder/awf-extended-$version/ builder/awf-extended-$version+src/ cd builder/awf-extended-$version/ elif [ $serie = "unstable" ]; then rm -rf builder/awf-extended-$version/ cp -a builder/awf-extended-$version+src/ builder/awf-extended-$version/ cd builder/awf-extended-$version/ else cp -a builder/awf-extended-$version+src/ builder/awf-extended-$serie-$version/ cd builder/awf-extended-$serie-$version/ fi dh_make -s -y -f ../awf-extended-$version.tar.gz -p awf-$engine rm -rf debian/*/*ex debian/*ex debian/*EX debian/README* debian/*doc* cp scripts/debian-$engine/* debian/ cp scripts/debian-qt/*$engine* scripts/debian-qt/copyright scripts/debian-qt/metadata debian/ head -n -1 debian/*$engine*.install > debian/install ; rm debian/awf-$engine.install rm -f debian/deb.sh mkdir debian/upstream ; mv debian/metadata debian/upstream/metadata # debhelper: experimental:13 focal/mx21:12 bionic:9 xenial:9 trusty:9 if [ $serie = "experimental" ] || [ $serie = "unstable" ]; then mv debian/control.debian debian/control elif [ $serie = "mx21" ]; then sed -i 's/debhelper-compat (= 13)/debhelper-compat (= 12)/g' debian/control elif [ $serie = "focal" ]; then mv debian/control.ubuntu debian/control sed -i 's/debhelper-compat (= 13)/debhelper-compat (= 12)/g' debian/control elif [ $serie = "bionic" ]; then mv debian/control.ubuntu debian/control sed -i 's/dh $@/dh $@ --with autoreconf/g' debian/rules sed -i 's/execute_before_dh_install:/override_dh_update_autotools_config:/g' debian/rules sed -i 's/debhelper-compat (= 13)/debhelper-compat (= 9), dh-autoreconf/g' debian/control elif [ $serie = "xenial" ]; then mv debian/control.ubuntu debian/control sed -i 's/dh $@/dh $@ --with autoreconf/g' debian/rules sed -i 's/execute_before_dh_install:/override_dh_update_autotools_config:/g' debian/rules sed -i 's/debhelper-compat (= 13)/debhelper (>= 9), dh-autoreconf/g' debian/control sed -i ':a;N;$!ba;s/Rules-Requires-Root: no\n//g' debian/control echo 9 > debian/compat elif [ $serie = "trusty" ]; then mv debian/control.ubuntu debian/control sed -i 's/dh $@/dh $@ --with autotools_dev,autoreconf/g' debian/rules sed -i 's/execute_before_dh_install:/override_dh_autotools-dev_updateconfig:/g' debian/rules sed -i 's/debhelper-compat (= 13)/debhelper (>= 9), autotools-dev, dh-autoreconf/g' debian/control sed -i ':a;N;$!ba;s/Rules-Requires-Root: no\n//g' debian/control echo 9 > debian/compat else mv debian/control.ubuntu debian/control fi if [ $serie = "mx25" ] || [ $serie = "mx23" ] || [ $serie = "mx21" ]; then mv debian/changelog.mx debian/changelog sed -i 's/-1) /-1~'$serie'+1) /' debian/changelog sed -i 's/ experimental; / mx; /' debian/changelog sed -i 's/ unstable; / mx; /' debian/changelog elif [ $serie = "experimental" ] || [ $serie = "unstable" ]; then sed -i 's/ experimental; / '$serie'; /g' debian/changelog mv debian/changelog.debian debian/changelog else mv debian/changelog.ubuntu debian/changelog sed -i 's/ experimental; / '$serie'; /g' debian/changelog sed -i 's/-1) /-1+'$serie') /' debian/changelog fi rm -f debian/*.mx debian/*.debian debian/*.ubuntu if [ $serie = "experimental" ]; then echo "===================== build package ($serie) ==" dpkg-buildpackage -us -uc echo "=========================== lintian ($serie) ==" lintian -EviIL +pedantic ../awf-${qt}_$version*.changes rm ../*amd64.changes fi echo "============== build source package ($serie) ==" dpkg-buildpackage -us -uc -ui -d -S cd .. if [ $serie = "experimental" ] || [ $serie = "unstable" ]; then echo "=========================== debsign ($serie) ==" debsign awf-$engine*$version-*_source.changes else echo "=========================== debsign ($serie) ==" debsign awf-$engine*$version*$serie*source.changes fi cd .. done printf "\n\n" rm builder/*dbgsym*deb ls -dlth "$PWD"/builder/*.deb "$PWD"/builder/*.changes printf "\n" rm -rf builder/*/awf-extended-4.1.0/scripts/debian-qt5/rules000066400000000000000000000012001517644610000205610ustar00rootroot00000000000000#!/usr/bin/make -f export DEB_BUILD_MAINT_OPTIONS = hardening=+all %: dh $@ --with bash-completion override_dh_auto_configure: dh_auto_configure -- --enable-only-qt5 execute_before_dh_install: cp -ar data/icons/ icons-qt5/ for file in icons-qt5/*/*/awf.png; do mv $$file `dirname $$file`/awf-qt5.png; done for file in icons-qt5/*/*/awf.svg; do mv $$file `dirname $$file`/awf-qt5.svg; done for file in src/po/*.po; do \ code=`basename "$$file" .po`; \ mkdir -p locale-qt5/$$code/LC_MESSAGES/; \ msgfmt src/po/$$code.po -o locale-qt5/$$code/LC_MESSAGES/awf-qt5.mo; \ done override_dh_clean: rm -f src/awf-qt5.moc dh_clean awf-extended-4.1.0/scripts/debian-qt6/000077500000000000000000000000001517644610000175145ustar00rootroot00000000000000awf-extended-4.1.0/scripts/debian-qt6/changelog000066400000000000000000000002541517644610000213670ustar00rootroot00000000000000awf-qt6 (4.1.0-1) experimental; urgency=low * Initial Debian package release (Closes: #1129265) -- Fabrice Creuzot Tue, 05 May 2026 20:00:00 +0000 awf-extended-4.1.0/scripts/debian-qt6/clean000066400000000000000000000000261517644610000205170ustar00rootroot00000000000000icons-qt6/ locale-qt6/awf-extended-4.1.0/scripts/debian-qt6/control000066400000000000000000000015301517644610000211160ustar00rootroot00000000000000Source: awf-qt6 Section: x11 Priority: optional Maintainer: Fabrice Creuzot Build-Depends: debhelper-compat (= 13), bash-completion, pkgconf, qt6-base-dev Rules-Requires-Root: no Standards-Version: 4.7.4 Homepage: https://github.com/luigifab/awf-extended Vcs-Browser: https://github.com/luigifab/awf-extended Vcs-Git: https://github.com/luigifab/awf-extended.git Package: awf-qt6 Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} Recommends: qt6-gtk-platformtheme, qt6-style-globalqss, qt6-translations-l10n, qt6-svg-plugins Suggests: libnotify-bin Description: theme preview application for Qt 6 A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme. . This package provides the program for Qt 6. awf-extended-4.1.0/scripts/debian-qt6/deb.sh000066400000000000000000000114671517644610000206130ustar00rootroot00000000000000#!/bin/bash # Debian: sudo apt install dpkg-dev devscripts build-essential dh-make dh-autoreconf intltool qt6-base-dev cd "$(dirname "$0")" export DH_QUIET=1 version="4.1.0" engine="qt6" mkdir -p builder rm -rf builder/* # copy to a tmp directory if [ true ]; then cd builder wget https://github.com/luigifab/awf-extended/archive/v$version/awf-extended-$version.tar.gz tar xzf awf-extended-$version.tar.gz cd .. else temp=awf-extended-$version mkdir /tmp/$temp cp -r ../../* /tmp/$temp/ rm -rf /tmp/$temp/scripts/*/builder/ mv /tmp/$temp builder/ cp /usr/share/common-licenses/GPL*3 builder/$temp/LICENSE cd builder/ tar czf $temp.tar.gz $temp cd .. fi # create packages for Debian and Ubuntu for serie in experimental resolute questing noble; do printf "\n\n#################################################################### $serie ## awf-$engine\n\n" if [ $serie = "experimental" ]; then # copy for Ubuntu cp -a builder/awf-extended-$version/ builder/awf-extended-$version+src/ cd builder/awf-extended-$version/ elif [ $serie = "unstable" ]; then rm -rf builder/awf-extended-$version/ cp -a builder/awf-extended-$version+src/ builder/awf-extended-$version/ cd builder/awf-extended-$version/ else cp -a builder/awf-extended-$version+src/ builder/awf-extended-$serie-$version/ cd builder/awf-extended-$serie-$version/ fi dh_make -s -y -f ../awf-extended-$version.tar.gz -p awf-$engine rm -rf debian/*/*ex debian/*ex debian/*EX debian/README* debian/*doc* cp scripts/debian-$engine/* debian/ cp scripts/debian-qt/*$engine* scripts/debian-qt/copyright scripts/debian-qt/metadata debian/ head -n -1 debian/*$engine*.install > debian/install ; rm debian/awf-$engine.install rm -f debian/deb.sh mkdir debian/upstream ; mv debian/metadata debian/upstream/metadata # debhelper: experimental:13 focal/mx21:12 bionic:9 xenial:9 trusty:9 if [ $serie = "experimental" ] || [ $serie = "unstable" ]; then mv debian/control.debian debian/control elif [ $serie = "mx21" ]; then sed -i 's/debhelper-compat (= 13)/debhelper-compat (= 12)/g' debian/control elif [ $serie = "focal" ]; then mv debian/control.ubuntu debian/control sed -i 's/debhelper-compat (= 13)/debhelper-compat (= 12)/g' debian/control elif [ $serie = "bionic" ]; then mv debian/control.ubuntu debian/control sed -i 's/dh $@/dh $@ --with autoreconf/g' debian/rules sed -i 's/execute_before_dh_install:/override_dh_update_autotools_config:/g' debian/rules sed -i 's/debhelper-compat (= 13)/debhelper-compat (= 9), dh-autoreconf/g' debian/control elif [ $serie = "xenial" ]; then mv debian/control.ubuntu debian/control sed -i 's/dh $@/dh $@ --with autoreconf/g' debian/rules sed -i 's/execute_before_dh_install:/override_dh_update_autotools_config:/g' debian/rules sed -i 's/debhelper-compat (= 13)/debhelper (>= 9), dh-autoreconf/g' debian/control sed -i ':a;N;$!ba;s/Rules-Requires-Root: no\n//g' debian/control echo 9 > debian/compat elif [ $serie = "trusty" ]; then mv debian/control.ubuntu debian/control sed -i 's/dh $@/dh $@ --with autotools_dev,autoreconf/g' debian/rules sed -i 's/execute_before_dh_install:/override_dh_autotools-dev_updateconfig:/g' debian/rules sed -i 's/debhelper-compat (= 13)/debhelper (>= 9), autotools-dev, dh-autoreconf/g' debian/control sed -i ':a;N;$!ba;s/Rules-Requires-Root: no\n//g' debian/control echo 9 > debian/compat else mv debian/control.ubuntu debian/control fi if [ $serie = "mx25" ] || [ $serie = "mx23" ] || [ $serie = "mx21" ]; then mv debian/changelog.mx debian/changelog sed -i 's/-1) /-1~'$serie'+1) /' debian/changelog sed -i 's/ experimental; / mx; /' debian/changelog sed -i 's/ unstable; / mx; /' debian/changelog elif [ $serie = "experimental" ] || [ $serie = "unstable" ]; then sed -i 's/ experimental; / '$serie'; /g' debian/changelog mv debian/changelog.debian debian/changelog else mv debian/changelog.ubuntu debian/changelog sed -i 's/ experimental; / '$serie'; /g' debian/changelog sed -i 's/-1) /-1+'$serie') /' debian/changelog fi rm -f debian/*.mx debian/*.debian debian/*.ubuntu if [ $serie = "experimental" ]; then echo "===================== build package ($serie) ==" dpkg-buildpackage -us -uc echo "=========================== lintian ($serie) ==" lintian -EviIL +pedantic ../awf-${qt}_$version*.changes rm ../*amd64.changes fi echo "============== build source package ($serie) ==" dpkg-buildpackage -us -uc -ui -d -S cd .. if [ $serie = "experimental" ] || [ $serie = "unstable" ]; then echo "=========================== debsign ($serie) ==" debsign awf-$engine*$version-*_source.changes else echo "=========================== debsign ($serie) ==" debsign awf-$engine*$version*$serie*source.changes fi cd .. done printf "\n\n" rm builder/*dbgsym*deb ls -dlth "$PWD"/builder/*.deb "$PWD"/builder/*.changes printf "\n" rm -rf builder/*/awf-extended-4.1.0/scripts/debian-qt6/rules000066400000000000000000000012001517644610000205620ustar00rootroot00000000000000#!/usr/bin/make -f export DEB_BUILD_MAINT_OPTIONS = hardening=+all %: dh $@ --with bash-completion override_dh_auto_configure: dh_auto_configure -- --enable-only-qt6 execute_before_dh_install: cp -ar data/icons/ icons-qt6/ for file in icons-qt6/*/*/awf.png; do mv $$file `dirname $$file`/awf-qt6.png; done for file in icons-qt6/*/*/awf.svg; do mv $$file `dirname $$file`/awf-qt6.svg; done for file in src/po/*.po; do \ code=`basename "$$file" .po`; \ mkdir -p locale-qt6/$$code/LC_MESSAGES/; \ msgfmt src/po/$$code.po -o locale-qt6/$$code/LC_MESSAGES/awf-qt6.mo; \ done override_dh_clean: rm -f src/awf-qt6.moc dh_clean awf-extended-4.1.0/scripts/debian-qt7/000077500000000000000000000000001517644610000175155ustar00rootroot00000000000000awf-extended-4.1.0/scripts/debian-qt7/changelog000066400000000000000000000002501517644610000213640ustar00rootroot00000000000000awf-qt7 (4.1.0-1) experimental; urgency=low * Initial Debian package release (Closes: #...) -- Fabrice Creuzot Tue, 05 May 2026 20:00:00 +0000 awf-extended-4.1.0/scripts/debian-qt7/clean000066400000000000000000000000261517644610000205200ustar00rootroot00000000000000icons-qt7/ locale-qt7/awf-extended-4.1.0/scripts/debian-qt7/control000066400000000000000000000015301517644610000211170ustar00rootroot00000000000000Source: awf-qt7 Section: x11 Priority: optional Maintainer: Fabrice Creuzot Build-Depends: debhelper-compat (= 13), bash-completion, pkgconf, qt7-base-dev Rules-Requires-Root: no Standards-Version: 4.7.4 Homepage: https://github.com/luigifab/awf-extended Vcs-Browser: https://github.com/luigifab/awf-extended Vcs-Git: https://github.com/luigifab/awf-extended.git Package: awf-qt7 Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} Recommends: qt7-gtk-platformtheme, qt7-style-globalqss, qt7-translations-l10n, qt7-svg-plugins Suggests: libnotify-bin Description: theme preview application for Qt 7 A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme. . This package provides the program for Qt 7. awf-extended-4.1.0/scripts/debian-qt7/deb.sh000066400000000000000000000114671517644610000206140ustar00rootroot00000000000000#!/bin/bash # Debian: sudo apt install dpkg-dev devscripts build-essential dh-make dh-autoreconf intltool qt7-base-dev cd "$(dirname "$0")" export DH_QUIET=1 version="4.1.0" engine="qt7" mkdir -p builder rm -rf builder/* # copy to a tmp directory if [ true ]; then cd builder wget https://github.com/luigifab/awf-extended/archive/v$version/awf-extended-$version.tar.gz tar xzf awf-extended-$version.tar.gz cd .. else temp=awf-extended-$version mkdir /tmp/$temp cp -r ../../* /tmp/$temp/ rm -rf /tmp/$temp/scripts/*/builder/ mv /tmp/$temp builder/ cp /usr/share/common-licenses/GPL*3 builder/$temp/LICENSE cd builder/ tar czf $temp.tar.gz $temp cd .. fi # create packages for Debian and Ubuntu for serie in experimental resolute questing noble; do printf "\n\n#################################################################### $serie ## awf-$engine\n\n" if [ $serie = "experimental" ]; then # copy for Ubuntu cp -a builder/awf-extended-$version/ builder/awf-extended-$version+src/ cd builder/awf-extended-$version/ elif [ $serie = "unstable" ]; then rm -rf builder/awf-extended-$version/ cp -a builder/awf-extended-$version+src/ builder/awf-extended-$version/ cd builder/awf-extended-$version/ else cp -a builder/awf-extended-$version+src/ builder/awf-extended-$serie-$version/ cd builder/awf-extended-$serie-$version/ fi dh_make -s -y -f ../awf-extended-$version.tar.gz -p awf-$engine rm -rf debian/*/*ex debian/*ex debian/*EX debian/README* debian/*doc* cp scripts/debian-$engine/* debian/ cp scripts/debian-qt/*$engine* scripts/debian-qt/copyright scripts/debian-qt/metadata debian/ head -n -1 debian/*$engine*.install > debian/install ; rm debian/awf-$engine.install rm -f debian/deb.sh mkdir debian/upstream ; mv debian/metadata debian/upstream/metadata # debhelper: experimental:13 focal/mx21:12 bionic:9 xenial:9 trusty:9 if [ $serie = "experimental" ] || [ $serie = "unstable" ]; then mv debian/control.debian debian/control elif [ $serie = "mx21" ]; then sed -i 's/debhelper-compat (= 13)/debhelper-compat (= 12)/g' debian/control elif [ $serie = "focal" ]; then mv debian/control.ubuntu debian/control sed -i 's/debhelper-compat (= 13)/debhelper-compat (= 12)/g' debian/control elif [ $serie = "bionic" ]; then mv debian/control.ubuntu debian/control sed -i 's/dh $@/dh $@ --with autoreconf/g' debian/rules sed -i 's/execute_before_dh_install:/override_dh_update_autotools_config:/g' debian/rules sed -i 's/debhelper-compat (= 13)/debhelper-compat (= 9), dh-autoreconf/g' debian/control elif [ $serie = "xenial" ]; then mv debian/control.ubuntu debian/control sed -i 's/dh $@/dh $@ --with autoreconf/g' debian/rules sed -i 's/execute_before_dh_install:/override_dh_update_autotools_config:/g' debian/rules sed -i 's/debhelper-compat (= 13)/debhelper (>= 9), dh-autoreconf/g' debian/control sed -i ':a;N;$!ba;s/Rules-Requires-Root: no\n//g' debian/control echo 9 > debian/compat elif [ $serie = "trusty" ]; then mv debian/control.ubuntu debian/control sed -i 's/dh $@/dh $@ --with autotools_dev,autoreconf/g' debian/rules sed -i 's/execute_before_dh_install:/override_dh_autotools-dev_updateconfig:/g' debian/rules sed -i 's/debhelper-compat (= 13)/debhelper (>= 9), autotools-dev, dh-autoreconf/g' debian/control sed -i ':a;N;$!ba;s/Rules-Requires-Root: no\n//g' debian/control echo 9 > debian/compat else mv debian/control.ubuntu debian/control fi if [ $serie = "mx25" ] || [ $serie = "mx23" ] || [ $serie = "mx21" ]; then mv debian/changelog.mx debian/changelog sed -i 's/-1) /-1~'$serie'+1) /' debian/changelog sed -i 's/ experimental; / mx; /' debian/changelog sed -i 's/ unstable; / mx; /' debian/changelog elif [ $serie = "experimental" ] || [ $serie = "unstable" ]; then sed -i 's/ experimental; / '$serie'; /g' debian/changelog mv debian/changelog.debian debian/changelog else mv debian/changelog.ubuntu debian/changelog sed -i 's/ experimental; / '$serie'; /g' debian/changelog sed -i 's/-1) /-1+'$serie') /' debian/changelog fi rm -f debian/*.mx debian/*.debian debian/*.ubuntu if [ $serie = "experimental" ]; then echo "===================== build package ($serie) ==" dpkg-buildpackage -us -uc echo "=========================== lintian ($serie) ==" lintian -EviIL +pedantic ../awf-${qt}_$version*.changes rm ../*amd64.changes fi echo "============== build source package ($serie) ==" dpkg-buildpackage -us -uc -ui -d -S cd .. if [ $serie = "experimental" ] || [ $serie = "unstable" ]; then echo "=========================== debsign ($serie) ==" debsign awf-$engine*$version-*_source.changes else echo "=========================== debsign ($serie) ==" debsign awf-$engine*$version*$serie*source.changes fi cd .. done printf "\n\n" rm builder/*dbgsym*deb ls -dlth "$PWD"/builder/*.deb "$PWD"/builder/*.changes printf "\n" rm -rf builder/*/awf-extended-4.1.0/scripts/debian-qt7/rules000066400000000000000000000012001517644610000205630ustar00rootroot00000000000000#!/usr/bin/make -f export DEB_BUILD_MAINT_OPTIONS = hardening=+all %: dh $@ --with bash-completion override_dh_auto_configure: dh_auto_configure -- --enable-only-qt7 execute_before_dh_install: cp -ar data/icons/ icons-qt7/ for file in icons-qt7/*/*/awf.png; do mv $$file `dirname $$file`/awf-qt7.png; done for file in icons-qt7/*/*/awf.svg; do mv $$file `dirname $$file`/awf-qt7.svg; done for file in src/po/*.po; do \ code=`basename "$$file" .po`; \ mkdir -p locale-qt7/$$code/LC_MESSAGES/; \ msgfmt src/po/$$code.po -o locale-qt7/$$code/LC_MESSAGES/awf-qt7.mo; \ done override_dh_clean: rm -f src/awf-qt7.moc dh_clean awf-extended-4.1.0/scripts/fedora/000077500000000000000000000000001517644610000170225ustar00rootroot00000000000000awf-extended-4.1.0/scripts/fedora/awf-gtk2.spec000066400000000000000000000075641517644610000213340ustar00rootroot00000000000000Name: awf-gtk2 Version: 4.1.0 Release: 1%{?dist} Summary: Theme preview application for GTK 2 Summary(fr): Application d'aperçu de thème pour GTK 2 License: GPL-3.0-or-later URL: https://github.com/luigifab/awf-extended Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz BuildRequires: aspell-fr BuildRequires: autoconf BuildRequires: automake BuildRequires: desktop-file-utils BuildRequires: libnotify-devel >= 0.7.0 BuildRequires: gcc BuildRequires: gettext BuildRequires: gtk2-devel >= 2.24.0 Requires: gtk2 >= 2.24.0 Requires: hicolor-icon-theme Requires: libnotify >= 0.7.0 %description %{expand: A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme. This package provides the program for GTK 2.} %description -l fr %{expand: La fabrique à widgets est une application d'aperçu de thème pour GTK et Qt. Elle affiche les différents types de widgets dans une seule fenêtre permettant de voir l'effet visuel du thème appliqué. Ce paquet fournit le programme pour GTK 2.} %prep %setup -q -n awf-extended-%{version} %build autoreconf -fi %configure --enable-only-gtk2 %make_build %install %make_install install -dm 755 %{buildroot}%{_datadir}/applications/ desktop-file-install --dir=%{buildroot}%{_datadir}/applications/ data/%{name}.desktop install -dm 755 %{buildroot}%{_datadir}/icons/hicolor/ for file in data/icons/*/*/awf.png; do mv $file ${file/\/awf.png/\/%{name}.png}; done for file in data/icons/*/*/awf.svg; do mv $file ${file/\/awf.svg/\/%{name}.svg}; done cp -a data/icons/* %{buildroot}%{_datadir}/icons/hicolor/ install -Dpm 644 data/%{name}.bash %{buildroot}%{bash_completions_dir}/%{name} install -Dpm 644 data/%{name}.1 %{buildroot}%{_mandir}/man1/%{name}.1 install -Dpm 644 data/%{name}.fr.1 %{buildroot}%{_mandir}/fr/man1/%{name}.1 for file in src/po/*.po; do code=$(basename "$file" .po) install -dm 755 %{buildroot}%{_datadir}/locale/$code/LC_MESSAGES/ msgfmt src/po/$code.po -o %{buildroot}%{_datadir}/locale/$code/LC_MESSAGES/%{name}.mo done %find_lang %{name} --with-man %files -f %{name}.lang %license LICENSE %doc README.md %{_bindir}/%{name} %{_datadir}/applications/%{name}.desktop %{_datadir}/icons/hicolor/*/apps/%{name}.png %{_datadir}/icons/hicolor/scalable/apps/%{name}.svg %{bash_completions_dir}/%{name} %{_mandir}/man1/%{name}.1* %changelog * Tue May 05 2026 Fabrice Creuzot - 4.1.0-1 - New upstream release * Tue Mar 03 2026 Fabrice Creuzot - 4.0.0-1 - New upstream release * Fri Oct 10 2025 Fabrice Creuzot - 3.2.0-1 - New upstream release * Fri Aug 08 2025 Fabrice Creuzot - 3.1.0-1 - New upstream release - Add support for CSD dialog * Mon May 05 2025 Fabrice Creuzot - 3.0.0-1 - New upstream release - Add support for CSD window - Add --enable-only-gtkx and --disable-gtkx options * Fri Apr 04 2025 Fabrice Creuzot - 2.9.0-1 - New upstream release * Mon Mar 03 2025 Fabrice Creuzot - 2.8.1-1 - New upstream release * Fri Feb 02 2024 Fabrice Creuzot - 2.8.0-1 - New upstream release * Fri Jun 16 2023 Fabrice Creuzot - 2.7.0-2 - Package spec update * Tue Jun 06 2023 Fabrice Creuzot - 2.7.0-1 - New upstream release * Thu Sep 09 2021 Fabrice Creuzot - 2.6.0-1 - New upstream release * Wed Jul 07 2021 Fabrice Creuzot - 2.5.0-1 - New upstream release * Wed May 05 2021 Fabrice Creuzot - 2.4.0-1 - New upstream release * Sun Apr 04 2021 Fabrice Creuzot - 2.3.0-1 - New upstream release * Wed Nov 11 2020 Fabrice Creuzot - 2.2.0-1 - Initial Fedora package release (Closes: rhbz#1893321) awf-extended-4.1.0/scripts/fedora/awf-gtk3.spec000066400000000000000000000075401517644610000213270ustar00rootroot00000000000000Name: awf-gtk3 Version: 4.1.0 Release: 1%{?dist} Summary: Theme preview application for GTK 3 Summary(fr): Application d'aperçu de thème pour GTK 3 License: GPL-3.0-or-later URL: https://github.com/luigifab/awf-extended Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz BuildRequires: aspell-fr BuildRequires: autoconf BuildRequires: automake BuildRequires: desktop-file-utils BuildRequires: libnotify-devel >= 0.7.0 BuildRequires: gcc BuildRequires: gettext BuildRequires: gtk3-devel Requires: gtk3 Requires: hicolor-icon-theme Requires: libnotify >= 0.7.0 %description %{expand: A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme. This package provides the program for GTK 3.} %description -l fr %{expand: La fabrique à widgets est une application d'aperçu de thème pour GTK et Qt. Elle affiche les différents types de widgets dans une seule fenêtre permettant de voir l'effet visuel du thème appliqué. Ce paquet fournit le programme pour GTK 3.} %prep %setup -q -n awf-extended-%{version} %build autoreconf -fi %configure --enable-only-gtk3 %make_build %install %make_install install -dm 755 %{buildroot}%{_datadir}/applications/ desktop-file-install --dir=%{buildroot}%{_datadir}/applications/ data/%{name}.desktop install -dm 755 %{buildroot}%{_datadir}/icons/hicolor/ for file in data/icons/*/*/awf.png; do mv $file ${file/\/awf.png/\/%{name}.png}; done for file in data/icons/*/*/awf.svg; do mv $file ${file/\/awf.svg/\/%{name}.svg}; done cp -a data/icons/* %{buildroot}%{_datadir}/icons/hicolor/ install -Dpm 644 data/%{name}.bash %{buildroot}%{bash_completions_dir}/%{name} install -Dpm 644 data/%{name}.1 %{buildroot}%{_mandir}/man1/%{name}.1 install -Dpm 644 data/%{name}.fr.1 %{buildroot}%{_mandir}/fr/man1/%{name}.1 for file in src/po/*.po; do code=$(basename "$file" .po) install -dm 755 %{buildroot}%{_datadir}/locale/$code/LC_MESSAGES/ msgfmt src/po/$code.po -o %{buildroot}%{_datadir}/locale/$code/LC_MESSAGES/%{name}.mo done %find_lang %{name} --with-man %files -f %{name}.lang %license LICENSE %doc README.md %{_bindir}/%{name} %{_datadir}/applications/%{name}.desktop %{_datadir}/icons/hicolor/*/apps/%{name}.png %{_datadir}/icons/hicolor/scalable/apps/%{name}.svg %{bash_completions_dir}/%{name} %{_mandir}/man1/%{name}.1* %changelog * Tue May 05 2026 Fabrice Creuzot - 4.1.0-1 - New upstream release * Tue Mar 03 2026 Fabrice Creuzot - 4.0.0-1 - New upstream release * Fri Oct 10 2025 Fabrice Creuzot - 3.2.0-1 - New upstream release * Fri Aug 08 2025 Fabrice Creuzot - 3.1.0-1 - New upstream release - Add support for CSD dialog * Mon May 05 2025 Fabrice Creuzot - 3.0.0-1 - New upstream release - Add support for CSD window - Add --enable-only-gtkx and --disable-gtkx options * Fri Apr 04 2025 Fabrice Creuzot - 2.9.0-1 - New upstream release * Mon Mar 03 2025 Fabrice Creuzot - 2.8.1-1 - New upstream release * Fri Feb 02 2024 Fabrice Creuzot - 2.8.0-1 - New upstream release * Fri Jun 16 2023 Fabrice Creuzot - 2.7.0-2 - Package spec update * Tue Jun 06 2023 Fabrice Creuzot - 2.7.0-1 - New upstream release * Thu Sep 09 2021 Fabrice Creuzot - 2.6.0-1 - New upstream release * Wed Jul 07 2021 Fabrice Creuzot - 2.5.0-1 - New upstream release * Wed May 05 2021 Fabrice Creuzot - 2.4.0-1 - New upstream release * Sun Apr 04 2021 Fabrice Creuzot - 2.3.0-1 - New upstream release * Wed Nov 11 2020 Fabrice Creuzot - 2.2.0-1 - Initial Fedora package release (Closes: rhbz#1893323) awf-extended-4.1.0/scripts/fedora/awf-gtk4.spec000066400000000000000000000074141517644610000213300ustar00rootroot00000000000000Name: awf-gtk4 Version: 4.1.0 Release: 1%{?dist} Summary: Theme preview application for GTK 4 Summary(fr): Application d'aperçu de thème pour GTK 4 License: GPL-3.0-or-later URL: https://github.com/luigifab/awf-extended Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz BuildRequires: aspell-fr BuildRequires: autoconf BuildRequires: automake BuildRequires: desktop-file-utils BuildRequires: libnotify-devel >= 0.7.0 BuildRequires: gcc BuildRequires: gettext BuildRequires: gtk4-devel Requires: gtk4 Requires: hicolor-icon-theme Requires: libnotify >= 0.7.0 %description %{expand: A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme. This package provides the program for GTK 4.} %description -l fr %{expand: La fabrique à widgets est une application d'aperçu de thème pour GTK et Qt. Elle affiche les différents types de widgets dans une seule fenêtre permettant de voir l'effet visuel du thème appliqué. Ce paquet fournit le programme pour GTK 4.} %prep %setup -q -n awf-extended-%{version} %build autoreconf -fi %configure --enable-only-gtk4 %make_build %install %make_install install -dm 755 %{buildroot}%{_datadir}/applications/ desktop-file-install --dir=%{buildroot}%{_datadir}/applications/ data/%{name}.desktop install -dm 755 %{buildroot}%{_datadir}/icons/hicolor/ for file in data/icons/*/*/awf.png; do mv $file ${file/\/awf.png/\/%{name}.png}; done for file in data/icons/*/*/awf.svg; do mv $file ${file/\/awf.svg/\/%{name}.svg}; done cp -a data/icons/* %{buildroot}%{_datadir}/icons/hicolor/ install -Dpm 644 data/%{name}.bash %{buildroot}%{bash_completions_dir}/%{name} install -Dpm 644 data/%{name}.1 %{buildroot}%{_mandir}/man1/%{name}.1 install -Dpm 644 data/%{name}.fr.1 %{buildroot}%{_mandir}/fr/man1/%{name}.1 for file in src/po/*.po; do code=$(basename "$file" .po) install -dm 755 %{buildroot}%{_datadir}/locale/$code/LC_MESSAGES/ msgfmt src/po/$code.po -o %{buildroot}%{_datadir}/locale/$code/LC_MESSAGES/%{name}.mo done %find_lang %{name} --with-man %files -f %{name}.lang %license LICENSE %doc README.md %{_bindir}/%{name} %{_datadir}/applications/%{name}.desktop %{_datadir}/icons/hicolor/*/apps/%{name}.png %{_datadir}/icons/hicolor/scalable/apps/%{name}.svg %{bash_completions_dir}/%{name} %{_mandir}/man1/%{name}.1* %changelog * Tue May 05 2026 Fabrice Creuzot - 4.1.0-1 - New upstream release * Tue Mar 03 2026 Fabrice Creuzot - 4.0.0-1 - New upstream release * Fri Oct 10 2025 Fabrice Creuzot - 3.2.0-1 - New upstream release * Fri Aug 08 2025 Fabrice Creuzot - 3.1.0-1 - New upstream release - Add support for CSD dialog * Mon May 05 2025 Fabrice Creuzot - 3.0.0-1 - New upstream release - Add support for CSD window - Add --enable-only-gtkx and --disable-gtkx options * Fri Apr 04 2025 Fabrice Creuzot - 2.9.0-1 - New upstream release * Mon Mar 03 2025 Fabrice Creuzot - 2.8.1-1 - New upstream release * Fri Feb 02 2024 Fabrice Creuzot - 2.8.0-1 - New upstream release * Fri Jun 16 2023 Fabrice Creuzot - 2.7.0-2 - Package spec update * Tue Jun 06 2023 Fabrice Creuzot - 2.7.0-1 - New upstream release * Thu Sep 09 2021 Fabrice Creuzot - 2.6.0-1 - New upstream release * Wed Jul 07 2021 Fabrice Creuzot - 2.5.0-1 - New upstream release * Wed May 05 2021 Fabrice Creuzot - 2.4.0-1 - New upstream release * Sun Apr 04 2021 Fabrice Creuzot - 2.3.0-1 - Initial Fedora package release (Closes: rhbz#1946092) awf-extended-4.1.0/scripts/fedora/awf-gtk5.spec000066400000000000000000000051321517644610000213240ustar00rootroot00000000000000Name: awf-gtk5 Version: 4.1.0 Release: 1%{?dist} Summary: Theme preview application for GTK 5 Summary(fr): Application d'aperçu de thème pour GTK 5 License: GPL-3.0-or-later URL: https://github.com/luigifab/awf-extended Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz BuildRequires: aspell-fr BuildRequires: autoconf BuildRequires: automake BuildRequires: desktop-file-utils BuildRequires: libnotify-devel >= 0.7.0 BuildRequires: gcc BuildRequires: gettext BuildRequires: gtk5-devel Requires: gtk5 Requires: hicolor-icon-theme Requires: libnotify >= 0.7.0 %description %{expand: A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme. This package provides the program for GTK 5.} %description -l fr %{expand: La fabrique à widgets est une application d'aperçu de thème pour GTK et Qt. Elle affiche les différents types de widgets dans une seule fenêtre permettant de voir l'effet visuel du thème appliqué. Ce paquet fournit le programme pour GTK 5.} %prep %setup -q -n awf-extended-%{version} %build autoreconf -fi %configure --enable-only-gtk5 %make_build %install %make_install install -dm 755 %{buildroot}%{_datadir}/applications/ desktop-file-install --dir=%{buildroot}%{_datadir}/applications/ data/%{name}.desktop install -dm 755 %{buildroot}%{_datadir}/icons/hicolor/ for file in data/icons/*/*/awf.png; do mv $file ${file/\/awf.png/\/%{name}.png}; done for file in data/icons/*/*/awf.svg; do mv $file ${file/\/awf.svg/\/%{name}.svg}; done cp -a data/icons/* %{buildroot}%{_datadir}/icons/hicolor/ install -Dpm 644 data/%{name}.bash %{buildroot}%{bash_completions_dir}/%{name} install -Dpm 644 data/%{name}.1 %{buildroot}%{_mandir}/man1/%{name}.1 install -Dpm 644 data/%{name}.fr.1 %{buildroot}%{_mandir}/fr/man1/%{name}.1 for file in src/po/*.po; do code=$(basename "$file" .po) install -dm 755 %{buildroot}%{_datadir}/locale/$code/LC_MESSAGES/ msgfmt src/po/$code.po -o %{buildroot}%{_datadir}/locale/$code/LC_MESSAGES/%{name}.mo done %find_lang %{name} --with-man %files -f %{name}.lang %license LICENSE %doc README.md %{_bindir}/%{name} %{_datadir}/applications/%{name}.desktop %{_datadir}/icons/hicolor/*/apps/%{name}.png %{_datadir}/icons/hicolor/scalable/apps/%{name}.svg %{bash_completions_dir}/%{name} %{_mandir}/man1/%{name}.1* %changelog * Tue May 05 2026 Fabrice Creuzot - 4.1.0-1 - Initial Fedora package release (Closes: rhbz#...) awf-extended-4.1.0/scripts/fedora/awf-qt5.spec000066400000000000000000000053761517644610000211750ustar00rootroot00000000000000Name: awf-qt5 Version: 4.1.0 Release: 1%{?dist} Summary: Theme preview application for Qt 5 Summary(fr): Application d'aperçu de thème pour Qt 5 License: GPL-3.0-or-later URL: https://github.com/luigifab/awf-extended Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz BuildRequires: aspell-fr BuildRequires: autoconf BuildRequires: automake BuildRequires: desktop-file-utils BuildRequires: gcc-c++ BuildRequires: gettext BuildRequires: qt5-qtbase-devel Requires: qt5-qtbase Requires: hicolor-icon-theme #ecommends: qt5-gtk-platformtheme = qt5-qtbase-gui Recommends: qt5-globalqss Recommends: qt5-qtsvg Suggests: libnotify >= 0.7.0 %description %{expand: A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme. This package provides the program for Qt 5.} %description -l fr %{expand: La fabrique à widgets est une application d'aperçu de thème pour GTK et Qt. Elle affiche les différents types de widgets dans une seule fenêtre permettant de voir l'effet visuel du thème appliqué. Ce paquet fournit le programme pour Qt 5.} %prep %setup -q -n awf-extended-%{version} %build autoreconf -fi %configure --enable-only-qt5 %make_build %install %make_install install -dm 755 %{buildroot}%{_datadir}/applications/ desktop-file-install --dir=%{buildroot}%{_datadir}/applications/ data/%{name}.desktop install -dm 755 %{buildroot}%{_datadir}/icons/hicolor/ for file in data/icons/*/*/awf.png; do mv $file ${file/\/awf.png/\/%{name}.png}; done for file in data/icons/*/*/awf.svg; do mv $file ${file/\/awf.svg/\/%{name}.svg}; done cp -a data/icons/* %{buildroot}%{_datadir}/icons/hicolor/ install -Dpm 644 data/%{name}.bash %{buildroot}%{bash_completions_dir}/%{name} install -Dpm 644 data/%{name}.1 %{buildroot}%{_mandir}/man1/%{name}.1 install -Dpm 644 data/%{name}.fr.1 %{buildroot}%{_mandir}/fr/man1/%{name}.1 for file in src/po/*.po; do code=$(basename "$file" .po) install -dm 755 %{buildroot}%{_datadir}/locale/$code/LC_MESSAGES/ msgfmt src/po/$code.po -o %{buildroot}%{_datadir}/locale/$code/LC_MESSAGES/%{name}.mo done %find_lang %{name} --with-man %files -f %{name}.lang %license LICENSE %doc README.md %{_bindir}/%{name} %{_datadir}/applications/%{name}.desktop %{_datadir}/icons/hicolor/*/apps/%{name}.png %{_datadir}/icons/hicolor/scalable/apps/%{name}.svg %{bash_completions_dir}/%{name} %{_mandir}/man1/%{name}.1* %changelog * Tue May 05 2026 Fabrice Creuzot - 4.1.0-1 - New upstream release * Tue Mar 03 2026 Fabrice Creuzot - 4.0.0-1 - Initial Fedora package release (Closes: rhbz#2428546) awf-extended-4.1.0/scripts/fedora/awf-qt6.spec000066400000000000000000000053761517644610000211760ustar00rootroot00000000000000Name: awf-qt6 Version: 4.1.0 Release: 1%{?dist} Summary: Theme preview application for Qt 6 Summary(fr): Application d'aperçu de thème pour Qt 6 License: GPL-3.0-or-later URL: https://github.com/luigifab/awf-extended Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz BuildRequires: aspell-fr BuildRequires: autoconf BuildRequires: automake BuildRequires: desktop-file-utils BuildRequires: gcc-c++ BuildRequires: gettext BuildRequires: qt6-qtbase-devel Requires: qt6-qtbase Requires: hicolor-icon-theme #ecommends: qt6-gtk-platformtheme = qt6-qtbase-gui Recommends: qt6-globalqss Recommends: qt6-qtsvg Suggests: libnotify >= 0.7.0 %description %{expand: A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme. This package provides the program for Qt 6.} %description -l fr %{expand: La fabrique à widgets est une application d'aperçu de thème pour GTK et Qt. Elle affiche les différents types de widgets dans une seule fenêtre permettant de voir l'effet visuel du thème appliqué. Ce paquet fournit le programme pour Qt 6.} %prep %setup -q -n awf-extended-%{version} %build autoreconf -fi %configure --enable-only-qt6 %make_build %install %make_install install -dm 755 %{buildroot}%{_datadir}/applications/ desktop-file-install --dir=%{buildroot}%{_datadir}/applications/ data/%{name}.desktop install -dm 755 %{buildroot}%{_datadir}/icons/hicolor/ for file in data/icons/*/*/awf.png; do mv $file ${file/\/awf.png/\/%{name}.png}; done for file in data/icons/*/*/awf.svg; do mv $file ${file/\/awf.svg/\/%{name}.svg}; done cp -a data/icons/* %{buildroot}%{_datadir}/icons/hicolor/ install -Dpm 644 data/%{name}.bash %{buildroot}%{bash_completions_dir}/%{name} install -Dpm 644 data/%{name}.1 %{buildroot}%{_mandir}/man1/%{name}.1 install -Dpm 644 data/%{name}.fr.1 %{buildroot}%{_mandir}/fr/man1/%{name}.1 for file in src/po/*.po; do code=$(basename "$file" .po) install -dm 755 %{buildroot}%{_datadir}/locale/$code/LC_MESSAGES/ msgfmt src/po/$code.po -o %{buildroot}%{_datadir}/locale/$code/LC_MESSAGES/%{name}.mo done %find_lang %{name} --with-man %files -f %{name}.lang %license LICENSE %doc README.md %{_bindir}/%{name} %{_datadir}/applications/%{name}.desktop %{_datadir}/icons/hicolor/*/apps/%{name}.png %{_datadir}/icons/hicolor/scalable/apps/%{name}.svg %{bash_completions_dir}/%{name} %{_mandir}/man1/%{name}.1* %changelog * Tue May 05 2026 Fabrice Creuzot - 4.1.0-1 - New upstream release * Tue Mar 03 2026 Fabrice Creuzot - 4.0.0-1 - Initial Fedora package release (Closes: rhbz#2428546) awf-extended-4.1.0/scripts/fedora/awf-qt7.spec000066400000000000000000000052461517644610000211730ustar00rootroot00000000000000Name: awf-qt7 Version: 4.1.0 Release: 1%{?dist} Summary: Theme preview application for Qt 7 Summary(fr): Application d'aperçu de thème pour Qt 7 License: GPL-3.0-or-later URL: https://github.com/luigifab/awf-extended Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz BuildRequires: aspell-fr BuildRequires: autoconf BuildRequires: automake BuildRequires: desktop-file-utils BuildRequires: gcc-c++ BuildRequires: gettext BuildRequires: qt7-qtbase-devel Requires: qt7-qtbase Requires: hicolor-icon-theme #ecommends: qt7-gtk-platformtheme = qt7-qtbase-gui Recommends: qt7-globalqss Recommends: qt7-qtsvg Suggests: libnotify >= 0.7.0 %description %{expand: A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme. This package provides the program for Qt 7.} %description -l fr %{expand: La fabrique à widgets est une application d'aperçu de thème pour GTK et Qt. Elle affiche les différents types de widgets dans une seule fenêtre permettant de voir l'effet visuel du thème appliqué. Ce paquet fournit le programme pour Qt 7.} %prep %setup -q -n awf-extended-%{version} %build autoreconf -fi %configure --enable-only-qt7 %make_build %install %make_install install -dm 755 %{buildroot}%{_datadir}/applications/ desktop-file-install --dir=%{buildroot}%{_datadir}/applications/ data/%{name}.desktop install -dm 755 %{buildroot}%{_datadir}/icons/hicolor/ for file in data/icons/*/*/awf.png; do mv $file ${file/\/awf.png/\/%{name}.png}; done for file in data/icons/*/*/awf.svg; do mv $file ${file/\/awf.svg/\/%{name}.svg}; done cp -a data/icons/* %{buildroot}%{_datadir}/icons/hicolor/ install -Dpm 644 data/%{name}.bash %{buildroot}%{bash_completions_dir}/%{name} install -Dpm 644 data/%{name}.1 %{buildroot}%{_mandir}/man1/%{name}.1 install -Dpm 644 data/%{name}.fr.1 %{buildroot}%{_mandir}/fr/man1/%{name}.1 for file in src/po/*.po; do code=$(basename "$file" .po) install -dm 755 %{buildroot}%{_datadir}/locale/$code/LC_MESSAGES/ msgfmt src/po/$code.po -o %{buildroot}%{_datadir}/locale/$code/LC_MESSAGES/%{name}.mo done %find_lang %{name} --with-man %files -f %{name}.lang %license LICENSE %doc README.md %{_bindir}/%{name} %{_datadir}/applications/%{name}.desktop %{_datadir}/icons/hicolor/*/apps/%{name}.png %{_datadir}/icons/hicolor/scalable/apps/%{name}.svg %{bash_completions_dir}/%{name} %{_mandir}/man1/%{name}.1* %changelog * Tue May 05 2026 Fabrice Creuzot - 4.1.0-1 - Initial Fedora package release (Closes: rhbz#...) awf-extended-4.1.0/scripts/fedora/rpm-gtk2.sh000066400000000000000000000035131517644610000210230ustar00rootroot00000000000000#!/bin/bash # Fedora: sudo dnf install rpmdevtools rpm-sign autoconf automake libnotify-devel gtk2-devel desktop-file-utils aspell-fr enchant2-aspell # Fedora: configure: error: C compiler cannot create executables? remove and reinstall glibc-devel gcc cd "$(dirname "$0")" version="4.1.0" engine="gtk2" mkdir -p builder ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS} find builder/* ! -name "*$version*.rpm" ! -name "*$version*.gz" -exec rm -rf {} + 2>/dev/null rm -f ~/rpmbuild/SOURCES/awf-$engine-$version.tar.gz # copy to a tmp directory if [ true ]; then rm awf-$engine.spec wget https://raw.githubusercontent.com/luigifab/awf-extended/refs/tags/v$version/scripts/fedora/awf-$engine.spec chmod 644 awf-$engine.spec spectool -g -R awf-$engine.spec else temp=awf-extended-$version mkdir /tmp/$temp cp -r ../../* /tmp/$temp/ rm -rf /tmp/$temp/scripts/*/builder/ mv /tmp/$temp builder/ cp /usr/share/common-licenses/GPL*3 builder/$temp/LICENSE cd builder/ tar czf $temp.tar.gz $temp cd .. cp builder/$temp.tar.gz ~/rpmbuild/SOURCES/awf-$engine-$version.tar.gz chmod 644 awf-$engine.spec fi # create package (rpm sign https://access.redhat.com/articles/3359321) printf "\n############################################################################# awf-$engine\n" rpmbuild --quiet -ba awf-$engine.spec echo "=================================== rpm-sign ==" rpm --addsign ~/rpmbuild/RPMS/*/awf-$engine*.rpm rpm --addsign ~/rpmbuild/SRPMS/awf-$engine*.rpm mv ~/rpmbuild/RPMS/*/awf-$engine*.rpm builder/ mv ~/rpmbuild/SRPMS/awf-$engine*.rpm builder/ rpm --checksig builder/awf-$engine*.rpm echo "=================================== rpm-lint ==" rpmlint awf-$engine.spec builder/awf-$engine*.rpm | grep awf echo "===============================================" rm builder/*debug*rpm ls -dlth "$PWD"/builder/*.rpm # cleanup rm -rf builder/*/awf-extended-4.1.0/scripts/fedora/rpm-gtk3.sh000066400000000000000000000035131517644610000210240ustar00rootroot00000000000000#!/bin/bash # Fedora: sudo dnf install rpmdevtools rpm-sign autoconf automake libnotify-devel gtk3-devel desktop-file-utils aspell-fr enchant2-aspell # Fedora: configure: error: C compiler cannot create executables? remove and reinstall glibc-devel gcc cd "$(dirname "$0")" version="4.1.0" engine="gtk3" mkdir -p builder ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS} find builder/* ! -name "*$version*.rpm" ! -name "*$version*.gz" -exec rm -rf {} + 2>/dev/null rm -f ~/rpmbuild/SOURCES/awf-$engine-$version.tar.gz # copy to a tmp directory if [ true ]; then rm awf-$engine.spec wget https://raw.githubusercontent.com/luigifab/awf-extended/refs/tags/v$version/scripts/fedora/awf-$engine.spec chmod 644 awf-$engine.spec spectool -g -R awf-$engine.spec else temp=awf-extended-$version mkdir /tmp/$temp cp -r ../../* /tmp/$temp/ rm -rf /tmp/$temp/scripts/*/builder/ mv /tmp/$temp builder/ cp /usr/share/common-licenses/GPL*3 builder/$temp/LICENSE cd builder/ tar czf $temp.tar.gz $temp cd .. cp builder/$temp.tar.gz ~/rpmbuild/SOURCES/awf-$engine-$version.tar.gz chmod 644 awf-$engine.spec fi # create package (rpm sign https://access.redhat.com/articles/3359321) printf "\n############################################################################# awf-$engine\n" rpmbuild --quiet -ba awf-$engine.spec echo "=================================== rpm-sign ==" rpm --addsign ~/rpmbuild/RPMS/*/awf-$engine*.rpm rpm --addsign ~/rpmbuild/SRPMS/awf-$engine*.rpm mv ~/rpmbuild/RPMS/*/awf-$engine*.rpm builder/ mv ~/rpmbuild/SRPMS/awf-$engine*.rpm builder/ rpm --checksig builder/awf-$engine*.rpm echo "=================================== rpm-lint ==" rpmlint awf-$engine.spec builder/awf-$engine*.rpm | grep awf echo "===============================================" rm builder/*debug*rpm ls -dlth "$PWD"/builder/*.rpm # cleanup rm -rf builder/*/awf-extended-4.1.0/scripts/fedora/rpm-gtk4.sh000066400000000000000000000035131517644610000210250ustar00rootroot00000000000000#!/bin/bash # Fedora: sudo dnf install rpmdevtools rpm-sign autoconf automake libnotify-devel gtk4-devel desktop-file-utils aspell-fr enchant2-aspell # Fedora: configure: error: C compiler cannot create executables? remove and reinstall glibc-devel gcc cd "$(dirname "$0")" version="4.1.0" engine="gtk4" mkdir -p builder ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS} find builder/* ! -name "*$version*.rpm" ! -name "*$version*.gz" -exec rm -rf {} + 2>/dev/null rm -f ~/rpmbuild/SOURCES/awf-$engine-$version.tar.gz # copy to a tmp directory if [ true ]; then rm awf-$engine.spec wget https://raw.githubusercontent.com/luigifab/awf-extended/refs/tags/v$version/scripts/fedora/awf-$engine.spec chmod 644 awf-$engine.spec spectool -g -R awf-$engine.spec else temp=awf-extended-$version mkdir /tmp/$temp cp -r ../../* /tmp/$temp/ rm -rf /tmp/$temp/scripts/*/builder/ mv /tmp/$temp builder/ cp /usr/share/common-licenses/GPL*3 builder/$temp/LICENSE cd builder/ tar czf $temp.tar.gz $temp cd .. cp builder/$temp.tar.gz ~/rpmbuild/SOURCES/awf-$engine-$version.tar.gz chmod 644 awf-$engine.spec fi # create package (rpm sign https://access.redhat.com/articles/3359321) printf "\n############################################################################# awf-$engine\n" rpmbuild --quiet -ba awf-$engine.spec echo "=================================== rpm-sign ==" rpm --addsign ~/rpmbuild/RPMS/*/awf-$engine*.rpm rpm --addsign ~/rpmbuild/SRPMS/awf-$engine*.rpm mv ~/rpmbuild/RPMS/*/awf-$engine*.rpm builder/ mv ~/rpmbuild/SRPMS/awf-$engine*.rpm builder/ rpm --checksig builder/awf-$engine*.rpm echo "=================================== rpm-lint ==" rpmlint awf-$engine.spec builder/awf-$engine*.rpm | grep awf echo "===============================================" rm builder/*debug*rpm ls -dlth "$PWD"/builder/*.rpm # cleanup rm -rf builder/*/awf-extended-4.1.0/scripts/fedora/rpm-gtk5.sh000066400000000000000000000035131517644610000210260ustar00rootroot00000000000000#!/bin/bash # Fedora: sudo dnf install rpmdevtools rpm-sign autoconf automake libnotify-devel gtk5-devel desktop-file-utils aspell-fr enchant2-aspell # Fedora: configure: error: C compiler cannot create executables? remove and reinstall glibc-devel gcc cd "$(dirname "$0")" version="4.1.0" engine="gtk5" mkdir -p builder ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS} find builder/* ! -name "*$version*.rpm" ! -name "*$version*.gz" -exec rm -rf {} + 2>/dev/null rm -f ~/rpmbuild/SOURCES/awf-$engine-$version.tar.gz # copy to a tmp directory if [ true ]; then rm awf-$engine.spec wget https://raw.githubusercontent.com/luigifab/awf-extended/refs/tags/v$version/scripts/fedora/awf-$engine.spec chmod 644 awf-$engine.spec spectool -g -R awf-$engine.spec else temp=awf-extended-$version mkdir /tmp/$temp cp -r ../../* /tmp/$temp/ rm -rf /tmp/$temp/scripts/*/builder/ mv /tmp/$temp builder/ cp /usr/share/common-licenses/GPL*3 builder/$temp/LICENSE cd builder/ tar czf $temp.tar.gz $temp cd .. cp builder/$temp.tar.gz ~/rpmbuild/SOURCES/awf-$engine-$version.tar.gz chmod 644 awf-$engine.spec fi # create package (rpm sign https://access.redhat.com/articles/3359321) printf "\n############################################################################# awf-$engine\n" rpmbuild --quiet -ba awf-$engine.spec echo "=================================== rpm-sign ==" rpm --addsign ~/rpmbuild/RPMS/*/awf-$engine*.rpm rpm --addsign ~/rpmbuild/SRPMS/awf-$engine*.rpm mv ~/rpmbuild/RPMS/*/awf-$engine*.rpm builder/ mv ~/rpmbuild/SRPMS/awf-$engine*.rpm builder/ rpm --checksig builder/awf-$engine*.rpm echo "=================================== rpm-lint ==" rpmlint awf-$engine.spec builder/awf-$engine*.rpm | grep awf echo "===============================================" rm builder/*debug*rpm ls -dlth "$PWD"/builder/*.rpm # cleanup rm -rf builder/*/awf-extended-4.1.0/scripts/fedora/rpm-qt5.sh000066400000000000000000000035011517644610000206620ustar00rootroot00000000000000#!/bin/bash # Fedora: sudo dnf install rpmdevtools rpm-sign autoconf automake qt5-qtbase-devel desktop-file-utils aspell-fr enchant2-aspell # Fedora: configure: error: C compiler cannot create executables? remove and reinstall glibc-devel gcc cd "$(dirname "$0")" version="4.1.0" engine="qt5" mkdir -p builder ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS} find builder/* ! -name "*$version*.rpm" ! -name "*$version*.gz" -exec rm -rf {} + 2>/dev/null rm -f ~/rpmbuild/SOURCES/awf-$engine-$version.tar.gz # copy to a tmp directory if [ true ]; then rm awf-$engine.spec wget https://raw.githubusercontent.com/luigifab/awf-extended/refs/tags/v$version/scripts/fedora/awf-$engine.spec chmod 644 awf-$engine.spec spectool -g -R awf-$engine.spec else temp=awf-extended-$version mkdir /tmp/$temp cp -r ../../* /tmp/$temp/ rm -rf /tmp/$temp/scripts/*/builder/ mv /tmp/$temp builder/ cp /usr/share/common-licenses/GPL*3 builder/$temp/LICENSE cd builder/ tar czf $temp.tar.gz $temp cd .. cp builder/$temp.tar.gz ~/rpmbuild/SOURCES/awf-$engine-$version.tar.gz chmod 644 awf-$engine.spec fi # create package (rpm sign https://access.redhat.com/articles/3359321) printf "\n############################################################################## awf-$engine\n" rpmbuild --quiet -ba awf-$engine.spec echo "=================================== rpm-sign ==" rpm --addsign ~/rpmbuild/RPMS/*/awf-$engine*.rpm rpm --addsign ~/rpmbuild/SRPMS/awf-$engine*.rpm mv ~/rpmbuild/RPMS/*/awf-$engine*.rpm builder/ mv ~/rpmbuild/SRPMS/awf-$engine*.rpm builder/ rpm --checksig builder/awf-$engine*.rpm echo "=================================== rpm-lint ==" rpmlint awf-$engine.spec builder/awf-$engine*.rpm | grep awf echo "===============================================" rm builder/*debug*rpm ls -dlth "$PWD"/builder/*.rpm # cleanup rm -rf builder/*/awf-extended-4.1.0/scripts/fedora/rpm-qt6.sh000066400000000000000000000035011517644610000206630ustar00rootroot00000000000000#!/bin/bash # Fedora: sudo dnf install rpmdevtools rpm-sign autoconf automake qt6-qtbase-devel desktop-file-utils aspell-fr enchant2-aspell # Fedora: configure: error: C compiler cannot create executables? remove and reinstall glibc-devel gcc cd "$(dirname "$0")" version="4.1.0" engine="qt6" mkdir -p builder ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS} find builder/* ! -name "*$version*.rpm" ! -name "*$version*.gz" -exec rm -rf {} + 2>/dev/null rm -f ~/rpmbuild/SOURCES/awf-$engine-$version.tar.gz # copy to a tmp directory if [ true ]; then rm awf-$engine.spec wget https://raw.githubusercontent.com/luigifab/awf-extended/refs/tags/v$version/scripts/fedora/awf-$engine.spec chmod 644 awf-$engine.spec spectool -g -R awf-$engine.spec else temp=awf-extended-$version mkdir /tmp/$temp cp -r ../../* /tmp/$temp/ rm -rf /tmp/$temp/scripts/*/builder/ mv /tmp/$temp builder/ cp /usr/share/common-licenses/GPL*3 builder/$temp/LICENSE cd builder/ tar czf $temp.tar.gz $temp cd .. cp builder/$temp.tar.gz ~/rpmbuild/SOURCES/awf-$engine-$version.tar.gz chmod 644 awf-$engine.spec fi # create package (rpm sign https://access.redhat.com/articles/3359321) printf "\n############################################################################## awf-$engine\n" rpmbuild --quiet -ba awf-$engine.spec echo "=================================== rpm-sign ==" rpm --addsign ~/rpmbuild/RPMS/*/awf-$engine*.rpm rpm --addsign ~/rpmbuild/SRPMS/awf-$engine*.rpm mv ~/rpmbuild/RPMS/*/awf-$engine*.rpm builder/ mv ~/rpmbuild/SRPMS/awf-$engine*.rpm builder/ rpm --checksig builder/awf-$engine*.rpm echo "=================================== rpm-lint ==" rpmlint awf-$engine.spec builder/awf-$engine*.rpm | grep awf echo "===============================================" rm builder/*debug*rpm ls -dlth "$PWD"/builder/*.rpm # cleanup rm -rf builder/*/awf-extended-4.1.0/scripts/fedora/rpm-qt7.sh000066400000000000000000000035011517644610000206640ustar00rootroot00000000000000#!/bin/bash # Fedora: sudo dnf install rpmdevtools rpm-sign autoconf automake qt7-qtbase-devel desktop-file-utils aspell-fr enchant2-aspell # Fedora: configure: error: C compiler cannot create executables? remove and reinstall glibc-devel gcc cd "$(dirname "$0")" version="4.1.0" engine="qt7" mkdir -p builder ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS} find builder/* ! -name "*$version*.rpm" ! -name "*$version*.gz" -exec rm -rf {} + 2>/dev/null rm -f ~/rpmbuild/SOURCES/awf-$engine-$version.tar.gz # copy to a tmp directory if [ true ]; then rm awf-$engine.spec wget https://raw.githubusercontent.com/luigifab/awf-extended/refs/tags/v$version/scripts/fedora/awf-$engine.spec chmod 644 awf-$engine.spec spectool -g -R awf-$engine.spec else temp=awf-extended-$version mkdir /tmp/$temp cp -r ../../* /tmp/$temp/ rm -rf /tmp/$temp/scripts/*/builder/ mv /tmp/$temp builder/ cp /usr/share/common-licenses/GPL*3 builder/$temp/LICENSE cd builder/ tar czf $temp.tar.gz $temp cd .. cp builder/$temp.tar.gz ~/rpmbuild/SOURCES/awf-$engine-$version.tar.gz chmod 644 awf-$engine.spec fi # create package (rpm sign https://access.redhat.com/articles/3359321) printf "\n############################################################################## awf-$engine\n" rpmbuild --quiet -ba awf-$engine.spec echo "=================================== rpm-sign ==" rpm --addsign ~/rpmbuild/RPMS/*/awf-$engine*.rpm rpm --addsign ~/rpmbuild/SRPMS/awf-$engine*.rpm mv ~/rpmbuild/RPMS/*/awf-$engine*.rpm builder/ mv ~/rpmbuild/SRPMS/awf-$engine*.rpm builder/ rpm --checksig builder/awf-$engine*.rpm echo "=================================== rpm-lint ==" rpmlint awf-$engine.spec builder/awf-$engine*.rpm | grep awf echo "===============================================" rm builder/*debug*rpm ls -dlth "$PWD"/builder/*.rpm # cleanup rm -rf builder/*/awf-extended-4.1.0/scripts/mageia/000077500000000000000000000000001517644610000170055ustar00rootroot00000000000000awf-extended-4.1.0/scripts/mageia/awf-gtk2.spec000066400000000000000000000064431517644610000213120ustar00rootroot00000000000000Name: awf-gtk2 Version: 4.1.0 Release: %mkrel 1 Summary: Theme preview application for GTK 2 Summary(fr): Application d'aperçu de thème pour GTK 2 License: GPLv3+ Group: Development/Basic URL: https://github.com/luigifab/awf-extended Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz BuildRequires: aspell-fr BuildRequires: autoconf BuildRequires: automake BuildRequires: desktop-file-utils BuildRequires: libnotify-devel >= 0.7.0 BuildRequires: gcc BuildRequires: gettext BuildRequires: gtk2-devel >= 2.24.0 Requires: gtk2 >= 2.24.0 Requires: hicolor-icon-theme Requires: libnotify >= 0.7.0 %description %{expand: A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme. This package provides the program for GTK 2.} %description -l fr %{expand: La fabrique à widgets est une application d'aperçu de thème pour GTK et Qt. Elle affiche les différents types de widgets dans une seule fenêtre permettant de voir l'effet visuel du thème appliqué. Ce paquet fournit le programme pour GTK 2.} %prep %setup -q -n awf-extended-%{version} %build autoreconf -fi %configure --enable-only-gtk2 %make_build %install %make_install install -dm 755 %{buildroot}%{_datadir}/applications/ desktop-file-install --dir=%{buildroot}%{_datadir}/applications/ data/%{name}.desktop install -dm 755 %{buildroot}%{_datadir}/icons/hicolor/ for file in data/icons/*/*/awf.png; do mv $file ${file/\/awf.png/\/%{name}.png}; done for file in data/icons/*/*/awf.svg; do mv $file ${file/\/awf.svg/\/%{name}.svg}; done cp -a data/icons/* %{buildroot}%{_datadir}/icons/hicolor/ install -Dpm 644 data/%{name}.bash %{buildroot}%{_datadir}/bash-completion/completions/%{name} install -Dpm 644 data/%{name}.1 %{buildroot}%{_mandir}/man1/%{name}.1 install -Dpm 644 data/%{name}.fr.1 %{buildroot}%{_mandir}/fr/man1/%{name}.1 for file in src/po/*.po; do code=$(basename "$file" .po) install -dm 755 %{buildroot}%{_datadir}/locale/$code/LC_MESSAGES/ msgfmt src/po/$code.po -o %{buildroot}%{_datadir}/locale/$code/LC_MESSAGES/%{name}.mo done %find_lang %{name} --with-man %files -f %{name}.lang %license LICENSE %doc README.md %{_bindir}/%{name} %{_datadir}/applications/%{name}.desktop %{_datadir}/icons/hicolor/*/apps/%{name}.png %{_datadir}/icons/hicolor/scalable/apps/%{name}.svg %{_datadir}/bash-completion/completions/%{name} %{_mandir}/man1/%{name}.1* %changelog * Tue May 05 2026 Fabrice Creuzot - 4.1.0-1.mga - New upstream release * Tue Mar 03 2026 Fabrice Creuzot - 4.0.0-1.mga - New upstream release * Fri Oct 10 2025 Fabrice Creuzot - 3.2.0-1.mga - New upstream release * Fri Aug 08 2025 Fabrice Creuzot - 3.1.0-1.mga - New upstream release - Add support for CSD dialog * Mon May 05 2025 Fabrice Creuzot - 3.0.0-1.mga - New upstream release - Add support for CSD window - Add --enable-only-gtkx and --disable-gtkx options * Fri Apr 04 2025 Fabrice Creuzot - 2.9.0-1.mga - New upstream release * Mon Mar 03 2025 Fabrice Creuzot - 2.8.1-1.mga - Initial Mageia package release (Closes: mbz#32827) awf-extended-4.1.0/scripts/mageia/awf-gtk3.spec000066400000000000000000000064171517644610000213140ustar00rootroot00000000000000Name: awf-gtk3 Version: 4.1.0 Release: %mkrel 1 Summary: Theme preview application for GTK 3 Summary(fr): Application d'aperçu de thème pour GTK 3 License: GPLv3+ Group: Development/Basic URL: https://github.com/luigifab/awf-extended Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz BuildRequires: aspell-fr BuildRequires: autoconf BuildRequires: automake BuildRequires: desktop-file-utils BuildRequires: libnotify-devel >= 0.7.0 BuildRequires: gcc BuildRequires: gettext BuildRequires: gtk3-devel Requires: gtk3 Requires: hicolor-icon-theme Requires: libnotify >= 0.7.0 %description %{expand: A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme. This package provides the program for GTK 3.} %description -l fr %{expand: La fabrique à widgets est une application d'aperçu de thème pour GTK et Qt. Elle affiche les différents types de widgets dans une seule fenêtre permettant de voir l'effet visuel du thème appliqué. Ce paquet fournit le programme pour GTK 3.} %prep %setup -q -n awf-extended-%{version} %build autoreconf -fi %configure --enable-only-gtk3 %make_build %install %make_install install -dm 755 %{buildroot}%{_datadir}/applications/ desktop-file-install --dir=%{buildroot}%{_datadir}/applications/ data/%{name}.desktop install -dm 755 %{buildroot}%{_datadir}/icons/hicolor/ for file in data/icons/*/*/awf.png; do mv $file ${file/\/awf.png/\/%{name}.png}; done for file in data/icons/*/*/awf.svg; do mv $file ${file/\/awf.svg/\/%{name}.svg}; done cp -a data/icons/* %{buildroot}%{_datadir}/icons/hicolor/ install -Dpm 644 data/%{name}.bash %{buildroot}%{_datadir}/bash-completion/completions/%{name} install -Dpm 644 data/%{name}.1 %{buildroot}%{_mandir}/man1/%{name}.1 install -Dpm 644 data/%{name}.fr.1 %{buildroot}%{_mandir}/fr/man1/%{name}.1 for file in src/po/*.po; do code=$(basename "$file" .po) install -dm 755 %{buildroot}%{_datadir}/locale/$code/LC_MESSAGES/ msgfmt src/po/$code.po -o %{buildroot}%{_datadir}/locale/$code/LC_MESSAGES/%{name}.mo done %find_lang %{name} --with-man %files -f %{name}.lang %license LICENSE %doc README.md %{_bindir}/%{name} %{_datadir}/applications/%{name}.desktop %{_datadir}/icons/hicolor/*/apps/%{name}.png %{_datadir}/icons/hicolor/scalable/apps/%{name}.svg %{_datadir}/bash-completion/completions/%{name} %{_mandir}/man1/%{name}.1* %changelog * Tue May 05 2026 Fabrice Creuzot - 4.1.0-1.mga - New upstream release * Tue Mar 03 2026 Fabrice Creuzot - 4.0.0-1.mga - New upstream release * Fri Oct 10 2025 Fabrice Creuzot - 3.2.0-1.mga - New upstream release * Fri Aug 08 2025 Fabrice Creuzot - 3.1.0-1.mga - New upstream release - Add support for CSD dialog * Mon May 05 2025 Fabrice Creuzot - 3.0.0-1.mga - New upstream release - Add support for CSD window - Add --enable-only-gtkx and --disable-gtkx options * Fri Apr 04 2025 Fabrice Creuzot - 2.9.0-1.mga - New upstream release * Mon Mar 03 2025 Fabrice Creuzot - 2.8.1-1.mga - Initial Mageia package release (Closes: mbz#32827) awf-extended-4.1.0/scripts/mageia/awf-gtk4.spec000066400000000000000000000064171517644610000213150ustar00rootroot00000000000000Name: awf-gtk4 Version: 4.1.0 Release: %mkrel 1 Summary: Theme preview application for GTK 4 Summary(fr): Application d'aperçu de thème pour GTK 4 License: GPLv3+ Group: Development/Basic URL: https://github.com/luigifab/awf-extended Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz BuildRequires: aspell-fr BuildRequires: autoconf BuildRequires: automake BuildRequires: desktop-file-utils BuildRequires: libnotify-devel >= 0.7.0 BuildRequires: gcc BuildRequires: gettext BuildRequires: gtk4-devel Requires: gtk4 Requires: hicolor-icon-theme Requires: libnotify >= 0.7.0 %description %{expand: A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme. This package provides the program for GTK 4.} %description -l fr %{expand: La fabrique à widgets est une application d'aperçu de thème pour GTK et Qt. Elle affiche les différents types de widgets dans une seule fenêtre permettant de voir l'effet visuel du thème appliqué. Ce paquet fournit le programme pour GTK 4.} %prep %setup -q -n awf-extended-%{version} %build autoreconf -fi %configure --enable-only-gtk4 %make_build %install %make_install install -dm 755 %{buildroot}%{_datadir}/applications/ desktop-file-install --dir=%{buildroot}%{_datadir}/applications/ data/%{name}.desktop install -dm 755 %{buildroot}%{_datadir}/icons/hicolor/ for file in data/icons/*/*/awf.png; do mv $file ${file/\/awf.png/\/%{name}.png}; done for file in data/icons/*/*/awf.svg; do mv $file ${file/\/awf.svg/\/%{name}.svg}; done cp -a data/icons/* %{buildroot}%{_datadir}/icons/hicolor/ install -Dpm 644 data/%{name}.bash %{buildroot}%{_datadir}/bash-completion/completions/%{name} install -Dpm 644 data/%{name}.1 %{buildroot}%{_mandir}/man1/%{name}.1 install -Dpm 644 data/%{name}.fr.1 %{buildroot}%{_mandir}/fr/man1/%{name}.1 for file in src/po/*.po; do code=$(basename "$file" .po) install -dm 755 %{buildroot}%{_datadir}/locale/$code/LC_MESSAGES/ msgfmt src/po/$code.po -o %{buildroot}%{_datadir}/locale/$code/LC_MESSAGES/%{name}.mo done %find_lang %{name} --with-man %files -f %{name}.lang %license LICENSE %doc README.md %{_bindir}/%{name} %{_datadir}/applications/%{name}.desktop %{_datadir}/icons/hicolor/*/apps/%{name}.png %{_datadir}/icons/hicolor/scalable/apps/%{name}.svg %{_datadir}/bash-completion/completions/%{name} %{_mandir}/man1/%{name}.1* %changelog * Tue May 05 2026 Fabrice Creuzot - 4.1.0-1.mga - New upstream release * Tue Mar 03 2026 Fabrice Creuzot - 4.0.0-1.mga - New upstream release * Fri Oct 10 2025 Fabrice Creuzot - 3.2.0-1.mga - New upstream release * Fri Aug 08 2025 Fabrice Creuzot - 3.1.0-1.mga - New upstream release - Add support for CSD dialog * Mon May 05 2025 Fabrice Creuzot - 3.0.0-1.mga - New upstream release - Add support for CSD window - Add --enable-only-gtkx and --disable-gtkx options * Fri Apr 04 2025 Fabrice Creuzot - 2.9.0-1.mga - New upstream release * Mon Mar 03 2025 Fabrice Creuzot - 2.8.1-1.mga - Initial Mageia package release (Closes: mbz#32827) awf-extended-4.1.0/scripts/mageia/awf-gtk5.spec000066400000000000000000000052241517644610000213110ustar00rootroot00000000000000Name: awf-gtk5 Version: 4.1.0 Release: %mkrel 1 Summary: Theme preview application for GTK 5 Summary(fr): Application d'aperçu de thème pour GTK 5 License: GPLv3+ Group: Development/Basic URL: https://github.com/luigifab/awf-extended Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz BuildRequires: aspell-fr BuildRequires: autoconf BuildRequires: automake BuildRequires: desktop-file-utils BuildRequires: libnotify-devel >= 0.7.0 BuildRequires: gcc BuildRequires: gettext BuildRequires: gtk5-devel Requires: gtk5 Requires: hicolor-icon-theme Requires: libnotify >= 0.7.0 %description %{expand: A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme. This package provides the program for GTK 5.} %description -l fr %{expand: La fabrique à widgets est une application d'aperçu de thème pour GTK et Qt. Elle affiche les différents types de widgets dans une seule fenêtre permettant de voir l'effet visuel du thème appliqué. Ce paquet fournit le programme pour GTK 5.} %prep %setup -q -n awf-extended-%{version} %build autoreconf -fi %configure --enable-only-gtk5 %make_build %install %make_install install -dm 755 %{buildroot}%{_datadir}/applications/ desktop-file-install --dir=%{buildroot}%{_datadir}/applications/ data/%{name}.desktop install -dm 755 %{buildroot}%{_datadir}/icons/hicolor/ for file in data/icons/*/*/awf.png; do mv $file ${file/\/awf.png/\/%{name}.png}; done for file in data/icons/*/*/awf.svg; do mv $file ${file/\/awf.svg/\/%{name}.svg}; done cp -a data/icons/* %{buildroot}%{_datadir}/icons/hicolor/ install -Dpm 644 data/%{name}.bash %{buildroot}%{_datadir}/bash-completion/completions/%{name} install -Dpm 644 data/%{name}.1 %{buildroot}%{_mandir}/man1/%{name}.1 install -Dpm 644 data/%{name}.fr.1 %{buildroot}%{_mandir}/fr/man1/%{name}.1 for file in src/po/*.po; do code=$(basename "$file" .po) install -dm 755 %{buildroot}%{_datadir}/locale/$code/LC_MESSAGES/ msgfmt src/po/$code.po -o %{buildroot}%{_datadir}/locale/$code/LC_MESSAGES/%{name}.mo done %find_lang %{name} --with-man %files -f %{name}.lang %license LICENSE %doc README.md %{_bindir}/%{name} %{_datadir}/applications/%{name}.desktop %{_datadir}/icons/hicolor/*/apps/%{name}.png %{_datadir}/icons/hicolor/scalable/apps/%{name}.svg %{_datadir}/bash-completion/completions/%{name} %{_mandir}/man1/%{name}.1* %changelog * Tue May 05 2026 Fabrice Creuzot - 4.1.0-1.mga - Initial Mageia package release (Closes: mbz#32827) awf-extended-4.1.0/scripts/mageia/awf-qt5.spec000066400000000000000000000054301517644610000211470ustar00rootroot00000000000000Name: awf-qt5 Version: 4.1.0 Release: %mkrel 1 Summary: Theme preview application for Qt 5 Summary(fr): Application d'aperçu de thème pour Qt 5 License: GPLv3+ Group: Development/Basic URL: https://github.com/luigifab/awf-extended Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz BuildRequires: aspell-fr BuildRequires: autoconf BuildRequires: automake BuildRequires: desktop-file-utils BuildRequires: gcc-c++ BuildRequires: gettext BuildRequires: qt5-devel Requires: qt5 Requires: hicolor-icon-theme #ecommends: qt5-gtk-platformtheme ? Recommends: qt5-globalqss Recommends: qtsvg5 Suggests: libnotify >= 0.7.0 %description %{expand: A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme. This package provides the program for Qt 5.} %description -l fr %{expand: La fabrique à widgets est une application d'aperçu de thème pour GTK et Qt. Elle affiche les différents types de widgets dans une seule fenêtre permettant de voir l'effet visuel du thème appliqué. Ce paquet fournit le programme pour Qt 5.} %prep %setup -q -n awf-extended-%{version} %build autoreconf -fi %configure --enable-only-qt5 %make_build %install %make_install install -dm 755 %{buildroot}%{_datadir}/applications/ desktop-file-install --dir=%{buildroot}%{_datadir}/applications/ data/%{name}.desktop install -dm 755 %{buildroot}%{_datadir}/icons/hicolor/ for file in data/icons/*/*/awf.png; do mv $file ${file/\/awf.png/\/%{name}.png}; done for file in data/icons/*/*/awf.svg; do mv $file ${file/\/awf.svg/\/%{name}.svg}; done cp -a data/icons/* %{buildroot}%{_datadir}/icons/hicolor/ install -Dpm 644 data/%{name}.bash %{buildroot}%{_datadir}/bash-completion/completions/%{name} install -Dpm 644 data/%{name}.1 %{buildroot}%{_mandir}/man1/%{name}.1 install -Dpm 644 data/%{name}.fr.1 %{buildroot}%{_mandir}/fr/man1/%{name}.1 for file in src/po/*.po; do code=$(basename "$file" .po) install -dm 755 %{buildroot}%{_datadir}/locale/$code/LC_MESSAGES/ msgfmt src/po/$code.po -o %{buildroot}%{_datadir}/locale/$code/LC_MESSAGES/%{name}.mo done %find_lang %{name} --with-man %files -f %{name}.lang %license LICENSE %doc README.md %{_bindir}/%{name} %{_datadir}/applications/%{name}.desktop %{_datadir}/icons/hicolor/*/apps/%{name}.png %{_datadir}/icons/hicolor/scalable/apps/%{name}.svg %{_datadir}/bash-completion/completions/%{name} %{_mandir}/man1/%{name}.1* %changelog * Tue May 05 2026 Fabrice Creuzot - 4.1.0-1.mga - New upstream release * Tue Mar 03 2026 Fabrice Creuzot - 4.0.0-1.mga - Initial Mageia package release (Closes: mbz#32827) awf-extended-4.1.0/scripts/mageia/awf-qt6.spec000066400000000000000000000054301517644610000211500ustar00rootroot00000000000000Name: awf-qt6 Version: 4.1.0 Release: %mkrel 1 Summary: Theme preview application for Qt 6 Summary(fr): Application d'aperçu de thème pour Qt 6 License: GPLv3+ Group: Development/Basic URL: https://github.com/luigifab/awf-extended Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz BuildRequires: aspell-fr BuildRequires: autoconf BuildRequires: automake BuildRequires: desktop-file-utils BuildRequires: gcc-c++ BuildRequires: gettext BuildRequires: qt6-devel Requires: qt6 Requires: hicolor-icon-theme #ecommends: qt6-gtk-platformtheme ? Recommends: qt6-globalqss Recommends: qtsvg6 Suggests: libnotify >= 0.7.0 %description %{expand: A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme. This package provides the program for Qt 6.} %description -l fr %{expand: La fabrique à widgets est une application d'aperçu de thème pour GTK et Qt. Elle affiche les différents types de widgets dans une seule fenêtre permettant de voir l'effet visuel du thème appliqué. Ce paquet fournit le programme pour Qt 6.} %prep %setup -q -n awf-extended-%{version} %build autoreconf -fi %configure --enable-only-qt6 %make_build %install %make_install install -dm 755 %{buildroot}%{_datadir}/applications/ desktop-file-install --dir=%{buildroot}%{_datadir}/applications/ data/%{name}.desktop install -dm 755 %{buildroot}%{_datadir}/icons/hicolor/ for file in data/icons/*/*/awf.png; do mv $file ${file/\/awf.png/\/%{name}.png}; done for file in data/icons/*/*/awf.svg; do mv $file ${file/\/awf.svg/\/%{name}.svg}; done cp -a data/icons/* %{buildroot}%{_datadir}/icons/hicolor/ install -Dpm 644 data/%{name}.bash %{buildroot}%{_datadir}/bash-completion/completions/%{name} install -Dpm 644 data/%{name}.1 %{buildroot}%{_mandir}/man1/%{name}.1 install -Dpm 644 data/%{name}.fr.1 %{buildroot}%{_mandir}/fr/man1/%{name}.1 for file in src/po/*.po; do code=$(basename "$file" .po) install -dm 755 %{buildroot}%{_datadir}/locale/$code/LC_MESSAGES/ msgfmt src/po/$code.po -o %{buildroot}%{_datadir}/locale/$code/LC_MESSAGES/%{name}.mo done %find_lang %{name} --with-man %files -f %{name}.lang %license LICENSE %doc README.md %{_bindir}/%{name} %{_datadir}/applications/%{name}.desktop %{_datadir}/icons/hicolor/*/apps/%{name}.png %{_datadir}/icons/hicolor/scalable/apps/%{name}.svg %{_datadir}/bash-completion/completions/%{name} %{_mandir}/man1/%{name}.1* %changelog * Tue May 05 2026 Fabrice Creuzot - 4.1.0-1.mga - New upstream release * Tue Mar 03 2026 Fabrice Creuzot - 4.0.0-1.mga - Initial Mageia package release (Closes: mbz#32827) awf-extended-4.1.0/scripts/mageia/awf-qt7.spec000066400000000000000000000053001517644610000211450ustar00rootroot00000000000000Name: awf-qt7 Version: 4.1.0 Release: %mkrel 1 Summary: Theme preview application for Qt 7 Summary(fr): Application d'aperçu de thème pour Qt 7 License: GPLv3+ Group: Development/Basic URL: https://github.com/luigifab/awf-extended Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz BuildRequires: aspell-fr BuildRequires: autoconf BuildRequires: automake BuildRequires: desktop-file-utils BuildRequires: gcc-c++ BuildRequires: gettext BuildRequires: qt7-devel Requires: qt7 Requires: hicolor-icon-theme #ecommends: qt7-gtk-platformtheme ? Recommends: qt7-globalqss Recommends: qtsvg6 Suggests: libnotify >= 0.7.0 %description %{expand: A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme. This package provides the program for Qt 7.} %description -l fr %{expand: La fabrique à widgets est une application d'aperçu de thème pour GTK et Qt. Elle affiche les différents types de widgets dans une seule fenêtre permettant de voir l'effet visuel du thème appliqué. Ce paquet fournit le programme pour Qt 7.} %prep %setup -q -n awf-extended-%{version} %build autoreconf -fi %configure --enable-only-qt7 %make_build %install %make_install install -dm 755 %{buildroot}%{_datadir}/applications/ desktop-file-install --dir=%{buildroot}%{_datadir}/applications/ data/%{name}.desktop install -dm 755 %{buildroot}%{_datadir}/icons/hicolor/ for file in data/icons/*/*/awf.png; do mv $file ${file/\/awf.png/\/%{name}.png}; done for file in data/icons/*/*/awf.svg; do mv $file ${file/\/awf.svg/\/%{name}.svg}; done cp -a data/icons/* %{buildroot}%{_datadir}/icons/hicolor/ install -Dpm 644 data/%{name}.bash %{buildroot}%{_datadir}/bash-completion/completions/%{name} install -Dpm 644 data/%{name}.1 %{buildroot}%{_mandir}/man1/%{name}.1 install -Dpm 644 data/%{name}.fr.1 %{buildroot}%{_mandir}/fr/man1/%{name}.1 for file in src/po/*.po; do code=$(basename "$file" .po) install -dm 755 %{buildroot}%{_datadir}/locale/$code/LC_MESSAGES/ msgfmt src/po/$code.po -o %{buildroot}%{_datadir}/locale/$code/LC_MESSAGES/%{name}.mo done %find_lang %{name} --with-man %files -f %{name}.lang %license LICENSE %doc README.md %{_bindir}/%{name} %{_datadir}/applications/%{name}.desktop %{_datadir}/icons/hicolor/*/apps/%{name}.png %{_datadir}/icons/hicolor/scalable/apps/%{name}.svg %{_datadir}/bash-completion/completions/%{name} %{_mandir}/man1/%{name}.1* %changelog * Tue May 05 2026 Fabrice Creuzot - 4.1.0-1.mga - Initial Mageia package release (Closes: mbz#32827) awf-extended-4.1.0/scripts/mageia/rpm-gtk2.sh000066400000000000000000000033571517644610000210140ustar00rootroot00000000000000#!/bin/bash # Mageia: sudo urpmi --no-recommends rpmdevtools rpm-sign autoconf automake libnotify-devel gtk2-devel desktop-file-utils aspell-fr enchant2-aspell cd "$(dirname "$0")" version="4.1.0" engine="gtk2" mkdir -p builder ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS} find builder/* ! -name "*$version*.rpm" ! -name "*$version*.gz" -exec rm -rf {} + 2>/dev/null rm -f ~/rpmbuild/SOURCES/awf-$engine-$version.tar.gz # copy to a tmp directory if [ true ]; then rm awf-$engine.spec wget https://raw.githubusercontent.com/luigifab/awf-extended/refs/tags/v$version/scripts/mageia/awf-$engine.spec chmod 644 awf-$engine.spec spectool -g -R awf-$engine.spec else temp=awf-extended-$version mkdir /tmp/$temp cp -r ../../* /tmp/$temp/ rm -rf /tmp/$temp/scripts/*/builder/ mv /tmp/$temp builder/ cp /usr/share/common-licenses/GPL*3 builder/$temp/LICENSE cd builder/ tar czf $temp.tar.gz $temp cd .. cp builder/$temp.tar.gz ~/rpmbuild/SOURCES/awf-$engine-$version.tar.gz chmod 644 awf-$engine.spec fi # create package (rpm sign https://access.redhat.com/articles/3359321) printf "\n############################################################################# awf-$engine\n" rpmbuild --quiet -ba awf-$engine.spec echo "=================================== rpm-sign ==" rpm --addsign ~/rpmbuild/RPMS/*/awf-$engine*.rpm rpm --addsign ~/rpmbuild/SRPMS/awf-$engine*.rpm mv ~/rpmbuild/RPMS/*/awf-$engine*.rpm builder/ mv ~/rpmbuild/SRPMS/awf-$engine*.rpm builder/ rpm --checksig builder/awf-$engine*.rpm echo "=================================== rpm-lint ==" rpmlint awf-$engine.spec builder/awf-$engine*.rpm | grep awf echo "===============================================" rm builder/*debug*rpm ls -dlth "$PWD"/builder/*.rpm # cleanup rm -rf builder/*/awf-extended-4.1.0/scripts/mageia/rpm-gtk3.sh000066400000000000000000000033571517644610000210150ustar00rootroot00000000000000#!/bin/bash # Mageia: sudo urpmi --no-recommends rpmdevtools rpm-sign autoconf automake libnotify-devel gtk3-devel desktop-file-utils aspell-fr enchant2-aspell cd "$(dirname "$0")" version="4.1.0" engine="gtk3" mkdir -p builder ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS} find builder/* ! -name "*$version*.rpm" ! -name "*$version*.gz" -exec rm -rf {} + 2>/dev/null rm -f ~/rpmbuild/SOURCES/awf-$engine-$version.tar.gz # copy to a tmp directory if [ true ]; then rm awf-$engine.spec wget https://raw.githubusercontent.com/luigifab/awf-extended/refs/tags/v$version/scripts/mageia/awf-$engine.spec chmod 644 awf-$engine.spec spectool -g -R awf-$engine.spec else temp=awf-extended-$version mkdir /tmp/$temp cp -r ../../* /tmp/$temp/ rm -rf /tmp/$temp/scripts/*/builder/ mv /tmp/$temp builder/ cp /usr/share/common-licenses/GPL*3 builder/$temp/LICENSE cd builder/ tar czf $temp.tar.gz $temp cd .. cp builder/$temp.tar.gz ~/rpmbuild/SOURCES/awf-$engine-$version.tar.gz chmod 644 awf-$engine.spec fi # create package (rpm sign https://access.redhat.com/articles/3359321) printf "\n############################################################################# awf-$engine\n" rpmbuild --quiet -ba awf-$engine.spec echo "=================================== rpm-sign ==" rpm --addsign ~/rpmbuild/RPMS/*/awf-$engine*.rpm rpm --addsign ~/rpmbuild/SRPMS/awf-$engine*.rpm mv ~/rpmbuild/RPMS/*/awf-$engine*.rpm builder/ mv ~/rpmbuild/SRPMS/awf-$engine*.rpm builder/ rpm --checksig builder/awf-$engine*.rpm echo "=================================== rpm-lint ==" rpmlint awf-$engine.spec builder/awf-$engine*.rpm | grep awf echo "===============================================" rm builder/*debug*rpm ls -dlth "$PWD"/builder/*.rpm # cleanup rm -rf builder/*/awf-extended-4.1.0/scripts/mageia/rpm-gtk4.sh000066400000000000000000000033571517644610000210160ustar00rootroot00000000000000#!/bin/bash # Mageia: sudo urpmi --no-recommends rpmdevtools rpm-sign autoconf automake libnotify-devel gtk4-devel desktop-file-utils aspell-fr enchant2-aspell cd "$(dirname "$0")" version="4.1.0" engine="gtk4" mkdir -p builder ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS} find builder/* ! -name "*$version*.rpm" ! -name "*$version*.gz" -exec rm -rf {} + 2>/dev/null rm -f ~/rpmbuild/SOURCES/awf-$engine-$version.tar.gz # copy to a tmp directory if [ true ]; then rm awf-$engine.spec wget https://raw.githubusercontent.com/luigifab/awf-extended/refs/tags/v$version/scripts/mageia/awf-$engine.spec chmod 644 awf-$engine.spec spectool -g -R awf-$engine.spec else temp=awf-extended-$version mkdir /tmp/$temp cp -r ../../* /tmp/$temp/ rm -rf /tmp/$temp/scripts/*/builder/ mv /tmp/$temp builder/ cp /usr/share/common-licenses/GPL*3 builder/$temp/LICENSE cd builder/ tar czf $temp.tar.gz $temp cd .. cp builder/$temp.tar.gz ~/rpmbuild/SOURCES/awf-$engine-$version.tar.gz chmod 644 awf-$engine.spec fi # create package (rpm sign https://access.redhat.com/articles/3359321) printf "\n############################################################################# awf-$engine\n" rpmbuild --quiet -ba awf-$engine.spec echo "=================================== rpm-sign ==" rpm --addsign ~/rpmbuild/RPMS/*/awf-$engine*.rpm rpm --addsign ~/rpmbuild/SRPMS/awf-$engine*.rpm mv ~/rpmbuild/RPMS/*/awf-$engine*.rpm builder/ mv ~/rpmbuild/SRPMS/awf-$engine*.rpm builder/ rpm --checksig builder/awf-$engine*.rpm echo "=================================== rpm-lint ==" rpmlint awf-$engine.spec builder/awf-$engine*.rpm | grep awf echo "===============================================" rm builder/*debug*rpm ls -dlth "$PWD"/builder/*.rpm # cleanup rm -rf builder/*/awf-extended-4.1.0/scripts/mageia/rpm-gtk5.sh000066400000000000000000000033571517644610000210170ustar00rootroot00000000000000#!/bin/bash # Mageia: sudo urpmi --no-recommends rpmdevtools rpm-sign autoconf automake libnotify-devel gtk5-devel desktop-file-utils aspell-fr enchant2-aspell cd "$(dirname "$0")" version="4.1.0" engine="gtk5" mkdir -p builder ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS} find builder/* ! -name "*$version*.rpm" ! -name "*$version*.gz" -exec rm -rf {} + 2>/dev/null rm -f ~/rpmbuild/SOURCES/awf-$engine-$version.tar.gz # copy to a tmp directory if [ true ]; then rm awf-$engine.spec wget https://raw.githubusercontent.com/luigifab/awf-extended/refs/tags/v$version/scripts/mageia/awf-$engine.spec chmod 644 awf-$engine.spec spectool -g -R awf-$engine.spec else temp=awf-extended-$version mkdir /tmp/$temp cp -r ../../* /tmp/$temp/ rm -rf /tmp/$temp/scripts/*/builder/ mv /tmp/$temp builder/ cp /usr/share/common-licenses/GPL*3 builder/$temp/LICENSE cd builder/ tar czf $temp.tar.gz $temp cd .. cp builder/$temp.tar.gz ~/rpmbuild/SOURCES/awf-$engine-$version.tar.gz chmod 644 awf-$engine.spec fi # create package (rpm sign https://access.redhat.com/articles/3359321) printf "\n############################################################################# awf-$engine\n" rpmbuild --quiet -ba awf-$engine.spec echo "=================================== rpm-sign ==" rpm --addsign ~/rpmbuild/RPMS/*/awf-$engine*.rpm rpm --addsign ~/rpmbuild/SRPMS/awf-$engine*.rpm mv ~/rpmbuild/RPMS/*/awf-$engine*.rpm builder/ mv ~/rpmbuild/SRPMS/awf-$engine*.rpm builder/ rpm --checksig builder/awf-$engine*.rpm echo "=================================== rpm-lint ==" rpmlint awf-$engine.spec builder/awf-$engine*.rpm | grep awf echo "===============================================" rm builder/*debug*rpm ls -dlth "$PWD"/builder/*.rpm # cleanup rm -rf builder/*/awf-extended-4.1.0/scripts/mageia/rpm-qt5.sh000066400000000000000000000033361517644610000206530ustar00rootroot00000000000000#!/bin/bash # Mageia: sudo urpmi --no-recommends rpmdevtools rpm-sign autoconf automake qt5-devel desktop-file-utils aspell-fr enchant2-aspell cd "$(dirname "$0")" version="4.1.0" engine="qt5" mkdir -p builder ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS} find builder/* ! -name "*$version*.rpm" ! -name "*$version*.gz" -exec rm -rf {} + 2>/dev/null rm -f ~/rpmbuild/SOURCES/awf-$engine-$version.tar.gz # copy to a tmp directory if [ true ]; then rm awf-$engine.spec wget https://raw.githubusercontent.com/luigifab/awf-extended/refs/tags/v$version/scripts/mageia/awf-$engine.spec chmod 644 awf-$engine.spec spectool -g -R awf-$engine.spec else temp=awf-extended-$version mkdir /tmp/$temp cp -r ../../* /tmp/$temp/ rm -rf /tmp/$temp/scripts/*/builder/ mv /tmp/$temp builder/ cp /usr/share/common-licenses/GPL*3 builder/$temp/LICENSE cd builder/ tar czf $temp.tar.gz $temp cd .. cp builder/$temp.tar.gz ~/rpmbuild/SOURCES/awf-$engine-$version.tar.gz chmod 644 awf-$engine.spec fi # create package (rpm sign https://access.redhat.com/articles/3359321) printf "\n############################################################################## awf-$engine\n" rpmbuild --quiet -ba awf-$engine.spec echo "=================================== rpm-sign ==" rpm --addsign ~/rpmbuild/RPMS/*/awf-$engine*.rpm rpm --addsign ~/rpmbuild/SRPMS/awf-$engine*.rpm mv ~/rpmbuild/RPMS/*/awf-$engine*.rpm builder/ mv ~/rpmbuild/SRPMS/awf-$engine*.rpm builder/ rpm --checksig builder/awf-$engine*.rpm echo "=================================== rpm-lint ==" rpmlint awf-$engine.spec builder/awf-$engine*.rpm | grep awf echo "===============================================" rm builder/*debug*rpm ls -dlth "$PWD"/builder/*.rpm # cleanup rm -rf builder/*/awf-extended-4.1.0/scripts/mageia/rpm-qt6.sh000066400000000000000000000033361517644610000206540ustar00rootroot00000000000000#!/bin/bash # Mageia: sudo urpmi --no-recommends rpmdevtools rpm-sign autoconf automake qt6-devel desktop-file-utils aspell-fr enchant2-aspell cd "$(dirname "$0")" version="4.1.0" engine="qt6" mkdir -p builder ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS} find builder/* ! -name "*$version*.rpm" ! -name "*$version*.gz" -exec rm -rf {} + 2>/dev/null rm -f ~/rpmbuild/SOURCES/awf-$engine-$version.tar.gz # copy to a tmp directory if [ true ]; then rm awf-$engine.spec wget https://raw.githubusercontent.com/luigifab/awf-extended/refs/tags/v$version/scripts/mageia/awf-$engine.spec chmod 644 awf-$engine.spec spectool -g -R awf-$engine.spec else temp=awf-extended-$version mkdir /tmp/$temp cp -r ../../* /tmp/$temp/ rm -rf /tmp/$temp/scripts/*/builder/ mv /tmp/$temp builder/ cp /usr/share/common-licenses/GPL*3 builder/$temp/LICENSE cd builder/ tar czf $temp.tar.gz $temp cd .. cp builder/$temp.tar.gz ~/rpmbuild/SOURCES/awf-$engine-$version.tar.gz chmod 644 awf-$engine.spec fi # create package (rpm sign https://access.redhat.com/articles/3359321) printf "\n############################################################################## awf-$engine\n" rpmbuild --quiet -ba awf-$engine.spec echo "=================================== rpm-sign ==" rpm --addsign ~/rpmbuild/RPMS/*/awf-$engine*.rpm rpm --addsign ~/rpmbuild/SRPMS/awf-$engine*.rpm mv ~/rpmbuild/RPMS/*/awf-$engine*.rpm builder/ mv ~/rpmbuild/SRPMS/awf-$engine*.rpm builder/ rpm --checksig builder/awf-$engine*.rpm echo "=================================== rpm-lint ==" rpmlint awf-$engine.spec builder/awf-$engine*.rpm | grep awf echo "===============================================" rm builder/*debug*rpm ls -dlth "$PWD"/builder/*.rpm # cleanup rm -rf builder/*/awf-extended-4.1.0/scripts/mageia/rpm-qt7.sh000066400000000000000000000033361517644610000206550ustar00rootroot00000000000000#!/bin/bash # Mageia: sudo urpmi --no-recommends rpmdevtools rpm-sign autoconf automake qt7-devel desktop-file-utils aspell-fr enchant2-aspell cd "$(dirname "$0")" version="4.1.0" engine="qt7" mkdir -p builder ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS} find builder/* ! -name "*$version*.rpm" ! -name "*$version*.gz" -exec rm -rf {} + 2>/dev/null rm -f ~/rpmbuild/SOURCES/awf-$engine-$version.tar.gz # copy to a tmp directory if [ true ]; then rm awf-$engine.spec wget https://raw.githubusercontent.com/luigifab/awf-extended/refs/tags/v$version/scripts/mageia/awf-$engine.spec chmod 644 awf-$engine.spec spectool -g -R awf-$engine.spec else temp=awf-extended-$version mkdir /tmp/$temp cp -r ../../* /tmp/$temp/ rm -rf /tmp/$temp/scripts/*/builder/ mv /tmp/$temp builder/ cp /usr/share/common-licenses/GPL*3 builder/$temp/LICENSE cd builder/ tar czf $temp.tar.gz $temp cd .. cp builder/$temp.tar.gz ~/rpmbuild/SOURCES/awf-$engine-$version.tar.gz chmod 644 awf-$engine.spec fi # create package (rpm sign https://access.redhat.com/articles/3359321) printf "\n############################################################################## awf-$engine\n" rpmbuild --quiet -ba awf-$engine.spec echo "=================================== rpm-sign ==" rpm --addsign ~/rpmbuild/RPMS/*/awf-$engine*.rpm rpm --addsign ~/rpmbuild/SRPMS/awf-$engine*.rpm mv ~/rpmbuild/RPMS/*/awf-$engine*.rpm builder/ mv ~/rpmbuild/SRPMS/awf-$engine*.rpm builder/ rpm --checksig builder/awf-$engine*.rpm echo "=================================== rpm-lint ==" rpmlint awf-$engine.spec builder/awf-$engine*.rpm | grep awf echo "===============================================" rm builder/*debug*rpm ls -dlth "$PWD"/builder/*.rpm # cleanup rm -rf builder/*/awf-extended-4.1.0/scripts/opensuse/000077500000000000000000000000001517644610000174235ustar00rootroot00000000000000awf-extended-4.1.0/scripts/opensuse/awf-gtk2.spec000066400000000000000000000074431517644610000217310ustar00rootroot00000000000000Name: awf-gtk2 Version: 4.1.0 Release: 0 Summary: Theme preview application for GTK 2 Summary(fr): Application d'aperçu de thème pour GTK 2 License: GPL-3.0-or-later URL: https://github.com/luigifab/awf-extended Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz BuildRequires: aspell-fr BuildRequires: autoconf BuildRequires: automake BuildRequires: desktop-file-utils BuildRequires: libnotify-devel >= 0.7.0 BuildRequires: gcc BuildRequires: gettext BuildRequires: gtk2-devel >= 2.24.0 Requires: gtk2 >= 2.24.0 Requires: hicolor-icon-theme Requires: libnotify >= 0.7.0 %description %{expand: A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme. This package provides the program for GTK 2.} %description -l fr %{expand: La fabrique à widgets est une application d'aperçu de thème pour GTK et Qt. Elle affiche les différents types de widgets dans une seule fenêtre permettant de voir l'effet visuel du thème appliqué. Ce paquet fournit le programme pour GTK 2.} %prep %setup -q -n awf-extended-%{version} %build autoreconf -fi %configure --enable-only-gtk2 %make_build %install %make_install install -dm 755 %{buildroot}%{_datadir}/applications/ desktop-file-install --dir=%{buildroot}%{_datadir}/applications/ data/%{name}.desktop install -dm 755 %{buildroot}%{_datadir}/icons/hicolor/ for file in data/icons/*/*/awf.png; do mv $file ${file/\/awf.png/\/%{name}.png}; done for file in data/icons/*/*/awf.svg; do mv $file ${file/\/awf.svg/\/%{name}.svg}; done cp -a data/icons/* %{buildroot}%{_datadir}/icons/hicolor/ install -Dpm 644 data/%{name}.bash %{buildroot}%{_datadir}/bash-completion/completions/%{name} install -Dpm 644 data/%{name}.1 %{buildroot}%{_mandir}/man1/%{name}.1 install -Dpm 644 data/%{name}.fr.1 %{buildroot}%{_mandir}/fr/man1/%{name}.1 for file in src/po/*.po; do code=$(basename "$file" .po) install -dm 755 %{buildroot}%{_datadir}/locale/$code/LC_MESSAGES/ msgfmt src/po/$code.po -o %{buildroot}%{_datadir}/locale/$code/LC_MESSAGES/%{name}.mo done %find_lang %{name} --with-man %files -f %{name}.lang %license LICENSE %doc README.md %{_bindir}/%{name} %{_datadir}/applications/%{name}.desktop %{_datadir}/icons/hicolor/*/apps/%{name}.png %{_datadir}/icons/hicolor/scalable/apps/%{name}.svg %{_datadir}/bash-completion/completions/%{name} %{_mandir}/man1/%{name}.1* %changelog * Tue May 05 2026 Fabrice Creuzot - 4.1.0-1 - New upstream release * Tue Mar 03 2026 Fabrice Creuzot - 4.0.0-1 - New upstream release * Fri Oct 10 2025 Fabrice Creuzot - 3.2.0-1 - New upstream release * Fri Aug 08 2025 Fabrice Creuzot - 3.1.0-1 - New upstream release - Add support for CSD dialog * Mon May 05 2025 Fabrice Creuzot - 3.0.0-1 - New upstream release - Add support for CSD window - Add --enable-only-gtkx and --disable-gtkx options * Fri Apr 04 2025 Fabrice Creuzot - 2.9.0-1 - New upstream release * Mon Mar 03 2025 Fabrice Creuzot - 2.8.1-1 - New upstream release * Fri Feb 02 2024 Fabrice Creuzot - 2.8.0-1 - New upstream release * Fri Jun 16 2023 Fabrice Creuzot - 2.7.0-2 - Package spec update * Tue Jun 06 2023 Fabrice Creuzot - 2.7.0-1 - New upstream release * Thu Sep 09 2021 Fabrice Creuzot - 2.6.0-1 - New upstream release * Wed Jul 07 2021 Fabrice Creuzot - 2.5.0-1 - New upstream release * Wed May 05 2021 Fabrice Creuzot - 2.4.0-1 - New upstream release * Sun Apr 04 2021 Fabrice Creuzot - 2.3.0-1 - Initial openSUSE package release awf-extended-4.1.0/scripts/opensuse/awf-gtk3.spec000066400000000000000000000074171517644610000217330ustar00rootroot00000000000000Name: awf-gtk3 Version: 4.1.0 Release: 0 Summary: Theme preview application for GTK 3 Summary(fr): Application d'aperçu de thème pour GTK 3 License: GPL-3.0-or-later URL: https://github.com/luigifab/awf-extended Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz BuildRequires: aspell-fr BuildRequires: autoconf BuildRequires: automake BuildRequires: desktop-file-utils BuildRequires: libnotify-devel >= 0.7.0 BuildRequires: gcc BuildRequires: gettext BuildRequires: gtk3-devel Requires: gtk3 Requires: hicolor-icon-theme Requires: libnotify >= 0.7.0 %description %{expand: A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme. This package provides the program for GTK 3.} %description -l fr %{expand: La fabrique à widgets est une application d'aperçu de thème pour GTK et Qt. Elle affiche les différents types de widgets dans une seule fenêtre permettant de voir l'effet visuel du thème appliqué. Ce paquet fournit le programme pour GTK 3.} %prep %setup -q -n awf-extended-%{version} %build autoreconf -fi %configure --enable-only-gtk3 %make_build %install %make_install install -dm 755 %{buildroot}%{_datadir}/applications/ desktop-file-install --dir=%{buildroot}%{_datadir}/applications/ data/%{name}.desktop install -dm 755 %{buildroot}%{_datadir}/icons/hicolor/ for file in data/icons/*/*/awf.png; do mv $file ${file/\/awf.png/\/%{name}.png}; done for file in data/icons/*/*/awf.svg; do mv $file ${file/\/awf.svg/\/%{name}.svg}; done cp -a data/icons/* %{buildroot}%{_datadir}/icons/hicolor/ install -Dpm 644 data/%{name}.bash %{buildroot}%{_datadir}/bash-completion/completions/%{name} install -Dpm 644 data/%{name}.1 %{buildroot}%{_mandir}/man1/%{name}.1 install -Dpm 644 data/%{name}.fr.1 %{buildroot}%{_mandir}/fr/man1/%{name}.1 for file in src/po/*.po; do code=$(basename "$file" .po) install -dm 755 %{buildroot}%{_datadir}/locale/$code/LC_MESSAGES/ msgfmt src/po/$code.po -o %{buildroot}%{_datadir}/locale/$code/LC_MESSAGES/%{name}.mo done %find_lang %{name} --with-man %files -f %{name}.lang %license LICENSE %doc README.md %{_bindir}/%{name} %{_datadir}/applications/%{name}.desktop %{_datadir}/icons/hicolor/*/apps/%{name}.png %{_datadir}/icons/hicolor/scalable/apps/%{name}.svg %{_datadir}/bash-completion/completions/%{name} %{_mandir}/man1/%{name}.1* %changelog * Tue May 05 2026 Fabrice Creuzot - 4.1.0-1 - New upstream release * Tue Mar 03 2026 Fabrice Creuzot - 4.0.0-1 - New upstream release * Fri Oct 10 2025 Fabrice Creuzot - 3.2.0-1 - New upstream release * Fri Aug 08 2025 Fabrice Creuzot - 3.1.0-1 - New upstream release - Add support for CSD dialog * Mon May 05 2025 Fabrice Creuzot - 3.0.0-1 - New upstream release - Add support for CSD window - Add --enable-only-gtkx and --disable-gtkx options * Fri Apr 04 2025 Fabrice Creuzot - 2.9.0-1 - New upstream release * Mon Mar 03 2025 Fabrice Creuzot - 2.8.1-1 - New upstream release * Fri Feb 02 2024 Fabrice Creuzot - 2.8.0-1 - New upstream release * Fri Jun 16 2023 Fabrice Creuzot - 2.7.0-2 - Package spec update * Tue Jun 06 2023 Fabrice Creuzot - 2.7.0-1 - New upstream release * Thu Sep 09 2021 Fabrice Creuzot - 2.6.0-1 - New upstream release * Wed Jul 07 2021 Fabrice Creuzot - 2.5.0-1 - New upstream release * Wed May 05 2021 Fabrice Creuzot - 2.4.0-1 - New upstream release * Sun Apr 04 2021 Fabrice Creuzot - 2.3.0-1 - Initial openSUSE package release awf-extended-4.1.0/scripts/opensuse/awf-gtk4.spec000066400000000000000000000074171517644610000217340ustar00rootroot00000000000000Name: awf-gtk4 Version: 4.1.0 Release: 0 Summary: Theme preview application for GTK 4 Summary(fr): Application d'aperçu de thème pour GTK 4 License: GPL-3.0-or-later URL: https://github.com/luigifab/awf-extended Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz BuildRequires: aspell-fr BuildRequires: autoconf BuildRequires: automake BuildRequires: desktop-file-utils BuildRequires: libnotify-devel >= 0.7.0 BuildRequires: gcc BuildRequires: gettext BuildRequires: gtk4-devel Requires: gtk4 Requires: hicolor-icon-theme Requires: libnotify >= 0.7.0 %description %{expand: A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme. This package provides the program for GTK 4.} %description -l fr %{expand: La fabrique à widgets est une application d'aperçu de thème pour GTK et Qt. Elle affiche les différents types de widgets dans une seule fenêtre permettant de voir l'effet visuel du thème appliqué. Ce paquet fournit le programme pour GTK 4.} %prep %setup -q -n awf-extended-%{version} %build autoreconf -fi %configure --enable-only-gtk4 %make_build %install %make_install install -dm 755 %{buildroot}%{_datadir}/applications/ desktop-file-install --dir=%{buildroot}%{_datadir}/applications/ data/%{name}.desktop install -dm 755 %{buildroot}%{_datadir}/icons/hicolor/ for file in data/icons/*/*/awf.png; do mv $file ${file/\/awf.png/\/%{name}.png}; done for file in data/icons/*/*/awf.svg; do mv $file ${file/\/awf.svg/\/%{name}.svg}; done cp -a data/icons/* %{buildroot}%{_datadir}/icons/hicolor/ install -Dpm 644 data/%{name}.bash %{buildroot}%{_datadir}/bash-completion/completions/%{name} install -Dpm 644 data/%{name}.1 %{buildroot}%{_mandir}/man1/%{name}.1 install -Dpm 644 data/%{name}.fr.1 %{buildroot}%{_mandir}/fr/man1/%{name}.1 for file in src/po/*.po; do code=$(basename "$file" .po) install -dm 755 %{buildroot}%{_datadir}/locale/$code/LC_MESSAGES/ msgfmt src/po/$code.po -o %{buildroot}%{_datadir}/locale/$code/LC_MESSAGES/%{name}.mo done %find_lang %{name} --with-man %files -f %{name}.lang %license LICENSE %doc README.md %{_bindir}/%{name} %{_datadir}/applications/%{name}.desktop %{_datadir}/icons/hicolor/*/apps/%{name}.png %{_datadir}/icons/hicolor/scalable/apps/%{name}.svg %{_datadir}/bash-completion/completions/%{name} %{_mandir}/man1/%{name}.1* %changelog * Tue May 05 2026 Fabrice Creuzot - 4.1.0-1 - New upstream release * Tue Mar 03 2026 Fabrice Creuzot - 4.0.0-1 - New upstream release * Fri Oct 10 2025 Fabrice Creuzot - 3.2.0-1 - New upstream release * Fri Aug 08 2025 Fabrice Creuzot - 3.1.0-1 - New upstream release - Add support for CSD dialog * Mon May 05 2025 Fabrice Creuzot - 3.0.0-1 - New upstream release - Add support for CSD window - Add --enable-only-gtkx and --disable-gtkx options * Fri Apr 04 2025 Fabrice Creuzot - 2.9.0-1 - New upstream release * Mon Mar 03 2025 Fabrice Creuzot - 2.8.1-1 - New upstream release * Fri Feb 02 2024 Fabrice Creuzot - 2.8.0-1 - New upstream release * Fri Jun 16 2023 Fabrice Creuzot - 2.7.0-2 - Package spec update * Tue Jun 06 2023 Fabrice Creuzot - 2.7.0-1 - New upstream release * Thu Sep 09 2021 Fabrice Creuzot - 2.6.0-1 - New upstream release * Wed Jul 07 2021 Fabrice Creuzot - 2.5.0-1 - New upstream release * Wed May 05 2021 Fabrice Creuzot - 2.4.0-1 - New upstream release * Sun Apr 04 2021 Fabrice Creuzot - 2.3.0-1 - Initial openSUSE package release awf-extended-4.1.0/scripts/opensuse/awf-gtk5.spec000066400000000000000000000051411517644610000217250ustar00rootroot00000000000000Name: awf-gtk5 Version: 4.1.0 Release: 0 Summary: Theme preview application for GTK 5 Summary(fr): Application d'aperçu de thème pour GTK 5 License: GPL-3.0-or-later URL: https://github.com/luigifab/awf-extended Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz BuildRequires: aspell-fr BuildRequires: autoconf BuildRequires: automake BuildRequires: desktop-file-utils BuildRequires: libnotify-devel >= 0.7.0 BuildRequires: gcc BuildRequires: gettext BuildRequires: gtk5-devel Requires: gtk5 Requires: hicolor-icon-theme Requires: libnotify >= 0.7.0 %description %{expand: A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme. This package provides the program for GTK 5.} %description -l fr %{expand: La fabrique à widgets est une application d'aperçu de thème pour GTK et Qt. Elle affiche les différents types de widgets dans une seule fenêtre permettant de voir l'effet visuel du thème appliqué. Ce paquet fournit le programme pour GTK 5.} %prep %setup -q -n awf-extended-%{version} %build autoreconf -fi %configure --enable-only-gtk5 %make_build %install %make_install install -dm 755 %{buildroot}%{_datadir}/applications/ desktop-file-install --dir=%{buildroot}%{_datadir}/applications/ data/%{name}.desktop install -dm 755 %{buildroot}%{_datadir}/icons/hicolor/ for file in data/icons/*/*/awf.png; do mv $file ${file/\/awf.png/\/%{name}.png}; done for file in data/icons/*/*/awf.svg; do mv $file ${file/\/awf.svg/\/%{name}.svg}; done cp -a data/icons/* %{buildroot}%{_datadir}/icons/hicolor/ install -Dpm 644 data/%{name}.bash %{buildroot}%{_datadir}/bash-completion/completions/%{name} install -Dpm 644 data/%{name}.1 %{buildroot}%{_mandir}/man1/%{name}.1 install -Dpm 644 data/%{name}.fr.1 %{buildroot}%{_mandir}/fr/man1/%{name}.1 for file in src/po/*.po; do code=$(basename "$file" .po) install -dm 755 %{buildroot}%{_datadir}/locale/$code/LC_MESSAGES/ msgfmt src/po/$code.po -o %{buildroot}%{_datadir}/locale/$code/LC_MESSAGES/%{name}.mo done %find_lang %{name} --with-man %files -f %{name}.lang %license LICENSE %doc README.md %{_bindir}/%{name} %{_datadir}/applications/%{name}.desktop %{_datadir}/icons/hicolor/*/apps/%{name}.png %{_datadir}/icons/hicolor/scalable/apps/%{name}.svg %{_datadir}/bash-completion/completions/%{name} %{_mandir}/man1/%{name}.1* %changelog * Tue May 05 2026 Fabrice Creuzot - 4.1.0-1 - Initial openSUSE package release awf-extended-4.1.0/scripts/opensuse/awf-qt5.spec000066400000000000000000000054451517644610000215730ustar00rootroot00000000000000Name: awf-qt5 Version: 4.1.0 Release: 0 Summary: Theme preview application for Qt 5 Summary(fr): Application d'aperçu de thème pour Qt 5 License: GPL-3.0-or-later URL: https://github.com/luigifab/awf-extended Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz BuildRequires: aspell-fr BuildRequires: autoconf BuildRequires: automake BuildRequires: desktop-file-utils BuildRequires: gcc-c++ BuildRequires: gettext BuildRequires: hicolor-icon-theme BuildRequires: libqt5-qtbase-devel Requires: libqt5-qtbase Requires: hicolor-icon-theme Recommends: libqt5-qtbase-platformtheme-gtk3 Recommends: libqt5-qtsvg Recommends: qt5-globalqss Suggests: libnotify >= 0.7.0 %description %{expand: A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme. This package provides the program for Qt 5.} %description -l fr %{expand: La fabrique à widgets est une application d'aperçu de thème pour GTK et Qt. Elle affiche les différents types de widgets dans une seule fenêtre permettant de voir l'effet visuel du thème appliqué. Ce paquet fournit le programme pour Qt 5.} %prep %setup -q -n awf-extended-%{version} %build autoreconf -fi %configure --enable-only-qt5 %make_build %install %make_install install -dm 755 %{buildroot}%{_datadir}/applications/ desktop-file-install --dir=%{buildroot}%{_datadir}/applications/ data/%{name}.desktop install -dm 755 %{buildroot}%{_datadir}/icons/hicolor/ for file in data/icons/*/*/awf.png; do mv $file ${file/\/awf.png/\/%{name}.png}; done for file in data/icons/*/*/awf.svg; do mv $file ${file/\/awf.svg/\/%{name}.svg}; done cp -a data/icons/* %{buildroot}%{_datadir}/icons/hicolor/ install -Dpm 644 data/%{name}.bash %{buildroot}%{_datadir}/bash-completion/completions/%{name} install -Dpm 644 data/%{name}.1 %{buildroot}%{_mandir}/man1/%{name}.1 install -Dpm 644 data/%{name}.fr.1 %{buildroot}%{_mandir}/fr/man1/%{name}.1 for file in src/po/*.po; do code=$(basename "$file" .po) install -dm 755 %{buildroot}%{_datadir}/locale/$code/LC_MESSAGES/ msgfmt src/po/$code.po -o %{buildroot}%{_datadir}/locale/$code/LC_MESSAGES/%{name}.mo done %find_lang %{name} --with-man %files -f %{name}.lang %license LICENSE %doc README.md %{_bindir}/%{name} %{_datadir}/applications/%{name}.desktop %{_datadir}/icons/hicolor/*/apps/%{name}.png %{_datadir}/icons/hicolor/scalable/apps/%{name}.svg %{_datadir}/bash-completion/completions/%{name} %{_mandir}/man1/%{name}.1* %changelog * Tue May 05 2026 Fabrice Creuzot - 4.1.0-1 - New upstream release * Tue Mar 03 2026 Fabrice Creuzot - 4.0.0-1 - Initial openSUSE package release awf-extended-4.1.0/scripts/opensuse/awf-qt6.spec000066400000000000000000000054141517644610000215700ustar00rootroot00000000000000Name: awf-qt6 Version: 4.1.0 Release: 0 Summary: Theme preview application for Qt 6 Summary(fr): Application d'aperçu de thème pour Qt 6 License: GPL-3.0-or-later URL: https://github.com/luigifab/awf-extended Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz BuildRequires: aspell-fr BuildRequires: autoconf BuildRequires: automake BuildRequires: desktop-file-utils BuildRequires: gcc-c++ BuildRequires: gettext BuildRequires: hicolor-icon-theme BuildRequires: qt6-base-devel Requires: qt6-base Requires: hicolor-icon-theme Recommends: qt6-platformtheme-gtk3 Recommends: qt6-globalqss Recommends: qt6-svg Suggests: libnotify >= 0.7.0 %description %{expand: A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme. This package provides the program for Qt 6.} %description -l fr %{expand: La fabrique à widgets est une application d'aperçu de thème pour GTK et Qt. Elle affiche les différents types de widgets dans une seule fenêtre permettant de voir l'effet visuel du thème appliqué. Ce paquet fournit le programme pour Qt 6.} %prep %setup -q -n awf-extended-%{version} %build autoreconf -fi %configure --enable-only-qt6 %make_build %install %make_install install -dm 755 %{buildroot}%{_datadir}/applications/ desktop-file-install --dir=%{buildroot}%{_datadir}/applications/ data/%{name}.desktop install -dm 755 %{buildroot}%{_datadir}/icons/hicolor/ for file in data/icons/*/*/awf.png; do mv $file ${file/\/awf.png/\/%{name}.png}; done for file in data/icons/*/*/awf.svg; do mv $file ${file/\/awf.svg/\/%{name}.svg}; done cp -a data/icons/* %{buildroot}%{_datadir}/icons/hicolor/ install -Dpm 644 data/%{name}.bash %{buildroot}%{_datadir}/bash-completion/completions/%{name} install -Dpm 644 data/%{name}.1 %{buildroot}%{_mandir}/man1/%{name}.1 install -Dpm 644 data/%{name}.fr.1 %{buildroot}%{_mandir}/fr/man1/%{name}.1 for file in src/po/*.po; do code=$(basename "$file" .po) install -dm 755 %{buildroot}%{_datadir}/locale/$code/LC_MESSAGES/ msgfmt src/po/$code.po -o %{buildroot}%{_datadir}/locale/$code/LC_MESSAGES/%{name}.mo done %find_lang %{name} --with-man %files -f %{name}.lang %license LICENSE %doc README.md %{_bindir}/%{name} %{_datadir}/applications/%{name}.desktop %{_datadir}/icons/hicolor/*/apps/%{name}.png %{_datadir}/icons/hicolor/scalable/apps/%{name}.svg %{_datadir}/bash-completion/completions/%{name} %{_mandir}/man1/%{name}.1* %changelog * Tue May 05 2026 Fabrice Creuzot - 4.1.0-1 - New upstream release * Tue Mar 03 2026 Fabrice Creuzot - 4.0.0-1 - Initial openSUSE package release awf-extended-4.1.0/scripts/opensuse/awf-qt7.spec000066400000000000000000000052701517644610000215710ustar00rootroot00000000000000Name: awf-qt7 Version: 4.1.0 Release: 0 Summary: Theme preview application for Qt 7 Summary(fr): Application d'aperçu de thème pour Qt 7 License: GPL-3.0-or-later URL: https://github.com/luigifab/awf-extended Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz BuildRequires: aspell-fr BuildRequires: autoconf BuildRequires: automake BuildRequires: desktop-file-utils BuildRequires: gcc-c++ BuildRequires: gettext BuildRequires: hicolor-icon-theme BuildRequires: qt7-base-devel Requires: qt7-base Requires: hicolor-icon-theme Recommends: qt7-platformtheme-gtk3 Recommends: qt7-globalqss Recommends: qt7-svg Suggests: libnotify >= 0.7.0 %description %{expand: A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme. This package provides the program for Qt 7.} %description -l fr %{expand: La fabrique à widgets est une application d'aperçu de thème pour GTK et Qt. Elle affiche les différents types de widgets dans une seule fenêtre permettant de voir l'effet visuel du thème appliqué. Ce paquet fournit le programme pour Qt 7.} %prep %setup -q -n awf-extended-%{version} %build autoreconf -fi %configure --enable-only-qt7 %make_build %install %make_install install -dm 755 %{buildroot}%{_datadir}/applications/ desktop-file-install --dir=%{buildroot}%{_datadir}/applications/ data/%{name}.desktop install -dm 755 %{buildroot}%{_datadir}/icons/hicolor/ for file in data/icons/*/*/awf.png; do mv $file ${file/\/awf.png/\/%{name}.png}; done for file in data/icons/*/*/awf.svg; do mv $file ${file/\/awf.svg/\/%{name}.svg}; done cp -a data/icons/* %{buildroot}%{_datadir}/icons/hicolor/ install -Dpm 644 data/%{name}.bash %{buildroot}%{_datadir}/bash-completion/completions/%{name} install -Dpm 644 data/%{name}.1 %{buildroot}%{_mandir}/man1/%{name}.1 install -Dpm 644 data/%{name}.fr.1 %{buildroot}%{_mandir}/fr/man1/%{name}.1 for file in src/po/*.po; do code=$(basename "$file" .po) install -dm 755 %{buildroot}%{_datadir}/locale/$code/LC_MESSAGES/ msgfmt src/po/$code.po -o %{buildroot}%{_datadir}/locale/$code/LC_MESSAGES/%{name}.mo done %find_lang %{name} --with-man %files -f %{name}.lang %license LICENSE %doc README.md %{_bindir}/%{name} %{_datadir}/applications/%{name}.desktop %{_datadir}/icons/hicolor/*/apps/%{name}.png %{_datadir}/icons/hicolor/scalable/apps/%{name}.svg %{_datadir}/bash-completion/completions/%{name} %{_mandir}/man1/%{name}.1* %changelog * Tue May 05 2026 Fabrice Creuzot - 4.1.0-1 - Initial openSUSE package release awf-extended-4.1.0/scripts/opensuse/rpm-gtk2.sh000066400000000000000000000033561517644610000214310ustar00rootroot00000000000000#!/bin/bash # openSUSE: sudo zypper install rpmdevtools rpm-build autoconf automake libnotify-devel gtk2-devel desktop-file-utils aspell-fr cd "$(dirname "$0")" version="4.1.0" engine="gtk2" mkdir -p builder ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS} find builder/* ! -name "*$version*.rpm" ! -name "*$version*.gz" -exec rm -rf {} + 2>/dev/null rm -f ~/rpmbuild/SOURCES/awf-$engine-$version.tar.gz # copy to a tmp directory if [ true ]; then rm awf-$engine.spec wget https://raw.githubusercontent.com/luigifab/awf-extended/refs/tags/v$version/scripts/opensuse/awf-$engine.spec chmod 644 awf-$engine.spec spectool -g -R awf-$engine.spec else temp=awf-extended-$version mkdir /tmp/$temp cp -r ../../* /tmp/$temp/ rm -rf /tmp/$temp/scripts/*/builder/ mv /tmp/$temp builder/ cp /usr/share/licenses/*-firmware/GPL-3 builder/$temp/LICENSE # * = kernel cd builder/ tar czf $temp.tar.gz $temp cd .. cp builder/$temp.tar.gz ~/rpmbuild/SOURCES/awf-$engine-$version.tar.gz chmod 644 awf-$engine.spec fi # create package (rpm sign https://access.redhat.com/articles/3359321) printf "\n############################################################################# awf-$engine\n" rpmbuild --quiet -ba awf-$engine.spec echo "=================================== rpm-sign ==" rpm --addsign ~/rpmbuild/RPMS/*/awf-$engine*.rpm rpm --addsign ~/rpmbuild/SRPMS/awf-$engine*.rpm mv ~/rpmbuild/RPMS/*/awf-$engine*.rpm builder/ mv ~/rpmbuild/SRPMS/awf-$engine*.rpm builder/ rpm --checksig builder/awf-$engine*.rpm echo "=================================== rpm-lint ==" rpmlint awf-$engine.spec builder/awf-$engine*.rpm | grep awf echo "===============================================" rm builder/*debug*rpm ls -dlth "$PWD"/builder/*.rpm # cleanup rm -rf builder/*/awf-extended-4.1.0/scripts/opensuse/rpm-gtk3.sh000066400000000000000000000033561517644610000214320ustar00rootroot00000000000000#!/bin/bash # openSUSE: sudo zypper install rpmdevtools rpm-build autoconf automake libnotify-devel gtk3-devel desktop-file-utils aspell-fr cd "$(dirname "$0")" version="4.1.0" engine="gtk3" mkdir -p builder ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS} find builder/* ! -name "*$version*.rpm" ! -name "*$version*.gz" -exec rm -rf {} + 2>/dev/null rm -f ~/rpmbuild/SOURCES/awf-$engine-$version.tar.gz # copy to a tmp directory if [ true ]; then rm awf-$engine.spec wget https://raw.githubusercontent.com/luigifab/awf-extended/refs/tags/v$version/scripts/opensuse/awf-$engine.spec chmod 644 awf-$engine.spec spectool -g -R awf-$engine.spec else temp=awf-extended-$version mkdir /tmp/$temp cp -r ../../* /tmp/$temp/ rm -rf /tmp/$temp/scripts/*/builder/ mv /tmp/$temp builder/ cp /usr/share/licenses/*-firmware/GPL-3 builder/$temp/LICENSE # * = kernel cd builder/ tar czf $temp.tar.gz $temp cd .. cp builder/$temp.tar.gz ~/rpmbuild/SOURCES/awf-$engine-$version.tar.gz chmod 644 awf-$engine.spec fi # create package (rpm sign https://access.redhat.com/articles/3359321) printf "\n############################################################################# awf-$engine\n" rpmbuild --quiet -ba awf-$engine.spec echo "=================================== rpm-sign ==" rpm --addsign ~/rpmbuild/RPMS/*/awf-$engine*.rpm rpm --addsign ~/rpmbuild/SRPMS/awf-$engine*.rpm mv ~/rpmbuild/RPMS/*/awf-$engine*.rpm builder/ mv ~/rpmbuild/SRPMS/awf-$engine*.rpm builder/ rpm --checksig builder/awf-$engine*.rpm echo "=================================== rpm-lint ==" rpmlint awf-$engine.spec builder/awf-$engine*.rpm | grep awf echo "===============================================" rm builder/*debug*rpm ls -dlth "$PWD"/builder/*.rpm # cleanup rm -rf builder/*/awf-extended-4.1.0/scripts/opensuse/rpm-gtk4.sh000066400000000000000000000033561517644610000214330ustar00rootroot00000000000000#!/bin/bash # openSUSE: sudo zypper install rpmdevtools rpm-build autoconf automake libnotify-devel gtk4-devel desktop-file-utils aspell-fr cd "$(dirname "$0")" version="4.1.0" engine="gtk4" mkdir -p builder ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS} find builder/* ! -name "*$version*.rpm" ! -name "*$version*.gz" -exec rm -rf {} + 2>/dev/null rm -f ~/rpmbuild/SOURCES/awf-$engine-$version.tar.gz # copy to a tmp directory if [ true ]; then rm awf-$engine.spec wget https://raw.githubusercontent.com/luigifab/awf-extended/refs/tags/v$version/scripts/opensuse/awf-$engine.spec chmod 644 awf-$engine.spec spectool -g -R awf-$engine.spec else temp=awf-extended-$version mkdir /tmp/$temp cp -r ../../* /tmp/$temp/ rm -rf /tmp/$temp/scripts/*/builder/ mv /tmp/$temp builder/ cp /usr/share/licenses/*-firmware/GPL-3 builder/$temp/LICENSE # * = kernel cd builder/ tar czf $temp.tar.gz $temp cd .. cp builder/$temp.tar.gz ~/rpmbuild/SOURCES/awf-$engine-$version.tar.gz chmod 644 awf-$engine.spec fi # create package (rpm sign https://access.redhat.com/articles/3359321) printf "\n############################################################################# awf-$engine\n" rpmbuild --quiet -ba awf-$engine.spec echo "=================================== rpm-sign ==" rpm --addsign ~/rpmbuild/RPMS/*/awf-$engine*.rpm rpm --addsign ~/rpmbuild/SRPMS/awf-$engine*.rpm mv ~/rpmbuild/RPMS/*/awf-$engine*.rpm builder/ mv ~/rpmbuild/SRPMS/awf-$engine*.rpm builder/ rpm --checksig builder/awf-$engine*.rpm echo "=================================== rpm-lint ==" rpmlint awf-$engine.spec builder/awf-$engine*.rpm | grep awf echo "===============================================" rm builder/*debug*rpm ls -dlth "$PWD"/builder/*.rpm # cleanup rm -rf builder/*/awf-extended-4.1.0/scripts/opensuse/rpm-gtk5.sh000066400000000000000000000033561517644610000214340ustar00rootroot00000000000000#!/bin/bash # openSUSE: sudo zypper install rpmdevtools rpm-build autoconf automake libnotify-devel gtk5-devel desktop-file-utils aspell-fr cd "$(dirname "$0")" version="4.1.0" engine="gtk5" mkdir -p builder ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS} find builder/* ! -name "*$version*.rpm" ! -name "*$version*.gz" -exec rm -rf {} + 2>/dev/null rm -f ~/rpmbuild/SOURCES/awf-$engine-$version.tar.gz # copy to a tmp directory if [ true ]; then rm awf-$engine.spec wget https://raw.githubusercontent.com/luigifab/awf-extended/refs/tags/v$version/scripts/opensuse/awf-$engine.spec chmod 644 awf-$engine.spec spectool -g -R awf-$engine.spec else temp=awf-extended-$version mkdir /tmp/$temp cp -r ../../* /tmp/$temp/ rm -rf /tmp/$temp/scripts/*/builder/ mv /tmp/$temp builder/ cp /usr/share/licenses/*-firmware/GPL-3 builder/$temp/LICENSE # * = kernel cd builder/ tar czf $temp.tar.gz $temp cd .. cp builder/$temp.tar.gz ~/rpmbuild/SOURCES/awf-$engine-$version.tar.gz chmod 644 awf-$engine.spec fi # create package (rpm sign https://access.redhat.com/articles/3359321) printf "\n############################################################################# awf-$engine\n" rpmbuild --quiet -ba awf-$engine.spec echo "=================================== rpm-sign ==" rpm --addsign ~/rpmbuild/RPMS/*/awf-$engine*.rpm rpm --addsign ~/rpmbuild/SRPMS/awf-$engine*.rpm mv ~/rpmbuild/RPMS/*/awf-$engine*.rpm builder/ mv ~/rpmbuild/SRPMS/awf-$engine*.rpm builder/ rpm --checksig builder/awf-$engine*.rpm echo "=================================== rpm-lint ==" rpmlint awf-$engine.spec builder/awf-$engine*.rpm | grep awf echo "===============================================" rm builder/*debug*rpm ls -dlth "$PWD"/builder/*.rpm # cleanup rm -rf builder/*/awf-extended-4.1.0/scripts/opensuse/rpm-qt5.sh000066400000000000000000000033471517644610000212730ustar00rootroot00000000000000#!/bin/bash # openSUSE: sudo zypper install rpmdevtools rpm-build autoconf automake libqt5-qtbase-devel desktop-file-utils aspell-fr cd "$(dirname "$0")" version="4.1.0" engine="qt5" mkdir -p builder ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS} find builder/* ! -name "*$version*.rpm" ! -name "*$version*.gz" -exec rm -rf {} + 2>/dev/null rm -f ~/rpmbuild/SOURCES/awf-$engine-$version.tar.gz # copy to a tmp directory if [ true ]; then rm awf-$engine.spec wget https://raw.githubusercontent.com/luigifab/awf-extended/refs/tags/v$version/scripts/opensuse/awf-$engine.spec chmod 644 awf-$engine.spec spectool -g -R awf-$engine.spec else temp=awf-extended-$version mkdir /tmp/$temp cp -r ../../* /tmp/$temp/ rm -rf /tmp/$temp/scripts/*/builder/ mv /tmp/$temp builder/ cp /usr/share/licenses/*-firmware/GPL-3 builder/$temp/LICENSE # * = kernel cd builder/ tar czf $temp.tar.gz $temp cd .. cp builder/$temp.tar.gz ~/rpmbuild/SOURCES/awf-$engine-$version.tar.gz chmod 644 awf-$engine.spec fi # create package (rpm sign https://access.redhat.com/articles/3359321) printf "\n############################################################################## awf-$engine\n" rpmbuild --quiet -ba awf-$engine.spec echo "=================================== rpm-sign ==" rpm --addsign ~/rpmbuild/RPMS/*/awf-$engine*.rpm rpm --addsign ~/rpmbuild/SRPMS/awf-$engine*.rpm mv ~/rpmbuild/RPMS/*/awf-$engine*.rpm builder/ mv ~/rpmbuild/SRPMS/awf-$engine*.rpm builder/ rpm --checksig builder/awf-$engine*.rpm echo "=================================== rpm-lint ==" rpmlint awf-$engine.spec builder/awf-$engine*.rpm | grep awf echo "===============================================" rm builder/*debug*rpm ls -dlth "$PWD"/builder/*.rpm # cleanup rm -rf builder/*/awf-extended-4.1.0/scripts/opensuse/rpm-qt6.sh000066400000000000000000000033421517644610000212670ustar00rootroot00000000000000#!/bin/bash # openSUSE: sudo zypper install rpmdevtools rpm-build autoconf automake qt6-base-devel desktop-file-utils aspell-fr cd "$(dirname "$0")" version="4.1.0" engine="qt6" mkdir -p builder ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS} find builder/* ! -name "*$version*.rpm" ! -name "*$version*.gz" -exec rm -rf {} + 2>/dev/null rm -f ~/rpmbuild/SOURCES/awf-$engine-$version.tar.gz # copy to a tmp directory if [ true ]; then rm awf-$engine.spec wget https://raw.githubusercontent.com/luigifab/awf-extended/refs/tags/v$version/scripts/opensuse/awf-$engine.spec chmod 644 awf-$engine.spec spectool -g -R awf-$engine.spec else temp=awf-extended-$version mkdir /tmp/$temp cp -r ../../* /tmp/$temp/ rm -rf /tmp/$temp/scripts/*/builder/ mv /tmp/$temp builder/ cp /usr/share/licenses/*-firmware/GPL-3 builder/$temp/LICENSE # * = kernel cd builder/ tar czf $temp.tar.gz $temp cd .. cp builder/$temp.tar.gz ~/rpmbuild/SOURCES/awf-$engine-$version.tar.gz chmod 644 awf-$engine.spec fi # create package (rpm sign https://access.redhat.com/articles/3359321) printf "\n############################################################################## awf-$engine\n" rpmbuild --quiet -ba awf-$engine.spec echo "=================================== rpm-sign ==" rpm --addsign ~/rpmbuild/RPMS/*/awf-$engine*.rpm rpm --addsign ~/rpmbuild/SRPMS/awf-$engine*.rpm mv ~/rpmbuild/RPMS/*/awf-$engine*.rpm builder/ mv ~/rpmbuild/SRPMS/awf-$engine*.rpm builder/ rpm --checksig builder/awf-$engine*.rpm echo "=================================== rpm-lint ==" rpmlint awf-$engine.spec builder/awf-$engine*.rpm | grep awf echo "===============================================" rm builder/*debug*rpm ls -dlth "$PWD"/builder/*.rpm # cleanup rm -rf builder/*/awf-extended-4.1.0/scripts/opensuse/rpm-qt7.sh000066400000000000000000000033421517644610000212700ustar00rootroot00000000000000#!/bin/bash # openSUSE: sudo zypper install rpmdevtools rpm-build autoconf automake qt7-base-devel desktop-file-utils aspell-fr cd "$(dirname "$0")" version="4.1.0" engine="qt7" mkdir -p builder ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS} find builder/* ! -name "*$version*.rpm" ! -name "*$version*.gz" -exec rm -rf {} + 2>/dev/null rm -f ~/rpmbuild/SOURCES/awf-$engine-$version.tar.gz # copy to a tmp directory if [ true ]; then rm awf-$engine.spec wget https://raw.githubusercontent.com/luigifab/awf-extended/refs/tags/v$version/scripts/opensuse/awf-$engine.spec chmod 644 awf-$engine.spec spectool -g -R awf-$engine.spec else temp=awf-extended-$version mkdir /tmp/$temp cp -r ../../* /tmp/$temp/ rm -rf /tmp/$temp/scripts/*/builder/ mv /tmp/$temp builder/ cp /usr/share/licenses/*-firmware/GPL-3 builder/$temp/LICENSE # * = kernel cd builder/ tar czf $temp.tar.gz $temp cd .. cp builder/$temp.tar.gz ~/rpmbuild/SOURCES/awf-$engine-$version.tar.gz chmod 644 awf-$engine.spec fi # create package (rpm sign https://access.redhat.com/articles/3359321) printf "\n############################################################################## awf-$engine\n" rpmbuild --quiet -ba awf-$engine.spec echo "=================================== rpm-sign ==" rpm --addsign ~/rpmbuild/RPMS/*/awf-$engine*.rpm rpm --addsign ~/rpmbuild/SRPMS/awf-$engine*.rpm mv ~/rpmbuild/RPMS/*/awf-$engine*.rpm builder/ mv ~/rpmbuild/SRPMS/awf-$engine*.rpm builder/ rpm --checksig builder/awf-$engine*.rpm echo "=================================== rpm-lint ==" rpmlint awf-$engine.spec builder/awf-$engine*.rpm | grep awf echo "===============================================" rm builder/*debug*rpm ls -dlth "$PWD"/builder/*.rpm # cleanup rm -rf builder/*/awf-extended-4.1.0/scripts/slackware/000077500000000000000000000000001517644610000175365ustar00rootroot00000000000000awf-extended-4.1.0/scripts/slackware/README000066400000000000000000000002571517644610000204220ustar00rootroot00000000000000A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme.awf-extended-4.1.0/scripts/slackware/awf.SlackBuild000066400000000000000000000105731517644610000222600ustar00rootroot00000000000000#!/bin/bash # Slackware build script for awf # Copyright 2026 Fabrice Creuzot, France # All rights reserved. # # Redistribution and use of this script, with or without modification, is # permitted provided that the following conditions are met: # # 1. Redistributions of this script must retain the above copyright # notice, this list of conditions and the following disclaimer. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED # WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO # EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; # OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, # WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. cd $(dirname $0) ; CWD=$(pwd) PRGNAM=awf VERSION=${VERSION:-4.1.0} BUILD=${BUILD:-1} TAG=${TAG:-_SBo} PKGTYPE=${PKGTYPE:-tgz} if [ -z "$ARCH" ]; then case "$( uname -m )" in i?86) ARCH=i586 ;; arm*) ARCH=arm ;; *) ARCH=$( uname -m ) ;; esac fi if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then echo "$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE" exit 0 fi TMP=${TMP:-/tmp/SBo} PKG=$TMP/package-$PRGNAM OUTPUT=${OUTPUT:-/tmp} if [ "$ARCH" = "i586" ]; then SLKCFLAGS="-O2 -march=i586 -mtune=i686" LIBDIRSUFFIX="" elif [ "$ARCH" = "i686" ]; then SLKCFLAGS="-O2 -march=i686 -mtune=i686" LIBDIRSUFFIX="" elif [ "$ARCH" = "x86_64" ]; then SLKCFLAGS="-O2 -fPIC" LIBDIRSUFFIX="64" else SLKCFLAGS="-O2" LIBDIRSUFFIX="" fi set -e rm -rf $PKG mkdir -p $TMP $PKG $OUTPUT cd $TMP rm -rf $PRGNAM-extended-$VERSION tar xvf $CWD/$PRGNAM-extended-$VERSION.tar.gz cd $PRGNAM-extended-$VERSION chown -R root:root . find -L . \ \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ -o -perm 511 \) -exec chmod 755 {} \; -o \ \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \; # action autoreconf -fiv ./configure \ --prefix=/usr \ --libdir=/usr/lib${LIBDIRSUFFIX} \ --sysconfdir=/etc \ --localstatedir=/var \ --mandir=/usr/man \ --docdir=/usr/doc/$PRGNAM-$VERSION \ --build=$ARCH-slackware-linux \ --disable-gtk5 \ --disable-qt7 make make install DESTDIR=$PKG for engine in "gtk2" "gtk3" "gtk4" "qt5" "qt6"; do install -Dpm 644 data/awf-$engine.desktop $PKG/usr/share/applications/awf-$engine.desktop cp -ar data/icons/ icons-$engine/ for file in icons-$engine/*/*/awf.png; do mv $file `dirname $file`/awf-$engine.png; done for file in icons-$engine/*/*/awf.svg; do mv $file `dirname $file`/awf-$engine.svg; done install -dm 755 $PKG/usr/share/icons/hicolor/ cp -a icons-$engine/* $PKG/usr/share/icons/hicolor/ install -Dpm 644 data/awf-$engine.1 $PKG/usr/man/man1/awf-$engine.1 install -Dpm 644 data/awf-$engine.fr.1 $PKG/usr/man/fr/man1/awf-$engine.1 if pkg-config --exists bash-completion ; then install -Dpm 644 data/awf-$engine.bash $PKG/usr/share/bash-completion/completions/awf-$engine fi for file in src/po/*.po; do code=`basename "$file" .po` mkdir -p locale-$engine/$code/LC_MESSAGES/ msgfmt src/po/$code.po -o locale-$engine/$code/LC_MESSAGES/awf-$engine.mo install -Dpm 644 locale-$engine/$code/LC_MESSAGES/awf-$engine.mo $PKG/usr/share/locale/$code/LC_MESSAGES/awf-$engine.mo done done # cleanup rm -rf icons-gtk*/ locale-gtk*/ icons-qt*/ locale-qt*/ rm -f $PKG/{,usr/}lib${LIBDIRSUFFIX}/*.la find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \ | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true find $PKG/usr/man -type f -exec gzip -9 {} \; for i in $( find $PKG/usr/man -type l ) ; do ln -s $( readlink $i ).gz $i.gz ; rm $i ; done mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION cp -a \ README.md LICENSE \ $PKG/usr/doc/$PRGNAM-$VERSION cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild mkdir -p $PKG/install cat $CWD/slack-desc > $PKG/install/slack-desc cat $CWD/doinst.sh > $PKG/install/doinst.sh cd $PKG /sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPEawf-extended-4.1.0/scripts/slackware/awf.info000066400000000000000000000004231517644610000211670ustar00rootroot00000000000000PRGNAM="awf" version="4.1.0" HOMEPAGE="https://github.com/luigifab/awf-extended" DOWNLOAD="https://github.com/luigifab/awf-extended/archive/v4.1.0/awf-extended-4.1.0.tar.gz" MD5SUM="..." DOWNLOAD_x86_64="" MD5SUM_x86_64="" REQUIRES="" MAINTAINER="Fabrice Creuzot" EMAIL="..."awf-extended-4.1.0/scripts/slackware/doinst.sh000066400000000000000000000005021517644610000213670ustar00rootroot00000000000000if [ -x /usr/bin/update-desktop-database ]; then /usr/bin/update-desktop-database -q usr/share/applications >/dev/null 2>&1 fi if [ -e usr/share/icons/hicolor/icon-theme.cache ]; then if [ -x /usr/bin/gtk-update-icon-cache ]; then /usr/bin/gtk-update-icon-cache -f usr/share/icons/hicolor >/dev/null 2>&1 fi fi awf-extended-4.1.0/scripts/slackware/slack-desc000066400000000000000000000014711517644610000214750ustar00rootroot00000000000000# HOW TO EDIT THIS FILE: # The "handy ruler" below makes it easier to edit a package description. # Line up the first '|' above the ':' following the base package name, and # the '|' on the right side marks the last column you can put a character in. # You must make exactly 11 lines for the formatting to be correct. It's also # customary to leave one space after the ':' except on otherwise blank lines. |-----handy-ruler------------------------------------------------------| awf: awf (A widget factory) awf: awf: A widget factory is a theme preview application for GTK and Qt. It awf: displays the various widget types in a single window allowing to see awf: the visual effect of the applied theme. awf: awf: For GTK 2.24, 3.x, 4.x & Qt 5.x, 6.x awf: awf: awf: Homepage: https://github.com/luigifab/awf-extended awf:awf-extended-4.1.0/scripts/windows/000077500000000000000000000000001517644610000172545ustar00rootroot00000000000000awf-extended-4.1.0/scripts/windows/PKGBUILD.gtk2000066400000000000000000000035311517644610000212500ustar00rootroot00000000000000# Maintainer: Fabrice Creuzot (luigifab) _realname=awf-gtk2 binname=$_realname mingw_arch=('mingw64' 'ucrt64' 'clang64' 'clangarm64') msys2_repository_url='https://github.com/luigifab/awf-extended' pkgbase=mingw-w64-$_realname pkgname=${MINGW_PACKAGE_PREFIX}-$_realname pkgver=4.1.0 pkgrel=1 pkgdesc="Theme preview application for GTK 2" arch=('any') url='https://github.com/luigifab/awf-extended' license=('GPL3') depends=("${MINGW_PACKAGE_PREFIX}-gtk2>=2.24.0" "${MINGW_PACKAGE_PREFIX}-hicolor-icon-theme") makedepends=("${MINGW_PACKAGE_PREFIX}-autotools" "${MINGW_PACKAGE_PREFIX}-gcc") #makedepends=('autoconf' 'automake' 'desktop-file-utils' 'gcc' 'gettext' 'gtk2') options=('!strip') source=("https://github.com/luigifab/awf-extended/archive/v${pkgver}/awf-extended-${pkgver}.tar.gz") sha256sums=("SKIP") prepare() { if [ -d "awf-extended-$pkgver" ]; then mv "awf-extended-$pkgver" "$pkgname-$pkgver" fi } build() { cd "$pkgname-$pkgver" autoreconf -fi cd .. mkdir -p "build-${MSYSTEM}" && cd "build-${MSYSTEM}" ../$pkgname-$pkgver/configure LDFLAGS="-mwindows" \ --prefix="${MINGW_PREFIX}" \ --build="${MINGW_CHOST}" \ --host="${MINGW_CHOST}" \ --target="${MINGW_CHOST}" \ --enable-only-gtk2 make -s cd .. } package() { install -Dpm 755 "build-${MSYSTEM}/src/$binname" "$pkgdir/${MINGW_PREFIX}/bin/$binname.exe" for file in $pkgname-$pkgver/src/po/*.po; do code=$(basename "$file" .po) install -dm 755 "$pkgdir/${MINGW_PREFIX}/share/locale/$code/LC_MESSAGES/" msgfmt "$pkgname-$pkgver/src/po/$code.po" -o "$pkgdir/${MINGW_PREFIX}/share/locale/$code/LC_MESSAGES/$binname.mo" done #install -Dpm 644 "$pkgname-$pkgver/README.md" "$pkgdir/${MINGW_PREFIX}/share/doc/$binname/README.md" #install -Dpm 644 "$pkgname-$pkgver/LICENSE" "$pkgdir/${MINGW_PREFIX}/share/licenses/$binname/LICENSE" }awf-extended-4.1.0/scripts/windows/PKGBUILD.gtk3000066400000000000000000000035211517644610000212500ustar00rootroot00000000000000# Maintainer: Fabrice Creuzot (luigifab) _realname=awf-gtk3 binname=$_realname mingw_arch=('mingw64' 'ucrt64' 'clang64' 'clangarm64') msys2_repository_url='https://github.com/luigifab/awf-extended' pkgbase=mingw-w64-$_realname pkgname=${MINGW_PACKAGE_PREFIX}-$_realname pkgver=4.1.0 pkgrel=1 pkgdesc="Theme preview application for GTK 3" arch=('any') url='https://github.com/luigifab/awf-extended' license=('GPL3') depends=("${MINGW_PACKAGE_PREFIX}-gtk3" "${MINGW_PACKAGE_PREFIX}-hicolor-icon-theme") makedepends=("${MINGW_PACKAGE_PREFIX}-autotools" "${MINGW_PACKAGE_PREFIX}-gcc") #makedepends=('autoconf' 'automake' 'desktop-file-utils' 'gcc' 'gettext' 'gtk3') options=('!strip') source=("https://github.com/luigifab/awf-extended/archive/v${pkgver}/awf-extended-${pkgver}.tar.gz") sha256sums=("SKIP") prepare() { if [ -d "awf-extended-$pkgver" ]; then mv "awf-extended-$pkgver" "$pkgname-$pkgver" fi } build() { cd "$pkgname-$pkgver" autoreconf -fi cd .. mkdir -p "build-${MSYSTEM}" && cd "build-${MSYSTEM}" ../$pkgname-$pkgver/configure LDFLAGS="-mwindows" \ --prefix="${MINGW_PREFIX}" \ --build="${MINGW_CHOST}" \ --host="${MINGW_CHOST}" \ --target="${MINGW_CHOST}" \ --enable-only-gtk3 make -s cd .. } package() { install -Dpm 755 "build-${MSYSTEM}/src/$binname" "$pkgdir/${MINGW_PREFIX}/bin/$binname.exe" for file in $pkgname-$pkgver/src/po/*.po; do code=$(basename "$file" .po) install -dm 755 "$pkgdir/${MINGW_PREFIX}/share/locale/$code/LC_MESSAGES/" msgfmt "$pkgname-$pkgver/src/po/$code.po" -o "$pkgdir/${MINGW_PREFIX}/share/locale/$code/LC_MESSAGES/$binname.mo" done #install -Dpm 644 "$pkgname-$pkgver/README.md" "$pkgdir/${MINGW_PREFIX}/share/doc/$binname/README.md" #install -Dpm 644 "$pkgname-$pkgver/LICENSE" "$pkgdir/${MINGW_PREFIX}/share/licenses/$binname/LICENSE" }awf-extended-4.1.0/scripts/windows/PKGBUILD.gtk4000066400000000000000000000035211517644610000212510ustar00rootroot00000000000000# Maintainer: Fabrice Creuzot (luigifab) _realname=awf-gtk4 binname=$_realname mingw_arch=('mingw64' 'ucrt64' 'clang64' 'clangarm64') msys2_repository_url='https://github.com/luigifab/awf-extended' pkgbase=mingw-w64-$_realname pkgname=${MINGW_PACKAGE_PREFIX}-$_realname pkgver=4.1.0 pkgrel=1 pkgdesc="Theme preview application for GTK 4" arch=('any') url='https://github.com/luigifab/awf-extended' license=('GPL3') depends=("${MINGW_PACKAGE_PREFIX}-gtk4" "${MINGW_PACKAGE_PREFIX}-hicolor-icon-theme") makedepends=("${MINGW_PACKAGE_PREFIX}-autotools" "${MINGW_PACKAGE_PREFIX}-gcc") #makedepends=('autoconf' 'automake' 'desktop-file-utils' 'gcc' 'gettext' 'gtk4') options=('!strip') source=("https://github.com/luigifab/awf-extended/archive/v${pkgver}/awf-extended-${pkgver}.tar.gz") sha256sums=("SKIP") prepare() { if [ -d "awf-extended-$pkgver" ]; then mv "awf-extended-$pkgver" "$pkgname-$pkgver" fi } build() { cd "$pkgname-$pkgver" autoreconf -fi cd .. mkdir -p "build-${MSYSTEM}" && cd "build-${MSYSTEM}" ../$pkgname-$pkgver/configure LDFLAGS="-mwindows" \ --prefix="${MINGW_PREFIX}" \ --build="${MINGW_CHOST}" \ --host="${MINGW_CHOST}" \ --target="${MINGW_CHOST}" \ --enable-only-gtk4 make -s cd .. } package() { install -Dpm 755 "build-${MSYSTEM}/src/$binname" "$pkgdir/${MINGW_PREFIX}/bin/$binname.exe" for file in $pkgname-$pkgver/src/po/*.po; do code=$(basename "$file" .po) install -dm 755 "$pkgdir/${MINGW_PREFIX}/share/locale/$code/LC_MESSAGES/" msgfmt "$pkgname-$pkgver/src/po/$code.po" -o "$pkgdir/${MINGW_PREFIX}/share/locale/$code/LC_MESSAGES/$binname.mo" done #install -Dpm 644 "$pkgname-$pkgver/README.md" "$pkgdir/${MINGW_PREFIX}/share/doc/$binname/README.md" #install -Dpm 644 "$pkgname-$pkgver/LICENSE" "$pkgdir/${MINGW_PREFIX}/share/licenses/$binname/LICENSE" }awf-extended-4.1.0/scripts/windows/PKGBUILD.gtk5000066400000000000000000000035211517644610000212520ustar00rootroot00000000000000# Maintainer: Fabrice Creuzot (luigifab) _realname=awf-gtk5 binname=$_realname mingw_arch=('mingw64' 'ucrt64' 'clang64' 'clangarm64') msys2_repository_url='https://github.com/luigifab/awf-extended' pkgbase=mingw-w64-$_realname pkgname=${MINGW_PACKAGE_PREFIX}-$_realname pkgver=4.1.0 pkgrel=1 pkgdesc="Theme preview application for GTK 5" arch=('any') url='https://github.com/luigifab/awf-extended' license=('GPL3') depends=("${MINGW_PACKAGE_PREFIX}-gtk5" "${MINGW_PACKAGE_PREFIX}-hicolor-icon-theme") makedepends=("${MINGW_PACKAGE_PREFIX}-autotools" "${MINGW_PACKAGE_PREFIX}-gcc") #makedepends=('autoconf' 'automake' 'desktop-file-utils' 'gcc' 'gettext' 'gtk5') options=('!strip') source=("https://github.com/luigifab/awf-extended/archive/v${pkgver}/awf-extended-${pkgver}.tar.gz") sha256sums=("SKIP") prepare() { if [ -d "awf-extended-$pkgver" ]; then mv "awf-extended-$pkgver" "$pkgname-$pkgver" fi } build() { cd "$pkgname-$pkgver" autoreconf -fi cd .. mkdir -p "build-${MSYSTEM}" && cd "build-${MSYSTEM}" ../$pkgname-$pkgver/configure LDFLAGS="-mwindows" \ --prefix="${MINGW_PREFIX}" \ --build="${MINGW_CHOST}" \ --host="${MINGW_CHOST}" \ --target="${MINGW_CHOST}" \ --enable-only-gtk5 make -s cd .. } package() { install -Dpm 755 "build-${MSYSTEM}/src/$binname" "$pkgdir/${MINGW_PREFIX}/bin/$binname.exe" for file in $pkgname-$pkgver/src/po/*.po; do code=$(basename "$file" .po) install -dm 755 "$pkgdir/${MINGW_PREFIX}/share/locale/$code/LC_MESSAGES/" msgfmt "$pkgname-$pkgver/src/po/$code.po" -o "$pkgdir/${MINGW_PREFIX}/share/locale/$code/LC_MESSAGES/$binname.mo" done #install -Dpm 644 "$pkgname-$pkgver/README.md" "$pkgdir/${MINGW_PREFIX}/share/doc/$binname/README.md" #install -Dpm 644 "$pkgname-$pkgver/LICENSE" "$pkgdir/${MINGW_PREFIX}/share/licenses/$binname/LICENSE" }awf-extended-4.1.0/scripts/windows/PKGBUILD.qt5000066400000000000000000000036201517644610000211110ustar00rootroot00000000000000# Maintainer: Fabrice Creuzot (luigifab) _realname=awf-qt5 binname=$_realname mingw_arch=('mingw64' 'ucrt64' 'clang64' 'clangarm64') msys2_repository_url='https://github.com/luigifab/awf-extended' pkgbase=mingw-w64-$_realname pkgname=${MINGW_PACKAGE_PREFIX}-$_realname pkgver=4.1.0 pkgrel=1 pkgdesc="Theme preview application for Qt 5" arch=('any') url='https://github.com/luigifab/awf-extended' license=('GPL3') depends=("${MINGW_PACKAGE_PREFIX}-qt5-base" "${MINGW_PACKAGE_PREFIX}-qt5-winextras" "${MINGW_PACKAGE_PREFIX}-hicolor-icon-theme") makedepends=("${MINGW_PACKAGE_PREFIX}-autotools" "${MINGW_PACKAGE_PREFIX}-gcc") #makedepends=('autoconf' 'automake' 'desktop-file-utils' 'gcc' 'gettext' 'qt5-base') options=('!strip') source=("https://github.com/luigifab/awf-extended/archive/v${pkgver}/awf-extended-${pkgver}.tar.gz") sha256sums=("SKIP") prepare() { if [ -d "awf-extended-$pkgver" ]; then mv "awf-extended-$pkgver" "$pkgname-$pkgver" fi } build() { cd "$pkgname-$pkgver" autoreconf -fi cd .. mkdir -p "build-${MSYSTEM}" && cd "build-${MSYSTEM}" ../$pkgname-$pkgver/configure LDFLAGS="-mwindows -static-libstdc++" \ --prefix="${MINGW_PREFIX}" \ --build="${MINGW_CHOST}" \ --host="${MINGW_CHOST}" \ --target="${MINGW_CHOST}" \ --enable-only-qt5 make -s cd .. } package() { install -Dpm 755 "build-${MSYSTEM}/src/$binname" "$pkgdir/${MINGW_PREFIX}/bin/$binname.exe" for file in $pkgname-$pkgver/src/po/*.po; do code=$(basename "$file" .po) install -dm 755 "$pkgdir/${MINGW_PREFIX}/share/locale/$code/LC_MESSAGES/" msgfmt "$pkgname-$pkgver/src/po/$code.po" -o "$pkgdir/${MINGW_PREFIX}/share/locale/$code/LC_MESSAGES/$binname.mo" done #install -Dpm 644 "$pkgname-$pkgver/README.md" "$pkgdir/${MINGW_PREFIX}/share/doc/$binname/README.md" #install -Dpm 644 "$pkgname-$pkgver/LICENSE" "$pkgdir/${MINGW_PREFIX}/share/licenses/$binname/LICENSE" }awf-extended-4.1.0/scripts/windows/PKGBUILD.qt6000066400000000000000000000035501517644610000211140ustar00rootroot00000000000000# Maintainer: Fabrice Creuzot (luigifab) _realname=awf-qt6 binname=$_realname mingw_arch=('mingw64' 'ucrt64' 'clang64' 'clangarm64') msys2_repository_url='https://github.com/luigifab/awf-extended' pkgbase=mingw-w64-$_realname pkgname=${MINGW_PACKAGE_PREFIX}-$_realname pkgver=4.1.0 pkgrel=1 pkgdesc="Theme preview application for Qt 6" arch=('any') url='https://github.com/luigifab/awf-extended' license=('GPL3') depends=("${MINGW_PACKAGE_PREFIX}-qt6-base" "${MINGW_PACKAGE_PREFIX}-hicolor-icon-theme") makedepends=("${MINGW_PACKAGE_PREFIX}-autotools" "${MINGW_PACKAGE_PREFIX}-gcc") #makedepends=('autoconf' 'automake' 'desktop-file-utils' 'gcc' 'gettext' 'qt6-base') options=('!strip') source=("https://github.com/luigifab/awf-extended/archive/v${pkgver}/awf-extended-${pkgver}.tar.gz") sha256sums=("SKIP") prepare() { if [ -d "awf-extended-$pkgver" ]; then mv "awf-extended-$pkgver" "$pkgname-$pkgver" fi } build() { cd "$pkgname-$pkgver" autoreconf -fi cd .. mkdir -p "build-${MSYSTEM}" && cd "build-${MSYSTEM}" ../$pkgname-$pkgver/configure LDFLAGS="-mwindows -static-libstdc++" \ --prefix="${MINGW_PREFIX}" \ --build="${MINGW_CHOST}" \ --host="${MINGW_CHOST}" \ --target="${MINGW_CHOST}" \ --enable-only-qt6 make -s cd .. } package() { install -Dpm 755 "build-${MSYSTEM}/src/$binname" "$pkgdir/${MINGW_PREFIX}/bin/$binname.exe" for file in $pkgname-$pkgver/src/po/*.po; do code=$(basename "$file" .po) install -dm 755 "$pkgdir/${MINGW_PREFIX}/share/locale/$code/LC_MESSAGES/" msgfmt "$pkgname-$pkgver/src/po/$code.po" -o "$pkgdir/${MINGW_PREFIX}/share/locale/$code/LC_MESSAGES/$binname.mo" done #install -Dpm 644 "$pkgname-$pkgver/README.md" "$pkgdir/${MINGW_PREFIX}/share/doc/$binname/README.md" #install -Dpm 644 "$pkgname-$pkgver/LICENSE" "$pkgdir/${MINGW_PREFIX}/share/licenses/$binname/LICENSE" }awf-extended-4.1.0/scripts/windows/PKGBUILD.qt7000066400000000000000000000035501517644610000211150ustar00rootroot00000000000000# Maintainer: Fabrice Creuzot (luigifab) _realname=awf-qt7 binname=$_realname mingw_arch=('mingw64' 'ucrt64' 'clang64' 'clangarm64') msys2_repository_url='https://github.com/luigifab/awf-extended' pkgbase=mingw-w64-$_realname pkgname=${MINGW_PACKAGE_PREFIX}-$_realname pkgver=4.1.0 pkgrel=1 pkgdesc="Theme preview application for Qt 7" arch=('any') url='https://github.com/luigifab/awf-extended' license=('GPL3') depends=("${MINGW_PACKAGE_PREFIX}-qt7-base" "${MINGW_PACKAGE_PREFIX}-hicolor-icon-theme") makedepends=("${MINGW_PACKAGE_PREFIX}-autotools" "${MINGW_PACKAGE_PREFIX}-gcc") #makedepends=('autoconf' 'automake' 'desktop-file-utils' 'gcc' 'gettext' 'qt7-base') options=('!strip') source=("https://github.com/luigifab/awf-extended/archive/v${pkgver}/awf-extended-${pkgver}.tar.gz") sha256sums=("SKIP") prepare() { if [ -d "awf-extended-$pkgver" ]; then mv "awf-extended-$pkgver" "$pkgname-$pkgver" fi } build() { cd "$pkgname-$pkgver" autoreconf -fi cd .. mkdir -p "build-${MSYSTEM}" && cd "build-${MSYSTEM}" ../$pkgname-$pkgver/configure LDFLAGS="-mwindows -static-libstdc++" \ --prefix="${MINGW_PREFIX}" \ --build="${MINGW_CHOST}" \ --host="${MINGW_CHOST}" \ --target="${MINGW_CHOST}" \ --enable-only-qt7 make -s cd .. } package() { install -Dpm 755 "build-${MSYSTEM}/src/$binname" "$pkgdir/${MINGW_PREFIX}/bin/$binname.exe" for file in $pkgname-$pkgver/src/po/*.po; do code=$(basename "$file" .po) install -dm 755 "$pkgdir/${MINGW_PREFIX}/share/locale/$code/LC_MESSAGES/" msgfmt "$pkgname-$pkgver/src/po/$code.po" -o "$pkgdir/${MINGW_PREFIX}/share/locale/$code/LC_MESSAGES/$binname.mo" done #install -Dpm 644 "$pkgname-$pkgver/README.md" "$pkgdir/${MINGW_PREFIX}/share/doc/$binname/README.md" #install -Dpm 644 "$pkgname-$pkgver/LICENSE" "$pkgdir/${MINGW_PREFIX}/share/licenses/$binname/LICENSE" }awf-extended-4.1.0/scripts/windows/build.yml000066400000000000000000000021271517644610000211000ustar00rootroot00000000000000name: Build Windows packages on: push: workflow_dispatch: jobs: build_msys2: if: true runs-on: windows-latest steps: - uses: actions/checkout@v4 - uses: msys2/setup-msys2@v2 with: msystem: MINGW64 update: true install: >- autoconf automake make pkgconf mingw-w64-x86_64-binutils mingw-w64-x86_64-gcc mingw-w64-x86_64-make mingw-w64-x86_64-gettext mingw-w64-x86_64-gtk2 mingw-w64-x86_64-gtk3 mingw-w64-x86_64-gtk4 mingw-w64-x86_64-qt5-base mingw-w64-x86_64-qt5-winextras mingw-w64-x86_64-qt5-translations mingw-w64-x86_64-qt6-base mingw-w64-x86_64-qt6-translations mingw-w64-x86_64-nsis - name: Build AWF shell: msys2 {0} run: bash scripts/windows/zip.sh - name: Upload AWF uses: actions/upload-artifact@v4 with: name: windows-setups path: scripts/windows/builder/setup-*.exe awf-extended-4.1.0/scripts/windows/setup-awf-gtk2.nsi000066400000000000000000000172161517644610000225560ustar00rootroot00000000000000; NSIS installer (v3.11+) unicode true !include "MUI2.nsh" !include "FileFunc.nsh" !define ENGINE "gtk2" !define ARCH ":ARCH:" !define ARCHNAME ":ARCHNAME:" !define VERSION ":AWFVERSION:" !define APPNAME "awf-${ENGINE}" VIProductVersion "${VERSION}.0" VIFileVersion "${VERSION}.0" VIAddVersionKey "FileDescription" "Setup for A widget factory" VIAddVersionKey "FileVersion" "${VERSION}" VIAddVersionKey "ProductName" "A widget factory" VIAddVersionKey "ProductVersion" "${VERSION}" VIAddVersionKey "CompanyName" "luigifab, nullsoft" VIAddVersionKey "LegalCopyright" "2026 Fabrice Creuzot (luigifab), GNU GPL v3" VIAddVersionKey "Info1" "https://github.com/luigifab/awf-extended" VIAddVersionKey "Info2" "https://www.luigifab.fr/gtkqt/awf-extended" VIAddVersionKey "Info3" "https://nsis.sourceforge.io/" VIAddVersionKey "InternalName" "setup-${APPNAME}" VIAddVersionKey "OriginalFilename" "setup-${APPNAME}-${VERSION}-${ARCH}.exe" Name "${APPNAME}" OutFile "setup-${APPNAME}-${VERSION}-${ARCH}.exe" InstallDir "$PROGRAMFILES\${APPNAME}" InstallDirRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "InstallLocation" RequestExecutionLevel admin !define MUI_ABORTWARNING !define MUI_LANGDLL_ALLLANGUAGES !define MUI_COMPONENTSPAGE_NODESC !define MUI_LICENSEPAGE_TEXT_TOP "" !define MUI_ICON "awf-extended-${VERSION}\data\awf.ico" !define MUI_UNICON "awf-extended-${VERSION}\data\awf.ico" ; Pages !insertmacro MUI_PAGE_WELCOME !insertmacro MUI_PAGE_LICENSE "awf-extended-${VERSION}\LICENSE" !insertmacro MUI_PAGE_COMPONENTS !insertmacro MUI_PAGE_DIRECTORY !insertmacro MUI_PAGE_INSTFILES !insertmacro MUI_PAGE_FINISH !insertmacro MUI_UNPAGE_WELCOME !insertmacro MUI_UNPAGE_CONFIRM !insertmacro MUI_UNPAGE_INSTFILES !insertmacro MUI_UNPAGE_FINISH ; Languages !insertmacro MUI_LANGUAGE "English" !insertmacro MUI_LANGUAGE "Afrikaans" !insertmacro MUI_LANGUAGE "Albanian" !insertmacro MUI_LANGUAGE "Arabic" !insertmacro MUI_LANGUAGE "Armenian" !insertmacro MUI_LANGUAGE "Asturian" !insertmacro MUI_LANGUAGE "Basque" !insertmacro MUI_LANGUAGE "Belarusian" !insertmacro MUI_LANGUAGE "Bosnian" !insertmacro MUI_LANGUAGE "Breton" !insertmacro MUI_LANGUAGE "Bulgarian" !insertmacro MUI_LANGUAGE "Catalan" !insertmacro MUI_LANGUAGE "Corsican" !insertmacro MUI_LANGUAGE "Croatian" !insertmacro MUI_LANGUAGE "Czech" !insertmacro MUI_LANGUAGE "Danish" !insertmacro MUI_LANGUAGE "Dutch" !insertmacro MUI_LANGUAGE "Esperanto" !insertmacro MUI_LANGUAGE "Estonian" !insertmacro MUI_LANGUAGE "Farsi" !insertmacro MUI_LANGUAGE "Finnish" !insertmacro MUI_LANGUAGE "French" !insertmacro MUI_LANGUAGE "Galician" !insertmacro MUI_LANGUAGE "Georgian" !insertmacro MUI_LANGUAGE "German" !insertmacro MUI_LANGUAGE "Greek" !insertmacro MUI_LANGUAGE "Hebrew" !insertmacro MUI_LANGUAGE "Hindi" !insertmacro MUI_LANGUAGE "Hungarian" !insertmacro MUI_LANGUAGE "Icelandic" !insertmacro MUI_LANGUAGE "Indonesian" !insertmacro MUI_LANGUAGE "Irish" !insertmacro MUI_LANGUAGE "Italian" !insertmacro MUI_LANGUAGE "Japanese" !insertmacro MUI_LANGUAGE "Korean" !insertmacro MUI_LANGUAGE "Kurdish" !insertmacro MUI_LANGUAGE "Latvian" !insertmacro MUI_LANGUAGE "Lithuanian" !insertmacro MUI_LANGUAGE "Luxembourgish" !insertmacro MUI_LANGUAGE "Macedonian" !insertmacro MUI_LANGUAGE "Malay" !insertmacro MUI_LANGUAGE "Mongolian" !insertmacro MUI_LANGUAGE "Norwegian" !insertmacro MUI_LANGUAGE "NorwegianNynorsk" !insertmacro MUI_LANGUAGE "Pashto" !insertmacro MUI_LANGUAGE "Polish" !insertmacro MUI_LANGUAGE "Portuguese" !insertmacro MUI_LANGUAGE "PortugueseBR" !insertmacro MUI_LANGUAGE "Romanian" !insertmacro MUI_LANGUAGE "Russian" !insertmacro MUI_LANGUAGE "ScotsGaelic" !insertmacro MUI_LANGUAGE "Serbian" !insertmacro MUI_LANGUAGE "SerbianLatin" !insertmacro MUI_LANGUAGE "SimpChinese" !insertmacro MUI_LANGUAGE "Slovak" !insertmacro MUI_LANGUAGE "Slovenian" !insertmacro MUI_LANGUAGE "Spanish" !insertmacro MUI_LANGUAGE "SpanishInternational" !insertmacro MUI_LANGUAGE "Swedish" !insertmacro MUI_LANGUAGE "Tatar" !insertmacro MUI_LANGUAGE "Thai" !insertmacro MUI_LANGUAGE "TradChinese" !insertmacro MUI_LANGUAGE "Turkish" !insertmacro MUI_LANGUAGE "Ukrainian" !insertmacro MUI_LANGUAGE "Uzbek" !insertmacro MUI_LANGUAGE "Vietnamese" !insertmacro MUI_LANGUAGE "Welsh" !insertmacro MUI_RESERVEFILE_LANGDLL ; Installer Function .onInit !insertmacro MUI_LANGDLL_DISPLAY System::Call 'kernel32::CreateMutex(p 0, i 0, t "${APPNAME}") p .r1 ?e' Pop $R0 StrCmp $R0 0 +3 MessageBox MB_OK|MB_ICONEXCLAMATION "The installer is already running." Abort FunctionEnd Function .onVerifyInstDir FindFirst $0 $1 "$INSTDIR\*.*" loop: StrCmp $1 "" done StrCmp $1 "." next StrCmp $1 ".." next FindClose $0 Abort next: FindNext $0 $1 Goto loop done: FindClose $0 FunctionEnd Section "AWF - ${VERSION} - ${ARCH} ${ARCHNAME}" SecProgram SectionIn RO SetOutPath "$INSTDIR" File "${ENGINE}\${APPNAME}.exe" SetOutPath "$INSTDIR\share\locale\fr\LC_MESSAGES\" File /r "${ENGINE}\share\locale\fr\LC_MESSAGES\awf*.mo" WriteUninstaller "$INSTDIR\uninstall.exe" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "DisplayIcon" "$\"$INSTDIR\${APPNAME}.exe,0$\"" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "DisplayName" "${APPNAME} - A widget factory" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "DisplayVersion" "${VERSION}" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "HelpLink" "https://github.com/luigifab/awf-extended" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "InstallLocation" "$\"$INSTDIR$\"" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "Publisher" "luigifab" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "QuietUninstallString" "$\"$INSTDIR\uninstall.exe$\" /S" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "UninstallString" "$\"$INSTDIR\uninstall.exe$\"" WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "NoModify" 1 WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "NoRepair" 1 ${GetSize} "$INSTDIR" "/S=0K" $0 $1 $2 WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "EstimatedSize" "$0" SectionEnd Section "GTK Core - :ENGINEVERSION: - ${ARCH} ${ARCHNAME}" SecEngine SetOutPath "$INSTDIR" File "${ENGINE}\*.dll" File /r "${ENGINE}\lib" SetOutPath "$INSTDIR\share" File /r "${ENGINE}\share\themes" SectionEnd Section "GTK Translations" SecTranslations SetOutPath "$INSTDIR\share" File /r /x "awf*.mo" "${ENGINE}\share\locale" SectionEnd Section "Start menu shortcut" SecStartMenu SetOutPath "$INSTDIR" CreateShortcut "$SMPROGRAMS\${APPNAME}.lnk" "$INSTDIR\${APPNAME}.exe" SectionEnd Section "Desktop shortcut" SecDesktop SetOutPath "$INSTDIR" CreateShortcut "$DESKTOP\${APPNAME}.lnk" "$INSTDIR\${APPNAME}.exe" SectionEnd Function .onSelChange SectionGetFlags ${SecEngine} $0 IntOp $0 $0 & ${SF_SELECTED} ${If} $0 == ${SF_SELECTED} !insertmacro ClearSectionFlag ${SecTranslations} ${SF_RO} ${Else} !insertmacro ClearSectionFlag ${SecTranslations} ${SF_SELECTED} !insertmacro SetSectionFlag ${SecTranslations} ${SF_RO} ${EndIf} FunctionEnd ; Uninstaller Section "Uninstall" Delete "$SMPROGRAMS\${APPNAME}.lnk" Delete "$DESKTOP\${APPNAME}.lnk" ${If} ${FileExists} "$INSTDIR\${APPNAME}.exe" ${AndIf} ${FileExists} "$INSTDIR\uninstall.exe" RmDir /r "$INSTDIR" ${EndIf} DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" SectionEndawf-extended-4.1.0/scripts/windows/setup-awf-gtk3.nsi000066400000000000000000000172301517644610000225530ustar00rootroot00000000000000; NSIS installer (v3.11+) unicode true !include "MUI2.nsh" !include "FileFunc.nsh" !define ENGINE "gtk3" !define ARCH ":ARCH:" !define ARCHNAME ":ARCHNAME:" !define VERSION ":AWFVERSION:" !define APPNAME "awf-${ENGINE}" VIProductVersion "${VERSION}.0" VIFileVersion "${VERSION}.0" VIAddVersionKey "FileDescription" "Setup for A widget factory" VIAddVersionKey "FileVersion" "${VERSION}" VIAddVersionKey "ProductName" "A widget factory" VIAddVersionKey "ProductVersion" "${VERSION}" VIAddVersionKey "CompanyName" "luigifab, nullsoft" VIAddVersionKey "LegalCopyright" "2026 Fabrice Creuzot (luigifab), GNU GPL v3" VIAddVersionKey "Info1" "https://github.com/luigifab/awf-extended" VIAddVersionKey "Info2" "https://www.luigifab.fr/gtkqt/awf-extended" VIAddVersionKey "Info3" "https://nsis.sourceforge.io/" VIAddVersionKey "InternalName" "setup-${APPNAME}" VIAddVersionKey "OriginalFilename" "setup-${APPNAME}-${VERSION}-${ARCH}.exe" Name "${APPNAME}" OutFile "setup-${APPNAME}-${VERSION}-${ARCH}.exe" InstallDir "$PROGRAMFILES\${APPNAME}" InstallDirRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "InstallLocation" RequestExecutionLevel admin !define MUI_ABORTWARNING !define MUI_LANGDLL_ALLLANGUAGES !define MUI_COMPONENTSPAGE_NODESC !define MUI_LICENSEPAGE_TEXT_TOP "" !define MUI_ICON "awf-extended-${VERSION}\data\awf.ico" !define MUI_UNICON "awf-extended-${VERSION}\data\awf.ico" ; Pages !insertmacro MUI_PAGE_WELCOME !insertmacro MUI_PAGE_LICENSE "awf-extended-${VERSION}\LICENSE" !insertmacro MUI_PAGE_COMPONENTS !insertmacro MUI_PAGE_DIRECTORY !insertmacro MUI_PAGE_INSTFILES !insertmacro MUI_PAGE_FINISH !insertmacro MUI_UNPAGE_WELCOME !insertmacro MUI_UNPAGE_CONFIRM !insertmacro MUI_UNPAGE_INSTFILES !insertmacro MUI_UNPAGE_FINISH ; Languages !insertmacro MUI_LANGUAGE "English" !insertmacro MUI_LANGUAGE "Afrikaans" !insertmacro MUI_LANGUAGE "Albanian" !insertmacro MUI_LANGUAGE "Arabic" !insertmacro MUI_LANGUAGE "Armenian" !insertmacro MUI_LANGUAGE "Asturian" !insertmacro MUI_LANGUAGE "Basque" !insertmacro MUI_LANGUAGE "Belarusian" !insertmacro MUI_LANGUAGE "Bosnian" !insertmacro MUI_LANGUAGE "Breton" !insertmacro MUI_LANGUAGE "Bulgarian" !insertmacro MUI_LANGUAGE "Catalan" !insertmacro MUI_LANGUAGE "Corsican" !insertmacro MUI_LANGUAGE "Croatian" !insertmacro MUI_LANGUAGE "Czech" !insertmacro MUI_LANGUAGE "Danish" !insertmacro MUI_LANGUAGE "Dutch" !insertmacro MUI_LANGUAGE "Esperanto" !insertmacro MUI_LANGUAGE "Estonian" !insertmacro MUI_LANGUAGE "Farsi" !insertmacro MUI_LANGUAGE "Finnish" !insertmacro MUI_LANGUAGE "French" !insertmacro MUI_LANGUAGE "Galician" !insertmacro MUI_LANGUAGE "Georgian" !insertmacro MUI_LANGUAGE "German" !insertmacro MUI_LANGUAGE "Greek" !insertmacro MUI_LANGUAGE "Hebrew" !insertmacro MUI_LANGUAGE "Hindi" !insertmacro MUI_LANGUAGE "Hungarian" !insertmacro MUI_LANGUAGE "Icelandic" !insertmacro MUI_LANGUAGE "Indonesian" !insertmacro MUI_LANGUAGE "Irish" !insertmacro MUI_LANGUAGE "Italian" !insertmacro MUI_LANGUAGE "Japanese" !insertmacro MUI_LANGUAGE "Korean" !insertmacro MUI_LANGUAGE "Kurdish" !insertmacro MUI_LANGUAGE "Latvian" !insertmacro MUI_LANGUAGE "Lithuanian" !insertmacro MUI_LANGUAGE "Luxembourgish" !insertmacro MUI_LANGUAGE "Macedonian" !insertmacro MUI_LANGUAGE "Malay" !insertmacro MUI_LANGUAGE "Mongolian" !insertmacro MUI_LANGUAGE "Norwegian" !insertmacro MUI_LANGUAGE "NorwegianNynorsk" !insertmacro MUI_LANGUAGE "Pashto" !insertmacro MUI_LANGUAGE "Polish" !insertmacro MUI_LANGUAGE "Portuguese" !insertmacro MUI_LANGUAGE "PortugueseBR" !insertmacro MUI_LANGUAGE "Romanian" !insertmacro MUI_LANGUAGE "Russian" !insertmacro MUI_LANGUAGE "ScotsGaelic" !insertmacro MUI_LANGUAGE "Serbian" !insertmacro MUI_LANGUAGE "SerbianLatin" !insertmacro MUI_LANGUAGE "SimpChinese" !insertmacro MUI_LANGUAGE "Slovak" !insertmacro MUI_LANGUAGE "Slovenian" !insertmacro MUI_LANGUAGE "Spanish" !insertmacro MUI_LANGUAGE "SpanishInternational" !insertmacro MUI_LANGUAGE "Swedish" !insertmacro MUI_LANGUAGE "Tatar" !insertmacro MUI_LANGUAGE "Thai" !insertmacro MUI_LANGUAGE "TradChinese" !insertmacro MUI_LANGUAGE "Turkish" !insertmacro MUI_LANGUAGE "Ukrainian" !insertmacro MUI_LANGUAGE "Uzbek" !insertmacro MUI_LANGUAGE "Vietnamese" !insertmacro MUI_LANGUAGE "Welsh" !insertmacro MUI_RESERVEFILE_LANGDLL ; Installer Function .onInit !insertmacro MUI_LANGDLL_DISPLAY System::Call 'kernel32::CreateMutex(p 0, i 0, t "${APPNAME}") p .r1 ?e' Pop $R0 StrCmp $R0 0 +3 MessageBox MB_OK|MB_ICONEXCLAMATION "The installer is already running." Abort FunctionEnd Function .onVerifyInstDir FindFirst $0 $1 "$INSTDIR\*.*" loop: StrCmp $1 "" done StrCmp $1 "." next StrCmp $1 ".." next FindClose $0 Abort next: FindNext $0 $1 Goto loop done: FindClose $0 FunctionEnd Section "AWF - ${VERSION} - ${ARCH} ${ARCHNAME}" SecProgram SectionIn RO SetOutPath "$INSTDIR" File "${ENGINE}\${APPNAME}.exe" SetOutPath "$INSTDIR\share\locale\fr\LC_MESSAGES\" File /r "${ENGINE}\share\locale\fr\LC_MESSAGES\awf*.mo" WriteUninstaller "$INSTDIR\uninstall.exe" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "DisplayIcon" "$\"$INSTDIR\${APPNAME}.exe,0$\"" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "DisplayName" "${APPNAME} - A widget factory" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "DisplayVersion" "${VERSION}" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "HelpLink" "https://github.com/luigifab/awf-extended" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "InstallLocation" "$\"$INSTDIR$\"" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "Publisher" "luigifab" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "QuietUninstallString" "$\"$INSTDIR\uninstall.exe$\" /S" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "UninstallString" "$\"$INSTDIR\uninstall.exe$\"" WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "NoModify" 1 WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "NoRepair" 1 ${GetSize} "$INSTDIR" "/S=0K" $0 $1 $2 WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "EstimatedSize" "$0" SectionEnd Section "GTK Core - :ENGINEVERSION: - ${ARCH} ${ARCHNAME}" SecEngine SetOutPath "$INSTDIR" File "${ENGINE}\*.dll" SetOutPath "$INSTDIR\share" File /r "${ENGINE}\share\schemas" File /r "${ENGINE}\share\themes" SectionEnd Section "GTK Translations" SecTranslations SetOutPath "$INSTDIR\share" File /r /x "awf*.mo" "${ENGINE}\share\locale" SectionEnd Section "Start menu shortcut" SecStartMenu SetOutPath "$INSTDIR" CreateShortcut "$SMPROGRAMS\${APPNAME}.lnk" "$INSTDIR\${APPNAME}.exe" SectionEnd Section "Desktop shortcut" SecDesktop SetOutPath "$INSTDIR" CreateShortcut "$DESKTOP\${APPNAME}.lnk" "$INSTDIR\${APPNAME}.exe" SectionEnd Function .onSelChange SectionGetFlags ${SecEngine} $0 IntOp $0 $0 & ${SF_SELECTED} ${If} $0 == ${SF_SELECTED} !insertmacro ClearSectionFlag ${SecTranslations} ${SF_RO} ${Else} !insertmacro ClearSectionFlag ${SecTranslations} ${SF_SELECTED} !insertmacro SetSectionFlag ${SecTranslations} ${SF_RO} ${EndIf} FunctionEnd ; Uninstaller Section "Uninstall" Delete "$SMPROGRAMS\${APPNAME}.lnk" Delete "$DESKTOP\${APPNAME}.lnk" ${If} ${FileExists} "$INSTDIR\${APPNAME}.exe" ${AndIf} ${FileExists} "$INSTDIR\uninstall.exe" RmDir /r "$INSTDIR" ${EndIf} DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" SectionEndawf-extended-4.1.0/scripts/windows/setup-awf-gtk4.nsi000066400000000000000000000172301517644610000225540ustar00rootroot00000000000000; NSIS installer (v3.11+) unicode true !include "MUI2.nsh" !include "FileFunc.nsh" !define ENGINE "gtk4" !define ARCH ":ARCH:" !define ARCHNAME ":ARCHNAME:" !define VERSION ":AWFVERSION:" !define APPNAME "awf-${ENGINE}" VIProductVersion "${VERSION}.0" VIFileVersion "${VERSION}.0" VIAddVersionKey "FileDescription" "Setup for A widget factory" VIAddVersionKey "FileVersion" "${VERSION}" VIAddVersionKey "ProductName" "A widget factory" VIAddVersionKey "ProductVersion" "${VERSION}" VIAddVersionKey "CompanyName" "luigifab, nullsoft" VIAddVersionKey "LegalCopyright" "2026 Fabrice Creuzot (luigifab), GNU GPL v3" VIAddVersionKey "Info1" "https://github.com/luigifab/awf-extended" VIAddVersionKey "Info2" "https://www.luigifab.fr/gtkqt/awf-extended" VIAddVersionKey "Info3" "https://nsis.sourceforge.io/" VIAddVersionKey "InternalName" "setup-${APPNAME}" VIAddVersionKey "OriginalFilename" "setup-${APPNAME}-${VERSION}-${ARCH}.exe" Name "${APPNAME}" OutFile "setup-${APPNAME}-${VERSION}-${ARCH}.exe" InstallDir "$PROGRAMFILES\${APPNAME}" InstallDirRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "InstallLocation" RequestExecutionLevel admin !define MUI_ABORTWARNING !define MUI_LANGDLL_ALLLANGUAGES !define MUI_COMPONENTSPAGE_NODESC !define MUI_LICENSEPAGE_TEXT_TOP "" !define MUI_ICON "awf-extended-${VERSION}\data\awf.ico" !define MUI_UNICON "awf-extended-${VERSION}\data\awf.ico" ; Pages !insertmacro MUI_PAGE_WELCOME !insertmacro MUI_PAGE_LICENSE "awf-extended-${VERSION}\LICENSE" !insertmacro MUI_PAGE_COMPONENTS !insertmacro MUI_PAGE_DIRECTORY !insertmacro MUI_PAGE_INSTFILES !insertmacro MUI_PAGE_FINISH !insertmacro MUI_UNPAGE_WELCOME !insertmacro MUI_UNPAGE_CONFIRM !insertmacro MUI_UNPAGE_INSTFILES !insertmacro MUI_UNPAGE_FINISH ; Languages !insertmacro MUI_LANGUAGE "English" !insertmacro MUI_LANGUAGE "Afrikaans" !insertmacro MUI_LANGUAGE "Albanian" !insertmacro MUI_LANGUAGE "Arabic" !insertmacro MUI_LANGUAGE "Armenian" !insertmacro MUI_LANGUAGE "Asturian" !insertmacro MUI_LANGUAGE "Basque" !insertmacro MUI_LANGUAGE "Belarusian" !insertmacro MUI_LANGUAGE "Bosnian" !insertmacro MUI_LANGUAGE "Breton" !insertmacro MUI_LANGUAGE "Bulgarian" !insertmacro MUI_LANGUAGE "Catalan" !insertmacro MUI_LANGUAGE "Corsican" !insertmacro MUI_LANGUAGE "Croatian" !insertmacro MUI_LANGUAGE "Czech" !insertmacro MUI_LANGUAGE "Danish" !insertmacro MUI_LANGUAGE "Dutch" !insertmacro MUI_LANGUAGE "Esperanto" !insertmacro MUI_LANGUAGE "Estonian" !insertmacro MUI_LANGUAGE "Farsi" !insertmacro MUI_LANGUAGE "Finnish" !insertmacro MUI_LANGUAGE "French" !insertmacro MUI_LANGUAGE "Galician" !insertmacro MUI_LANGUAGE "Georgian" !insertmacro MUI_LANGUAGE "German" !insertmacro MUI_LANGUAGE "Greek" !insertmacro MUI_LANGUAGE "Hebrew" !insertmacro MUI_LANGUAGE "Hindi" !insertmacro MUI_LANGUAGE "Hungarian" !insertmacro MUI_LANGUAGE "Icelandic" !insertmacro MUI_LANGUAGE "Indonesian" !insertmacro MUI_LANGUAGE "Irish" !insertmacro MUI_LANGUAGE "Italian" !insertmacro MUI_LANGUAGE "Japanese" !insertmacro MUI_LANGUAGE "Korean" !insertmacro MUI_LANGUAGE "Kurdish" !insertmacro MUI_LANGUAGE "Latvian" !insertmacro MUI_LANGUAGE "Lithuanian" !insertmacro MUI_LANGUAGE "Luxembourgish" !insertmacro MUI_LANGUAGE "Macedonian" !insertmacro MUI_LANGUAGE "Malay" !insertmacro MUI_LANGUAGE "Mongolian" !insertmacro MUI_LANGUAGE "Norwegian" !insertmacro MUI_LANGUAGE "NorwegianNynorsk" !insertmacro MUI_LANGUAGE "Pashto" !insertmacro MUI_LANGUAGE "Polish" !insertmacro MUI_LANGUAGE "Portuguese" !insertmacro MUI_LANGUAGE "PortugueseBR" !insertmacro MUI_LANGUAGE "Romanian" !insertmacro MUI_LANGUAGE "Russian" !insertmacro MUI_LANGUAGE "ScotsGaelic" !insertmacro MUI_LANGUAGE "Serbian" !insertmacro MUI_LANGUAGE "SerbianLatin" !insertmacro MUI_LANGUAGE "SimpChinese" !insertmacro MUI_LANGUAGE "Slovak" !insertmacro MUI_LANGUAGE "Slovenian" !insertmacro MUI_LANGUAGE "Spanish" !insertmacro MUI_LANGUAGE "SpanishInternational" !insertmacro MUI_LANGUAGE "Swedish" !insertmacro MUI_LANGUAGE "Tatar" !insertmacro MUI_LANGUAGE "Thai" !insertmacro MUI_LANGUAGE "TradChinese" !insertmacro MUI_LANGUAGE "Turkish" !insertmacro MUI_LANGUAGE "Ukrainian" !insertmacro MUI_LANGUAGE "Uzbek" !insertmacro MUI_LANGUAGE "Vietnamese" !insertmacro MUI_LANGUAGE "Welsh" !insertmacro MUI_RESERVEFILE_LANGDLL ; Installer Function .onInit !insertmacro MUI_LANGDLL_DISPLAY System::Call 'kernel32::CreateMutex(p 0, i 0, t "${APPNAME}") p .r1 ?e' Pop $R0 StrCmp $R0 0 +3 MessageBox MB_OK|MB_ICONEXCLAMATION "The installer is already running." Abort FunctionEnd Function .onVerifyInstDir FindFirst $0 $1 "$INSTDIR\*.*" loop: StrCmp $1 "" done StrCmp $1 "." next StrCmp $1 ".." next FindClose $0 Abort next: FindNext $0 $1 Goto loop done: FindClose $0 FunctionEnd Section "AWF - ${VERSION} - ${ARCH} ${ARCHNAME}" SecProgram SectionIn RO SetOutPath "$INSTDIR" File "${ENGINE}\${APPNAME}.exe" SetOutPath "$INSTDIR\share\locale\fr\LC_MESSAGES\" File /r "${ENGINE}\share\locale\fr\LC_MESSAGES\awf*.mo" WriteUninstaller "$INSTDIR\uninstall.exe" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "DisplayIcon" "$\"$INSTDIR\${APPNAME}.exe,0$\"" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "DisplayName" "${APPNAME} - A widget factory" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "DisplayVersion" "${VERSION}" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "HelpLink" "https://github.com/luigifab/awf-extended" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "InstallLocation" "$\"$INSTDIR$\"" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "Publisher" "luigifab" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "QuietUninstallString" "$\"$INSTDIR\uninstall.exe$\" /S" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "UninstallString" "$\"$INSTDIR\uninstall.exe$\"" WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "NoModify" 1 WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "NoRepair" 1 ${GetSize} "$INSTDIR" "/S=0K" $0 $1 $2 WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "EstimatedSize" "$0" SectionEnd Section "GTK Core - :ENGINEVERSION: - ${ARCH} ${ARCHNAME}" SecEngine SetOutPath "$INSTDIR" File "${ENGINE}\*.dll" SetOutPath "$INSTDIR\share" File /r "${ENGINE}\share\schemas" File /r "${ENGINE}\share\themes" SectionEnd Section "GTK Translations" SecTranslations SetOutPath "$INSTDIR\share" File /r /x "awf*.mo" "${ENGINE}\share\locale" SectionEnd Section "Start menu shortcut" SecStartMenu SetOutPath "$INSTDIR" CreateShortcut "$SMPROGRAMS\${APPNAME}.lnk" "$INSTDIR\${APPNAME}.exe" SectionEnd Section "Desktop shortcut" SecDesktop SetOutPath "$INSTDIR" CreateShortcut "$DESKTOP\${APPNAME}.lnk" "$INSTDIR\${APPNAME}.exe" SectionEnd Function .onSelChange SectionGetFlags ${SecEngine} $0 IntOp $0 $0 & ${SF_SELECTED} ${If} $0 == ${SF_SELECTED} !insertmacro ClearSectionFlag ${SecTranslations} ${SF_RO} ${Else} !insertmacro ClearSectionFlag ${SecTranslations} ${SF_SELECTED} !insertmacro SetSectionFlag ${SecTranslations} ${SF_RO} ${EndIf} FunctionEnd ; Uninstaller Section "Uninstall" Delete "$SMPROGRAMS\${APPNAME}.lnk" Delete "$DESKTOP\${APPNAME}.lnk" ${If} ${FileExists} "$INSTDIR\${APPNAME}.exe" ${AndIf} ${FileExists} "$INSTDIR\uninstall.exe" RmDir /r "$INSTDIR" ${EndIf} DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" SectionEndawf-extended-4.1.0/scripts/windows/setup-awf-qt5.nsi000066400000000000000000000171331517644610000224160ustar00rootroot00000000000000; NSIS installer (v3.11+) unicode true !include "MUI2.nsh" !include "FileFunc.nsh" !define ENGINE "qt5" !define ARCH ":ARCH:" !define ARCHNAME ":ARCHNAME:" !define VERSION ":AWFVERSION:" !define APPNAME "awf-${ENGINE}" VIProductVersion "${VERSION}.0" VIFileVersion "${VERSION}.0" VIAddVersionKey "FileDescription" "Setup for A widget factory" VIAddVersionKey "FileVersion" "${VERSION}" VIAddVersionKey "ProductName" "A widget factory" VIAddVersionKey "ProductVersion" "${VERSION}" VIAddVersionKey "CompanyName" "luigifab, nullsoft" VIAddVersionKey "LegalCopyright" "2026 Fabrice Creuzot (luigifab), GNU GPL v3" VIAddVersionKey "Info1" "https://github.com/luigifab/awf-extended" VIAddVersionKey "Info2" "https://www.luigifab.fr/gtkqt/awf-extended" VIAddVersionKey "Info3" "https://nsis.sourceforge.io/" VIAddVersionKey "InternalName" "setup-${APPNAME}" VIAddVersionKey "OriginalFilename" "setup-${APPNAME}-${VERSION}-${ARCH}.exe" Name "${APPNAME}" OutFile "setup-${APPNAME}-${VERSION}-${ARCH}.exe" InstallDir "$PROGRAMFILES\${APPNAME}" InstallDirRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "InstallLocation" RequestExecutionLevel admin !define MUI_ABORTWARNING !define MUI_LANGDLL_ALLLANGUAGES !define MUI_COMPONENTSPAGE_NODESC !define MUI_LICENSEPAGE_TEXT_TOP "" !define MUI_ICON "awf-extended-${VERSION}\data\awf.ico" !define MUI_UNICON "awf-extended-${VERSION}\data\awf.ico" ; Pages !insertmacro MUI_PAGE_WELCOME !insertmacro MUI_PAGE_LICENSE "awf-extended-${VERSION}\LICENSE" !insertmacro MUI_PAGE_COMPONENTS !insertmacro MUI_PAGE_DIRECTORY !insertmacro MUI_PAGE_INSTFILES !insertmacro MUI_PAGE_FINISH !insertmacro MUI_UNPAGE_WELCOME !insertmacro MUI_UNPAGE_CONFIRM !insertmacro MUI_UNPAGE_INSTFILES !insertmacro MUI_UNPAGE_FINISH ; Languages !insertmacro MUI_LANGUAGE "English" !insertmacro MUI_LANGUAGE "Afrikaans" !insertmacro MUI_LANGUAGE "Albanian" !insertmacro MUI_LANGUAGE "Arabic" !insertmacro MUI_LANGUAGE "Armenian" !insertmacro MUI_LANGUAGE "Asturian" !insertmacro MUI_LANGUAGE "Basque" !insertmacro MUI_LANGUAGE "Belarusian" !insertmacro MUI_LANGUAGE "Bosnian" !insertmacro MUI_LANGUAGE "Breton" !insertmacro MUI_LANGUAGE "Bulgarian" !insertmacro MUI_LANGUAGE "Catalan" !insertmacro MUI_LANGUAGE "Corsican" !insertmacro MUI_LANGUAGE "Croatian" !insertmacro MUI_LANGUAGE "Czech" !insertmacro MUI_LANGUAGE "Danish" !insertmacro MUI_LANGUAGE "Dutch" !insertmacro MUI_LANGUAGE "Esperanto" !insertmacro MUI_LANGUAGE "Estonian" !insertmacro MUI_LANGUAGE "Farsi" !insertmacro MUI_LANGUAGE "Finnish" !insertmacro MUI_LANGUAGE "French" !insertmacro MUI_LANGUAGE "Galician" !insertmacro MUI_LANGUAGE "Georgian" !insertmacro MUI_LANGUAGE "German" !insertmacro MUI_LANGUAGE "Greek" !insertmacro MUI_LANGUAGE "Hebrew" !insertmacro MUI_LANGUAGE "Hindi" !insertmacro MUI_LANGUAGE "Hungarian" !insertmacro MUI_LANGUAGE "Icelandic" !insertmacro MUI_LANGUAGE "Indonesian" !insertmacro MUI_LANGUAGE "Irish" !insertmacro MUI_LANGUAGE "Italian" !insertmacro MUI_LANGUAGE "Japanese" !insertmacro MUI_LANGUAGE "Korean" !insertmacro MUI_LANGUAGE "Kurdish" !insertmacro MUI_LANGUAGE "Latvian" !insertmacro MUI_LANGUAGE "Lithuanian" !insertmacro MUI_LANGUAGE "Luxembourgish" !insertmacro MUI_LANGUAGE "Macedonian" !insertmacro MUI_LANGUAGE "Malay" !insertmacro MUI_LANGUAGE "Mongolian" !insertmacro MUI_LANGUAGE "Norwegian" !insertmacro MUI_LANGUAGE "NorwegianNynorsk" !insertmacro MUI_LANGUAGE "Pashto" !insertmacro MUI_LANGUAGE "Polish" !insertmacro MUI_LANGUAGE "Portuguese" !insertmacro MUI_LANGUAGE "PortugueseBR" !insertmacro MUI_LANGUAGE "Romanian" !insertmacro MUI_LANGUAGE "Russian" !insertmacro MUI_LANGUAGE "ScotsGaelic" !insertmacro MUI_LANGUAGE "Serbian" !insertmacro MUI_LANGUAGE "SerbianLatin" !insertmacro MUI_LANGUAGE "SimpChinese" !insertmacro MUI_LANGUAGE "Slovak" !insertmacro MUI_LANGUAGE "Slovenian" !insertmacro MUI_LANGUAGE "Spanish" !insertmacro MUI_LANGUAGE "SpanishInternational" !insertmacro MUI_LANGUAGE "Swedish" !insertmacro MUI_LANGUAGE "Tatar" !insertmacro MUI_LANGUAGE "Thai" !insertmacro MUI_LANGUAGE "TradChinese" !insertmacro MUI_LANGUAGE "Turkish" !insertmacro MUI_LANGUAGE "Ukrainian" !insertmacro MUI_LANGUAGE "Uzbek" !insertmacro MUI_LANGUAGE "Vietnamese" !insertmacro MUI_LANGUAGE "Welsh" !insertmacro MUI_RESERVEFILE_LANGDLL ; Installer Function .onInit !insertmacro MUI_LANGDLL_DISPLAY System::Call 'kernel32::CreateMutex(p 0, i 0, t "${APPNAME}") p .r1 ?e' Pop $R0 StrCmp $R0 0 +3 MessageBox MB_OK|MB_ICONEXCLAMATION "The installer is already running." Abort FunctionEnd Function .onVerifyInstDir FindFirst $0 $1 "$INSTDIR\*.*" loop: StrCmp $1 "" done StrCmp $1 "." next StrCmp $1 ".." next FindClose $0 Abort next: FindNext $0 $1 Goto loop done: FindClose $0 FunctionEnd Section "AWF - ${VERSION} - ${ARCH} ${ARCHNAME}" SecProgram SectionIn RO SetOutPath "$INSTDIR" File "${ENGINE}\${APPNAME}.exe" SetOutPath "$INSTDIR\share\locale\fr\LC_MESSAGES\" File /r "${ENGINE}\share\locale\fr\LC_MESSAGES\awf*.mo" WriteUninstaller "$INSTDIR\uninstall.exe" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "DisplayIcon" "$\"$INSTDIR\${APPNAME}.exe,0$\"" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "DisplayName" "${APPNAME} - A widget factory" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "DisplayVersion" "${VERSION}" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "HelpLink" "https://github.com/luigifab/awf-extended" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "InstallLocation" "$\"$INSTDIR$\"" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "Publisher" "luigifab" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "QuietUninstallString" "$\"$INSTDIR\uninstall.exe$\" /S" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "UninstallString" "$\"$INSTDIR\uninstall.exe$\"" WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "NoModify" 1 WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "NoRepair" 1 ${GetSize} "$INSTDIR" "/S=0K" $0 $1 $2 WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "EstimatedSize" "$0" SectionEnd Section "Qt Core - :ENGINEVERSION: - ${ARCH} ${ARCHNAME}" SecEngine SetOutPath "$INSTDIR" File "${ENGINE}\*.dll" File /r "${ENGINE}\platforms" File /r "${ENGINE}\share" SectionEnd Section "Qt Translations" SecTranslations SetOutPath "$INSTDIR" File /r "${ENGINE}\translations" SectionEnd Section "Start menu shortcut" SecStartMenu SetOutPath "$INSTDIR" CreateShortcut "$SMPROGRAMS\${APPNAME}.lnk" "$INSTDIR\${APPNAME}.exe" SectionEnd Section "Desktop shortcut" SecDesktop SetOutPath "$INSTDIR" CreateShortcut "$DESKTOP\${APPNAME}.lnk" "$INSTDIR\${APPNAME}.exe" SectionEnd Function .onSelChange SectionGetFlags ${SecEngine} $0 IntOp $0 $0 & ${SF_SELECTED} ${If} $0 == ${SF_SELECTED} !insertmacro ClearSectionFlag ${SecTranslations} ${SF_RO} ${Else} !insertmacro ClearSectionFlag ${SecTranslations} ${SF_SELECTED} !insertmacro SetSectionFlag ${SecTranslations} ${SF_RO} ${EndIf} FunctionEnd ; Uninstaller Section "Uninstall" Delete "$SMPROGRAMS\${APPNAME}.lnk" Delete "$DESKTOP\${APPNAME}.lnk" ${If} ${FileExists} "$INSTDIR\${APPNAME}.exe" ${AndIf} ${FileExists} "$INSTDIR\uninstall.exe" RmDir /r "$INSTDIR" ${EndIf} DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" SectionEndawf-extended-4.1.0/scripts/windows/setup-awf-qt6.nsi000066400000000000000000000171331517644610000224170ustar00rootroot00000000000000; NSIS installer (v3.11+) unicode true !include "MUI2.nsh" !include "FileFunc.nsh" !define ENGINE "qt6" !define ARCH ":ARCH:" !define ARCHNAME ":ARCHNAME:" !define VERSION ":AWFVERSION:" !define APPNAME "awf-${ENGINE}" VIProductVersion "${VERSION}.0" VIFileVersion "${VERSION}.0" VIAddVersionKey "FileDescription" "Setup for A widget factory" VIAddVersionKey "FileVersion" "${VERSION}" VIAddVersionKey "ProductName" "A widget factory" VIAddVersionKey "ProductVersion" "${VERSION}" VIAddVersionKey "CompanyName" "luigifab, nullsoft" VIAddVersionKey "LegalCopyright" "2026 Fabrice Creuzot (luigifab), GNU GPL v3" VIAddVersionKey "Info1" "https://github.com/luigifab/awf-extended" VIAddVersionKey "Info2" "https://www.luigifab.fr/gtkqt/awf-extended" VIAddVersionKey "Info3" "https://nsis.sourceforge.io/" VIAddVersionKey "InternalName" "setup-${APPNAME}" VIAddVersionKey "OriginalFilename" "setup-${APPNAME}-${VERSION}-${ARCH}.exe" Name "${APPNAME}" OutFile "setup-${APPNAME}-${VERSION}-${ARCH}.exe" InstallDir "$PROGRAMFILES\${APPNAME}" InstallDirRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "InstallLocation" RequestExecutionLevel admin !define MUI_ABORTWARNING !define MUI_LANGDLL_ALLLANGUAGES !define MUI_COMPONENTSPAGE_NODESC !define MUI_LICENSEPAGE_TEXT_TOP "" !define MUI_ICON "awf-extended-${VERSION}\data\awf.ico" !define MUI_UNICON "awf-extended-${VERSION}\data\awf.ico" ; Pages !insertmacro MUI_PAGE_WELCOME !insertmacro MUI_PAGE_LICENSE "awf-extended-${VERSION}\LICENSE" !insertmacro MUI_PAGE_COMPONENTS !insertmacro MUI_PAGE_DIRECTORY !insertmacro MUI_PAGE_INSTFILES !insertmacro MUI_PAGE_FINISH !insertmacro MUI_UNPAGE_WELCOME !insertmacro MUI_UNPAGE_CONFIRM !insertmacro MUI_UNPAGE_INSTFILES !insertmacro MUI_UNPAGE_FINISH ; Languages !insertmacro MUI_LANGUAGE "English" !insertmacro MUI_LANGUAGE "Afrikaans" !insertmacro MUI_LANGUAGE "Albanian" !insertmacro MUI_LANGUAGE "Arabic" !insertmacro MUI_LANGUAGE "Armenian" !insertmacro MUI_LANGUAGE "Asturian" !insertmacro MUI_LANGUAGE "Basque" !insertmacro MUI_LANGUAGE "Belarusian" !insertmacro MUI_LANGUAGE "Bosnian" !insertmacro MUI_LANGUAGE "Breton" !insertmacro MUI_LANGUAGE "Bulgarian" !insertmacro MUI_LANGUAGE "Catalan" !insertmacro MUI_LANGUAGE "Corsican" !insertmacro MUI_LANGUAGE "Croatian" !insertmacro MUI_LANGUAGE "Czech" !insertmacro MUI_LANGUAGE "Danish" !insertmacro MUI_LANGUAGE "Dutch" !insertmacro MUI_LANGUAGE "Esperanto" !insertmacro MUI_LANGUAGE "Estonian" !insertmacro MUI_LANGUAGE "Farsi" !insertmacro MUI_LANGUAGE "Finnish" !insertmacro MUI_LANGUAGE "French" !insertmacro MUI_LANGUAGE "Galician" !insertmacro MUI_LANGUAGE "Georgian" !insertmacro MUI_LANGUAGE "German" !insertmacro MUI_LANGUAGE "Greek" !insertmacro MUI_LANGUAGE "Hebrew" !insertmacro MUI_LANGUAGE "Hindi" !insertmacro MUI_LANGUAGE "Hungarian" !insertmacro MUI_LANGUAGE "Icelandic" !insertmacro MUI_LANGUAGE "Indonesian" !insertmacro MUI_LANGUAGE "Irish" !insertmacro MUI_LANGUAGE "Italian" !insertmacro MUI_LANGUAGE "Japanese" !insertmacro MUI_LANGUAGE "Korean" !insertmacro MUI_LANGUAGE "Kurdish" !insertmacro MUI_LANGUAGE "Latvian" !insertmacro MUI_LANGUAGE "Lithuanian" !insertmacro MUI_LANGUAGE "Luxembourgish" !insertmacro MUI_LANGUAGE "Macedonian" !insertmacro MUI_LANGUAGE "Malay" !insertmacro MUI_LANGUAGE "Mongolian" !insertmacro MUI_LANGUAGE "Norwegian" !insertmacro MUI_LANGUAGE "NorwegianNynorsk" !insertmacro MUI_LANGUAGE "Pashto" !insertmacro MUI_LANGUAGE "Polish" !insertmacro MUI_LANGUAGE "Portuguese" !insertmacro MUI_LANGUAGE "PortugueseBR" !insertmacro MUI_LANGUAGE "Romanian" !insertmacro MUI_LANGUAGE "Russian" !insertmacro MUI_LANGUAGE "ScotsGaelic" !insertmacro MUI_LANGUAGE "Serbian" !insertmacro MUI_LANGUAGE "SerbianLatin" !insertmacro MUI_LANGUAGE "SimpChinese" !insertmacro MUI_LANGUAGE "Slovak" !insertmacro MUI_LANGUAGE "Slovenian" !insertmacro MUI_LANGUAGE "Spanish" !insertmacro MUI_LANGUAGE "SpanishInternational" !insertmacro MUI_LANGUAGE "Swedish" !insertmacro MUI_LANGUAGE "Tatar" !insertmacro MUI_LANGUAGE "Thai" !insertmacro MUI_LANGUAGE "TradChinese" !insertmacro MUI_LANGUAGE "Turkish" !insertmacro MUI_LANGUAGE "Ukrainian" !insertmacro MUI_LANGUAGE "Uzbek" !insertmacro MUI_LANGUAGE "Vietnamese" !insertmacro MUI_LANGUAGE "Welsh" !insertmacro MUI_RESERVEFILE_LANGDLL ; Installer Function .onInit !insertmacro MUI_LANGDLL_DISPLAY System::Call 'kernel32::CreateMutex(p 0, i 0, t "${APPNAME}") p .r1 ?e' Pop $R0 StrCmp $R0 0 +3 MessageBox MB_OK|MB_ICONEXCLAMATION "The installer is already running." Abort FunctionEnd Function .onVerifyInstDir FindFirst $0 $1 "$INSTDIR\*.*" loop: StrCmp $1 "" done StrCmp $1 "." next StrCmp $1 ".." next FindClose $0 Abort next: FindNext $0 $1 Goto loop done: FindClose $0 FunctionEnd Section "AWF - ${VERSION} - ${ARCH} ${ARCHNAME}" SecProgram SectionIn RO SetOutPath "$INSTDIR" File "${ENGINE}\${APPNAME}.exe" SetOutPath "$INSTDIR\share\locale\fr\LC_MESSAGES\" File /r "${ENGINE}\share\locale\fr\LC_MESSAGES\awf*.mo" WriteUninstaller "$INSTDIR\uninstall.exe" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "DisplayIcon" "$\"$INSTDIR\${APPNAME}.exe,0$\"" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "DisplayName" "${APPNAME} - A widget factory" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "DisplayVersion" "${VERSION}" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "HelpLink" "https://github.com/luigifab/awf-extended" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "InstallLocation" "$\"$INSTDIR$\"" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "Publisher" "luigifab" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "QuietUninstallString" "$\"$INSTDIR\uninstall.exe$\" /S" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "UninstallString" "$\"$INSTDIR\uninstall.exe$\"" WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "NoModify" 1 WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "NoRepair" 1 ${GetSize} "$INSTDIR" "/S=0K" $0 $1 $2 WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "EstimatedSize" "$0" SectionEnd Section "Qt Core - :ENGINEVERSION: - ${ARCH} ${ARCHNAME}" SecEngine SetOutPath "$INSTDIR" File "${ENGINE}\*.dll" File /r "${ENGINE}\platforms" File /r "${ENGINE}\share" SectionEnd Section "Qt Translations" SecTranslations SetOutPath "$INSTDIR" File /r "${ENGINE}\translations" SectionEnd Section "Start menu shortcut" SecStartMenu SetOutPath "$INSTDIR" CreateShortcut "$SMPROGRAMS\${APPNAME}.lnk" "$INSTDIR\${APPNAME}.exe" SectionEnd Section "Desktop shortcut" SecDesktop SetOutPath "$INSTDIR" CreateShortcut "$DESKTOP\${APPNAME}.lnk" "$INSTDIR\${APPNAME}.exe" SectionEnd Function .onSelChange SectionGetFlags ${SecEngine} $0 IntOp $0 $0 & ${SF_SELECTED} ${If} $0 == ${SF_SELECTED} !insertmacro ClearSectionFlag ${SecTranslations} ${SF_RO} ${Else} !insertmacro ClearSectionFlag ${SecTranslations} ${SF_SELECTED} !insertmacro SetSectionFlag ${SecTranslations} ${SF_RO} ${EndIf} FunctionEnd ; Uninstaller Section "Uninstall" Delete "$SMPROGRAMS\${APPNAME}.lnk" Delete "$DESKTOP\${APPNAME}.lnk" ${If} ${FileExists} "$INSTDIR\${APPNAME}.exe" ${AndIf} ${FileExists} "$INSTDIR\uninstall.exe" RmDir /r "$INSTDIR" ${EndIf} DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" SectionEndawf-extended-4.1.0/scripts/windows/zip.sh000066400000000000000000000202251517644610000204130ustar00rootroot00000000000000#!/bin/bash # # Windows XP + mingw32 # # 1/ download mingw-get-setup.exe from https://sourceforge.net/projects/mingw/files/Installer/ (2013-10-04) # install in C:\MinGw # # 2/ run C:\MinGW\msys\1.0\msys.bat # then run: mingw-get.exe install mingw32-gcc-bin mingw32-gcc-g++-bin mingw32-make mingw32-gettext mingw32-gettext-dev msys-base msys-autoconf msys-automake msys-libtool or install them from MinGW GUI # # 3/ download pkg.m4 from https://raw.githubusercontent.com/pkgconf/pkgconf/refs/heads/master/pkg.m4 # put the file in C:\MinGW\msys\1.0\share\aclocal # # 4/ download gtk+-bundle_2.24.10-20120208_win32.zip from https://download.gnome.org/binaries/win32/gtk+/2.24/ # extract the archive in C:\GTK2 # # 5/ download gtk+-bundle_3.6.4-20130513_win32.zip from https://tarnyko.net/dl/gtk3.htm # extract the archive in C:\GTK3 # copy C:\GTK3\share\themes\Default to C:\GTK3\share\themes\gtk-win32-xp # # 6/ download qt-opensource-windows-x86-mingw482_opengl-5.3.2.exe from https://download.qt.io/new_archive/qt/5.3/5.3.2/ # install in C:\tempQT # move C:\tempQT\5.3\mingw482_32 to C:\QT5 # uninstall qt-opensource-windows-x86-mingw482_opengl-5.3.2.exe and remove C:\tempQT # # 7/ download pkg-config-lite-0.28-1_bin-win32.zip from https://sourceforge.net/projects/pkgconfiglite/files/0.28-1/ # extract the archive in C:\QT5 # # 8/ download and install NSIS from https://sourceforge.net/projects/nsis/files/ # # 9/ open My Computer → Properties → Advanced → Environment Variables, in PATH add # ;C:\MinGW\bin;C:\MinGW\msys\1.0\bin;C:\Program Files\NSIS # # # To manually build with GTK2 run: C:\MinGW\msys\1.0\msys.bat # cd /c/awf-gtk # export PATH=/c/GTK2/bin:$PATH # export PKG_CONFIG_PATH=/c/GTK2/lib/pkgconfig # bash build.sh LDFLAGS="-mwindows" --enable-only-gtk2 # # To manually build with GTK3 run: C:\MinGW\msys\1.0\msys.bat # cd /c/awf-gtk # export PATH=/c/GTK3/bin:$PATH # export PKG_CONFIG_PATH=/c/GTK3/lib/pkgconfig # bash build.sh LDFLAGS="-mwindows" --enable-only-gtk3 # # To manually build with QT5 run: C:\MinGW\msys\1.0\msys.bat # cd /c/awf-gtk # export PATH=/c/QT5/bin:$PATH # export PKG_CONFIG_PATH=/c/QT5/lib/pkgconfig # bash build.sh LDFLAGS="-mwindows -static-libstdc++" --enable-only-qt5 # # To build with GTK2/GTK3/QT5 with this script run: C:\MinGW\msys\1.0\msys.bat # cd /c/awf-gtk # bash scripts/windows/zip.sh cd "$(dirname "$0")" originalpath="$PATH" version="4.1.0" rm -rf builder/* mkdir -p builder # copy to a tmp directory if [ true ]; then cd builder wget https://github.com/luigifab/awf-extended/archive/v$version/awf-extended-$version.tar.gz tar xzf awf-extended-$version.tar.gz cd .. else mkdir builder/awf-extended-$version cp -r ../../* builder/awf-extended-$version/ fi # search things function copydeps { # 1=file 2=dest 3=root objdump.exe -p "$1" | grep -i 'DLL Name' | awk '{print $NF}' | grep -v -i '^\(libgcc\|libstdc++\)' | while read dll do if [ -f "$3/$dll" ] && [ ! -f "$2/$dll" ]; then echo " - $dll" cp -a "$3/$dll" "$2" copydeps "$3/$dll" "$2" "$3" fi done } if [ -d "/mingw64" ]; then host="--host=x86_64-w64-mingw32" else host="" fi arch=$(echo "$PROCESSOR_ARCHITECTURE" | tr '[:upper:]' '[:lower:]') [ "$arch" = "x86" ] && [ -n "$PROCESSOR_ARCHITEW6432" ] && arch=$(echo "$PROCESSOR_ARCHITEW6432" | tr '[:upper:]' '[:lower:]') case "$arch" in x86|i386|i486|i586|i686) arch="x86" archname="(32 bits)" ;; amd64|x86_64) arch="x86_64" archname="(64 bits)" ;; arm64|aarch64) arch="arm64" archname="(64 bits)" ;; *) arch=$(uname -m 2>/dev/null) case "$arch" in i386|i486|i586|i686) arch="x86" archname="(32 bits)" ;; x86_64|amd64) arch="x86_64" archname="(64 bits)" ;; aarch64|arm64) arch="arm64" archname="(64 bits)" ;; *) arch="unknown" archname="" ;; esac ;; esac # create packages cd builder/awf-extended-$version/ for engine in "2" "3" "4"; do printf "\n\n############################################################ awf-gtk$engine\n\n" if [ -d "/mingw64" ]; then ROOT=/mingw64 else ROOT=/c/GTK$engine if [ ! -d "$ROOT" ]; then echo "$ROOT not found, skipping..." continue fi fi export PATH=$ROOT/bin:$PATH export PKG_CONFIG_PATH=$ROOT/lib/pkgconfig export PKG_CONFIG_LIBDIR=$ROOT/lib/pkgconfig autoreconf -fi && ./configure $host LDFLAGS="-mwindows" --enable-only-gtk$engine && make -s result=$? if [ $result -eq 0 ]; then echo "Success..." echo " awf-gtk$engine.exe" mkdir ../gtk$engine mv src/awf-gtk$engine.exe ../gtk$engine/ copydeps ../gtk$engine/awf-gtk$engine.exe ../gtk$engine/ $ROOT/bin/ if [ $engine = "2" ]; then echo " - lib/engines" mkdir -p ../gtk$engine/share mkdir -p ../gtk$engine/lib/gtk-2.0/2.10.0/engines cp -a $ROOT/lib/gtk-2.0/2.10.0/engines/*.dll ../gtk$engine/lib/gtk-2.0/2.10.0/engines/ elif [ $engine = "3" ]; then echo " - share/schemas" mkdir -p ../gtk$engine/share/glib-2.0/schemas cp -a $ROOT/share/glib-2.0/schemas/gschemas.compiled ../gtk$engine/share/glib-2.0/schemas/ elif [ $engine = "4" ]; then echo " - share/schemas" mkdir -p ../gtk$engine/share/glib-2.0/schemas cp -a $ROOT/share/glib-2.0/schemas/gschemas.compiled ../gtk$engine/share/glib-2.0/schemas/ fi echo " - share/themes" cp -ar $ROOT/share/themes/ ../gtk$engine/share/ echo " - share/locale" cp -ar $ROOT/share/locale/ ../gtk$engine/share/ echo " - msgfmt" for file in src/po/*.po; do code=`basename "${file}" .po` mkdir -p ../gtk$engine/share/locale/$code/LC_MESSAGES msgfmt src/po/$code.po -o ../gtk$engine/share/locale/$code/LC_MESSAGES/awf-gtk$engine.mo done echo "Nsis..." cp ../../setup-awf-gtk$engine.nsi ../setup-awf-gtk$engine.nsi enginever=$(strings.exe -e l ../gtk$engine/libgtk*.dll | grep -A1 "ProductVersion" | tail -1) sed -i 's/:ENGINEVERSION:/'"$enginever"'/g' ../setup-awf-gtk$engine.nsi sed -i 's/:AWFVERSION:/'"$version"'/g' ../setup-awf-gtk$engine.nsi sed -i 's/:ARCHNAME:/'"$archname"'/g' ../setup-awf-gtk$engine.nsi sed -i 's/:ARCH:/'"$arch"'/g' ../setup-awf-gtk$engine.nsi makensis -V1 ../setup-awf-gtk$engine.nsi result=$? if [ $result -eq 0 ]; then rm ../setup-awf-gtk$engine.nsi echo " setup-awf-gtk$engine.exe" fi fi export PATH=$originalpath done for engine in "5" "6"; do printf "\n\n############################################################# awf-qt$engine\n\n" if [ -d "/mingw64" ]; then ROOT=/mingw64 ROOTRANS=$ROOT/share/qt5/ ROOTPLUG=$ROOT/share/qt5/ else ROOT=/c/QT$engine ROOTRANS=$ROOT/ ROOTPLUG=$ROOT/ if [ ! -d "$ROOT" ]; then echo "WARNING: $ROOT not found, skipping..." continue fi fi export PATH=$ROOT/bin:$PATH export PKG_CONFIG_PATH=$ROOT/lib/pkgconfig export PKG_CONFIG_LIBDIR=$ROOT/lib/pkgconfig autoreconf -fi && ./configure $host LDFLAGS="-mwindows -static-libstdc++" --enable-only-qt$engine && make -s result=$? if [ $result -eq 0 ]; then echo "Success..." echo " awf-qt$engine.exe" mkdir ../qt$engine mv src/awf-qt$engine.exe ../qt$engine/ copydeps ../qt$engine/awf-qt$engine.exe ../qt$engine/ $ROOT/bin/ echo " - plugins/platforms" mkdir -p ../qt$engine/platforms cp -a $ROOTPLUG/plugins/platforms/qwindows*.dll ../qt$engine/platforms/ echo " - translations" cp -ar $ROOTRANS/translations/ ../qt$engine/ echo " - msgfmt" for file in src/po/*.po; do code=`basename "${file}" .po` mkdir -p ../qt$engine/share/locale/$code/LC_MESSAGES msgfmt src/po/$code.po -o ../qt$engine/share/locale/$code/LC_MESSAGES/awf-qt$engine.mo done echo "Nsis..." cp ../../setup-awf-qt$engine.nsi ../setup-awf-qt$engine.nsi enginever=$(strings.exe -e l ../qt$engine/*Core*.dll | grep -A1 "ProductVersion" | tail -1) sed -i 's/:ENGINEVERSION:/'"$enginever"'/g' ../setup-awf-qt$engine.nsi sed -i 's/:AWFVERSION:/'"$version"'/g' ../setup-awf-qt$engine.nsi sed -i 's/:ARCHNAME:/'"$archname"'/g' ../setup-awf-qt$engine.nsi sed -i 's/:ARCH:/'"$arch"'/g' ../setup-awf-qt$engine.nsi makensis -V1 ../setup-awf-qt$engine.nsi result=$? if [ $result -eq 0 ]; then rm ../setup-awf-qt$engine.nsi echo " setup-awf-qt$engine.exe" fi fi export PATH=$originalpath done cd ../.. printf "\n\n" ls -dlth "$PWD"/builder/*.exe rm -rf builder/awf-extended-$version/awf-extended-4.1.0/src/000077500000000000000000000000001517644610000146625ustar00rootroot00000000000000awf-extended-4.1.0/src/Makefile.am000066400000000000000000000053661517644610000167300ustar00rootroot00000000000000bin_PROGRAMS = BUILT_SOURCES = if GTK5 bin_PROGRAMS += awf-gtk@GTK5_SUFFIX@ awf_gtk@GTK5_SUFFIX@_SOURCES = awf-gtk5.c awf_gtk@GTK5_SUFFIX@_CPPFLAGS = $(GTK5_CFLAGS) $(LIBNOTIFY_CFLAGS) -I/usr/include/gtk-5.0/unix-print awf_gtk@GTK5_SUFFIX@_LDADD = $(GTK5_LIBS) $(LIBNOTIFY_LIBS) if WINDOWS awf_gtk@GTK5_SUFFIX@_LDADD += awf-gtk5-res.o awf-gtk5-res.o: awf.rc windres -c 65001 -DENGINE=GTK5 $< -o $@ endif endif if GTK4 bin_PROGRAMS += awf-gtk@GTK4_SUFFIX@ awf_gtk@GTK4_SUFFIX@_SOURCES = awf-gtk4.c awf_gtk@GTK4_SUFFIX@_CPPFLAGS = $(GTK4_CFLAGS) $(LIBNOTIFY_CFLAGS) -I/usr/include/gtk-4.0/unix-print awf_gtk@GTK4_SUFFIX@_LDADD = $(GTK4_LIBS) $(LIBNOTIFY_LIBS) if WINDOWS awf_gtk@GTK4_SUFFIX@_LDADD += awf-gtk4-res.o awf-gtk4-res.o: awf.rc windres -c 65001 -DENGINE=GTK4 $< -o $@ endif endif if GTK3 bin_PROGRAMS += awf-gtk@GTK3_SUFFIX@ awf_gtk@GTK3_SUFFIX@_SOURCES = awf-gtk3.c awf_gtk@GTK3_SUFFIX@_CPPFLAGS = $(GTK3_CFLAGS) $(LIBNOTIFY_CFLAGS) -I/usr/include/gtk-3.0/unix-print awf_gtk@GTK3_SUFFIX@_LDADD = $(GTK3_LIBS) $(LIBNOTIFY_LIBS) if WINDOWS awf_gtk@GTK3_SUFFIX@_LDADD += awf-gtk3-res.o awf-gtk3-res.o: awf.rc windres -c 65001 -DENGINE=GTK3 $< -o $@ endif endif if GTK2 bin_PROGRAMS += awf-gtk@GTK2_SUFFIX@ awf_gtk@GTK2_SUFFIX@_SOURCES = awf-gtk2.c awf_gtk@GTK2_SUFFIX@_CPPFLAGS = $(GTK2_CFLAGS) $(LIBNOTIFY_CFLAGS) -I/usr/include/gtk-unix-print-2.0 awf_gtk@GTK2_SUFFIX@_LDADD = $(GTK2_LIBS) $(LIBNOTIFY_LIBS) if WINDOWS awf_gtk@GTK2_SUFFIX@_LDADD += awf-gtk2-res.o awf-gtk2-res.o: awf.rc windres -c 65001 -DENGINE=GTK2 $< -o $@ endif endif if QT7 AM_CXXFLAGS = -fPIC -std=c++17 bin_PROGRAMS += awf-qt@QT7_SUFFIX@ BUILT_SOURCES += awf-qt7.moc awf-qt7.moc: awf-qt7.cpp $(QT7_MOC) $(QT7_CFLAGS) $< -o $@ awf_qt@QT7_SUFFIX@_SOURCES = awf-qt7.cpp awf_qt@QT7_SUFFIX@_CPPFLAGS = $(QT7_CFLAGS) awf_qt@QT7_SUFFIX@_LDADD = $(QT7_LIBS) if WINDOWS awf_qt@QT7_SUFFIX@_LDADD += awf-qt7-res.o -lintl awf-qt7-res.o: awf.rc windres -c 65001 -DENGINE=QT7 $< -o $@ endif endif if QT6 AM_CXXFLAGS = -fPIC -std=c++17 bin_PROGRAMS += awf-qt@QT6_SUFFIX@ BUILT_SOURCES += awf-qt6.moc awf-qt6.moc: awf-qt6.cpp $(QT6_MOC) $(QT6_CFLAGS) $< -o $@ awf_qt@QT6_SUFFIX@_SOURCES = awf-qt6.cpp awf_qt@QT6_SUFFIX@_CPPFLAGS = $(QT6_CFLAGS) awf_qt@QT6_SUFFIX@_LDADD = $(QT6_LIBS) if WINDOWS awf_qt@QT6_SUFFIX@_LDADD += awf-qt6-res.o -lintl awf-qt6-res.o: awf.rc windres -c 65001 -DENGINE=QT6 $< -o $@ endif endif if QT5 AM_CXXFLAGS = -fPIC bin_PROGRAMS += awf-qt@QT5_SUFFIX@ BUILT_SOURCES += awf-qt5.moc awf-qt5.moc: awf-qt5.cpp $(QT5_MOC) $(QT5_CFLAGS) $< -o $@ awf_qt@QT5_SUFFIX@_SOURCES = awf-qt5.cpp awf_qt@QT5_SUFFIX@_CPPFLAGS = $(QT5_CFLAGS) awf_qt@QT5_SUFFIX@_LDADD = $(QT5_LIBS) if WINDOWS awf_qt@QT5_SUFFIX@_LDADD += awf-qt5-res.o -lintl awf-qt5-res.o: awf.rc windres -c 65001 -DENGINE=QT5 $< -o $@ endif endifawf-extended-4.1.0/src/awf-gtk2.c000066400000000000000000003031651517644610000164600ustar00rootroot00000000000000/** * Forked M/10/03/2020 * Updated V/01/05/2026 * * Copyright 2020-2026 | Fabrice Creuzot (luigifab) * https://github.com/luigifab/awf-extended * https://www.luigifab.fr/gtkqt/awf-extended * * Forked from * Copyright 2011-2017 | Valère Monseur (valr) * https://github.com/valr/awf * * Forked from * AWF is originally based on the code from The Widget Factory * created by Richard Stellingwerff * * This program is free software, you can redistribute it or modify * it under the terms of the GNU General Public License (GPL) as published * by the free software foundation, either version 3 of the license, or * (at your option) any later version. * * This program is distributed in the hope that 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 (GPL) for more details. * * * Translations update: * https://github.com/GNOME/gtk/blob/3.24.50/po/fr.po * xgettext --keyword=_app -d awf -o src/awf.pot -k_ -s src/awf-*.c* * msgmerge src/po/fr.po src/awf.pot -o src/po/fr.po * msgfmt src/po/fr.po -o src/fr/LC_MESSAGES/awf.mo * * Tested with build.sh (via VirtualBox 7) with: * Debian Testing 64 (1536 MB) GTK 2.24/3.24/4.22 + GLIB 2.88 + Pango 1.57 * Fedora Rawhide 64 (1536 MB) GTK 2.24/3.24/4.23 + GLIB 2.88 + Pango 1.57 * Ubuntu 26.04 Resolute Raccoon 64 (4096 MB) GTK 2.24/3.24/4.22 + GLIB 2.87 + Pango 1.56 * Ubuntu 25.10 Questing Quokka 64 (4096 MB) GTK 2.24/3.24/4.20 + GLIB 2.86 + Pango 1.56 * Ubuntu 25.04 Plucky Puffin 64 (4096 MB) GTK 2.24/3.24/4.18 + GLIB 2.84 + Pango 1.56 * Ubuntu 24.10 Oracular Oriole 64 (4096 MB) GTK 2.24/3.24/4.16 + GLIB 2.82 + Pango 1.54 * Ubuntu 24.04 Noble Numbat 64 (4096 MB) GTK 2.24/3.24/4.14 + GLIB 2.80 + Pango 1.52 * Ubuntu 23.10 Mantic Minotaur 64 (3072 MB) GTK 2.24/3.24/4.12 + GLIB 2.78 + Pango 1.51 * Ubuntu 23.04 Lunar Lobster 64 (3072 MB) GTK 2.24/3.24/4.10 + GLIB 2.76 + Pango 1.50 * Ubuntu 22.10 Kinetic Kudu 64 (2176 MB) GTK 2.24/3.24/4.8 + GLIB 2.74 + Pango 1.50 * Ubuntu 22.04 Jammy Jellyfish 64 (2176 MB) GTK 2.24/3.24/4.6 + GLIB 2.72 + Pango 1.50 * Ubuntu 21.10 Impish Indri 64 (2176 MB) GTK 2.24/3.24/4.4 + GLIB 2.68 + Pango 1.48 * Ubuntu 21.04 Hirsute Hippo 64 (2176 MB) GTK 2.24/3.24/4.0 + GLIB 2.68 + Pango 1.48 * Ubuntu 17.04 Zesty Zapus 32 (1536 MB) GTK 2.24/3.22 + GLIB 2.52 + Pango 1.40 * Ubuntu 16.10 Yakkety Yak 32 (1536 MB) GTK 2.24/3.20 + GLIB 2.50 + Pango 1.40 * Ubuntu 16.04 Xenial Xerus 32 (1536 MB) GTK 2.24/3.18 + GLIB 2.48 + Pango 1.38 * Ubuntu 15.10 Wily Werewolf 32 (1024 MB) GTK 2.24/3.16 + GLIB 2.46 + Pango 1.36 * Ubuntu 15.04 Vivid Vervet 32 (1024 MB) GTK 2.24/3.14 + GLIB 2.44 + Pango 1.36 * Ubuntu 14.10 Utopic Unicorn 32 (1024 MB) GTK 2.24/3.12 + GLIB 2.42 + Pango 1.36 * Ubuntu 14.04 Trusty Tahr 32 (1024 MB) GTK 2.24/3.10 + GLIB 2.40 + Pango 1.36 * Ubuntu 13.10 Saucy Salamander 32 (1024 MB) GTK 2.24/3.8 + GLIB 2.38 + Pango 1.32 * Ubuntu 13.04 Raring Ringtail 32 (1024 MB) GTK 2.24/3.6 + GLIB 2.36 + Pango 1.32 * Ubuntu 12.04 Precise Pangolin 32 (1024 MB) GTK 2.24/3.4 + GLIB 2.32 + Pango 1.30 * Ubuntu 11.10 Oneiric Ocelot 32 (1024 MB) GTK 2.24/3.2 + GLIB 2.30 + Pango 1.29 * Ubuntu 11.04 Natty Narwhal 32 (1024 MB) GTK 2.24/3.0 + GLIB 2.28 + Pango 1.28 * Windows XP SP3 MinGW/msys (2048 MB) GTK 2.24 + GLIB 2.28 + Pango 1.29 & GTK 3.6 + GLIB 2.34 + Pango 1.30 */ #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wdeprecated-declarations" #include #include #include #include #include #include #include #if defined (G_OS_WIN32) #include #elif defined (G_OS_UNIX) #include #endif #if defined (G_OS_UNIX) && GLIB_CHECK_VERSION (2,30,0) #include #endif #pragma GCC diagnostic pop #define GTK_DIRNAME "gtk-2.0" #define GETTEXT_PACKAGE "awf-gtk2" #define BOXH (gtk_hbox_new (FALSE, 0)) #define BOXV (gtk_vbox_new (FALSE, 0)) #define SEPH (gtk_hseparator_new ()) #define SEPV (gtk_vseparator_new ()) #define PANEH (gtk_hpaned_new ()) #define PANEV (gtk_vpaned_new ()) #define GDK_KEY_F1 0xffbe #define GDK_KEY_F2 0xffbf #define GDK_KEY_F3 0xffc0 #define GDK_KEY_F4 0xffc1 #define GDK_KEY_F5 0xffc2 #define GDK_KEY_F6 0xffc3 #define GDK_KEY_F7 0xffc4 #define GDK_KEY_F8 0xffc5 #define GDK_KEY_F9 0xffc6 #define GDK_KEY_F10 0xffc7 #define GDK_KEY_F11 0xffc8 #define GDK_KEY_F12 0xffc9 #define GDK_KEY_Delete 0xffff #define GDK_KEY_KP_Delete 0xff9f #define GDK_KEY_BackSpace 0xff08 #define AWF_OPEN "/Test/Open" #define AWF_SAVE "/Test/Save" #define AWF_REFR "/Test/Refresh" #define AWF_RECE "/Test/Recent" #define AWF_CALE "/Test/Calendar" #define AWF_SCAL "/Test/Scales" #define AWF_PROP "/Test/Properties" #define AWF_PRSE "/Test/PrintSetup" #define AWF_PRIN "/Test/Print" #define AWF_MCUT "/Test/More/Cut" #define AWF_MCOP "/Test/More/Copy" #define AWF_MPAS "/Test/More/Paste" #define AWF_CLOS "/Test/Close" #define AWF_QUIT "/Test/Quit" #define AWF_INSP "/Test/Inspector" #define AWF_ABOU "/Test/About" #define AWF_ACCEL_OPEN "O" #define AWF_ACCEL_SAVE "S" #define AWF_ACCEL_REFR "F5" #define AWF_ACCEL_RECE NULL #define AWF_ACCEL_CALE NULL #define AWF_ACCEL_SCAL NULL #define AWF_ACCEL_PROP "Return" #define AWF_ACCEL_PRSE "P" #define AWF_ACCEL_PRIN "P" #define AWF_ACCEL_MCUT "X" #define AWF_ACCEL_MCOP "C" #define AWF_ACCEL_MPAS "V" #define AWF_ACCEL_CLOS "W" #define AWF_ACCEL_QUIT "Q" #define AWF_ACCEL_INSP "F12" #define AWF_ACCEL_ABOU "F1" // @see https://stackoverflow.com/a/10018581/2980105 #define _app(x) dgettext(GETTEXT_PACKAGE, x) #define _gtk(x) dgettext("gtk20", x) // global variables static gboolean awf_debug = FALSE; static gboolean awf_trace = FALSE; static GHashTable *hash_system_theme = NULL; static GHashTable *hash_user_theme = NULL; static GList *list_system_theme = NULL; static GList *list_user_theme = NULL; static GtkWidget *window = NULL, *menubar = NULL, *toolbar = NULL, *toolbarentry = NULL, *statusbar = NULL; static GtkWidget *button15 = NULL, *button16 = NULL; static GtkWidget *progress1 = NULL, *progress2 = NULL, *progress3 = NULL, *progress4 = NULL, *progress8 = NULL, *progress9 = NULL; static GtkWidget *scale1 = NULL, *scale2 = NULL, *scale3 = NULL, *scale4 = NULL, *scale5 = NULL, *scale6 = NULL; static GtkWidget *notebook1 = NULL, *notebook2 = NULL, *notebook3 = NULL, *notebook4 = NULL; static GtkWidget *current_menuitem = NULL; static int current_direction = 0; // GTK_TEXT_DIR_NONE static gchar *current_theme = NULL; static gchar *opt_theme = NULL; static gchar *opt_screenshot = NULL; static gboolean allow_update_theme = TRUE; static gboolean allow_update_values = TRUE; static gboolean must_save_accels = FALSE; // global functions static void awf_load_theme(GHashTable* hashtable, gchar *directory); static inline int awf_compare_theme(gconstpointer a, gconstpointer b); static void notify_updated_gtktheme(GSettings *settings, gchar *key); static void update_text_direction(int direction); static void update_theme(gchar *new_theme); static void update_statusbar(gchar *message); static void update_values(GtkRange *range); static void update_widgets(); static void update_marks(GtkScale *scale, gboolean value, int position); static void display_notification(); static void find_and_update_labels(GtkWidget *widget); static gboolean find_and_check_menuradio(GtkWidget *menu, gchar *search); static gboolean on_sighup(void *data); static gboolean take_screenshot(); static void create_window(gpointer app); static void create_widgets(GtkWidget *root); static void add_to(GtkWidget *root, GtkWidget *widget, gboolean expand, gboolean fill, guint padding, guint spacing); static void add_progressbar_and_entrybar(); static void create_toolbar(GtkWidget *root); static void create_combos_entries(GtkWidget *root); static void create_spinbuttons(GtkWidget *root); static void create_checkbuttons(GtkWidget *root); static void create_radiobuttons(GtkWidget *root); static void create_otherbuttons(GtkWidget *root1, GtkWidget *root2, GtkWidget *root3, GtkWidget *root4, GtkWidget *root5); static void create_progressbars(GtkWidget *root1, GtkWidget *root2, GtkWidget *root3, GtkWidget *root4); static void create_labels(GtkWidget *root); static void create_spinners(GtkWidget *root); static void create_expander(GtkWidget *root); static void create_frames(GtkWidget *root1, GtkWidget *root2); static void create_notebooks(GtkWidget *root1, GtkWidget *root2); static void create_notebook_tab(GtkWidget *notebook, gchar *text, GtkWidget *content, gboolean close); static void create_treview(GtkWidget *root); static void create_scales(GtkWidget *notebook, gchar *text, int position); static GtkWidget* create_horizontal_scale(gdouble value, gboolean draw, gboolean inverted, int position); static GtkWidget* create_vertical_scale(gdouble value, gboolean draw, gboolean inverted, int position); static void create_traditional_menubar(GtkWidget *root); static GtkWidget* create_menu(GtkWidget *root, gchar *text, gboolean cca); static GtkWidget* create_menuitem_tearoff(GtkWidget *menu); static GtkWidget* create_menuitem_check(GtkWidget *menu, gchar *text, gboolean free, gboolean chk, gboolean ist, gboolean dsb); static GtkWidget* create_menuitem_radio(GtkWidget *menu, gchar *text, gboolean free, gboolean chk, gboolean ist, gboolean dsb, GSList *group); static GtkWidget* create_menuitem(GtkWidget *menu, gchar *text, gboolean dsb, gchar *accel, gchar *kmp, GCallback function); static void accels_load(); static void accels_select(GtkWidget *widget); static void accels_deselect(GtkWidget *widget); static void accels_change(GtkWidget *widget, GdkEventKey *event); static void accels_save(); static void dialog_open(); static void dialog_recent(); static void dialog_save(); static void dialog_message(); static void dialog_page_setup(); static void dialog_print(); static void dialog_about(); static void dialog_calendar(); static void dialog_scales(); // run run run int main(int argc, gchar **argv) { awf_debug = (g_getenv("AWF_DEBUG") != NULL); awf_trace = (g_getenv("AWF_TRACE") != NULL); if (awf_trace) g_printf("» main()\n"); current_theme = g_strdup("auto"); opt_theme = g_strdup("auto"); int opt = 0, status = 0; hash_system_theme = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free); hash_user_theme = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free); GList *iterator = NULL; gchar *directory; // load available system themes (/usr/share/themes) directory = gtk_rc_get_theme_dir(); awf_load_theme(hash_system_theme, directory); g_free(directory); g_hash_table_remove(hash_system_theme, "Default"); g_hash_table_remove(hash_system_theme, "Emacs"); list_system_theme = g_list_sort(g_hash_table_get_keys(hash_system_theme), (GCompareFunc) awf_compare_theme); // load available user themes (HOME/.themes) directory = g_build_filename(g_get_home_dir(), ".themes", NULL); awf_load_theme(hash_user_theme, directory); g_free(directory); list_user_theme = g_list_sort(g_hash_table_get_keys(hash_user_theme), (GCompareFunc) awf_compare_theme); // locale setlocale(LC_ALL, ""); #if defined (G_OS_WIN32) directory = g_build_filename("share", "locale", NULL); bindtextdomain(GETTEXT_PACKAGE, directory); g_free(directory); #endif bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8"); textdomain(GETTEXT_PACKAGE); // init static struct option options[] = { {"help", no_argument, NULL, 'x'}, {"version", no_argument, NULL, 'v'}, {"list-themes", no_argument, NULL, 'l'}, {"theme", required_argument, NULL, 't'}, {"screenshot", required_argument, NULL, 's'}, {"ltr", no_argument, NULL, 'y'}, {"rtl", no_argument, NULL, 'z'}, {NULL, 0, NULL, 0} }; gchar *c_version, *t1, *t2, *t3, *t4; while ((opt = getopt_long(argc, argv, "hvlt:s:xyz", options, NULL)) != -1) { switch (opt) { // --version -v case 'v': g_printf("%s\n", VERSION); return status; // --list-themes -l case 'l': for (iterator = list_system_theme; iterator; iterator = iterator->next) g_printf("%s\n", (gchar*) iterator->data); for (iterator = list_user_theme; iterator; iterator = iterator->next) g_printf("%s\n", (gchar*) iterator->data); return status; // --theme -t case 't': if (g_hash_table_lookup(hash_system_theme, optarg) || g_hash_table_lookup(hash_user_theme, optarg)) { g_free(opt_theme); opt_theme = g_strdup(optarg); } break; // --screenshot -s case 's': opt_screenshot = g_strdup(optarg); break; // --ltr case 'y': current_direction = 1; // GTK_TEXT_DIR_LTR break; // --rtl case 'z': current_direction = 2; // GTK_TEXT_DIR_RTL break; // --help (via GtkApplication) -h // --help/x not supported by GTK 2.x case 'x': case 'h': default: #ifdef __STDC_VERSION__ if (__STDC_VERSION__ >= 202311L) c_version = "C23"; else if (__STDC_VERSION__ >= 201710L) c_version = "C17"; else if (__STDC_VERSION__ >= 201112L) c_version = "C11"; else if (__STDC_VERSION__ >= 199901L) c_version = "C99"; else if (__STDC_VERSION__ >= 199409L) c_version = "C95"; else c_version = "C (unknown)"; #else c_version = "C89/C90"; #endif g_printf("%s\n\n %s %s\n %s %s\n %s %s\n %s %s\n %s %s\n %s %s\n\n%s\n%s\n", t1 = g_strdup_printf(_app("A widget factory - GTK %d.%d"), GTK_MAJOR_VERSION, GTK_MINOR_VERSION), "-v ", _app("Show version number."), "-l ", _app("List available themes."), "-t ", _app("Run with the specified theme."), "-s ", t2 = g_strdup_printf(_app("Run and save a png screenshot on %s."), "SIGHUP"), "--ltr ", _app("Run with text from left to right (Left-To-Right)."), "--rtl ", _app("Run with text from right to left (Right-To-Left)."), t3 = g_strdup_printf(_app("compiled in %s with gtk %d.%d.%d and glib %d.%d.%d and pango %s"), c_version, GTK_MAJOR_VERSION, GTK_MINOR_VERSION, GTK_MICRO_VERSION, GLIB_MAJOR_VERSION, GLIB_MINOR_VERSION, GLIB_MICRO_VERSION, PANGO_VERSION_STRING), t4 = g_strdup_printf(_app(" started with gtk %d.%d.%d and glib %d.%d.%d and pango %s"), gtk_major_version, gtk_minor_version, gtk_micro_version, glib_major_version, glib_minor_version, glib_micro_version, pango_version_string()) ); g_free(t1); g_free(t2); g_free(t3); g_free(t4); return status; } } // create and show window gtk_init(&argc, &argv); create_window(NULL); return status; } static void quit() { if (awf_trace) g_printf("» quit()\n"); g_list_free(list_system_theme); g_list_free(list_user_theme); list_system_theme = NULL; list_user_theme = NULL; g_hash_table_destroy(hash_system_theme); g_hash_table_destroy(hash_user_theme); hash_system_theme = NULL; hash_user_theme = NULL; accels_save(); gtk_main_quit(); } static void awf_load_theme(GHashTable* hashtable, gchar *directory) { if (awf_trace) g_printf("» awf_load_theme(%s)\n", directory); if (g_file_test(directory, G_FILE_TEST_IS_DIR)) { if (awf_debug) g_printf("themes_dir: %s\n", directory); GDir *dir = g_dir_open(directory, 0, NULL); if (dir) { const gchar *theme; while ((theme = g_dir_read_name(dir)) != NULL) { gchar *theme_path = g_build_filename(directory, theme, GTK_DIRNAME, NULL); if (g_file_test(theme_path, G_FILE_TEST_IS_DIR)) g_hash_table_replace(hashtable, g_strdup(theme), g_strdup(theme)); g_free(theme_path); } g_dir_close(dir); } } } static inline int awf_compare_theme(gconstpointer a, gconstpointer b) { return g_ascii_strcasecmp((gchar*) a, (gchar*) b); //g_strcmp0((gchar*) a, (gchar*) b); } static void notify_updated_gtktheme(GSettings *settings, gchar *key) { // ok if (awf_trace) g_printf("» notify_updated_gtktheme(%s)\n", key); gchar *new_theme = g_settings_get_string(settings, key); if (awf_debug) g_printf("SIGNAL_theme_update: %s\n", new_theme); find_and_check_menuradio(menubar, new_theme); g_free(new_theme); } static void update_text_direction(int direction) { // ok // we must ignore the activate signal when menubar is created if (!allow_update_theme) return; if (awf_trace) g_printf("» update_text_direction()*\n"); if ((direction == 1) && (gtk_widget_get_direction(window) != GTK_TEXT_DIR_LTR)) { gboolean toggle = gtk_notebook_get_scrollable(GTK_NOTEBOOK(notebook1)); current_direction = 1; gtk_widget_set_default_direction(current_direction); gtk_scale_clear_marks(GTK_SCALE(scale5)); update_marks(GTK_SCALE(scale5), toggle, GTK_POS_LEFT); gtk_scale_clear_marks(GTK_SCALE(scale6)); update_marks(GTK_SCALE(scale6), toggle, GTK_POS_RIGHT); } else if ((direction == 2) && (gtk_widget_get_direction(window) != GTK_TEXT_DIR_RTL)) { gboolean toggle = gtk_notebook_get_scrollable(GTK_NOTEBOOK(notebook1)); gtk_scale_clear_marks(GTK_SCALE(scale5)); update_marks(GTK_SCALE(scale5), toggle, GTK_POS_RIGHT); gtk_scale_clear_marks(GTK_SCALE(scale6)); update_marks(GTK_SCALE(scale6), toggle, GTK_POS_LEFT); current_direction = 2; gtk_widget_set_default_direction(current_direction); } } static void update_theme(gchar *new_theme) { // ok // we must ignore the activate signal when menubar is created if (!allow_update_theme || !new_theme) return; // we can ignore the signal when the menuitem is deselected // @todo // return; if (awf_trace) g_printf("» update_theme(%s)*\n", new_theme); if (awf_debug) g_printf("update_theme_before: %s » %s\n", current_theme, new_theme); if (strcmp(new_theme, "refresh") == 0) { g_object_set(gtk_settings_get_default(), "gtk-theme-name", "Default", NULL); g_usleep(G_USEC_PER_SEC / 2); g_object_set(gtk_settings_get_default(), "gtk-theme-name", current_theme, NULL); gtk_window_resize(GTK_WINDOW(window), 50, 50); if (opt_screenshot) { if (take_screenshot()) { gchar *text = g_strdup_printf(_app("Theme %s reloaded, then screenshot saved (%s)."), current_theme, opt_screenshot); update_statusbar(text); g_free(text); } else { gchar *text = g_strdup_printf(_app("Theme %s reloaded (error saving screenshot)."), current_theme); update_statusbar(text); g_free(text); } } else { gchar *text = g_strdup_printf(_app("Theme %s reloaded."), current_theme); update_statusbar(text); g_free(text); } if (awf_debug) g_printf("update_theme_after1: %s\n", current_theme); } else if (strcmp(new_theme, "auto") == 0) { g_free(current_theme); g_object_get(gtk_settings_get_default(), "gtk-theme-name", ¤t_theme, NULL); gtk_window_resize(GTK_WINDOW(window), 50, 50); if (awf_debug) g_printf("update_theme_after2: %s\n", current_theme); } else if (strcmp(new_theme, current_theme) != 0) { g_free(current_theme); g_object_set(gtk_settings_get_default(), "gtk-theme-name", new_theme, NULL); // @todo? useless for notify_updated_gtktheme g_object_get(gtk_settings_get_default(), "gtk-theme-name", ¤t_theme, NULL); while (gtk_events_pending()) gtk_main_iteration(); gtk_window_resize(GTK_WINDOW(window), 50, 50); gchar *text = g_strdup_printf(_app("Theme %s loaded."), current_theme); update_statusbar(text); g_free(text); if (awf_debug) g_printf("update_theme_after3: %s\n", current_theme); } } static void update_statusbar(gchar *message) { // ok if (awf_trace) g_printf("» update_statusbar(%s)\n", message); if (window && statusbar) { GDateTime *now = g_date_time_new_now_local(); gchar *buffer = g_date_time_format(now, "%H:%M:%S"); g_date_time_unref(now); gchar *text = g_strdup_printf("%s - %s", buffer, message); guint ctid = gtk_statusbar_get_context_id(GTK_STATUSBAR(statusbar), "gné"); gtk_statusbar_remove_all(GTK_STATUSBAR(statusbar), ctid); gtk_statusbar_push(GTK_STATUSBAR(statusbar), ctid, text); g_free(text); g_free(buffer); } } static void update_values(GtkRange *range) { // ok if (allow_update_values) { allow_update_values = FALSE; double value = gtk_range_get_value(range); //if (awf_trace) // g_printf("» update_values(%f)*\n", value); // range(0..1) gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress1), value / 100.0); gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress2), value / 100.0); gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress3), value / 100.0); gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress4), value / 100.0); gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress8), value / 100.0); gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress9), value / 100.0); // range(0..1) gtk_scale_button_set_value(GTK_SCALE_BUTTON(button15), value / 100.0); // range(0..100) if (scale1 != (GtkWidget*) range) gtk_range_set_value(GTK_RANGE(scale1), value); if (scale2 != (GtkWidget*) range) gtk_range_set_value(GTK_RANGE(scale2), value); if (scale3 != (GtkWidget*) range) gtk_range_set_value(GTK_RANGE(scale3), value); if (scale4 != (GtkWidget*) range) gtk_range_set_value(GTK_RANGE(scale4), value); if (scale5 != (GtkWidget*) range) gtk_range_set_value(GTK_RANGE(scale5), value); if (scale6 != (GtkWidget*) range) gtk_range_set_value(GTK_RANGE(scale6), value); // text if (gtk_progress_bar_get_text(GTK_PROGRESS_BAR(progress1))) { gchar *text = g_strdup_printf("%i %%", (int) value); gtk_progress_bar_set_text(GTK_PROGRESS_BAR(progress1), text); gtk_progress_bar_set_text(GTK_PROGRESS_BAR(progress2), text); gtk_progress_bar_set_text(GTK_PROGRESS_BAR(progress3), text); gtk_progress_bar_set_text(GTK_PROGRESS_BAR(progress4), text); gtk_progress_bar_set_text(GTK_PROGRESS_BAR(progress8), (value > 50) ? text : NULL); gtk_progress_bar_set_text(GTK_PROGRESS_BAR(progress9), (value > 50) ? text : NULL); g_free(text); } allow_update_values = TRUE; } } static void update_widgets() { // ok if (awf_trace) g_printf("» update_widgets()\n"); // function called when user click on [+] toolbar button // when toggle = true, the [+] toolbar button is NOT checked gboolean toggle = gtk_notebook_get_scrollable(GTK_NOTEBOOK(notebook1)); // via add_progressbar_and_entrybar // show progressbar in toolbar and statusbar when [+] toolbar button is NOT checked if (toggle) { gtk_widget_set_visible(progress8, FALSE); gtk_widget_set_visible(progress9, FALSE); gtk_widget_set_visible(toolbarentry, FALSE); } else { gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress8), 0.0); gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress9), 0.0); gtk_widget_set_visible(progress8, TRUE); gtk_widget_set_visible(progress9, TRUE); gtk_widget_set_visible(toolbarentry, TRUE); } // enabled or not gtk_widget_set_sensitive(scale2, toggle); gtk_widget_set_sensitive(scale4, toggle); gtk_widget_set_sensitive(scale6, toggle); gtk_widget_set_sensitive(progress2, toggle); gtk_widget_set_sensitive(progress4, toggle); // text or not if (toggle) { gtk_progress_bar_set_text(GTK_PROGRESS_BAR(progress1), NULL); gtk_progress_bar_set_text(GTK_PROGRESS_BAR(progress2), NULL); gtk_progress_bar_set_text(GTK_PROGRESS_BAR(progress3), NULL); gtk_progress_bar_set_text(GTK_PROGRESS_BAR(progress4), NULL); } else { gchar *text = g_strdup_printf("%i %%", (int) gtk_range_get_value(GTK_RANGE(scale1))); gtk_progress_bar_set_text(GTK_PROGRESS_BAR(progress1), text); gtk_progress_bar_set_text(GTK_PROGRESS_BAR(progress2), text); gtk_progress_bar_set_text(GTK_PROGRESS_BAR(progress3), text); gtk_progress_bar_set_text(GTK_PROGRESS_BAR(progress4), text); g_free(text); } gtk_progress_bar_set_text(GTK_PROGRESS_BAR(progress8), NULL); gtk_progress_bar_set_text(GTK_PROGRESS_BAR(progress9), NULL); // marks gtk_scale_clear_marks(GTK_SCALE(scale5)); update_marks(GTK_SCALE(scale5), !toggle, GTK_POS_LEFT); gtk_scale_clear_marks(GTK_SCALE(scale6)); update_marks(GTK_SCALE(scale6), !toggle, GTK_POS_RIGHT); // scrollable or not gtk_notebook_set_scrollable(GTK_NOTEBOOK(notebook1), !toggle); gtk_notebook_set_scrollable(GTK_NOTEBOOK(notebook2), !toggle); gtk_notebook_set_scrollable(GTK_NOTEBOOK(notebook3), !toggle); gtk_notebook_set_scrollable(GTK_NOTEBOOK(notebook4), !toggle); gtk_window_resize(GTK_WINDOW(window), 50, 50); } static void update_marks(GtkScale *scale, gboolean value, int position) { if (awf_trace) g_printf("» update_marks(%d)\n", position); if (value) { gtk_scale_add_mark(scale, 0, position, NULL); gtk_scale_add_mark(scale, 25, position, "25"); gtk_scale_add_mark(scale, 50, position, "50"); gtk_scale_add_mark(scale, 75, position, "75"); gtk_scale_add_mark(scale, 100, position, NULL); } else { gtk_scale_add_mark(scale, 0, position, NULL); gtk_scale_add_mark(scale, 25, position, NULL); gtk_scale_add_mark(scale, 50, position, NULL); gtk_scale_add_mark(scale, 75, position, NULL); gtk_scale_add_mark(scale, 100, position, NULL); } } static void display_notification() { // ok if (awf_trace) g_printf("» display_notification()\n"); #if defined (G_OS_UNIX) if (notify_init(GETTEXT_PACKAGE)) { // Ubuntu 11.04 with libnotify-dev 0.5.x, so you must use libnotify-dev 0.7.x from Ubuntu 11.10 NotifyNotification *notif = notify_notification_new(GETTEXT_PACKAGE, _app("A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme."), "dialog-information"); notify_notification_add_action(notif, "nothing", _gtk("Close"), NOTIFY_ACTION_CALLBACK(notify_uninit), NULL, NULL); notify_notification_add_action(notif, "close", _gtk("Close"), NOTIFY_ACTION_CALLBACK(notify_uninit), NULL, NULL); notify_notification_set_timeout(notif, 50000); notify_notification_show(notif, NULL); g_object_unref(G_OBJECT(notif)); notify_uninit(); } #endif } static void find_and_update_labels(GtkWidget *widget) { // whynot if (GTK_IS_LABEL(widget)) { gtk_label_set_ellipsize(GTK_LABEL(widget), PANGO_ELLIPSIZE_END); } else if (GTK_IS_CONTAINER(widget)) { GList *children = gtk_container_get_children(GTK_CONTAINER(widget)); GList *iter; for (iter = children; iter != NULL; iter = iter->next) find_and_update_labels(GTK_WIDGET(iter->data)); g_list_free(children); } } static gboolean find_and_check_menuradio(GtkWidget *menu, gchar *search) { // whynot if (awf_trace) g_printf("» find_and_check_menuradio(%s)\n", search); GList *children = gtk_container_get_children(GTK_CONTAINER(menu)), *iter; GtkWidget *item; for (iter = children; iter != NULL; iter = g_list_next(iter)) { item = GTK_WIDGET(iter->data); if (GTK_IS_MENU_ITEM(item)) { GtkWidget *submenu = gtk_menu_item_get_submenu(GTK_MENU_ITEM(item)); if (submenu) { // process submenu if (find_and_check_menuradio(submenu, search)) { g_list_free(children); return TRUE; } } else if (gtk_widget_get_sensitive(item)) { // check menuitem by label const gchar *value = gtk_menu_item_get_label(GTK_MENU_ITEM(item)); if (value && (g_strcmp0(value, search) == 0)) { gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(item), TRUE); // set state checked and activate action g_list_free(children); return TRUE; } } } } g_list_free(children); return FALSE; } static gboolean on_sighup(void *data) { // ok if (awf_trace) g_printf("» on_sighup()\n"); update_theme("refresh"); #if defined (G_SOURCE_CONTINUE) return G_SOURCE_CONTINUE; #else return TRUE; // glib < 2.32 #endif } static gboolean take_screenshot() { // ok (without window borders) if (awf_trace) g_printf("» take_screenshot()\n"); gboolean result = FALSE; int width = 0, height = 0; GdkWindow *root = gtk_widget_get_window(window); gtk_window_get_size(GTK_WINDOW(window), &width, &height); GdkPixbuf *image = gdk_pixbuf_get_from_drawable(NULL, root, gdk_colormap_get_system(), 0, 0, 0, 0, width, height); if (image) { result = gdk_pixbuf_save(image, opt_screenshot, "png", NULL, "compression", "9", NULL); g_object_unref(image); } return result; } // layout and widgets static void create_window(gpointer app) { if (awf_trace) g_printf("» create_window()\n"); GtkWidget *vbox_window, *widgets; gchar *text, *value; // window window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_widget_set_name(GTK_WIDGET(window), "AwfMainWindow"); gtk_window_set_icon_name(GTK_WINDOW(window), GETTEXT_PACKAGE); text = g_strdup_printf(_app("A widget factory - GTK %d.%d"), GTK_MAJOR_VERSION, GTK_MINOR_VERSION); gtk_window_set_title(GTK_WINDOW(window), text); g_free(text); // theme auto or from command line if (strcmp(current_theme, opt_theme) != 0) update_theme(opt_theme); else update_theme(current_theme); if (current_direction == 0) current_direction = (gtk_widget_get_default_direction() == GTK_TEXT_DIR_LTR) ? 1 : 2; // layout vbox_window = BOXV; gtk_container_add(GTK_CONTAINER(window), vbox_window); menubar = gtk_menu_bar_new(); allow_update_theme = FALSE; create_traditional_menubar(menubar); add_to(vbox_window, menubar, FALSE, FALSE, 0, 0); allow_update_theme = TRUE; toolbar = gtk_toolbar_new(); create_toolbar(toolbar); add_to(vbox_window, toolbar, FALSE, FALSE, 0, 0); widgets = BOXV; add_to(vbox_window, widgets, TRUE, TRUE, 0, 0); create_widgets(widgets); statusbar = gtk_statusbar_new(); add_to(vbox_window, statusbar, FALSE, FALSE, 0, 0); text = g_strdup_printf(_app("Theme %s loaded."), current_theme); update_statusbar(text); g_free(text); // go go go update_text_direction(current_direction); g_signal_connect(window, "destroy", G_CALLBACK(quit), NULL); #if defined (G_OS_UNIX) && GLIB_CHECK_VERSION (2,30,0) g_unix_signal_add(SIGHUP, on_sighup, NULL); #endif #if defined (G_OS_UNIX) && GLIB_CHECK_VERSION (2,32,0) if (g_settings_schema_source_lookup(g_settings_schema_source_get_default(), value = "org.gnome.desktop.interface", FALSE)) g_signal_connect(g_settings_new(value), "changed::gtk-theme", G_CALLBACK(notify_updated_gtktheme), NULL); if (g_settings_schema_source_lookup(g_settings_schema_source_get_default(), value = "org.mate.interface", FALSE)) g_signal_connect(g_settings_new(value), "changed::gtk-theme", G_CALLBACK(notify_updated_gtktheme), NULL); #endif #if defined (G_OS_WIN32) gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER); #endif gtk_widget_show_all(window); add_progressbar_and_entrybar(); gtk_main(); } static void create_widgets(GtkWidget *root) { // ok if (awf_trace) g_printf("» create_widgets()\n"); GtkWidget *hbox_columns = BOXH; GtkWidget *vbox_column1 = BOXV, *vbox_combo_entry = BOXV, *hbox_spin = BOXH, *hbox_check_radio = BOXH, *vbox_check = BOXV, *vbox_radio = BOXV; GtkWidget *vbox_column2 = BOXV, *vbox_buttons = BOXV, *hbox_btns1 = BOXH, *hbox_btns2 = BOXH, *hbox_btns3 = BOXH, *hbox_btns4 = BOXH; GtkWidget *vbox_column3 = BOXV, *vbox_progress1 = BOXV, *vbox_progress2 = BOXV, *hbox_progress1 = BOXH, *hbox_progress2 = BOXH; GtkWidget *vbox_column4 = BOXV, *vbox_others = BOXV, *hbox_label = BOXH, *hbox_spinner = BOXH; GtkWidget *vpane = PANEV, *hpane1 = PANEH, *hpane2 = PANEH; GtkWidget *hbox_frame1 = BOXH, *hbox_frame2 = BOXH, *hbox_notebook1 = BOXH, *hbox_notebook2 = BOXH; // columns layout add_to(root, hbox_columns, TRUE, TRUE, 0, 0); // column 1 add_to(hbox_columns, vbox_column1, TRUE, TRUE, 5, 0); add_to(vbox_column1, vbox_combo_entry, FALSE, TRUE, 5, 3); create_combos_entries(vbox_combo_entry); add_to(vbox_column1, hbox_spin, FALSE, FALSE, 5, 0); create_spinbuttons(hbox_spin); add_to(vbox_column1, hbox_check_radio, FALSE, TRUE, 5, 0); add_to(hbox_check_radio, vbox_check, TRUE, TRUE, 0, 0); create_checkbuttons(vbox_check); add_to(hbox_check_radio, vbox_radio, TRUE, TRUE, 0, 0); create_radiobuttons(vbox_radio); add_to(hbox_columns, SEPV, FALSE, FALSE, 0, 0); // column 2 add_to(hbox_columns, vbox_column2, TRUE, TRUE, 5, 0); add_to(vbox_column2, vbox_buttons, FALSE, TRUE, 5, 3); add_to(vbox_column2, hbox_btns1, FALSE, FALSE, 5, 3); add_to(vbox_column2, hbox_btns2, FALSE, FALSE, 5, 3); add_to(vbox_column2, hbox_btns3, FALSE, FALSE, 5, 3); add_to(vbox_column2, hbox_btns4, FALSE, FALSE, 5, 3); create_otherbuttons(vbox_buttons, hbox_btns1, hbox_btns2, hbox_btns3, hbox_btns4); add_to(hbox_columns, SEPV, FALSE, FALSE, 0, 0); // column 3 add_to(hbox_columns, vbox_column3, TRUE, TRUE, 5, 0); add_to(vbox_column3, vbox_progress1, FALSE, TRUE, 6, 10); add_to(vbox_column3, hbox_progress1, FALSE, FALSE, 5, 10); add_to(vbox_column3, hbox_progress2, FALSE, FALSE, 5, 10); add_to(vbox_column3, vbox_progress2, FALSE, TRUE, 5, 10); create_progressbars(vbox_progress1, hbox_progress1, hbox_progress2, vbox_progress2); add_to(hbox_columns, SEPV, FALSE, FALSE, 0, 0); // column 4 add_to(hbox_columns, vbox_column4, TRUE, TRUE, 5, 0); add_to(vbox_column4, vbox_others, FALSE, TRUE, 5, 3); create_treview(vbox_others); add_to(vbox_others, hbox_label, FALSE, TRUE, 5, 0); create_labels(hbox_label); add_to(vbox_others, hbox_spinner, FALSE, TRUE, 5, 0); create_spinners(hbox_spinner); create_expander(vbox_others); add_to(root, SEPH, FALSE, FALSE, 0, 0); // paned layout add_to(root, vpane, TRUE, TRUE, 0, 0); gtk_paned_pack1(GTK_PANED(vpane), hpane1, TRUE, FALSE); gtk_widget_set_size_request(hpane1, -1, 70); // The 70 gtk_box_set_homogeneous(GTK_BOX(hbox_frame1), TRUE); gtk_box_set_spacing(GTK_BOX(hbox_frame1), 3); gtk_container_set_border_width(GTK_CONTAINER(hbox_frame1), 10); gtk_paned_add1(GTK_PANED(hpane1), hbox_frame1); gtk_box_set_homogeneous(GTK_BOX(hbox_frame2), TRUE); gtk_box_set_spacing(GTK_BOX(hbox_frame2), 3); gtk_container_set_border_width(GTK_CONTAINER(hbox_frame2), 10); gtk_paned_add2(GTK_PANED(hpane1), hbox_frame2); create_frames(hbox_frame1, hbox_frame2); gtk_paned_pack2(GTK_PANED(vpane), hpane2, TRUE, FALSE); //gtk_widget_set_size_request(hpane2, -1, 119); // The 120 gtk_box_set_homogeneous(GTK_BOX(hbox_notebook1), TRUE); gtk_box_set_spacing(GTK_BOX(hbox_notebook1), 3); gtk_container_set_border_width(GTK_CONTAINER(hbox_notebook1), 10); gtk_paned_add1(GTK_PANED(hpane2), hbox_notebook1); gtk_box_set_homogeneous(GTK_BOX(hbox_notebook2), TRUE); gtk_box_set_spacing(GTK_BOX(hbox_notebook2), 3); gtk_container_set_border_width(GTK_CONTAINER(hbox_notebook2), 10); gtk_paned_add2(GTK_PANED(hpane2), hbox_notebook2); create_notebooks(hbox_notebook1, hbox_notebook2); } static void add_progressbar_and_entrybar() { if (awf_trace) g_printf("» add_progressbar_and_entrybar()\n"); // entry toolbar (= 11) toolbarentry = gtk_entry_new(); gtk_widget_set_visible(toolbarentry, FALSE); gtk_container_add(GTK_CONTAINER(gtk_toolbar_get_nth_item(GTK_TOOLBAR(toolbar), 11)), toolbarentry); // end left // progressbar toolbar (= 13) progress8 = gtk_progress_bar_new(); gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress8), 0); gtk_progress_bar_set_orientation(GTK_PROGRESS_BAR(progress8), GTK_PROGRESS_LEFT_TO_RIGHT); gtk_widget_set_visible(progress8, FALSE); GtkWidget *alignment = gtk_alignment_new(0, 0.5, 0, 0); gtk_widget_set_size_request(alignment, -1, 20); gtk_container_add(GTK_CONTAINER(alignment), progress8); gtk_widget_set_visible(alignment, TRUE); gtk_container_add(GTK_CONTAINER(gtk_toolbar_get_nth_item(GTK_TOOLBAR(toolbar), 13)), alignment); // end right // progressbar statusbar progress9 = gtk_progress_bar_new(); gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress9), 0); gtk_progress_bar_set_orientation(GTK_PROGRESS_BAR(progress9), GTK_PROGRESS_LEFT_TO_RIGHT); gtk_widget_set_visible(progress9, FALSE); GtkStyle *style = gtk_widget_get_style(progress9); PangoFontDescription *desc = pango_font_description_copy(style->font_desc); pango_font_description_set_size(desc, 7.5 * PANGO_SCALE); gtk_widget_modify_font(progress9, desc); pango_font_description_free(desc); alignment = gtk_fixed_new(); gtk_widget_set_name(progress9, "progress9"); gtk_rc_parse_string("style \"progress9\"\n" "{\n" "GtkProgressBar::min-horizontal-bar-height = 15\n" "GtkProgressBar::yspacing = 0\n" "}\n" "widget \"*.progress9\" style \"progress9\""); gtk_fixed_put(GTK_FIXED(alignment), progress9, 0, 2); gtk_widget_set_visible(alignment, TRUE); gtk_box_pack_end(GTK_BOX(gtk_statusbar_get_message_area(GTK_STATUSBAR(statusbar))), alignment, FALSE, FALSE, 0); } static void add_to(GtkWidget *root, GtkWidget *widget, gboolean expand, gboolean fill, guint padding, guint spacing) { // ok if (GTK_IS_INFO_BAR(root)) root = gtk_info_bar_get_content_area(GTK_INFO_BAR(root)); if (GTK_IS_CONTAINER(widget) && (padding > 0)) gtk_container_set_border_width(GTK_CONTAINER(widget), padding); if (GTK_IS_BOX(widget) && (spacing > 0)) gtk_box_set_spacing(GTK_BOX(widget), spacing); gtk_box_pack_start(GTK_BOX(root), widget, expand, fill, 0); } static void create_toolbar(GtkWidget *root) { // ok if (awf_trace) g_printf("» create_toolbar()\n"); GtkWidget *tool1, *menu, *tool2, *tool3, *tool4, *tool5, *tool6, *tool7, *tool8, *tool9, *tool11, *tool12, *tool13; // @todo option command line? gtk_toolbar_set_style(GTK_TOOLBAR(toolbar), GTK_TOOLBAR_ICONS); // GTK_MENU_TOOL_BUTTON tool1 = GTK_WIDGET(gtk_menu_tool_button_new(NULL, NULL)); gtk_tool_button_set_icon_name(GTK_TOOL_BUTTON(tool1), "document-open"); g_signal_connect(tool1, "clicked", G_CALLBACK(dialog_open), NULL); menu = gtk_menu_new(); create_menuitem(menu, "Menu item 1", FALSE, NULL, NULL, NULL); create_menuitem(menu, "Menu item 2", FALSE, NULL, NULL, NULL); create_menuitem(menu, "Menu item 3", FALSE, NULL, NULL, NULL); gtk_widget_show_all(menu); gtk_menu_tool_button_set_menu(GTK_MENU_TOOL_BUTTON(tool1), menu); tool2 = GTK_WIDGET(gtk_menu_tool_button_new(NULL, NULL)); gtk_tool_button_set_icon_name(GTK_TOOL_BUTTON(tool2), "document-open"); gtk_widget_set_sensitive(tool2, FALSE); // GTK_TOOL_BUTTON tool3 = GTK_WIDGET(gtk_tool_button_new(NULL, NULL)); gtk_tool_button_set_icon_name(GTK_TOOL_BUTTON(tool3), "document-save"); g_signal_connect(tool3, "clicked", G_CALLBACK(dialog_save), NULL); tool4 = GTK_WIDGET(gtk_tool_button_new(NULL, NULL)); gtk_tool_button_set_icon_name(GTK_TOOL_BUTTON(tool4), "view-refresh"); g_signal_connect_swapped(tool4, "clicked", G_CALLBACK(on_sighup), NULL); tool5 = GTK_WIDGET(gtk_tool_button_new(NULL, NULL)); gtk_tool_button_set_icon_name(GTK_TOOL_BUTTON(tool5), "camera-photo"); gtk_widget_set_sensitive(tool5, opt_screenshot ? TRUE : FALSE); g_signal_connect(tool5, "clicked", G_CALLBACK(take_screenshot), NULL); tool6 = GTK_WIDGET(gtk_tool_button_new(NULL, NULL)); gtk_tool_button_set_icon_name(GTK_TOOL_BUTTON(tool6), "dialog-information"); g_signal_connect(tool6, "clicked", G_CALLBACK(display_notification), NULL); #if defined (G_OS_WIN32) gtk_widget_set_sensitive(tool6, FALSE); #endif // GTK_TOGGLE_TOOL_BUTTON tool7 = GTK_WIDGET(gtk_toggle_tool_button_new()); gtk_tool_button_set_icon_name(GTK_TOOL_BUTTON(tool7), "list-add"); gtk_toggle_tool_button_set_active(GTK_TOGGLE_TOOL_BUTTON(tool7), TRUE); g_signal_connect(tool7, "clicked", G_CALLBACK(update_widgets), NULL); tool8 = GTK_WIDGET(gtk_toggle_tool_button_new()); gtk_tool_button_set_icon_name(GTK_TOOL_BUTTON(tool8), "list-remove"); gtk_toggle_tool_button_set_active(GTK_TOGGLE_TOOL_BUTTON(tool8), FALSE); g_signal_connect(tool8, "clicked", G_CALLBACK(update_widgets), NULL); tool9 = GTK_WIDGET(gtk_toggle_tool_button_new()); gtk_tool_button_set_icon_name(GTK_TOOL_BUTTON(tool9), "window-close"); gtk_toggle_tool_button_set_active(GTK_TOGGLE_TOOL_BUTTON(tool9), FALSE); gtk_widget_set_sensitive(tool9, FALSE); // placeholder & separators tool11 = GTK_WIDGET(gtk_tool_item_new()); tool12 = GTK_WIDGET(gtk_tool_item_new()); gtk_tool_item_set_expand(GTK_TOOL_ITEM(tool12), TRUE); tool13 = GTK_WIDGET(gtk_tool_item_new()); // layout gtk_toolbar_insert(GTK_TOOLBAR(root), GTK_TOOL_ITEM(tool1), -1); gtk_toolbar_insert(GTK_TOOLBAR(root), GTK_TOOL_ITEM(tool2), -1); gtk_toolbar_insert(GTK_TOOLBAR(root), GTK_TOOL_ITEM(tool3), -1); gtk_toolbar_insert(GTK_TOOLBAR(root), gtk_separator_tool_item_new(), -1); gtk_toolbar_insert(GTK_TOOLBAR(root), GTK_TOOL_ITEM(tool4), -1); gtk_toolbar_insert(GTK_TOOLBAR(root), GTK_TOOL_ITEM(tool5), -1); gtk_toolbar_insert(GTK_TOOLBAR(root), GTK_TOOL_ITEM(tool6), -1); gtk_toolbar_insert(GTK_TOOLBAR(root), gtk_separator_tool_item_new(), -1); gtk_toolbar_insert(GTK_TOOLBAR(root), GTK_TOOL_ITEM(tool7), -1); gtk_toolbar_insert(GTK_TOOLBAR(root), GTK_TOOL_ITEM(tool8), -1); gtk_toolbar_insert(GTK_TOOLBAR(root), GTK_TOOL_ITEM(tool9), -1); gtk_toolbar_insert(GTK_TOOLBAR(root), GTK_TOOL_ITEM(tool11), -1); // = 11 gtk_toolbar_insert(GTK_TOOLBAR(root), GTK_TOOL_ITEM(tool12), -1); gtk_toolbar_insert(GTK_TOOLBAR(root), GTK_TOOL_ITEM(tool13), -1); // = 13 } static void create_combos_entries(GtkWidget *root) { // ok if (awf_trace) g_printf("» create_combos_entries()\n"); GtkWidget *combo1, *combo2, *combo3, *combo4, *entry1, *entry2, *entry3, *entry4; // GTK_COMBO_BOX combo1 = gtk_combo_box_text_new_with_entry(); gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo1), "Combo box entry 1"); gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo1), "Combo box entry 2"); gtk_combo_box_set_active(GTK_COMBO_BOX(combo1), 0); combo2 = gtk_combo_box_text_new_with_entry(); gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo2), "Combo box entry 1"); gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo2), "Combo box entry 2"); gtk_combo_box_set_active(GTK_COMBO_BOX(combo2), 0); gtk_widget_set_sensitive(combo2, FALSE); combo3 = gtk_combo_box_text_new(); gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo3), "Combo box 1"); gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo3), "Combo box 2"); gtk_combo_box_set_active(GTK_COMBO_BOX(combo3), 0); combo4 = gtk_combo_box_text_new(); gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo4), "Combo box 1"); gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo4), "Combo box 2"); gtk_combo_box_set_active(GTK_COMBO_BOX(combo4), 0); gtk_widget_set_sensitive(combo4, FALSE); // GTK_ENTRY entry1 = gtk_entry_new(); gtk_entry_set_text(GTK_ENTRY(entry1), "Entry"); entry2 = gtk_entry_new(); gtk_entry_set_text(GTK_ENTRY(entry2), "Entry"); gtk_widget_set_sensitive(entry2, FALSE); entry3 = gtk_entry_new(); gtk_entry_set_text(GTK_ENTRY(entry3), "Entry"); gtk_entry_set_icon_from_icon_name(GTK_ENTRY(entry3), GTK_ENTRY_ICON_PRIMARY, "edit-clear"); gtk_entry_set_icon_from_icon_name(GTK_ENTRY(entry3), GTK_ENTRY_ICON_SECONDARY, "edit-find"); entry4 = gtk_entry_new(); gtk_entry_set_text(GTK_ENTRY(entry4), "Entry"); gtk_entry_set_icon_from_icon_name(GTK_ENTRY(entry4), GTK_ENTRY_ICON_PRIMARY, "edit-clear"); gtk_entry_set_icon_from_icon_name(GTK_ENTRY(entry4), GTK_ENTRY_ICON_SECONDARY, "edit-find"); gtk_widget_set_sensitive(entry4, FALSE); // layout add_to(root, combo1, FALSE, FALSE, 0, 0); add_to(root, combo2, FALSE, FALSE, 0, 0); add_to(root, combo3, FALSE, FALSE, 0, 0); add_to(root, combo4, FALSE, FALSE, 0, 0); add_to(root, entry1, FALSE, FALSE, 0, 0); add_to(root, entry2, FALSE, FALSE, 0, 0); add_to(root, entry3, FALSE, FALSE, 0, 0); add_to(root, entry4, FALSE, FALSE, 0, 0); } static void create_spinbuttons(GtkWidget *root) { // ok if (awf_trace) g_printf("» create_spinbuttons()\n"); GtkWidget *spinbutton1, *spinbutton2; // GTK_SPIN_BUTTON spinbutton1 = gtk_spin_button_new_with_range(-100, 100, 1); gtk_spin_button_set_value(GTK_SPIN_BUTTON(spinbutton1), 1); spinbutton2 = gtk_spin_button_new_with_range(-100, 100, 1); gtk_spin_button_set_value(GTK_SPIN_BUTTON(spinbutton2), 1); gtk_widget_set_sensitive(spinbutton2, FALSE); // layout add_to(root, spinbutton1, FALSE, FALSE, 0, 0); add_to(root, BOXH, TRUE, TRUE, 0, 0); // empty space add_to(root, spinbutton2, FALSE, FALSE, 0, 0); } static void create_checkbuttons(GtkWidget *root) { // ok if (awf_trace) g_printf("» create_checkbuttons()\n"); GtkWidget *checkbutton1, *checkbutton2, *checkbutton3, *checkbutton4, *checkbutton5, *checkbutton6; // GTK_CHECK_BUTTON checkbutton1 = gtk_check_button_new_with_label("Check btn 1"); checkbutton2 = gtk_check_button_new_with_label("Check btn 2"); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbutton2), TRUE); checkbutton3 = gtk_check_button_new_with_label("Check btn 3"); gtk_toggle_button_set_inconsistent(GTK_TOGGLE_BUTTON(checkbutton3), TRUE); checkbutton4 = gtk_check_button_new_with_label("Check btn 4"); gtk_widget_set_sensitive(checkbutton4, FALSE); checkbutton5 = gtk_check_button_new_with_label("Check btn 5"); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbutton5), TRUE); gtk_widget_set_sensitive(checkbutton5, FALSE); checkbutton6 = gtk_check_button_new_with_label("Check btn 6"); gtk_toggle_button_set_inconsistent(GTK_TOGGLE_BUTTON(checkbutton6), TRUE); gtk_widget_set_sensitive(checkbutton6, FALSE); // layout add_to(root, checkbutton1, FALSE, FALSE, 0, 0); add_to(root, checkbutton2, FALSE, FALSE, 0, 0); add_to(root, checkbutton3, FALSE, FALSE, 0, 0); add_to(root, checkbutton4, FALSE, FALSE, 0, 0); add_to(root, checkbutton5, FALSE, FALSE, 0, 0); add_to(root, checkbutton6, FALSE, FALSE, 0, 0); } static void create_radiobuttons(GtkWidget *root) { // ok if (awf_trace) g_printf("» create_radiobuttons()\n"); GtkWidget *radiobutton1, *radiobutton2, *radiobutton3, *radiobutton4, *radiobutton5, *radiobutton6; // GTK_RADIO_BUTTON radiobutton1 = gtk_radio_button_new_with_label(NULL, "Radio btn 1"); radiobutton2 = gtk_radio_button_new_with_label(gtk_radio_button_get_group(GTK_RADIO_BUTTON(radiobutton1)), "Radio btn 2"); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(radiobutton2), TRUE); radiobutton3 = gtk_radio_button_new_with_label(gtk_radio_button_get_group(GTK_RADIO_BUTTON(radiobutton1)), "Radio btn 3"); gtk_toggle_button_set_inconsistent(GTK_TOGGLE_BUTTON(radiobutton3), TRUE); radiobutton4 = gtk_radio_button_new_with_label(NULL, "Radio btn 4"); gtk_widget_set_sensitive(radiobutton4, FALSE); radiobutton5 = gtk_radio_button_new_with_label(gtk_radio_button_get_group(GTK_RADIO_BUTTON(radiobutton4)), "Radio btn 5"); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(radiobutton5), TRUE); gtk_widget_set_sensitive(radiobutton5, FALSE); radiobutton6 = gtk_radio_button_new_with_label(gtk_radio_button_get_group(GTK_RADIO_BUTTON(radiobutton4)), "Radio btn 6"); gtk_toggle_button_set_inconsistent(GTK_TOGGLE_BUTTON(radiobutton6), TRUE); gtk_widget_set_sensitive(radiobutton6, FALSE); // layout add_to(root, radiobutton1, FALSE, FALSE, 0, 0); add_to(root, radiobutton2, FALSE, FALSE, 0, 0); add_to(root, radiobutton3, FALSE, FALSE, 0, 0); add_to(root, radiobutton4, FALSE, FALSE, 0, 0); add_to(root, radiobutton5, FALSE, FALSE, 0, 0); add_to(root, radiobutton6, FALSE, FALSE, 0, 0); } static void create_otherbuttons(GtkWidget *root1, GtkWidget *root2, GtkWidget *root3, GtkWidget *root4, GtkWidget *root5) { // ok if (awf_trace) g_printf("» create_otherbuttons()\n"); GtkWidget *button1, *button2, *button3, *button4, *button5, *button6, *button7, *button8, *button9; GtkWidget *button10, *button11, *button12, *button13, *button14; GtkWidget *combomenu1, *combomenu2, *combomenu3, *combomenu4; // GTK_BUTTON button1 = gtk_button_new_with_label("Button 1"); button2 = gtk_button_new_with_label("Button 2"); gtk_widget_set_sensitive(button2, FALSE); button3 = gtk_toggle_button_new_with_label("Button 3"); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button3), TRUE); button4 = gtk_toggle_button_new_with_label("Button 4"); gtk_widget_set_sensitive(button4, FALSE); // GTK_COLOR_BUTTON GdkColor color; gdk_color_parse("#7796ba", &color); button5 = gtk_color_button_new_with_color(&color); gtk_widget_set_tooltip_text(button5, _app("Choose a color")); // GTK_FONT_BUTTON button6 = gtk_font_button_new(); find_and_update_labels(button6); gtk_widget_set_size_request(button6, 186, -1); // The 186 gtk_widget_set_tooltip_text(button6, _app("Choose a font")); // GTK_FILE_CHOOSER_BUTTON button7 = gtk_file_chooser_button_new("GtkFileChooserDialog:Open", GTK_FILE_CHOOSER_ACTION_OPEN); find_and_update_labels(button7); gtk_widget_set_size_request(button7, 180, -1); // The 186 gtk_widget_set_tooltip_text(button7, _app("Choose a file")); button8 = gtk_file_chooser_button_new("GtkFileChooserDialog:Open", GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER); find_and_update_labels(button8); gtk_widget_set_size_request(button8, 180, -1); // The 186 gtk_widget_set_tooltip_text(button8, _app("Choose a folder")); // @todo < 3.8 not null // GTK_OPTION_MENU combomenu1 = gtk_menu_new(); gtk_menu_shell_append(GTK_MENU_SHELL(combomenu1), gtk_menu_item_new_with_label("Option 1")); gtk_menu_shell_append(GTK_MENU_SHELL(combomenu1), gtk_menu_item_new_with_label("Option 2")); gtk_menu_shell_append(GTK_MENU_SHELL(combomenu1), gtk_menu_item_new_with_label("Option 3")); button9 = gtk_option_menu_new(); gtk_option_menu_set_menu(GTK_OPTION_MENU(button9), combomenu1); combomenu2 = gtk_menu_new(); gtk_menu_shell_append(GTK_MENU_SHELL(combomenu2), gtk_menu_item_new_with_label("Option 1")); gtk_menu_shell_append(GTK_MENU_SHELL(combomenu2), gtk_menu_item_new_with_label("Option 2")); gtk_menu_shell_append(GTK_MENU_SHELL(combomenu2), gtk_menu_item_new_with_label("Option 3")); button10 = gtk_option_menu_new(); gtk_option_menu_set_menu(GTK_OPTION_MENU(button10), combomenu2); gtk_widget_set_sensitive(button10, FALSE); combomenu3 = gtk_menu_new(); gtk_menu_shell_append(GTK_MENU_SHELL(combomenu3), gtk_menu_item_new_with_label("Option 1")); gtk_menu_shell_append(GTK_MENU_SHELL(combomenu3), gtk_menu_item_new_with_label("Option 2")); gtk_menu_shell_append(GTK_MENU_SHELL(combomenu3), gtk_menu_item_new_with_label("Option 3")); button11 = gtk_option_menu_new(); gtk_option_menu_set_menu(GTK_OPTION_MENU(button11), combomenu3); combomenu4 = gtk_menu_new(); gtk_menu_shell_append(GTK_MENU_SHELL(combomenu4), gtk_menu_item_new_with_label("Option 1")); gtk_menu_shell_append(GTK_MENU_SHELL(combomenu4), gtk_menu_item_new_with_label("Option 2")); gtk_menu_shell_append(GTK_MENU_SHELL(combomenu4), gtk_menu_item_new_with_label("Option 3")); button12 = gtk_option_menu_new(); gtk_option_menu_set_menu(GTK_OPTION_MENU(button12), combomenu4); gtk_widget_set_sensitive(button12, FALSE); // GTK_LINK_BUTTON button13 = gtk_link_button_new_with_label("https://github.com/luigifab/awf-extended", "Link button"); button14 = gtk_link_button_new_with_label("https://github.com/luigifab/awf-extended", "Link button"); gtk_widget_set_sensitive(button14, FALSE); // GTK_VOLUME_BUTTON button15 = gtk_volume_button_new(); gtk_scale_button_set_value(GTK_SCALE_BUTTON(button15), 0.5); g_object_set((GObject*) button15, "size", GTK_ICON_SIZE_BUTTON, NULL); // @todo not working with Ubuntu button16 = gtk_volume_button_new(); gtk_scale_button_set_value(GTK_SCALE_BUTTON(button16), 0); gtk_widget_set_sensitive(button16, FALSE); g_object_set((GObject*) button16, "size", GTK_ICON_SIZE_BUTTON, NULL); // @todo not working with Ubuntu // layout add_to(root1, button1, FALSE, FALSE, 0, 0); add_to(root1, button2, FALSE, FALSE, 0, 0); add_to(root1, button3, FALSE, FALSE, 0, 0); add_to(root1, button4, FALSE, FALSE, 0, 0); add_to(root1, button5, FALSE, FALSE, 0, 0); add_to(root1, button6, FALSE, FALSE, 0, 0); add_to(root1, button7, FALSE, FALSE, 0, 0); add_to(root1, button8, FALSE, FALSE, 0, 0); add_to(root2, button9, FALSE, FALSE, 0, 0); add_to(root2, BOXH, TRUE, TRUE, 0, 0); // empty space add_to(root2, button10, FALSE, FALSE, 0, 0); add_to(root3, button11, FALSE, FALSE, 0, 0); add_to(root3, BOXH, TRUE, TRUE, 0, 0); // empty space add_to(root3, button12, FALSE, FALSE, 0, 0); add_to(root4, button13, FALSE, FALSE, 0, 0); add_to(root4, BOXH, TRUE, TRUE, 0, 0); // empty space add_to(root4, button14, FALSE, FALSE, 0, 0); add_to(root5, button15, FALSE, FALSE, 0, 0); add_to(root5, button16, FALSE, FALSE, 0, 0); } static void create_progressbars(GtkWidget *root1, GtkWidget *root2, GtkWidget *root3, GtkWidget *root4) { // ok if (awf_trace) g_printf("» create_progressbars()\n"); // GTK_PROGRESS_BAR progress1 = gtk_progress_bar_new(); gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress1), 0.5); gtk_progress_bar_set_orientation(GTK_PROGRESS_BAR(progress1), GTK_PROGRESS_LEFT_TO_RIGHT); progress2 = gtk_progress_bar_new(); gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress2), 0.5); gtk_progress_bar_set_orientation(GTK_PROGRESS_BAR(progress2), GTK_PROGRESS_RIGHT_TO_LEFT); progress3 = gtk_progress_bar_new(); gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress3), 0.5); gtk_progress_bar_set_orientation(GTK_PROGRESS_BAR(progress3), GTK_PROGRESS_TOP_TO_BOTTOM); gtk_widget_set_size_request(progress3, -1, 100); // The 100 progress4 = gtk_progress_bar_new(); gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress4), 0.5); gtk_progress_bar_set_orientation(GTK_PROGRESS_BAR(progress4), GTK_PROGRESS_BOTTOM_TO_TOP); // GTK_SCALE scale1 = create_horizontal_scale(50, FALSE, FALSE, GTK_POS_TOP); g_signal_connect(scale1, "value_changed", G_CALLBACK(update_values), NULL); scale2 = create_horizontal_scale(50, FALSE, TRUE, GTK_POS_TOP); g_signal_connect(scale2, "value_changed", G_CALLBACK(update_values), NULL); scale3 = create_vertical_scale(50, FALSE, FALSE, GTK_POS_TOP); g_signal_connect(scale3, "value_changed", G_CALLBACK(update_values), NULL); scale4 = create_vertical_scale(50, FALSE, TRUE, GTK_POS_TOP); g_signal_connect(scale4, "value_changed", G_CALLBACK(update_values), NULL); scale5 = create_vertical_scale(50, FALSE, FALSE, GTK_POS_TOP); update_marks(GTK_SCALE(scale5), FALSE, GTK_POS_LEFT); g_signal_connect(scale5, "value_changed", G_CALLBACK(update_values), NULL); scale6 = create_vertical_scale(50, FALSE, TRUE, GTK_POS_TOP); update_marks(GTK_SCALE(scale6), FALSE, GTK_POS_RIGHT); g_signal_connect(scale6, "value_changed", G_CALLBACK(update_values), NULL); // layout add_to(root1, progress1, FALSE, FALSE, 0, 0); add_to(root1, progress2, FALSE, FALSE, 0, 0); add_to(root1, scale1, FALSE, FALSE, 0, 0); add_to(root1, scale2, FALSE, FALSE, 0, 0); add_to(root2, progress3, FALSE, FALSE, 0, 0); add_to(root2, progress4, FALSE, FALSE, 0, 0); add_to(root3, scale3, FALSE, FALSE, 0, 0); add_to(root3, scale5, FALSE, FALSE, 0, 0); add_to(root3, scale6, FALSE, FALSE, 0, 0); add_to(root3, scale4, FALSE, FALSE, 0, 0); } static void create_labels(GtkWidget *root) { // ok if (awf_trace) g_printf("» create_labels()\n"); GtkWidget *label1, *label2; // GTK_LABEL label1 = gtk_label_new("Label 1"); label2 = gtk_label_new("Label 2"); gtk_widget_set_sensitive(label2, FALSE); // layout add_to(root, label1, FALSE, FALSE, 0, 0); add_to(root, BOXH, TRUE, TRUE, 0, 0); // empty space add_to(root, label2, FALSE, FALSE, 0, 0); add_to(root, BOXH, TRUE, TRUE, 0, 0); // empty space } static void create_spinners(GtkWidget *root) { // ok if (awf_trace) g_printf("» create_spinners()\n"); GtkWidget *spinner1, *spinner2; // GTK_SPINNER spinner1 = gtk_spinner_new(); gtk_widget_set_size_request(spinner1, 20, 20); spinner2 = gtk_spinner_new(); gtk_widget_set_size_request(spinner2, 20, 20); gtk_widget_set_sensitive(spinner2, FALSE); //gtk_spinner_start(GTK_SPINNER(spinner2)); // layout add_to(root, spinner1, FALSE, FALSE, 0, 0); add_to(root, BOXH, TRUE, TRUE, 0, 0); // empty space add_to(root, spinner2, FALSE, FALSE, 0, 0); add_to(root, BOXH, TRUE, TRUE, 0, 0); // empty space } static void create_expander(GtkWidget *root) { // ok if (awf_trace) g_printf("» create_expander()\n"); GtkWidget *expander, *scrolled_window, *tv; GtkTextBuffer *buffer; gchar *text; // GTK_EXPANDER expander = gtk_expander_new(_app("More...")); gtk_expander_set_expanded(GTK_EXPANDER(expander), TRUE); // GTK_SCROLLED_WINDOW scrolled_window = gtk_scrolled_window_new(NULL, NULL); gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrolled_window), GTK_SHADOW_IN); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS); gtk_widget_set_size_request(scrolled_window, -1, 120); tv = gtk_text_view_new(); gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(tv), GTK_WRAP_WORD); text = g_strdup_printf("%s %s", _app("A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme."), _app("A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme.")); buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(tv)); gtk_text_buffer_set_text(GTK_TEXT_BUFFER(buffer), text, -1); g_free(text); // layout gtk_container_add(GTK_CONTAINER(scrolled_window), tv); gtk_container_add(GTK_CONTAINER(expander), scrolled_window); add_to(root, expander, FALSE, FALSE, 0, 0); } static void create_frames(GtkWidget *root1, GtkWidget *root2) { // ok if (awf_trace) g_printf("» create_frames()\n"); GtkWidget *frame1, *frame2, *frame3, *frame4; // GTK_FRAME frame1 = gtk_frame_new("Frame (shadow in)"); gtk_frame_set_shadow_type(GTK_FRAME(frame1), GTK_SHADOW_IN); frame2 = gtk_frame_new("Frame (shadow out)"); gtk_frame_set_shadow_type(GTK_FRAME(frame2), GTK_SHADOW_OUT); frame3 = gtk_frame_new("Frame (shadow etched in)"); gtk_frame_set_shadow_type(GTK_FRAME(frame3), GTK_SHADOW_ETCHED_IN); frame4 = gtk_frame_new("Frame (shadow etched out)"); gtk_frame_set_shadow_type(GTK_FRAME(frame4), GTK_SHADOW_ETCHED_OUT); gtk_widget_set_sensitive(frame4, FALSE); // layout add_to(root1, frame1, TRUE, TRUE, 0, 0); add_to(root1, frame2, TRUE, TRUE, 0, 0); add_to(root2, frame3, TRUE, TRUE, 0, 0); add_to(root2, frame4, TRUE, TRUE, 0, 0); } static void create_notebooks(GtkWidget *root1, GtkWidget *root2) { // ok if (awf_trace) g_printf("» create_notebooks()\n"); // GTK_NOTEBOOK notebook1 = gtk_notebook_new(); gtk_notebook_popup_enable(GTK_NOTEBOOK(notebook1)); gtk_notebook_set_scrollable(GTK_NOTEBOOK(notebook1), FALSE); gtk_notebook_set_tab_pos(GTK_NOTEBOOK(notebook1), GTK_POS_TOP); create_notebook_tab(notebook1, "Tab1", NULL, FALSE); create_notebook_tab(notebook1, "Tab2", NULL, FALSE); create_notebook_tab(notebook1, "Tab3", NULL, TRUE); create_notebook_tab(notebook1, "Tab4", NULL, TRUE); notebook2 = gtk_notebook_new(); gtk_notebook_popup_enable(GTK_NOTEBOOK(notebook2)); gtk_notebook_set_scrollable(GTK_NOTEBOOK(notebook2), FALSE); gtk_notebook_set_tab_pos(GTK_NOTEBOOK(notebook2), GTK_POS_BOTTOM); create_notebook_tab(notebook2, "Tab1", NULL, FALSE); create_notebook_tab(notebook2, "Tab2", NULL, FALSE); create_notebook_tab(notebook2, "Tab3", NULL, TRUE); create_notebook_tab(notebook2, "Tab4", NULL, TRUE); notebook3 = gtk_notebook_new(); gtk_notebook_popup_enable(GTK_NOTEBOOK(notebook3)); gtk_notebook_set_scrollable(GTK_NOTEBOOK(notebook3), FALSE); gtk_notebook_set_tab_pos(GTK_NOTEBOOK(notebook3), GTK_POS_LEFT); create_notebook_tab(notebook3, "T1", NULL, FALSE); create_notebook_tab(notebook3, "Tab2", NULL, FALSE); create_notebook_tab(notebook3, "T3b", NULL, TRUE); create_notebook_tab(notebook3, "T4", NULL, TRUE); notebook4 = gtk_notebook_new(); gtk_notebook_popup_enable(GTK_NOTEBOOK(notebook4)); gtk_notebook_set_scrollable(GTK_NOTEBOOK(notebook4), FALSE); gtk_notebook_set_tab_pos(GTK_NOTEBOOK(notebook4), GTK_POS_RIGHT); create_notebook_tab(notebook4, "T1", NULL, FALSE); create_notebook_tab(notebook4, "Tab2", NULL, FALSE); create_notebook_tab(notebook4, "T3b", NULL, TRUE); create_notebook_tab(notebook4, "T4", NULL, TRUE); // layout add_to(root1, notebook1, TRUE, TRUE, 0, 0); add_to(root1, notebook2, TRUE, TRUE, 0, 0); add_to(root2, notebook3, TRUE, TRUE, 0, 0); add_to(root2, notebook4, TRUE, TRUE, 0, 0); } static void create_notebook_tab(GtkWidget *notebook, gchar *text, GtkWidget *content, gboolean close) { // ok GtkWidget *headbtn = BOXH, *btn; add_to(headbtn, gtk_label_new(text), TRUE, TRUE, 0, 0); // GTK_BUTTON if (close) { btn = gtk_button_new(); gtk_button_set_image(GTK_BUTTON(btn), gtk_image_new_from_icon_name("window-close", GTK_ICON_SIZE_MENU)); gtk_button_set_relief(GTK_BUTTON(btn), GTK_RELIEF_NONE); gtk_widget_set_name(btn, "close-button"); gtk_rc_parse_string("style \"close-button\"\n" "{\n" "GtkWidget::focus-padding = 0\n" "GtkWidget::focus-line-width = 0\n" "xthickness = 0\n" "ythickness = 0\n" "}\n" "widget \"*.close-button\" style \"close-button\""); gtk_button_set_focus_on_click(GTK_BUTTON(btn), FALSE); add_to(headbtn, btn, FALSE, FALSE, 0, 0); } if (!content) content = BOXV; gtk_widget_show_all(headbtn); gtk_notebook_append_page(GTK_NOTEBOOK(notebook), content, headbtn); gtk_notebook_set_tab_reorderable(GTK_NOTEBOOK(notebook), content, TRUE); } static void create_treview(GtkWidget *root) { // ok if (awf_trace) g_printf("» create_treview()\n"); GtkWidget *scrolled_window, *view; GtkCellRenderer *renderer; GtkTreeStore *store; GtkTreeIter iter; int idx = 0; // data store = gtk_tree_store_new(11, G_TYPE_INT, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_DOUBLE, G_TYPE_DOUBLE, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN); gtk_tree_store_append(store, &iter, NULL); gtk_tree_store_set(store, &iter, 0, 1, 1, FALSE, 2, FALSE, 3, "Text 1.1", 4, 0.0, 5, 0.0, 6, "Text 1.2", 7, "document-open", 8, "document-open", 9, FALSE, 10, FALSE, -1); gtk_tree_store_append(store, &iter, NULL); gtk_tree_store_set(store, &iter, 0, 2, 1, TRUE, 2, TRUE, 3, "Text 2.1", 4, 10.0, 5, 10.0, 6, "Text 2.2", 7, "document-save", 8, "document-save", 9, TRUE, 10, TRUE, -1); gtk_tree_store_append(store, &iter, NULL); gtk_tree_store_set(store, &iter, 0, 3, 1, FALSE, 2, FALSE, 3, "Text 3.1", 4, 20.0, 5, 20.0, 6, "Text 3.2", 7, "document-save-as", 8, "document-save-as", 9, FALSE, 10, FALSE, -1); gtk_tree_store_append(store, &iter, NULL); gtk_tree_store_set(store, &iter, 0, 4, 1, TRUE, 2, TRUE, 3, "Text 4.1", 4, 30.0, 5, 30.0, 6, "Text 4.2", 7, "view-refresh", 8, "view-refresh", 9, TRUE, 10, TRUE, -1); gtk_tree_store_append(store, &iter, NULL); gtk_tree_store_set(store, &iter, 0, 5, 1, FALSE, 2, FALSE, 3, "Text 5.1", 4, 40.0, 5, 40.0, 6, "Text 5.2", 7, "edit-cut", 8, "edit-cut", 9, FALSE, 10, FALSE, -1); gtk_tree_store_append(store, &iter, NULL); gtk_tree_store_set(store, &iter, 0, 6, 1, TRUE, 2, TRUE, 3, "Text 6.1", 4, 50.0, 5, 50.0, 6, "Text 6.2", 7, "help-contents", 8, "help-contents", 9, TRUE, 10, TRUE, -1); gtk_tree_store_append(store, &iter, NULL); gtk_tree_store_set(store, &iter, 0, 7, 1, FALSE, 2, FALSE, 3, "Text 7.1", 4, 60.0, 5, 60.0, 6, "Text 7.2", 7, "document-open", 8, "document-open", 9, FALSE, 10, FALSE, -1); gtk_tree_store_append(store, &iter, NULL); gtk_tree_store_set(store, &iter, 0, 8, 1, TRUE, 2, TRUE, 3, "Text 8.1", 4, 70.0, 5, 70.0, 6, "Text 8.2", 7, "document-save", 8, "document-save", 9, TRUE, 10, TRUE, -1); gtk_tree_store_append(store, &iter, NULL); gtk_tree_store_set(store, &iter, 0, 9, 1, FALSE, 2, FALSE, 3, "Text 9.1", 4, 80.0, 5, 80.0, 6, "Text 9.2", 7, "document-save-as", 8, "document-save-as", 9, FALSE, 10, FALSE, -1); gtk_tree_store_append(store, &iter, NULL); gtk_tree_store_set(store, &iter, 0, 10, 1, TRUE, 2, TRUE, 3, "Text 10.1", 4, 90.0, 5, 90.0, 6, "Text 10.2", 7, "view-refresh", 8, "view-refresh", 9, TRUE, 10, TRUE, -1); gtk_tree_store_append(store, &iter, NULL); gtk_tree_store_set(store, &iter, 0, 11, 1, FALSE, 2, FALSE, 3, "Text 11.1", 4, 100.0, 5, 100.0, 6, "Text 11.2", 7, "edit-cut", 8, "edit-cut", 9, FALSE, 10, FALSE, -1); // columns view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store)); gtk_tree_view_set_reorderable(GTK_TREE_VIEW(view), FALSE); // rows gtk_tree_view_set_show_expanders(GTK_TREE_VIEW(view), FALSE); gtk_tree_view_set_headers_clickable(GTK_TREE_VIEW(view), TRUE); gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(store), 0, GTK_SORT_ASCENDING); g_object_unref(G_OBJECT(store)); idx = 0; renderer = gtk_cell_renderer_text_new(); gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), idx, "i", renderer, "text", idx, NULL); gtk_tree_view_column_set_sort_column_id(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), idx); gtk_tree_view_column_set_reorderable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); gtk_tree_view_column_set_resizable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); g_object_set(renderer, "editable", TRUE, NULL); idx = 1; renderer = gtk_cell_renderer_toggle_new(); gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), idx, "c", renderer, "active", idx, NULL); gtk_tree_view_column_set_reorderable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); gtk_tree_view_column_set_resizable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); gtk_tree_view_column_set_min_width(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), 20); idx = 2; renderer = gtk_cell_renderer_toggle_new(); gtk_cell_renderer_toggle_set_radio(GTK_CELL_RENDERER_TOGGLE(renderer), TRUE); gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), idx, "r", renderer, "active", idx, NULL); gtk_tree_view_column_set_reorderable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); gtk_tree_view_column_set_resizable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); gtk_tree_view_column_set_min_width(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), 20); idx = 3; renderer = gtk_cell_renderer_text_new(); gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), idx, "Text", renderer, "text", idx, NULL); gtk_tree_view_column_set_sort_column_id(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), idx); gtk_tree_view_column_set_reorderable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); gtk_tree_view_column_set_resizable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); g_object_set(renderer, "editable", TRUE, NULL); idx = 4; renderer = gtk_cell_renderer_progress_new(); gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), idx, "Progress", renderer, "value", idx, NULL); gtk_tree_view_column_set_sort_column_id(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), idx); gtk_tree_view_column_set_reorderable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); gtk_tree_view_column_set_resizable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); idx = 5; renderer = gtk_cell_renderer_progress_new(); gtk_cell_renderer_set_sensitive(renderer, FALSE); gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), idx, "Progress", renderer, "value", idx, NULL); gtk_tree_view_column_set_sort_column_id(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), idx); gtk_tree_view_column_set_reorderable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); gtk_tree_view_column_set_resizable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); idx = 6; renderer = gtk_cell_renderer_text_new(); gtk_cell_renderer_set_sensitive(renderer, FALSE); gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), idx, "Text", renderer, "text", idx, NULL); gtk_tree_view_column_set_sort_column_id(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), idx); gtk_tree_view_column_set_reorderable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); gtk_tree_view_column_set_resizable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); idx = 7; renderer = gtk_cell_renderer_pixbuf_new(); gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), idx, "Icon", renderer, "icon-name", idx, NULL); gtk_tree_view_column_set_reorderable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); gtk_tree_view_column_set_resizable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); idx = 8; renderer = gtk_cell_renderer_pixbuf_new(); gtk_cell_renderer_set_sensitive(renderer, FALSE); gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), idx, "Icon", renderer, "icon-name", idx, NULL); gtk_tree_view_column_set_reorderable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); gtk_tree_view_column_set_resizable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); idx = 9; renderer = gtk_cell_renderer_toggle_new(); gtk_cell_renderer_set_sensitive(renderer, FALSE); gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), idx, "c", renderer, "active", idx, NULL); gtk_tree_view_column_set_reorderable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); gtk_tree_view_column_set_resizable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); gtk_tree_view_column_set_min_width(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), 20); idx = 10; renderer = gtk_cell_renderer_toggle_new(); gtk_cell_renderer_set_sensitive(renderer, FALSE); gtk_cell_renderer_toggle_set_radio(GTK_CELL_RENDERER_TOGGLE(renderer), TRUE); gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), idx, "r", renderer, "active", idx, NULL); gtk_tree_view_column_set_reorderable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); gtk_tree_view_column_set_resizable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); gtk_tree_view_column_set_min_width(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), 20); // colors for lines gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(view), TRUE); // scrolled window scrolled_window = gtk_scrolled_window_new(NULL, NULL); gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrolled_window), GTK_SHADOW_IN); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled_window), GTK_POLICY_ALWAYS, GTK_POLICY_ALWAYS); gtk_widget_set_size_request(scrolled_window, 200, 200); // The 200 gtk_widget_set_size_request(view, 200, 200); // The 200 gtk_container_add(GTK_CONTAINER(scrolled_window), view); add_to(root, scrolled_window, FALSE, FALSE, 0, 0); } static void create_scales(GtkWidget *notebook, gchar *text, int position) { if (awf_trace) g_printf("» create_scales()\n"); GtkWidget *hbox = BOXH; GtkWidget *vbox1 = BOXV, *vbox2 = BOXV, *vbox3 = BOXV, *hboxa = BOXH, *hboxb = BOXH; GtkWidget *scale1v, *scale2v, *scale3v, *scale4v, *scale5v, *scale6v, *scale7v, *scale8v, *scale9v, *scale10v, *scale11v, *scale12v; GtkWidget *scale1h, *scale2h, *scale3h, *scale4h, *scale5h, *scale6h, *scale7h, *scale8h, *scale9h, *scale10h, *scale11h, *scale12h; gdouble value = gtk_range_get_value(GTK_RANGE(scale1)); gtk_container_set_border_width(GTK_CONTAINER(hbox), 12); // vertical scales scale1v = create_vertical_scale(value, FALSE, FALSE, position); scale2v = create_vertical_scale(value, FALSE, FALSE, position); update_marks(GTK_SCALE(scale2v), FALSE, GTK_POS_LEFT); scale3v = create_vertical_scale(value, FALSE, FALSE, position); update_marks(GTK_SCALE(scale3v), TRUE, GTK_POS_LEFT); scale4v = create_vertical_scale(value, TRUE, FALSE, position); scale5v = create_vertical_scale(value, TRUE, FALSE, position); update_marks(GTK_SCALE(scale5v), FALSE, GTK_POS_LEFT); scale6v = create_vertical_scale(value, TRUE, FALSE, position); update_marks(GTK_SCALE(scale6v), TRUE, GTK_POS_LEFT); scale7v = create_vertical_scale(value, FALSE, TRUE, position); scale8v = create_vertical_scale(value, FALSE, TRUE, position); update_marks(GTK_SCALE(scale8v), FALSE, GTK_POS_RIGHT); scale9v = create_vertical_scale(value, FALSE, TRUE, position); update_marks(GTK_SCALE(scale9v), TRUE, GTK_POS_RIGHT); scale10v = create_vertical_scale(value, TRUE, TRUE, position); scale11v = create_vertical_scale(value, TRUE, TRUE, position); update_marks(GTK_SCALE(scale11v), FALSE, GTK_POS_RIGHT); scale12v = create_vertical_scale(value, TRUE, TRUE, position); update_marks(GTK_SCALE(scale12v), TRUE, GTK_POS_RIGHT); // horizontal scales scale1h = create_horizontal_scale(value, FALSE, FALSE, position); scale2h = create_horizontal_scale(value, FALSE, FALSE, position); update_marks(GTK_SCALE(scale2h), FALSE, GTK_POS_TOP); scale3h = create_horizontal_scale(value, FALSE, FALSE, position); update_marks(GTK_SCALE(scale3h), TRUE, GTK_POS_TOP); scale4h = create_horizontal_scale(value, TRUE, FALSE, position); scale5h = create_horizontal_scale(value, TRUE, FALSE, position); update_marks(GTK_SCALE(scale5h), FALSE, GTK_POS_TOP); scale6h = create_horizontal_scale(value, TRUE, FALSE, position); update_marks(GTK_SCALE(scale6h), TRUE, GTK_POS_TOP); scale7h = create_horizontal_scale(value, FALSE, TRUE, position); scale8h = create_horizontal_scale(value, FALSE, TRUE, position); update_marks(GTK_SCALE(scale8h), FALSE, GTK_POS_BOTTOM); scale9h = create_horizontal_scale(value, FALSE, TRUE, position); update_marks(GTK_SCALE(scale9h), TRUE, GTK_POS_BOTTOM); scale10h = create_horizontal_scale(value, TRUE, TRUE, position); scale11h = create_horizontal_scale(value, TRUE, TRUE, position); update_marks(GTK_SCALE(scale11h), FALSE, GTK_POS_BOTTOM); scale12h = create_horizontal_scale(value, TRUE, TRUE, position); update_marks(GTK_SCALE(scale12h), TRUE, GTK_POS_BOTTOM); // layout add_to(hbox, vbox1, TRUE, TRUE, 5, 5); add_to(vbox1, scale1h, FALSE, FALSE, 5, 5); add_to(vbox1, scale2h, FALSE, FALSE, 5, 5); add_to(vbox1, scale3h, FALSE, FALSE, 5, 5); add_to(vbox1, scale4h, FALSE, FALSE, 5, 5); add_to(vbox1, scale5h, FALSE, FALSE, 5, 5); add_to(vbox1, scale6h, FALSE, FALSE, 5, 5); add_to(hbox, vbox2, TRUE, TRUE, 5, 5); add_to(vbox2, hboxa, TRUE, TRUE, 0, 0); add_to(hboxa, scale1v, FALSE, FALSE, 5, 5); add_to(hboxa, scale2v, FALSE, FALSE, 5, 5); add_to(hboxa, scale3v, FALSE, FALSE, 5, 5); add_to(hboxa, scale7v, FALSE, FALSE, 5, 5); add_to(hboxa, scale8v, FALSE, FALSE, 5, 5); add_to(hboxa, scale9v, FALSE, FALSE, 5, 5); add_to(vbox2, hboxb, TRUE, TRUE, 0, 0); add_to(hboxb, scale4v, FALSE, FALSE, 5, 5); add_to(hboxb, scale5v, FALSE, FALSE, 5, 5); add_to(hboxb, scale6v, FALSE, FALSE, 5, 5); add_to(hboxb, scale10v, FALSE, FALSE, 5, 5); add_to(hboxb, scale11v, FALSE, FALSE, 5, 5); add_to(hboxb, scale12v, FALSE, FALSE, 5, 5); add_to(hbox, vbox3, TRUE, TRUE, 5, 5); add_to(vbox3, scale7h, FALSE, FALSE, 5, 5); add_to(vbox3, scale8h, FALSE, FALSE, 5, 5); add_to(vbox3, scale9h, FALSE, FALSE, 5, 5); add_to(vbox3, scale10h, FALSE, FALSE, 5, 5); add_to(vbox3, scale11h, FALSE, FALSE, 5, 5); add_to(vbox3, scale12h, FALSE, FALSE, 5, 5); create_notebook_tab(notebook, text, hbox, FALSE); } static GtkWidget* create_horizontal_scale(gdouble value, gboolean draw, gboolean inverted, int position) { // ok if (awf_trace) g_printf("» create_horizontal_scale()\n"); GtkWidget *scale; scale = gtk_hscale_new_with_range(0, 100, 1); gtk_range_set_value(GTK_RANGE(scale), value); gtk_scale_set_draw_value(GTK_SCALE(scale), draw); gtk_scale_set_value_pos(GTK_SCALE(scale), position); gtk_range_set_inverted(GTK_RANGE(scale), inverted); gtk_widget_set_size_request(scale, 186, -1); // The 186 return scale; } static GtkWidget* create_vertical_scale(gdouble value, gboolean draw, gboolean inverted, int position) { // ok if (awf_trace) g_printf("» create_vertical_scale()\n"); GtkWidget *scale; scale = gtk_vscale_new_with_range(0, 100, 1); gtk_scale_set_value_pos(GTK_SCALE(scale), position); gtk_range_set_inverted(GTK_RANGE(scale), inverted); gtk_scale_set_draw_value(GTK_SCALE(scale), draw); gtk_range_set_value(GTK_RANGE(scale), value); gtk_widget_set_size_request(scale, -1, 100); // The 100 return scale; } // traditional menu - common gtk2/3 except one line static void create_traditional_menubar(GtkWidget *root) { if (awf_trace) g_printf("» create_traditional_menubar()\n"); GtkWidget *menu, *submenu, *menuitem, *base; GtkAccelGroup *accels = gtk_accel_group_new(); GSList *group = NULL; GList *iterator; gboolean ok = FALSE; gtk_window_add_accel_group(GTK_WINDOW(window), accels); // options menu = create_menu(root, _app("_Options"), TRUE); gtk_menu_set_accel_group(GTK_MENU(menu), accels); // very important // @todo option command line? if (g_getenv("AWF_TEAROFF") != NULL) create_menuitem_tearoff(menu); create_menuitem(menu, "gtk-open", FALSE, AWF_ACCEL_OPEN, AWF_OPEN, dialog_open); create_menuitem(menu, _app("Open recent file"), FALSE, AWF_ACCEL_RECE, AWF_RECE, dialog_recent); create_menuitem(menu, "gtk-save", FALSE, AWF_ACCEL_SAVE, AWF_SAVE, dialog_save); create_menuitem(menu, "gtk-refresh", FALSE, AWF_ACCEL_REFR, AWF_REFR, G_CALLBACK(on_sighup)); // G_CALLBACK(update_theme) create_menuitem(menu, _app("Calendar"), FALSE, AWF_ACCEL_CALE, AWF_CALE, dialog_calendar); create_menuitem(menu, "GtkScales", FALSE, AWF_ACCEL_SCAL, AWF_SCAL, dialog_scales); create_menuitem(menu, "gtk-properties", FALSE, AWF_ACCEL_PROP, AWF_PROP, dialog_message); create_menuitem(menu, "gtk-page-setup", FALSE, AWF_ACCEL_PRSE, AWF_PRSE, dialog_page_setup); create_menuitem(menu, "gtk-print", FALSE, AWF_ACCEL_PRIN, AWF_PRIN, dialog_print); submenu = create_menu(menu, _app("More..."), TRUE); gtk_menu_set_accel_group(GTK_MENU(submenu), accels); // very important create_menuitem(submenu, "gtk-cut", FALSE, AWF_ACCEL_MCUT, AWF_MCUT, NULL); create_menuitem(submenu, "gtk-copy", FALSE, AWF_ACCEL_MCOP, AWF_MCOP, NULL); create_menuitem(submenu, "gtk-paste", FALSE, AWF_ACCEL_MPAS, AWF_MPAS, NULL); menuitem = gtk_separator_menu_item_new(); gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); create_menuitem_check(menu, g_strdup_printf("Check 1 %s", _app("(unchecked)")), TRUE, FALSE, FALSE, FALSE); create_menuitem_check(menu, g_strdup_printf("Check 2 %s", _app("(checked)")), TRUE, TRUE, FALSE, FALSE); create_menuitem_check(menu, g_strdup_printf("Check 3 %s", _app("(inconsistent)")), TRUE, FALSE, TRUE, FALSE); create_menuitem_check(menu, g_strdup_printf("Check 1 %s", _app("(unchecked)")), TRUE, FALSE, FALSE, TRUE); create_menuitem_check(menu, g_strdup_printf("Check 2 %s", _app("(checked)")), TRUE, TRUE, FALSE, TRUE); create_menuitem_check(menu, g_strdup_printf("Check 3 %s", _app("(inconsistent)")), TRUE, FALSE, TRUE, TRUE); menuitem = gtk_separator_menu_item_new(); gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); menuitem = create_menuitem_radio(menu, g_strdup_printf("Radio 1 %s", _app("(unchecked)")), TRUE, FALSE, FALSE, FALSE, NULL); group = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(menuitem)); create_menuitem_radio(menu, g_strdup_printf("Radio 2 %s", _app("(checked)")), TRUE, TRUE, FALSE, FALSE, group); create_menuitem_radio(menu, g_strdup_printf("Radio 3 %s", _app("(inconsistent)")), TRUE, FALSE, TRUE, FALSE, NULL); menuitem = create_menuitem_radio(menu, g_strdup_printf("Radio 1 %s", _app("(unchecked)")), TRUE, FALSE, FALSE, TRUE, NULL); group = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(menuitem)); create_menuitem_radio(menu, g_strdup_printf("Radio 2 %s", _app("(checked)")), TRUE, TRUE, FALSE, TRUE, group); create_menuitem_radio(menu, g_strdup_printf("Radio 3 %s", _app("(inconsistent)")), TRUE, FALSE, TRUE, TRUE, NULL); menuitem = gtk_separator_menu_item_new(); gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); create_menuitem(menu, "gtk-close", TRUE, AWF_ACCEL_CLOS, AWF_CLOS, NULL); create_menuitem(menu, "gtk-quit", FALSE, AWF_ACCEL_QUIT, AWF_QUIT, quit); // system themes group = NULL; menu = create_menu(root, _app("_System themes"), FALSE); for (iterator = list_system_theme; iterator; iterator = iterator->next) { if ( (strcmp((gchar*) iterator->data, "Mint-L") == 0) || (strcmp((gchar*) iterator->data, "Mint-X") == 0) || (strcmp((gchar*) iterator->data, "Mint-Y") == 0) || (strcmp((gchar*) iterator->data, "Yaru") == 0) || (strcmp((gchar*) iterator->data, "Sucharu") == 0) ) { submenu = create_menu(menu, iterator->data, FALSE); base = submenu; ok = TRUE; } else if (ok && ( g_str_has_prefix((gchar*) iterator->data, "Mint-L") || g_str_has_prefix((gchar*) iterator->data, "Mint-X") || g_str_has_prefix((gchar*) iterator->data, "Mint-Y") || g_str_has_prefix((gchar*) iterator->data, "Yaru") || g_str_has_prefix((gchar*) iterator->data, "Sucharu") )) { base = submenu; } else { base = menu; ok = FALSE; } if (g_hash_table_lookup(hash_user_theme, iterator->data)) { menuitem = create_menuitem_radio(base, iterator->data, FALSE, FALSE, FALSE, TRUE, group); group = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(menuitem)); if (strcmp(current_theme, (gchar*) iterator->data) == 0) gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem), TRUE); g_signal_connect_swapped(menuitem, "activate", G_CALLBACK(update_theme), iterator->data); } else { menuitem = create_menuitem_radio(base, iterator->data, FALSE, FALSE, FALSE, FALSE, group); group = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(menuitem)); if (strcmp(current_theme, (gchar*) iterator->data) == 0) gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem), TRUE); g_signal_connect_swapped(menuitem, "activate", G_CALLBACK(update_theme), iterator->data); } } if (!list_system_theme) create_menuitem(menu, _app("No themes found"), TRUE, NULL, NULL, NULL); // user themes menu = create_menu(root, _app("_User themes"), FALSE); for (iterator = list_user_theme; iterator; iterator = iterator->next) { if ( (strcmp((gchar*) iterator->data, "Mint-L") == 0) || (strcmp((gchar*) iterator->data, "Mint-X") == 0) || (strcmp((gchar*) iterator->data, "Mint-Y") == 0) || (strcmp((gchar*) iterator->data, "Yaru") == 0) || (strcmp((gchar*) iterator->data, "Sucharu") == 0) ) { submenu = create_menu(menu, iterator->data, FALSE); base = submenu; ok = TRUE; } else if (ok && ( g_str_has_prefix((gchar*) iterator->data, "Mint-L") || g_str_has_prefix((gchar*) iterator->data, "Mint-X") || g_str_has_prefix((gchar*) iterator->data, "Mint-Y") || g_str_has_prefix((gchar*) iterator->data, "Yaru") || g_str_has_prefix((gchar*) iterator->data, "Sucharu") )) { base = submenu; } else { base = menu; ok = FALSE; } menuitem = create_menuitem_radio(base, iterator->data, FALSE, FALSE, FALSE, FALSE, group); group = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(menuitem)); if (strcmp(current_theme, (gchar*) iterator->data) == 0) gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem), TRUE); g_signal_connect_swapped(menuitem, "activate", G_CALLBACK(update_theme), iterator->data); } if (!list_user_theme) create_menuitem(menu, _app("No themes found"), TRUE, NULL, NULL, NULL); // text direction group = NULL; menu = create_menu(root, _app("_Text direction"), FALSE); menuitem = create_menuitem_radio(menu, _app("Left to Right (LTR)"), FALSE, FALSE, FALSE, FALSE, group); if (current_direction == 1) gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem), TRUE); g_signal_connect_swapped(menuitem, "activate", G_CALLBACK(update_text_direction), GINT_TO_POINTER(GTK_TEXT_DIR_LTR)); group = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(menuitem)); menuitem = create_menuitem_radio(menu, _app("Right to Left (RTL)"), FALSE, FALSE, FALSE, FALSE, group); if (current_direction == 2) gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem), TRUE); g_signal_connect_swapped(menuitem, "activate", G_CALLBACK(update_text_direction), GINT_TO_POINTER(GTK_TEXT_DIR_RTL)); // help menu = create_menu(root, _app("_Help"), TRUE); gtk_menu_set_accel_group(GTK_MENU(menu), accels); // very important gtk_widget_set_sensitive(create_menuitem(menu, "GtkInspector", FALSE, AWF_ACCEL_INSP, AWF_INSP, NULL), FALSE); create_menuitem(menu, "gtk-about", FALSE, AWF_ACCEL_ABOU, AWF_ABOU, dialog_about); // gtk-can-change-accels for GTK 2.24 | so same GTK 2.24 3.x 4.x & Qt 5.x 6.x accels_load(); g_object_set(gtk_settings_get_default(), "gtk-can-change-accels", FALSE, NULL); g_object_unref(accels); } static GtkWidget* create_menu(GtkWidget *root, gchar *text, gboolean cca) { if (awf_trace) g_printf("» create_menu(%s)\n", text); GtkWidget *menu, *menuitem; menu = gtk_menu_new(); menuitem = gtk_menu_item_new_with_mnemonic(text); gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), menu); gtk_menu_shell_append(GTK_MENU_SHELL(root), menuitem); if (cca) { // gtk-can-change-accels for GTK 2.24 | so same GTK 2.24 3.x 4.x & Qt 5.x 6.x gtk_widget_set_events(menu, GDK_KEY_RELEASE_MASK); g_signal_connect(menu, "key-release-event", G_CALLBACK(accels_change), NULL); } return menu; } static GtkWidget* create_menuitem_tearoff(GtkWidget *menu) { if (awf_trace) g_printf("» create_menuitem_tearoff()\n"); GtkWidget *menuitem; menuitem = gtk_tearoff_menu_item_new(); gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); return menuitem; } static GtkWidget* create_menuitem_check(GtkWidget *menu, gchar *text, gboolean free, gboolean chk, gboolean ist, gboolean dsb) { if (awf_trace) g_printf("» create_menuitem_check(%s)\n", text); GtkWidget *menuitem; menuitem = gtk_check_menu_item_new_with_mnemonic(text); gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem), chk); gtk_check_menu_item_set_inconsistent(GTK_CHECK_MENU_ITEM(menuitem), ist); gtk_widget_set_sensitive(menuitem, !dsb); gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); if (free) g_free(text); return menuitem; } static GtkWidget* create_menuitem_radio(GtkWidget *menu, gchar *text, gboolean free, gboolean chk, gboolean ist, gboolean dsb, GSList *group) { if (awf_trace) g_printf("» create_menuitem_radio(%s)\n", text); GtkWidget *menuitem; menuitem = gtk_radio_menu_item_new_with_mnemonic(group, text); gtk_check_menu_item_set_inconsistent(GTK_CHECK_MENU_ITEM(menuitem), ist); gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem), chk); gtk_widget_set_sensitive(menuitem, !dsb); gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); if (free) g_free(text); return menuitem; } static GtkWidget* create_menuitem(GtkWidget *menu, gchar *text, gboolean dsb, gchar *accel, gchar *kmp, GCallback function) { if (awf_trace) g_printf("» create_menuitem(%s)\n", text); GtkWidget *menuitem; GdkModifierType mods; guint key; if (g_str_has_prefix(text, "gtk-")) menuitem = gtk_image_menu_item_new_from_stock(text, NULL); else menuitem = gtk_image_menu_item_new_with_mnemonic(text); gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); gtk_widget_set_sensitive(menuitem, !dsb); if (accel && kmp) { gtk_accelerator_parse(accel, &key, &mods); gtk_accel_map_add_entry(kmp, key, mods); } if (kmp) { gtk_menu_item_set_accel_path(GTK_MENU_ITEM(menuitem), kmp); // gtk-can-change-accels for GTK 2.24 | so same GTK 2.24 3.x 4.x & Qt 5.x 6.x g_signal_connect(menuitem, "select", G_CALLBACK(accels_select), NULL); g_signal_connect(menuitem, "deselect", G_CALLBACK(accels_deselect), NULL); } if (function) g_signal_connect(menuitem, "activate", function, NULL); return menuitem; } static void accels_load() { // ok if (awf_trace) g_printf("» accels_load()\n"); gchar *old_path = g_build_filename(g_get_home_dir(), ".awf-gtk-accels", NULL); if (g_file_test(old_path, G_FILE_TEST_EXISTS)) { gchar *new_path = g_build_filename(g_get_home_dir(), ".awf-accels", NULL); g_rename(old_path, new_path); g_free(new_path); } g_free(old_path); // gtk-can-change-accels for GTK 2.24 | so same GTK 2.24 3.x 4.x & Qt 5.x 6.x gchar *path = g_build_filename(g_get_home_dir(), ".awf-accels", NULL); if (g_file_test(path, G_FILE_TEST_IS_REGULAR)) gtk_accel_map_load(path); g_free(path); } static void accels_select(GtkWidget *widget) { // ok // gtk-can-change-accels for GTK 2.24 | so same GTK 2.24 3.x 4.x & Qt 5.x 6.x current_menuitem = widget; } static void accels_deselect(GtkWidget *widget) { // ok // gtk-can-change-accels for GTK 2.24 | so same GTK 2.24 3.x 4.x & Qt 5.x 6.x if (current_menuitem == widget) current_menuitem = NULL; } static void accels_change(GtkWidget *widget, GdkEventKey *event) { // ok if (awf_trace) g_printf("» accels_change()\n"); // gtk-can-change-accels for GTK 2.24 | so same GTK 2.24 3.x 4.x & Qt 5.x 6.x // @see https://gitlab.gnome.org/GNOME/gtk/-/commit/2d79334bb069224966b3dcd8456967c9800e8fd0 if (current_menuitem) { GtkMenuItem *menuitem = GTK_MENU_ITEM(current_menuitem); gchar *key = gdk_keyval_name(event->keyval); const gchar *acl = gtk_menu_item_get_accel_path(menuitem); if ( key && acl && (strcmp(key, "Control_L") != 0) && (strcmp(key, "Control_R") != 0) && (strcmp(key, "Shift_L") != 0) && (strcmp(key, "Shift_R") != 0) && (strcmp(key, "Super_L") != 0) && (strcmp(key, "Super_R") != 0) && (strcmp(key, "Meta_L") != 0) && (strcmp(key, "Meta_R") != 0) && (strcmp(key, "Alt_L") != 0) && (strcmp(key, "Alt_R") != 0) ) { gboolean del = (event->keyval == GDK_KEY_Delete) || (event->keyval == GDK_KEY_KP_Delete) || (event->keyval == GDK_KEY_BackSpace); if ( del || // f1..12 ((event->keyval >= GDK_KEY_F1) && (event->keyval <= GDK_KEY_F12)) || // crtl/shift/super/alt + ? (event->state & GDK_CONTROL_MASK) || (event->state & GDK_SHIFT_MASK) || (event->state & GDK_SUPER_MASK) || (event->state & GDK_META_MASK) ) { must_save_accels = TRUE; gtk_accel_map_change_entry( acl, del ? 0 : gdk_keyval_to_lower(event->keyval), del ? 0 : event->state & gtk_accelerator_get_default_mod_mask(), TRUE); } } } } static void accels_save() { // ok if (awf_trace) g_printf("» accels_save()\n"); // gtk-can-change-accels for GTK 2.24 | so same GTK 2.24 3.x 4.x & Qt 5.x 6.x if (must_save_accels) { gchar *path = g_build_filename(g_get_home_dir(), ".awf-accels", NULL); gtk_accel_map_save(path); g_free(path); } } // dialogs static void dialog_open() { // ok if (awf_trace) g_printf("» dialog_open()\n"); GtkWidget *dialog = gtk_file_chooser_dialog_new( "GtkFileChooserDialog:Open", GTK_WINDOW(window), GTK_FILE_CHOOSER_ACTION_OPEN, "gtk-cancel", GTK_RESPONSE_CANCEL, "gtk-open", GTK_RESPONSE_ACCEPT, NULL); gtk_file_chooser_set_select_multiple(GTK_FILE_CHOOSER(dialog), TRUE); gtk_dialog_run(GTK_DIALOG(dialog)); gtk_widget_destroy(dialog); } static void dialog_recent() { // ok if (awf_trace) g_printf("» dialog_recent()\n"); GtkWidget *dialog = gtk_recent_chooser_dialog_new( "GtkRecentChooserDialog", GTK_WINDOW(window), "gtk-cancel", GTK_RESPONSE_CANCEL, "gtk-open", GTK_RESPONSE_ACCEPT, NULL); gtk_dialog_run(GTK_DIALOG(dialog)); gtk_widget_destroy(dialog); } static void dialog_save() { // ok if (awf_trace) g_printf("» dialog_save()\n"); GtkWidget *dialog = gtk_file_chooser_dialog_new( "GtkFileChooserDialog:Save", GTK_WINDOW(window), GTK_FILE_CHOOSER_ACTION_SAVE, "gtk-cancel", GTK_RESPONSE_CANCEL, "gtk-save", GTK_RESPONSE_ACCEPT, NULL); gtk_dialog_run(GTK_DIALOG(dialog)); gtk_widget_destroy(dialog); } static void dialog_message() { // ok if (awf_trace) g_printf("» dialog_message()\n"); GtkWidget *dialog = gtk_message_dialog_new( GTK_WINDOW(window), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_INFO, GTK_BUTTONS_YES_NO, "GtkMessageDialog"); gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(dialog), _app("A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme.")); gtk_window_set_title(GTK_WINDOW(dialog), "GtkMessageDialog"); gtk_dialog_run(GTK_DIALOG(dialog)); gtk_widget_destroy(dialog); } static void dialog_page_setup() { // ok if (awf_trace) g_printf("» dialog_page_setup()\n"); //GtkWidget *dialog = gtk_page_setup_unix_dialog_new("GtkPageSetupUnixDialog", GTK_WINDOW(window)); //gtk_dialog_run(GTK_DIALOG(dialog)); //gtk_widget_destroy(dialog); GtkPageSetup *setup = gtk_print_run_page_setup_dialog(GTK_WINDOW(window), NULL, NULL); g_object_unref(setup); } static void dialog_print() { // ok if (awf_trace) g_printf("» dialog_print()\n"); //GtkWidget *dialog = gtk_print_unix_dialog_new("GtkPrintUnixDialog", GTK_WINDOW(window)); //gtk_dialog_run(GTK_DIALOG(dialog)); //gtk_widget_destroy(dialog); GtkPrintOperation *op = gtk_print_operation_new(); gtk_print_operation_run(op, GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG, GTK_WINDOW(window), NULL); g_object_unref(op); } static void dialog_about() { // ok if (awf_trace) g_printf("» dialog_about()\n"); GdkPixbuf *pixbuf = NULL; #if defined (G_OS_WIN32) HICON hIcon = (HICON) LoadImage(GetModuleHandle(NULL), "IDI_ICON1", IMAGE_ICON, 48, 48, LR_DEFAULTSIZE); if (hIcon) pixbuf = gdk_win32_icon_to_pixbuf_libgtk_only(hIcon); #endif gchar *c_version; #ifdef __STDC_VERSION__ if (__STDC_VERSION__ >= 202311L) c_version = "C23"; else if (__STDC_VERSION__ >= 201710L) c_version = "C17"; else if (__STDC_VERSION__ >= 201112L) c_version = "C11"; else if (__STDC_VERSION__ >= 199901L) c_version = "C99"; else if (__STDC_VERSION__ >= 199409L) c_version = "C95"; else c_version = "C (unknown)"; #else c_version = "C89/C90"; #endif gchar *t1, *t2, *t3, *t4; gtk_show_about_dialog(GTK_WINDOW(window), "version", VERSION, "comments", t1 = g_strdup_printf("%s\n\n%s\n%s\n\n%s\n%s", _app("A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme."), t2 = g_strdup_printf(_app("Remove %s file"), "~/.awf-accels"), _app("to reset keyboard shortcuts."), t3 = g_strdup_printf(_app("compiled in %s with gtk %d.%d.%d and glib %d.%d.%d and pango %s"), c_version, GTK_MAJOR_VERSION, GTK_MINOR_VERSION, GTK_MICRO_VERSION, GLIB_MAJOR_VERSION, GLIB_MINOR_VERSION, GLIB_MICRO_VERSION, PANGO_VERSION_STRING), t4 = g_strdup_printf(_app(" started with gtk %d.%d.%d and glib %d.%d.%d and pango %s"), gtk_major_version, gtk_minor_version, gtk_micro_version, glib_major_version, glib_minor_version, glib_micro_version, pango_version_string()) ), "website", "https://github.com/luigifab/awf-extended", "copyright", "Copyright © 2020-2026 Fabrice Creuzot (luigifab)\nCopyright © 2011-2017 Valère Monseur (valr)", "icon-name", pixbuf ? NULL : GETTEXT_PACKAGE, "logo-icon-name", pixbuf ? NULL : GETTEXT_PACKAGE, "logo", pixbuf, "license", _app("A widget factory 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."), "wrap-license", TRUE, NULL); g_free(t1); g_free(t2); g_free(t3); g_free(t4); #if defined (G_OS_WIN32) if (hIcon) { if (pixbuf) g_object_unref(pixbuf); DestroyIcon(hIcon); } #endif } static void dialog_calendar() { if (awf_trace) g_printf("» dialog_calendar()\n"); GtkWidget *dialog, *infobar, *label, *calendar, *area, *btn, *vbox = BOXV; dialog = gtk_dialog_new_with_buttons(NULL, GTK_WINDOW(window), GTK_DIALOG_DESTROY_WITH_PARENT, NULL, NULL); // info bars and calendar infobar = gtk_info_bar_new_with_buttons("gtk-ok", GTK_RESPONSE_OK, NULL); gtk_info_bar_set_message_type(GTK_INFO_BAR(infobar), GTK_MESSAGE_INFO); label = gtk_label_new(_app("This is an info bar.")); add_to(infobar, label, FALSE, FALSE, 0, 0); add_to(vbox, infobar, FALSE, FALSE, 0, 0); infobar = gtk_info_bar_new_with_buttons(_app("Ok"), GTK_RESPONSE_OK, NULL); gtk_info_bar_set_message_type(GTK_INFO_BAR(infobar), GTK_MESSAGE_QUESTION); label = gtk_label_new(_app("This is a question bar.")); add_to(infobar, label, FALSE, FALSE, 0, 0); add_to(vbox, infobar, FALSE, FALSE, 0, 0); infobar = gtk_info_bar_new(); gtk_info_bar_set_message_type(GTK_INFO_BAR(infobar), GTK_MESSAGE_WARNING); label = gtk_label_new(_app("This is a warning bar.")); add_to(infobar, label, FALSE, FALSE, 0, 0); add_to(vbox, infobar, FALSE, FALSE, 0, 0); infobar = gtk_info_bar_new(); gtk_info_bar_set_message_type(GTK_INFO_BAR(infobar), GTK_MESSAGE_ERROR); label = gtk_label_new(_app("This is an error bar.")); add_to(infobar, label, FALSE, FALSE, 0, 0); add_to(vbox, infobar, FALSE, FALSE, 0, 0); calendar = gtk_calendar_new(); gtk_calendar_set_display_options(GTK_CALENDAR(calendar), GTK_CALENDAR_SHOW_HEADING | GTK_CALENDAR_SHOW_DAY_NAMES | GTK_CALENDAR_SHOW_WEEK_NUMBERS); add_to(vbox, calendar, FALSE, FALSE, 0, 0); // dialog gtk_container_set_border_width(GTK_CONTAINER(dialog), 5); area = gtk_dialog_get_content_area(GTK_DIALOG(dialog)); add_to(area, vbox, TRUE, TRUE, 5, 5); gtk_dialog_add_button(GTK_DIALOG(dialog), "gtk-cancel", GTK_RESPONSE_CANCEL); btn = gtk_dialog_add_button(GTK_DIALOG(dialog), "gtk-ok", GTK_RESPONSE_OK); gtk_widget_set_name(dialog, "AwfDialogWindow"); gtk_widget_grab_focus(GTK_WIDGET(btn)); gtk_window_set_resizable(GTK_WINDOW(dialog), FALSE); gtk_widget_set_size_request(dialog, 350, -1); gtk_window_set_title(GTK_WINDOW(dialog), "GtkDialog"); gtk_widget_show_all(dialog); gtk_dialog_run(GTK_DIALOG(dialog)); gtk_widget_destroy(dialog); } static void dialog_scales() { if (awf_trace) g_printf("» dialog_scales()\n"); GtkWidget *dialog, *notebook, *area; dialog = gtk_dialog_new_with_buttons(NULL, GTK_WINDOW(window), GTK_DIALOG_DESTROY_WITH_PARENT, NULL, NULL); notebook = gtk_notebook_new(); gtk_notebook_set_scrollable(GTK_NOTEBOOK(notebook), FALSE); gtk_notebook_set_tab_pos(GTK_NOTEBOOK(notebook), GTK_POS_TOP); create_scales(notebook, "Top", GTK_POS_TOP); create_scales(notebook, "Right", GTK_POS_RIGHT); create_scales(notebook, "Bottom", GTK_POS_BOTTOM); create_scales(notebook, "Left", GTK_POS_LEFT); area = gtk_dialog_get_content_area(GTK_DIALOG(dialog)); add_to(area, notebook, TRUE, TRUE, 5, 5); gtk_dialog_add_button(GTK_DIALOG(dialog), "gtk-cancel", 0); gtk_dialog_add_button(GTK_DIALOG(dialog), "gtk-ok", 0); gtk_widget_set_name(dialog, "AwfDialogWindow"); gtk_window_set_resizable(GTK_WINDOW(dialog), FALSE); gtk_window_set_title(GTK_WINDOW(dialog), "GtkDialog"); gtk_widget_show_all(dialog); gtk_dialog_run(GTK_DIALOG(dialog)); gtk_widget_destroy(dialog); } // yoloawf-extended-4.1.0/src/awf-gtk3.c000066400000000000000000003561101517644610000164570ustar00rootroot00000000000000/** * Forked M/10/03/2020 * Updated V/01/05/2026 * * Copyright 2020-2026 | Fabrice Creuzot (luigifab) * https://github.com/luigifab/awf-extended * https://www.luigifab.fr/gtkqt/awf-extended * * Forked from * Copyright 2011-2017 | Valère Monseur (valr) * https://github.com/valr/awf * * Forked from * AWF is originally based on the code from The Widget Factory * created by Richard Stellingwerff * * This program is free software, you can redistribute it or modify * it under the terms of the GNU General Public License (GPL) as published * by the free software foundation, either version 3 of the license, or * (at your option) any later version. * * This program is distributed in the hope that 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 (GPL) for more details. * * * Translations update: * https://github.com/GNOME/gtk/blob/3.24.50/po/fr.po * xgettext --keyword=_app -d awf -o src/awf.pot -k_ -s src/awf-*.c* * msgmerge src/po/fr.po src/awf.pot -o src/po/fr.po * msgfmt src/po/fr.po -o src/fr/LC_MESSAGES/awf.mo * * Tested with build.sh (via VirtualBox 7) with: * Debian Testing 64 (1536 MB) GTK 2.24/3.24/4.22 + GLIB 2.88 + Pango 1.57 * Fedora Rawhide 64 (1536 MB) GTK 2.24/3.24/4.23 + GLIB 2.88 + Pango 1.57 * Ubuntu 26.04 Resolute Raccoon 64 (4096 MB) GTK 2.24/3.24/4.22 + GLIB 2.87 + Pango 1.56 * Ubuntu 25.10 Questing Quokka 64 (4096 MB) GTK 2.24/3.24/4.20 + GLIB 2.86 + Pango 1.56 * Ubuntu 25.04 Plucky Puffin 64 (4096 MB) GTK 2.24/3.24/4.18 + GLIB 2.84 + Pango 1.56 * Ubuntu 24.10 Oracular Oriole 64 (4096 MB) GTK 2.24/3.24/4.16 + GLIB 2.82 + Pango 1.54 * Ubuntu 24.04 Noble Numbat 64 (4096 MB) GTK 2.24/3.24/4.14 + GLIB 2.80 + Pango 1.52 * Ubuntu 23.10 Mantic Minotaur 64 (3072 MB) GTK 2.24/3.24/4.12 + GLIB 2.78 + Pango 1.51 * Ubuntu 23.04 Lunar Lobster 64 (3072 MB) GTK 2.24/3.24/4.10 + GLIB 2.76 + Pango 1.50 * Ubuntu 22.10 Kinetic Kudu 64 (2176 MB) GTK 2.24/3.24/4.8 + GLIB 2.74 + Pango 1.50 * Ubuntu 22.04 Jammy Jellyfish 64 (2176 MB) GTK 2.24/3.24/4.6 + GLIB 2.72 + Pango 1.50 * Ubuntu 21.10 Impish Indri 64 (2176 MB) GTK 2.24/3.24/4.4 + GLIB 2.68 + Pango 1.48 * Ubuntu 21.04 Hirsute Hippo 64 (2176 MB) GTK 2.24/3.24/4.0 + GLIB 2.68 + Pango 1.48 * Ubuntu 17.04 Zesty Zapus 32 (1536 MB) GTK 2.24/3.22 + GLIB 2.52 + Pango 1.40 * Ubuntu 16.10 Yakkety Yak 32 (1536 MB) GTK 2.24/3.20 + GLIB 2.50 + Pango 1.40 * Ubuntu 16.04 Xenial Xerus 32 (1536 MB) GTK 2.24/3.18 + GLIB 2.48 + Pango 1.38 * Ubuntu 15.10 Wily Werewolf 32 (1024 MB) GTK 2.24/3.16 + GLIB 2.46 + Pango 1.36 * Ubuntu 15.04 Vivid Vervet 32 (1024 MB) GTK 2.24/3.14 + GLIB 2.44 + Pango 1.36 * Ubuntu 14.10 Utopic Unicorn 32 (1024 MB) GTK 2.24/3.12 + GLIB 2.42 + Pango 1.36 * Ubuntu 14.04 Trusty Tahr 32 (1024 MB) GTK 2.24/3.10 + GLIB 2.40 + Pango 1.36 * Ubuntu 13.10 Saucy Salamander 32 (1024 MB) GTK 2.24/3.8 + GLIB 2.38 + Pango 1.32 * Ubuntu 13.04 Raring Ringtail 32 (1024 MB) GTK 2.24/3.6 + GLIB 2.36 + Pango 1.32 * Ubuntu 12.04 Precise Pangolin 32 (1024 MB) GTK 2.24/3.4 + GLIB 2.32 + Pango 1.30 * Ubuntu 11.10 Oneiric Ocelot 32 (1024 MB) GTK 2.24/3.2 + GLIB 2.30 + Pango 1.29 * Ubuntu 11.04 Natty Narwhal 32 (1024 MB) GTK 2.24/3.0 + GLIB 2.28 + Pango 1.28 * Windows XP SP3 MinGW/msys (2048 MB) GTK 2.24 + GLIB 2.28 + Pango 1.29 & GTK 3.6 + GLIB 2.34 + Pango 1.30 */ #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wdeprecated-declarations" #include #include #include #include #include #include #include #if defined (G_OS_WIN32) #include #elif defined (G_OS_UNIX) #include #endif #if defined (G_OS_UNIX) && GLIB_CHECK_VERSION (2,30,0) #include #endif #pragma GCC diagnostic pop #define GTK_DIRNAME "gtk-3.0" #define GETTEXT_PACKAGE "awf-gtk3" #define BOXH (gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0)) #define BOXV (gtk_box_new (GTK_ORIENTATION_VERTICAL, 0)) #define SEPH (gtk_separator_new (GTK_ORIENTATION_HORIZONTAL)) #define SEPV (gtk_separator_new (GTK_ORIENTATION_VERTICAL)) #define PANEH (gtk_paned_new (GTK_ORIENTATION_HORIZONTAL)) #define PANEV (gtk_paned_new (GTK_ORIENTATION_VERTICAL)) #define AWF_OPEN "/Test/Open" #define AWF_SAVE "/Test/Save" #define AWF_REFR "/Test/Refresh" #define AWF_RECE "/Test/Recent" #define AWF_CALE "/Test/Calendar" #define AWF_SCAL "/Test/Scales" #define AWF_PROP "/Test/Properties" #define AWF_PRSE "/Test/PrintSetup" #define AWF_PRIN "/Test/Print" #define AWF_MCUT "/Test/More/Cut" #define AWF_MCOP "/Test/More/Copy" #define AWF_MPAS "/Test/More/Paste" #define AWF_CLOS "/Test/Close" #define AWF_QUIT "/Test/Quit" #define AWF_INSP "/Test/Inspector" #define AWF_ABOU "/Test/About" #define AWF_ACCEL_OPEN "O" #define AWF_ACCEL_SAVE "S" #define AWF_ACCEL_REFR "F5" #define AWF_ACCEL_RECE NULL #define AWF_ACCEL_CALE NULL #define AWF_ACCEL_SCAL NULL #define AWF_ACCEL_PROP "Return" #define AWF_ACCEL_PRSE "P" #define AWF_ACCEL_PRIN "P" #define AWF_ACCEL_MCUT "X" #define AWF_ACCEL_MCOP "C" #define AWF_ACCEL_MPAS "V" #define AWF_ACCEL_CLOS "W" #define AWF_ACCEL_QUIT "Q" #define AWF_ACCEL_INSP "F12" #define AWF_ACCEL_ABOU "F1" // @see https://stackoverflow.com/a/10018581/2980105 #define _app(x) dgettext(GETTEXT_PACKAGE, x) #define _gtk(x) dgettext("gtk30", x) // global variables static gboolean awf_debug = FALSE; static gboolean awf_trace = FALSE; static gboolean awf_csd = FALSE; static GHashTable *hash_system_theme = NULL; static GHashTable *hash_user_theme = NULL; static GList *list_system_theme = NULL; static GList *list_user_theme = NULL; static GtkWidget *window = NULL, *menubar = NULL, *toolbar = NULL, *toolbarentry = NULL, *statusbar = NULL; static GtkWidget *headbarCloseLeft = NULL, *headbarCloseRight = NULL, *button15 = NULL, *button16 = NULL; static GtkWidget *progress1 = NULL, *progress2 = NULL, *progress3 = NULL, *progress4 = NULL, *progress8 = NULL, *progress9 = NULL; static GtkWidget *scale1 = NULL, *scale2 = NULL, *scale3 = NULL, *scale4 = NULL, *scale5 = NULL, *scale6 = NULL; static GtkWidget *levelbar1 = NULL, *levelbar2 = NULL, *levelbar3 = NULL, *levelbar4 = NULL; static GtkWidget *levelbar5 = NULL, *levelbar6 = NULL, *levelbar7 = NULL, *levelbar8 = NULL; static GtkWidget *notebook1 = NULL, *notebook2 = NULL, *notebook3 = NULL, *notebook4 = NULL; static GtkWidget *current_menuitem = NULL; static int current_direction = 0; // GTK_TEXT_DIR_NONE static gchar *current_theme = NULL; static gchar *opt_theme = NULL; static gchar *opt_screenshot = NULL; static gboolean allow_update_theme = TRUE; static gboolean allow_update_values = TRUE; static gboolean must_save_accels = FALSE; // global functions static void awf_load_theme(GHashTable* hashtable, gchar *directory); static inline int awf_compare_theme(gconstpointer a, gconstpointer b); static void notify_updated_gtktheme(GSettings *settings, gchar *key); static void update_text_direction(int direction); static void update_theme(gchar *new_theme); static void update_statusbar(gchar *message); static void update_values(GtkRange *range); static void update_widgets(); static void update_marks(GtkScale *scale, gboolean value, int position); static void display_notification(); static void find_and_update_labels(GtkWidget *widget, gboolean special); static gboolean find_and_check_menuradio(GtkWidget *menu, gchar *search); static gboolean on_sighup(void *data); static gboolean take_screenshot(); static void create_window(gpointer app); static void create_widgets(GtkWidget *root); static void add_to(GtkWidget *root, GtkWidget *widget, gboolean expand, gboolean fill, guint padding, guint spacing); static void add_progressbar_and_entrybar(); static void create_toolbar(GtkWidget *root); static void create_combos_entries(GtkWidget *root); static void create_spinbuttons(GtkWidget *root); static void create_checkbuttons(GtkWidget *root); static void create_radiobuttons(GtkWidget *root); static void create_otherbuttons(GtkWidget *root1, GtkWidget *root2, GtkWidget *root3, GtkWidget *root4, GtkWidget *root5); static void create_progressbars(GtkWidget *root1, GtkWidget *root2, GtkWidget *root3, GtkWidget *root4); static void create_labels(GtkWidget *root); static void create_spinners(GtkWidget *root); static void create_expander(GtkWidget *root); static void create_frames(GtkWidget *root1, GtkWidget *root2); static void create_notebooks(GtkWidget *root1, GtkWidget *root2); static void create_notebook_tab(GtkWidget *notebook, gchar *text, GtkWidget *content, gboolean close); static void create_treview(GtkWidget *root); static void create_scales(GtkWidget *notebook, gchar *text, int position); static GtkWidget* create_horizontal_scale(gdouble value, gboolean draw, gboolean inverted, int position); static GtkWidget* create_vertical_scale(gdouble value, gboolean draw, gboolean inverted, int position); static void create_traditional_menubar(GtkWidget *root); static GtkWidget* create_menu(GtkWidget *root, gchar *text, gboolean cca); static GtkWidget* create_menuitem_tearoff(GtkWidget *menu); static GtkWidget* create_menuitem_check(GtkWidget *menu, gchar *text, gboolean free, gboolean chk, gboolean ist, gboolean dsb); static GtkWidget* create_menuitem_radio(GtkWidget *menu, gchar *text, gboolean free, gboolean chk, gboolean ist, gboolean dsb, GSList *group); static GtkWidget* create_menuitem(GtkWidget *menu, gchar *text, gboolean dsb, gchar *accel, gchar *kmp, GCallback function); static void accels_load(); static void accels_select(GtkWidget *widget); static void accels_deselect(GtkWidget *widget); static void accels_change(GtkWidget *widget, GdkEventKey *event); static void accels_save(); static void dialog_open(); static void dialog_recent(); static void dialog_save(); static void dialog_message(); static void dialog_page_setup(); static void dialog_print(); static void dialog_about(); static void dialog_inspector(); static void dialog_calendar(); static void dialog_scales(); #if GTK_CHECK_VERSION (3,4,0) static gboolean on_scrolltabs(GtkWidget *widget, GdkEventScroll *event); #endif // run run run int main(int argc, gchar **argv) { awf_debug = (g_getenv("AWF_DEBUG") != NULL); awf_trace = (g_getenv("AWF_TRACE") != NULL); const gchar *config = g_getenv("GTK_CSD"); if (config && (strcmp(config, "1") == 0)) awf_csd = TRUE; if (awf_trace) g_printf("» main()\n"); current_theme = g_strdup("auto"); opt_theme = g_strdup("auto"); int opt = 0, status = 0; hash_system_theme = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free); hash_user_theme = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free); GList *iterator = NULL; gchar *directory; // load available system themes (/usr/local/share/themes && /usr/share/themes) const char *const *dirs = g_get_system_data_dirs(); for (opt = 0; dirs[opt]; opt++) { directory = g_build_filename(dirs[opt], "themes", NULL); awf_load_theme(hash_system_theme, directory); g_free(directory); } g_hash_table_remove(hash_system_theme, "Default"); g_hash_table_remove(hash_system_theme, "Emacs"); list_system_theme = g_list_sort(g_hash_table_get_keys(hash_system_theme), (GCompareFunc) awf_compare_theme); // load available user themes (HOME/.local/share/themes && HOME/.themes) directory = g_build_filename(g_get_user_data_dir(), "themes", NULL); awf_load_theme(hash_user_theme, directory); g_free(directory); directory = g_build_filename(g_get_home_dir(), ".themes", NULL); awf_load_theme(hash_user_theme, directory); g_free(directory); list_user_theme = g_list_sort(g_hash_table_get_keys(hash_user_theme), (GCompareFunc) awf_compare_theme); // locale setlocale(LC_ALL, ""); #if defined (G_OS_WIN32) directory = g_build_filename("share", "locale", NULL); bindtextdomain(GETTEXT_PACKAGE, directory); g_free(directory); #endif bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8"); textdomain(GETTEXT_PACKAGE); // init static struct option options[] = { {"help", no_argument, NULL, 'x'}, {"version", no_argument, NULL, 'v'}, {"list-themes", no_argument, NULL, 'l'}, {"theme", required_argument, NULL, 't'}, {"screenshot", required_argument, NULL, 's'}, {"ltr", no_argument, NULL, 'y'}, {"rtl", no_argument, NULL, 'z'}, {NULL, 0, NULL, 0} }; gchar *c_version, *t1, *t2, *t3, *t4; while ((opt = getopt_long(argc, argv, "hvlt:s:xyz", options, NULL)) != -1) { switch (opt) { // --version -v case 'v': g_printf("%s\n", VERSION); return status; // --list-themes -l case 'l': for (iterator = list_system_theme; iterator; iterator = iterator->next) g_printf("%s\n", (gchar*) iterator->data); for (iterator = list_user_theme; iterator; iterator = iterator->next) g_printf("%s\n", (gchar*) iterator->data); return status; // --theme -t case 't': if (g_hash_table_lookup(hash_system_theme, optarg) || g_hash_table_lookup(hash_user_theme, optarg)) { g_free(opt_theme); opt_theme = g_strdup(optarg); } break; // --screenshot -s case 's': opt_screenshot = g_strdup(optarg); break; // --ltr case 'y': current_direction = 1; // GTK_TEXT_DIR_LTR break; // --rtl case 'z': current_direction = 2; // GTK_TEXT_DIR_RTL break; // --help (via GtkApplication) -h // --help/x supported by GTK 3.4+ with GLIB 2.42+ case 'x': case 'h': default: if (opt == 'x') { #if GLIB_CHECK_VERSION (2,42,0) && GTK_CHECK_VERSION (3,4,0) break; #endif } #ifdef __STDC_VERSION__ if (__STDC_VERSION__ >= 202311L) c_version = "C23"; else if (__STDC_VERSION__ >= 201710L) c_version = "C17"; else if (__STDC_VERSION__ >= 201112L) c_version = "C11"; else if (__STDC_VERSION__ >= 199901L) c_version = "C99"; else if (__STDC_VERSION__ >= 199409L) c_version = "C95"; else c_version = "C (unknown)"; #else c_version = "C89/C90"; #endif g_printf("%s\n\n %s %s\n %s %s\n %s %s\n %s %s\n %s %s\n %s %s\n\n%s\n%s\n", t1 = g_strdup_printf(_app("A widget factory - GTK %d.%d"), GTK_MAJOR_VERSION, GTK_MINOR_VERSION), "-v ", _app("Show version number."), "-l ", _app("List available themes."), "-t ", _app("Run with the specified theme."), "-s ", t2 = g_strdup_printf(_app("Run and save a png screenshot on %s."), "SIGHUP"), "--ltr ", _app("Run with text from left to right (Left-To-Right)."), "--rtl ", _app("Run with text from right to left (Right-To-Left)."), t3 = g_strdup_printf(_app("compiled in %s with gtk %d.%d.%d and glib %d.%d.%d and pango %s"), c_version, GTK_MAJOR_VERSION, GTK_MINOR_VERSION, GTK_MICRO_VERSION, GLIB_MAJOR_VERSION, GLIB_MINOR_VERSION, GLIB_MICRO_VERSION, PANGO_VERSION_STRING), t4 = g_strdup_printf(_app(" started with gtk %d.%d.%d and glib %d.%d.%d and pango %s"), gtk_major_version, gtk_minor_version, gtk_micro_version, glib_major_version, glib_minor_version, glib_micro_version, pango_version_string()) ); g_free(t1); g_free(t2); g_free(t3); g_free(t4); return status; } } // create and show window #if defined (G_OS_WIN32) g_setenv("GSETTINGS_SCHEMA_DIR", ".", TRUE); #endif #if GTK_CHECK_VERSION (3,4,0) GtkApplication *app = gtk_application_new("org.gtk.awf", G_APPLICATION_NON_UNIQUE); g_signal_connect(app, "activate", G_CALLBACK(create_window), NULL); #if GLIB_CHECK_VERSION (2,42,0) && GTK_CHECK_VERSION (3,4,0) // --version -v g_application_add_main_option(G_APPLICATION(app), "version", 'v', G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_NONE, _app("Show version number."), NULL); // --list-themes -l g_application_add_main_option(G_APPLICATION(app), "list-themes", 'l', G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_NONE, _app("List available themes."), NULL); // --theme -t g_application_add_main_option(G_APPLICATION(app), "theme", 't', G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_STRING, _app("Run with the specified theme."), ""); // --screenshot -s gchar *text = g_strdup_printf(_app("Run and save a png screenshot on %s."), "SIGHUP"); g_application_add_main_option(G_APPLICATION(app), "screenshot", 's', G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_STRING, text, ""); g_free(text); // --ltr g_application_add_main_option(G_APPLICATION(app), "ltr", 'y', G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_NONE, _app("Run with text from left to right (Left-To-Right)."), NULL); // --rtl g_application_add_main_option(G_APPLICATION(app), "rtl", 'z', G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_NONE, _app("Run with text from right to left (Right-To-Left)."), NULL); #endif g_application_register(G_APPLICATION(app), NULL, NULL); status = g_application_run(G_APPLICATION(app), argc, argv); g_object_unref(app); #else gtk_init(&argc, &argv); create_window(NULL); #endif return status; } static void quit() { if (awf_trace) g_printf("» quit()\n"); g_list_free(list_system_theme); g_list_free(list_user_theme); list_system_theme = NULL; list_user_theme = NULL; g_hash_table_destroy(hash_system_theme); g_hash_table_destroy(hash_user_theme); hash_system_theme = NULL; hash_user_theme = NULL; accels_save(); #if GTK_CHECK_VERSION (3,4,0) g_application_quit(g_application_get_default()); #else gtk_main_quit(); #endif } static void awf_load_theme(GHashTable* hashtable, gchar *directory) { if (awf_trace) g_printf("» awf_load_theme(%s)\n", directory); if (g_file_test(directory, G_FILE_TEST_IS_DIR)) { if (awf_debug) g_printf("themes_dir: %s\n", directory); GDir *dir = g_dir_open(directory, 0, NULL); if (dir) { const gchar *theme; while ((theme = g_dir_read_name(dir)) != NULL) { gchar *theme_path = g_build_filename(directory, theme, GTK_DIRNAME, NULL); if (g_file_test(theme_path, G_FILE_TEST_IS_DIR)) g_hash_table_replace(hashtable, g_strdup(theme), g_strdup(theme)); g_free(theme_path); } g_dir_close(dir); } } } static inline int awf_compare_theme(gconstpointer a, gconstpointer b) { return g_ascii_strcasecmp((gchar*) a, (gchar*) b); //g_strcmp0((gchar*) a, (gchar*) b); } static void notify_updated_gtktheme(GSettings *settings, gchar *key) { // ok if (awf_trace) g_printf("» notify_updated_gtktheme(%s)\n", key); if (g_strcmp0("gtk-theme", key) == 0) { gchar *new_theme = g_settings_get_string(settings, key); if (awf_debug) g_printf("SIGNAL_theme_update: %s\n", new_theme); find_and_check_menuradio(menubar, new_theme); g_free(new_theme); } else if (headbarCloseLeft && headbarCloseRight) { gboolean closeLeft = FALSE, closeRight = FALSE; // minimize, maximize, close, icon, menu gchar *tokens = g_settings_get_string(settings, key); if (tokens) { if (g_str_has_prefix(tokens, "icon") || g_str_has_prefix(tokens, "menu")) closeLeft = TRUE; else if (g_str_has_suffix(tokens, "icon") || g_str_has_suffix(tokens, "menu")) closeRight = TRUE; if (awf_debug) g_printf("headerbar_tokens: %s %d %d\n", tokens, closeLeft, closeRight); g_free(tokens); } gtk_widget_set_visible(headbarCloseLeft, closeLeft); gtk_widget_set_visible(headbarCloseRight, closeRight); } } static void update_text_direction(int direction) { // ok // we must ignore the activate signal when menubar is created if (!allow_update_theme) return; if (awf_trace) g_printf("» update_text_direction()*\n"); if ((direction == 1) && (gtk_widget_get_direction(window) != GTK_TEXT_DIR_LTR)) { gboolean toggle = gtk_notebook_get_scrollable(GTK_NOTEBOOK(notebook1)); current_direction = 1; gtk_widget_set_default_direction(current_direction); #if GTK_CHECK_VERSION (3,20,0) gtk_notebook_set_tab_pos(GTK_NOTEBOOK(notebook3), GTK_POS_LEFT); gtk_notebook_set_tab_pos(GTK_NOTEBOOK(notebook4), GTK_POS_RIGHT); #endif gtk_scale_clear_marks(GTK_SCALE(scale5)); update_marks(GTK_SCALE(scale5), toggle, GTK_POS_LEFT); gtk_scale_clear_marks(GTK_SCALE(scale6)); update_marks(GTK_SCALE(scale6), toggle, GTK_POS_RIGHT); } else if ((direction == 2) && (gtk_widget_get_direction(window) != GTK_TEXT_DIR_RTL)) { gboolean toggle = gtk_notebook_get_scrollable(GTK_NOTEBOOK(notebook1)); #if GTK_CHECK_VERSION (3,20,0) gtk_notebook_set_tab_pos(GTK_NOTEBOOK(notebook3), GTK_POS_RIGHT); gtk_notebook_set_tab_pos(GTK_NOTEBOOK(notebook4), GTK_POS_LEFT); #endif gtk_scale_clear_marks(GTK_SCALE(scale5)); update_marks(GTK_SCALE(scale5), toggle, GTK_POS_RIGHT); gtk_scale_clear_marks(GTK_SCALE(scale6)); update_marks(GTK_SCALE(scale6), toggle, GTK_POS_LEFT); current_direction = 2; gtk_widget_set_default_direction(current_direction); } } static void update_theme(gchar *new_theme) { // ok // we must ignore the activate signal when menubar is created if (!allow_update_theme || !new_theme) return; // we can ignore the signal when the menuitem is deselected // @todo // return; if (awf_trace) g_printf("» update_theme(%s)*\n", new_theme); if (awf_debug) g_printf("update_theme_before: %s » %s\n", current_theme, new_theme); if (strcmp(new_theme, "refresh") == 0) { g_object_set(gtk_settings_get_default(), "gtk-theme-name", "Default", NULL); g_usleep(G_USEC_PER_SEC / 2); g_object_set(gtk_settings_get_default(), "gtk-theme-name", current_theme, NULL); gtk_window_resize(GTK_WINDOW(window), 50, 50); if (opt_screenshot) { if (take_screenshot()) { gchar *text = g_strdup_printf(_app("Theme %s reloaded, then screenshot saved (%s)."), current_theme, opt_screenshot); update_statusbar(text); g_free(text); } else { gchar *text = g_strdup_printf(_app("Theme %s reloaded (error saving screenshot)."), current_theme); update_statusbar(text); g_free(text); } } else { gchar *text = g_strdup_printf(_app("Theme %s reloaded."), current_theme); update_statusbar(text); g_free(text); } if (awf_debug) g_printf("update_theme_after1: %s\n", current_theme); } else if (strcmp(new_theme, "auto") == 0) { g_free(current_theme); g_object_get(gtk_settings_get_default(), "gtk-theme-name", ¤t_theme, NULL); gtk_window_resize(GTK_WINDOW(window), 50, 50); if (awf_debug) g_printf("update_theme_after2: %s\n", current_theme); } else if (strcmp(new_theme, current_theme) != 0) { g_free(current_theme); g_object_set(gtk_settings_get_default(), "gtk-theme-name", new_theme, NULL); // @todo? useless for notify_updated_gtktheme g_object_get(gtk_settings_get_default(), "gtk-theme-name", ¤t_theme, NULL); #if GTK_CHECK_VERSION (3,4,0) while (g_main_context_pending(NULL)) g_main_context_iteration(NULL, FALSE); #else while (gtk_events_pending()) gtk_main_iteration(); #endif gtk_window_resize(GTK_WINDOW(window), 50, 50); gchar *text = g_strdup_printf(_app("Theme %s loaded."), current_theme); update_statusbar(text); g_free(text); if (awf_debug) g_printf("update_theme_after3: %s\n", current_theme); } } static void update_statusbar(gchar *message) { // ok if (awf_trace) g_printf("» update_statusbar(%s)\n", message); if (window && statusbar) { GDateTime *now = g_date_time_new_now_local(); gchar *buffer = g_date_time_format(now, "%H:%M:%S"); g_date_time_unref(now); gchar *text = g_strdup_printf("%s - %s", buffer, message); guint ctid = gtk_statusbar_get_context_id(GTK_STATUSBAR(statusbar), "gné"); gtk_statusbar_remove_all(GTK_STATUSBAR(statusbar), ctid); gtk_statusbar_push(GTK_STATUSBAR(statusbar), ctid, text); g_free(text); g_free(buffer); GtkStyleContext *ctx = gtk_widget_get_style_context(statusbar); gtk_style_context_remove_class(ctx, "flash"); gtk_widget_queue_draw(statusbar); #if GTK_CHECK_VERSION (3,4,0) while (g_main_context_pending(NULL)) g_main_context_iteration(NULL, FALSE); #else while (gtk_events_pending()) gtk_main_iteration(); #endif gtk_style_context_add_class(ctx, "flash"); } } static void update_values(GtkRange *range) { // ok if (allow_update_values) { allow_update_values = FALSE; double value = gtk_range_get_value(range); //if (awf_trace) // g_printf("» update_values(%f)*\n", value); // range(0..1) gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress1), value / 100.0); gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress2), value / 100.0); gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress3), value / 100.0); gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress4), value / 100.0); gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress8), value / 100.0); gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress9), value / 100.0); #if GTK_CHECK_VERSION (3,6,0) // range(0..1) gtk_level_bar_set_value(GTK_LEVEL_BAR(levelbar1), value / 100.0); gtk_level_bar_set_value(GTK_LEVEL_BAR(levelbar2), value / 100.0); gtk_level_bar_set_value(GTK_LEVEL_BAR(levelbar5), value / 100.0); gtk_level_bar_set_value(GTK_LEVEL_BAR(levelbar6), value / 100.0); // range(0..5) gtk_level_bar_set_value(GTK_LEVEL_BAR(levelbar3), value / 100.0 * gtk_level_bar_get_max_value(GTK_LEVEL_BAR(levelbar3))); gtk_level_bar_set_value(GTK_LEVEL_BAR(levelbar4), value / 100.0 * gtk_level_bar_get_max_value(GTK_LEVEL_BAR(levelbar4))); gtk_level_bar_set_value(GTK_LEVEL_BAR(levelbar7), value / 100.0 * gtk_level_bar_get_max_value(GTK_LEVEL_BAR(levelbar7))); gtk_level_bar_set_value(GTK_LEVEL_BAR(levelbar8), value / 100.0 * gtk_level_bar_get_max_value(GTK_LEVEL_BAR(levelbar8))); #endif // range(0..1) gtk_scale_button_set_value(GTK_SCALE_BUTTON(button15), value / 100.0); // range(0..100) if (scale1 != (GtkWidget*) range) gtk_range_set_value(GTK_RANGE(scale1), value); if (scale2 != (GtkWidget*) range) gtk_range_set_value(GTK_RANGE(scale2), value); if (scale3 != (GtkWidget*) range) gtk_range_set_value(GTK_RANGE(scale3), value); if (scale4 != (GtkWidget*) range) gtk_range_set_value(GTK_RANGE(scale4), value); if (scale5 != (GtkWidget*) range) gtk_range_set_value(GTK_RANGE(scale5), value); if (scale6 != (GtkWidget*) range) gtk_range_set_value(GTK_RANGE(scale6), value); // text gtk_progress_bar_set_show_text(GTK_PROGRESS_BAR(progress8), value > 50); gtk_progress_bar_set_show_text(GTK_PROGRESS_BAR(progress9), value > 50); allow_update_values = TRUE; } } static void update_widgets() { // ok if (awf_trace) g_printf("» update_widgets()\n"); // function called when user click on [+] toolbar button // when toggle = true, the [+] toolbar button is NOT checked gboolean toggle = gtk_notebook_get_scrollable(GTK_NOTEBOOK(notebook1)); // via add_progressbar_and_entrybar // show progressbar in toolbar and statusbar when [+] toolbar button is NOT checked if (toggle) { gtk_widget_set_visible(progress8, FALSE); gtk_widget_set_visible(progress9, FALSE); gtk_widget_set_visible(toolbarentry, FALSE); } else { gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress8), 0.0); gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress9), 0.0); gtk_widget_set_visible(progress8, TRUE); gtk_widget_set_visible(progress9, TRUE); gtk_widget_set_visible(toolbarentry, TRUE); } // enabled or not gtk_widget_set_sensitive(scale2, toggle); gtk_widget_set_sensitive(scale4, toggle); gtk_widget_set_sensitive(scale6, toggle); gtk_widget_set_sensitive(progress2, toggle); gtk_widget_set_sensitive(progress4, toggle); #if GTK_CHECK_VERSION (3,6,0) gtk_widget_set_sensitive(levelbar2, toggle); gtk_widget_set_sensitive(levelbar4, toggle); gtk_widget_set_sensitive(levelbar6, toggle); gtk_widget_set_sensitive(levelbar8, toggle); #endif // text or not gtk_progress_bar_set_show_text(GTK_PROGRESS_BAR(progress1), !toggle); gtk_progress_bar_set_show_text(GTK_PROGRESS_BAR(progress2), !toggle); gtk_progress_bar_set_show_text(GTK_PROGRESS_BAR(progress3), !toggle); gtk_progress_bar_set_show_text(GTK_PROGRESS_BAR(progress4), !toggle); gtk_progress_bar_set_show_text(GTK_PROGRESS_BAR(progress8), FALSE); gtk_progress_bar_set_show_text(GTK_PROGRESS_BAR(progress9), FALSE); // marks gtk_scale_clear_marks(GTK_SCALE(scale5)); update_marks(GTK_SCALE(scale5), !toggle, GTK_POS_LEFT); gtk_scale_clear_marks(GTK_SCALE(scale6)); update_marks(GTK_SCALE(scale6), !toggle, GTK_POS_RIGHT); // scrollable or not gtk_notebook_set_scrollable(GTK_NOTEBOOK(notebook1), !toggle); gtk_notebook_set_scrollable(GTK_NOTEBOOK(notebook2), !toggle); gtk_notebook_set_scrollable(GTK_NOTEBOOK(notebook3), !toggle); gtk_notebook_set_scrollable(GTK_NOTEBOOK(notebook4), !toggle); gtk_window_resize(GTK_WINDOW(window), 50, 50); } static void update_marks(GtkScale *scale, gboolean value, int position) { if (awf_trace) g_printf("» update_marks(%d)\n", position); if (value) { gtk_scale_add_mark(scale, 0, position, NULL); gtk_scale_add_mark(scale, 25, position, "25"); gtk_scale_add_mark(scale, 50, position, "50"); gtk_scale_add_mark(scale, 75, position, "75"); gtk_scale_add_mark(scale, 100, position, NULL); } else { gtk_scale_add_mark(scale, 0, position, NULL); gtk_scale_add_mark(scale, 25, position, NULL); gtk_scale_add_mark(scale, 50, position, NULL); gtk_scale_add_mark(scale, 75, position, NULL); gtk_scale_add_mark(scale, 100, position, NULL); } } static void display_notification() { // ok if (awf_trace) g_printf("» display_notification()\n"); #if defined (G_OS_UNIX) if (notify_init(GETTEXT_PACKAGE)) { // Ubuntu 11.04 with libnotify-dev 0.5.x, so you must use libnotify-dev 0.7.x from Ubuntu 11.10 NotifyNotification *notif = notify_notification_new(GETTEXT_PACKAGE, _app("A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme."), "dialog-information"); notify_notification_add_action(notif, "nothing", _gtk("Close"), NOTIFY_ACTION_CALLBACK(notify_uninit), NULL, NULL); notify_notification_add_action(notif, "close", _gtk("Close"), NOTIFY_ACTION_CALLBACK(notify_uninit), NULL, NULL); notify_notification_set_timeout(notif, 50000); notify_notification_show(notif, NULL); g_object_unref(G_OBJECT(notif)); notify_uninit(); } #endif } static void find_and_update_labels(GtkWidget *widget, gboolean special) { // whynot if (GTK_IS_LABEL(widget)) { gtk_label_set_ellipsize(GTK_LABEL(widget), PANGO_ELLIPSIZE_END); } else if (GTK_IS_CELL_LAYOUT(widget)) { GList *cells = gtk_cell_layout_get_cells(GTK_CELL_LAYOUT(widget)); GList *iter; for (iter = cells; iter != NULL; iter = iter->next) { if (GTK_IS_CELL_RENDERER_TEXT(iter->data)) { if (special) { // @todo for button8 int width, height; PangoLayout *layout = gtk_widget_create_pango_layout(widget, "Test"); PangoFontDescription *desc = pango_font_description_copy(pango_context_get_font_description(gtk_widget_get_pango_context(widget))); pango_layout_set_font_description(layout, desc); pango_font_description_free(desc); pango_layout_get_pixel_size(layout, &width, &height); g_object_unref(layout); g_object_set(G_OBJECT(iter->data), "width-chars", 15, "max-width-chars", 15, "height", height + 4, NULL); } else { g_object_set(G_OBJECT(iter->data), "ellipsize", PANGO_ELLIPSIZE_END, "ellipsize-set", TRUE, NULL); } } } g_list_free(cells); } else if (GTK_IS_CONTAINER(widget)) { GList *children = gtk_container_get_children(GTK_CONTAINER(widget)); GList *iter; for (iter = children; iter != NULL; iter = iter->next) find_and_update_labels(GTK_WIDGET(iter->data), special); g_list_free(children); } } static gboolean find_and_check_menuradio(GtkWidget *menu, gchar *search) { // whynot if (awf_trace) g_printf("» find_and_check_menuradio(%s)\n", search); GList *children = gtk_container_get_children(GTK_CONTAINER(menu)), *iter; GtkWidget *item; for (iter = children; iter != NULL; iter = g_list_next(iter)) { item = GTK_WIDGET(iter->data); if (GTK_IS_MENU_ITEM(item)) { GtkWidget *submenu = gtk_menu_item_get_submenu(GTK_MENU_ITEM(item)); if (submenu) { // process submenu if (find_and_check_menuradio(submenu, search)) { g_list_free(children); return TRUE; } } else if (gtk_widget_get_sensitive(item)) { // check menuitem by label const gchar *value = gtk_menu_item_get_label(GTK_MENU_ITEM(item)); if (value && (g_strcmp0(value, search) == 0)) { gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(item), TRUE); // set state checked and activate action g_list_free(children); return TRUE; } } } } g_list_free(children); return FALSE; } static gboolean on_sighup(void *data) { // ok if (awf_trace) g_printf("» on_sighup()\n"); update_theme("refresh"); #if defined (G_SOURCE_CONTINUE) return G_SOURCE_CONTINUE; #else return TRUE; // glib < 2.32 #endif } static gboolean take_screenshot() { // ok (without window borders) if (awf_trace) g_printf("» take_screenshot()\n"); gboolean result = FALSE; int width = 0, height = 0; GdkWindow *root = gtk_widget_get_window(window); gtk_window_get_size(GTK_WINDOW(window), &width, &height); GdkPixbuf *image = gdk_pixbuf_get_from_window(root, 0, 0, width, height); if (image) { result = gdk_pixbuf_save(image, opt_screenshot, "png", NULL, "compression", "9", NULL); g_object_unref(image); } return result; } // layout and widgets static void create_window(gpointer app) { if (awf_trace) g_printf("» create_window()\n"); if (window) { gtk_window_present(GTK_WINDOW(window)); return; } GtkWidget *vbox_window, *widgets; gboolean closeLeft = FALSE, closeRight = FALSE; gchar *text, *value; // window #if GTK_CHECK_VERSION (3,4,0) window = gtk_application_window_new(GTK_APPLICATION(app)); #else window = gtk_window_new(GTK_WINDOW_TOPLEVEL); #endif gtk_widget_set_name(GTK_WIDGET(window), "AwfMainWindow"); gtk_window_set_icon_name(GTK_WINDOW(window), GETTEXT_PACKAGE); text = g_strdup_printf(_app("A widget factory - GTK %d.%d"), GTK_MAJOR_VERSION, GTK_MINOR_VERSION); gtk_window_set_title(GTK_WINDOW(window), text); g_free(text); // theme auto or from command line if (strcmp(current_theme, opt_theme) != 0) update_theme(opt_theme); else update_theme(current_theme); if (current_direction == 0) current_direction = (gtk_widget_get_default_direction() == GTK_TEXT_DIR_LTR) ? 1 : 2; // layout vbox_window = BOXV; gtk_container_add(GTK_CONTAINER(window), vbox_window); #if GTK_CHECK_VERSION (3,12,0) if (awf_csd) { // enable CSD for dialogs // except for custom dialogs g_object_set(gtk_settings_get_default(), "gtk-dialogs-use-header", TRUE, NULL); gtk_window_set_decorated(GTK_WINDOW(window), TRUE); GtkWidget *button; GtkWidget *headerbar = gtk_header_bar_new(); gtk_header_bar_set_title(GTK_HEADER_BAR(headerbar), gtk_window_get_title(GTK_WINDOW(window))); gtk_header_bar_set_has_subtitle(GTK_HEADER_BAR(headerbar), FALSE); gtk_header_bar_set_show_close_button(GTK_HEADER_BAR(headerbar), TRUE); gchar *tokens; // minimize, maximize, close, icon, menu g_object_get(gtk_widget_get_settings(headerbar), "gtk-decoration-layout", &tokens, NULL); if (g_str_has_prefix(tokens, "icon") || g_str_has_prefix(tokens, "menu")) closeLeft = TRUE; else if (g_str_has_suffix(tokens, "icon") || g_str_has_suffix(tokens, "menu")) closeRight = TRUE; if (awf_debug) g_printf("headerbar_tokens: %s %d %d\n", tokens, closeLeft, closeRight); g_free(tokens); // left headbarCloseLeft = gtk_image_new_from_icon_name(GETTEXT_PACKAGE, GTK_ICON_SIZE_BUTTON); gtk_style_context_add_class(gtk_widget_get_style_context(headbarCloseLeft), "app-icon"); gtk_widget_set_visible(headbarCloseLeft, closeLeft); gtk_header_bar_pack_start(GTK_HEADER_BAR(headerbar), headbarCloseLeft); button = gtk_menu_button_new(); gtk_button_set_image(GTK_BUTTON(button), gtk_image_new_from_icon_name("open-menu-symbolic", GTK_ICON_SIZE_BUTTON)); GtkWidget *menu1 = gtk_menu_new(); create_menuitem(menu1, "Menu item 1", FALSE, NULL, NULL, NULL); create_menuitem(menu1, "Menu item 2", FALSE, NULL, NULL, NULL); create_menuitem(menu1, "Menu item 3", FALSE, NULL, NULL, NULL); create_menuitem(menu1, "gtk-about", FALSE, NULL, NULL, dialog_about); create_menuitem(menu1, "gtk-quit", FALSE, NULL, NULL, quit); gtk_widget_show_all(menu1); gtk_menu_button_set_popup(GTK_MENU_BUTTON(button), menu1); gtk_header_bar_pack_start(GTK_HEADER_BAR(headerbar), button); button = gtk_toggle_button_new_with_label("Btn1"); gtk_header_bar_pack_start(GTK_HEADER_BAR(headerbar), button); button = gtk_toggle_button_new_with_label("Btn2"); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE); gtk_header_bar_pack_start(GTK_HEADER_BAR(headerbar), button); button = gtk_toggle_button_new_with_label("Btn3"); gtk_header_bar_pack_start(GTK_HEADER_BAR(headerbar), button); // right headbarCloseRight = gtk_image_new_from_icon_name(GETTEXT_PACKAGE, GTK_ICON_SIZE_BUTTON); gtk_style_context_add_class(gtk_widget_get_style_context(headbarCloseRight), "app-icon"); gtk_widget_set_visible(headbarCloseRight, closeRight); gtk_header_bar_pack_end(GTK_HEADER_BAR(headerbar), headbarCloseRight); button = gtk_menu_button_new(); gtk_button_set_image(GTK_BUTTON(button), gtk_image_new_from_icon_name("open-menu-symbolic", GTK_ICON_SIZE_BUTTON)); GtkWidget *menu2 = gtk_menu_new(); create_menuitem(menu2, "Menu item 1", FALSE, NULL, NULL, NULL); create_menuitem(menu2, "Menu item 2", FALSE, NULL, NULL, NULL); create_menuitem(menu2, "Menu item 3", FALSE, NULL, NULL, NULL); create_menuitem(menu2, "gtk-about", FALSE, NULL, NULL, dialog_about); create_menuitem(menu2, "gtk-quit", FALSE, NULL, NULL, quit); gtk_widget_show_all(menu2); gtk_menu_button_set_popup(GTK_MENU_BUTTON(button), menu2); gtk_header_bar_pack_end(GTK_HEADER_BAR(headerbar), button); button = gtk_toggle_button_new_with_label("Btn6"); gtk_header_bar_pack_end(GTK_HEADER_BAR(headerbar), button); button = gtk_toggle_button_new_with_label("Btn5"); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE); gtk_header_bar_pack_end(GTK_HEADER_BAR(headerbar), button); button = gtk_toggle_button_new_with_label("Btn4"); gtk_header_bar_pack_end(GTK_HEADER_BAR(headerbar), button); gtk_window_set_titlebar(GTK_WINDOW(window), headerbar); } #endif menubar = gtk_menu_bar_new(); allow_update_theme = FALSE; create_traditional_menubar(menubar); allow_update_theme = TRUE; add_to(vbox_window, menubar, FALSE, FALSE, 0, 0); toolbar = gtk_toolbar_new(); gtk_style_context_add_class(gtk_widget_get_style_context(toolbar), "primary-toolbar"); create_toolbar(toolbar); //add_to(vbox_window, toolbar, FALSE, FALSE, 0, 0); gtk_box_pack_start(GTK_BOX(vbox_window), toolbar, FALSE, FALSE, 0); widgets = BOXV; add_to(vbox_window, widgets, TRUE, TRUE, 0, 0); create_widgets(widgets); statusbar = gtk_statusbar_new(); #if GTK_CHECK_VERSION (3,20,0) GtkCssProvider *provider = gtk_css_provider_new(); gtk_css_provider_load_from_data(provider, "@keyframes statusbarflash {" " 0% { background-color: yellow; }" " 100% { background-color: transparent; }" "}" "#AwfMainWindow statusbar.flash {" " animation: statusbarflash 1s ease-out forwards;" "}" , -1, NULL); gtk_style_context_add_provider_for_screen(gdk_screen_get_default(), GTK_STYLE_PROVIDER(provider), GTK_STYLE_PROVIDER_PRIORITY_FALLBACK); #endif add_to(vbox_window, statusbar, FALSE, FALSE, 0, 0); text = g_strdup_printf(_app("Theme %s loaded."), current_theme); update_statusbar(text); g_free(text); // go go go update_text_direction(current_direction); g_signal_connect(window, "destroy", G_CALLBACK(quit), NULL); #if defined (G_OS_UNIX) && GLIB_CHECK_VERSION (2,30,0) g_unix_signal_add(SIGHUP, on_sighup, NULL); #endif #if defined (G_OS_UNIX) && GLIB_CHECK_VERSION (2,32,0) if (g_settings_schema_source_lookup(g_settings_schema_source_get_default(), value = "org.gnome.desktop.interface", FALSE)) g_signal_connect(g_settings_new(value), "changed::gtk-theme", G_CALLBACK(notify_updated_gtktheme), NULL); if (g_settings_schema_source_lookup(g_settings_schema_source_get_default(), value = "org.mate.interface", FALSE)) g_signal_connect(g_settings_new(value), "changed::gtk-theme", G_CALLBACK(notify_updated_gtktheme), NULL); if (g_settings_schema_source_lookup(g_settings_schema_source_get_default(), value = "org.gnome.desktop.wm.preferences", FALSE)) g_signal_connect(g_settings_new(value), "changed::button-layout", G_CALLBACK(notify_updated_gtktheme), NULL); if (g_settings_schema_source_lookup(g_settings_schema_source_get_default(), value = "org.cinnamon.desktop.wm.preferences", FALSE)) g_signal_connect(g_settings_new(value), "changed::button-layout", G_CALLBACK(notify_updated_gtktheme), NULL); if (g_settings_schema_source_lookup(g_settings_schema_source_get_default(), value = "org.mate.Marco.general", FALSE)) g_signal_connect(g_settings_new(value), "changed::button-layout", G_CALLBACK(notify_updated_gtktheme), NULL); if (g_settings_schema_source_lookup(g_settings_schema_source_get_default(), value = "org.mate.interface", FALSE)) g_signal_connect(g_settings_new(value), "changed::gtk-decoration-layout", G_CALLBACK(notify_updated_gtktheme), NULL); #endif #if defined (G_OS_WIN32) gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER); #endif gtk_widget_show_all(window); if (headbarCloseLeft && headbarCloseRight) { gtk_widget_set_visible(headbarCloseLeft, closeLeft); gtk_widget_set_visible(headbarCloseRight, closeRight); } add_progressbar_and_entrybar(); #if !GTK_CHECK_VERSION (3,4,0) gtk_main(); #endif } static void create_widgets(GtkWidget *root) { // ok if (awf_trace) g_printf("» create_widgets()\n"); GtkWidget *hbox_columns = BOXH; GtkWidget *vbox_column1 = BOXV, *vbox_combo_entry = BOXV, *hbox_spin = BOXH, *hbox_check_radio = BOXH, *vbox_check = BOXV, *vbox_radio = BOXV; GtkWidget *vbox_column2 = BOXV, *vbox_buttons = BOXV, *hbox_btns1 = BOXH, *hbox_btns2 = BOXH, *hbox_btns3 = BOXH, *hbox_btns4 = BOXH; GtkWidget *vbox_column3 = BOXV, *vbox_progress1 = BOXV, *vbox_progress2 = BOXV, *hbox_progress1 = BOXH, *hbox_progress2 = BOXH; GtkWidget *vbox_column4 = BOXV, *vbox_others = BOXV, *hbox_label = BOXH, *hbox_spinner = BOXH; GtkWidget *vpane = PANEV, *hpane1 = PANEH, *hpane2 = PANEH; GtkWidget *hbox_frame1 = BOXH, *hbox_frame2 = BOXH, *hbox_notebook1 = BOXH, *hbox_notebook2 = BOXH; // columns layout add_to(root, hbox_columns, TRUE, TRUE, 0, 0); // column 1 add_to(hbox_columns, vbox_column1, TRUE, TRUE, 5, 0); add_to(vbox_column1, vbox_combo_entry, FALSE, TRUE, 5, 3); create_combos_entries(vbox_combo_entry); add_to(vbox_column1, hbox_spin, FALSE, FALSE, 5, 0); create_spinbuttons(hbox_spin); add_to(vbox_column1, hbox_check_radio, FALSE, TRUE, 5, 0); add_to(hbox_check_radio, vbox_check, TRUE, TRUE, 0, 0); create_checkbuttons(vbox_check); add_to(hbox_check_radio, vbox_radio, TRUE, TRUE, 0, 0); create_radiobuttons(vbox_radio); add_to(hbox_columns, SEPV, FALSE, FALSE, 0, 0); // column 2 add_to(hbox_columns, vbox_column2, TRUE, TRUE, 5, 0); add_to(vbox_column2, vbox_buttons, FALSE, TRUE, 5, 3); add_to(vbox_column2, hbox_btns1, FALSE, FALSE, 5, 3); add_to(vbox_column2, hbox_btns2, FALSE, FALSE, 5, 3); add_to(vbox_column2, hbox_btns3, FALSE, FALSE, 5, 3); add_to(vbox_column2, hbox_btns4, FALSE, FALSE, 5, 3); create_otherbuttons(vbox_buttons, hbox_btns1, hbox_btns2, hbox_btns3, hbox_btns4); add_to(hbox_columns, SEPV, FALSE, FALSE, 0, 0); // column 3 add_to(hbox_columns, vbox_column3, TRUE, TRUE, 5, 0); add_to(vbox_column3, vbox_progress1, FALSE, TRUE, 6, 10); add_to(vbox_column3, hbox_progress1, FALSE, FALSE, 5, 10); add_to(vbox_column3, hbox_progress2, FALSE, FALSE, 5, 10); add_to(vbox_column3, vbox_progress2, FALSE, TRUE, 5, 10); create_progressbars(vbox_progress1, hbox_progress1, hbox_progress2, vbox_progress2); add_to(hbox_columns, SEPV, FALSE, FALSE, 0, 0); // column 4 add_to(hbox_columns, vbox_column4, TRUE, TRUE, 5, 0); add_to(vbox_column4, vbox_others, FALSE, TRUE, 5, 3); create_treview(vbox_others); add_to(vbox_others, hbox_label, FALSE, TRUE, 5, 0); create_labels(hbox_label); add_to(vbox_others, hbox_spinner, FALSE, TRUE, 5, 0); create_spinners(hbox_spinner); create_expander(vbox_others); add_to(root, SEPH, FALSE, FALSE, 0, 0); // paned layout add_to(root, vpane, TRUE, TRUE, 0, 0); gtk_paned_pack1(GTK_PANED(vpane), hpane1, TRUE, FALSE); gtk_widget_set_size_request(hpane1, -1, 70); // The 70 gtk_box_set_homogeneous(GTK_BOX(hbox_frame1), TRUE); gtk_box_set_spacing(GTK_BOX(hbox_frame1), 3); gtk_container_set_border_width(GTK_CONTAINER(hbox_frame1), 10); gtk_paned_add1(GTK_PANED(hpane1), hbox_frame1); gtk_box_set_homogeneous(GTK_BOX(hbox_frame2), TRUE); gtk_box_set_spacing(GTK_BOX(hbox_frame2), 3); gtk_container_set_border_width(GTK_CONTAINER(hbox_frame2), 10); gtk_paned_add2(GTK_PANED(hpane1), hbox_frame2); create_frames(hbox_frame1, hbox_frame2); gtk_paned_pack2(GTK_PANED(vpane), hpane2, TRUE, FALSE); //gtk_widget_set_size_request(hpane2, -1, 120); // The 120 gtk_box_set_homogeneous(GTK_BOX(hbox_notebook1), TRUE); gtk_box_set_spacing(GTK_BOX(hbox_notebook1), 3); gtk_container_set_border_width(GTK_CONTAINER(hbox_notebook1), 10); gtk_paned_add1(GTK_PANED(hpane2), hbox_notebook1); gtk_box_set_homogeneous(GTK_BOX(hbox_notebook2), TRUE); gtk_box_set_spacing(GTK_BOX(hbox_notebook2), 3); gtk_container_set_border_width(GTK_CONTAINER(hbox_notebook2), 10); gtk_paned_add2(GTK_PANED(hpane2), hbox_notebook2); create_notebooks(hbox_notebook1, hbox_notebook2); } static void add_progressbar_and_entrybar() { if (awf_trace) g_printf("» add_progressbar_and_entrybar()\n"); // entry toolbar (= 11) toolbarentry = gtk_entry_new(); #if GTK_CHECK_VERSION (3,2,0) gtk_entry_set_placeholder_text(GTK_ENTRY(toolbarentry), "..."); #endif gtk_widget_set_visible(toolbarentry, FALSE); gtk_widget_set_vexpand(toolbarentry, FALSE); gtk_widget_set_valign(toolbarentry, GTK_ALIGN_CENTER); gtk_container_add(GTK_CONTAINER(gtk_toolbar_get_nth_item(GTK_TOOLBAR(toolbar), 11)), toolbarentry); // end left // progressbar toolbar (= 13) progress8 = gtk_progress_bar_new(); gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress8), 0); gtk_orientable_set_orientation(GTK_ORIENTABLE(progress8), GTK_ORIENTATION_HORIZONTAL); gtk_widget_set_visible(progress8, FALSE); gtk_widget_set_vexpand(progress8, FALSE); gtk_widget_set_valign(progress8, GTK_ALIGN_CENTER); gtk_container_add(GTK_CONTAINER(gtk_toolbar_get_nth_item(GTK_TOOLBAR(toolbar), 13)), progress8); // end right // progressbar statusbar progress9 = gtk_progress_bar_new(); gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress9), 0); gtk_orientable_set_orientation(GTK_ORIENTABLE(progress9), GTK_ORIENTATION_HORIZONTAL); gtk_widget_set_visible(progress9, FALSE); gtk_widget_set_vexpand(progress9, FALSE); gtk_widget_set_valign(progress9, GTK_ALIGN_CENTER); gtk_box_pack_start(GTK_BOX(statusbar), progress9, FALSE, FALSE, 0); } static void add_to(GtkWidget *root, GtkWidget *widget, gboolean expand, gboolean fill, guint padding, guint spacing) { // ok if (GTK_IS_INFO_BAR(root)) root = gtk_info_bar_get_content_area(GTK_INFO_BAR(root)); if (GTK_IS_CONTAINER(widget) && (padding > 0)) gtk_container_set_border_width(GTK_CONTAINER(widget), padding); if (GTK_IS_BOX(widget) && (spacing > 0)) gtk_box_set_spacing(GTK_BOX(widget), spacing); if (GTK_IS_TOOLBAR(root)) gtk_toolbar_insert(GTK_TOOLBAR(root), GTK_TOOL_ITEM(widget), -1); else gtk_box_pack_start(GTK_BOX(root), widget, expand, fill, 0); #if GTK_CHECK_VERSION (3,20,0) if (!GTK_IS_BOX(widget)) { GtkStyleContext *style = gtk_widget_get_style_context(widget); gchar *text = gtk_style_context_to_string(style, GTK_STYLE_CONTEXT_PRINT_RECURSE); // @todo remove [ ] g_strstrip(text); gtk_widget_set_tooltip_text(widget, text); g_free(text); } #endif } static void create_toolbar(GtkWidget *root) { // ok if (awf_trace) g_printf("» create_toolbar()\n"); GtkWidget *tool1, *menu, *tool2, *tool3, *tool4, *tool5, *tool6, *tool7, *tool8, *tool9, *tool11, *tool12, *tool13; // @todo option command line? gtk_toolbar_set_style(GTK_TOOLBAR(toolbar), GTK_TOOLBAR_ICONS); // GTK_MENU_TOOL_BUTTON tool1 = GTK_WIDGET(gtk_menu_tool_button_new(NULL, NULL)); gtk_tool_button_set_icon_name(GTK_TOOL_BUTTON(tool1), "document-open"); g_signal_connect(tool1, "clicked", G_CALLBACK(dialog_open), NULL); menu = gtk_menu_new(); create_menuitem(menu, "Menu item 1", FALSE, NULL, NULL, NULL); create_menuitem(menu, "Menu item 2", FALSE, NULL, NULL, NULL); create_menuitem(menu, "Menu item 3", FALSE, NULL, NULL, NULL); gtk_widget_show_all(menu); gtk_menu_tool_button_set_menu(GTK_MENU_TOOL_BUTTON(tool1), menu); tool2 = GTK_WIDGET(gtk_menu_tool_button_new(NULL, NULL)); gtk_tool_button_set_icon_name(GTK_TOOL_BUTTON(tool2), "document-open"); gtk_widget_set_sensitive(tool2, FALSE); // GTK_TOOL_BUTTON tool3 = GTK_WIDGET(gtk_tool_button_new(NULL, NULL)); gtk_tool_button_set_icon_name(GTK_TOOL_BUTTON(tool3), "document-save"); g_signal_connect(tool3, "clicked", G_CALLBACK(dialog_save), NULL); tool4 = GTK_WIDGET(gtk_tool_button_new(NULL, NULL)); gtk_tool_button_set_icon_name(GTK_TOOL_BUTTON(tool4), "view-refresh"); g_signal_connect_swapped(tool4, "clicked", G_CALLBACK(on_sighup), NULL); tool5 = GTK_WIDGET(gtk_tool_button_new(NULL, NULL)); gtk_tool_button_set_icon_name(GTK_TOOL_BUTTON(tool5), "camera-photo"); gtk_widget_set_sensitive(tool5, opt_screenshot ? TRUE : FALSE); g_signal_connect(tool5, "clicked", G_CALLBACK(take_screenshot), NULL); tool6 = GTK_WIDGET(gtk_tool_button_new(NULL, NULL)); gtk_tool_button_set_icon_name(GTK_TOOL_BUTTON(tool6), "dialog-information"); g_signal_connect(tool6, "clicked", G_CALLBACK(display_notification), NULL); #if defined (G_OS_WIN32) gtk_widget_set_sensitive(tool6, FALSE); #endif // GTK_TOGGLE_TOOL_BUTTON tool7 = GTK_WIDGET(gtk_toggle_tool_button_new()); gtk_tool_button_set_icon_name(GTK_TOOL_BUTTON(tool7), "list-add"); gtk_toggle_tool_button_set_active(GTK_TOGGLE_TOOL_BUTTON(tool7), TRUE); g_signal_connect(tool7, "clicked", G_CALLBACK(update_widgets), NULL); tool8 = GTK_WIDGET(gtk_toggle_tool_button_new()); gtk_tool_button_set_icon_name(GTK_TOOL_BUTTON(tool8), "list-remove"); gtk_toggle_tool_button_set_active(GTK_TOGGLE_TOOL_BUTTON(tool8), FALSE); g_signal_connect(tool8, "clicked", G_CALLBACK(update_widgets), NULL); tool9 = GTK_WIDGET(gtk_toggle_tool_button_new()); gtk_tool_button_set_icon_name(GTK_TOOL_BUTTON(tool9), "window-close"); gtk_toggle_tool_button_set_active(GTK_TOGGLE_TOOL_BUTTON(tool9), FALSE); gtk_widget_set_sensitive(tool9, FALSE); // placeholder & separators tool11 = GTK_WIDGET(gtk_tool_item_new()); tool12 = GTK_WIDGET(gtk_tool_item_new()); gtk_tool_item_set_expand(GTK_TOOL_ITEM(tool12), TRUE); tool13 = GTK_WIDGET(gtk_tool_item_new()); // layout add_to(root, tool1, FALSE, FALSE, 0, 0); add_to(root, tool2, FALSE, FALSE, 0, 0); add_to(root, tool3, FALSE, FALSE, 0, 0); gtk_toolbar_insert(GTK_TOOLBAR(root), gtk_separator_tool_item_new(), -1); add_to(root, tool4, FALSE, FALSE, 0, 0); add_to(root, tool5, FALSE, FALSE, 0, 0); add_to(root, tool6, FALSE, FALSE, 0, 0); gtk_toolbar_insert(GTK_TOOLBAR(root), gtk_separator_tool_item_new(), -1); add_to(root, tool7, FALSE, FALSE, 0, 0); add_to(root, tool8, FALSE, FALSE, 0, 0); add_to(root, tool9, FALSE, FALSE, 0, 0); gtk_toolbar_insert(GTK_TOOLBAR(root), GTK_TOOL_ITEM(tool11), -1); // = 11 gtk_toolbar_insert(GTK_TOOLBAR(root), GTK_TOOL_ITEM(tool12), -1); gtk_toolbar_insert(GTK_TOOLBAR(root), GTK_TOOL_ITEM(tool13), -1); // = 13 } static void create_combos_entries(GtkWidget *root) { // ok if (awf_trace) g_printf("» create_combos_entries()\n"); GtkWidget *combo1, *combo2, *combo3, *combo4, *entry1, *entry2, *entry3, *entry4; // GTK_COMBO_BOX combo1 = gtk_combo_box_text_new_with_entry(); gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo1), "Combo box entry 1"); gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo1), "Combo box entry 2"); gtk_combo_box_set_active(GTK_COMBO_BOX(combo1), 0); combo2 = gtk_combo_box_text_new_with_entry(); gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo2), "Combo box entry 1"); gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo2), "Combo box entry 2"); gtk_combo_box_set_active(GTK_COMBO_BOX(combo2), 0); gtk_widget_set_sensitive(combo2, FALSE); combo3 = gtk_combo_box_text_new(); gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo3), "Combo box 1"); gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo3), "Combo box 2"); gtk_combo_box_set_active(GTK_COMBO_BOX(combo3), 0); combo4 = gtk_combo_box_text_new(); gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo4), "Combo box 1"); gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo4), "Combo box 2"); gtk_combo_box_set_active(GTK_COMBO_BOX(combo4), 0); gtk_widget_set_sensitive(combo4, FALSE); // GTK_ENTRY entry1 = gtk_entry_new(); gtk_entry_set_text(GTK_ENTRY(entry1), "Entry"); #if GTK_CHECK_VERSION (3,2,0) gtk_entry_set_placeholder_text(GTK_ENTRY(entry1), "Placeholder"); #endif entry2 = gtk_entry_new(); gtk_entry_set_text(GTK_ENTRY(entry2), "Entry"); gtk_widget_set_sensitive(entry2, FALSE); entry3 = gtk_entry_new(); gtk_entry_set_text(GTK_ENTRY(entry3), "Entry"); gtk_entry_set_icon_from_icon_name(GTK_ENTRY(entry3), GTK_ENTRY_ICON_PRIMARY, "edit-clear"); gtk_entry_set_icon_from_icon_name(GTK_ENTRY(entry3), GTK_ENTRY_ICON_SECONDARY, "edit-find"); #if GTK_CHECK_VERSION (3,2,0) gtk_entry_set_placeholder_text(GTK_ENTRY(entry3), "Placeholder"); #endif entry4 = gtk_entry_new(); gtk_entry_set_text(GTK_ENTRY(entry4), "Entry"); gtk_entry_set_icon_from_icon_name(GTK_ENTRY(entry4), GTK_ENTRY_ICON_PRIMARY, "edit-clear"); gtk_entry_set_icon_from_icon_name(GTK_ENTRY(entry4), GTK_ENTRY_ICON_SECONDARY, "edit-find"); gtk_widget_set_sensitive(entry4, FALSE); // layout add_to(root, combo1, FALSE, FALSE, 0, 0); add_to(root, combo2, FALSE, FALSE, 0, 0); add_to(root, combo3, FALSE, FALSE, 0, 0); add_to(root, combo4, FALSE, FALSE, 0, 0); add_to(root, entry1, FALSE, FALSE, 0, 0); add_to(root, entry2, FALSE, FALSE, 0, 0); add_to(root, entry3, FALSE, FALSE, 0, 0); add_to(root, entry4, FALSE, FALSE, 0, 0); } static void create_spinbuttons(GtkWidget *root) { // ok if (awf_trace) g_printf("» create_spinbuttons()\n"); GtkWidget *spinbutton1, *spinbutton2; // GTK_SPIN_BUTTON spinbutton1 = gtk_spin_button_new_with_range(-100, 100, 1); gtk_spin_button_set_value(GTK_SPIN_BUTTON(spinbutton1), 1); spinbutton2 = gtk_spin_button_new_with_range(-100, 100, 1); gtk_spin_button_set_value(GTK_SPIN_BUTTON(spinbutton2), 1); gtk_widget_set_sensitive(spinbutton2, FALSE); // layout add_to(root, spinbutton1, FALSE, FALSE, 0, 0); add_to(root, BOXH, TRUE, TRUE, 0, 0); // empty space add_to(root, spinbutton2, FALSE, FALSE, 0, 0); } static void create_checkbuttons(GtkWidget *root) { // ok if (awf_trace) g_printf("» create_checkbuttons()\n"); GtkWidget *checkbutton1, *checkbutton2, *checkbutton3, *checkbutton4, *checkbutton5, *checkbutton6; // GTK_CHECK_BUTTON checkbutton1 = gtk_check_button_new_with_label("Check btn 1"); checkbutton2 = gtk_check_button_new_with_label("Check btn 2"); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbutton2), TRUE); checkbutton3 = gtk_check_button_new_with_label("Check btn 3"); gtk_toggle_button_set_inconsistent(GTK_TOGGLE_BUTTON(checkbutton3), TRUE); checkbutton4 = gtk_check_button_new_with_label("Check btn 4"); gtk_widget_set_sensitive(checkbutton4, FALSE); checkbutton5 = gtk_check_button_new_with_label("Check btn 5"); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbutton5), TRUE); gtk_widget_set_sensitive(checkbutton5, FALSE); checkbutton6 = gtk_check_button_new_with_label("Check btn 6"); gtk_toggle_button_set_inconsistent(GTK_TOGGLE_BUTTON(checkbutton6), TRUE); gtk_widget_set_sensitive(checkbutton6, FALSE); // layout add_to(root, checkbutton1, FALSE, FALSE, 0, 0); add_to(root, checkbutton2, FALSE, FALSE, 0, 0); add_to(root, checkbutton3, FALSE, FALSE, 0, 0); add_to(root, checkbutton4, FALSE, FALSE, 0, 0); add_to(root, checkbutton5, FALSE, FALSE, 0, 0); add_to(root, checkbutton6, FALSE, FALSE, 0, 0); } static void create_radiobuttons(GtkWidget *root) { // ok if (awf_trace) g_printf("» create_radiobuttons()\n"); GtkWidget *radiobutton1, *radiobutton2, *radiobutton3, *radiobutton4, *radiobutton5, *radiobutton6; // GTK_RADIO_BUTTON radiobutton1 = gtk_radio_button_new_with_label(NULL, "Radio btn 1"); radiobutton2 = gtk_radio_button_new_with_label(gtk_radio_button_get_group(GTK_RADIO_BUTTON(radiobutton1)), "Radio btn 2"); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(radiobutton2), TRUE); radiobutton3 = gtk_radio_button_new_with_label(gtk_radio_button_get_group(GTK_RADIO_BUTTON(radiobutton1)), "Radio btn 3"); gtk_toggle_button_set_inconsistent(GTK_TOGGLE_BUTTON(radiobutton3), TRUE); radiobutton4 = gtk_radio_button_new_with_label(NULL, "Radio btn 4"); gtk_widget_set_sensitive(radiobutton4, FALSE); radiobutton5 = gtk_radio_button_new_with_label(gtk_radio_button_get_group(GTK_RADIO_BUTTON(radiobutton4)), "Radio btn 5"); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(radiobutton5), TRUE); gtk_widget_set_sensitive(radiobutton5, FALSE); radiobutton6 = gtk_radio_button_new_with_label(gtk_radio_button_get_group(GTK_RADIO_BUTTON(radiobutton4)), "Radio btn 6"); gtk_toggle_button_set_inconsistent(GTK_TOGGLE_BUTTON(radiobutton6), TRUE); gtk_widget_set_sensitive(radiobutton6, FALSE); // layout add_to(root, radiobutton1, FALSE, FALSE, 0, 0); add_to(root, radiobutton2, FALSE, FALSE, 0, 0); add_to(root, radiobutton3, FALSE, FALSE, 0, 0); add_to(root, radiobutton4, FALSE, FALSE, 0, 0); add_to(root, radiobutton5, FALSE, FALSE, 0, 0); add_to(root, radiobutton6, FALSE, FALSE, 0, 0); } static void create_otherbuttons(GtkWidget *root1, GtkWidget *root2, GtkWidget *root3, GtkWidget *root4, GtkWidget *root5) { // ok if (awf_trace) g_printf("» create_otherbuttons()\n"); GtkWidget *button1, *button2, *button3, *button4, *button5, *button6, *button7, *button8, *button9; GtkWidget *button10, *button11, *button12, *button13, *button14, *button17; // GTK_BUTTON button1 = gtk_button_new_with_label("Button 1"); button2 = gtk_button_new_with_label("Button 2"); gtk_widget_set_sensitive(button2, FALSE); button3 = gtk_toggle_button_new_with_label("Button 3"); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button3), TRUE); button4 = gtk_toggle_button_new_with_label("Button 4"); gtk_widget_set_sensitive(button4, FALSE); // GTK_COLOR_BUTTON GdkRGBA color; gdk_rgba_parse(&color, "#7796ba"); button5 = gtk_color_button_new_with_rgba(&color); gtk_widget_set_tooltip_text(button5, _app("Choose a color")); // GTK_FONT_BUTTON button6 = gtk_font_button_new(); find_and_update_labels(button6, FALSE); gtk_widget_set_size_request(button6, 186, -1); // The 186 gtk_widget_set_tooltip_text(button6, _app("Choose a font")); // GTK_FILE_CHOOSER_BUTTON button7 = gtk_file_chooser_button_new("GtkFileChooserDialog:Open", GTK_FILE_CHOOSER_ACTION_OPEN); find_and_update_labels(button7, FALSE); gtk_widget_set_size_request(button7, 180, -1); // The 186 gtk_widget_set_tooltip_text(button7, _app("Choose a file")); button8 = gtk_file_chooser_button_new("GtkFileChooserDialog:Open", GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER); find_and_update_labels(button8, TRUE); gtk_widget_set_size_request(button8, 180, -1); // The 186 gtk_widget_set_tooltip_text(button8, _app("Choose a folder")); // @todo < 3.8 not null // GTK_SWITCH (for GTK_OPTION_MENU) button9 = gtk_switch_new(); gtk_switch_set_active(GTK_SWITCH(button9), TRUE); button10 = gtk_switch_new(); gtk_switch_set_active(GTK_SWITCH(button10), TRUE); gtk_widget_set_sensitive(button10, FALSE); button11 = gtk_switch_new(); gtk_switch_set_active(GTK_SWITCH(button11), FALSE); button12 = gtk_switch_new(); gtk_switch_set_active(GTK_SWITCH(button12), FALSE); gtk_widget_set_sensitive(button12, FALSE); // GTK_LINK_BUTTON button13 = gtk_link_button_new_with_label("https://github.com/luigifab/awf-extended", "Link button"); button14 = gtk_link_button_new_with_label("https://github.com/luigifab/awf-extended", "Link button"); gtk_widget_set_sensitive(button14, FALSE); // GTK_VOLUME_BUTTON button15 = gtk_volume_button_new(); gtk_scale_button_set_value(GTK_SCALE_BUTTON(button15), 0.5); #if !GTK_CHECK_VERSION (3,12,0) g_object_set((GObject*) button15, "size", GTK_ICON_SIZE_BUTTON, NULL); // @todo not working with Ubuntu #endif button16 = gtk_volume_button_new(); gtk_scale_button_set_value(GTK_SCALE_BUTTON(button16), 0); gtk_widget_set_sensitive(button16, FALSE); #if !GTK_CHECK_VERSION (3,12,0) g_object_set((GObject*) button16, "size", GTK_ICON_SIZE_BUTTON, NULL); // @todo not working with Ubuntu #endif // GTK_MENU_BUTTON #if GTK_CHECK_VERSION (3,12,0) button17 = gtk_menu_button_new(); gtk_menu_button_set_use_popover(GTK_MENU_BUTTON(button17), TRUE); gtk_button_set_image(GTK_BUTTON(button17), gtk_image_new_from_icon_name("open-menu-symbolic", GTK_ICON_SIZE_BUTTON)); GMenuItem *menuitem; GMenu *menu = g_menu_new(); g_menu_append_item(menu, menuitem = g_menu_item_new("Popover item 1", NULL)); g_object_unref(menuitem); g_menu_append_item(menu, menuitem = g_menu_item_new("Popover item 2", NULL)); g_object_unref(menuitem); g_menu_append_item(menu, menuitem = g_menu_item_new("Popover item 3", NULL)); g_object_unref(menuitem); gtk_menu_button_set_menu_model(GTK_MENU_BUTTON(button17), G_MENU_MODEL(menu)); g_object_unref(menu); #endif // layout add_to(root1, button1, FALSE, FALSE, 0, 0); add_to(root1, button2, FALSE, FALSE, 0, 0); add_to(root1, button3, FALSE, FALSE, 0, 0); add_to(root1, button4, FALSE, FALSE, 0, 0); add_to(root1, button5, FALSE, FALSE, 0, 0); add_to(root1, button6, FALSE, FALSE, 0, 0); add_to(root1, button7, FALSE, FALSE, 0, 0); add_to(root1, button8, FALSE, FALSE, 0, 0); add_to(root2, button9, FALSE, FALSE, 0, 0); add_to(root2, BOXH, TRUE, TRUE, 0, 0); // empty space add_to(root2, button10, FALSE, FALSE, 0, 0); add_to(root3, button11, FALSE, FALSE, 0, 0); add_to(root3, BOXH, TRUE, TRUE, 0, 0); // empty space add_to(root3, button12, FALSE, FALSE, 0, 0); add_to(root4, button13, FALSE, FALSE, 0, 0); add_to(root4, BOXH, TRUE, TRUE, 0, 0); // empty space add_to(root4, button14, FALSE, FALSE, 0, 0); add_to(root5, button15, FALSE, FALSE, 0, 0); add_to(root5, button16, FALSE, FALSE, 0, 0); #if GTK_CHECK_VERSION (3,12,0) add_to(root5, button17, FALSE, FALSE, 0, 0); #endif } static void create_progressbars(GtkWidget *root1, GtkWidget *root2, GtkWidget *root3, GtkWidget *root4) { // ok if (awf_trace) g_printf("» create_progressbars()\n"); // GTK_PROGRESS_BAR progress1 = gtk_progress_bar_new(); gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress1), 0.5); gtk_orientable_set_orientation(GTK_ORIENTABLE(progress1), GTK_ORIENTATION_HORIZONTAL); progress2 = gtk_progress_bar_new(); gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress2), 0.5); gtk_orientable_set_orientation(GTK_ORIENTABLE(progress2), GTK_ORIENTATION_HORIZONTAL); gtk_progress_bar_set_inverted(GTK_PROGRESS_BAR(progress2), TRUE); progress3 = gtk_progress_bar_new(); gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress3), 0.5); gtk_orientable_set_orientation(GTK_ORIENTABLE(progress3), GTK_ORIENTATION_VERTICAL); gtk_widget_set_size_request(progress3, -1, 100); // The 100 progress4 = gtk_progress_bar_new(); gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress4), 0.5); gtk_orientable_set_orientation(GTK_ORIENTABLE(progress4), GTK_ORIENTATION_VERTICAL); gtk_progress_bar_set_inverted(GTK_PROGRESS_BAR(progress4), TRUE); // GTK_SCALE scale1 = create_horizontal_scale(50, FALSE, FALSE, GTK_POS_TOP); g_signal_connect(scale1, "value_changed", G_CALLBACK(update_values), NULL); scale2 = create_horizontal_scale(50, FALSE, TRUE, GTK_POS_TOP); g_signal_connect(scale2, "value_changed", G_CALLBACK(update_values), NULL); scale3 = create_vertical_scale(50, FALSE, FALSE, GTK_POS_TOP); g_signal_connect(scale3, "value_changed", G_CALLBACK(update_values), NULL); scale4 = create_vertical_scale(50, FALSE, TRUE, GTK_POS_TOP); g_signal_connect(scale4, "value_changed", G_CALLBACK(update_values), NULL); scale5 = create_vertical_scale(50, FALSE, FALSE, GTK_POS_TOP); update_marks(GTK_SCALE(scale5), FALSE, GTK_POS_LEFT); g_signal_connect(scale5, "value_changed", G_CALLBACK(update_values), NULL); scale6 = create_vertical_scale(50, FALSE, TRUE, GTK_POS_TOP); update_marks(GTK_SCALE(scale6), FALSE, GTK_POS_RIGHT); g_signal_connect(scale6, "value_changed", G_CALLBACK(update_values), NULL); // GTK_LEVEL_BAR #if GTK_CHECK_VERSION (3,6,0) levelbar1 = gtk_level_bar_new(); gtk_level_bar_set_mode(GTK_LEVEL_BAR(levelbar1), GTK_LEVEL_BAR_MODE_CONTINUOUS); gtk_level_bar_set_value(GTK_LEVEL_BAR(levelbar1), 0.5); gtk_orientable_set_orientation(GTK_ORIENTABLE(levelbar1), GTK_ORIENTATION_VERTICAL); levelbar2 = gtk_level_bar_new(); gtk_level_bar_set_mode(GTK_LEVEL_BAR(levelbar2), GTK_LEVEL_BAR_MODE_CONTINUOUS); gtk_level_bar_set_value(GTK_LEVEL_BAR(levelbar2), 0.5); gtk_orientable_set_orientation(GTK_ORIENTABLE(levelbar2), GTK_ORIENTATION_VERTICAL); levelbar3 = gtk_level_bar_new_for_interval(0, 5); gtk_level_bar_set_mode(GTK_LEVEL_BAR(levelbar3), GTK_LEVEL_BAR_MODE_DISCRETE); gtk_level_bar_set_value(GTK_LEVEL_BAR(levelbar3), 2); // GTK 3.20.9 not working gtk_orientable_set_orientation(GTK_ORIENTABLE(levelbar3), GTK_ORIENTATION_VERTICAL); levelbar4 = gtk_level_bar_new_for_interval(0, 5); gtk_level_bar_set_mode(GTK_LEVEL_BAR(levelbar4), GTK_LEVEL_BAR_MODE_DISCRETE); gtk_level_bar_set_value(GTK_LEVEL_BAR(levelbar4), 2); // GTK 3.20.9 not working gtk_orientable_set_orientation(GTK_ORIENTABLE(levelbar4), GTK_ORIENTATION_VERTICAL); levelbar5 = gtk_level_bar_new(); gtk_level_bar_set_mode(GTK_LEVEL_BAR(levelbar5), GTK_LEVEL_BAR_MODE_CONTINUOUS); gtk_level_bar_set_value(GTK_LEVEL_BAR(levelbar5), 0.5); levelbar6 = gtk_level_bar_new(); gtk_level_bar_set_mode(GTK_LEVEL_BAR(levelbar6), GTK_LEVEL_BAR_MODE_CONTINUOUS); gtk_level_bar_set_value(GTK_LEVEL_BAR(levelbar6), 0.5); levelbar7 = gtk_level_bar_new_for_interval(0, 5); gtk_level_bar_set_mode(GTK_LEVEL_BAR(levelbar7), GTK_LEVEL_BAR_MODE_DISCRETE); gtk_level_bar_set_value(GTK_LEVEL_BAR(levelbar7), 2); // GTK 3.20.9 not working levelbar8 = gtk_level_bar_new_for_interval(0, 5); gtk_level_bar_set_mode(GTK_LEVEL_BAR(levelbar8), GTK_LEVEL_BAR_MODE_DISCRETE); gtk_level_bar_set_value(GTK_LEVEL_BAR(levelbar8), 2); // GTK 3.20.9 not working #if GTK_CHECK_VERSION (3,8,0) gtk_level_bar_set_inverted(GTK_LEVEL_BAR(levelbar2), TRUE); gtk_level_bar_set_inverted(GTK_LEVEL_BAR(levelbar4), TRUE); gtk_level_bar_set_inverted(GTK_LEVEL_BAR(levelbar6), TRUE); gtk_level_bar_set_inverted(GTK_LEVEL_BAR(levelbar8), TRUE); #endif #endif // layout add_to(root1, progress1, FALSE, FALSE, 0, 0); add_to(root1, progress2, FALSE, FALSE, 0, 0); add_to(root1, scale1, FALSE, FALSE, 0, 0); add_to(root1, scale2, FALSE, FALSE, 0, 0); add_to(root2, progress3, FALSE, FALSE, 0, 0); add_to(root2, progress4, FALSE, FALSE, 0, 0); #if GTK_CHECK_VERSION (3,6,0) add_to(root2, levelbar1, FALSE, FALSE, 0, 0); add_to(root2, levelbar2, FALSE, FALSE, 0, 0); add_to(root2, levelbar3, FALSE, FALSE, 0, 0); add_to(root2, levelbar4, FALSE, FALSE, 0, 0); #endif add_to(root3, scale3, FALSE, FALSE, 0, 0); add_to(root3, scale5, FALSE, FALSE, 0, 0); add_to(root3, scale6, FALSE, FALSE, 0, 0); add_to(root3, scale4, FALSE, FALSE, 0, 0); #if GTK_CHECK_VERSION (3,6,0) add_to(root4, levelbar5, FALSE, FALSE, 0, 0); add_to(root4, levelbar6, FALSE, FALSE, 0, 0); add_to(root4, levelbar7, FALSE, FALSE, 0, 0); add_to(root4, levelbar8, FALSE, FALSE, 0, 0); #endif } static void create_labels(GtkWidget *root) { // ok if (awf_trace) g_printf("» create_labels()\n"); GtkWidget *label1, *label2; // GTK_LABEL label1 = gtk_label_new("Label 1"); label2 = gtk_label_new("Label 2"); gtk_widget_set_sensitive(label2, FALSE); // layout add_to(root, label1, FALSE, FALSE, 0, 0); add_to(root, BOXH, TRUE, TRUE, 0, 0); // empty space add_to(root, label2, FALSE, FALSE, 0, 0); add_to(root, BOXH, TRUE, TRUE, 0, 0); // empty space } static void create_spinners(GtkWidget *root) { // ok if (awf_trace) g_printf("» create_spinners()\n"); GtkWidget *spinner1, *spinner2; // GTK_SPINNER spinner1 = gtk_spinner_new(); gtk_widget_set_size_request(spinner1, 20, 20); spinner2 = gtk_spinner_new(); gtk_widget_set_size_request(spinner2, 20, 20); gtk_widget_set_sensitive(spinner2, FALSE); //gtk_spinner_start(GTK_SPINNER(spinner2)); // layout add_to(root, spinner1, FALSE, FALSE, 0, 0); add_to(root, BOXH, TRUE, TRUE, 0, 0); // empty space add_to(root, spinner2, FALSE, FALSE, 0, 0); add_to(root, BOXH, TRUE, TRUE, 0, 0); // empty space } static void create_expander(GtkWidget *root) { // ok if (awf_trace) g_printf("» create_expander()\n"); GtkWidget *expander, *scrolled_window, *tv; GtkTextBuffer *buffer; gchar *text; // GTK_EXPANDER expander = gtk_expander_new(_app("More...")); gtk_expander_set_expanded(GTK_EXPANDER(expander), TRUE); //#if GTK_CHECK_VERSION (3,20,0) // @todo label 100% width //#endif // GTK_SCROLLED_WINDOW scrolled_window = gtk_scrolled_window_new(NULL, NULL); gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrolled_window), GTK_SHADOW_IN); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS); gtk_widget_set_size_request(scrolled_window, -1, 120); #if GTK_CHECK_VERSION (3,16,0) const gchar *config = g_getenv("GTK_OVERLAY_SCROLLING"); if (config && (strcmp(config, "0") == 0)) { gtk_scrolled_window_set_overlay_scrolling(GTK_SCROLLED_WINDOW(scrolled_window), FALSE); gtk_style_context_add_class(gtk_widget_get_style_context(gtk_scrolled_window_get_hscrollbar(GTK_SCROLLED_WINDOW(scrolled_window))), "discrete"); gtk_style_context_add_class(gtk_widget_get_style_context(gtk_scrolled_window_get_vscrollbar(GTK_SCROLLED_WINDOW(scrolled_window))), "discrete"); } #endif // GTK_TEXT_VIEW tv = gtk_text_view_new(); gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(tv), GTK_WRAP_WORD); text = g_strdup_printf("%s %s", _app("A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme."), _app("A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme.")); buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(tv)); gtk_text_buffer_set_text(GTK_TEXT_BUFFER(buffer), text, -1); g_free(text); // layout gtk_container_add(GTK_CONTAINER(scrolled_window), tv); gtk_container_add(GTK_CONTAINER(expander), scrolled_window); add_to(root, expander, FALSE, FALSE, 0, 0); } static void create_frames(GtkWidget *root1, GtkWidget *root2) { // ok if (awf_trace) g_printf("» create_frames()\n"); GtkWidget *frame1, *frame2, *frame3, *frame4; // GTK_FRAME frame1 = gtk_frame_new("Frame (shadow in)"); gtk_style_context_add_class(gtk_widget_get_style_context(frame1), "border-inset"); gtk_frame_set_shadow_type(GTK_FRAME(frame1), GTK_SHADOW_IN); frame2 = gtk_frame_new("Frame (shadow out)"); gtk_style_context_add_class(gtk_widget_get_style_context(frame2), "border-outset"); gtk_frame_set_shadow_type(GTK_FRAME(frame2), GTK_SHADOW_OUT); frame3 = gtk_frame_new("Frame (shadow etched in)"); gtk_style_context_add_class(gtk_widget_get_style_context(frame3), "border-groove"); gtk_frame_set_shadow_type(GTK_FRAME(frame3), GTK_SHADOW_ETCHED_IN); frame4 = gtk_frame_new("Frame (shadow etched out)"); gtk_style_context_add_class(gtk_widget_get_style_context(frame4), "border-ridge"); gtk_frame_set_shadow_type(GTK_FRAME(frame4), GTK_SHADOW_ETCHED_OUT); gtk_widget_set_sensitive(frame4, FALSE); // layout add_to(root1, frame1, TRUE, TRUE, 0, 0); add_to(root1, frame2, TRUE, TRUE, 0, 0); add_to(root2, frame3, TRUE, TRUE, 0, 0); add_to(root2, frame4, TRUE, TRUE, 0, 0); } static void create_notebooks(GtkWidget *root1, GtkWidget *root2) { // ok if (awf_trace) g_printf("» create_notebooks()\n"); // GTK_NOTEBOOK notebook1 = gtk_notebook_new(); gtk_notebook_popup_enable(GTK_NOTEBOOK(notebook1)); gtk_notebook_set_scrollable(GTK_NOTEBOOK(notebook1), FALSE); gtk_notebook_set_tab_pos(GTK_NOTEBOOK(notebook1), GTK_POS_TOP); create_notebook_tab(notebook1, "Tab1", NULL, FALSE); create_notebook_tab(notebook1, "Tab2", NULL, FALSE); create_notebook_tab(notebook1, "Tab3", NULL, TRUE); create_notebook_tab(notebook1, "Tab4", NULL, TRUE); notebook2 = gtk_notebook_new(); gtk_notebook_popup_enable(GTK_NOTEBOOK(notebook2)); gtk_notebook_set_scrollable(GTK_NOTEBOOK(notebook2), FALSE); gtk_notebook_set_tab_pos(GTK_NOTEBOOK(notebook2), GTK_POS_BOTTOM); create_notebook_tab(notebook2, "Tab1", NULL, FALSE); create_notebook_tab(notebook2, "Tab2", NULL, FALSE); create_notebook_tab(notebook2, "Tab3", NULL, TRUE); create_notebook_tab(notebook2, "Tab4", NULL, TRUE); notebook3 = gtk_notebook_new(); gtk_notebook_popup_enable(GTK_NOTEBOOK(notebook3)); gtk_notebook_set_scrollable(GTK_NOTEBOOK(notebook3), FALSE); gtk_notebook_set_tab_pos(GTK_NOTEBOOK(notebook3), GTK_POS_LEFT); create_notebook_tab(notebook3, "T1", NULL, FALSE); create_notebook_tab(notebook3, "Tab2", NULL, FALSE); create_notebook_tab(notebook3, "T3b", NULL, TRUE); create_notebook_tab(notebook3, "T4", NULL, TRUE); notebook4 = gtk_notebook_new(); gtk_notebook_popup_enable(GTK_NOTEBOOK(notebook4)); gtk_notebook_set_scrollable(GTK_NOTEBOOK(notebook4), FALSE); gtk_notebook_set_tab_pos(GTK_NOTEBOOK(notebook4), GTK_POS_RIGHT); create_notebook_tab(notebook4, "T1", NULL, FALSE); create_notebook_tab(notebook4, "Tab2", NULL, FALSE); create_notebook_tab(notebook4, "T3b", NULL, TRUE); create_notebook_tab(notebook4, "T4", NULL, TRUE); #if GTK_CHECK_VERSION (3,4,0) // gtk-scroll-tabs for GTK 3.4..3.24 | so same GTK 2.24 3.x 4.x & Qt 5.x 6.x // with or without gtk3-classic https://github.com/lah7/gtk3-classic/commit/66b65775822c46e07f5b2f30036010d06dbcbad4 gtk_widget_add_events(notebook1, GDK_SCROLL_MASK); g_signal_connect(notebook1, "scroll-event", G_CALLBACK(on_scrolltabs), NULL); gtk_widget_add_events(notebook2, GDK_SCROLL_MASK); g_signal_connect(notebook2, "scroll-event", G_CALLBACK(on_scrolltabs), NULL); gtk_widget_add_events(notebook3, GDK_SCROLL_MASK); g_signal_connect(notebook3, "scroll-event", G_CALLBACK(on_scrolltabs), NULL); gtk_widget_add_events(notebook4, GDK_SCROLL_MASK); g_signal_connect(notebook4, "scroll-event", G_CALLBACK(on_scrolltabs), NULL); #endif // layout add_to(root1, notebook1, TRUE, TRUE, 0, 0); add_to(root1, notebook2, TRUE, TRUE, 0, 0); add_to(root2, notebook3, TRUE, TRUE, 0, 0); add_to(root2, notebook4, TRUE, TRUE, 0, 0); } static void create_notebook_tab(GtkWidget *notebook, gchar *text, GtkWidget *content, gboolean close) { // ok GtkWidget *headbtn = BOXH, *btn; add_to(headbtn, gtk_label_new(text), TRUE, TRUE, 0, 0); // GTK_BUTTON if (close) { btn = gtk_button_new(); gtk_button_set_image(GTK_BUTTON(btn), gtk_image_new_from_icon_name("window-close", GTK_ICON_SIZE_MENU)); gtk_button_set_relief(GTK_BUTTON(btn), GTK_RELIEF_NONE); #if GTK_CHECK_VERSION (3,20,0) gtk_widget_set_focus_on_click(btn, FALSE); #else gtk_button_set_focus_on_click(GTK_BUTTON(btn), FALSE); #endif add_to(headbtn, btn, FALSE, FALSE, 0, 0); } if (!content) content = BOXV; gtk_widget_show_all(headbtn); gtk_notebook_append_page(GTK_NOTEBOOK(notebook), content, headbtn); gtk_notebook_set_tab_reorderable(GTK_NOTEBOOK(notebook), content, TRUE); #if GTK_CHECK_VERSION (3,4,0) if (close) { // gtk-scroll-tabs (close button) for GTK 3.4..3.24 | so same GTK 2.24 3.x 4.x & Qt 5.x 6.x // with or without gtk3-classic https://github.com/lah7/gtk3-classic/commit/66b65775822c46e07f5b2f30036010d06dbcbad4 gtk_widget_add_events(btn, GDK_SCROLL_MASK); g_signal_connect(btn, "scroll-event", G_CALLBACK(on_scrolltabs), NULL); } #endif } static void create_treview(GtkWidget *root) { // ok if (awf_trace) g_printf("» create_treview()\n"); GtkWidget *scrolled_window, *view; GtkCellRenderer *renderer; GtkTreeStore *store; GtkTreeIter iter; int idx = 0; // data store = gtk_tree_store_new(11, G_TYPE_INT, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_DOUBLE, G_TYPE_DOUBLE, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN); gtk_tree_store_append(store, &iter, NULL); gtk_tree_store_set(store, &iter, 0, 1, 1, FALSE, 2, FALSE, 3, "Text 1.1", 4, 0.0, 5, 0.0, 6, "Text 1.2", 7, "document-open", 8, "document-open", 9, FALSE, 10, FALSE, -1); gtk_tree_store_append(store, &iter, NULL); gtk_tree_store_set(store, &iter, 0, 2, 1, TRUE, 2, TRUE, 3, "Text 2.1", 4, 10.0, 5, 10.0, 6, "Text 2.2", 7, "document-save", 8, "document-save", 9, TRUE, 10, TRUE, -1); gtk_tree_store_append(store, &iter, NULL); gtk_tree_store_set(store, &iter, 0, 3, 1, FALSE, 2, FALSE, 3, "Text 3.1", 4, 20.0, 5, 20.0, 6, "Text 3.2", 7, "document-save-as", 8, "document-save-as", 9, FALSE, 10, FALSE, -1); gtk_tree_store_append(store, &iter, NULL); gtk_tree_store_set(store, &iter, 0, 4, 1, TRUE, 2, TRUE, 3, "Text 4.1", 4, 30.0, 5, 30.0, 6, "Text 4.2", 7, "view-refresh", 8, "view-refresh", 9, TRUE, 10, TRUE, -1); gtk_tree_store_append(store, &iter, NULL); gtk_tree_store_set(store, &iter, 0, 5, 1, FALSE, 2, FALSE, 3, "Text 5.1", 4, 40.0, 5, 40.0, 6, "Text 5.2", 7, "edit-cut", 8, "edit-cut", 9, FALSE, 10, FALSE, -1); gtk_tree_store_append(store, &iter, NULL); gtk_tree_store_set(store, &iter, 0, 6, 1, TRUE, 2, TRUE, 3, "Text 6.1", 4, 50.0, 5, 50.0, 6, "Text 6.2", 7, "help-contents", 8, "help-contents", 9, TRUE, 10, TRUE, -1); gtk_tree_store_append(store, &iter, NULL); gtk_tree_store_set(store, &iter, 0, 7, 1, FALSE, 2, FALSE, 3, "Text 7.1", 4, 60.0, 5, 60.0, 6, "Text 7.2", 7, "document-open", 8, "document-open", 9, FALSE, 10, FALSE, -1); gtk_tree_store_append(store, &iter, NULL); gtk_tree_store_set(store, &iter, 0, 8, 1, TRUE, 2, TRUE, 3, "Text 8.1", 4, 70.0, 5, 70.0, 6, "Text 8.2", 7, "document-save", 8, "document-save", 9, TRUE, 10, TRUE, -1); gtk_tree_store_append(store, &iter, NULL); gtk_tree_store_set(store, &iter, 0, 9, 1, FALSE, 2, FALSE, 3, "Text 9.1", 4, 80.0, 5, 80.0, 6, "Text 9.2", 7, "document-save-as", 8, "document-save-as", 9, FALSE, 10, FALSE, -1); gtk_tree_store_append(store, &iter, NULL); gtk_tree_store_set(store, &iter, 0, 10, 1, TRUE, 2, TRUE, 3, "Text 10.1", 4, 90.0, 5, 90.0, 6, "Text 10.2", 7, "view-refresh", 8, "view-refresh", 9, TRUE, 10, TRUE, -1); gtk_tree_store_append(store, &iter, NULL); gtk_tree_store_set(store, &iter, 0, 11, 1, FALSE, 2, FALSE, 3, "Text 11.1", 4, 100.0, 5, 100.0, 6, "Text 11.2", 7, "edit-cut", 8, "edit-cut", 9, FALSE, 10, FALSE, -1); // columns view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store)); gtk_tree_view_set_reorderable(GTK_TREE_VIEW(view), FALSE); // rows gtk_tree_view_set_show_expanders(GTK_TREE_VIEW(view), FALSE); gtk_tree_view_set_headers_clickable(GTK_TREE_VIEW(view), TRUE); gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(store), 0, GTK_SORT_ASCENDING); g_object_unref(G_OBJECT(store)); idx = 0; renderer = gtk_cell_renderer_text_new(); gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), idx, "i", renderer, "text", idx, NULL); gtk_tree_view_column_set_sort_column_id(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), idx); gtk_tree_view_column_set_reorderable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); gtk_tree_view_column_set_resizable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); g_object_set(renderer, "editable", TRUE, NULL); idx = 1; renderer = gtk_cell_renderer_toggle_new(); gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), idx, "c", renderer, "active", idx, NULL); gtk_tree_view_column_set_reorderable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); gtk_tree_view_column_set_resizable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); gtk_tree_view_column_set_min_width(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), 20); idx = 2; renderer = gtk_cell_renderer_toggle_new(); gtk_cell_renderer_toggle_set_radio(GTK_CELL_RENDERER_TOGGLE(renderer), TRUE); gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), idx, "r", renderer, "active", idx, NULL); gtk_tree_view_column_set_reorderable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); gtk_tree_view_column_set_resizable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); gtk_tree_view_column_set_min_width(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), 20); idx = 3; renderer = gtk_cell_renderer_text_new(); gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), idx, "Text", renderer, "text", idx, NULL); gtk_tree_view_column_set_sort_column_id(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), idx); gtk_tree_view_column_set_reorderable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); gtk_tree_view_column_set_resizable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); g_object_set(renderer, "editable", TRUE, NULL); idx = 4; renderer = gtk_cell_renderer_progress_new(); gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), idx, "Progress", renderer, "value", idx, NULL); gtk_tree_view_column_set_sort_column_id(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), idx); gtk_tree_view_column_set_reorderable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); gtk_tree_view_column_set_resizable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); idx = 5; renderer = gtk_cell_renderer_progress_new(); gtk_cell_renderer_set_sensitive(renderer, FALSE); gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), idx, "Progress", renderer, "value", idx, NULL); gtk_tree_view_column_set_sort_column_id(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), idx); gtk_tree_view_column_set_reorderable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); gtk_tree_view_column_set_resizable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); idx = 6; renderer = gtk_cell_renderer_text_new(); gtk_cell_renderer_set_sensitive(renderer, FALSE); gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), idx, "Text", renderer, "text", idx, NULL); gtk_tree_view_column_set_sort_column_id(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), idx); gtk_tree_view_column_set_reorderable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); gtk_tree_view_column_set_resizable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); idx = 7; renderer = gtk_cell_renderer_pixbuf_new(); gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), idx, "Icon", renderer, "icon-name", idx, NULL); gtk_tree_view_column_set_reorderable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); gtk_tree_view_column_set_resizable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); idx = 8; renderer = gtk_cell_renderer_pixbuf_new(); gtk_cell_renderer_set_sensitive(renderer, FALSE); gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), idx, "Icon", renderer, "icon-name", idx, NULL); gtk_tree_view_column_set_reorderable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); gtk_tree_view_column_set_resizable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); idx = 9; renderer = gtk_cell_renderer_toggle_new(); gtk_cell_renderer_set_sensitive(renderer, FALSE); gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), idx, "c", renderer, "active", idx, NULL); gtk_tree_view_column_set_reorderable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); gtk_tree_view_column_set_resizable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); gtk_tree_view_column_set_min_width(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), 20); idx = 10; renderer = gtk_cell_renderer_toggle_new(); gtk_cell_renderer_set_sensitive(renderer, FALSE); gtk_cell_renderer_toggle_set_radio(GTK_CELL_RENDERER_TOGGLE(renderer), TRUE); gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), idx, "r", renderer, "active", idx, NULL); gtk_tree_view_column_set_reorderable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); gtk_tree_view_column_set_resizable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); gtk_tree_view_column_set_min_width(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), 20); // colors for lines: before with GTK 3.19, after with gtk3-classic #if !GTK_CHECK_VERSION (3,19,0) gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(view), TRUE); #endif // scrolled window scrolled_window = gtk_scrolled_window_new(NULL, NULL); gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrolled_window), GTK_SHADOW_IN); #if GTK_CHECK_VERSION (3,16,0) const gchar *config = g_getenv("GTK_OVERLAY_SCROLLING"); if (config && (strcmp(config, "0") == 0)) gtk_scrolled_window_set_overlay_scrolling(GTK_SCROLLED_WINDOW(scrolled_window), FALSE); #endif gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled_window), GTK_POLICY_ALWAYS, GTK_POLICY_ALWAYS); gtk_widget_set_size_request(scrolled_window, 200, 200); // The 200 gtk_widget_set_size_request(view, 200, 200); // The 200 gtk_container_add(GTK_CONTAINER(scrolled_window), view); add_to(root, scrolled_window, FALSE, FALSE, 0, 0); } static void create_scales(GtkWidget *notebook, gchar *text, int position) { if (awf_trace) g_printf("» create_scales()\n"); GtkWidget *hbox = BOXH; GtkWidget *vbox1 = BOXV, *vbox2 = BOXV, *vbox3 = BOXV, *hboxa = BOXH, *hboxb = BOXH; GtkWidget *scale1v, *scale2v, *scale3v, *scale4v, *scale5v, *scale6v, *scale7v, *scale8v, *scale9v, *scale10v, *scale11v, *scale12v; GtkWidget *scale1h, *scale2h, *scale3h, *scale4h, *scale5h, *scale6h, *scale7h, *scale8h, *scale9h, *scale10h, *scale11h, *scale12h; gdouble value = gtk_range_get_value(GTK_RANGE(scale1)); gtk_container_set_border_width(GTK_CONTAINER(hbox), 12); // vertical scales scale1v = create_vertical_scale(value, FALSE, FALSE, position); if (gtk_widget_get_direction(window) == GTK_TEXT_DIR_RTL) // @todo highlight bottom instead of top, why? gtk_style_context_add_class(gtk_widget_get_style_context(scale1v), "top"); scale2v = create_vertical_scale(value, FALSE, FALSE, position); update_marks(GTK_SCALE(scale2v), FALSE, GTK_POS_LEFT); if (gtk_widget_get_direction(window) == GTK_TEXT_DIR_RTL) // @todo highlight bottom instead of top, why? gtk_style_context_add_class(gtk_widget_get_style_context(scale2v), "top"); scale3v = create_vertical_scale(value, FALSE, FALSE, position); update_marks(GTK_SCALE(scale3v), TRUE, GTK_POS_LEFT); if (gtk_widget_get_direction(window) == GTK_TEXT_DIR_RTL) // @todo highlight bottom instead of top, why? gtk_style_context_add_class(gtk_widget_get_style_context(scale3v), "top"); scale4v = create_vertical_scale(value, TRUE, FALSE, position); if (gtk_widget_get_direction(window) == GTK_TEXT_DIR_RTL) // @todo highlight bottom instead of top, why? gtk_style_context_add_class(gtk_widget_get_style_context(scale4v), "top"); scale5v = create_vertical_scale(value, TRUE, FALSE, position); update_marks(GTK_SCALE(scale5v), FALSE, GTK_POS_LEFT); if (gtk_widget_get_direction(window) == GTK_TEXT_DIR_RTL) // @todo highlight bottom instead of top, why? gtk_style_context_add_class(gtk_widget_get_style_context(scale5v), "top"); scale6v = create_vertical_scale(value, TRUE, FALSE, position); update_marks(GTK_SCALE(scale6v), TRUE, GTK_POS_LEFT); if (gtk_widget_get_direction(window) == GTK_TEXT_DIR_RTL) // @todo highlight bottom instead of top, why? gtk_style_context_add_class(gtk_widget_get_style_context(scale6v), "top"); scale7v = create_vertical_scale(value, FALSE, TRUE, position); scale8v = create_vertical_scale(value, FALSE, TRUE, position); update_marks(GTK_SCALE(scale8v), FALSE, GTK_POS_RIGHT); scale9v = create_vertical_scale(value, FALSE, TRUE, position); update_marks(GTK_SCALE(scale9v), TRUE, GTK_POS_RIGHT); scale10v = create_vertical_scale(value, TRUE, TRUE, position); scale11v = create_vertical_scale(value, TRUE, TRUE, position); update_marks(GTK_SCALE(scale11v), FALSE, GTK_POS_RIGHT); scale12v = create_vertical_scale(value, TRUE, TRUE, position); update_marks(GTK_SCALE(scale12v), TRUE, GTK_POS_RIGHT); // horizontal scales scale1h = create_horizontal_scale(value, FALSE, FALSE, position); scale2h = create_horizontal_scale(value, FALSE, FALSE, position); update_marks(GTK_SCALE(scale2h), FALSE, GTK_POS_TOP); scale3h = create_horizontal_scale(value, FALSE, FALSE, position); update_marks(GTK_SCALE(scale3h), TRUE, GTK_POS_TOP); scale4h = create_horizontal_scale(value, TRUE, FALSE, position); scale5h = create_horizontal_scale(value, TRUE, FALSE, position); update_marks(GTK_SCALE(scale5h), FALSE, GTK_POS_TOP); scale6h = create_horizontal_scale(value, TRUE, FALSE, position); update_marks(GTK_SCALE(scale6h), TRUE, GTK_POS_TOP); scale7h = create_horizontal_scale(value, FALSE, TRUE, position); scale8h = create_horizontal_scale(value, FALSE, TRUE, position); update_marks(GTK_SCALE(scale8h), FALSE, GTK_POS_BOTTOM); scale9h = create_horizontal_scale(value, FALSE, TRUE, position); update_marks(GTK_SCALE(scale9h), TRUE, GTK_POS_BOTTOM); scale10h = create_horizontal_scale(value, TRUE, TRUE, position); scale11h = create_horizontal_scale(value, TRUE, TRUE, position); update_marks(GTK_SCALE(scale11h), FALSE, GTK_POS_BOTTOM); scale12h = create_horizontal_scale(value, TRUE, TRUE, position); update_marks(GTK_SCALE(scale12h), TRUE, GTK_POS_BOTTOM); // layout add_to(hbox, vbox1, TRUE, TRUE, 5, 5); add_to(vbox1, scale1h, FALSE, FALSE, 5, 5); add_to(vbox1, scale2h, FALSE, FALSE, 5, 5); add_to(vbox1, scale3h, FALSE, FALSE, 5, 5); add_to(vbox1, scale4h, FALSE, FALSE, 5, 5); add_to(vbox1, scale5h, FALSE, FALSE, 5, 5); add_to(vbox1, scale6h, FALSE, FALSE, 5, 5); add_to(hbox, vbox2, TRUE, TRUE, 5, 5); add_to(vbox2, hboxa, TRUE, TRUE, 0, 0); add_to(hboxa, scale1v, FALSE, FALSE, 5, 5); add_to(hboxa, scale2v, FALSE, FALSE, 5, 5); add_to(hboxa, scale3v, FALSE, FALSE, 5, 5); add_to(hboxa, scale7v, FALSE, FALSE, 5, 5); add_to(hboxa, scale8v, FALSE, FALSE, 5, 5); add_to(hboxa, scale9v, FALSE, FALSE, 5, 5); add_to(vbox2, hboxb, TRUE, TRUE, 0, 0); add_to(hboxb, scale4v, FALSE, FALSE, 5, 5); add_to(hboxb, scale5v, FALSE, FALSE, 5, 5); add_to(hboxb, scale6v, FALSE, FALSE, 5, 5); add_to(hboxb, scale10v, FALSE, FALSE, 5, 5); add_to(hboxb, scale11v, FALSE, FALSE, 5, 5); add_to(hboxb, scale12v, FALSE, FALSE, 5, 5); add_to(hbox, vbox3, TRUE, TRUE, 5, 5); add_to(vbox3, scale7h, FALSE, FALSE, 5, 5); add_to(vbox3, scale8h, FALSE, FALSE, 5, 5); add_to(vbox3, scale9h, FALSE, FALSE, 5, 5); add_to(vbox3, scale10h, FALSE, FALSE, 5, 5); add_to(vbox3, scale11h, FALSE, FALSE, 5, 5); add_to(vbox3, scale12h, FALSE, FALSE, 5, 5); create_notebook_tab(notebook, text, hbox, FALSE); } static GtkWidget* create_horizontal_scale(gdouble value, gboolean draw, gboolean inverted, int position) { // ok if (awf_trace) g_printf("» create_horizontal_scale()\n"); GtkWidget *scale; scale = gtk_scale_new_with_range(GTK_ORIENTATION_HORIZONTAL, 0, 100, 1); gtk_range_set_value(GTK_RANGE(scale), value); gtk_scale_set_draw_value(GTK_SCALE(scale), draw); gtk_scale_set_value_pos(GTK_SCALE(scale), position); gtk_range_set_inverted(GTK_RANGE(scale), inverted); gtk_widget_set_size_request(scale, 186, -1); // The 186 return scale; } static GtkWidget* create_vertical_scale(gdouble value, gboolean draw, gboolean inverted, int position) { // ok if (awf_trace) g_printf("» create_vertical_scale()\n"); GtkWidget *scale; scale = gtk_scale_new_with_range(GTK_ORIENTATION_VERTICAL, 0, 100, 1); gtk_scale_set_value_pos(GTK_SCALE(scale), position); gtk_range_set_inverted(GTK_RANGE(scale), inverted); gtk_scale_set_draw_value(GTK_SCALE(scale), draw); gtk_range_set_value(GTK_RANGE(scale), value); gtk_widget_set_size_request(scale, -1, 100); // The 100 return scale; } // traditional menu - common gtk2/3 except one line static void create_traditional_menubar(GtkWidget *root) { if (awf_trace) g_printf("» create_traditional_menubar()\n"); GtkWidget *menu, *submenu, *menuitem, *base; GtkAccelGroup *accels = gtk_accel_group_new(); GSList *group = NULL; GList *iterator; gboolean ok = FALSE; gtk_window_add_accel_group(GTK_WINDOW(window), accels); // options menu = create_menu(root, _app("_Options"), TRUE); gtk_menu_set_accel_group(GTK_MENU(menu), accels); // very important // @todo option command line? if (g_getenv("AWF_TEAROFF") != NULL) create_menuitem_tearoff(menu); create_menuitem(menu, "gtk-open", FALSE, AWF_ACCEL_OPEN, AWF_OPEN, dialog_open); create_menuitem(menu, _app("Open recent file"), FALSE, AWF_ACCEL_RECE, AWF_RECE, dialog_recent); create_menuitem(menu, "gtk-save", FALSE, AWF_ACCEL_SAVE, AWF_SAVE, dialog_save); create_menuitem(menu, "gtk-refresh", FALSE, AWF_ACCEL_REFR, AWF_REFR, G_CALLBACK(on_sighup)); // G_CALLBACK(update_theme) create_menuitem(menu, _app("Calendar"), FALSE, AWF_ACCEL_CALE, AWF_CALE, dialog_calendar); create_menuitem(menu, "GtkScales", FALSE, AWF_ACCEL_SCAL, AWF_SCAL, dialog_scales); create_menuitem(menu, "gtk-properties", FALSE, AWF_ACCEL_PROP, AWF_PROP, dialog_message); create_menuitem(menu, "gtk-page-setup", FALSE, AWF_ACCEL_PRSE, AWF_PRSE, dialog_page_setup); create_menuitem(menu, "gtk-print", FALSE, AWF_ACCEL_PRIN, AWF_PRIN, dialog_print); submenu = create_menu(menu, _app("More..."), TRUE); gtk_menu_set_accel_group(GTK_MENU(submenu), accels); // very important create_menuitem(submenu, "gtk-cut", FALSE, AWF_ACCEL_MCUT, AWF_MCUT, NULL); create_menuitem(submenu, "gtk-copy", FALSE, AWF_ACCEL_MCOP, AWF_MCOP, NULL); create_menuitem(submenu, "gtk-paste", FALSE, AWF_ACCEL_MPAS, AWF_MPAS, NULL); menuitem = gtk_separator_menu_item_new(); gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); create_menuitem_check(menu, g_strdup_printf("Check 1 %s", _app("(unchecked)")), TRUE, FALSE, FALSE, FALSE); create_menuitem_check(menu, g_strdup_printf("Check 2 %s", _app("(checked)")), TRUE, TRUE, FALSE, FALSE); create_menuitem_check(menu, g_strdup_printf("Check 3 %s", _app("(inconsistent)")), TRUE, FALSE, TRUE, FALSE); create_menuitem_check(menu, g_strdup_printf("Check 1 %s", _app("(unchecked)")), TRUE, FALSE, FALSE, TRUE); create_menuitem_check(menu, g_strdup_printf("Check 2 %s", _app("(checked)")), TRUE, TRUE, FALSE, TRUE); create_menuitem_check(menu, g_strdup_printf("Check 3 %s", _app("(inconsistent)")), TRUE, FALSE, TRUE, TRUE); menuitem = gtk_separator_menu_item_new(); gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); menuitem = create_menuitem_radio(menu, g_strdup_printf("Radio 1 %s", _app("(unchecked)")), TRUE, FALSE, FALSE, FALSE, NULL); group = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(menuitem)); create_menuitem_radio(menu, g_strdup_printf("Radio 2 %s", _app("(checked)")), TRUE, TRUE, FALSE, FALSE, group); create_menuitem_radio(menu, g_strdup_printf("Radio 3 %s", _app("(inconsistent)")), TRUE, FALSE, TRUE, FALSE, NULL); menuitem = create_menuitem_radio(menu, g_strdup_printf("Radio 1 %s", _app("(unchecked)")), TRUE, FALSE, FALSE, TRUE, NULL); group = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(menuitem)); create_menuitem_radio(menu, g_strdup_printf("Radio 2 %s", _app("(checked)")), TRUE, TRUE, FALSE, TRUE, group); create_menuitem_radio(menu, g_strdup_printf("Radio 3 %s", _app("(inconsistent)")), TRUE, FALSE, TRUE, TRUE, NULL); menuitem = gtk_separator_menu_item_new(); gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); create_menuitem(menu, "gtk-close", TRUE, AWF_ACCEL_CLOS, AWF_CLOS, NULL); create_menuitem(menu, "gtk-quit", FALSE, AWF_ACCEL_QUIT, AWF_QUIT, quit); // system themes group = NULL; menu = create_menu(root, _app("_System themes"), FALSE); for (iterator = list_system_theme; iterator; iterator = iterator->next) { if ( (strcmp((gchar*) iterator->data, "Mint-L") == 0) || (strcmp((gchar*) iterator->data, "Mint-X") == 0) || (strcmp((gchar*) iterator->data, "Mint-Y") == 0) || (strcmp((gchar*) iterator->data, "Yaru") == 0) || (strcmp((gchar*) iterator->data, "Sucharu") == 0) ) { submenu = create_menu(menu, iterator->data, FALSE); base = submenu; ok = TRUE; } else if (ok && ( g_str_has_prefix((gchar*) iterator->data, "Mint-L") || g_str_has_prefix((gchar*) iterator->data, "Mint-X") || g_str_has_prefix((gchar*) iterator->data, "Mint-Y") || g_str_has_prefix((gchar*) iterator->data, "Yaru") || g_str_has_prefix((gchar*) iterator->data, "Sucharu") )) { base = submenu; } else { base = menu; ok = FALSE; } if (g_hash_table_lookup(hash_user_theme, iterator->data)) { menuitem = create_menuitem_radio(base, iterator->data, FALSE, FALSE, FALSE, TRUE, group); group = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(menuitem)); if (strcmp(current_theme, (gchar*) iterator->data) == 0) gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem), TRUE); g_signal_connect_swapped(menuitem, "activate", G_CALLBACK(update_theme), iterator->data); } else { menuitem = create_menuitem_radio(base, iterator->data, FALSE, FALSE, FALSE, FALSE, group); group = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(menuitem)); if (strcmp(current_theme, (gchar*) iterator->data) == 0) gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem), TRUE); g_signal_connect_swapped(menuitem, "activate", G_CALLBACK(update_theme), iterator->data); } } if (!list_system_theme) create_menuitem(menu, _app("No themes found"), TRUE, NULL, NULL, NULL); // user themes menu = create_menu(root, _app("_User themes"), FALSE); for (iterator = list_user_theme; iterator; iterator = iterator->next) { if ( (strcmp((gchar*) iterator->data, "Mint-L") == 0) || (strcmp((gchar*) iterator->data, "Mint-X") == 0) || (strcmp((gchar*) iterator->data, "Mint-Y") == 0) || (strcmp((gchar*) iterator->data, "Yaru") == 0) || (strcmp((gchar*) iterator->data, "Sucharu") == 0) ) { submenu = create_menu(menu, iterator->data, FALSE); base = submenu; ok = TRUE; } else if (ok && ( g_str_has_prefix((gchar*) iterator->data, "Mint-L") || g_str_has_prefix((gchar*) iterator->data, "Mint-X") || g_str_has_prefix((gchar*) iterator->data, "Mint-Y") || g_str_has_prefix((gchar*) iterator->data, "Yaru") || g_str_has_prefix((gchar*) iterator->data, "Sucharu") )) { base = submenu; } else { base = menu; ok = FALSE; } menuitem = create_menuitem_radio(base, iterator->data, FALSE, FALSE, FALSE, FALSE, group); group = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(menuitem)); if (strcmp(current_theme, (gchar*) iterator->data) == 0) gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem), TRUE); g_signal_connect_swapped(menuitem, "activate", G_CALLBACK(update_theme), iterator->data); } if (!list_user_theme) create_menuitem(menu, _app("No themes found"), TRUE, NULL, NULL, NULL); // text direction group = NULL; menu = create_menu(root, _app("_Text direction"), FALSE); menuitem = create_menuitem_radio(menu, _app("Left to Right (LTR)"), FALSE, FALSE, FALSE, FALSE, group); if (current_direction == 1) gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem), TRUE); g_signal_connect_swapped(menuitem, "activate", G_CALLBACK(update_text_direction), GINT_TO_POINTER(GTK_TEXT_DIR_LTR)); group = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(menuitem)); menuitem = create_menuitem_radio(menu, _app("Right to Left (RTL)"), FALSE, FALSE, FALSE, FALSE, group); if (current_direction == 2) gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem), TRUE); g_signal_connect_swapped(menuitem, "activate", G_CALLBACK(update_text_direction), GINT_TO_POINTER(GTK_TEXT_DIR_RTL)); // help menu = create_menu(root, _app("_Help"), TRUE); gtk_menu_set_accel_group(GTK_MENU(menu), accels); // very important #if GTK_CHECK_VERSION (3,14,0) create_menuitem(menu, "GtkInspector", FALSE, AWF_ACCEL_INSP, AWF_INSP, dialog_inspector); #else menuitem = create_menuitem(menu, "GtkInspector", FALSE, AWF_ACCEL_INSP, AWF_INSP, NULL); gtk_widget_set_sensitive(menuitem, FALSE); #endif create_menuitem(menu, "gtk-about", FALSE, AWF_ACCEL_ABOU, AWF_ABOU, dialog_about); // gtk-can-change-accels for GTK 3.x | so same GTK 2.24 3.x 4.x & Qt 5.x 6.x accels_load(); g_object_set(gtk_settings_get_default(), "gtk-can-change-accels", FALSE, NULL); g_object_unref(accels); } static GtkWidget* create_menu(GtkWidget *root, gchar *text, gboolean cca) { if (awf_trace) g_printf("» create_menu(%s)\n", text); GtkWidget *menu, *menuitem; menu = gtk_menu_new(); menuitem = gtk_menu_item_new_with_mnemonic(text); gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), menu); gtk_menu_shell_append(GTK_MENU_SHELL(root), menuitem); if (cca) { // gtk-can-change-accels for GTK 3.x | so same GTK 2.24 3.x 4.x & Qt 5.x 6.x gtk_widget_set_events(menu, GDK_KEY_RELEASE_MASK); g_signal_connect(menu, "key-release-event", G_CALLBACK(accels_change), NULL); } return menu; } static GtkWidget* create_menuitem_tearoff(GtkWidget *menu) { if (awf_trace) g_printf("» create_menuitem_tearoff()\n"); GtkWidget *menuitem; menuitem = gtk_tearoff_menu_item_new(); gtk_style_context_add_class(gtk_widget_get_style_context(menuitem), "tearoff"); gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); return menuitem; } static GtkWidget* create_menuitem_check(GtkWidget *menu, gchar *text, gboolean free, gboolean chk, gboolean ist, gboolean dsb) { if (awf_trace) g_printf("» create_menuitem_check(%s)\n", text); GtkWidget *menuitem; menuitem = gtk_check_menu_item_new_with_mnemonic(text); gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem), chk); gtk_check_menu_item_set_inconsistent(GTK_CHECK_MENU_ITEM(menuitem), ist); gtk_widget_set_sensitive(menuitem, !dsb); gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); if (free) g_free(text); return menuitem; } static GtkWidget* create_menuitem_radio(GtkWidget *menu, gchar *text, gboolean free, gboolean chk, gboolean ist, gboolean dsb, GSList *group) { if (awf_trace) g_printf("» create_menuitem_radio(%s)\n", text); GtkWidget *menuitem; menuitem = gtk_radio_menu_item_new_with_mnemonic(group, text); gtk_check_menu_item_set_inconsistent(GTK_CHECK_MENU_ITEM(menuitem), ist); gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem), chk); gtk_widget_set_sensitive(menuitem, !dsb); gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); if (free) g_free(text); return menuitem; } static GtkWidget* create_menuitem(GtkWidget *menu, gchar *text, gboolean dsb, gchar *accel, gchar *kmp, GCallback function) { if (awf_trace) g_printf("» create_menuitem(%s)\n", text); GtkWidget *menuitem; GdkModifierType mods; guint key; if (g_str_has_prefix(text, "gtk-")) menuitem = gtk_image_menu_item_new_from_stock(text, NULL); else menuitem = gtk_image_menu_item_new_with_mnemonic(text); gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); gtk_widget_set_sensitive(menuitem, !dsb); if (accel && kmp) { gtk_accelerator_parse(accel, &key, &mods); gtk_accel_map_add_entry(kmp, key, mods); } if (kmp) { gtk_menu_item_set_accel_path(GTK_MENU_ITEM(menuitem), kmp); // gtk-can-change-accels for GTK 3.x | so same GTK 2.24 3.x 4.x & Qt 5.x 6.x g_signal_connect(menuitem, "select", G_CALLBACK(accels_select), NULL); g_signal_connect(menuitem, "deselect", G_CALLBACK(accels_deselect), NULL); } if (function) g_signal_connect(menuitem, "activate", function, NULL); return menuitem; } static void accels_load() { // ok if (awf_trace) g_printf("» accels_load()\n"); gchar *old_path = g_build_filename(g_get_home_dir(), ".awf-gtk-accels", NULL); if (g_file_test(old_path, G_FILE_TEST_EXISTS)) { gchar *new_path = g_build_filename(g_get_home_dir(), ".awf-accels", NULL); g_rename(old_path, new_path); g_free(new_path); } g_free(old_path); // gtk-can-change-accels for GTK 3.x | so same GTK 2.24 3.x 4.x & Qt 5.x 6.x gchar *path = g_build_filename(g_get_home_dir(), ".awf-accels", NULL); if (g_file_test(path, G_FILE_TEST_IS_REGULAR)) gtk_accel_map_load(path); g_free(path); } static void accels_select(GtkWidget *widget) { // ok // gtk-can-change-accels for GTK 3.x | so same GTK 2.24 3.x 4.x & Qt 5.x 6.x current_menuitem = widget; } static void accels_deselect(GtkWidget *widget) { // ok // gtk-can-change-accels for GTK 3.x | so same GTK 2.24 3.x 4.x & Qt 5.x 6.x if (current_menuitem == widget) current_menuitem = NULL; } static void accels_change(GtkWidget *widget, GdkEventKey *event) { // ok if (awf_trace) g_printf("» accels_change()\n"); // gtk-can-change-accels for GTK 3.x | so same GTK 2.24 3.x 4.x & Qt 5.x 6.x // @see https://gitlab.gnome.org/GNOME/gtk/-/commit/2d79334bb069224966b3dcd8456967c9800e8fd0 if (current_menuitem) { GtkMenuItem *menuitem = GTK_MENU_ITEM(current_menuitem); gchar *key = gdk_keyval_name(event->keyval); const gchar *acl = gtk_menu_item_get_accel_path(menuitem); if ( key && acl && (strcmp(key, "Control_L") != 0) && (strcmp(key, "Control_R") != 0) && (strcmp(key, "Shift_L") != 0) && (strcmp(key, "Shift_R") != 0) && (strcmp(key, "Super_L") != 0) && (strcmp(key, "Super_R") != 0) && (strcmp(key, "Meta_L") != 0) && (strcmp(key, "Meta_R") != 0) && (strcmp(key, "Alt_L") != 0) && (strcmp(key, "Alt_R") != 0) ) { gboolean del = (event->keyval == GDK_KEY_Delete) || (event->keyval == GDK_KEY_KP_Delete) || (event->keyval == GDK_KEY_BackSpace); if ( del || // f1..12 ((event->keyval >= GDK_KEY_F1) && (event->keyval <= GDK_KEY_F12)) || // crtl/shift/super/alt + ? (event->state & GDK_CONTROL_MASK) || (event->state & GDK_SHIFT_MASK) || (event->state & GDK_SUPER_MASK) || (event->state & GDK_META_MASK) ) { must_save_accels = TRUE; gtk_accel_map_change_entry( acl, del ? 0 : gdk_keyval_to_lower(event->keyval), del ? 0 : event->state & gtk_accelerator_get_default_mod_mask(), TRUE); } } } } static void accels_save() { // ok if (awf_trace) g_printf("» accels_save()\n"); // gtk-can-change-accels for GTK 3.x | so same GTK 2.24 3.x 4.x & Qt 5.x 6.x if (must_save_accels) { gchar *path = g_build_filename(g_get_home_dir(), ".awf-accels", NULL); gtk_accel_map_save(path); g_free(path); } } // dialogs static void dialog_open() { // ok if (awf_trace) g_printf("» dialog_open()\n"); GtkWidget *dialog = gtk_file_chooser_dialog_new( "GtkFileChooserDialog:Open", GTK_WINDOW(window), GTK_FILE_CHOOSER_ACTION_OPEN, "gtk-cancel", GTK_RESPONSE_CANCEL, "gtk-open", GTK_RESPONSE_ACCEPT, NULL); #if GTK_CHECK_VERSION (3,12,0) if (awf_csd) // with gtk-dialogs-use-header gtk_header_bar_set_has_subtitle(GTK_HEADER_BAR(gtk_dialog_get_header_bar(GTK_DIALOG(dialog))), FALSE); #endif gtk_file_chooser_set_select_multiple(GTK_FILE_CHOOSER(dialog), TRUE); gtk_dialog_run(GTK_DIALOG(dialog)); gtk_widget_destroy(dialog); } static void dialog_recent() { // ok if (awf_trace) g_printf("» dialog_recent()\n"); GtkWidget *dialog = gtk_recent_chooser_dialog_new( "GtkRecentChooserDialog", GTK_WINDOW(window), "gtk-cancel", GTK_RESPONSE_CANCEL, "gtk-open", GTK_RESPONSE_ACCEPT, NULL); #if GTK_CHECK_VERSION (3,12,0) if (awf_csd) // with gtk-dialogs-use-header gtk_header_bar_set_has_subtitle(GTK_HEADER_BAR(gtk_dialog_get_header_bar(GTK_DIALOG(dialog))), FALSE); #endif gtk_dialog_run(GTK_DIALOG(dialog)); gtk_widget_destroy(dialog); } static void dialog_save() { // ok if (awf_trace) g_printf("» dialog_save()\n"); GtkWidget *dialog = gtk_file_chooser_dialog_new( "GtkFileChooserDialog:Save", GTK_WINDOW(window), GTK_FILE_CHOOSER_ACTION_SAVE, "gtk-cancel", GTK_RESPONSE_CANCEL, "gtk-save", GTK_RESPONSE_ACCEPT, NULL); #if GTK_CHECK_VERSION (3,12,0) if (awf_csd) // with gtk-dialogs-use-header gtk_header_bar_set_has_subtitle(GTK_HEADER_BAR(gtk_dialog_get_header_bar(GTK_DIALOG(dialog))), FALSE); #endif gtk_dialog_run(GTK_DIALOG(dialog)); gtk_widget_destroy(dialog); } static void dialog_message() { // ok if (awf_trace) g_printf("» dialog_message()\n"); GtkWidget *dialog = gtk_message_dialog_new( GTK_WINDOW(window), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_INFO, GTK_BUTTONS_YES_NO, "GtkMessageDialog"); gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(dialog), _app("A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme.")); gtk_window_set_title(GTK_WINDOW(dialog), "GtkMessageDialog"); gtk_dialog_run(GTK_DIALOG(dialog)); gtk_widget_destroy(dialog); } static void dialog_page_setup() { // ok if (awf_trace) g_printf("» dialog_page_setup()\n"); //GtkWidget *dialog = gtk_page_setup_unix_dialog_new("GtkPageSetupUnixDialog", GTK_WINDOW(window)); // //#if GTK_CHECK_VERSION (3,12,0) // if (awf_csd) // with gtk-dialogs-use-header // gtk_header_bar_set_has_subtitle(GTK_HEADER_BAR(gtk_dialog_get_header_bar(GTK_DIALOG(dialog))), FALSE); //#endif // //gtk_dialog_run(GTK_DIALOG(dialog)); //gtk_widget_destroy(dialog); GtkPageSetup *setup = gtk_print_run_page_setup_dialog(GTK_WINDOW(window), NULL, NULL); g_object_unref(setup); } static void dialog_print() { // ok if (awf_trace) g_printf("» dialog_print()\n"); //GtkWidget *dialog = gtk_print_unix_dialog_new("GtkPrintUnixDialog", GTK_WINDOW(window)); // //#if GTK_CHECK_VERSION (3,12,0) // if (awf_csd) // with gtk-dialogs-use-header // gtk_header_bar_set_has_subtitle(GTK_HEADER_BAR(gtk_dialog_get_header_bar(GTK_DIALOG(dialog))), FALSE); //#endif // //gtk_dialog_run(GTK_DIALOG(dialog)); //gtk_widget_destroy(dialog); GtkPrintOperation *op = gtk_print_operation_new(); gtk_print_operation_run(op, GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG, GTK_WINDOW(window), NULL); g_object_unref(op); } static void dialog_about() { // ok if (awf_trace) g_printf("» dialog_about()\n"); GdkPixbuf *pixbuf = NULL; #if defined (G_OS_WIN32) extern GdkPixbuf *gdk_win32_icon_to_pixbuf_libgtk_only(HICON hicon); HICON hIcon = (HICON) LoadImage(GetModuleHandle(NULL), "IDI_ICON1", IMAGE_ICON, 64, 64, LR_DEFAULTSIZE); if (hIcon) pixbuf = gdk_win32_icon_to_pixbuf_libgtk_only(hIcon); #endif gchar *c_version; #ifdef __STDC_VERSION__ if (__STDC_VERSION__ >= 202311L) c_version = "C23"; else if (__STDC_VERSION__ >= 201710L) c_version = "C17"; else if (__STDC_VERSION__ >= 201112L) c_version = "C11"; else if (__STDC_VERSION__ >= 199901L) c_version = "C99"; else if (__STDC_VERSION__ >= 199409L) c_version = "C95"; else c_version = "C (unknown)"; #else c_version = "C89/C90"; #endif gchar *t1, *t2, *t3, *t4; gtk_show_about_dialog(GTK_WINDOW(window), "version", VERSION, "comments", t1 = g_strdup_printf("%s\n\n%s\n%s\n\n%s\n%s", _app("A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme."), t2 = g_strdup_printf(_app("Remove %s file"), "~/.awf-accels"), _app("to reset keyboard shortcuts."), t3 = g_strdup_printf(_app("compiled in %s with gtk %d.%d.%d and glib %d.%d.%d and pango %s"), c_version, GTK_MAJOR_VERSION, GTK_MINOR_VERSION, GTK_MICRO_VERSION, GLIB_MAJOR_VERSION, GLIB_MINOR_VERSION, GLIB_MICRO_VERSION, PANGO_VERSION_STRING), t4 = g_strdup_printf(_app(" started with gtk %d.%d.%d and glib %d.%d.%d and pango %s"), gtk_get_major_version(), gtk_get_minor_version(), gtk_get_micro_version(), glib_major_version, glib_minor_version, glib_micro_version, pango_version_string()) ), "website", "https://github.com/luigifab/awf-extended", "copyright", "Copyright © 2020-2026 Fabrice Creuzot (luigifab)\nCopyright © 2011-2017 Valère Monseur (valr)", "icon-name", pixbuf ? NULL : GETTEXT_PACKAGE, "logo-icon-name", pixbuf ? NULL : GETTEXT_PACKAGE, "logo", pixbuf, "license", _app("A widget factory 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."), "wrap-license", TRUE, NULL); g_free(t1); g_free(t2); g_free(t3); g_free(t4); #if defined (G_OS_WIN32) if (hIcon) { if (pixbuf) g_object_unref(pixbuf); DestroyIcon(hIcon); } #endif } static void dialog_inspector() { // ok if (awf_trace) g_printf("» dialog_inspector()\n"); #if GTK_CHECK_VERSION (3,14,0) gtk_window_set_interactive_debugging(TRUE); #endif } static void dialog_calendar() { if (awf_trace) g_printf("» dialog_calendar()\n"); GtkWidget *dialog, *infobar, *label, *calendar, *area, *btn, *vbox = BOXV; dialog = gtk_dialog_new_with_buttons(NULL, GTK_WINDOW(window), GTK_DIALOG_DESTROY_WITH_PARENT, NULL, NULL); // info bars and calendar infobar = gtk_info_bar_new_with_buttons("gtk-ok", GTK_RESPONSE_OK, NULL); gtk_info_bar_set_message_type(GTK_INFO_BAR(infobar), GTK_MESSAGE_INFO); label = gtk_label_new(_app("This is an info bar.")); add_to(infobar, label, FALSE, FALSE, 0, 0); add_to(vbox, infobar, FALSE, FALSE, 0, 0); infobar = gtk_info_bar_new_with_buttons(_app("Ok"), GTK_RESPONSE_OK, NULL); gtk_info_bar_set_message_type(GTK_INFO_BAR(infobar), GTK_MESSAGE_QUESTION); label = gtk_label_new(_app("This is a question bar.")); add_to(infobar, label, FALSE, FALSE, 0, 0); add_to(vbox, infobar, FALSE, FALSE, 0, 0); infobar = gtk_info_bar_new(); gtk_info_bar_set_message_type(GTK_INFO_BAR(infobar), GTK_MESSAGE_WARNING); label = gtk_label_new(_app("This is a warning bar.")); add_to(infobar, label, FALSE, FALSE, 0, 0); add_to(vbox, infobar, FALSE, FALSE, 0, 0); infobar = gtk_info_bar_new(); gtk_info_bar_set_message_type(GTK_INFO_BAR(infobar), GTK_MESSAGE_ERROR); label = gtk_label_new(_app("This is an error bar.")); add_to(infobar, label, FALSE, FALSE, 0, 0); add_to(vbox, infobar, FALSE, FALSE, 0, 0); calendar = gtk_calendar_new(); gtk_calendar_set_display_options(GTK_CALENDAR(calendar), GTK_CALENDAR_SHOW_HEADING | GTK_CALENDAR_SHOW_DAY_NAMES | GTK_CALENDAR_SHOW_WEEK_NUMBERS); add_to(vbox, calendar, FALSE, FALSE, 0, 0); // dialog gtk_container_set_border_width(GTK_CONTAINER(dialog), 5); area = gtk_dialog_get_content_area(GTK_DIALOG(dialog)); gtk_box_set_spacing(GTK_BOX(area), 2); add_to(area, vbox, TRUE, TRUE, 5, 5); gtk_dialog_add_button(GTK_DIALOG(dialog), "gtk-cancel", GTK_RESPONSE_CANCEL); btn = gtk_dialog_add_button(GTK_DIALOG(dialog), "gtk-ok", GTK_RESPONSE_OK); #if GTK_CHECK_VERSION (3,12,0) if (awf_csd) { gtk_window_set_decorated(GTK_WINDOW(dialog), TRUE); GtkWidget *headerbardialog = gtk_header_bar_new(); gtk_header_bar_set_has_subtitle(GTK_HEADER_BAR(headerbardialog), FALSE); gtk_header_bar_set_show_close_button(GTK_HEADER_BAR(headerbardialog), TRUE); gtk_window_set_titlebar(GTK_WINDOW(dialog), headerbardialog); } #endif gtk_widget_set_name(dialog, "AwfDialogWindow"); gtk_widget_grab_focus(GTK_WIDGET(btn)); gtk_window_set_resizable(GTK_WINDOW(dialog), FALSE); gtk_widget_set_size_request(dialog, 350, -1); gtk_window_set_title(GTK_WINDOW(dialog), "GtkDialog"); gtk_widget_show_all(dialog); gtk_dialog_run(GTK_DIALOG(dialog)); gtk_widget_destroy(dialog); } static void dialog_scales() { if (awf_trace) g_printf("» dialog_scales()\n"); GtkWidget *dialog, *notebook, *area; dialog = gtk_dialog_new_with_buttons(NULL, GTK_WINDOW(window), GTK_DIALOG_DESTROY_WITH_PARENT, NULL, NULL); notebook = gtk_notebook_new(); gtk_notebook_set_scrollable(GTK_NOTEBOOK(notebook), FALSE); gtk_notebook_set_tab_pos(GTK_NOTEBOOK(notebook), GTK_POS_TOP); create_scales(notebook, "Top", GTK_POS_TOP); create_scales(notebook, "Right", GTK_POS_RIGHT); create_scales(notebook, "Bottom", GTK_POS_BOTTOM); create_scales(notebook, "Left", GTK_POS_LEFT); gtk_container_set_border_width(GTK_CONTAINER(dialog), 5); area = gtk_dialog_get_content_area(GTK_DIALOG(dialog)); gtk_box_set_spacing(GTK_BOX(area), 2); add_to(area, notebook, TRUE, TRUE, 5, 5); gtk_dialog_add_button(GTK_DIALOG(dialog), "gtk-cancel", 0); gtk_dialog_add_button(GTK_DIALOG(dialog), "gtk-ok", 0); #if GTK_CHECK_VERSION (3,12,0) if (awf_csd) { gtk_window_set_decorated(GTK_WINDOW(dialog), TRUE); GtkWidget *headerbardialog = gtk_header_bar_new(); gtk_header_bar_set_has_subtitle(GTK_HEADER_BAR(headerbardialog), FALSE); gtk_header_bar_set_show_close_button(GTK_HEADER_BAR(headerbardialog), TRUE); gtk_window_set_titlebar(GTK_WINDOW(dialog), headerbardialog); } #endif gtk_widget_set_name(dialog, "AwfDialogWindow"); gtk_window_set_resizable(GTK_WINDOW(dialog), FALSE); gtk_window_set_title(GTK_WINDOW(dialog), "GtkDialog"); gtk_widget_show_all(dialog); gtk_dialog_run(GTK_DIALOG(dialog)); gtk_widget_destroy(dialog); } // gtk-scroll-tabs for GTK 3.4..3.24 | so same GTK 2.24 3.x 4.x & Qt 5.x 6.x // @see https://github.com/mate-desktop/mate-control-center/blob/master/capplets/common/capplet-util.c // for on_scrolltabs source function is capplet_dialog_page_scroll_event_cb // of mate-appearance-properties from mate-control-center, GNU GPL 2.0+ #if GTK_CHECK_VERSION (3,4,0) static gboolean on_scrolltabs(GtkWidget *widget, GdkEventScroll *event) { // gtk-scroll-tabs for GTK 3.4..3.24 | so same GTK 2.24 3.x 4.x & Qt 5.x 6.x GtkWidget *child, *event_widget, *action_widget; GtkNotebook *notebook; while (!GTK_IS_NOTEBOOK(widget)) widget = gtk_widget_get_parent(widget); notebook = GTK_NOTEBOOK(widget); child = gtk_notebook_get_nth_page(notebook, gtk_notebook_get_current_page(notebook)); if (child == NULL) return FALSE; // ignore scroll events from the content of the page event_widget = gtk_get_event_widget((GdkEvent*) event); if (event_widget == NULL || event_widget == child || gtk_widget_is_ancestor(event_widget, child)) return FALSE; // and also from the action widgets action_widget = gtk_notebook_get_action_widget(notebook, GTK_PACK_START); if (event_widget == action_widget || (action_widget != NULL && gtk_widget_is_ancestor(event_widget, action_widget))) return FALSE; action_widget = gtk_notebook_get_action_widget(notebook, GTK_PACK_END); if (event_widget == action_widget || (action_widget != NULL && gtk_widget_is_ancestor(event_widget, action_widget))) return FALSE; switch (event->direction) { case GDK_SCROLL_RIGHT: case GDK_SCROLL_DOWN: gtk_notebook_next_page(notebook); break; case GDK_SCROLL_LEFT: case GDK_SCROLL_UP: gtk_notebook_prev_page(notebook); break; case GDK_SCROLL_SMOOTH: switch (gtk_notebook_get_tab_pos(notebook)) { case GTK_POS_LEFT: case GTK_POS_RIGHT: if (event->delta_y > 0) gtk_notebook_next_page(notebook); else if (event->delta_y < 0) gtk_notebook_prev_page(notebook); break; case GTK_POS_TOP: case GTK_POS_BOTTOM: if (event->delta_x > 0) gtk_notebook_next_page(notebook); else if (event->delta_x < 0) gtk_notebook_prev_page(notebook); break; } break; } return TRUE; } #endif // yoloawf-extended-4.1.0/src/awf-gtk4.c000066400000000000000000003531121517644610000164570ustar00rootroot00000000000000/** * Forked M/10/03/2020 * Updated V/01/05/2026 * * Copyright 2020-2026 | Fabrice Creuzot (luigifab) * https://github.com/luigifab/awf-extended * https://www.luigifab.fr/gtkqt/awf-extended * * Forked from * Copyright 2011-2017 | Valère Monseur (valr) * https://github.com/valr/awf * * Forked from * AWF is originally based on the code from The Widget Factory * created by Richard Stellingwerff * * This program is free software, you can redistribute it or modify * it under the terms of the GNU General Public License (GPL) as published * by the free software foundation, either version 3 of the license, or * (at your option) any later version. * * This program is distributed in the hope that 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 (GPL) for more details. * * * Translations update: * https://github.com/GNOME/gtk/blob/3.24.50/po/fr.po * xgettext --keyword=_app -d awf -o src/awf.pot -k_ -s src/awf-*.c* * msgmerge src/po/fr.po src/awf.pot -o src/po/fr.po * msgfmt src/po/fr.po -o src/fr/LC_MESSAGES/awf.mo * * Tested with build.sh (via VirtualBox 7) with: * Debian Testing 64 (1536 MB) GTK 2.24/3.24/4.22 + GLIB 2.88 + Pango 1.57 * Fedora Rawhide 64 (1536 MB) GTK 2.24/3.24/4.23 + GLIB 2.88 + Pango 1.57 * Ubuntu 26.04 Resolute Raccoon 64 (4096 MB) GTK 2.24/3.24/4.22 + GLIB 2.87 + Pango 1.56 * Ubuntu 25.10 Questing Quokka 64 (4096 MB) GTK 2.24/3.24/4.20 + GLIB 2.86 + Pango 1.56 * Ubuntu 25.04 Plucky Puffin 64 (4096 MB) GTK 2.24/3.24/4.18 + GLIB 2.84 + Pango 1.56 * Ubuntu 24.10 Oracular Oriole 64 (4096 MB) GTK 2.24/3.24/4.16 + GLIB 2.82 + Pango 1.54 * Ubuntu 24.04 Noble Numbat 64 (4096 MB) GTK 2.24/3.24/4.14 + GLIB 2.80 + Pango 1.52 * Ubuntu 23.10 Mantic Minotaur 64 (3072 MB) GTK 2.24/3.24/4.12 + GLIB 2.78 + Pango 1.51 * Ubuntu 23.04 Lunar Lobster 64 (3072 MB) GTK 2.24/3.24/4.10 + GLIB 2.76 + Pango 1.50 * Ubuntu 22.10 Kinetic Kudu 64 (2176 MB) GTK 2.24/3.24/4.8 + GLIB 2.74 + Pango 1.50 * Ubuntu 22.04 Jammy Jellyfish 64 (2176 MB) GTK 2.24/3.24/4.6 + GLIB 2.72 + Pango 1.50 * Ubuntu 21.10 Impish Indri 64 (2176 MB) GTK 2.24/3.24/4.4 + GLIB 2.68 + Pango 1.48 * Ubuntu 21.04 Hirsute Hippo 64 (2176 MB) GTK 2.24/3.24/4.0 + GLIB 2.68 + Pango 1.48 * Ubuntu 17.04 Zesty Zapus 32 (1536 MB) GTK 2.24/3.22 + GLIB 2.52 + Pango 1.40 * Ubuntu 16.10 Yakkety Yak 32 (1536 MB) GTK 2.24/3.20 + GLIB 2.50 + Pango 1.40 * Ubuntu 16.04 Xenial Xerus 32 (1536 MB) GTK 2.24/3.18 + GLIB 2.48 + Pango 1.38 * Ubuntu 15.10 Wily Werewolf 32 (1024 MB) GTK 2.24/3.16 + GLIB 2.46 + Pango 1.36 * Ubuntu 15.04 Vivid Vervet 32 (1024 MB) GTK 2.24/3.14 + GLIB 2.44 + Pango 1.36 * Ubuntu 14.10 Utopic Unicorn 32 (1024 MB) GTK 2.24/3.12 + GLIB 2.42 + Pango 1.36 * Ubuntu 14.04 Trusty Tahr 32 (1024 MB) GTK 2.24/3.10 + GLIB 2.40 + Pango 1.36 * Ubuntu 13.10 Saucy Salamander 32 (1024 MB) GTK 2.24/3.8 + GLIB 2.38 + Pango 1.32 * Ubuntu 13.04 Raring Ringtail 32 (1024 MB) GTK 2.24/3.6 + GLIB 2.36 + Pango 1.32 * Ubuntu 12.04 Precise Pangolin 32 (1024 MB) GTK 2.24/3.4 + GLIB 2.32 + Pango 1.30 * Ubuntu 11.10 Oneiric Ocelot 32 (1024 MB) GTK 2.24/3.2 + GLIB 2.30 + Pango 1.29 * Ubuntu 11.04 Natty Narwhal 32 (1024 MB) GTK 2.24/3.0 + GLIB 2.28 + Pango 1.28 * Windows XP SP3 MinGW/msys (2048 MB) GTK 2.24 + GLIB 2.28 + Pango 1.29 & GTK 3.6 + GLIB 2.34 + Pango 1.30 */ #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wdeprecated-declarations" #include #include #include #include #include #include #include #if defined (G_OS_WIN32) #include #elif defined (G_OS_UNIX) #include #endif #if defined (G_OS_UNIX) && GLIB_CHECK_VERSION (2,30,0) #include #endif #pragma GCC diagnostic pop #define GTK_DIRNAME "gtk-4.0" #define GETTEXT_PACKAGE "awf-gtk4" #define BOXH (gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0)) #define BOXV (gtk_box_new (GTK_ORIENTATION_VERTICAL, 0)) #define SEPH (gtk_separator_new (GTK_ORIENTATION_HORIZONTAL)) #define SEPV (gtk_separator_new (GTK_ORIENTATION_VERTICAL)) #define PANEH (gtk_paned_new (GTK_ORIENTATION_HORIZONTAL)) #define PANEV (gtk_paned_new (GTK_ORIENTATION_VERTICAL)) #define AWF_OPEN "/Test/Open" #define AWF_SAVE "/Test/Save" #define AWF_REFR "/Test/Refresh" #define AWF_RECE "/Test/Recent" #define AWF_CALE "/Test/Calendar" #define AWF_SCAL "/Test/Scales" #define AWF_PROP "/Test/Properties" #define AWF_PRSE "/Test/PrintSetup" #define AWF_PRIN "/Test/Print" #define AWF_MCUT "/Test/More/Cut" #define AWF_MCOP "/Test/More/Copy" #define AWF_MPAS "/Test/More/Paste" #define AWF_CLOS "/Test/Close" #define AWF_QUIT "/Test/Quit" #define AWF_INSP "/Test/Inspector" #define AWF_ABOU "/Test/About" #define AWF_ACCEL_OPEN "O" #define AWF_ACCEL_SAVE "S" #define AWF_ACCEL_REFR "F5" #define AWF_ACCEL_RECE NULL #define AWF_ACCEL_CALE NULL #define AWF_ACCEL_SCAL NULL #define AWF_ACCEL_PROP "Return" #define AWF_ACCEL_PRSE "P" #define AWF_ACCEL_PRIN "P" #define AWF_ACCEL_MCUT "X" #define AWF_ACCEL_MCOP "C" #define AWF_ACCEL_MPAS "V" #define AWF_ACCEL_CLOS "W" #define AWF_ACCEL_QUIT "Q" #define AWF_ACCEL_INSP "F12" #define AWF_ACCEL_ABOU "F1" // @see https://stackoverflow.com/a/10018581/2980105 #define _app(x) dgettext(GETTEXT_PACKAGE, x) #define _gtk(x) dgettext("gtk40", x) // global variables static gboolean awf_debug = FALSE; static gboolean awf_trace = FALSE; static gboolean awf_csd = FALSE; static GHashTable *hash_system_theme = NULL; static GHashTable *hash_user_theme = NULL; static GList *list_system_theme = NULL; static GList *list_user_theme = NULL; static GtkWidget *window = NULL, *toolbar = NULL, *toolbarentry = NULL, *toolbarend = NULL, *statusbar = NULL; static GtkWidget *headbarCloseLeft = NULL, *headbarCloseRight = NULL, *button15 = NULL, *button16 = NULL; static GtkWidget *progress1 = NULL, *progress2 = NULL, *progress3 = NULL, *progress4 = NULL, *progress8 = NULL, *progress9 = NULL; static GtkWidget *scale1 = NULL, *scale2 = NULL, *scale3 = NULL, *scale4 = NULL, *scale5 = NULL, *scale6 = NULL; static GtkWidget *levelbar1 = NULL, *levelbar2 = NULL, *levelbar3 = NULL, *levelbar4 = NULL; static GtkWidget *levelbar5 = NULL, *levelbar6 = NULL, *levelbar7 = NULL, *levelbar8 = NULL; static GtkWidget *notebook1 = NULL, *notebook2 = NULL, *notebook3 = NULL, *notebook4 = NULL; static int current_direction = 0; // GTK_TEXT_DIR_NONE static gchar *current_theme = NULL; static gchar *opt_theme = NULL; static gchar *opt_screenshot = NULL; static gboolean allow_update_values = TRUE; //atic gboolean must_save_accels = FALSE; // @todo // global functions static void awf_load_theme(GHashTable* hashtable, gchar *directory); static inline int awf_compare_theme(gconstpointer a, gconstpointer b); static void notify_updated_gtktheme(GSettings *settings, gchar *key); static void update_text_direction(int direction); static void update_theme(gchar *new_theme); static void update_statusbar(gchar *message); static void update_values(GtkRange *range); static void update_widgets(); static void update_marks(GtkScale *scale, gboolean value, int position); static void display_notification(); static void find_and_update_labels(GtkWidget *widget); static gboolean find_and_check_menuradio(GMenuModel *model, gchar *search); static gboolean on_sighup(void *data); static gboolean take_screenshot(); static void create_window(gpointer app); static void create_widgets(GtkWidget *root); static void add_to(GtkWidget *root, GtkWidget *widget, gboolean expand, gboolean fill, guint padding, guint spacing); static void add_progressbar_and_entrybar(); static void create_toolbar(GtkWidget *root); static void create_combos_entries(GtkWidget *root); static void create_spinbuttons(GtkWidget *root); static void create_checkbuttons(GtkWidget *root); static void create_radiobuttons(GtkWidget *root); static void create_otherbuttons(GtkWidget *root1, GtkWidget *root2, GtkWidget *root3, GtkWidget *root4, GtkWidget *root5); static void create_progressbars(GtkWidget *root1, GtkWidget *root2, GtkWidget *root3, GtkWidget *root4); static void create_labels(GtkWidget *root); static void create_spinners(GtkWidget *root); static void create_expander(GtkWidget *root); static void create_frames(GtkWidget *root1, GtkWidget *root2); static void create_notebooks(GtkWidget *root1, GtkWidget *root2); static void create_notebook_tab(GtkWidget *notebook, gchar *text, GtkWidget *content, gboolean close); static void create_treview(GtkWidget *root); static void create_scales(GtkWidget *notebook, gchar *text, int position); static GtkWidget* create_horizontal_scale(gdouble value, gboolean draw, gboolean inverted, int position); static GtkWidget* create_vertical_scale(gdouble value, gboolean draw, gboolean inverted, int position); static void create_traditional_menubar(GtkApplication *app, GMenu *root); static void create_menuitem_radio(GMenu *menu, gchar *text, gboolean free1, gchar *group, gboolean free2); static void create_menuitem(GtkApplication *app, GMenu *menu, gchar *text, gchar *acl, gchar *kmp, gchar *icon, GCallback function); static void activate_action(GSimpleAction *action, GVariant *parameter, gpointer data); static void accels_load(GtkApplication *app); static void accels_change(GtkEventControllerKey *controller, guint keyval, guint keycode, GdkModifierType state); static void accels_save(); static void dialog_open(); static void dialog_save(); static void dialog_message(); static void dialog_page_setup(); static void dialog_print(); static void dialog_about(); static void dialog_inspector(); static void dialog_calendar(); static void dialog_scales(); static gboolean on_scrolltabs(GtkEventControllerScroll *event, double dx, double dy, GtkWidget *widget); // run run run int main(int argc, gchar **argv) { awf_debug = (g_getenv("AWF_DEBUG") != NULL); awf_trace = (g_getenv("AWF_TRACE") != NULL); const gchar *config = g_getenv("GTK_CSD"); if (config && (strcmp(config, "1") == 0)) awf_csd = TRUE; if (awf_trace) g_printf("» main()\n"); current_theme = g_strdup("auto"); opt_theme = g_strdup("auto"); int opt = 0, status = 0; hash_system_theme = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free); hash_user_theme = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free); GList *iterator = NULL; gchar *directory; // load available system themes (/usr/local/share/themes && /usr/share/themes) const char *const *dirs = g_get_system_data_dirs(); for (opt = 0; dirs[opt]; opt++) { directory = g_build_filename(dirs[opt], "themes", NULL); awf_load_theme(hash_system_theme, directory); g_free(directory); } g_hash_table_replace(hash_system_theme, g_strdup("Adwaita"), g_strdup("Adwaita")); // bolos g_hash_table_remove(hash_system_theme, "Default"); g_hash_table_remove(hash_system_theme, "Emacs"); list_system_theme = g_list_sort(g_hash_table_get_keys(hash_system_theme), (GCompareFunc) awf_compare_theme); // load available user themes (HOME/.local/share/themes && HOME/.themes) directory = g_build_filename(g_get_user_data_dir(), "themes", NULL); awf_load_theme(hash_user_theme, directory); g_free(directory); directory = g_build_filename(g_get_home_dir(), ".themes", NULL); awf_load_theme(hash_user_theme, directory); g_free(directory); list_user_theme = g_list_sort(g_hash_table_get_keys(hash_user_theme), (GCompareFunc) awf_compare_theme); // locale setlocale(LC_ALL, ""); #if defined (G_OS_WIN32) directory = g_build_filename("share", "locale", NULL); bindtextdomain(GETTEXT_PACKAGE, directory); g_free(directory); #endif bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8"); textdomain(GETTEXT_PACKAGE); // init static struct option options[] = { {"help", no_argument, NULL, 'x'}, {"version", no_argument, NULL, 'v'}, {"list-themes", no_argument, NULL, 'l'}, {"theme", required_argument, NULL, 't'}, {"screenshot", required_argument, NULL, 's'}, {"ltr", no_argument, NULL, 'y'}, {"rtl", no_argument, NULL, 'z'}, {NULL, 0, NULL, 0} }; gchar *c_version, *t1, *t2, *t3, *t4; while ((opt = getopt_long(argc, argv, "hvlt:s:xyz", options, NULL)) != -1) { switch (opt) { // --version -v case 'v': g_printf("%s\n", VERSION); return status; // --list-themes -l case 'l': for (iterator = list_system_theme; iterator; iterator = iterator->next) g_printf("%s\n", (gchar*) iterator->data); for (iterator = list_user_theme; iterator; iterator = iterator->next) g_printf("%s\n", (gchar*) iterator->data); return status; // --theme -t case 't': if (g_hash_table_lookup(hash_system_theme, optarg) || g_hash_table_lookup(hash_user_theme, optarg)) { g_free(opt_theme); opt_theme = g_strdup(optarg); } break; // --screenshot -s case 's': opt_screenshot = g_strdup(optarg); break; // --ltr case 'y': current_direction = 1; // GTK_TEXT_DIR_LTR break; // --rtl case 'z': current_direction = 2; // GTK_TEXT_DIR_RTL break; // --help (via GtkApplication) -h // --help/x supported by GTK 4.x case 'x': case 'h': default: if (opt == 'x') break; #ifdef __STDC_VERSION__ if (__STDC_VERSION__ >= 202311L) c_version = "C23"; else if (__STDC_VERSION__ >= 201710L) c_version = "C17"; else if (__STDC_VERSION__ >= 201112L) c_version = "C11"; else if (__STDC_VERSION__ >= 199901L) c_version = "C99"; else if (__STDC_VERSION__ >= 199409L) c_version = "C95"; else c_version = "C (unknown)"; #else c_version = "C89/C90"; #endif g_printf("%s\n\n %s %s\n %s %s\n %s %s\n %s %s\n %s %s\n %s %s\n\n%s\n%s\n", t1 = g_strdup_printf(_app("A widget factory - GTK %d.%d"), GTK_MAJOR_VERSION, GTK_MINOR_VERSION), "-v ", _app("Show version number."), "-l ", _app("List available themes."), "-t ", _app("Run with the specified theme."), "-s ", t2 = g_strdup_printf(_app("Run and save a png screenshot on %s."), "SIGHUP"), "--ltr ", _app("Run with text from left to right (Left-To-Right)."), "--rtl ", _app("Run with text from right to left (Right-To-Left)."), t3 = g_strdup_printf(_app("compiled in %s with gtk %d.%d.%d and glib %d.%d.%d and pango %s"), c_version, GTK_MAJOR_VERSION, GTK_MINOR_VERSION, GTK_MICRO_VERSION, GLIB_MAJOR_VERSION, GLIB_MINOR_VERSION, GLIB_MICRO_VERSION, PANGO_VERSION_STRING), t4 = g_strdup_printf(_app(" started with gtk %d.%d.%d and glib %d.%d.%d and pango %s"), gtk_get_major_version(), gtk_get_minor_version(), gtk_get_micro_version(), glib_major_version, glib_minor_version, glib_micro_version, pango_version_string()) ); g_free(t1); g_free(t2); g_free(t3); g_free(t4); return status; } } // create and show window #if defined (G_OS_WIN32) g_setenv("GSETTINGS_SCHEMA_DIR", ".", TRUE); #endif GtkApplication *app = gtk_application_new("org.gtk.awf", G_APPLICATION_NON_UNIQUE); g_signal_connect(app, "activate", G_CALLBACK(create_window), NULL); // --version -v g_application_add_main_option(G_APPLICATION(app), "version", 'v', G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_NONE, _app("Show version number."), NULL); // --list-themes -l g_application_add_main_option(G_APPLICATION(app), "list-themes", 'l', G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_NONE, _app("List available themes."), NULL); // --theme -t g_application_add_main_option(G_APPLICATION(app), "theme", 't', G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_STRING, _app("Run with the specified theme."), ""); // --screenshot -s gchar *text = g_strdup_printf(_app("Run and save a png screenshot on %s."), "SIGHUP"); g_application_add_main_option(G_APPLICATION(app), "screenshot", 's', G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_STRING, text, ""); g_free(text); // --ltr g_application_add_main_option(G_APPLICATION(app), "ltr", 'y', G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_NONE, _app("Run with text from left to right (Left-To-Right)."), NULL); // --rtl g_application_add_main_option(G_APPLICATION(app), "rtl", 'z', G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_NONE, _app("Run with text from right to left (Right-To-Left)."), NULL); g_application_register(G_APPLICATION(app), NULL, NULL); status = g_application_run(G_APPLICATION(app), argc, argv); g_object_unref(app); return status; } static void quit() { if (awf_trace) g_printf("» quit()\n"); g_list_free(list_system_theme); g_list_free(list_user_theme); list_system_theme = NULL; list_user_theme = NULL; g_hash_table_destroy(hash_system_theme); g_hash_table_destroy(hash_user_theme); hash_system_theme = NULL; hash_user_theme = NULL; accels_save(); g_application_quit(g_application_get_default()); } static void awf_load_theme(GHashTable* hashtable, gchar *directory) { if (awf_trace) g_printf("» awf_load_theme(%s)\n", directory); if (g_file_test(directory, G_FILE_TEST_IS_DIR)) { if (awf_debug) g_printf("themes_dir: %s\n", directory); GDir *dir = g_dir_open(directory, 0, NULL); if (dir) { const gchar *theme; while ((theme = g_dir_read_name(dir)) != NULL) { gchar *theme_path = g_build_filename(directory, theme, GTK_DIRNAME, NULL); if (g_file_test(theme_path, G_FILE_TEST_IS_DIR)) g_hash_table_replace(hashtable, g_strdup(theme), g_strdup(theme)); g_free(theme_path); } g_dir_close(dir); } } } static inline int awf_compare_theme(gconstpointer a, gconstpointer b) { return g_ascii_strcasecmp((gchar*) a, (gchar*) b); //g_strcmp0((gchar*) a, (gchar*) b); } static void notify_updated_gtktheme(GSettings *settings, gchar *key) { // ok if (awf_trace) g_printf("» notify_updated_gtktheme(%s)\n", key); if (g_strcmp0("gtk-theme", key) == 0) { gchar *new_theme = g_settings_get_string(settings, key); if (awf_debug) g_printf("SIGNAL_theme_update: %s\n", new_theme); find_and_check_menuradio(gtk_application_get_menubar(GTK_APPLICATION(g_application_get_default())), new_theme); g_free(new_theme); } else if (headbarCloseLeft && headbarCloseRight) { gboolean closeLeft = FALSE, closeRight = FALSE; // minimize, maximize, close, icon, menu gchar *tokens = g_settings_get_string(settings, key); if (tokens) { if (g_str_has_prefix(tokens, "icon") || g_str_has_prefix(tokens, "menu")) closeLeft = TRUE; else if (g_str_has_suffix(tokens, "icon") || g_str_has_suffix(tokens, "menu")) closeRight = TRUE; if (awf_debug) g_printf("headerbar_tokens: %s %d %d\n", tokens, closeLeft, closeRight); g_free(tokens); } gtk_widget_set_visible(headbarCloseLeft, closeLeft); gtk_widget_set_visible(headbarCloseRight, closeRight); } } static void update_text_direction(int direction) { // ok if (awf_trace) g_printf("» update_text_direction()\n"); if ((direction == 1) && (gtk_widget_get_direction(window) != GTK_TEXT_DIR_LTR)) { gboolean toggle = gtk_notebook_get_scrollable(GTK_NOTEBOOK(notebook1)); current_direction = 1; gtk_widget_set_default_direction(current_direction); gtk_scale_clear_marks(GTK_SCALE(scale5)); update_marks(GTK_SCALE(scale5), toggle, GTK_POS_LEFT); gtk_scale_clear_marks(GTK_SCALE(scale6)); update_marks(GTK_SCALE(scale6), toggle, GTK_POS_RIGHT); } else if ((direction == 2) && (gtk_widget_get_direction(window) != GTK_TEXT_DIR_RTL)) { gboolean toggle = gtk_notebook_get_scrollable(GTK_NOTEBOOK(notebook1)); gtk_scale_clear_marks(GTK_SCALE(scale5)); update_marks(GTK_SCALE(scale5), toggle, GTK_POS_RIGHT); gtk_scale_clear_marks(GTK_SCALE(scale6)); update_marks(GTK_SCALE(scale6), toggle, GTK_POS_LEFT); current_direction = 2; gtk_widget_set_default_direction(current_direction); } } static void update_theme(gchar *new_theme) { // ok if (!new_theme) return; if (awf_trace) g_printf("» update_theme(%s)\n", new_theme); if (awf_debug) g_printf("update_theme_before: %s » %s\n", current_theme, new_theme); if (strcmp(new_theme, "refresh") == 0) { g_object_set(gtk_settings_get_default(), "gtk-theme-name", "Default", NULL); g_usleep(G_USEC_PER_SEC / 2); g_object_set(gtk_settings_get_default(), "gtk-theme-name", current_theme, NULL); gtk_window_set_default_size(GTK_WINDOW(window), 50, 50); if (opt_screenshot) { if (take_screenshot()) { gchar *text = g_strdup_printf(_app("Theme %s reloaded, then screenshot saved (%s)."), current_theme, opt_screenshot); update_statusbar(text); g_free(text); } else { gchar *text = g_strdup_printf(_app("Theme %s reloaded (error saving screenshot)."), current_theme); update_statusbar(text); g_free(text); } } else { gchar *text = g_strdup_printf(_app("Theme %s reloaded."), current_theme); update_statusbar(text); g_free(text); } if (awf_debug) g_printf("update_theme_after1: %s\n", current_theme); } else if (strcmp(new_theme, "auto") == 0) { g_free(current_theme); g_object_get(gtk_settings_get_default(), "gtk-theme-name", ¤t_theme, NULL); gtk_window_set_default_size(GTK_WINDOW(window), 50, 50); if (awf_debug) g_printf("update_theme_after2: %s\n", current_theme); } else if (strcmp(new_theme, current_theme) != 0) { g_free(current_theme); g_object_set(gtk_settings_get_default(), "gtk-theme-name", new_theme, NULL); // @todo? useless for notify_updated_gtktheme g_object_get(gtk_settings_get_default(), "gtk-theme-name", ¤t_theme, NULL); while (g_main_context_pending(NULL)) g_main_context_iteration(NULL, FALSE); gtk_window_set_default_size(GTK_WINDOW(window), 50, 50); gchar *text = g_strdup_printf(_app("Theme %s loaded."), current_theme); update_statusbar(text); g_free(text); if (awf_debug) g_printf("update_theme_after3: %s\n", current_theme); } } static void update_statusbar(gchar *message) { // ok if (awf_trace) g_printf("» update_statusbar(%s)\n", message); if (window && statusbar) { GDateTime *now = g_date_time_new_now_local(); gchar *buffer = g_date_time_format(now, "%H:%M:%S"); g_date_time_unref(now); gchar *text = g_strdup_printf("%s - %s", buffer, message); G_GNUC_BEGIN_IGNORE_DEPRECATIONS // GTK 4.10+ guint ctid = gtk_statusbar_get_context_id(GTK_STATUSBAR(statusbar), "gné"); gtk_statusbar_remove_all(GTK_STATUSBAR(statusbar), ctid); gtk_statusbar_push(GTK_STATUSBAR(statusbar), ctid, text); G_GNUC_END_IGNORE_DEPRECATIONS g_free(text); g_free(buffer); gtk_widget_remove_css_class(statusbar, "flash"); gtk_widget_queue_draw(statusbar); while (g_main_context_pending(NULL)) g_main_context_iteration(NULL, FALSE); gtk_widget_add_css_class(statusbar, "flash"); } } static void update_values(GtkRange *range) { // ok if (allow_update_values) { allow_update_values = FALSE; double value = gtk_range_get_value(range); //if (awf_trace) // g_printf("» update_values(%f)*\n", value); // range(0..1) gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress1), value / 100.0); gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress2), value / 100.0); gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress3), value / 100.0); gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress4), value / 100.0); gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress8), value / 100.0); gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress9), value / 100.0); // range(0..1) gtk_level_bar_set_value(GTK_LEVEL_BAR(levelbar1), value / 100.0); gtk_level_bar_set_value(GTK_LEVEL_BAR(levelbar2), value / 100.0); gtk_level_bar_set_value(GTK_LEVEL_BAR(levelbar5), value / 100.0); gtk_level_bar_set_value(GTK_LEVEL_BAR(levelbar6), value / 100.0); // range(0..5) gtk_level_bar_set_value(GTK_LEVEL_BAR(levelbar3), value / 100.0 * gtk_level_bar_get_max_value(GTK_LEVEL_BAR(levelbar3))); gtk_level_bar_set_value(GTK_LEVEL_BAR(levelbar4), value / 100.0 * gtk_level_bar_get_max_value(GTK_LEVEL_BAR(levelbar4))); gtk_level_bar_set_value(GTK_LEVEL_BAR(levelbar7), value / 100.0 * gtk_level_bar_get_max_value(GTK_LEVEL_BAR(levelbar7))); gtk_level_bar_set_value(GTK_LEVEL_BAR(levelbar8), value / 100.0 * gtk_level_bar_get_max_value(GTK_LEVEL_BAR(levelbar8))); // range(0..1) gtk_scale_button_set_value(GTK_SCALE_BUTTON(button15), value / 100.0); // range(0..100) if (scale1 != (GtkWidget*) range) gtk_range_set_value(GTK_RANGE(scale1), value); if (scale2 != (GtkWidget*) range) gtk_range_set_value(GTK_RANGE(scale2), value); if (scale3 != (GtkWidget*) range) gtk_range_set_value(GTK_RANGE(scale3), value); if (scale4 != (GtkWidget*) range) gtk_range_set_value(GTK_RANGE(scale4), value); if (scale5 != (GtkWidget*) range) gtk_range_set_value(GTK_RANGE(scale5), value); if (scale6 != (GtkWidget*) range) gtk_range_set_value(GTK_RANGE(scale6), value); // text gtk_progress_bar_set_show_text(GTK_PROGRESS_BAR(progress8), value > 50); gtk_progress_bar_set_show_text(GTK_PROGRESS_BAR(progress9), value > 50); allow_update_values = TRUE; } } static void update_widgets() { // ok if (awf_trace) g_printf("» update_widgets()\n"); // function called when user click on [+] toolbar button // when toggle = true, the [+] toolbar button is NOT checked gboolean toggle = gtk_notebook_get_scrollable(GTK_NOTEBOOK(notebook1)); // via add_progressbar_and_entrybar // show progressbar in toolbar and statusbar when [+] toolbar button is NOT checked if (toggle) { gtk_widget_set_visible(progress8, FALSE); gtk_widget_set_visible(progress9, FALSE); gtk_widget_set_visible(toolbarentry, FALSE); } else { gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress8), 0.0); gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress9), 0.0); gtk_widget_set_visible(progress8, TRUE); gtk_widget_set_visible(progress9, TRUE); gtk_widget_set_visible(toolbarentry, TRUE); } // enabled or not gtk_widget_set_sensitive(scale2, toggle); gtk_widget_set_sensitive(scale4, toggle); gtk_widget_set_sensitive(scale6, toggle); gtk_widget_set_sensitive(progress2, toggle); gtk_widget_set_sensitive(progress4, toggle); gtk_widget_set_sensitive(levelbar2, toggle); gtk_widget_set_sensitive(levelbar4, toggle); gtk_widget_set_sensitive(levelbar6, toggle); gtk_widget_set_sensitive(levelbar8, toggle); // text or not gtk_progress_bar_set_show_text(GTK_PROGRESS_BAR(progress1), !toggle); gtk_progress_bar_set_show_text(GTK_PROGRESS_BAR(progress2), !toggle); gtk_progress_bar_set_show_text(GTK_PROGRESS_BAR(progress3), !toggle); gtk_progress_bar_set_show_text(GTK_PROGRESS_BAR(progress4), !toggle); gtk_progress_bar_set_show_text(GTK_PROGRESS_BAR(progress8), FALSE); gtk_progress_bar_set_show_text(GTK_PROGRESS_BAR(progress9), FALSE); // marks gtk_scale_clear_marks(GTK_SCALE(scale5)); update_marks(GTK_SCALE(scale5), !toggle, GTK_POS_LEFT); gtk_scale_clear_marks(GTK_SCALE(scale6)); update_marks(GTK_SCALE(scale6), !toggle, GTK_POS_RIGHT); // scrollable or not gtk_notebook_set_scrollable(GTK_NOTEBOOK(notebook1), !toggle); gtk_notebook_set_scrollable(GTK_NOTEBOOK(notebook2), !toggle); gtk_notebook_set_scrollable(GTK_NOTEBOOK(notebook3), !toggle); gtk_notebook_set_scrollable(GTK_NOTEBOOK(notebook4), !toggle); gtk_window_set_default_size(GTK_WINDOW(window), 50, 50); } static void update_marks(GtkScale *scale, gboolean value, int position) { if (awf_trace) g_printf("» update_marks(%d)\n", position); if (value) { gtk_scale_add_mark(scale, 0, position, NULL); gtk_scale_add_mark(scale, 25, position, "25"); gtk_scale_add_mark(scale, 50, position, "50"); gtk_scale_add_mark(scale, 75, position, "75"); gtk_scale_add_mark(scale, 100, position, NULL); } else { gtk_scale_add_mark(scale, 0, position, NULL); gtk_scale_add_mark(scale, 25, position, NULL); gtk_scale_add_mark(scale, 50, position, NULL); gtk_scale_add_mark(scale, 75, position, NULL); gtk_scale_add_mark(scale, 100, position, NULL); } } static void display_notification() { // ok if (awf_trace) g_printf("» display_notification()\n"); #if defined (G_OS_UNIX) if (notify_init(GETTEXT_PACKAGE)) { // Ubuntu 11.04 with libnotify-dev 0.5.x, so you must use libnotify-dev 0.7.x from Ubuntu 11.10 NotifyNotification *notif = notify_notification_new(GETTEXT_PACKAGE, _app("A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme."), "dialog-information"); notify_notification_add_action(notif, "nothing", _gtk("Close"), NOTIFY_ACTION_CALLBACK(notify_uninit), NULL, NULL); notify_notification_add_action(notif, "close", _gtk("Close"), NOTIFY_ACTION_CALLBACK(notify_uninit), NULL, NULL); notify_notification_set_timeout(notif, 50000); notify_notification_show(notif, NULL); g_object_unref(G_OBJECT(notif)); notify_uninit(); } #endif } static void find_and_update_labels(GtkWidget *widget) { // whynot if (GTK_IS_LABEL(widget)) { gtk_label_set_ellipsize(GTK_LABEL(widget), PANGO_ELLIPSIZE_END); } else if (GTK_IS_WIDGET(widget)) { GtkWidget *child = gtk_widget_get_first_child(widget); while (child) { find_and_update_labels(child); child = gtk_widget_get_next_sibling(child); } } } static gboolean find_and_check_menuradio(GMenuModel *model, gchar *search) { // whynot if (awf_trace) g_printf("» find_and_check_menuradio(%s)\n", search); int n = g_menu_model_get_n_items(model); const gchar *value = NULL; GVariant *info; for (int idx = 0; idx < n; idx++) { GMenuModel *submenu = g_menu_model_get_item_link(model, idx, G_MENU_LINK_SECTION); if (!submenu) submenu = g_menu_model_get_item_link(model, idx, G_MENU_LINK_SUBMENU); if (submenu) { // process submenu gboolean found = find_and_check_menuradio(submenu, search); g_object_unref(submenu); if (found) return TRUE; } else { // app.set-theme::theme_name(.[action]::[target]) // check menuitem by label/target info = g_menu_model_get_item_attribute_value(model, idx, "target", NULL); // target or label = theme_name if (info) { value = g_variant_get_string(info, NULL); g_variant_unref(info); if (value && (g_strcmp0(value, search) == 0)) { // menuitem found by label/target // check menuitem by action info = g_menu_model_get_item_attribute_value(model, idx, "action", NULL); // action = disabled or set-theme if (info) { value = g_variant_get_string(info, NULL); g_variant_unref(info); if (value && (g_strcmp0(value, "disabled") != 0)) { // menuitem found by label/target + action not disabled g_action_group_activate_action(G_ACTION_GROUP(g_application_get_default()), "set-theme", g_variant_new_string(search)); // set state checked and activate action return TRUE; } } } } } } return FALSE; } static gboolean on_sighup(void *data) { // ok if (awf_trace) g_printf("» on_sighup()\n"); update_theme("refresh"); #if defined (G_SOURCE_CONTINUE) return G_SOURCE_CONTINUE; #else return TRUE; // glib < 2.32 #endif } static gboolean take_screenshot() { // ok (without window borders) if (awf_trace) g_printf("» take_screenshot()\n"); GdkPaintable *paintable = gtk_widget_paintable_new(window); int width = gdk_paintable_get_intrinsic_width(paintable); int height = gdk_paintable_get_intrinsic_height(paintable); GtkSnapshot *snapshot = gtk_snapshot_new(); gdk_paintable_snapshot(paintable, snapshot, width, height); GskRenderNode *node = gtk_snapshot_free_to_node(snapshot); gboolean result = FALSE; if (node) { cairo_surface_t *surface = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, width, height); cairo_t *cr = cairo_create(surface); gsk_render_node_draw(node, cr); G_GNUC_BEGIN_IGNORE_DEPRECATIONS // GTK 4.12+ GdkPixbuf *image = gdk_pixbuf_get_from_surface(surface, 0, 0, width, height); G_GNUC_END_IGNORE_DEPRECATIONS if (image) { result = gdk_pixbuf_save(image, opt_screenshot, "png", NULL, "compression", "9", NULL); g_object_unref(image); } cairo_destroy(cr); cairo_surface_destroy(surface); gsk_render_node_unref(node); } g_object_unref(paintable); return result; } // layout and widgets static void create_window(gpointer app) { if (awf_trace) g_printf("» create_window()\n"); if (window) { gtk_window_present(GTK_WINDOW(window)); return; } GtkWidget *vbox_window, *widgets; gboolean closeLeft = FALSE, closeRight = FALSE; gchar *text, *value; // window window = gtk_application_window_new(GTK_APPLICATION(app)); gtk_widget_set_name(GTK_WIDGET(window), "AwfMainWindow"); gtk_window_set_icon_name(GTK_WINDOW(window), GETTEXT_PACKAGE); text = g_strdup_printf(_app("A widget factory - GTK %d.%d"), GTK_MAJOR_VERSION, GTK_MINOR_VERSION); gtk_window_set_title(GTK_WINDOW(window), text); g_free(text); // theme auto or from command line if (strcmp(current_theme, opt_theme) != 0) update_theme(opt_theme); else update_theme(current_theme); if (current_direction == 0) current_direction = (gtk_widget_get_default_direction() == GTK_TEXT_DIR_LTR) ? 1 : 2; // layout vbox_window = BOXV; gtk_window_set_child(GTK_WINDOW(window), vbox_window); GMenu *gmm = g_menu_new(); create_traditional_menubar(app, gmm); gtk_application_set_menubar(app, G_MENU_MODEL(gmm)); gtk_application_window_set_show_menubar(GTK_APPLICATION_WINDOW(window), TRUE); if (awf_csd) { // enable CSD for dialogs // except for custom dialogs g_object_set(gtk_settings_get_default(), "gtk-dialogs-use-header", TRUE, NULL); gtk_window_set_decorated(GTK_WINDOW(window), TRUE); GtkWidget *button; GtkWidget *headerbar = gtk_header_bar_new(); gtk_header_bar_set_show_title_buttons(GTK_HEADER_BAR(headerbar), TRUE); gchar *tokens; // minimize, maximize, close, icon, menu g_object_get(gtk_widget_get_settings(headerbar), "gtk-decoration-layout", &tokens, NULL); if (g_str_has_prefix(tokens, "icon") || g_str_has_prefix(tokens, "menu")) closeLeft = TRUE; else if (g_str_has_suffix(tokens, "icon") || g_str_has_suffix(tokens, "menu")) closeRight = TRUE; if (awf_debug) g_printf("headerbar_tokens: %s %d %d\n", tokens, closeLeft, closeRight); g_free(tokens); // left headbarCloseLeft = gtk_image_new_from_icon_name(GETTEXT_PACKAGE); gtk_widget_add_css_class(headbarCloseLeft, "app-icon"); gtk_widget_set_visible(headbarCloseLeft, closeLeft); gtk_header_bar_pack_start(GTK_HEADER_BAR(headerbar), headbarCloseLeft); button = gtk_menu_button_new(); gtk_menu_button_set_menu_model(GTK_MENU_BUTTON(button), G_MENU_MODEL(gmm)); gtk_menu_button_set_icon_name(GTK_MENU_BUTTON(button), "open-menu-symbolic"); gtk_header_bar_pack_start(GTK_HEADER_BAR(headerbar), button); button = gtk_toggle_button_new_with_label("Btn1"); gtk_header_bar_pack_start(GTK_HEADER_BAR(headerbar), button); button = gtk_toggle_button_new_with_label("Btn2"); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE); gtk_header_bar_pack_start(GTK_HEADER_BAR(headerbar), button); button = gtk_toggle_button_new_with_label("Btn3"); gtk_header_bar_pack_start(GTK_HEADER_BAR(headerbar), button); // right headbarCloseRight = gtk_image_new_from_icon_name(GETTEXT_PACKAGE); gtk_widget_add_css_class(headbarCloseRight, "app-icon"); gtk_widget_set_visible(headbarCloseRight, closeRight); gtk_header_bar_pack_end(GTK_HEADER_BAR(headerbar), headbarCloseRight); button = gtk_menu_button_new(); gtk_menu_button_set_menu_model(GTK_MENU_BUTTON(button), G_MENU_MODEL(gmm)); gtk_menu_button_set_icon_name(GTK_MENU_BUTTON(button), "open-menu-symbolic"); gtk_header_bar_pack_end(GTK_HEADER_BAR(headerbar), button); button = gtk_toggle_button_new_with_label("Btn6"); gtk_header_bar_pack_end(GTK_HEADER_BAR(headerbar), button); button = gtk_toggle_button_new_with_label("Btn5"); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE); gtk_header_bar_pack_end(GTK_HEADER_BAR(headerbar), button); button = gtk_toggle_button_new_with_label("Btn4"); gtk_header_bar_pack_end(GTK_HEADER_BAR(headerbar), button); gtk_window_set_titlebar(GTK_WINDOW(window), headerbar); } g_object_unref(gmm); toolbar = BOXH; gtk_widget_add_css_class(toolbar, "primary-toolbar"); create_toolbar(toolbar); //add_to(vbox_window, toolbar, FALSE, FALSE, 0, 0); gtk_box_append(GTK_BOX(vbox_window), toolbar); widgets = BOXV; add_to(vbox_window, widgets, TRUE, TRUE, 0, 0); create_widgets(widgets); G_GNUC_BEGIN_IGNORE_DEPRECATIONS // GTK 4.10+ statusbar = gtk_statusbar_new(); GtkCssProvider *provider = gtk_css_provider_new(); gtk_css_provider_load_from_data(provider, "@keyframes statusbarflash {" " 0% { background-color: yellow; }" " 100% { background-color: transparent; }" "}" "#AwfMainWindow statusbar.flash {" " animation: statusbarflash 1s ease-out forwards;" "}" , -1); gtk_style_context_add_provider_for_display(gdk_display_get_default(), GTK_STYLE_PROVIDER(provider), GTK_STYLE_PROVIDER_PRIORITY_FALLBACK); G_GNUC_END_IGNORE_DEPRECATIONS // via add_progressbar_and_entrybar // for the progressbar of the statusbar, before adding statusbar gtk_widget_set_halign(gtk_widget_get_first_child(statusbar), GTK_ALIGN_FILL); // statusbar > box gtk_widget_set_hexpand(gtk_widget_get_first_child(statusbar), TRUE); // statusbar > box gtk_widget_set_hexpand(gtk_widget_get_first_child(gtk_widget_get_first_child(statusbar)), TRUE); // statusbar > box > label add_to(vbox_window, statusbar, FALSE, FALSE, 0, 0); text = g_strdup_printf(_app("Theme %s loaded."), current_theme); update_statusbar(text); g_free(text); // go go go update_text_direction(current_direction); g_signal_connect(window, "destroy", G_CALLBACK(quit), NULL); #if defined (G_OS_UNIX) && GLIB_CHECK_VERSION (2,30,0) g_unix_signal_add(SIGHUP, on_sighup, NULL); #endif #if defined (G_OS_UNIX) && GLIB_CHECK_VERSION (2,32,0) if (g_settings_schema_source_lookup(g_settings_schema_source_get_default(), value = "org.gnome.desktop.interface", FALSE)) g_signal_connect(g_settings_new(value), "changed::gtk-theme", G_CALLBACK(notify_updated_gtktheme), NULL); if (g_settings_schema_source_lookup(g_settings_schema_source_get_default(), value = "org.mate.interface", FALSE)) g_signal_connect(g_settings_new(value), "changed::gtk-theme", G_CALLBACK(notify_updated_gtktheme), NULL); if (g_settings_schema_source_lookup(g_settings_schema_source_get_default(), value = "org.gnome.desktop.wm.preferences", FALSE)) g_signal_connect(g_settings_new(value), "changed::button-layout", G_CALLBACK(notify_updated_gtktheme), NULL); if (g_settings_schema_source_lookup(g_settings_schema_source_get_default(), value = "org.cinnamon.desktop.wm.preferences", FALSE)) g_signal_connect(g_settings_new(value), "changed::button-layout", G_CALLBACK(notify_updated_gtktheme), NULL); if (g_settings_schema_source_lookup(g_settings_schema_source_get_default(), value = "org.mate.Marco.general", FALSE)) g_signal_connect(g_settings_new(value), "changed::button-layout", G_CALLBACK(notify_updated_gtktheme), NULL); if (g_settings_schema_source_lookup(g_settings_schema_source_get_default(), value = "org.mate.interface", FALSE)) g_signal_connect(g_settings_new(value), "changed::gtk-decoration-layout", G_CALLBACK(notify_updated_gtktheme), NULL); #endif // gtk-can-change-accels for GTK 4.x | so same GTK 2.24 3.x 4.x & Qt 5.x 6.x accels_load(app); //GtkEventController *event = gtk_event_controller_key_new(); //g_signal_connect(event, "key-released", G_CALLBACK(accels_change), window); //gtk_widget_add_controller(window, event); gtk_window_present(GTK_WINDOW(window)); if (headbarCloseLeft && headbarCloseRight) { // @todo not working here gtk_widget_set_visible(headbarCloseLeft, closeLeft); gtk_widget_set_visible(headbarCloseRight, closeRight); } add_progressbar_and_entrybar(); } static void create_widgets(GtkWidget *root) { // ok if (awf_trace) g_printf("» create_widgets()\n"); GtkWidget *hbox_columns = BOXH; GtkWidget *vbox_column1 = BOXV, *vbox_combo_entry = BOXV, *hbox_spin = BOXH, *hbox_check_radio = BOXH, *vbox_check = BOXV, *vbox_radio = BOXV; GtkWidget *vbox_column2 = BOXV, *vbox_buttons = BOXV, *hbox_btns1 = BOXH, *hbox_btns2 = BOXH, *hbox_btns3 = BOXH, *hbox_btns4 = BOXH; GtkWidget *vbox_column3 = BOXV, *vbox_progress1 = BOXV, *vbox_progress2 = BOXV, *hbox_progress1 = BOXH, *hbox_progress2 = BOXH; GtkWidget *vbox_column4 = BOXV, *vbox_others = BOXV, *hbox_label = BOXH, *hbox_spinner = BOXH; GtkWidget *vpane = PANEV, *hpane1 = PANEH, *hpane2 = PANEH; GtkWidget *hbox_frame1 = BOXH, *hbox_frame2 = BOXH, *hbox_notebook1 = BOXH, *hbox_notebook2 = BOXH; // columns layout add_to(root, hbox_columns, TRUE, TRUE, 0, 0); // column 1 add_to(hbox_columns, vbox_column1, TRUE, TRUE, 5, 0); add_to(vbox_column1, vbox_combo_entry, FALSE, TRUE, 5, 3); create_combos_entries(vbox_combo_entry); add_to(vbox_column1, hbox_spin, FALSE, FALSE, 5, 0); create_spinbuttons(hbox_spin); add_to(vbox_column1, hbox_check_radio, FALSE, TRUE, 5, 0); add_to(hbox_check_radio, vbox_check, TRUE, TRUE, 0, 0); create_checkbuttons(vbox_check); add_to(hbox_check_radio, vbox_radio, TRUE, TRUE, 0, 0); create_radiobuttons(vbox_radio); add_to(hbox_columns, SEPV, FALSE, FALSE, 0, 0); // column 2 add_to(hbox_columns, vbox_column2, TRUE, TRUE, 5, 0); add_to(vbox_column2, vbox_buttons, FALSE, TRUE, 5, 3); add_to(vbox_column2, hbox_btns1, FALSE, FALSE, 5, 3); add_to(vbox_column2, hbox_btns2, FALSE, FALSE, 5, 3); add_to(vbox_column2, hbox_btns3, FALSE, FALSE, 5, 3); add_to(vbox_column2, hbox_btns4, FALSE, FALSE, 5, 3); create_otherbuttons(vbox_buttons, hbox_btns1, hbox_btns2, hbox_btns3, hbox_btns4); add_to(hbox_columns, SEPV, FALSE, FALSE, 0, 0); // column 3 add_to(hbox_columns, vbox_column3, TRUE, TRUE, 5, 0); add_to(vbox_column3, vbox_progress1, FALSE, TRUE, 6, 10); add_to(vbox_column3, hbox_progress1, FALSE, FALSE, 5, 10); add_to(vbox_column3, hbox_progress2, FALSE, FALSE, 5, 10); add_to(vbox_column3, vbox_progress2, FALSE, TRUE, 5, 10); create_progressbars(vbox_progress1, hbox_progress1, hbox_progress2, vbox_progress2); add_to(hbox_columns, SEPV, FALSE, FALSE, 0, 0); // column 4 add_to(hbox_columns, vbox_column4, TRUE, TRUE, 5, 0); add_to(vbox_column4, vbox_others, FALSE, TRUE, 5, 3); create_treview(vbox_others); add_to(vbox_others, hbox_label, FALSE, TRUE, 5, 0); create_labels(hbox_label); add_to(vbox_others, hbox_spinner, FALSE, TRUE, 5, 0); create_spinners(hbox_spinner); create_expander(vbox_others); add_to(root, SEPH, FALSE, FALSE, 0, 0); // paned layout add_to(root, vpane, TRUE, TRUE, 0, 0); gtk_paned_set_start_child(GTK_PANED(vpane), hpane1); gtk_paned_set_shrink_start_child(GTK_PANED(vpane), FALSE); gtk_widget_set_size_request(hpane1, -1, 70); // The 70 gtk_box_set_homogeneous(GTK_BOX(hbox_frame1), TRUE); gtk_box_set_spacing(GTK_BOX(hbox_frame1), 3); gtk_widget_set_margin_start(hbox_frame1, 10); gtk_widget_set_margin_end(hbox_frame1, 10); gtk_widget_set_margin_top(hbox_frame1, 10); gtk_widget_set_margin_bottom(hbox_frame1, 10); gtk_paned_set_start_child(GTK_PANED(hpane1), hbox_frame1); gtk_paned_set_resize_start_child(GTK_PANED(hpane1), FALSE); gtk_paned_set_shrink_start_child(GTK_PANED(hpane1), FALSE); gtk_box_set_homogeneous(GTK_BOX(hbox_frame2), TRUE); gtk_box_set_spacing(GTK_BOX(hbox_frame2), 3); gtk_widget_set_margin_start(hbox_frame2, 10); gtk_widget_set_margin_end(hbox_frame2, 10); gtk_widget_set_margin_top(hbox_frame2, 10); gtk_widget_set_margin_bottom(hbox_frame2, 10); gtk_paned_set_end_child(GTK_PANED(hpane1), hbox_frame2); create_frames(hbox_frame1, hbox_frame2); gtk_paned_set_end_child(GTK_PANED(vpane), hpane2); gtk_paned_set_shrink_end_child(GTK_PANED(vpane), FALSE); //gtk_widget_set_size_request(hpane2, -1, 120); // The 120 gtk_box_set_homogeneous(GTK_BOX(hbox_notebook1), TRUE); gtk_box_set_spacing(GTK_BOX(hbox_notebook1), 3); gtk_widget_set_margin_start(hbox_notebook1, 10); gtk_widget_set_margin_end(hbox_notebook1, 10); gtk_widget_set_margin_top(hbox_notebook1, 10); gtk_widget_set_margin_bottom(hbox_notebook1, 10); gtk_paned_set_start_child(GTK_PANED(hpane2), hbox_notebook1); gtk_paned_set_resize_start_child(GTK_PANED(hpane2), FALSE); gtk_paned_set_shrink_start_child(GTK_PANED(hpane2), FALSE); gtk_box_set_homogeneous(GTK_BOX(hbox_notebook2), TRUE); gtk_box_set_spacing(GTK_BOX(hbox_notebook2), 3); gtk_widget_set_margin_start(hbox_notebook2, 10); gtk_widget_set_margin_end(hbox_notebook2, 10); gtk_widget_set_margin_top(hbox_notebook2, 10); gtk_widget_set_margin_bottom(hbox_notebook2, 10); gtk_paned_set_end_child(GTK_PANED(hpane2), hbox_notebook2); create_notebooks(hbox_notebook1, hbox_notebook2); } static void add_progressbar_and_entrybar() { if (awf_trace) g_printf("» add_progressbar_and_entrybar()\n"); // entry toolbar toolbarentry = gtk_entry_new(); gtk_entry_set_placeholder_text(GTK_ENTRY(toolbarentry), "..."); gtk_widget_set_visible(toolbarentry, FALSE); gtk_widget_set_valign(toolbarentry, GTK_ALIGN_CENTER); gtk_widget_set_vexpand(toolbarentry, FALSE); gtk_widget_insert_after(toolbarentry, toolbar, toolbarend); // end left // progressbar toolbar progress8 = gtk_progress_bar_new(); gtk_widget_set_size_request(progress8, 140, 1); gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress8), 0); gtk_orientable_set_orientation(GTK_ORIENTABLE(progress8), GTK_ORIENTATION_HORIZONTAL); gtk_widget_set_visible(progress8, FALSE); gtk_widget_set_valign(progress8, GTK_ALIGN_CENTER); gtk_widget_set_halign(progress8, GTK_ALIGN_END); gtk_widget_set_hexpand(progress8, TRUE); gtk_widget_insert_after(progress8, toolbar, gtk_widget_get_last_child(toolbar)); // end right // progressbar statusbar progress9 = gtk_progress_bar_new(); gtk_widget_set_size_request(progress9, 140, 1); gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress9), 0); gtk_orientable_set_orientation(GTK_ORIENTABLE(progress9), GTK_ORIENTATION_HORIZONTAL); gtk_widget_set_visible(progress9, FALSE); gtk_widget_set_valign(progress9, GTK_ALIGN_CENTER); gtk_widget_set_halign(progress9, GTK_ALIGN_END); gtk_widget_set_hexpand(progress9, TRUE); gtk_widget_insert_after(progress9, gtk_widget_get_first_child(statusbar), gtk_widget_get_first_child(gtk_widget_get_first_child(statusbar))); // statusbar > box > label, statusbar > box > progressbar } static void add_to(GtkWidget *root, GtkWidget *widget, gboolean expand, gboolean fill, guint padding, guint spacing) { // ok if (expand && fill) { gtk_widget_set_halign(widget, GTK_ALIGN_FILL); gtk_widget_set_valign(widget, GTK_ALIGN_FILL); gtk_widget_set_hexpand(widget, TRUE); gtk_widget_set_vexpand(widget, TRUE); } else if (expand) { gtk_widget_set_halign(widget, GTK_ALIGN_FILL); gtk_widget_set_valign(widget, GTK_ALIGN_START); gtk_widget_set_hexpand(widget, FALSE); gtk_widget_set_vexpand(widget, FALSE); } else { gtk_widget_set_hexpand(widget, FALSE); gtk_widget_set_vexpand(widget, FALSE); } if (GTK_IS_BOX(widget) && (padding > 0)) { gtk_widget_set_margin_start(widget, padding); gtk_widget_set_margin_end(widget, padding); gtk_widget_set_margin_top(widget, padding); gtk_widget_set_margin_bottom(widget, padding); } if (GTK_IS_BOX(widget) && (spacing > 0)) { gtk_box_set_spacing(GTK_BOX(widget), spacing); } gtk_box_append(GTK_BOX(root), widget); if (!GTK_IS_BOX(widget)) { G_GNUC_BEGIN_IGNORE_DEPRECATIONS // GTK 4.10+ GtkStyleContext *style = gtk_widget_get_style_context(widget); gchar *text = gtk_style_context_to_string(style, GTK_STYLE_CONTEXT_PRINT_RECURSE); G_GNUC_END_IGNORE_DEPRECATIONS // @todo remove [ ] g_strstrip(text); gtk_widget_set_tooltip_text(widget, text); g_free(text); } } static void create_toolbar(GtkWidget *root) { // ok if (awf_trace) g_printf("» create_toolbar()\n"); GtkWidget *icon1, *icon2, *icon3, *icon4, *icon5, *icon6, *icon7, *icon8, *icon9; // GTK_BUTTON icon1 = gtk_button_new_from_icon_name("document-open"); gtk_widget_add_css_class(icon1, "flat"); g_signal_connect(icon1, "clicked", G_CALLBACK(dialog_open), NULL); icon2 = gtk_button_new_from_icon_name("document-open"); gtk_widget_set_sensitive(icon2, FALSE); icon3 = gtk_button_new_from_icon_name("document-save"); g_signal_connect(icon3, "clicked", G_CALLBACK(dialog_save), NULL); icon4 = gtk_button_new_from_icon_name("view-refresh"); g_signal_connect_swapped(icon4, "clicked", G_CALLBACK(on_sighup), NULL); icon5 = gtk_button_new_from_icon_name("camera-photo"); gtk_widget_set_sensitive(icon5, opt_screenshot ? TRUE : FALSE); g_signal_connect(icon5, "clicked", G_CALLBACK(take_screenshot), NULL); icon6 = gtk_button_new_from_icon_name("dialog-information"); g_signal_connect(icon6, "clicked", G_CALLBACK(display_notification), NULL); #if defined (G_OS_WIN32) gtk_widget_set_sensitive(icon6, FALSE); #endif // GTK_TOGGLE_BUTTON icon7 = gtk_toggle_button_new(); gtk_button_set_icon_name(GTK_BUTTON(icon7), "list-add"); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(icon7), TRUE); g_signal_connect(icon7, "clicked", G_CALLBACK(update_widgets), NULL); icon8 = gtk_toggle_button_new(); gtk_button_set_icon_name(GTK_BUTTON(icon8), "list-remove"); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(icon8), FALSE); g_signal_connect(icon8, "clicked", G_CALLBACK(update_widgets), NULL); icon9 = gtk_toggle_button_new(); gtk_button_set_icon_name(GTK_BUTTON(icon9), "window-close"); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(icon9), FALSE); gtk_widget_set_sensitive(icon9, FALSE); toolbarend = icon9; // layout add_to(root, icon1, FALSE, FALSE, 0, 0); add_to(root, icon2, FALSE, FALSE, 0, 0); add_to(root, icon3, FALSE, FALSE, 0, 0); add_to(root, SEPV, FALSE, FALSE, 0, 0); add_to(root, icon4, FALSE, FALSE, 0, 0); add_to(root, icon5, FALSE, FALSE, 0, 0); add_to(root, icon6, FALSE, FALSE, 0, 0); add_to(root, SEPV, FALSE, FALSE, 0, 0); add_to(root, icon7, FALSE, FALSE, 0, 0); add_to(root, icon8, FALSE, FALSE, 0, 0); add_to(root, icon9, FALSE, FALSE, 0, 0); } static void create_combos_entries(GtkWidget *root) { // ok if (awf_trace) g_printf("» create_combos_entries()\n"); GtkWidget *combo1, *combo2, *combo3, *combo4, *entry1, *entry2, *entry3, *entry4; // GTK_COMBO_BOX G_GNUC_BEGIN_IGNORE_DEPRECATIONS // GTK 4.10+ //if GTK_CHECK_VERSION (4,10,0) // combo1 = gtk_drop_down_new_from_strings((const char * const[]) { "Combo box entry 1", "Combo box entry 2", NULL }); // //gtk_drop_down_set_enable_search(GTK_DROP_DOWN(combo1), TRUE); // gtk_drop_down_set_selected(GTK_DROP_DOWN(combo1), 0); //else combo1 = gtk_combo_box_text_new_with_entry(); gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo1), "Combo box entry 1"); gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo1), "Combo box entry 2"); gtk_combo_box_set_active(GTK_COMBO_BOX(combo1), 0); //endif //if GTK_CHECK_VERSION (4,10,0) // combo2 = gtk_drop_down_new_from_strings((const char * const[]) { "Combo box entry 1", "Combo box entry 2", NULL }); // gtk_drop_down_set_selected(GTK_DROP_DOWN(combo2), 0); //else combo2 = gtk_combo_box_text_new_with_entry(); gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo2), "Combo box entry 1"); gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo2), "Combo box entry 2"); gtk_combo_box_set_active(GTK_COMBO_BOX(combo2), 0); //endif gtk_widget_set_sensitive(combo2, FALSE); //if GTK_CHECK_VERSION (4,10,0) // combo3 = gtk_drop_down_new_from_strings((const char * const[]) { "Combo box 1", "Combo box 2", NULL }); // gtk_drop_down_set_selected(GTK_DROP_DOWN(combo3), 0); //else combo3 = gtk_combo_box_text_new(); gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo3), "Combo box 1"); gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo3), "Combo box 2"); gtk_combo_box_set_active(GTK_COMBO_BOX(combo3), 0); //endif //if GTK_CHECK_VERSION (4,10,0) // combo4 = gtk_drop_down_new_from_strings((const char * const[]) { "Combo box 1", "Combo box 2", NULL }); // gtk_drop_down_set_selected(GTK_DROP_DOWN(combo4), 0); //else combo4 = gtk_combo_box_text_new(); gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo4), "Combo box 1"); gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo4), "Combo box 2"); gtk_combo_box_set_active(GTK_COMBO_BOX(combo4), 0); //endif gtk_widget_set_sensitive(combo4, FALSE); G_GNUC_END_IGNORE_DEPRECATIONS // GTK_ENTRY entry1 = gtk_entry_new(); gtk_editable_set_text(GTK_EDITABLE(entry1), "Entry"); gtk_entry_set_placeholder_text(GTK_ENTRY(entry1), "Placeholder"); entry2 = gtk_entry_new(); gtk_editable_set_text(GTK_EDITABLE(entry2), "Entry"); gtk_widget_set_sensitive(entry2, FALSE); entry3 = gtk_entry_new(); gtk_editable_set_text(GTK_EDITABLE(entry3), "Entry"); gtk_entry_set_icon_from_icon_name(GTK_ENTRY(entry3), GTK_ENTRY_ICON_PRIMARY, "edit-clear"); gtk_entry_set_icon_from_icon_name(GTK_ENTRY(entry3), GTK_ENTRY_ICON_SECONDARY, "edit-find"); gtk_entry_set_placeholder_text(GTK_ENTRY(entry3), "Placeholder"); entry4 = gtk_entry_new(); gtk_editable_set_text(GTK_EDITABLE(entry4), "Entry"); gtk_entry_set_icon_from_icon_name(GTK_ENTRY(entry4), GTK_ENTRY_ICON_PRIMARY, "edit-clear"); gtk_entry_set_icon_from_icon_name(GTK_ENTRY(entry4), GTK_ENTRY_ICON_SECONDARY, "edit-find"); gtk_widget_set_sensitive(entry4, FALSE); // layout add_to(root, combo1, FALSE, FALSE, 0, 0); add_to(root, combo2, FALSE, FALSE, 0, 0); add_to(root, combo3, FALSE, FALSE, 0, 0); add_to(root, combo4, FALSE, FALSE, 0, 0); add_to(root, entry1, FALSE, FALSE, 0, 0); add_to(root, entry2, FALSE, FALSE, 0, 0); add_to(root, entry3, FALSE, FALSE, 0, 0); add_to(root, entry4, FALSE, FALSE, 0, 0); } static void create_spinbuttons(GtkWidget *root) { // ok if (awf_trace) g_printf("» create_spinbuttons()\n"); GtkWidget *spinbutton1, *spinbutton2; // GTK_SPIN_BUTTON spinbutton1 = gtk_spin_button_new_with_range(-100, 100, 1); gtk_spin_button_set_value(GTK_SPIN_BUTTON(spinbutton1), 1); spinbutton2 = gtk_spin_button_new_with_range(-100, 100, 1); gtk_spin_button_set_value(GTK_SPIN_BUTTON(spinbutton2), 1); gtk_widget_set_sensitive(spinbutton2, FALSE); // layout add_to(root, spinbutton1, FALSE, FALSE, 0, 0); add_to(root, BOXH, TRUE, TRUE, 0, 0); // empty space add_to(root, spinbutton2, FALSE, FALSE, 0, 0); } static void create_checkbuttons(GtkWidget *root) { // ok if (awf_trace) g_printf("» create_checkbuttons()\n"); GtkWidget *checkbutton1, *checkbutton2, *checkbutton3, *checkbutton4, *checkbutton5, *checkbutton6; // GTK_CHECK_BUTTON checkbutton1 = gtk_check_button_new_with_label("Check btn 1"); checkbutton2 = gtk_check_button_new_with_label("Check btn 2"); gtk_check_button_set_active(GTK_CHECK_BUTTON(checkbutton2), TRUE); checkbutton3 = gtk_check_button_new_with_label("Check btn 3"); gtk_check_button_set_inconsistent(GTK_CHECK_BUTTON(checkbutton3), TRUE); checkbutton4 = gtk_check_button_new_with_label("Check btn 4"); gtk_widget_set_sensitive(checkbutton4, FALSE); checkbutton5 = gtk_check_button_new_with_label("Check btn 5"); gtk_check_button_set_active(GTK_CHECK_BUTTON(checkbutton5), TRUE); gtk_widget_set_sensitive(checkbutton5, FALSE); checkbutton6 = gtk_check_button_new_with_label("Check btn 6"); gtk_check_button_set_inconsistent(GTK_CHECK_BUTTON(checkbutton6), TRUE); gtk_widget_set_sensitive(checkbutton6, FALSE); // layout add_to(root, checkbutton1, FALSE, FALSE, 0, 0); add_to(root, checkbutton2, FALSE, FALSE, 0, 0); add_to(root, checkbutton3, FALSE, FALSE, 0, 0); add_to(root, checkbutton4, FALSE, FALSE, 0, 0); add_to(root, checkbutton5, FALSE, FALSE, 0, 0); add_to(root, checkbutton6, FALSE, FALSE, 0, 0); } static void create_radiobuttons(GtkWidget *root) { // ok if (awf_trace) g_printf("» create_radiobuttons()\n"); GtkWidget *radiobutton1, *radiobutton2, *radiobutton3, *radiobutton4, *radiobutton5, *radiobutton6; // GTK_RADIO_BUTTON radiobutton1 = gtk_check_button_new_with_label("Radio btn 1"); gtk_check_button_set_group(GTK_CHECK_BUTTON(radiobutton1), NULL); radiobutton2 = gtk_check_button_new_with_label("Radio btn 2"); gtk_check_button_set_group(GTK_CHECK_BUTTON(radiobutton2), GTK_CHECK_BUTTON(radiobutton1)); gtk_check_button_set_active(GTK_CHECK_BUTTON(radiobutton2), TRUE); radiobutton3 = gtk_check_button_new_with_label("Radio btn 3"); gtk_check_button_set_group(GTK_CHECK_BUTTON(radiobutton3), GTK_CHECK_BUTTON(radiobutton1)); gtk_check_button_set_inconsistent(GTK_CHECK_BUTTON(radiobutton3), TRUE); radiobutton4 = gtk_check_button_new_with_label("Radio btn 4"); gtk_check_button_set_group(GTK_CHECK_BUTTON(radiobutton4), NULL); gtk_widget_set_sensitive(radiobutton4, FALSE); radiobutton5 = gtk_check_button_new_with_label("Radio btn 5"); gtk_check_button_set_group(GTK_CHECK_BUTTON(radiobutton5), GTK_CHECK_BUTTON(radiobutton4)); gtk_check_button_set_active(GTK_CHECK_BUTTON(radiobutton5), TRUE); gtk_widget_set_sensitive(radiobutton5, FALSE); radiobutton6 = gtk_check_button_new_with_label("Radio btn 6"); gtk_check_button_set_group(GTK_CHECK_BUTTON(radiobutton6), GTK_CHECK_BUTTON(radiobutton4)); gtk_check_button_set_inconsistent(GTK_CHECK_BUTTON(radiobutton6), TRUE); gtk_widget_set_sensitive(radiobutton6, FALSE); // layout add_to(root, radiobutton1, FALSE, FALSE, 0, 0); add_to(root, radiobutton2, FALSE, FALSE, 0, 0); add_to(root, radiobutton3, FALSE, FALSE, 0, 0); add_to(root, radiobutton4, FALSE, FALSE, 0, 0); add_to(root, radiobutton5, FALSE, FALSE, 0, 0); add_to(root, radiobutton6, FALSE, FALSE, 0, 0); } static void create_otherbuttons(GtkWidget *root1, GtkWidget *root2, GtkWidget *root3, GtkWidget *root4, GtkWidget *root5) { // ok if (awf_trace) g_printf("» create_otherbuttons()\n"); GtkWidget *button1, *button2, *button3, *button4, *button5, *button6, *button7, *button8, *button9; GtkWidget *button10, *button11, *button12, *button13, *button14, *button17; // GTK_BUTTON button1 = gtk_button_new_with_label("Button 1"); button2 = gtk_button_new_with_label("Button 2"); gtk_widget_set_sensitive(button2, FALSE); button3 = gtk_toggle_button_new_with_label("Button 3"); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button3), TRUE); button4 = gtk_toggle_button_new_with_label("Button 4"); gtk_widget_set_sensitive(button4, FALSE); // GTK_COLOR_DIALOG_BUTTON or GTK_COLOR_BUTTON #if GTK_CHECK_VERSION (4,10,0) GdkRGBA color; gdk_rgba_parse(&color, "#7796ba"); button5 = gtk_color_dialog_button_new(gtk_color_dialog_new()); gtk_color_dialog_button_set_rgba(GTK_COLOR_DIALOG_BUTTON(button5), &color); gtk_widget_set_tooltip_text(button5, _app("Choose a color")); #else GdkRGBA color; gdk_rgba_parse(&color, "#7796ba"); button5 = gtk_color_button_new_with_rgba(&color); gtk_widget_set_tooltip_text(button5, _app("Choose a color")); #endif // GTK_FONT_DIALOG_BUTTON or GTK_FONT_BUTTON #if GTK_CHECK_VERSION (4,10,0) button6 = gtk_font_dialog_button_new(gtk_font_dialog_new()); find_and_update_labels(button6); gtk_widget_set_size_request(button6, 186, -1); // The 186 gtk_widget_set_tooltip_text(button6, _app("Choose a font")); #else button6 = gtk_font_button_new(); find_and_update_labels(button6); gtk_widget_set_size_request(button6, 186, -1); // The 186 gtk_widget_set_tooltip_text(button6, _app("Choose a font")); #endif // GTK_BUTTON button7 = gtk_button_new_with_label(_app("Choose a file")); gtk_widget_add_css_class(button7, "awf-cheatcode-filebtn"); g_signal_connect(button7, "clicked", G_CALLBACK(dialog_open), NULL); button8 = gtk_button_new_with_label(_app("Choose a folder")); gtk_widget_add_css_class(button8, "awf-cheatcode-folderbtn"); g_signal_connect(button8, "clicked", G_CALLBACK(dialog_open), NULL); // GTK_SWITCH (for GTK_OPTION_MENU) button9 = gtk_switch_new(); gtk_switch_set_active(GTK_SWITCH(button9), TRUE); button10 = gtk_switch_new(); gtk_switch_set_active(GTK_SWITCH(button10), TRUE); gtk_widget_set_sensitive(button10, FALSE); button11 = gtk_switch_new(); gtk_switch_set_active(GTK_SWITCH(button11), FALSE); button12 = gtk_switch_new(); gtk_switch_set_active(GTK_SWITCH(button12), FALSE); gtk_widget_set_sensitive(button12, FALSE); // GTK_LINK_BUTTON button13 = gtk_link_button_new_with_label("https://github.com/luigifab/awf-extended", "Link button"); button14 = gtk_link_button_new_with_label("https://github.com/luigifab/awf-extended", "Link button"); gtk_widget_set_sensitive(button14, FALSE); // GTK_VOLUME_BUTTON G_GNUC_BEGIN_IGNORE_DEPRECATIONS // GTK 4.10+ button15 = gtk_volume_button_new(); gtk_scale_button_set_value(GTK_SCALE_BUTTON(button15), 0.5); button16 = gtk_volume_button_new(); gtk_scale_button_set_value(GTK_SCALE_BUTTON(button16), 0); gtk_widget_set_sensitive(button16, FALSE); G_GNUC_END_IGNORE_DEPRECATIONS // GTK_MENU_BUTTON button17 = gtk_menu_button_new(); gtk_menu_button_set_icon_name(GTK_MENU_BUTTON(button17), "open-menu-symbolic"); GMenuItem *menuitem; GMenu *menu = g_menu_new(); g_menu_append_item(menu, menuitem = g_menu_item_new("Popover item 1", NULL)); g_object_unref(menuitem); g_menu_append_item(menu, menuitem = g_menu_item_new("Popover item 2", NULL)); g_object_unref(menuitem); g_menu_append_item(menu, menuitem = g_menu_item_new("Popover item 3", NULL)); g_object_unref(menuitem); gtk_menu_button_set_menu_model(GTK_MENU_BUTTON(button17), G_MENU_MODEL(menu)); g_object_unref(menu); // layout add_to(root1, button1, FALSE, FALSE, 0, 0); add_to(root1, button2, FALSE, FALSE, 0, 0); add_to(root1, button3, FALSE, FALSE, 0, 0); add_to(root1, button4, FALSE, FALSE, 0, 0); add_to(root1, button5, FALSE, FALSE, 0, 0); add_to(root1, button6, FALSE, FALSE, 0, 0); add_to(root1, button7, FALSE, FALSE, 0, 0); add_to(root1, button8, FALSE, FALSE, 0, 0); add_to(root2, button9, FALSE, FALSE, 0, 0); add_to(root2, BOXH, TRUE, TRUE, 0, 0); // empty space add_to(root2, button10, FALSE, FALSE, 0, 0); add_to(root3, button11, FALSE, FALSE, 0, 0); add_to(root3, BOXH, TRUE, TRUE, 0, 0); // empty space add_to(root3, button12, FALSE, FALSE, 0, 0); add_to(root4, button13, FALSE, FALSE, 0, 0); add_to(root4, BOXH, TRUE, TRUE, 0, 0); // empty space add_to(root4, button14, FALSE, FALSE, 0, 0); add_to(root5, button15, FALSE, FALSE, 0, 0); add_to(root5, button16, FALSE, FALSE, 0, 0); add_to(root5, button17, FALSE, FALSE, 0, 0); } static void create_progressbars(GtkWidget *root1, GtkWidget *root2, GtkWidget *root3, GtkWidget *root4) { // ok if (awf_trace) g_printf("» create_progressbars()\n"); // GTK_PROGRESS_BAR progress1 = gtk_progress_bar_new(); gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress1), 0.5); gtk_orientable_set_orientation(GTK_ORIENTABLE(progress1), GTK_ORIENTATION_HORIZONTAL); progress2 = gtk_progress_bar_new(); gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress2), 0.5); gtk_orientable_set_orientation(GTK_ORIENTABLE(progress2), GTK_ORIENTATION_HORIZONTAL); gtk_progress_bar_set_inverted(GTK_PROGRESS_BAR(progress2), TRUE); progress3 = gtk_progress_bar_new(); gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress3), 0.5); gtk_orientable_set_orientation(GTK_ORIENTABLE(progress3), GTK_ORIENTATION_VERTICAL); gtk_widget_set_size_request(progress3, -1, 100); // The 100 progress4 = gtk_progress_bar_new(); gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress4), 0.5); gtk_orientable_set_orientation(GTK_ORIENTABLE(progress4), GTK_ORIENTATION_VERTICAL); gtk_progress_bar_set_inverted(GTK_PROGRESS_BAR(progress4), TRUE); // GTK_SCALE scale1 = create_horizontal_scale(50, FALSE, FALSE, GTK_POS_TOP); g_signal_connect(scale1, "value_changed", G_CALLBACK(update_values), NULL); scale2 = create_horizontal_scale(50, FALSE, TRUE, GTK_POS_TOP); g_signal_connect(scale2, "value_changed", G_CALLBACK(update_values), NULL); scale3 = create_vertical_scale(50, FALSE, FALSE, GTK_POS_TOP); g_signal_connect(scale3, "value_changed", G_CALLBACK(update_values), NULL); scale4 = create_vertical_scale(50, FALSE, TRUE, GTK_POS_TOP); g_signal_connect(scale4, "value_changed", G_CALLBACK(update_values), NULL); scale5 = create_vertical_scale(50, FALSE, FALSE, GTK_POS_TOP); update_marks(GTK_SCALE(scale5), FALSE, GTK_POS_LEFT); g_signal_connect(scale5, "value_changed", G_CALLBACK(update_values), NULL); scale6 = create_vertical_scale(50, FALSE, TRUE, GTK_POS_TOP); update_marks(GTK_SCALE(scale6), FALSE, GTK_POS_RIGHT); g_signal_connect(scale6, "value_changed", G_CALLBACK(update_values), NULL); // GTK_LEVEL_BAR levelbar1 = gtk_level_bar_new(); gtk_level_bar_set_mode(GTK_LEVEL_BAR(levelbar1), GTK_LEVEL_BAR_MODE_CONTINUOUS); gtk_level_bar_set_value(GTK_LEVEL_BAR(levelbar1), 0.5); gtk_orientable_set_orientation(GTK_ORIENTABLE(levelbar1), GTK_ORIENTATION_VERTICAL); levelbar2 = gtk_level_bar_new(); gtk_level_bar_set_mode(GTK_LEVEL_BAR(levelbar2), GTK_LEVEL_BAR_MODE_CONTINUOUS); gtk_level_bar_set_value(GTK_LEVEL_BAR(levelbar2), 0.5); gtk_orientable_set_orientation(GTK_ORIENTABLE(levelbar2), GTK_ORIENTATION_VERTICAL); gtk_level_bar_set_inverted(GTK_LEVEL_BAR(levelbar2), TRUE); levelbar3 = gtk_level_bar_new_for_interval(0, 5); gtk_level_bar_set_mode(GTK_LEVEL_BAR(levelbar3), GTK_LEVEL_BAR_MODE_DISCRETE); gtk_level_bar_set_value(GTK_LEVEL_BAR(levelbar3), 2); gtk_orientable_set_orientation(GTK_ORIENTABLE(levelbar3), GTK_ORIENTATION_VERTICAL); levelbar4 = gtk_level_bar_new_for_interval(0, 5); gtk_level_bar_set_mode(GTK_LEVEL_BAR(levelbar4), GTK_LEVEL_BAR_MODE_DISCRETE); gtk_level_bar_set_value(GTK_LEVEL_BAR(levelbar4), 2); gtk_orientable_set_orientation(GTK_ORIENTABLE(levelbar4), GTK_ORIENTATION_VERTICAL); gtk_level_bar_set_inverted(GTK_LEVEL_BAR(levelbar4), TRUE); levelbar5 = gtk_level_bar_new(); gtk_level_bar_set_mode(GTK_LEVEL_BAR(levelbar5), GTK_LEVEL_BAR_MODE_CONTINUOUS); gtk_level_bar_set_value(GTK_LEVEL_BAR(levelbar5), 0.5); levelbar6 = gtk_level_bar_new(); gtk_level_bar_set_mode(GTK_LEVEL_BAR(levelbar6), GTK_LEVEL_BAR_MODE_CONTINUOUS); gtk_level_bar_set_value(GTK_LEVEL_BAR(levelbar6), 0.5); gtk_level_bar_set_inverted(GTK_LEVEL_BAR(levelbar6), TRUE); levelbar7 = gtk_level_bar_new_for_interval(0, 5); gtk_level_bar_set_mode(GTK_LEVEL_BAR(levelbar7), GTK_LEVEL_BAR_MODE_DISCRETE); gtk_level_bar_set_value(GTK_LEVEL_BAR(levelbar7), 2); levelbar8 = gtk_level_bar_new_for_interval(0, 5); gtk_level_bar_set_mode(GTK_LEVEL_BAR(levelbar8), GTK_LEVEL_BAR_MODE_DISCRETE); gtk_level_bar_set_value(GTK_LEVEL_BAR(levelbar8), 2); gtk_level_bar_set_inverted(GTK_LEVEL_BAR(levelbar8), TRUE); // layout add_to(root1, progress1, FALSE, FALSE, 0, 0); add_to(root1, progress2, FALSE, FALSE, 0, 0); add_to(root1, scale1, FALSE, FALSE, 0, 0); add_to(root1, scale2, FALSE, FALSE, 0, 0); add_to(root2, progress3, FALSE, FALSE, 0, 0); add_to(root2, progress4, FALSE, FALSE, 0, 0); add_to(root2, levelbar1, FALSE, FALSE, 0, 0); add_to(root2, levelbar2, FALSE, FALSE, 0, 0); add_to(root2, levelbar3, FALSE, FALSE, 0, 0); add_to(root2, levelbar4, FALSE, FALSE, 0, 0); add_to(root3, scale3, FALSE, FALSE, 0, 0); add_to(root3, scale5, FALSE, FALSE, 0, 0); add_to(root3, scale6, FALSE, FALSE, 0, 0); add_to(root3, scale4, FALSE, FALSE, 0, 0); add_to(root4, levelbar5, FALSE, FALSE, 0, 0); add_to(root4, levelbar6, FALSE, FALSE, 0, 0); add_to(root4, levelbar7, FALSE, FALSE, 0, 0); add_to(root4, levelbar8, FALSE, FALSE, 0, 0); } static void create_labels(GtkWidget *root) { // ok if (awf_trace) g_printf("» create_labels()\n"); GtkWidget *label1, *label2; // GTK_LABEL label1 = gtk_label_new("Label 1"); label2 = gtk_label_new("Label 2"); gtk_widget_set_sensitive(label2, FALSE); // layout add_to(root, label1, FALSE, FALSE, 0, 0); add_to(root, BOXH, TRUE, TRUE, 0, 0); // empty space add_to(root, label2, FALSE, FALSE, 0, 0); add_to(root, BOXH, TRUE, TRUE, 0, 0); // empty space } static void create_spinners(GtkWidget *root) { // ok if (awf_trace) g_printf("» create_spinners()\n"); GtkWidget *spinner1, *spinner2; // GTK_SPINNER spinner1 = gtk_spinner_new(); gtk_widget_set_size_request(spinner1, 20, 20); spinner2 = gtk_spinner_new(); gtk_widget_set_size_request(spinner2, 20, 20); gtk_widget_set_sensitive(spinner2, FALSE); //gtk_spinner_start(GTK_SPINNER(spinner2)); // layout add_to(root, spinner1, FALSE, FALSE, 0, 0); add_to(root, BOXH, TRUE, TRUE, 0, 0); // empty space add_to(root, spinner2, FALSE, FALSE, 0, 0); add_to(root, BOXH, TRUE, TRUE, 0, 0); // empty space } static void create_expander(GtkWidget *root) { // ok if (awf_trace) g_printf("» create_expander()\n"); GtkWidget *expander, *scrolled_window, *tv; GtkTextBuffer *buffer; gchar *text; // GTK_EXPANDER expander = gtk_expander_new(_app("More...")); gtk_expander_set_expanded(GTK_EXPANDER(expander), TRUE); // GTK_SCROLLED_WINDOW scrolled_window = gtk_scrolled_window_new(); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS); gtk_widget_set_size_request(scrolled_window, -1, 120); const gchar *config = g_getenv("GTK_OVERLAY_SCROLLING"); if (config && (strcmp(config, "0") == 0)) { gtk_scrolled_window_set_overlay_scrolling(GTK_SCROLLED_WINDOW(scrolled_window), FALSE); gtk_widget_add_css_class(gtk_scrolled_window_get_hscrollbar(GTK_SCROLLED_WINDOW(scrolled_window)), "discrete"); gtk_widget_add_css_class(gtk_scrolled_window_get_vscrollbar(GTK_SCROLLED_WINDOW(scrolled_window)), "discrete"); } // GTK_TEXT_VIEW tv = gtk_text_view_new(); gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(tv), GTK_WRAP_WORD); text = g_strdup_printf("%s %s", _app("A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme."), _app("A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme.")); buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(tv)); gtk_text_buffer_set_text(GTK_TEXT_BUFFER(buffer), text, -1); g_free(text); // layout gtk_scrolled_window_set_child(GTK_SCROLLED_WINDOW(scrolled_window), tv); gtk_expander_set_child(GTK_EXPANDER(expander), scrolled_window); add_to(root, expander, FALSE, FALSE, 0, 0); } static void create_frames(GtkWidget *root1, GtkWidget *root2) { // ok if (awf_trace) g_printf("» create_frames()\n"); GtkWidget *frame1, *frame2, *frame3, *frame4; // GTK_FRAME frame1 = gtk_frame_new("Frame (shadow in)"); gtk_widget_add_css_class(frame1, "border-inset"); frame2 = gtk_frame_new("Frame (shadow out)"); gtk_widget_add_css_class(frame2, "border-outset"); frame3 = gtk_frame_new("Frame (shadow etched in)"); gtk_widget_add_css_class(frame3, "border-groove"); frame4 = gtk_frame_new("Frame (shadow etched out)"); gtk_widget_add_css_class(frame4, "border-ridge"); gtk_widget_set_sensitive(frame4, FALSE); // layout add_to(root1, frame1, TRUE, TRUE, 0, 0); add_to(root1, frame2, TRUE, TRUE, 0, 0); add_to(root2, frame3, TRUE, TRUE, 0, 0); add_to(root2, frame4, TRUE, TRUE, 0, 0); } static void create_notebooks(GtkWidget *root1, GtkWidget *root2) { // ok if (awf_trace) g_printf("» create_notebooks()\n"); // GTK_NOTEBOOK notebook1 = gtk_notebook_new(); gtk_notebook_popup_enable(GTK_NOTEBOOK(notebook1)); gtk_notebook_set_scrollable(GTK_NOTEBOOK(notebook1), FALSE); gtk_notebook_set_tab_pos(GTK_NOTEBOOK(notebook1), GTK_POS_TOP); create_notebook_tab(notebook1, "Tab1", NULL, FALSE); create_notebook_tab(notebook1, "Tab2", NULL, FALSE); create_notebook_tab(notebook1, "Tab3", NULL, TRUE); create_notebook_tab(notebook1, "Tab4", NULL, TRUE); notebook2 = gtk_notebook_new(); gtk_notebook_popup_enable(GTK_NOTEBOOK(notebook2)); gtk_notebook_set_scrollable(GTK_NOTEBOOK(notebook2), FALSE); gtk_notebook_set_tab_pos(GTK_NOTEBOOK(notebook2), GTK_POS_BOTTOM); create_notebook_tab(notebook2, "Tab1", NULL, FALSE); create_notebook_tab(notebook2, "Tab2", NULL, FALSE); create_notebook_tab(notebook2, "Tab3", NULL, TRUE); create_notebook_tab(notebook2, "Tab4", NULL, TRUE); notebook3 = gtk_notebook_new(); gtk_notebook_popup_enable(GTK_NOTEBOOK(notebook3)); gtk_notebook_set_scrollable(GTK_NOTEBOOK(notebook3), FALSE); gtk_notebook_set_tab_pos(GTK_NOTEBOOK(notebook3), GTK_POS_LEFT); create_notebook_tab(notebook3, "T1", NULL, FALSE); create_notebook_tab(notebook3, "Tab2", NULL, FALSE); create_notebook_tab(notebook3, "T3b", NULL, TRUE); create_notebook_tab(notebook3, "T4", NULL, TRUE); notebook4 = gtk_notebook_new(); gtk_notebook_popup_enable(GTK_NOTEBOOK(notebook4)); gtk_notebook_set_scrollable(GTK_NOTEBOOK(notebook4), FALSE); gtk_notebook_set_tab_pos(GTK_NOTEBOOK(notebook4), GTK_POS_RIGHT); create_notebook_tab(notebook4, "T1", NULL, FALSE); create_notebook_tab(notebook4, "Tab2", NULL, FALSE); create_notebook_tab(notebook4, "T3b", NULL, TRUE); create_notebook_tab(notebook4, "T4", NULL, TRUE); // layout add_to(root1, notebook1, TRUE, TRUE, 0, 0); add_to(root1, notebook2, TRUE, TRUE, 0, 0); add_to(root2, notebook3, TRUE, TRUE, 0, 0); add_to(root2, notebook4, TRUE, TRUE, 0, 0); } static void create_notebook_tab(GtkWidget *notebook, gchar *text, GtkWidget *content, gboolean close) { // ok GtkWidget *headbtn = BOXH, *btn; gtk_widget_set_hexpand(headbtn, FALSE); gtk_widget_set_vexpand(headbtn, FALSE); add_to(headbtn, gtk_label_new(text), TRUE, TRUE, 0, 0); // GTK_BUTTON if (close) { btn = gtk_button_new_from_icon_name("window-close"); gtk_button_set_has_frame(GTK_BUTTON(btn), FALSE); gtk_widget_set_focus_on_click(btn, FALSE); add_to(headbtn, btn, FALSE, FALSE, 0, 0); } if (!content) content = BOXV; gtk_notebook_append_page(GTK_NOTEBOOK(notebook), content, headbtn); gtk_notebook_set_tab_reorderable(GTK_NOTEBOOK(notebook), content, TRUE); // gtk-scroll-tabs for GTK 4.x | so same GTK 2.24 3.x 4.x & Qt 5.x 6.x GtkEventController *event; event = gtk_event_controller_scroll_new(GTK_EVENT_CONTROLLER_SCROLL_BOTH_AXES | GTK_EVENT_CONTROLLER_SCROLL_DISCRETE); g_signal_connect(event, "scroll", G_CALLBACK(on_scrolltabs), notebook); gtk_widget_add_controller(gtk_widget_get_parent(headbtn), event); } static void create_treview(GtkWidget *root) { // ok if (awf_trace) g_printf("» create_treview()\n"); GtkWidget *scrolled_window, *view; GtkCellRenderer *renderer; GtkTreeStore *store; GtkTreeIter iter; int idx = 0; G_GNUC_BEGIN_IGNORE_DEPRECATIONS // GTK 4.10+ // data store = gtk_tree_store_new(11, G_TYPE_INT, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_DOUBLE, G_TYPE_DOUBLE, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN); gtk_tree_store_append(store, &iter, NULL); gtk_tree_store_set(store, &iter, 0, 1, 1, FALSE, 2, FALSE, 3, "Text 1.1", 4, 0.0, 5, 0.0, 6, "Text 1.2", 7, "document-open", 8, "document-open", 9, FALSE, 10, FALSE, -1); gtk_tree_store_append(store, &iter, NULL); gtk_tree_store_set(store, &iter, 0, 2, 1, TRUE, 2, TRUE, 3, "Text 2.1", 4, 10.0, 5, 10.0, 6, "Text 2.2", 7, "document-save", 8, "document-save", 9, TRUE, 10, TRUE, -1); gtk_tree_store_append(store, &iter, NULL); gtk_tree_store_set(store, &iter, 0, 3, 1, FALSE, 2, FALSE, 3, "Text 3.1", 4, 20.0, 5, 20.0, 6, "Text 3.2", 7, "document-save-as", 8, "document-save-as", 9, FALSE, 10, FALSE, -1); gtk_tree_store_append(store, &iter, NULL); gtk_tree_store_set(store, &iter, 0, 4, 1, TRUE, 2, TRUE, 3, "Text 4.1", 4, 30.0, 5, 30.0, 6, "Text 4.2", 7, "view-refresh", 8, "view-refresh", 9, TRUE, 10, TRUE, -1); gtk_tree_store_append(store, &iter, NULL); gtk_tree_store_set(store, &iter, 0, 5, 1, FALSE, 2, FALSE, 3, "Text 5.1", 4, 40.0, 5, 40.0, 6, "Text 5.2", 7, "edit-cut", 8, "edit-cut", 9, FALSE, 10, FALSE, -1); gtk_tree_store_append(store, &iter, NULL); gtk_tree_store_set(store, &iter, 0, 6, 1, TRUE, 2, TRUE, 3, "Text 6.1", 4, 50.0, 5, 50.0, 6, "Text 6.2", 7, "help-contents", 8, "help-contents", 9, TRUE, 10, TRUE, -1); gtk_tree_store_append(store, &iter, NULL); gtk_tree_store_set(store, &iter, 0, 7, 1, FALSE, 2, FALSE, 3, "Text 7.1", 4, 60.0, 5, 60.0, 6, "Text 7.2", 7, "document-open", 8, "document-open", 9, FALSE, 10, FALSE, -1); gtk_tree_store_append(store, &iter, NULL); gtk_tree_store_set(store, &iter, 0, 8, 1, TRUE, 2, TRUE, 3, "Text 8.1", 4, 70.0, 5, 70.0, 6, "Text 8.2", 7, "document-save", 8, "document-save", 9, TRUE, 10, TRUE, -1); gtk_tree_store_append(store, &iter, NULL); gtk_tree_store_set(store, &iter, 0, 9, 1, FALSE, 2, FALSE, 3, "Text 9.1", 4, 80.0, 5, 80.0, 6, "Text 9.2", 7, "document-save-as", 8, "document-save-as", 9, FALSE, 10, FALSE, -1); gtk_tree_store_append(store, &iter, NULL); gtk_tree_store_set(store, &iter, 0, 10, 1, TRUE, 2, TRUE, 3, "Text 10.1", 4, 90.0, 5, 90.0, 6, "Text 10.2", 7, "view-refresh", 8, "view-refresh", 9, TRUE, 10, TRUE, -1); gtk_tree_store_append(store, &iter, NULL); gtk_tree_store_set(store, &iter, 0, 11, 1, FALSE, 2, FALSE, 3, "Text 11.1", 4, 100.0, 5, 100.0, 6, "Text 11.2", 7, "edit-cut", 8, "edit-cut", 9, FALSE, 10, FALSE, -1); // columns view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store)); gtk_tree_view_set_reorderable(GTK_TREE_VIEW(view), FALSE); // rows gtk_tree_view_set_show_expanders(GTK_TREE_VIEW(view), FALSE); gtk_tree_view_set_headers_clickable(GTK_TREE_VIEW(view), TRUE); gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(store), 0, GTK_SORT_ASCENDING); g_object_unref(G_OBJECT(store)); idx = 0; renderer = gtk_cell_renderer_text_new(); gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), idx, "i", renderer, "text", idx, NULL); gtk_tree_view_column_set_sort_column_id(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), idx); gtk_tree_view_column_set_reorderable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); gtk_tree_view_column_set_resizable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); g_object_set(renderer, "editable", TRUE, NULL); idx = 1; renderer = gtk_cell_renderer_toggle_new(); gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), idx, "c", renderer, "active", idx, NULL); gtk_tree_view_column_set_reorderable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); gtk_tree_view_column_set_resizable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); gtk_tree_view_column_set_min_width(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), 20); idx = 2; renderer = gtk_cell_renderer_toggle_new(); gtk_cell_renderer_toggle_set_radio(GTK_CELL_RENDERER_TOGGLE(renderer), TRUE); gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), idx, "r", renderer, "active", idx, NULL); gtk_tree_view_column_set_reorderable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); gtk_tree_view_column_set_resizable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); gtk_tree_view_column_set_min_width(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), 20); idx = 3; renderer = gtk_cell_renderer_text_new(); gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), idx, "Text", renderer, "text", idx, NULL); gtk_tree_view_column_set_sort_column_id(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), idx); gtk_tree_view_column_set_reorderable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); gtk_tree_view_column_set_resizable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); g_object_set(renderer, "editable", TRUE, NULL); idx = 4; renderer = gtk_cell_renderer_progress_new(); gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), idx, "Progress", renderer, "value", idx, NULL); gtk_tree_view_column_set_sort_column_id(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), idx); gtk_tree_view_column_set_reorderable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); gtk_tree_view_column_set_resizable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); idx = 5; renderer = gtk_cell_renderer_progress_new(); gtk_cell_renderer_set_sensitive(renderer, FALSE); gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), idx, "Progress", renderer, "value", idx, NULL); gtk_tree_view_column_set_sort_column_id(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), idx); gtk_tree_view_column_set_reorderable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); gtk_tree_view_column_set_resizable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); idx = 6; renderer = gtk_cell_renderer_text_new(); gtk_cell_renderer_set_sensitive(renderer, FALSE); gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), idx, "Text", renderer, "text", idx, NULL); gtk_tree_view_column_set_sort_column_id(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), idx); gtk_tree_view_column_set_reorderable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); gtk_tree_view_column_set_resizable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); idx = 7; renderer = gtk_cell_renderer_pixbuf_new(); gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), idx, "Icon", renderer, "icon-name", idx, NULL); gtk_tree_view_column_set_reorderable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); gtk_tree_view_column_set_resizable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); idx = 8; renderer = gtk_cell_renderer_pixbuf_new(); gtk_cell_renderer_set_sensitive(renderer, FALSE); gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), idx, "Icon", renderer, "icon-name", idx, NULL); gtk_tree_view_column_set_reorderable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); gtk_tree_view_column_set_resizable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); idx = 9; renderer = gtk_cell_renderer_toggle_new(); gtk_cell_renderer_set_sensitive(renderer, FALSE); gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), idx, "c", renderer, "active", idx, NULL); gtk_tree_view_column_set_reorderable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); gtk_tree_view_column_set_resizable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); gtk_tree_view_column_set_min_width(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), 20); idx = 10; renderer = gtk_cell_renderer_toggle_new(); gtk_cell_renderer_set_sensitive(renderer, FALSE); gtk_cell_renderer_toggle_set_radio(GTK_CELL_RENDERER_TOGGLE(renderer), TRUE); gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), idx, "r", renderer, "active", idx, NULL); gtk_tree_view_column_set_reorderable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); gtk_tree_view_column_set_resizable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); gtk_tree_view_column_set_min_width(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), 20); // colors for lines: with gtk4-classic G_GNUC_END_IGNORE_DEPRECATIONS // scrolled window scrolled_window = gtk_scrolled_window_new(); const gchar *config = g_getenv("GTK_OVERLAY_SCROLLING"); if (config && (strcmp(config, "0") == 0)) gtk_scrolled_window_set_overlay_scrolling(GTK_SCROLLED_WINDOW(scrolled_window), FALSE); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled_window), GTK_POLICY_ALWAYS, GTK_POLICY_ALWAYS); gtk_widget_set_size_request(scrolled_window, 200, 200); // The 200 gtk_widget_set_size_request(view, 200, 200); // The 200 gtk_scrolled_window_set_child(GTK_SCROLLED_WINDOW(scrolled_window), view); add_to(root, scrolled_window, FALSE, FALSE, 0, 0); } static void create_scales(GtkWidget *notebook, gchar *text, int position) { if (awf_trace) g_printf("» create_scales()\n"); GtkWidget *hbox = BOXH; GtkWidget *vbox1 = BOXV, *vbox2 = BOXV, *vbox3 = BOXV, *hboxa = BOXH, *hboxb = BOXH; GtkWidget *scale1v, *scale2v, *scale3v, *scale4v, *scale5v, *scale6v, *scale7v, *scale8v, *scale9v, *scale10v, *scale11v, *scale12v; GtkWidget *scale1h, *scale2h, *scale3h, *scale4h, *scale5h, *scale6h, *scale7h, *scale8h, *scale9h, *scale10h, *scale11h, *scale12h; gdouble value = gtk_range_get_value(GTK_RANGE(scale1)); gtk_widget_set_margin_top(hbox, 12); gtk_widget_set_margin_bottom(hbox, 12); gtk_widget_set_margin_start(hbox, 12); gtk_widget_set_margin_end(hbox, 12); // vertical scales scale1v = create_vertical_scale(value, FALSE, FALSE, position); if (gtk_widget_get_direction(window) == GTK_TEXT_DIR_RTL) // @todo highlight bottom instead of top, why? gtk_widget_add_css_class(scale1v, "top"); scale2v = create_vertical_scale(value, FALSE, FALSE, position); update_marks(GTK_SCALE(scale2v), FALSE, GTK_POS_LEFT); if (gtk_widget_get_direction(window) == GTK_TEXT_DIR_RTL) // @todo highlight bottom instead of top, why? gtk_widget_add_css_class(scale2v, "top"); scale3v = create_vertical_scale(value, FALSE, FALSE, position); update_marks(GTK_SCALE(scale3v), TRUE, GTK_POS_LEFT); if (gtk_widget_get_direction(window) == GTK_TEXT_DIR_RTL) // @todo highlight bottom instead of top, why? gtk_widget_add_css_class(scale3v, "top"); scale4v = create_vertical_scale(value, TRUE, FALSE, position); if (gtk_widget_get_direction(window) == GTK_TEXT_DIR_RTL) // @todo highlight bottom instead of top, why? gtk_widget_add_css_class(scale4v, "top"); scale5v = create_vertical_scale(value, TRUE, FALSE, position); update_marks(GTK_SCALE(scale5v), FALSE, GTK_POS_LEFT); if (gtk_widget_get_direction(window) == GTK_TEXT_DIR_RTL) // @todo highlight bottom instead of top, why? gtk_widget_add_css_class(scale5v, "top"); scale6v = create_vertical_scale(value, TRUE, FALSE, position); update_marks(GTK_SCALE(scale6v), TRUE, GTK_POS_LEFT); if (gtk_widget_get_direction(window) == GTK_TEXT_DIR_RTL) // @todo highlight bottom instead of top, why? gtk_widget_add_css_class(scale6v, "top"); scale7v = create_vertical_scale(value, FALSE, TRUE, position); scale8v = create_vertical_scale(value, FALSE, TRUE, position); update_marks(GTK_SCALE(scale8v), FALSE, GTK_POS_RIGHT); scale9v = create_vertical_scale(value, FALSE, TRUE, position); update_marks(GTK_SCALE(scale9v), TRUE, GTK_POS_RIGHT); scale10v = create_vertical_scale(value, TRUE, TRUE, position); scale11v = create_vertical_scale(value, TRUE, TRUE, position); update_marks(GTK_SCALE(scale11v), FALSE, GTK_POS_RIGHT); scale12v = create_vertical_scale(value, TRUE, TRUE, position); update_marks(GTK_SCALE(scale12v), TRUE, GTK_POS_RIGHT); // horizontal scales scale1h = create_horizontal_scale(value, FALSE, FALSE, position); scale2h = create_horizontal_scale(value, FALSE, FALSE, position); update_marks(GTK_SCALE(scale2h), FALSE, GTK_POS_TOP); scale3h = create_horizontal_scale(value, FALSE, FALSE, position); update_marks(GTK_SCALE(scale3h), TRUE, GTK_POS_TOP); scale4h = create_horizontal_scale(value, TRUE, FALSE, position); scale5h = create_horizontal_scale(value, TRUE, FALSE, position); update_marks(GTK_SCALE(scale5h), FALSE, GTK_POS_TOP); scale6h = create_horizontal_scale(value, TRUE, FALSE, position); update_marks(GTK_SCALE(scale6h), TRUE, GTK_POS_TOP); scale7h = create_horizontal_scale(value, FALSE, TRUE, position); scale8h = create_horizontal_scale(value, FALSE, TRUE, position); update_marks(GTK_SCALE(scale8h), FALSE, GTK_POS_BOTTOM); scale9h = create_horizontal_scale(value, FALSE, TRUE, position); update_marks(GTK_SCALE(scale9h), TRUE, GTK_POS_BOTTOM); scale10h = create_horizontal_scale(value, TRUE, TRUE, position); scale11h = create_horizontal_scale(value, TRUE, TRUE, position); update_marks(GTK_SCALE(scale11h), FALSE, GTK_POS_BOTTOM); scale12h = create_horizontal_scale(value, TRUE, TRUE, position); update_marks(GTK_SCALE(scale12h), TRUE, GTK_POS_BOTTOM); // layout add_to(hbox, vbox1, TRUE, TRUE, 5, 5); add_to(vbox1, scale1h, FALSE, FALSE, 5, 5); add_to(vbox1, scale2h, FALSE, FALSE, 5, 5); add_to(vbox1, scale3h, FALSE, FALSE, 5, 5); add_to(vbox1, scale4h, FALSE, FALSE, 5, 5); add_to(vbox1, scale5h, FALSE, FALSE, 5, 5); add_to(vbox1, scale6h, FALSE, FALSE, 5, 5); add_to(hbox, vbox2, TRUE, TRUE, 5, 5); add_to(vbox2, hboxa, TRUE, TRUE, 0, 0); add_to(hboxa, scale1v, FALSE, FALSE, 5, 5); add_to(hboxa, scale2v, FALSE, FALSE, 5, 5); add_to(hboxa, scale3v, FALSE, FALSE, 5, 5); add_to(hboxa, scale7v, FALSE, FALSE, 5, 5); add_to(hboxa, scale8v, FALSE, FALSE, 5, 5); add_to(hboxa, scale9v, FALSE, FALSE, 5, 5); add_to(vbox2, hboxb, TRUE, TRUE, 0, 0); add_to(hboxb, scale4v, FALSE, FALSE, 5, 5); add_to(hboxb, scale5v, FALSE, FALSE, 5, 5); add_to(hboxb, scale6v, FALSE, FALSE, 5, 5); add_to(hboxb, scale10v, FALSE, FALSE, 5, 5); add_to(hboxb, scale11v, FALSE, FALSE, 5, 5); add_to(hboxb, scale12v, FALSE, FALSE, 5, 5); add_to(hbox, vbox3, TRUE, TRUE, 5, 5); add_to(vbox3, scale7h, FALSE, FALSE, 5, 5); add_to(vbox3, scale8h, FALSE, FALSE, 5, 5); add_to(vbox3, scale9h, FALSE, FALSE, 5, 5); add_to(vbox3, scale10h, FALSE, FALSE, 5, 5); add_to(vbox3, scale11h, FALSE, FALSE, 5, 5); add_to(vbox3, scale12h, FALSE, FALSE, 5, 5); create_notebook_tab(notebook, text, hbox, FALSE); } static GtkWidget* create_horizontal_scale(gdouble value, gboolean draw, gboolean inverted, int position) { // ok if (awf_trace) g_printf("» create_horizontal_scale()\n"); GtkWidget *scale; scale = gtk_scale_new_with_range(GTK_ORIENTATION_HORIZONTAL, 0, 100, 1); gtk_range_set_value(GTK_RANGE(scale), value); gtk_scale_set_draw_value(GTK_SCALE(scale), draw); gtk_scale_set_value_pos(GTK_SCALE(scale), position); gtk_range_set_inverted(GTK_RANGE(scale), inverted); gtk_widget_set_size_request(scale, 186, -1); // The 186 return scale; } static GtkWidget* create_vertical_scale(gdouble value, gboolean draw, gboolean inverted, int position) { // ok if (awf_trace) g_printf("» create_vertical_scale()\n"); GtkWidget *scale; scale = gtk_scale_new_with_range(GTK_ORIENTATION_VERTICAL, 0, 100, 1); gtk_scale_set_value_pos(GTK_SCALE(scale), position); gtk_range_set_inverted(GTK_RANGE(scale), inverted); gtk_scale_set_draw_value(GTK_SCALE(scale), draw); gtk_range_set_value(GTK_RANGE(scale), value); gtk_widget_set_size_request(scale, -1, 100); // The 100 return scale; } // traditional menu static void create_traditional_menubar(GtkApplication *app, GMenu *root) { if (awf_trace) g_printf("» create_traditional_menubar()\n"); GMenu *menu, *submenu, *section, *base; GSimpleAction *action; GList *iterator; gboolean ok = FALSE; // options menu = g_menu_new(); g_menu_append_submenu(root, _app("_Options"), G_MENU_MODEL(menu)); create_menuitem(app, menu, _gtk("_Open"), AWF_ACCEL_OPEN, AWF_OPEN, "gtk-open", dialog_open); create_menuitem(app, menu, _app("Open recent file"), AWF_ACCEL_RECE, NULL, NULL, NULL); create_menuitem(app, menu, _gtk("_Save"), AWF_ACCEL_SAVE, AWF_SAVE, "gtk-save", dialog_save); create_menuitem(app, menu, _app("_Refresh"), AWF_ACCEL_REFR, AWF_REFR, "gtk-refresh", G_CALLBACK(on_sighup)); // G_CALLBACK(update_theme) create_menuitem(app, menu, _app("Calendar"), AWF_ACCEL_CALE, AWF_CALE, NULL, dialog_calendar); create_menuitem(app, menu, "GtkScales", AWF_ACCEL_SCAL, AWF_SCAL, NULL, dialog_scales); create_menuitem(app, menu, _gtk("_Properties"), AWF_ACCEL_PROP, AWF_PROP, "gtk-properties", dialog_message); create_menuitem(app, menu, _gtk("Page Set_up"), AWF_ACCEL_PRSE, AWF_PRSE, NULL, dialog_page_setup); // gtk-page-setup removed create_menuitem(app, menu, _gtk("_Print"), AWF_ACCEL_PRIN, AWF_PRIN, "gtk-print", dialog_print); submenu = g_menu_new(); g_menu_append_submenu(menu, _app("More..."), G_MENU_MODEL(submenu)); create_menuitem(app, submenu, _gtk("Cu_t"), AWF_ACCEL_MCUT, AWF_MCUT, "gtk-cut", NULL); create_menuitem(app, submenu, _gtk("_Copy"), AWF_ACCEL_MCOP, AWF_MCOP, "gtk-copy", NULL); create_menuitem(app, submenu, _gtk("_Paste"), AWF_ACCEL_MPAS, AWF_MPAS, "gtk-paste", NULL); g_object_unref(submenu); section = g_menu_new(); g_menu_append_section(menu, NULL, G_MENU_MODEL(section)); action = g_simple_action_new_stateful("set-check-grp11", NULL, g_variant_new_boolean(FALSE)); g_signal_connect(action, "activate", G_CALLBACK(activate_action), NULL); g_action_map_add_action(G_ACTION_MAP(app), G_ACTION(action)); g_object_unref(action); create_menuitem_radio(section, g_strdup_printf("Check 1 %s", _app("(unchecked)")), TRUE, "app.set-check-grp11", FALSE); action = g_simple_action_new_stateful("set-check-grp12", NULL, g_variant_new_boolean(TRUE)); g_signal_connect(action, "activate", G_CALLBACK(activate_action), NULL); g_action_map_add_action(G_ACTION_MAP(app), G_ACTION(action)); g_object_unref(action); create_menuitem_radio(section, g_strdup_printf("Check 2 %s", _app("(checked)")), TRUE, "app.set-check-grp12", FALSE); create_menuitem_radio(section, g_strdup_printf("Check 3 %s", _app("(inconsistent)")), TRUE, NULL, FALSE); // @todo action = g_simple_action_new_stateful("set-check-grp21", NULL, g_variant_new_boolean(FALSE)); g_simple_action_set_enabled(action, FALSE); g_signal_connect(action, "activate", G_CALLBACK(activate_action), NULL); g_action_map_add_action(G_ACTION_MAP(app), G_ACTION(action)); g_object_unref(action); create_menuitem_radio(section, g_strdup_printf("Check 1 %s", _app("(unchecked)")), TRUE, "app.set-check-grp21", FALSE); action = g_simple_action_new_stateful("set-check-grp22", NULL, g_variant_new_boolean(TRUE)); g_simple_action_set_enabled(action, FALSE); g_signal_connect(action, "activate", G_CALLBACK(activate_action), NULL); g_action_map_add_action(G_ACTION_MAP(app), G_ACTION(action)); g_object_unref(action); create_menuitem_radio(section, g_strdup_printf("Check 2 %s", _app("(checked)")), TRUE, "app.set-check-grp22", FALSE); create_menuitem_radio(section, g_strdup_printf("Check 3 %s", _app("(inconsistent)")), TRUE, "set-check-grp23", FALSE); // @todo g_object_unref(section); section = g_menu_new(); g_menu_append_section(menu, NULL, G_MENU_MODEL(section)); action = g_simple_action_new_stateful("set-radio-grp1", G_VARIANT_TYPE_STRING, g_variant_new_string("checked")); g_signal_connect(action, "activate", G_CALLBACK(activate_action), NULL); g_action_map_add_action(G_ACTION_MAP(app), G_ACTION(action)); g_object_unref(action); create_menuitem_radio(section, g_strdup_printf("Radio 1 %s", _app("(unchecked)")), TRUE, "app.set-radio-grp1::unchecked", FALSE); create_menuitem_radio(section, g_strdup_printf("Radio 2 %s", _app("(checked)")), TRUE, "app.set-radio-grp1::checked", FALSE); create_menuitem_radio(section, g_strdup_printf("Radio 3 %s", _app("(inconsistent)")), TRUE, NULL, FALSE); // @todo action = g_simple_action_new_stateful("set-radio-grp2", G_VARIANT_TYPE_STRING, g_variant_new_string("checked")); g_simple_action_set_enabled(action, FALSE); g_signal_connect(action, "activate", G_CALLBACK(activate_action), NULL); g_action_map_add_action(G_ACTION_MAP(app), G_ACTION(action)); g_object_unref(action); create_menuitem_radio(section, g_strdup_printf("Radio 1 %s", _app("(unchecked)")), TRUE, "app.set-radio-grp2::unchecked", FALSE); create_menuitem_radio(section, g_strdup_printf("Radio 2 %s", _app("(checked)")), TRUE, "app.set-radio-grp2::checked", FALSE); create_menuitem_radio(section, g_strdup_printf("Radio 3 %s", _app("(inconsistent)")), TRUE, "disabled", FALSE); // @todo g_object_unref(section); section = g_menu_new(); g_menu_append_section(menu, NULL, G_MENU_MODEL(section)); create_menuitem(app, section, _gtk("_Close"), AWF_ACCEL_CLOS, AWF_CLOS, "gtk-close", NULL); create_menuitem(app, section, _gtk("_Quit"), AWF_ACCEL_QUIT, AWF_QUIT, "gtk-quit", quit); g_object_unref(section); g_object_unref(menu); // themes action = g_simple_action_new_stateful("set-theme", G_VARIANT_TYPE_STRING, g_variant_new_string(current_theme)); g_signal_connect(action, "activate", G_CALLBACK(activate_action), NULL); g_action_map_add_action(G_ACTION_MAP(app), G_ACTION(action)); g_object_unref(action); // system themes menu = g_menu_new(); g_menu_append_submenu(root, _app("_System themes"), G_MENU_MODEL(menu)); for (iterator = list_system_theme; iterator; iterator = iterator->next) { if ( (strcmp((gchar*) iterator->data, "Mint-L") == 0) || (strcmp((gchar*) iterator->data, "Mint-X") == 0) || (strcmp((gchar*) iterator->data, "Mint-Y") == 0) || (strcmp((gchar*) iterator->data, "Yaru") == 0) || (strcmp((gchar*) iterator->data, "Sucharu") == 0) ) { submenu = g_menu_new(); g_menu_append_submenu(menu, iterator->data, G_MENU_MODEL(submenu)); g_object_unref(submenu); // @todo use-after-unref base = submenu; ok = TRUE; } else if (ok && ( g_str_has_prefix((gchar*) iterator->data, "Mint-L") || g_str_has_prefix((gchar*) iterator->data, "Mint-X") || g_str_has_prefix((gchar*) iterator->data, "Mint-Y") || g_str_has_prefix((gchar*) iterator->data, "Yaru") || g_str_has_prefix((gchar*) iterator->data, "Sucharu") )) { base = submenu; } else { base = menu; ok = FALSE; } if (g_hash_table_lookup(hash_user_theme, iterator->data)) create_menuitem_radio(base, iterator->data, FALSE, "disabled", FALSE); // @todo else create_menuitem_radio(base, iterator->data, FALSE, g_strdup_printf("app.set-theme::%s", (gchar*) iterator->data), TRUE); } if (!list_system_theme) g_menu_append(menu, _app("No themes found"), "disabled"); // @todo g_object_unref(menu); // user themes menu = g_menu_new(); g_menu_append_submenu(root, _app("_User themes"), G_MENU_MODEL(menu)); for (iterator = list_user_theme; iterator; iterator = iterator->next) { if ( (strcmp((gchar*) iterator->data, "Mint-L") == 0) || (strcmp((gchar*) iterator->data, "Mint-X") == 0) || (strcmp((gchar*) iterator->data, "Mint-Y") == 0) || (strcmp((gchar*) iterator->data, "Yaru") == 0) || (strcmp((gchar*) iterator->data, "Sucharu") == 0) ) { submenu = g_menu_new(); g_menu_append_submenu(menu, iterator->data, G_MENU_MODEL(submenu)); g_object_unref(submenu); // @todo use-after-unref base = submenu; ok = TRUE; } else if (ok && ( g_str_has_prefix((gchar*) iterator->data, "Mint-L") || g_str_has_prefix((gchar*) iterator->data, "Mint-X") || g_str_has_prefix((gchar*) iterator->data, "Mint-Y") || g_str_has_prefix((gchar*) iterator->data, "Yaru") || g_str_has_prefix((gchar*) iterator->data, "Sucharu") )) { base = submenu; } else { base = menu; ok = FALSE; } create_menuitem_radio(base, iterator->data, FALSE, g_strdup_printf("app.set-theme::%s", (gchar*) iterator->data), TRUE); } if (!list_user_theme) g_menu_append(menu, _app("No themes found"), "disabled"); // @todo g_object_unref(menu); // text direction action = g_simple_action_new_stateful("set-direction", G_VARIANT_TYPE_STRING, g_variant_new_string(current_direction ? "1" : "2")); g_signal_connect(action, "activate", G_CALLBACK(activate_action), NULL); g_action_map_add_action(G_ACTION_MAP(app), G_ACTION(action)); g_object_unref(action); menu = g_menu_new(); g_menu_append_submenu(root, _app("_Text direction"), G_MENU_MODEL(menu)); create_menuitem_radio(menu, _app("Left to Right (LTR)"), FALSE, g_strdup_printf("app.set-direction::%d", GTK_TEXT_DIR_LTR), TRUE); create_menuitem_radio(menu, _app("Right to Left (RTL)"), FALSE, g_strdup_printf("app.set-direction::%d", GTK_TEXT_DIR_RTL), TRUE); g_object_unref(menu); // help menu = g_menu_new(); g_menu_append_submenu(root, _app("_Help"), G_MENU_MODEL(menu)); create_menuitem(app, menu, "GtkInspector", AWF_ACCEL_INSP, AWF_INSP, NULL, dialog_inspector); create_menuitem(app, menu, _gtk("_About"), AWF_ACCEL_ABOU, AWF_ABOU, "gtk-about", dialog_about); g_object_unref(menu); } static void create_menuitem_radio(GMenu *menu, gchar *text, gboolean free1, gchar *group, gboolean free2) { if (awf_trace) g_printf("» create_menuitem_radio(%s)\n", text); GMenuItem *menuitem = g_menu_item_new(text, group); g_menu_append_item(menu, menuitem); g_object_unref(menuitem); if (free1) g_free(text); if (free2) g_free(group); } static void create_menuitem(GtkApplication *app, GMenu *menu, gchar *text, gchar *acl, gchar *kmp, gchar *icon, GCallback function) { if (awf_trace) g_printf("» create_menuitem(%s)\n", text); GMenuItem *menuitem; GSimpleAction *action = NULL; gchar *acckey[2] = { acl, NULL }; gchar *appkey = "disabled"; gboolean enabled = (kmp && (!icon || (strcmp(icon, "gtk-close") != 0))); if (enabled) { appkey = g_strdup_printf("app.%s", kmp); action = g_simple_action_new(kmp, NULL); g_action_map_add_action(G_ACTION_MAP(app), G_ACTION(action)); gtk_application_set_accels_for_action(app, appkey, (const char**) acckey); } menuitem = g_menu_item_new(text, appkey); if (action && function) g_signal_connect(action, "activate", function, NULL); if (acl) g_menu_item_set_attribute(menuitem, "accel", "s", acl, NULL); if (icon) g_menu_item_set_attribute_value(menuitem, "icon", g_variant_new_string(icon)); // with gtk4-classic, without the icon is hidden g_menu_append_item(menu, menuitem); g_object_unref(menuitem); if (enabled) { g_object_unref(action); g_free(appkey); } } static void activate_action(GSimpleAction *action, GVariant *parameter, gpointer data) { if (awf_trace) g_printf("» activate_action()\n"); // radio if (parameter) { g_simple_action_set_state(action, parameter); if (strcmp(g_action_get_name(G_ACTION(action)), "set-theme") == 0) update_theme((gchar*) g_variant_get_string(parameter, NULL)); else if (strcmp(g_action_get_name(G_ACTION(action)), "set-direction") == 0) update_text_direction((strcmp(g_variant_get_string(parameter, NULL), "1") == 0) ? 1 : 2); } // checkbox else { GVariant *action_state = g_action_get_state(G_ACTION(action)); if (g_variant_get_boolean(action_state) == FALSE) g_simple_action_set_state(action, g_variant_new_boolean(TRUE)); else g_simple_action_set_state(action, g_variant_new_boolean(FALSE)); g_variant_unref(action_state); } } static void accels_load(GtkApplication *app) { // todo if (awf_trace) g_printf("» accels_load()\n"); gchar *old_path = g_build_filename(g_get_home_dir(), ".awf-gtk-accels", NULL); if (g_file_test(old_path, G_FILE_TEST_EXISTS)) { gchar *new_path = g_build_filename(g_get_home_dir(), ".awf-accels", NULL); g_rename(old_path, new_path); g_free(new_path); } g_free(old_path); // gtk-can-change-accels for GTK 4.x | so same GTK 2.24 3.x 4.x & Qt 5.x 6.x gchar *path = g_build_filename(g_get_home_dir(), ".awf-accels", NULL); if (g_file_test(path, G_FILE_TEST_IS_REGULAR)) { gsize len = 0; gchar *content = NULL; if (g_file_get_contents(path, &content, &len, NULL)) { GActionMap *map = G_ACTION_MAP(app); gchar **lines = g_strsplit(content, "\n", -1); for (int i = 0; lines[i] != NULL; i++) { //; (gtk_accel_path "/Test/Print" "p") gchar *l = g_strstrip(lines[i]); if (l[0] == '\0' || l[0] == ';') continue; gchar *a = strchr(l, '"'); if (!a) continue; gchar *b = strchr(a + 1, '"'); if (!b) continue; gchar *c = strchr(b + 1, '"'); if (!c) continue; gchar *d = strchr(c + 1, '"'); if (!d) continue; gchar *kmp = g_strndup(a + 1, b - a - 1); gchar *acl = g_strndup(c + 1, d - c - 1); // find action by name if (kmp[0] != '\0') { if (g_getenv("AWF_DEBUG")) g_printf("accels_foundInFile: %s %s\n", kmp, acl); GAction *action = g_action_map_lookup_action(map, kmp); if (action != NULL) { gchar *full = g_strdup_printf("app.%s", kmp); const gchar *accels[2]; accels[0] = acl; accels[1] = NULL; if (g_getenv("AWF_DEBUG")) g_printf("accels_foundInMenu: %s %s %s\n", kmp, full, acl); gtk_application_set_accels_for_action(app, full, accels); // @todo does not update menubar g_free(full); } } g_free(kmp); g_free(acl); } g_strfreev(lines); g_free(content); } } g_free(path); } static void accels_change(GtkEventControllerKey *controller, guint keyval, guint keycode, GdkModifierType state) { // @todo not triggered when menu is open } static void accels_save() { // @todo } // dialogs static void dialog_close(GtkWidget *widget, GtkDialog *dialog) { // ok if (awf_trace) g_printf("» dialog_close()\n"); if (GTK_IS_WINDOW(widget)) gtk_window_destroy(GTK_WINDOW(widget)); else if (GTK_IS_WINDOW(dialog)) gtk_window_destroy(GTK_WINDOW(dialog)); } static void dialog_open() { // ok if (awf_trace) g_printf("» dialog_open()\n"); #if GTK_CHECK_VERSION (4,10,0) GtkFileDialog *dialog = gtk_file_dialog_new(); gtk_file_dialog_set_title(dialog, "GtkFileDialog:Open"); gtk_file_dialog_open_multiple(dialog, GTK_WINDOW(window), NULL, NULL, NULL); g_object_unref(dialog); #else GtkWidget *dialog = gtk_file_chooser_dialog_new( "GtkFileChooserDialog:Open", GTK_WINDOW(window), GTK_FILE_CHOOSER_ACTION_OPEN, _gtk("_Cancel"), GTK_RESPONSE_CANCEL, _gtk("_Open"), GTK_RESPONSE_ACCEPT, NULL); gtk_file_chooser_set_select_multiple(GTK_FILE_CHOOSER(dialog), TRUE); gtk_window_present(GTK_WINDOW(dialog)); g_signal_connect(dialog, "response", G_CALLBACK(dialog_close), NULL); #endif } static void dialog_save() { // ok if (awf_trace) g_printf("» dialog_save()\n"); #if GTK_CHECK_VERSION (4,10,0) GtkFileDialog *dialog = gtk_file_dialog_new(); gtk_file_dialog_set_title(dialog, "GtkFileDialog:Save"); gtk_file_dialog_save(dialog, GTK_WINDOW(window), NULL, NULL, NULL); g_object_unref(dialog); #else GtkWidget *dialog = gtk_file_chooser_dialog_new( "GtkFileChooserDialog:Save", GTK_WINDOW(window), GTK_FILE_CHOOSER_ACTION_SAVE, _gtk("_Cancel"), GTK_RESPONSE_CANCEL, _gtk("_Save"), GTK_RESPONSE_ACCEPT, NULL); gtk_window_present(GTK_WINDOW(dialog)); g_signal_connect(dialog, "response", G_CALLBACK(dialog_close), NULL); #endif } static void dialog_message() { // todo if (awf_trace) g_printf("» dialog_message()\n"); GtkWidget *dialog = gtk_message_dialog_new( GTK_WINDOW(window), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_INFO, GTK_BUTTONS_YES_NO, "GtkMessageDialog"); gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(dialog), _app("A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme.")); gtk_window_set_title(GTK_WINDOW(dialog), "GtkMessageDialog"); // dialog window #if GTK_CHECK_VERSION (4,10,0) gtk_window_set_modal(GTK_WINDOW(dialog), TRUE); gtk_window_set_transient_for(GTK_WINDOW(dialog), GTK_WINDOW(window)); #endif g_signal_connect(dialog, "response", G_CALLBACK(dialog_close), NULL); gtk_window_present(GTK_WINDOW(dialog)); } static void dialog_page_setup() { // ok if (awf_trace) g_printf("» dialog_page_setup()\n"); //GtkWidget *dialog = gtk_page_setup_unix_dialog_new("GtkPageSetupUnixDialog", GTK_WINDOW(window)); // // dialog window //#if GTK_CHECK_VERSION (4,10,0) // gtk_window_set_modal(GTK_WINDOW(dialog), TRUE); // gtk_window_set_transient_for(GTK_WINDOW(dialog), GTK_WINDOW(window)); //#endif // //g_signal_connect(dialog, "response", G_CALLBACK(dialog_close), NULL); //gtk_window_present(GTK_WINDOW(dialog)); GtkPageSetup *setup = gtk_print_run_page_setup_dialog(GTK_WINDOW(window), NULL, NULL); g_object_unref(setup); } static void dialog_print() { // ok if (awf_trace) g_printf("» dialog_print()\n"); //GtkWidget *dialog = gtk_print_unix_dialog_new("GtkPrintUnixDialog", GTK_WINDOW(window)); // // dialog window //#if GTK_CHECK_VERSION (4,10,0) // gtk_window_set_modal(GTK_WINDOW(dialog), TRUE); // gtk_window_set_transient_for(GTK_WINDOW(dialog), GTK_WINDOW(window)); //#endif // //g_signal_connect(dialog, "response", G_CALLBACK(dialog_close), NULL); //gtk_window_present(GTK_WINDOW(dialog)); GtkPrintOperation *op = gtk_print_operation_new(); gtk_print_operation_run(op, GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG, GTK_WINDOW(window), NULL); g_object_unref(op); } static void dialog_about() { // ok if (awf_trace) g_printf("» dialog_about()\n"); GdkPixbuf *pixbuf = NULL; #if defined (G_OS_WIN32) HICON hIcon = (HICON) LoadImage(GetModuleHandle(NULL), "IDI_ICON1", IMAGE_ICON, 48, 48, LR_DEFAULTSIZE); //if (hIcon) // pixbuf = gdk_win32_icon_to_pixbuf_libgtk_only(hIcon); #endif gchar *c_version; #ifdef __STDC_VERSION__ if (__STDC_VERSION__ >= 202311L) c_version = "C23"; else if (__STDC_VERSION__ >= 201710L) c_version = "C17"; else if (__STDC_VERSION__ >= 201112L) c_version = "C11"; else if (__STDC_VERSION__ >= 199901L) c_version = "C99"; else if (__STDC_VERSION__ >= 199409L) c_version = "C95"; else c_version = "C (unknown)"; #else c_version = "C89/C90"; #endif gchar *t1, *t2, *t3, *t4; gtk_show_about_dialog(GTK_WINDOW(window), "version", VERSION, "comments", t1 = g_strdup_printf("%s\n\n%s\n%s\n\n%s\n%s", _app("A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme."), t2 = g_strdup_printf(_app("Remove %s file"), "~/.awf-accels"), _app("to reset keyboard shortcuts."), t3 = g_strdup_printf(_app("compiled in %s with gtk %d.%d.%d and glib %d.%d.%d and pango %s"), c_version, GTK_MAJOR_VERSION, GTK_MINOR_VERSION, GTK_MICRO_VERSION, GLIB_MAJOR_VERSION, GLIB_MINOR_VERSION, GLIB_MICRO_VERSION, PANGO_VERSION_STRING), t4 = g_strdup_printf(_app(" started with gtk %d.%d.%d and glib %d.%d.%d and pango %s"), gtk_get_major_version(), gtk_get_minor_version(), gtk_get_micro_version(), glib_major_version, glib_minor_version, glib_micro_version, pango_version_string()) ), "website", "https://github.com/luigifab/awf-extended", "copyright", "Copyright © 2020-2026 Fabrice Creuzot (luigifab)\nCopyright © 2011-2017 Valère Monseur (valr)", "logo", pixbuf, "icon-name", pixbuf ? NULL : GETTEXT_PACKAGE, "logo-icon-name", pixbuf ? NULL : GETTEXT_PACKAGE, "license", _app("A widget factory 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."), "wrap-license", TRUE, NULL); g_free(t1); g_free(t2); g_free(t3); g_free(t4); #if defined (G_OS_WIN32) if (hIcon) { if (pixbuf) g_object_unref(pixbuf); DestroyIcon(hIcon); } #endif } static void dialog_inspector() { // ok if (awf_trace) g_printf("» dialog_inspector()\n"); gtk_window_set_interactive_debugging(TRUE); } static void dialog_calendar() { if (awf_trace) g_printf("» dialog_calendar()\n"); GtkWidget *dialog, *infobar, *label, *calendar, *area, *btn, *vbox = BOXV, *hbox; // GtkWindow:Modal or GtkDialog #if GTK_CHECK_VERSION (4,10,0) dialog = gtk_window_new(); gtk_widget_add_css_class(dialog, "dialog"); gtk_window_set_title(GTK_WINDOW(dialog), "GtkWindow:Modal"); #else dialog = gtk_dialog_new_with_buttons(NULL, GTK_WINDOW(window), GTK_DIALOG_DESTROY_WITH_PARENT, NULL, NULL); gtk_window_set_title(GTK_WINDOW(dialog), "GtkDialog"); #endif // info bars and calendar G_GNUC_BEGIN_IGNORE_DEPRECATIONS // GTK 4.10+ infobar = gtk_info_bar_new_with_buttons(_gtk("_OK"), GTK_RESPONSE_OK, NULL); gtk_info_bar_set_message_type(GTK_INFO_BAR(infobar), GTK_MESSAGE_INFO); label = gtk_label_new(_app("This is an info bar.")); gtk_info_bar_add_child(GTK_INFO_BAR(infobar), label); add_to(vbox, infobar, FALSE, FALSE, 0, 0); infobar = gtk_info_bar_new_with_buttons(_app("Ok"), GTK_RESPONSE_OK, NULL); gtk_info_bar_set_message_type(GTK_INFO_BAR(infobar), GTK_MESSAGE_QUESTION); label = gtk_label_new(_app("This is a question bar.")); gtk_info_bar_add_child(GTK_INFO_BAR(infobar), label); add_to(vbox, infobar, FALSE, FALSE, 0, 0); infobar = gtk_info_bar_new(); gtk_info_bar_set_message_type(GTK_INFO_BAR(infobar), GTK_MESSAGE_WARNING); label = gtk_label_new(_app("This is a warning bar.")); gtk_info_bar_add_child(GTK_INFO_BAR(infobar), label); add_to(vbox, infobar, FALSE, FALSE, 0, 0); infobar = gtk_info_bar_new(); gtk_info_bar_set_message_type(GTK_INFO_BAR(infobar), GTK_MESSAGE_ERROR); label = gtk_label_new(_app("This is an error bar.")); gtk_info_bar_add_child(GTK_INFO_BAR(infobar), label); add_to(vbox, infobar, FALSE, FALSE, 0, 0); calendar = gtk_calendar_new(); gtk_calendar_set_show_day_names(GTK_CALENDAR(calendar), TRUE); gtk_calendar_set_show_week_numbers(GTK_CALENDAR(calendar), TRUE); add_to(vbox, calendar, FALSE, FALSE, 0, 0); G_GNUC_END_IGNORE_DEPRECATIONS // dialog #if GTK_CHECK_VERSION (4,10,0) // encore une idée de génie de GTK area = BOXV; gtk_widget_add_css_class(area, "dialog-vbox"); gtk_window_set_child(GTK_WINDOW(dialog), area); add_to(area, vbox, TRUE, TRUE, 0, 5); // no padding // encore une idée de génie de GTK hbox = BOXH; gtk_widget_add_css_class(hbox, "dialog-action-area"); btn = gtk_button_new_with_mnemonic(_gtk("_Cancel")); g_signal_connect(btn, "clicked", G_CALLBACK(dialog_close), dialog); gtk_box_append(GTK_BOX(hbox), btn); btn = gtk_button_new_with_mnemonic(_gtk("_OK")); g_signal_connect(btn, "clicked", G_CALLBACK(dialog_close), dialog); gtk_box_append(GTK_BOX(hbox), btn); add_to(area, hbox, TRUE, TRUE, 0, 0); gtk_widget_set_halign(hbox, GTK_ALIGN_END); #else area = gtk_dialog_get_content_area(GTK_DIALOG(dialog)); add_to(area, vbox, TRUE, TRUE, 5, 5); gtk_dialog_add_button(GTK_DIALOG(dialog), _gtk("_Cancel"), GTK_RESPONSE_CANCEL); btn = gtk_dialog_add_button(GTK_DIALOG(dialog), _gtk("_OK"), GTK_RESPONSE_OK); #endif if (awf_csd) { gtk_window_set_decorated(GTK_WINDOW(dialog), TRUE); GtkWidget *headerbardialog = gtk_header_bar_new(); gtk_header_bar_set_show_title_buttons(GTK_HEADER_BAR(headerbardialog), TRUE); gtk_window_set_titlebar(GTK_WINDOW(dialog), headerbardialog); } // dialog window #if GTK_CHECK_VERSION (4,10,0) gtk_window_set_modal(GTK_WINDOW(dialog), TRUE); gtk_window_set_transient_for(GTK_WINDOW(dialog), GTK_WINDOW(window)); #else g_signal_connect(dialog, "response", G_CALLBACK(dialog_close), NULL); #endif gtk_widget_set_name(dialog, "AwfDialogWindow"); gtk_window_set_resizable(GTK_WINDOW(dialog), FALSE); gtk_widget_set_size_request(dialog, 350, -1); gtk_window_present(GTK_WINDOW(dialog)); gtk_widget_grab_focus(GTK_WIDGET(btn)); } static void dialog_scales() { if (awf_trace) g_printf("» dialog_scales()\n"); GtkWidget *dialog, *notebook, *area, *btn, *hbox; // notebook and scales notebook = gtk_notebook_new(); gtk_notebook_set_scrollable(GTK_NOTEBOOK(notebook), FALSE); gtk_notebook_set_tab_pos(GTK_NOTEBOOK(notebook), GTK_POS_TOP); create_scales(notebook, "Top", GTK_POS_TOP); create_scales(notebook, "Right", GTK_POS_RIGHT); create_scales(notebook, "Bottom", GTK_POS_BOTTOM); create_scales(notebook, "Left", GTK_POS_LEFT); // GtkWindow:Modal or GtkDialog #if GTK_CHECK_VERSION (4,10,0) dialog = gtk_window_new(); gtk_widget_add_css_class(dialog, "dialog"); gtk_window_set_title(GTK_WINDOW(dialog), "GtkWindow:Modal"); // encore une idée de génie de GTK area = BOXV; gtk_widget_add_css_class(area, "dialog-vbox"); gtk_window_set_child(GTK_WINDOW(dialog), area); add_to(area, notebook, TRUE, TRUE, 0, 5); // no padding // encore une idée de génie de GTK hbox = BOXH; gtk_widget_add_css_class(hbox, "dialog-action-area"); btn = gtk_button_new_with_mnemonic(_gtk("_Cancel")); g_signal_connect(btn, "clicked", G_CALLBACK(dialog_close), dialog); gtk_box_append(GTK_BOX(hbox), btn); btn = gtk_button_new_with_mnemonic(_gtk("_OK")); g_signal_connect(btn, "clicked", G_CALLBACK(dialog_close), dialog); gtk_box_append(GTK_BOX(hbox), btn); add_to(area, hbox, TRUE, TRUE, 0, 0); gtk_widget_set_halign(hbox, GTK_ALIGN_END); #else dialog = gtk_dialog_new_with_buttons(NULL, GTK_WINDOW(window), GTK_DIALOG_DESTROY_WITH_PARENT, NULL, NULL); gtk_window_set_title(GTK_WINDOW(dialog), "GtkDialog"); area = gtk_dialog_get_content_area(GTK_DIALOG(dialog)); add_to(area, notebook, TRUE, TRUE, 5, 5); gtk_dialog_add_button(GTK_DIALOG(dialog), _gtk("_Cancel"), 0); btn = gtk_dialog_add_button(GTK_DIALOG(dialog), _gtk("_OK"), 0); #endif if (awf_csd) { gtk_window_set_decorated(GTK_WINDOW(dialog), TRUE); GtkWidget *headerbardialog = gtk_header_bar_new(); gtk_header_bar_set_show_title_buttons(GTK_HEADER_BAR(headerbardialog), TRUE); gtk_window_set_titlebar(GTK_WINDOW(dialog), headerbardialog); } // dialog window #if GTK_CHECK_VERSION (4,10,0) gtk_window_set_modal(GTK_WINDOW(dialog), TRUE); gtk_window_set_transient_for(GTK_WINDOW(dialog), GTK_WINDOW(window)); #else g_signal_connect(dialog, "response", G_CALLBACK(dialog_close), NULL); #endif gtk_widget_set_name(dialog, "AwfDialogWindow"); gtk_window_set_resizable(GTK_WINDOW(dialog), FALSE); gtk_window_present(GTK_WINDOW(dialog)); gtk_widget_grab_focus(GTK_WIDGET(btn)); } // gtk-scroll-tabs for GTK 4.x | so same GTK 2.24 3.x 4.x & Qt 5.x 6.x // @see https://github.com/mate-desktop/mate-control-center/blob/master/capplets/common/capplet-util.c // for on_scrolltabs source function is capplet_dialog_page_scroll_event_cb // of mate-appearance-properties from mate-control-center, GNU GPL 2.0+ static gboolean on_scrolltabs(GtkEventControllerScroll *event, double dx, double dy, GtkWidget *widget) { // gtk-scroll-tabs for GTK 4.x | so same GTK 2.24 3.x 4.x & Qt 5.x 6.x GtkWidget *child, *event_widget, *action_widget; GtkNotebook *notebook; while (!GTK_IS_NOTEBOOK(widget)) widget = gtk_widget_get_parent(widget); notebook = GTK_NOTEBOOK(widget); child = gtk_notebook_get_nth_page(notebook, gtk_notebook_get_current_page(notebook)); if (child == NULL) return FALSE; // ignore scroll events from the content of the page event_widget = gtk_event_controller_get_widget(GTK_EVENT_CONTROLLER(event)); if (event_widget == NULL || event_widget == child || gtk_widget_is_ancestor(event_widget, child)) return FALSE; // and also from the action widgets action_widget = gtk_notebook_get_action_widget(notebook, GTK_PACK_START); if (event_widget == action_widget || (action_widget != NULL && gtk_widget_is_ancestor(event_widget, action_widget))) return FALSE; action_widget = gtk_notebook_get_action_widget(notebook, GTK_PACK_END); if (event_widget == action_widget || (action_widget != NULL && gtk_widget_is_ancestor(event_widget, action_widget))) return FALSE; if ((dy > 0) || (dx > 0)) gtk_notebook_next_page(notebook); else if ((dy < 0) || (dx < 0)) gtk_notebook_prev_page(notebook); return TRUE; } // yoloawf-extended-4.1.0/src/awf-qt5.cpp000066400000000000000000002612601517644610000166610ustar00rootroot00000000000000/** * Forked M/10/03/2020 * Updated V/01/05/2026 * * Copyright 2020-2026 | Fabrice Creuzot (luigifab) * https://github.com/luigifab/awf-extended * https://www.luigifab.fr/gtkqt/awf-extended * * Forked from * Copyright 2011-2017 | Valère Monseur (valr) * https://github.com/valr/awf * * Forked from * AWF is originally based on the code from The Widget Factory * created by Richard Stellingwerff * * This program is free software, you can redistribute it or modify * it under the terms of the GNU General Public License (GPL) as published * by the free software foundation, either version 3 of the license, or * (at your option) any later version. * * This program is distributed in the hope that 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 (GPL) for more details. * * * Translations update: * https://github.com/qt/qttranslations/blob/v6.11.0/translations/qtbase_fr.ts * xgettext --keyword=_app -d awf -o src/awf.pot -k_ -s src/awf-*.c* * msgmerge src/po/fr.po src/awf.pot -o src/po/fr.po * msgfmt src/po/fr.po -o src/fr/LC_MESSAGES/awf.mo * * Tested with build.sh (via VirtualBox 7) with: * Debian Testing 64 (1536 MB) Qt 5.15/6.10 * Fedora Rawhide 64 (1536 MB) Qt 5.15/6.11 * Ubuntu 26.04 Resolute Raccoon 64 (4096 MB) Qt 5.15/6.10 * Ubuntu 25.10 Questing Quokka 64 (4096 MB) Qt 5.15/6.9 * Ubuntu 25.04 Plucky Puffin 64 (4096 MB) Qt 5.15/6.8 * Ubuntu 24.10 Oracular Oriole 64 (4096 MB) Qt 5.15/6.6 * Ubuntu 24.04 Noble Numbat 64 (4096 MB) Qt 5.15/6.4 * Ubuntu 23.10 Mantic Minotaur 64 (3072 MB) Qt 5.15/6.4* * Ubuntu 23.04 Lunar Lobster 64 (3072 MB) Qt 5.15/6.4* * Ubuntu 22.10 Kinetic Kudu 64 (2176 MB) Qt 5.15/6.3 * Ubuntu 22.04 Jammy Jellyfish 64 (2176 MB) Qt 5.15/6.2 (ko) * Windows XP SP3 MinGW/msys (2048 MB) Qt 5.3 */ #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wdeprecated-declarations" #if defined (Q_OS_WIN) || defined (_WIN32) #include #include #include #if QT_VERSION >= QT_VERSION_CHECK(5,14,0) #include #else #include #endif #endif #include #include #include #include #include #include #include #include #if QT_VERSION >= QT_VERSION_CHECK(5,2,0) #include #include #endif #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #if defined (Q_OS_UNIX) #include #endif #pragma GCC diagnostic pop #define GETTEXT_PACKAGE "awf-qt5" #ifndef QT_VERSION_MAJOR #define QT_VERSION_MAJOR ((QT_VERSION >> 16) & 0xFF) #endif #ifndef QT_VERSION_MINOR #define QT_VERSION_MINOR ((QT_VERSION >> 8) & 0xFF) #endif #ifndef QT_VERSION_PATCH #define QT_VERSION_PATCH (QT_VERSION & 0xFF) #endif #define AWF_OPEN QStringLiteral("/Test/Open") #define AWF_SAVE QStringLiteral("/Test/Save") #define AWF_REFR QStringLiteral("/Test/Refresh") #define AWF_RECE QStringLiteral("/Test/Recent") #define AWF_CALE QStringLiteral("/Test/Calendar") #define AWF_SCAL QStringLiteral("/Test/Scales") #define AWF_PROP QStringLiteral("/Test/Properties") #define AWF_PRSE QStringLiteral("/Test/PrintSetup") #define AWF_PRIN QStringLiteral("/Test/Print") #define AWF_MCUT QStringLiteral("/Test/More/Cut") #define AWF_MCOP QStringLiteral("/Test/More/Copy") #define AWF_MPAS QStringLiteral("/Test/More/Paste") #define AWF_CLOS QStringLiteral("/Test/Close") #define AWF_QUIT QStringLiteral("/Test/Quit") #define AWF_INSP QStringLiteral("/Test/Inspector") #define AWF_ABOU QStringLiteral("/Test/About") #define AWF_ACCEL_OPEN QKeySequence("Ctrl+O") #define AWF_ACCEL_SAVE QKeySequence("Ctrl+S") #define AWF_ACCEL_REFR QKeySequence("F5") #define AWF_ACCEL_RECE QKeySequence() #define AWF_ACCEL_CALE QKeySequence() #define AWF_ACCEL_SCAL QKeySequence() #define AWF_ACCEL_PROP QKeySequence("Alt+Return") #define AWF_ACCEL_PRSE QKeySequence("Ctrl+Shift+P") #define AWF_ACCEL_PRIN QKeySequence("Ctrl+P") #define AWF_ACCEL_MCUT QKeySequence("Ctrl+X") #define AWF_ACCEL_MCOP QKeySequence("Ctrl+C") #define AWF_ACCEL_MPAS QKeySequence("Ctrl+V") #define AWF_ACCEL_CLOS QKeySequence("Ctrl+W") #define AWF_ACCEL_QUIT QKeySequence("Ctrl+Q") #define AWF_ACCEL_INSP QKeySequence("F12") #define AWF_ACCEL_ABOU QKeySequence("F1") // @see https://stackoverflow.com/a/10018581/2980105 #define _app(x) QString::fromUtf8(gettext(x)).replace('_', '&') #define _qt(y, x) QCoreApplication::translate(y, x) // global variables static bool awf_debug = qEnvironmentVariableIsSet("AWF_DEBUG"); static bool awf_trace = qEnvironmentVariableIsSet("AWF_TRACE"); static bool awf_gqss = false; constexpr std::nullptr_t null = nullptr; static QStringList list_system_theme; static QStringList list_user_theme; static QMainWindow *window = null; static QDialog *inspector = null; static QLineEdit *toolbarentry = null; static QProgressBar *progress1 = null, *progress2 = null, *progress3 = null, *progress4 = null, *progress8 = null, *progress9 = null; static QSlider *scale1 = null, *scale2 = null, *scale3 = null, *scale4 = null, *scale5 = null, *scale6 = null, *scale7 = null; static QTabWidget *notebook1 = null, *notebook2 = null, *notebook3 = null, *notebook4 = null; static int current_direction = 0; static QString current_theme = "auto"; static QString opt_theme = "auto"; static QString opt_screenshot = ""; static QString original_style = ""; static bool allow_update_values = true; static bool must_save_accels = false; // gtk_style_context_to_string static QString generateTooltipRecursive(QWidget *widget) { if (!widget) return ""; QString tooltip = widget->metaObject()->className(); if (widget->property("textVisible").isValid()) tooltip += "[textVisible=bool]"; if (widget->property("hasMenu").isValid()) tooltip += "[hasMenu=bool]"; if (widget->property("isInverted").isValid()) tooltip += "[isInverted=bool]"; if (widget->property("hasTicks").isValid()) tooltip += "[hasTicks=" + widget->property("hasTicks").toString() + "]"; if (!widget->objectName().isEmpty()) tooltip += "#" + widget->objectName(); if (widget->property("class").isValid()) tooltip += "." + widget->property("class").toString(); QString style = widget->styleSheet().trimmed(); if (!style.isEmpty()) tooltip += "\n" + style; for (QObject *child : widget->children()) { if (QWidget *childWidget = qobject_cast(child)) tooltip += "\n " + generateTooltipRecursive(childWidget).replace("\n", "\n "); } return tooltip; } class AwfHBoxLayout : public QHBoxLayout { public: using QHBoxLayout::QHBoxLayout; void addWidget(QWidget *widget) { widget->setToolTip(generateTooltipRecursive(widget)); QHBoxLayout::addWidget(widget); } }; class AwfVBoxLayout : public QVBoxLayout { public: using QVBoxLayout::QVBoxLayout; void addWidget(QWidget *widget) { widget->setToolTip(generateTooltipRecursive(widget)); QVBoxLayout::addWidget(widget); } }; class AwfToolBar : public QToolBar { public: using QToolBar::QToolBar; QAction* addWidget(QWidget *widget) { widget->setToolTip(generateTooltipRecursive(widget)); return QToolBar::addWidget(widget); } }; // global functions static QIcon get_icon(QString name); static void awf_load_theme(QStringList& themes, QString directory); static void update_text_direction(int direction); static void update_theme(QString new_theme); static void update_statusbar(QString message); static void update_values(QAbstractSlider *range); static void update_widgets(); static void display_notification(); static bool findAndCheckMenu(QList actions, QString search); static void on_sighup(int signum); static bool take_screenshot(); static void create_window(); static void create_widgets(AwfVBoxLayout *root); static void create_toolbar(AwfToolBar *toolbar); static void create_combos_entries(AwfVBoxLayout *root); static void create_spinbuttons(AwfHBoxLayout *root); static void create_checkbuttons(AwfVBoxLayout *root); static void create_radiobuttons(AwfVBoxLayout *root); static void create_otherbuttons(AwfVBoxLayout *root1, AwfHBoxLayout *root2, AwfHBoxLayout *root3, AwfHBoxLayout *root4, AwfHBoxLayout *root5); static void create_progressbars(AwfVBoxLayout *root1, AwfHBoxLayout *root2, AwfHBoxLayout *root3, AwfVBoxLayout *root4); static void create_labels(AwfHBoxLayout *root); static void create_spinners(AwfHBoxLayout *root); static void create_expander(AwfVBoxLayout *root); static void create_frames(AwfHBoxLayout *root1, AwfHBoxLayout *root2); static void create_notebooks(AwfHBoxLayout *root1, AwfHBoxLayout *root2); static void create_notebook_tab(QTabWidget *notebook, QString text, QWidget *content, bool close); static void create_treview(AwfVBoxLayout *root); static void create_scales(); static QSlider* create_horizontal_scale(int value, bool draw, bool inverted, QSlider::TickPosition position); static QSlider* create_vertical_scale(int value, bool draw, bool inverted, QSlider::TickPosition position); static void create_traditional_menubar(QMenuBar *root); static void accels_load(); static bool accels_change(QObject *obj, QEvent *event); static void accels_save(); static QAction* create_menuitem_check(QMenu *menu, QString text, bool chk, bool ist, bool dsb); static QAction* create_menuitem_radio(QMenu *menu, QString text, bool chk, bool ist, bool dsb, QActionGroup *group); static QAction* create_menuitem(QMenu *menu, QIcon icon, QString text, bool dsb, QKeySequence acl, QString kmp, std::function function); static void dialog_open(); static void dialog_save(); static void dialog_message(); static void dialog_page_setup(); static void dialog_print(); static void dialog_about(); static void dialog_inspector(); static void dialog_calendar(); static void dialog_scales(); // other class AwfMainWindow : public QMainWindow { Q_OBJECT protected: void changeEvent(QEvent *e) override { if (qEnvironmentVariableIsSet("GQSS_SIGNAL") && (e->type() == QEvent::StyleChange)) { QString new_theme = QString::fromUtf8(qgetenv("GQSS_THEME")); if (awf_debug) printf("SIGNAL_theme_update: %s\n", new_theme.toUtf8().constData()); findAndCheckMenu(menuBar()->actions().mid(1), new_theme); } QMainWindow::changeEvent(e); } }; class AwfTreeView : public QTreeView { Q_OBJECT Q_PROPERTY(QString columnWidths READ getColumnWidths WRITE setColumnWidths) public: explicit AwfTreeView(QWidget* parent = null) : QTreeView(parent) { /* connect(header(), &QHeaderView::sortIndicatorChanged, this, [this](int column, Qt::SortOrder) { QString normalColor = getSortedColumnColor(), altColor = getAlternateSortedColumnColor(); if (!normalColor.isEmpty()) { QAbstractItemModel* m = model(); QVariant color; for (int c = 0; c < m->columnCount(); ++c) for (int r = 0; r < m->rowCount(); ++r) m->setData(m->index(r, c), QVariant(), Qt::BackgroundRole); for (int r = 0; r < m->rowCount(); ++r) { color = QVariant(QColor(altColor.isEmpty() ? normalColor : ((r % 2 == 0) ? normalColor : altColor))); m->setData(m->index(r, column), color, Qt::BackgroundRole); } } }); */ } QString getColumnWidths() { QStringList list; for (int i = 0; i < 11; ++i) list << QString::number(columnWidth(i)); return list.join(","); } void setColumnWidths(QString widths) { #if QT_VERSION >= QT_VERSION_CHECK(5,14,0) QTimer::singleShot(0, this, [this, widths]() { // QTimer mainly for Qt 6.6/6.9 QStringList list = widths.split(",", Qt::SkipEmptyParts); for (int i = 0; i < list.size() && i < 11; ++i) setColumnWidth(i, list[i].trimmed().toInt()); }); #elif QT_VERSION >= QT_VERSION_CHECK(5,4,0) QTimer::singleShot(0, this, [this, widths]() { // QTimer mainly for Qt 6.6/6.9 QStringList list = widths.split(",", QString::SkipEmptyParts); for (int i = 0; i < list.size() && i < 11; ++i) setColumnWidth(i, list[i].trimmed().toInt()); }); #else QStringList list = widths.split(",", QString::SkipEmptyParts); for (int i = 0; i < list.size() && i < 11; ++i) setColumnWidth(i, list[i].trimmed().toInt()); #endif } }; class AwfProgressDelegate : public QStyledItemDelegate { public: AwfProgressDelegate(QAbstractItemView* view) : QStyledItemDelegate(view) { m_view = view; m_pbar = new QProgressBar(m_view->viewport()); m_pbar->setOrientation(Qt::Horizontal); m_pbar->setMinimum(0); m_pbar->setMaximum(100); m_pbar->setTextVisible(true); m_pbar->hide(); } void paint(QPainter *painter, const QStyleOptionViewItem &opt, const QModelIndex &idx) const override { opt.widget->style()->drawPrimitive(QStyle::PE_PanelItemViewItem, &opt, painter, opt.widget); if (!(opt.state & QStyle::State_Selected)) { QColor bg = idx.data(Qt::BackgroundRole).value(); if (bg.isValid()) painter->fillRect(opt.rect, bg); } QLocale locale; bool isfr = (locale.language() == QLocale::French) && (locale.country() == QLocale::France); QStyleOptionProgressBar option; option.initFrom(m_pbar); option.rect = opt.rect; option.minimum = m_pbar->minimum(); option.maximum = m_pbar->maximum(); option.progress = idx.data().toInt(); option.textVisible = m_pbar->isTextVisible(); option.text = QString::number(idx.data().toInt()) + (isfr ? " %" : "%"); option.state |= QStyle::StateFlag::State_Horizontal; if (!idx.flags().testFlag(Qt::ItemIsEnabled)) option.state &= ~QStyle::State_Enabled; if (opt.state & QStyle::State_Selected) option.state |= QStyle::State_Selected; m_pbar->style()->drawControl(QStyle::CE_ProgressBar, &option, painter, m_pbar); } private: QAbstractItemView* m_view; QProgressBar* m_pbar; }; class AwfRadioDelegate : public QStyledItemDelegate { public: AwfRadioDelegate(QAbstractItemView* view) : QStyledItemDelegate(view) { m_view = view; m_radio = new QRadioButton(m_view->viewport()); m_radio->hide(); } void paint(QPainter *painter, const QStyleOptionViewItem &opt, const QModelIndex &idx) const override { opt.widget->style()->drawPrimitive(QStyle::PE_PanelItemViewItem, &opt, painter, opt.widget); if (!(opt.state & QStyle::State_Selected)) { QColor bg = idx.data(Qt::BackgroundRole).value(); if (bg.isValid()) painter->fillRect(opt.rect, bg); } QStyleOptionButton option; option.initFrom(m_radio); option.rect = opt.rect; option.state |= (idx.data(Qt::CheckStateRole).toInt() == Qt::Checked) ? QStyle::State_On : QStyle::State_Off; if (!idx.flags().testFlag(Qt::ItemIsEnabled)) option.state &= ~QStyle::State_Enabled; if (opt.state & QStyle::State_Selected) option.state |= QStyle::State_Selected; m_radio->style()->drawControl(QStyle::CE_RadioButton, &option, painter, m_radio); } private: QAbstractItemView* m_view; QRadioButton* m_radio; }; class AwfShortcutFilter : public QObject { public: bool eventFilter(QObject *obj, QEvent *event) override { return (accels_change(obj, event)) ? true : QObject::eventFilter(obj, event); } }; // run run run int main(int argc, char **argv) { if (awf_trace) printf("» main()\n"); int opt = 0, status = 0; QApplication app(argc, argv); awf_gqss = qEnvironmentVariableIsSet("GQSS_SET"); if (awf_gqss) { // load available system themes (/usr/local/share/themes && /usr/share/themes) for (QString dir : QStandardPaths::standardLocations(QStandardPaths::GenericDataLocation)) awf_load_theme(list_system_theme, QDir(dir).filePath("themes")); list_system_theme.sort(Qt::CaseInsensitive); list_system_theme.push_front("None"); // load available user themes (HOME/.local/share/themes && HOME/.themes) awf_load_theme(list_user_theme, QDir(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation)).filePath("themes")); awf_load_theme(list_user_theme, QDir(QDir::homePath()).filePath(".themes")); list_user_theme.sort(Qt::CaseInsensitive); } // locale QString appDir = QCoreApplication::applicationDirPath(); QLocale::setDefault(QLocale::system()); QTranslator *qtTr = new QTranslator(qApp); if (qtTr->load("qt_" + QLocale::system().name(), QLibraryInfo::location(QLibraryInfo::TranslationsPath))) qApp->installTranslator(qtTr); else if (qtTr->load("qt_" + QLocale::system().name(), appDir + "/translations")) qApp->installTranslator(qtTr); QTranslator *qtBaseTr = new QTranslator(qApp); if (qtBaseTr->load("qtbase_" + QLocale::system().name(), QLibraryInfo::location(QLibraryInfo::TranslationsPath))) qApp->installTranslator(qtBaseTr); else if (qtBaseTr->load("qtbase_" + QLocale::system().name(), appDir + "/translations")) qApp->installTranslator(qtBaseTr); setlocale(LC_ALL, ""); #if defined (Q_OS_WIN) || defined (_WIN32) bindtextdomain(GETTEXT_PACKAGE, (appDir + "/share/locale").toLocal8Bit().constData()); #endif bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8"); textdomain(GETTEXT_PACKAGE); // init static struct option options[] = { {"help", no_argument, null, 'x'}, {"version", no_argument, null, 'v'}, {"list-themes", no_argument, null, 'l'}, {"theme", required_argument, null, 't'}, {"screenshot", required_argument, null, 's'}, {"ltr", no_argument, null, 'y'}, {"rtl", no_argument, null, 'z'}, {null, 0, null, 0} }; QString cpp; while ((opt = getopt_long(argc, argv, "hvlt:s:xyz", options, null)) != -1) { switch (opt) { // --version -v case 'v': printf("%s\n", VERSION); return status; // --list-themes -l case 'l': for (QString theme : list_system_theme) printf("%s\n", theme.toUtf8().constData()); for (QString theme : list_user_theme) printf("%s\n", theme.toUtf8().constData()); return status; // --theme -t case 't': if (list_system_theme.contains(optarg) || list_user_theme.contains(optarg)) opt_theme = optarg; break; // --screenshot -s case 's': opt_screenshot = optarg; break; // --ltr case 'y': current_direction = 1; // Qt::LeftToRight break; // --rtl case 'z': current_direction = 2; // Qt::RightToLeft break; // --help -h case 'x': case 'h': default: switch (__cplusplus) { case 199711L: cpp = "C++98"; break; case 201103L: cpp = "C++11"; break; case 201402L: cpp = "C++14"; break; case 201703L: cpp = "C++17"; break; case 202002L: cpp = "C++20"; break; case 202302L: cpp = "C++23"; break; default: cpp = "C++ (" + QString::number(__cplusplus) + ")"; break; } printf("%s\n\n %s %s\n %s %s\n %s %s\n %s %s\n %s %s\n %s %s\n\n%s\n%s\n", qPrintable(QString(_app("A widget factory - Qt %1.%2")).arg(QT_VERSION_MAJOR).arg(QT_VERSION_MINOR)), "-v ", qPrintable(_app("Show version number.")), "-l ", qPrintable(_app("List available themes.")), "-t ", qPrintable(_app("Run with the specified theme.")), "-s ", qPrintable(QString(_app("Run and save a png screenshot on %1.")).arg("SIGHUP")), "--ltr ", qPrintable(_app("Run with text from left to right (Left-To-Right).")), "--rtl ", qPrintable(_app("Run with text from right to left (Right-To-Left).")), qPrintable(QString(_app("compiled in %1 with qt %2.%3.%4")).arg(cpp).arg(QT_VERSION_MAJOR).arg(QT_VERSION_MINOR).arg(QT_VERSION_PATCH)), qPrintable(QString(_app(" started with qt %1")).arg(qVersion()))); return status; } } // create and show window #if QT_VERSION >= QT_VERSION_CHECK(5,2,0) QCommandLineParser parser; parser.setApplicationDescription(_app("A widget factory - Qt %1.%2").arg(QT_VERSION_MAJOR).arg(QT_VERSION_MINOR)); parser.addHelpOption(); parser.addVersionOption(); // << "v" << "version", _app("Show version number."))); parser.addOption(QCommandLineOption(QStringList() << "l" << "list-themes", _app("List available themes."))); parser.addOption(QCommandLineOption(QStringList() << "t" << "theme", _app("Run with the specified theme."), "theme")); parser.addOption(QCommandLineOption(QStringList() << "s" << "screenshot", QString(_app("Run and save a png screenshot on %1.").arg("SIGHUP")), "filename")); parser.addOption(QCommandLineOption(QStringList() << "y" << "ltr", _app("Run with text from left to right (Left-To-Right)."))); parser.addOption(QCommandLineOption(QStringList() << "z" << "rtl", _app("Run with text from right to left (Right-To-Left)."))); parser.process(app); #endif create_window(); return app.exec(); } static QIcon get_icon(QString name) { static const QHash map = { {"application-exit", QStyle::SP_DialogCloseButton}, {"dialog-close", QStyle::SP_DialogCloseButton}, {"dialog-information", QStyle::SP_MessageBoxInformation}, {"document-open", QStyle::SP_DialogOpenButton}, {"document-save", QStyle::SP_DialogSaveButton}, {"help-about", QStyle::SP_MessageBoxQuestion}, {"help-browser", QStyle::SP_MessageBoxQuestion}, {"view-refresh", QStyle::SP_BrowserReload}, {"window-close", QStyle::SP_DialogCloseButton}, }; QIcon icon = QIcon::fromTheme(name); if (icon.isNull()) icon = qApp->style()->standardIcon(map.value(name, QStyle::SP_FileIcon)); return icon; } static void awf_load_theme(QStringList& themes, QString directory) { if (awf_trace) printf("» awf_load_theme(%s)\n", directory.toUtf8().constData()); QDir dir(directory); if (dir.exists()) { if (awf_debug) printf("themes_dir: %s\n", directory.toUtf8().constData()); QStringList entries = dir.entryList(QDir::Dirs | QDir::NoDotAndDotDot); for (QString theme : entries) { if (QDir(QDir(dir.filePath(theme)).filePath("qt5")).exists()) themes.append(theme); } } } static void update_text_direction(int direction) { // ok if (awf_trace) printf("» update_text_direction()\n"); if ((direction == 1) && (qApp->layoutDirection() != Qt::LeftToRight)) { current_direction = 1; notebook3->setTabPosition(QTabWidget::West); notebook4->setTabPosition(QTabWidget::East); qApp->setLayoutDirection(Qt::LeftToRight); } else if ((direction == 2) && (qApp->layoutDirection() != Qt::RightToLeft)) { current_direction = 2; notebook3->setTabPosition(QTabWidget::East); notebook4->setTabPosition(QTabWidget::West); qApp->setLayoutDirection(Qt::RightToLeft); } } static void update_theme(QString new_theme) { // ok if (awf_gqss) { if (awf_trace) printf("» update_theme(%s)*\n", new_theme.toUtf8().constData()); if (awf_debug) printf("update_theme_before: %s » %s\n", current_theme.toUtf8().constData(), new_theme.toUtf8().constData()); if (new_theme == "refresh") { qputenv("GQSS_RELOAD", "yes"); QApplication::style()->polish(qApp); QApplication::processEvents(); window->adjustSize(); if (!opt_screenshot.isEmpty()) { if (take_screenshot()) update_statusbar(_app("Theme %1 reloaded, then screenshot saved (%2).").arg(current_theme).arg(opt_screenshot)); else update_statusbar(_app("Theme %1 reloaded (error saving screenshot).").arg(current_theme)); } else { update_statusbar(_app("Theme %1 reloaded.").arg(current_theme)); } if (awf_debug) printf("update_theme_after1: %s\n", current_theme.toUtf8().constData()); } else if (new_theme == "auto") { current_theme = QString::fromUtf8(qgetenv("GQSS_THEME")); window->adjustSize(); if (awf_debug) printf("update_theme_after2: %s\n", current_theme.toUtf8().constData()); } else if (current_theme != new_theme) { current_theme = new_theme; qputenv("GQSS_RELOAD", "yes"); qputenv("GQSS_THEME", new_theme.toUtf8()); if (!qEnvironmentVariableIsSet("GQSS_SIGNAL")) { // useless for changeEvent (notify_updated_gtktheme) QApplication::style()->polish(qApp); QApplication::processEvents(); } window->adjustSize(); update_statusbar(_app("Theme %1 loaded.").arg(current_theme)); if (awf_debug) printf("update_theme_after3: %s\n", current_theme.toUtf8().constData()); } original_style = "!^!"; } } static void update_statusbar(QString message) { // ok if (awf_trace) printf("» update_statusbar(%s)\n", message.toUtf8().constData()); if (window && window->statusBar()) { QStatusBar *statusbar = window->statusBar(); statusbar->showMessage(QTime::currentTime().toString("HH:mm:ss") + " - " + message, 0); QVariantAnimation *anim = new QVariantAnimation(statusbar); anim->setStartValue(QColor(255,255,0,255)); // yellow anim->setEndValue(window->palette().color(QPalette::Window)); anim->setDuration(1000); QObject::connect(anim, &QVariantAnimation::valueChanged, [statusbar](const QVariant &value) { QColor c = value.value(); statusbar->setStyleSheet(QString("background-color:rgba(%1,%2,%3,%4);").arg(c.red()).arg(c.green()).arg(c.blue()).arg(c.alpha())); }); QObject::connect(anim, &QVariantAnimation::finished, [statusbar]() { statusbar->setStyleSheet(""); }); anim->start(QAbstractAnimation::DeleteWhenStopped); } } static void update_values(QAbstractSlider *range) { // ok if (allow_update_values) { // range(0..100) allow_update_values = false; int value = range->value(); //if (awf_trace) // printf("» update_values(%d)*\n", value); progress1->setValue(value); progress2->setValue(value); progress3->setValue(value); progress4->setValue(value); progress8->setValue(value); progress9->setValue(value); if (scale1 != range) scale1->setValue(value); if (scale2 != range) scale2->setValue(value); if (scale3 != range) scale3->setValue(value); if (scale4 != range) scale4->setValue(value); if (scale5 != range) scale5->setValue(value); if (scale6 != range) scale6->setValue(value); if (scale7 != range) scale7->setValue(value); // text progress8->setTextVisible(value > 50); progress8->setProperty("textVisible", value > 50); progress8->style()->polish(progress8); progress8->updateGeometry(); progress9->setTextVisible(value > 50); progress9->setProperty("textVisible", value > 50); progress9->style()->polish(progress9); progress9->updateGeometry(); allow_update_values = true; } } static void update_widgets() { // ok if (awf_trace) printf("» update_widgets()\n"); // function called when user click on [+] toolbar button // when toggle = true, the [+] toolbar button is NOT checked int width1, width2, height1, height2; bool toggle = notebook1->tabBar()->usesScrollButtons(); // show progressbar in toolbar and statusbar when [+] toolbar button is NOT checked if (toggle) { qobject_cast(progress8->property("action").value())->setVisible(false); progress9->setVisible(false); qobject_cast(toolbarentry->property("action").value())->setVisible(false); } else { progress8->setValue(0); progress9->setValue(0); qobject_cast(progress8->property("action").value())->setVisible(true); progress9->setVisible(true); qobject_cast(toolbarentry->property("action").value())->setVisible(true); } // enabled or not scale2->setEnabled(toggle); scale4->setEnabled(toggle); scale6->setEnabled(toggle); scale7->setEnabled(toggle); progress2->setEnabled(toggle); progress4->setEnabled(toggle); // text or not progress1->setTextVisible(!toggle); progress1->setProperty("textVisible", !toggle); progress1->style()->polish(progress1); progress1->updateGeometry(); progress2->setTextVisible(!toggle); progress2->setProperty("textVisible", !toggle); progress2->style()->polish(progress2); progress2->updateGeometry(); progress3->setTextVisible(!toggle); progress3->setProperty("textVisible", !toggle); progress3->style()->polish(progress3); progress3->updateGeometry(); progress4->setTextVisible(!toggle); progress4->setProperty("textVisible", !toggle); progress4->style()->polish(progress4); progress4->updateGeometry(); progress8->setTextVisible(false); progress8->setProperty("textVisible", false); progress8->style()->polish(progress8); progress8->updateGeometry(); progress9->setTextVisible(false); progress9->setProperty("textVisible", false); progress9->style()->polish(progress9); progress9->updateGeometry(); // scrollable or not if (toggle) { notebook1->tabBar()->setUsesScrollButtons(false); notebook2->tabBar()->setUsesScrollButtons(false); notebook3->tabBar()->setUsesScrollButtons(false); notebook4->tabBar()->setUsesScrollButtons(false); notebook1->setMinimumWidth(width1 = notebook1->tabBar()->sizeHint().width()); notebook2->setMinimumWidth(width2 = notebook2->tabBar()->sizeHint().width()); notebook3->setMinimumHeight(height1 = notebook3->tabBar()->sizeHint().height()); notebook4->setMinimumHeight(height2 = notebook4->tabBar()->sizeHint().height()); } else { notebook1->setMinimumWidth(width1 = notebook1->tabBar()->sizeHint().width() / 2); notebook2->setMinimumWidth(width2 = notebook2->tabBar()->sizeHint().width() / 2); notebook3->setMinimumHeight(height1 = notebook3->tabBar()->sizeHint().height() / 2); notebook4->setMinimumHeight(height2 = notebook4->tabBar()->sizeHint().height() / 2); notebook1->tabBar()->setUsesScrollButtons(true); notebook2->tabBar()->setUsesScrollButtons(true); notebook3->tabBar()->setUsesScrollButtons(true); notebook4->tabBar()->setUsesScrollButtons(true); } // auto width and height @todo notebook1->updateGeometry(); notebook2->updateGeometry(); notebook3->updateGeometry(); notebook4->updateGeometry(); QSplitter *hpane, *vpane; QWidget *widget = notebook1->parentWidget(); while (widget) { hpane = qobject_cast(widget); if (hpane) break; widget = widget->parentWidget(); } hpane->setSizes({qMax(width1, width2), 10000}); hpane->updateGeometry(); widget = widget->parentWidget(); while (widget) { vpane = qobject_cast(widget); if (vpane) break; widget = widget->parentWidget(); } QList sizes = vpane->sizes(); sizes[1] = qMax(height1, height2); vpane->setSizes(sizes); vpane->updateGeometry(); window->setMinimumHeight(0); window->setMinimumWidth(0); window->adjustSize(); } static void display_notification() { // ok if (awf_trace) printf("» display_notification()\n"); #if defined (Q_OS_UNIX) signal(SIGCHLD, SIG_IGN); if (fork() == 0) { execlp("notify-send", "notify-send", "-i", "dialog-information", "-t", "50000", "--action", _qt("QShortcut", "Close").toUtf8().constData(), GETTEXT_PACKAGE, _app("A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme.").toUtf8().constData(), null); _exit(1); } #endif } static bool findAndCheckMenu(QList actions, QString search) { // ok if (awf_trace) printf("» findAndCheckMenu()\n"); for (QAction *action : actions) { if (action->menu()) { // process submenu if (findAndCheckMenu(action->menu()->actions(), search)) return true; } else if (action->isEnabled() && (action->text() == search)) { // check menuitem action->trigger(); // set state checked and activate action return true; } } return false; } static void on_sighup(int signum) { // ok if (awf_trace) printf("» on_sighup()\n"); #if QT_VERSION >= QT_VERSION_CHECK(5,10,0) QMetaObject::invokeMethod(qApp, [](){ update_theme("refresh"); }, Qt::QueuedConnection); #elif QT_VERSION >= QT_VERSION_CHECK(5,4,0) QTimer::singleShot(0, [](){ update_theme("refresh"); }); #else update_theme("refresh"); // best effort #endif } static bool take_screenshot() { // ok (without window borders) if (awf_trace) printf("» take_screenshot()\n"); QPixmap pixmap = window->grab(); return pixmap.save(opt_screenshot, "PNG", 0); // 0 = 9 } // layout and widgets static void create_window() { if (awf_trace) printf("» create_window()\n"); // window QApplication::setApplicationName("awf"); window = new AwfMainWindow; window->setWindowTitle(_app("A widget factory - Qt %1.%2").arg(QT_VERSION_MAJOR).arg(QT_VERSION_MINOR)); window->setObjectName("AwfMainWindow"); #if defined (Q_OS_UNIX) QApplication::setWindowIcon(QIcon::fromTheme(GETTEXT_PACKAGE)); window->setWindowIcon(QIcon::fromTheme(GETTEXT_PACKAGE)); #elif (defined (Q_OS_WIN) || defined (_WIN32)) && (QT_VERSION >= QT_VERSION_CHECK(5,2,0)) HICON hIcon = (HICON) LoadImage(GetModuleHandle(nullptr), "IDI_ICON1", IMAGE_ICON, 48, 48, LR_DEFAULTSIZE); QIcon icon = QIcon(QtWin::fromHICON(hIcon)); QApplication::setWindowIcon(icon); window->setWindowIcon(icon); DestroyIcon(hIcon); #endif // theme auto or from command line if (awf_gqss) update_theme((current_theme == opt_theme) ? current_theme : opt_theme); if (current_direction == 0) current_direction = (qApp->layoutDirection() == Qt::LeftToRight) ? 1 : 2; // layout AwfVBoxLayout *layout = new AwfVBoxLayout; QWidget *central = new QWidget; window->setCentralWidget(central); layout->setSpacing(0); layout->setContentsMargins(0,0,0,0); create_widgets(layout); central->setLayout(layout); QMenuBar *menubar = window->menuBar(); menubar->setContextMenuPolicy(Qt::PreventContextMenu); create_traditional_menubar(menubar); AwfToolBar *toolbar = new AwfToolBar; toolbar->setMovable(false); toolbar->setFloatable(false); toolbar->setContextMenuPolicy(Qt::PreventContextMenu); create_toolbar(toolbar); window->addToolBar(toolbar); update_statusbar(_app("Theme %1 loaded.").arg(current_theme)); progress9 = new QProgressBar; progress9->setMaximumWidth(140); progress9->setFixedHeight(16); progress9->setAttribute(Qt::WA_StyledBackground, true); // @todo not working progress9->setVisible(false); window->statusBar()->addPermanentWidget(progress9); QLocale locale; if ((locale.language() == QLocale::French) && (locale.country() == QLocale::France)) progress9->setFormat("%p %"); // go go go update_text_direction(current_direction); #if defined (Q_OS_UNIX) if (awf_gqss) std::signal(SIGHUP, on_sighup); #endif window->show(); QObject::connect(qApp, &QCoreApplication::aboutToQuit, accels_save); #if defined (Q_OS_WIN) || defined (_WIN32) #if QT_VERSION >= QT_VERSION_CHECK(5,14,0) window->move(QGuiApplication::screens().first()->availableGeometry().center() - window->rect().center()); #else window->move(QApplication::desktop()->availableGeometry().center() - window->rect().center()); #endif #endif } static void create_widgets(AwfVBoxLayout *root) { // todo if (awf_trace) printf("» create_widgets()\n"); auto *hbox_columns = new AwfHBoxLayout; hbox_columns->setSpacing(0); hbox_columns->setContentsMargins(0,0,0,0); auto *vbox_column1 = new AwfVBoxLayout, *vbox_combo_entry = new AwfVBoxLayout, *vbox_check = new AwfVBoxLayout, *vbox_radio = new AwfVBoxLayout; auto *hbox_spin = new AwfHBoxLayout, *hbox_check_radio = new AwfHBoxLayout; vbox_column1->setSpacing(0); vbox_column1->setContentsMargins(5,5,5,5); vbox_combo_entry->setSpacing(3); vbox_combo_entry->setContentsMargins(5,5,5,5); hbox_spin->setSpacing(0); hbox_spin->setContentsMargins(5,5,5,5); hbox_check_radio->setSpacing(0); hbox_check_radio->setContentsMargins(5,5,5,5); vbox_check->setSpacing(0); vbox_check->setContentsMargins(0,0,0,0); vbox_radio->setSpacing(0); vbox_radio->setContentsMargins(0,0,0,0); auto *vbox_column2 = new AwfVBoxLayout, *vbox_buttons = new AwfVBoxLayout; auto *hbox_btns1 = new AwfHBoxLayout, *hbox_btns2 = new AwfHBoxLayout, *hbox_btns3 = new AwfHBoxLayout, *hbox_btns4 = new AwfHBoxLayout; vbox_column2->setSpacing(0); vbox_column2->setContentsMargins(5,5,5,5); vbox_buttons->setSpacing(3); vbox_buttons->setContentsMargins(5,5,5,5); hbox_btns1->setSpacing(3); hbox_btns1->setContentsMargins(5,5,5,5); hbox_btns2->setSpacing(3); hbox_btns2->setContentsMargins(5,5,5,5); hbox_btns3->setSpacing(3); hbox_btns3->setContentsMargins(5,5,5,5); hbox_btns4->setSpacing(3); hbox_btns4->setContentsMargins(5,5,5,5); auto *vbox_column3 = new AwfVBoxLayout, *vbox_progress1 = new AwfVBoxLayout, *vbox_progress2 = new AwfVBoxLayout; auto *hbox_progress1 = new AwfHBoxLayout, *hbox_progress2 = new AwfHBoxLayout; vbox_column3->setSpacing(0); vbox_column3->setContentsMargins(5,5,5,5); vbox_progress1->setSpacing(10); vbox_progress1->setContentsMargins(6,6,6,6); vbox_progress2->setSpacing(10); vbox_progress2->setContentsMargins(5,5,5,5); hbox_progress1->setSpacing(10); hbox_progress1->setContentsMargins(5,5,5,5); hbox_progress2->setSpacing(10); hbox_progress2->setContentsMargins(5,5,5,5); auto *vbox_column4 = new AwfVBoxLayout, *vbox_others = new AwfVBoxLayout; auto *hbox_label = new AwfHBoxLayout, *hbox_spinner = new AwfHBoxLayout; vbox_column4->setSpacing(0); vbox_column4->setContentsMargins(5,5,5,5); vbox_others->setSpacing(3); vbox_others->setContentsMargins(5,5,5,5); hbox_label->setSpacing(0); hbox_label->setContentsMargins(5,5,5,5); hbox_spinner->setSpacing(0); hbox_spinner->setContentsMargins(5,5,5,5); auto *vpane = new QSplitter(Qt::Vertical), *hpane1 = new QSplitter(Qt::Horizontal), *hpane2 = new QSplitter(Qt::Horizontal); vpane->setContentsMargins(0,0,0,0); hpane1->setContentsMargins(0,0,0,0); hpane2->setContentsMargins(0,0,0,0); auto *wbox_frame1 = new QWidget, *wbox_frame2 = new QWidget, *wbox_notebook1 = new QWidget, *wbox_notebook2 = new QWidget; wbox_frame1->setContentsMargins(0,0,0,0); wbox_frame2->setContentsMargins(0,0,0,0); wbox_notebook1->setContentsMargins(0,0,0,0); wbox_notebook2->setContentsMargins(0,0,0,0); auto *hbox_frame1 = new AwfHBoxLayout, *hbox_frame2 = new AwfHBoxLayout, *hbox_notebook1 = new AwfHBoxLayout, *hbox_notebook2 = new AwfHBoxLayout; hbox_frame1->setSpacing(3); hbox_frame1->setContentsMargins(10,10,10,10); hbox_frame2->setSpacing(3); hbox_frame2->setContentsMargins(10,10,10,10); hbox_notebook1->setSpacing(3); hbox_notebook1->setContentsMargins(10,10,10,10); hbox_notebook2->setSpacing(3); hbox_notebook2->setContentsMargins(10,10,10,10); QFrame *sep1 = new QFrame, *sep2 = new QFrame, *sep3 = new QFrame, *sep4 = new QFrame; sep1->setFrameShape(awf_gqss ? QFrame::NoFrame : QFrame::VLine); sep1->setFrameShadow(QFrame::Plain); sep1->setProperty("class", "separator vertical"); sep2->setFrameShape(awf_gqss ? QFrame::NoFrame : QFrame::VLine); sep2->setFrameShadow(QFrame::Plain); sep2->setProperty("class", "separator vertical"); sep3->setFrameShape(awf_gqss ? QFrame::NoFrame : QFrame::VLine); sep3->setFrameShadow(QFrame::Plain); sep3->setProperty("class", "separator vertical"); sep4->setFrameShape(awf_gqss ? QFrame::NoFrame : QFrame::HLine); sep4->setFrameShadow(QFrame::Plain); sep4->setProperty("class", "separator horizontal"); // columns layout root->addLayout(hbox_columns); // column 1 hbox_columns->addLayout(vbox_column1); vbox_column1->addLayout(vbox_combo_entry); create_combos_entries(vbox_combo_entry); vbox_column1->addLayout(hbox_spin); create_spinbuttons(hbox_spin); vbox_column1->addLayout(hbox_check_radio); hbox_check_radio->addLayout(vbox_check); create_checkbuttons(vbox_check); hbox_check_radio->addLayout(vbox_radio); create_radiobuttons(vbox_radio); vbox_column1->addStretch(); hbox_columns->addWidget(sep1); // column 2 hbox_columns->addLayout(vbox_column2); vbox_column2->addLayout(vbox_buttons); vbox_column2->addLayout(hbox_btns1); vbox_column2->addLayout(hbox_btns2); vbox_column2->addLayout(hbox_btns3); vbox_column2->addLayout(hbox_btns4); create_otherbuttons(vbox_buttons, hbox_btns1, hbox_btns2, hbox_btns3, hbox_btns4); vbox_column2->addStretch(); hbox_columns->addWidget(sep2); // column 3 hbox_columns->addLayout(vbox_column3); vbox_column3->addLayout(vbox_progress1); vbox_column3->addLayout(hbox_progress1); vbox_column3->addLayout(hbox_progress2); vbox_column3->addLayout(vbox_progress2); create_progressbars(vbox_progress1, hbox_progress1, hbox_progress2, vbox_progress2); vbox_column3->addStretch(); hbox_columns->addWidget(sep3); // column 4 hbox_columns->addLayout(vbox_column4); vbox_column4->addLayout(vbox_others); create_treview(vbox_others); vbox_others->addLayout(hbox_label); create_labels(hbox_label); vbox_others->addLayout(hbox_spinner); create_spinners(hbox_spinner); create_expander(vbox_others); vbox_column4->addStretch(); root->addWidget(sep4); // paned layout root->addWidget(vpane); vpane->addWidget(hpane1); wbox_frame1->setMinimumHeight(70); // The 70 wbox_frame1->setLayout(hbox_frame1); hpane1->addWidget(wbox_frame1); wbox_frame2->setMinimumHeight(70); // The 70 wbox_frame2->setLayout(hbox_frame2); hpane1->addWidget(wbox_frame2); create_frames(hbox_frame1, hbox_frame2); vpane->addWidget(hpane2); //wbox_notebook1->setMinimumHeight(120); // The 120 wbox_notebook1->setLayout(hbox_notebook1); hpane2->addWidget(wbox_notebook1); //wbox_notebook2->setMinimumHeight(120); // The 120 wbox_notebook2->setLayout(hbox_notebook2); hpane2->addWidget(wbox_notebook2); create_notebooks(hbox_notebook1, hbox_notebook2); hpane2->setSizes({wbox_notebook1->sizeHint().width(), 10000}); } static void create_toolbar(AwfToolBar *toolbar) { // ok if (awf_trace) printf("» create_toolbar()\n"); QToolButton *tool1, *tool2, *tool3, *tool4, *tool5, *tool6, *tool7, *tool8, *tool9; QAction *action1, *action2; QWidget *spacer; QMenu *menu; // QToolButton tool1 = new QToolButton; menu = new QMenu(tool1); menu->addAction("Menu item 1"); menu->addAction("Menu item 2"); menu->addAction("Menu item 3"); tool1->setMenu(menu); tool1->setIcon(get_icon("document-open")); tool1->setPopupMode(QToolButton::MenuButtonPopup); tool1->setProperty("hasMenu", true); QObject::connect(tool1, &QToolButton::clicked, dialog_open); tool2 = new QToolButton; tool2->setIcon(get_icon("document-open")); tool2->setPopupMode(QToolButton::MenuButtonPopup); tool2->setProperty("hasMenu", true); tool2->setEnabled(false); tool3 = new QToolButton; tool3->setIcon(get_icon("document-save")); QObject::connect(tool3, &QToolButton::clicked, dialog_save); tool4 = new QToolButton; tool4->setIcon(get_icon("view-refresh")); tool4->setEnabled(awf_gqss); QObject::connect(tool4, &QToolButton::clicked, [](){ on_sighup(0); }); tool5 = new QToolButton; tool5->setIcon(get_icon("camera-photo")); tool5->setEnabled(opt_screenshot.isEmpty() ? false : true); QObject::connect(tool5, &QToolButton::clicked, take_screenshot); tool6 = new QToolButton; tool6->setIcon(get_icon("dialog-information")); QObject::connect(tool6, &QToolButton::clicked, display_notification); #if defined (Q_OS_WIN) || defined (_WIN32) tool6->setEnabled(false); #endif tool7 = new QToolButton; tool7->setCheckable(true); tool7->setChecked(true); tool7->setIcon(get_icon("list-add")); QObject::connect(tool7, &QToolButton::clicked, update_widgets); tool8 = new QToolButton; tool8->setCheckable(true); tool8->setChecked(false); tool8->setIcon(get_icon("list-remove")); QObject::connect(tool8, &QToolButton::clicked, update_widgets); tool9 = new QToolButton; tool9->setCheckable(true); tool9->setChecked(false); tool9->setIcon(get_icon("window-close")); tool9->setEnabled(false); toolbarentry = new QLineEdit; toolbarentry->setPlaceholderText("..."); toolbarentry->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed); spacer = new QWidget; spacer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); progress8 = new QProgressBar; progress8->setValue(0); progress8->setOrientation(Qt::Horizontal); progress8->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed); QLocale locale; if ((locale.language() == QLocale::French) && (locale.country() == QLocale::France)) progress8->setFormat("%p %"); // layout toolbar->addWidget(tool1); toolbar->addWidget(tool2); toolbar->addWidget(tool3); toolbar->addSeparator(); toolbar->addWidget(tool4); toolbar->addWidget(tool5); toolbar->addWidget(tool6); toolbar->addSeparator(); toolbar->addWidget(tool7); toolbar->addWidget(tool8); toolbar->addWidget(tool9); action1 = toolbar->addWidget(toolbarentry); toolbar->addWidget(spacer); action2 = toolbar->addWidget(progress8); // links action1->setVisible(false); toolbarentry->setProperty("action", QVariant::fromValue(action1)); action2->setVisible(false); progress8->setProperty("action", QVariant::fromValue(action2)); } static void create_combos_entries(AwfVBoxLayout *root) { // ok if (awf_trace) printf("» create_combos_entries()\n"); QComboBox *combo1, *combo2, *combo3, *combo4; QLineEdit *entry1, *entry2, *entry3, *entry4; // QComboBox combo1 = new QComboBox; combo1->setEditable(true); combo1->addItem("Combo box entry 1"); combo1->addItem("Combo box entry 2"); combo2 = new QComboBox; combo2->setEditable(true); combo2->addItem("Combo box entry 1"); combo2->addItem("Combo box entry 2"); combo2->setDisabled(true); combo3 = new QComboBox; combo3->addItem("Combo box 1"); combo3->addItem("Combo box 2"); combo4 = new QComboBox; combo4->addItem("Combo box 1"); combo4->addItem("Combo box 2"); combo4->setDisabled(true); // QLineEdit entry1 = new QLineEdit; entry1->setText("Entry"); entry1->setPlaceholderText("Placeholder"); entry2 = new QLineEdit; entry2->setText("Entry"); entry2->setEnabled(false); entry3 = new QLineEdit; entry3->setText("Entry"); entry3->setPlaceholderText("Placeholder"); #if QT_VERSION >= QT_VERSION_CHECK(5,2,0) entry3->setClearButtonEnabled(true); #endif entry4 = new QLineEdit; entry4->setText("Entry"); entry4->setEnabled(false); #if QT_VERSION >= QT_VERSION_CHECK(5,2,0) entry4->setClearButtonEnabled(true); #endif // layout root->addWidget(combo1); root->addWidget(combo2); root->addWidget(combo3); root->addWidget(combo4); root->addWidget(entry1); root->addWidget(entry2); root->addWidget(entry3); root->addWidget(entry4); } static void create_spinbuttons(AwfHBoxLayout *root) { // ok if (awf_trace) printf("» create_spinbuttons()\n"); QSpinBox *spinbutton1, *spinbutton2; // QSpinBox spinbutton1 = new QSpinBox; spinbutton1->setRange(-100, 100); spinbutton1->setSingleStep(1); spinbutton1->setValue(1); spinbutton1->setFixedWidth(58); // like gtk2 spinbutton1->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); spinbutton2 = new QSpinBox; spinbutton2->setRange(-100, 100); spinbutton2->setSingleStep(1); spinbutton2->setValue(1); spinbutton2->setFixedWidth(58); // like gtk2 spinbutton2->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); spinbutton2->setEnabled(false); // layout root->addWidget(spinbutton1); root->addStretch(); root->addWidget(spinbutton2); } static void create_checkbuttons(AwfVBoxLayout *root) { // ok if (awf_trace) printf("» create_checkbuttons()\n"); QCheckBox *checkbutton1, *checkbutton2, *checkbutton3, *checkbutton4, *checkbutton5, *checkbutton6; // QCheckBox checkbutton1 = new QCheckBox("Check btn 1"); checkbutton2 = new QCheckBox("Check btn 2"); checkbutton2->setChecked(true); checkbutton3 = new QCheckBox("Check btn 3"); checkbutton3->setTristate(true); checkbutton3->setCheckState(Qt::PartiallyChecked); checkbutton4 = new QCheckBox("Check btn 4"); checkbutton4->setEnabled(false); checkbutton5 = new QCheckBox("Check btn 5"); checkbutton5->setChecked(true); checkbutton5->setEnabled(false); checkbutton6 = new QCheckBox("Check btn 6"); checkbutton6->setTristate(true); checkbutton6->setCheckState(Qt::PartiallyChecked); checkbutton6->setEnabled(false); // layout root->addWidget(checkbutton1); root->addWidget(checkbutton2); root->addWidget(checkbutton3); root->addWidget(checkbutton4); root->addWidget(checkbutton5); root->addWidget(checkbutton6); } static void create_radiobuttons(AwfVBoxLayout *root) { // ok if (awf_trace) printf("» create_radiobuttons()\n"); QRadioButton *radiobutton1, *radiobutton2, *radiobutton3, *radiobutton4, *radiobutton5, *radiobutton6; QButtonGroup *group1, *group2; // QRadioButton radiobutton1 = new QRadioButton("Radio btn 1"); radiobutton2 = new QRadioButton("Radio btn 2"); radiobutton2->setChecked(true); radiobutton3 = new QRadioButton("Radio btn 3"); radiobutton3->setCheckable(true); radiobutton4 = new QRadioButton("Radio btn 4"); radiobutton4->setEnabled(false); radiobutton5 = new QRadioButton("Radio btn 5"); radiobutton5->setChecked(true); radiobutton5->setEnabled(false); radiobutton6 = new QRadioButton("Radio btn 6"); radiobutton6->setCheckable(true); radiobutton6->setEnabled(false); // QButtonGroup group1 = new QButtonGroup(root); group1->addButton(radiobutton1); group1->addButton(radiobutton2); group1->addButton(radiobutton3); group2 = new QButtonGroup(root); group2->addButton(radiobutton4); group2->addButton(radiobutton5); group2->addButton(radiobutton6); // layout root->addWidget(radiobutton1); root->addWidget(radiobutton2); root->addWidget(radiobutton3); root->addWidget(radiobutton4); root->addWidget(radiobutton5); root->addWidget(radiobutton6); } static void create_otherbuttons(AwfVBoxLayout *root1, AwfHBoxLayout *root2, AwfHBoxLayout *root3, AwfHBoxLayout *root4, AwfHBoxLayout *root5) { //ok if (awf_trace) printf("» create_otherbuttons()\n"); // QPushButton QPushButton *button1, *button2, *button3, *button4; button1 = new QPushButton("Button 1"); button2 = new QPushButton("Button 2"); button2->setEnabled(false); button3 = new QPushButton("Button 3"); button3->setCheckable(true); button3->setChecked(true); button4 = new QPushButton("Button 4"); button4->setCheckable(true); button4->setChecked(true); button4->setEnabled(false); // QPushButton for dialogs QPushButton *button5, *button6, *button7, *button8; button5 = new QPushButton(_app("Choose a color")); button5->setMinimumWidth(186); // The 186 button5->setProperty("class", "awf-cheatcode-colorbtn"); QObject::connect(button5, &QPushButton::clicked, [=](){ QColorDialog::getColor(QColor("#7796ba"), window, "QColorDialog"); }); button6 = new QPushButton(_app("Choose a font")); button6->setMinimumWidth(186); // The 186 button6->setProperty("class", "awf-cheatcode-fontbtn"); QObject::connect(button6, &QPushButton::clicked, [=](){ bool ok; QFontDialog::getFont(&ok, QFont(), window, "QFontDialog"); }); button7 = new QPushButton(_app("Choose a file")); button7->setMinimumWidth(186); // The 186 button7->setProperty("class", "awf-cheatcode-filebtn"); QObject::connect(button7, &QPushButton::clicked, [=](){ QFileDialog::getOpenFileName(window, "QFileDialog:Open"); }); button8 = new QPushButton(_app("Choose a folder")); button8->setMinimumWidth(186); // The 186 button8->setProperty("class", "awf-cheatcode-folderbtn"); QObject::connect(button8, &QPushButton::clicked, [=](){ QFileDialog::getExistingDirectory(window, "QFileDialog:Open"); }); // Other QFontComboBox *button9; QDoubleSpinBox *button10; button9 = new QFontComboBox; button9->setSizeAdjustPolicy(QComboBox::AdjustToMinimumContentsLengthWithIcon); button9->setMinimumContentsLength(8); button10 = new QDoubleSpinBox; button10->setRange(-100, 100); button10->setSingleStep(1); button10->setValue(1); button10->setSuffix(" mm"); button10->setPrefix("± "); // layout root1->addWidget(button1); root1->addWidget(button2); root1->addWidget(button3); root1->addWidget(button4); root1->addWidget(button5); root1->addWidget(button6); root1->addWidget(button7); root1->addWidget(button8); root2->addWidget(button9); root3->addWidget(button10); root4->addStretch(); root5->addStretch(); } static void create_progressbars(AwfVBoxLayout *root1, AwfHBoxLayout *root2, AwfHBoxLayout *root3, AwfVBoxLayout *root4) { // ok if (awf_trace) printf("» create_progressbars()\n"); // QProgressBar progress1 = new QProgressBar; progress1->setOrientation(Qt::Horizontal); progress1->setTextVisible(false); progress1->setValue(50); progress2 = new QProgressBar; progress2->setOrientation(Qt::Horizontal); progress2->setTextVisible(false); progress2->setValue(50); progress2->setInvertedAppearance(true); progress2->setProperty("isInverted", true); progress3 = new QProgressBar; progress3->setOrientation(Qt::Vertical); progress3->setTextVisible(false); progress3->setValue(50); progress3->setFixedHeight(100); progress3->setInvertedAppearance(true); progress3->setProperty("isInverted", true); progress4 = new QProgressBar; progress4->setOrientation(Qt::Vertical); progress4->setTextVisible(false); progress4->setValue(50); progress4->setFixedHeight(100); QLocale locale; if ((locale.language() == QLocale::French) && (locale.country() == QLocale::France)) { progress1->setFormat("%p %"); progress2->setFormat("%p %"); progress3->setFormat("%p %"); progress4->setFormat("%p %"); } // QSlider scale1 = create_horizontal_scale(50, false, false, QSlider::NoTicks); QObject::connect(scale1, &QSlider::valueChanged, [=](){ update_values(scale1); }); scale2 = create_horizontal_scale(50, false, true, QSlider::NoTicks); QObject::connect(scale2, &QSlider::valueChanged, [=](){ update_values(scale2); }); scale3 = create_vertical_scale(50, false, !false, QSlider::NoTicks); QObject::connect(scale3, &QSlider::valueChanged, [=](){ update_values(scale3); }); scale4 = create_vertical_scale(50, false, !true, QSlider::NoTicks); QObject::connect(scale4, &QSlider::valueChanged, [=](){ update_values(scale4); }); scale5 = create_vertical_scale(50, false, !false, QSlider::TicksAbove); scale5->setProperty("hasTicks", "TicksAbove"); QObject::connect(scale5, &QSlider::valueChanged, [=](){ update_values(scale5); }); scale6 = create_vertical_scale(50, false, !true, QSlider::TicksBelow); scale6->setProperty("hasTicks", "TicksBelow"); QObject::connect(scale6, &QSlider::valueChanged, [=](){ update_values(scale6); }); scale7 = create_vertical_scale(50, false, !true, QSlider::TicksBothSides); scale7->setProperty("hasTicks", "TicksBothSides"); QObject::connect(scale7, &QSlider::valueChanged, [=](){ update_values(scale7); }); // layout root1->addWidget(progress1); root1->addWidget(progress2); root1->addWidget(scale1); root1->addWidget(scale2); root2->addWidget(progress3); root2->addWidget(progress4); root2->addStretch(); root3->addWidget(scale3); root3->addWidget(scale5); root3->addWidget(scale6); root3->addWidget(scale4); root3->addWidget(scale7); root3->addStretch(); root4->addStretch(); } static void create_labels(AwfHBoxLayout *root) { // ok if (awf_trace) printf("» create_labels()\n"); QLabel *label1, *label2; // QLabel label1 = new QLabel("Label 1"); label2 = new QLabel("Label 2"); label2->setEnabled(false); // layout root->addWidget(label1); root->addStretch(); root->addWidget(label2); root->addStretch(); } static void create_spinners(AwfHBoxLayout *root) { } static void create_expander(AwfVBoxLayout *root) { // todo if (awf_trace) printf("» create_expander()\n"); QGroupBox *expander; QTextEdit *text; // QGroupBox expander = new QGroupBox(_app("More...")); expander->setCheckable(true); expander->setChecked(true); // QTextEdit text = new QTextEdit; text->setFixedHeight(120); text->setMinimumWidth(160); text->setWordWrapMode(QTextOption::WordWrap); text->setText(_app("A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme.") + " " + _app("A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme.")); // layout AwfVBoxLayout *expanderLayout = new AwfVBoxLayout(expander); expanderLayout->addWidget(text); root->addWidget(expander); } static void create_frames(AwfHBoxLayout *root1, AwfHBoxLayout *root2) { // todo if (awf_trace) printf("» create_frames()\n"); QGroupBox *frame1, *frame2, *frame3, *frame4; // QGroupBox frame1 = new QGroupBox("Frame (shadow in)"); frame1->setProperty("class", "border-inset"); frame2 = new QGroupBox("Frame (shadow out)"); frame2->setProperty("class", "border-outset"); frame3 = new QGroupBox("Frame (shadow etched in)"); frame3->setProperty("class", "border-groove"); frame4 = new QGroupBox("Frame (shadow etched out)"); frame4->setProperty("class", "border-ridge"); frame4->setEnabled(false); // layout root1->addWidget(frame1); root1->addWidget(frame2); root2->addWidget(frame3); root2->addWidget(frame4); } static void create_notebooks(AwfHBoxLayout *root1, AwfHBoxLayout *root2) { // ok if (awf_trace) printf("» create_notebooks()\n"); // QTabWidget notebook1 = new QTabWidget; notebook1->setTabPosition(QTabWidget::North); notebook1->setTabsClosable(false); notebook1->setUsesScrollButtons(false); notebook1->tabBar()->setExpanding(false); notebook1->tabBar()->setMovable(true); create_notebook_tab(notebook1, "Tab1", null, false); create_notebook_tab(notebook1, "Tab2", null, false); create_notebook_tab(notebook1, "Tab3", null, true); create_notebook_tab(notebook1, "Tab4", null, true); notebook2 = new QTabWidget; notebook2->setTabPosition(QTabWidget::South); notebook2->setTabsClosable(false); notebook2->setUsesScrollButtons(false); notebook2->tabBar()->setExpanding(false); notebook2->tabBar()->setMovable(true); create_notebook_tab(notebook2, "Tab1", null, false); create_notebook_tab(notebook2, "Tab2", null, false); create_notebook_tab(notebook2, "Tab3", null, true); create_notebook_tab(notebook2, "Tab4", null, true); notebook3 = new QTabWidget; notebook3->setTabPosition(QTabWidget::West); notebook3->setTabsClosable(false); notebook3->setUsesScrollButtons(false); notebook3->tabBar()->setExpanding(false); notebook3->tabBar()->setMovable(true); create_notebook_tab(notebook3, "T1", null, false); create_notebook_tab(notebook3, "Tab2", null, false); create_notebook_tab(notebook3, "T3b", null, true); create_notebook_tab(notebook3, "T4", null, true); notebook4 = new QTabWidget; notebook4->setTabPosition(QTabWidget::East); notebook4->setTabsClosable(false); notebook4->setUsesScrollButtons(false); notebook4->tabBar()->setExpanding(false); notebook4->tabBar()->setMovable(true); create_notebook_tab(notebook4, "T1", null, false); create_notebook_tab(notebook4, "Tab2", null, false); create_notebook_tab(notebook4, "T3b", null, true); create_notebook_tab(notebook4, "T4", null, true); // layout notebook1->setMinimumWidth(notebook1->tabBar()->sizeHint().width()); notebook2->setMinimumWidth(notebook2->tabBar()->sizeHint().width()); notebook3->setMinimumHeight(notebook3->tabBar()->sizeHint().height()); notebook4->setMinimumHeight(notebook4->tabBar()->sizeHint().height()); root1->addWidget(notebook1); root1->addWidget(notebook2); root2->addWidget(notebook3); root2->addWidget(notebook4); } static void create_notebook_tab(QTabWidget *notebook, QString text, QWidget *content, bool close) { // todo if (!content) content = new QWidget; content->setAutoFillBackground(true); if ((notebook->tabPosition() == QTabWidget::West) || (notebook->tabPosition() == QTabWidget::East)) { // @todo force horizontal tab for vertical tabs bar if (close) { QWidget *layout = new QWidget; layout->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum); QToolButton *btn = new QToolButton; btn->setIcon(get_icon("window-close")); btn->setIconSize(QSize(16, 16)); btn->setAutoRaise(true); // flat AwfHBoxLayout *hbox = new AwfHBoxLayout(layout); hbox->setContentsMargins(0, 0, 0, 0); hbox->addWidget(new QLabel(text)); hbox->addWidget(btn); layout->setLayout(hbox); notebook->tabBar()->setTabButton(notebook->addTab(content, ""), QTabBar::LeftSide, layout); } else { notebook->tabBar()->setTabButton(notebook->addTab(content, ""), QTabBar::LeftSide, new QLabel(text)); } } else if (close) { QToolButton *btn = new QToolButton; btn->setIcon(get_icon("window-close")); btn->setIconSize(QSize(16, 16)); btn->setAutoRaise(true); // flat notebook->tabBar()->setTabButton(notebook->addTab(content, text), QTabBar::RightSide, btn); } else { notebook->addTab(content, text); } } static void create_treview(AwfVBoxLayout *root) { // ok if (awf_trace) printf("» create_treview()\n"); QStandardItemModel *model = new QStandardItemModel; model->setColumnCount(11); model->setHorizontalHeaderLabels({ "i", "c", "r", "Text", "Progress", "Progress", "Text", "Icon", "Icon", "c", "r" }); auto addRow = [&](int a, bool b, bool c, QString d, int e, int f, QString g, QString h, QString i, bool j, bool k) { QList items; auto it0 = new QStandardItem; it0->setData(a, Qt::DisplayRole); auto it1 = new QStandardItem; it1->setData(b ? Qt::Checked : Qt::Unchecked, Qt::CheckStateRole); it1->setEditable(false); auto it2 = new QStandardItem; it2->setData(c ? Qt::Checked : Qt::Unchecked, Qt::CheckStateRole); it2->setEditable(false); auto it3 = new QStandardItem; it3->setData(d, Qt::DisplayRole); auto it4 = new QStandardItem; it4->setData(e, Qt::DisplayRole); it4->setEditable(false); auto it5 = new QStandardItem; it5->setData(f, Qt::DisplayRole); it5->setEditable(false); it5->setEnabled(false); auto it6 = new QStandardItem; it6->setData(g, Qt::DisplayRole); it6->setEditable(false); it6->setEnabled(false); auto it7 = new QStandardItem; it7->setIcon(get_icon(h)); it7->setEditable(false); auto it8 = new QStandardItem; it8->setIcon(get_icon(i)); it8->setEditable(false); it8->setEnabled(false); auto it9 = new QStandardItem; it9->setData(j ? Qt::Checked : Qt::Unchecked, Qt::CheckStateRole); it9->setEditable(false); it9->setEnabled(false); auto it10 = new QStandardItem; it10->setData(k ? Qt::Checked : Qt::Unchecked, Qt::CheckStateRole); it10->setEditable(false); it10->setEnabled(false); items << it0 << it1 << it2 << it3 << it4 << it5 << it6 << it7 << it8 << it9 << it10; model->appendRow(items); }; addRow(1, false, false, "Text 1.1", 0, 0, "Text 1.2", "document-open", "document-open", false, false); addRow(2, true, true, "Text 2.1", 10, 10, "Text 2.2", "document-save", "document-save", true, true); addRow(3, false, false, "Text 3.1", 20, 20, "Text 3.2", "document-save-as", "document-save-as", false, false); addRow(4, true, true, "Text 4.1", 30, 30, "Text 4.2", "view-refresh", "view-refresh", true, true); addRow(5, false, false, "Text 5.1", 40, 40, "Text 5.2", "edit-cut", "edit-cut", false, false); addRow(6, true, true, "Text 6.1", 50, 50, "Text 6.2", "help-browser", "help-browser", true, true); addRow(7, false, false, "Text 7.1", 60, 60, "Text 7.2", "document-open", "document-open", false, false); addRow(8, true, true, "Text 8.1", 70, 70, "Text 8.2", "document-save", "document-save", true, true); addRow(9, false, false, "Text 9.1", 80, 80, "Text 9.2", "document-save-as", "document-save-as", false, false); addRow(10, true, true, "Text 10.1", 90, 90, "Text 10.2", "view-refresh", "view-refresh", true, true); addRow(11, false, false, "Text 11.1", 100, 100, "Text 11.2", "edit-cut", "edit-cut", false, false); // QTreeView AwfTreeView *view = new AwfTreeView; // same as QTreeView *view = new QTreeView; but with QSS columns width support view->setFixedHeight(200); // The 200 view->setMinimumWidth(200); // The 200 model->setParent(view); view->setModel(model); view->setSortingEnabled(true); view->setRootIsDecorated(false); view->setItemsExpandable(false); view->setAlternatingRowColors(true); view->sortByColumn(0, Qt::AscendingOrder); view->setItemDelegateForColumn(2, new AwfRadioDelegate(view)); view->setItemDelegateForColumn(4, new AwfProgressDelegate(view)); view->setItemDelegateForColumn(5, new AwfProgressDelegate(view)); view->setItemDelegateForColumn(10, new AwfRadioDelegate(view)); view->header()->setStretchLastSection(false); view->header()->setMinimumSectionSize(16); for (int c = 0; c < model->columnCount(); ++c) view->resizeColumnToContents(c); view->header()->setSectionResizeMode(QHeaderView::Interactive); root->addWidget(view); } static void create_scales() { } static QSlider* create_horizontal_scale(int value, bool draw, bool inverted, QSlider::TickPosition position) { // todo if (awf_trace) printf("» create_horizontal_scale()\n"); QSlider *scale = new QSlider(Qt::Horizontal); scale->setRange(0, 100); scale->setValue(value); scale->setInvertedAppearance(inverted); if (inverted) scale->setProperty("isInverted", true); // @todo draw scale->setTickPosition(position); scale->setFixedWidth(186); // The 186 scale->setTracking(true); return scale; } static QSlider* create_vertical_scale(int value, bool draw, bool inverted, QSlider::TickPosition position) { // todo if (awf_trace) printf("» create_vertical_scale()\n"); QSlider *scale = new QSlider(Qt::Vertical); scale->setRange(0, 100); scale->setValue(value); scale->setInvertedAppearance(inverted); if (inverted) scale->setProperty("isInverted", true); // @todo draw scale->setTickPosition(position); scale->setFixedHeight(100); // The 100 scale->setTracking(true); return scale; } // traditional menu static void create_traditional_menubar(QMenuBar *root) { if (awf_trace) printf("» create_traditional_menubar()\n"); static AwfShortcutFilter *g_shortcutFilter = new AwfShortcutFilter; QMenu *menu, *submenu, *base; QActionGroup *group; QAction *menuitem; bool ok = false, noRefresh = !awf_gqss, noPrint = false; #if ! defined (QT_PRINTSUPPORT_LIB) noPrint = true; #endif // options menu = root->addMenu(_app("_Options")); menu->installEventFilter(g_shortcutFilter); // @todo option command line? if (qEnvironmentVariableIsSet("AWF_TEAROFF")) menu->setTearOffEnabled(true); create_menuitem(menu, get_icon("document-open"), _qt("QFileDialog", "&Open"), false, AWF_ACCEL_OPEN, AWF_OPEN, dialog_open); create_menuitem(menu, QIcon(), _app("Open recent file"), true, AWF_ACCEL_RECE, AWF_RECE, null); create_menuitem(menu, get_icon("document-save"), _qt("QFileDialog", "&Save"), false, AWF_ACCEL_SAVE, AWF_SAVE, dialog_save); create_menuitem(menu, get_icon("view-refresh"), _app("_Refresh"), noRefresh, AWF_ACCEL_REFR, AWF_REFR, [](){ on_sighup(0); }); create_menuitem(menu, QIcon(), _app("Calendar"), false, AWF_ACCEL_CALE, AWF_CALE, dialog_calendar); create_menuitem(menu, QIcon(), "QSliders", false, AWF_ACCEL_SCAL, AWF_SCAL, dialog_scales); create_menuitem(menu, get_icon("document-properties"), _app("Properties"), false, AWF_ACCEL_PROP, AWF_PROP, dialog_message); create_menuitem(menu, get_icon("document-page-setup"),_app("Page Set&up"), noPrint, AWF_ACCEL_PRSE, AWF_PRSE, dialog_page_setup); create_menuitem(menu, get_icon("document-print"), _qt("QPrintDialog", "&Print"), noPrint, AWF_ACCEL_PRIN, AWF_PRIN, dialog_print); submenu = menu->addMenu(_app("More...")); create_menuitem(submenu, get_icon("edit-cut"), _qt("QLineEdit", "Cu&t"), false, AWF_ACCEL_MCUT, AWF_MCUT, null); create_menuitem(submenu, get_icon("edit-copy"), _qt("QLineEdit", "&Copy"), false, AWF_ACCEL_MCOP, AWF_MCOP, null); create_menuitem(submenu, get_icon("edit-paste"), _qt("QLineEdit", "&Paste"), false, AWF_ACCEL_MPAS, AWF_MPAS, null); menu->addSeparator(); create_menuitem_check(menu, QString("Check 1 %1").arg(_app("(unchecked)")), false, false, false); create_menuitem_check(menu, QString("Check 2 %1").arg(_app("(checked)")), true, false, false); create_menuitem_check(menu, QString("Check 3 %1").arg(_app("(inconsistent)")), false, true, false); create_menuitem_check(menu, QString("Check 1 %1").arg(_app("(unchecked)")), false, false, true); create_menuitem_check(menu, QString("Check 2 %1").arg(_app("(checked)")), true, false, true); create_menuitem_check(menu, QString("Check 3 %1").arg(_app("(inconsistent)")), false, true, true); menu->addSeparator(); group = new QActionGroup(window); group->setExclusive(true); create_menuitem_radio(menu, QString("Radio 1 %1").arg(_app("(unchecked)")), false, false, false, group); create_menuitem_radio(menu, QString("Radio 2 %1").arg(_app("(checked)")), true, false, false, group); create_menuitem_radio(menu, QString("Radio 3 %1").arg(_app("(inconsistent)")), false, true, false, group); group = new QActionGroup(window); group->setExclusive(true); create_menuitem_radio(menu, QString("Radio 1 %1").arg(_app("(unchecked)")), false, false, true, group); create_menuitem_radio(menu, QString("Radio 2 %1").arg(_app("(checked)")), true, false, true, group); create_menuitem_radio(menu, QString("Radio 3 %1").arg(_app("(inconsistent)")), false, true, true, group); menu->addSeparator(); create_menuitem(menu, get_icon("window-close"), _qt("QMdiSubWindow", "&Close"), true, AWF_ACCEL_CLOS, AWF_CLOS, null); create_menuitem(menu, get_icon("application-exit"), _qt("QCocoaMenuItem", "Quit"), false, AWF_ACCEL_QUIT, AWF_QUIT, qApp->quit); // system themes group = new QActionGroup(window); group->setExclusive(true); menu = root->addMenu(_app("_System themes")); for (QString theme : list_system_theme) { if (theme == "Azertyuiop") { submenu = menu->addMenu(theme); base = submenu; ok = true; } else if (ok && theme.startsWith("Azertyuiop")) { base = submenu; } else { base = menu; ok = false; } if (list_user_theme.contains(theme)) { menuitem = create_menuitem_radio(base, theme, false, false, true, group); if (theme == current_theme) menuitem->setChecked(true); QObject::connect(menuitem, &QAction::triggered, [theme](){ update_theme(theme); }); } else { menuitem = create_menuitem_radio(base, theme, false, false, false, group); if (theme == current_theme) menuitem->setChecked(true); QObject::connect(menuitem, &QAction::triggered, [theme](){ update_theme(theme); }); } } if (noRefresh) create_menuitem(menu, QIcon(), _app("GlobalQSS not available"), true, QKeySequence(), null, null); else if (list_system_theme.isEmpty()) create_menuitem(menu, QIcon(), _app("No themes found"), true, QKeySequence(), null, null); // user themes menu = root->addMenu(_app("_User themes")); for (QString theme : list_user_theme) { if (theme == "Azertyuiop") { submenu = menu->addMenu(theme); base = submenu; ok = true; } else if (ok && theme.startsWith("Azertyuiop")) { base = submenu; } else { base = menu; ok = false; } menuitem = create_menuitem_radio(base, theme, false, false, false, group); if (theme == current_theme) menuitem->setChecked(true); QObject::connect(menuitem, &QAction::triggered, [theme](){ update_theme(theme); }); } if (noRefresh) create_menuitem(menu, QIcon(), _app("GlobalQSS not available"), true, QKeySequence(), null, null); else if (list_user_theme.isEmpty()) create_menuitem(menu, QIcon(), _app("No themes found"), true, QKeySequence(), null, null); // text direction menu = root->addMenu(_app("_Text direction")); group = new QActionGroup(window); group->setExclusive(true); menuitem = create_menuitem_radio(menu, _app("Left to Right (LTR)"), false, false, false, group); if (current_direction == 1) menuitem->setChecked(true); QObject::connect(menuitem, &QAction::triggered, [](){ update_text_direction(1); }); // Qt::LeftToRight menuitem = create_menuitem_radio(menu, _app("Right to Left (RTL)"), false, false, false, group); if (current_direction == 2) menuitem->setChecked(true); QObject::connect(menuitem, &QAction::triggered, [](){ update_text_direction(2); }); // Qt::RightToLeft // help menu = root->addMenu(_qt("QWizard", "&Help")); menu->installEventFilter(g_shortcutFilter); create_menuitem(menu, QIcon(), "QtInspector", false, AWF_ACCEL_INSP, AWF_INSP, dialog_inspector); create_menuitem(menu, get_icon("help-about"), _qt("QCocoaMenuItem", "About"), false, AWF_ACCEL_ABOU, AWF_ABOU, dialog_about); // gtk-can-change-accels for Qt | so same GTK 2.24 3.x 4.x & Qt 5.x 6.x accels_load(); } static QAction* create_menuitem_check(QMenu *menu, QString text, bool chk, bool ist, bool dsb) { if (awf_trace) printf("» create_menuitem_check(%s)\n", text.toUtf8().constData()); QAction *menuitem; menuitem = new QAction(text, window); menuitem->setCheckable(true); menuitem->setChecked(chk); // @todo inconsistent (ist) menuitem->setEnabled(!dsb); menu->addAction(menuitem); return menuitem; } static QAction* create_menuitem_radio(QMenu *menu, QString text, bool chk, bool ist, bool dsb, QActionGroup *group) { if (awf_trace) printf("» create_menuitem_radio(%s)\n", text.toUtf8().constData()); QAction *menuitem; menuitem = new QAction(text, group); menuitem->setCheckable(true); menuitem->setChecked(chk); // @todo inconsistent (ist) menuitem->setEnabled(!dsb); menu->addAction(menuitem); return menuitem; } static QAction* create_menuitem(QMenu *menu, QIcon icon, QString text, bool dsb, QKeySequence acl, QString kmp, std::function function) { if (awf_trace) printf("» create_menuitem(%s)\n", text.toUtf8().constData()); QAction *menuitem; menuitem = new QAction(icon, text, window); menuitem->setShortcut(acl); menuitem->setEnabled(!dsb); if (!kmp.isEmpty()) menuitem->setObjectName(kmp); if (function) QObject::connect(menuitem, &QAction::triggered, function); menu->addAction(menuitem); return menuitem; } static void accels_load() { // ok if (awf_trace) printf("» accels_load()\n"); QString oldPath = QDir::homePath() + "/.awf-gtk-accels"; if (QFile::exists(oldPath)) QFile::rename(oldPath, QDir::homePath() + "/.awf-accels"); // gtk-can-change-accels for Qt | so same GTK 2.24 3.x 4.x & Qt 5.x 6.x QFile f(QDir::homePath() + QStringLiteral("/.awf-accels")); if (f.exists() && f.open(QIODevice::ReadOnly | QIODevice::Text)) { QMap accels; QMap actions; QString kmp, acl; auto parseModifiers = [](QString mod) { Qt::KeyboardModifiers m = Qt::NoModifier; if (mod.contains("Primary")) m |= static_cast(Qt::CTRL); if (mod.contains("Shift")) m |= static_cast(Qt::SHIFT); if (mod.contains("Alt")) m |= static_cast(Qt::ALT); if (mod.contains("Meta")) m |= static_cast(Qt::META); return m; }; auto parseKey = [](QString keyStr) { if (keyStr.length() == 1) return static_cast(keyStr.toUpper().at(0).unicode()); if ((keyStr.compare("Delete", Qt::CaseInsensitive) == 0) || (keyStr.compare("Del", Qt::CaseInsensitive) == 0)) return Qt::Key_Delete; if (keyStr.compare("Return", Qt::CaseInsensitive) == 0) return Qt::Key_Return; if (keyStr.compare("F1", Qt::CaseInsensitive) == 0) return Qt::Key_F1; if (keyStr.compare("F2", Qt::CaseInsensitive) == 0) return Qt::Key_F2; if (keyStr.compare("F3", Qt::CaseInsensitive) == 0) return Qt::Key_F3; if (keyStr.compare("F4", Qt::CaseInsensitive) == 0) return Qt::Key_F4; if (keyStr.compare("F5", Qt::CaseInsensitive) == 0) return Qt::Key_F5; if (keyStr.compare("F6", Qt::CaseInsensitive) == 0) return Qt::Key_F6; if (keyStr.compare("F7", Qt::CaseInsensitive) == 0) return Qt::Key_F7; if (keyStr.compare("F8", Qt::CaseInsensitive) == 0) return Qt::Key_F8; if (keyStr.compare("F9", Qt::CaseInsensitive) == 0) return Qt::Key_F9; if (keyStr.compare("F10", Qt::CaseInsensitive) == 0) return Qt::Key_F10; if (keyStr.compare("F11", Qt::CaseInsensitive) == 0) return Qt::Key_F11; if (keyStr.compare("F12", Qt::CaseInsensitive) == 0) return Qt::Key_F12; return Qt::Key_unknown; }; // read file // QMap accels QTextStream in(&f); while (!in.atEnd()) { //; (gtk_accel_path "/Test/Print" "p") QString l = in.readLine().trimmed(); if (l.isEmpty() || l.startsWith(';')) continue; int a = l.indexOf('"'); if (a < 0) continue; int b = l.indexOf('"', a + 1); if (b < 0) continue; int c = l.indexOf('"', b + 1); if (c < 0) continue; int d = l.indexOf('"', c + 1); if (d < 0) continue; kmp = l.mid(a + 1, b - a - 1); acl = l.mid(c + 1, d - c - 1); if (kmp.isEmpty()) continue; if (awf_debug) printf("accels_foundInFile: %s %s\n", kmp.toUtf8().constData(), acl.toUtf8().constData()); accels.insert(kmp, acl); } f.close(); // find all QAction in submenus and menus // QMap actions for (QAction *menuAction : window->menuBar()->actions()) { QMenu *menu = menuAction->menu(); if (!menu) continue; for (QAction *action : menu->actions()) { QMenu *subMenu = action->menu(); if (subMenu) { for (QAction *subAction : subMenu->actions()) { kmp = subAction->objectName(); if (accels.contains(kmp)) actions.insert(kmp, subAction); } } else { kmp = action->objectName(); if (accels.contains(kmp)) actions.insert(kmp, action); } } } // apply shortcuts for (QString tmp : actions.keys()) { kmp = tmp; acl = accels.value(kmp); if (awf_debug) printf("accels_foundInMenu: %s %s\n", kmp.toUtf8().constData(), acl.toUtf8().constData()); if (acl.isEmpty()) { actions.value(kmp)->setProperty("shortcutModified", true); actions.value(kmp)->setShortcut(QKeySequence()); } else { Qt::KeyboardModifiers mods = parseModifiers(acl); acl.remove(QRegularExpression("<.*>")); Qt::Key key = parseKey(acl); if (key == Qt::Key_unknown) { printf("accels_foundInMenu: %s %s » unknown key\n", kmp.toUtf8().constData(), acl.toUtf8().constData()); } else { actions.value(kmp)->setProperty("shortcutModified", true); actions.value(kmp)->setShortcut(QKeySequence(key | mods)); } } } } } static bool accels_change(QObject *obj, QEvent *event) { // ok // gtk-can-change-accels for Qt | so same GTK 2.24 3.x 4.x & Qt 5.x 6.x if (event->type() != QEvent::KeyPress) return false; QMenu *menu = qobject_cast(obj); if (!menu || !menu->activeAction()) return false; QAction *menuitem = menu->activeAction(); if (menuitem->objectName().isEmpty()) return false; QKeyEvent *keyEvent = static_cast(event); int key = keyEvent->key(); if ((key == Qt::Key_Control) || (key == Qt::Key_Shift) || (key == Qt::Key_Meta) || (key == Qt::Key_Alt)) return false; if (awf_trace) printf("» accels_change()\n"); Qt::KeyboardModifiers mods = keyEvent->modifiers(); bool del = (key == Qt::Key_Delete) || (key == Qt::Key_Backspace); if ( del || // f1..12 ((key >= Qt::Key_F1) && (key <= Qt::Key_F12)) || // crtl/shift/super/alt + ? mods ) { must_save_accels = true; QKeySequence seq = del ? QKeySequence() : QKeySequence(mods | key); menuitem->setProperty("shortcutModified", true); menuitem->setShortcut(seq); return true; } return false; } static void accels_save() { // ok if (awf_trace) printf("» accels_save()\n"); // gtk-can-change-accels for Qt | so same GTK 2.24 3.x 4.x & Qt 5.x 6.x // gtk_accel_map_save if (must_save_accels) { QFile f(QDir::homePath() + QStringLiteral("/.awf-accels")); if (f.open(QIODevice::WriteOnly | QIODevice::Text)) { QMap actions; QString kmp, acl; QAction *act; auto parseModifiers = [](Qt::KeyboardModifiers m) { QString s; if (m & Qt::CTRL) s += QString(""); if (m & Qt::SHIFT) s += QString(""); if (m & Qt::ALT) s += QString(""); if (m & Qt::META) s += QString(""); return s; }; auto parseKey = [](Qt::Key k) { if ((k >= Qt::Key_A) && (k <= Qt::Key_Z)) return QString(QChar(k).toLower()); if (k == Qt::Key_Delete) return QString("Delete"); if (k == Qt::Key_Return) return QString("Return"); if (k == Qt::Key_F1) return QString("F1"); if (k == Qt::Key_F2) return QString("F2"); if (k == Qt::Key_F3) return QString("F3"); if (k == Qt::Key_F4) return QString("F4"); if (k == Qt::Key_F5) return QString("F5"); if (k == Qt::Key_F6) return QString("F6"); if (k == Qt::Key_F7) return QString("F7"); if (k == Qt::Key_F8) return QString("F8"); if (k == Qt::Key_F9) return QString("F9"); if (k == Qt::Key_F10) return QString("F10"); if (k == Qt::Key_F11) return QString("F11"); if (k == Qt::Key_F12) return QString("F12"); return QString(); }; // find all QAction in submenus and menus // QMap actions for (QAction *menuAction : window->menuBar()->actions()) { QMenu *menu = menuAction->menu(); if (!menu) continue; for (QAction *action : menu->actions()) { QMenu *subMenu = action->menu(); if (subMenu) { for (QAction *subAction : subMenu->actions()) { kmp = subAction->objectName(); if (!kmp.isEmpty()) actions.insert(kmp, subAction); } } else { kmp = action->objectName(); if (!kmp.isEmpty()) actions.insert(kmp, action); } } } // save file QTextStream out(&f); out << "; awf-qt" << QT_VERSION_MAJOR << " GtkAccelMap rc-file -*- scheme -*-\n"; out << "; this file is an automated accelerator map dump\n"; out << ";\n"; for (QString tmp : actions.keys()) { kmp = tmp; act = actions.value(kmp); acl = act->shortcut().toString(); if (!acl.isEmpty()) { Qt::Key key = static_cast(act->shortcut()[0] & ~Qt::KeyboardModifierMask); Qt::KeyboardModifiers mods = static_cast(act->shortcut()[0] & Qt::KeyboardModifierMask); acl = parseModifiers(mods) + parseKey(key); } out << (act->property("shortcutModified").toBool() ? "" : "; ") << "(gtk_accel_path \"" << kmp << "\" \"" << acl << "\")\n"; } out << "\n"; f.close(); } } } // dialogs static void dialog_open() { // ok if (awf_trace) printf("» dialog_open()\n"); QFileDialog::getOpenFileNames(window, "QFileDialog:Open"); } static void dialog_save() { // ok if (awf_trace) printf("» dialog_save()\n"); QFileDialog::getSaveFileName(window, "QFileDialog:Save"); } static void dialog_message() { // ok if (awf_trace) printf("» dialog_message()\n"); QMessageBox msgBox(window); msgBox.setIcon(QMessageBox::Information); msgBox.setWindowTitle("QMessageBox"); msgBox.setText("QMessageBox"); msgBox.setInformativeText(_app("A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme.")); msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No); msgBox.exec(); } static void dialog_page_setup() { // ok if (awf_trace) printf("» dialog_page_setup()\n"); QPrinter printer; QPageSetupDialog(&printer, window).exec(); } static void dialog_print() { // ok if (awf_trace) printf("» dialog_print()\n"); QPrinter printer; QPrintDialog(&printer, window).exec(); } static void dialog_about() { // ok if (awf_trace) printf("» dialog_about()\n"); QString cpp; switch (__cplusplus) { case 199711L: cpp = "C++98"; break; case 201103L: cpp = "C++11"; break; case 201402L: cpp = "C++14"; break; case 201703L: cpp = "C++17"; break; case 202002L: cpp = "C++20"; break; case 202302L: cpp = "C++23"; break; default: cpp = "C++ (" + QString::number(__cplusplus) + ")"; break; } QString t1 = QString("%1

%2 %3

%4
%5
QT_QPA_PLATFORMTHEME=%6 QT_STYLE_OVERRIDE=%7") .arg(_app("A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme.")) .arg(QString(_app("Remove %1 file")).arg("~/.awf-accels")) .arg(_app("to reset keyboard shortcuts.")) .arg(QString(_app("compiled in %1 with qt %2.%3.%4")).arg(cpp).arg(QT_VERSION_MAJOR).arg(QT_VERSION_MINOR).arg(QT_VERSION_PATCH)) .arg(QString(_app(" started with qt %1")).arg(qVersion())) .arg(QString::fromUtf8(qgetenv("QT_QPA_PLATFORMTHEME"))) .arg(QString::fromUtf8(qgetenv("QT_STYLE_OVERRIDE"))); QString t2 = QString("awf-qt%1 / %2

%3

%4

%5

%6") .arg(QT_VERSION_MAJOR) .arg(VERSION) .arg(t1) .arg("
https://github.com/luigifab/awf-extended") .arg("Copyright © 2020-2026 Fabrice Creuzot (luigifab)
Copyright © 2011-2017 Valère Monseur (valr)") .arg(_app("A widget factory 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.")); QMessageBox::about(window, _qt("QCocoaMenuItem", "About"), t2); } static void dialog_inspector() { // ok if (awf_trace) printf("» dialog_inspector()\n"); if (inspector) { inspector->raise(); inspector->activateWindow(); } else { inspector = new QDialog(window, Qt::Window); inspector->setAttribute(Qt::WA_DeleteOnClose); inspector->setWindowTitle("QtInspector"); inspector->resize(500, 400); QTextEdit *textEdit = new QTextEdit; textEdit->setAcceptRichText(false); textEdit->setFont(QFontDatabase::systemFont(QFontDatabase::FixedFont)); textEdit->setPlaceholderText(_app("Write QSS here...")); textEdit->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); QPushButton *btnCopy = new QPushButton(_qt("QShortcut", "Copy")); btnCopy->setIcon(get_icon("edit-copy")); QPushButton *btnClear = new QPushButton(_qt("QShortcut", "Clear")); btnClear->setIcon(get_icon("edit-clear")); QPushButton *btnClose = new QPushButton(_qt("QMdiSubWindow", "&Close")); btnClose->setIcon(get_icon("dialog-close")); AwfHBoxLayout *buttonLayout = new AwfHBoxLayout; buttonLayout->addWidget(btnCopy); buttonLayout->addWidget(btnClear); buttonLayout->addWidget(btnClose); AwfVBoxLayout *mainLayout = new AwfVBoxLayout; mainLayout->addWidget(textEdit); mainLayout->addLayout(buttonLayout); inspector->setLayout(mainLayout); QTimer* counter = new QTimer(inspector); counter->setSingleShot(true); QObject::connect(textEdit, &QTextEdit::textChanged, counter, [=](){ counter->start(1000); }); QObject::connect(btnClose, &QPushButton::clicked, inspector, [=](){ inspector->close(); }); QObject::connect(btnCopy, &QPushButton::clicked, inspector, [=](){ QString text = textEdit->toPlainText(); if (!text.isEmpty()) QApplication::clipboard()->setText(text); }); QObject::connect(btnClear, &QPushButton::clicked, inspector, [=](){ if (awf_gqss && (original_style == "!^!")) original_style = qApp->styleSheet(); qApp->setStyleSheet(original_style); original_style = "!^!"; QSignalBlocker blocker(textEdit); textEdit->clear(); }); QObject::connect(inspector, &QWidget::destroyed, window, [=](){ if (awf_gqss && (original_style == "!^!")) original_style = qApp->styleSheet(); qApp->setStyleSheet(original_style); original_style = "!^!"; inspector = null; }); QObject::connect(window, &QWidget::destroyed, inspector, &QWidget::close); QObject::connect(counter, &QTimer::timeout, inspector, [=](){ if (awf_gqss && (original_style == "!^!")) original_style = qApp->styleSheet(); #if defined (Q_OS_UNIX) int savedFd = dup(fileno(stderr)); FILE* ignored = freopen("/dev/null", "w", stderr); qApp->setStyleSheet(original_style + "\n\n" + textEdit->toPlainText()); fflush(stderr); dup2(savedFd, fileno(stderr)); close(savedFd); #else qApp->setStyleSheet(original_style + "\n\n" + textEdit->toPlainText()); #endif }); inspector->show(); } } static void dialog_calendar() { if (awf_trace) printf("» dialog_calendar()\n"); QWidget *dialog = new QDialog(window, Qt::Window | Qt::Dialog); dialog->setWindowModality(Qt::ApplicationModal); dialog->setAttribute(Qt::WA_DeleteOnClose); dialog->setWindowTitle("QDialog"); dialog->setObjectName("AwfDialogWindow"); dialog->setFixedSize(500, 400); dialog->show(); } static void dialog_scales() { if (awf_trace) printf("» dialog_scales()\n"); QWidget *dialog = new QDialog(window, Qt::Window | Qt::Dialog); dialog->setWindowModality(Qt::ApplicationModal); dialog->setAttribute(Qt::WA_DeleteOnClose); dialog->setWindowTitle("QDialog"); dialog->setObjectName("AwfDialogWindow"); dialog->setFixedSize(500, 400); dialog->show(); } #include "awf-qt5.moc"awf-extended-4.1.0/src/awf-qt6.cpp000066400000000000000000002565421517644610000166710ustar00rootroot00000000000000/** * Forked M/10/03/2020 * Updated V/01/05/2026 * * Copyright 2020-2026 | Fabrice Creuzot (luigifab) * https://github.com/luigifab/awf-extended * https://www.luigifab.fr/gtkqt/awf-extended * * Forked from * Copyright 2011-2017 | Valère Monseur (valr) * https://github.com/valr/awf * * Forked from * AWF is originally based on the code from The Widget Factory * created by Richard Stellingwerff * * This program is free software, you can redistribute it or modify * it under the terms of the GNU General Public License (GPL) as published * by the free software foundation, either version 3 of the license, or * (at your option) any later version. * * This program is distributed in the hope that 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 (GPL) for more details. * * * Translations update: * https://github.com/qt/qttranslations/blob/v6.11.0/translations/qtbase_fr.ts * xgettext --keyword=_app -d awf -o src/awf.pot -k_ -s src/awf-*.c* * msgmerge src/po/fr.po src/awf.pot -o src/po/fr.po * msgfmt src/po/fr.po -o src/fr/LC_MESSAGES/awf.mo * * Tested with build.sh (via VirtualBox 7) with: * Debian Testing 64 (1536 MB) Qt 5.15/6.10 * Fedora Rawhide 64 (1536 MB) Qt 5.15/6.11 * Ubuntu 26.04 Resolute Raccoon 64 (4096 MB) Qt 5.15/6.10 * Ubuntu 25.10 Questing Quokka 64 (4096 MB) Qt 5.15/6.9 * Ubuntu 25.04 Plucky Puffin 64 (4096 MB) Qt 5.15/6.8 * Ubuntu 24.10 Oracular Oriole 64 (4096 MB) Qt 5.15/6.6 * Ubuntu 24.04 Noble Numbat 64 (4096 MB) Qt 5.15/6.4 * Ubuntu 23.10 Mantic Minotaur 64 (3072 MB) Qt 5.15/6.4* * Ubuntu 23.04 Lunar Lobster 64 (3072 MB) Qt 5.15/6.4* * Ubuntu 22.10 Kinetic Kudu 64 (2176 MB) Qt 5.15/6.3 * Ubuntu 22.04 Jammy Jellyfish 64 (2176 MB) Qt 5.15/6.2 (ko) * Windows XP SP3 MinGW/msys (2048 MB) Qt 5.3 */ #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wdeprecated-declarations" #if defined (Q_OS_WIN) || defined (_WIN32) #include #include #include #endif #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #if defined (Q_OS_UNIX) #include #endif #pragma GCC diagnostic pop #define GETTEXT_PACKAGE "awf-qt6" #define AWF_OPEN QStringLiteral("/Test/Open") #define AWF_SAVE QStringLiteral("/Test/Save") #define AWF_REFR QStringLiteral("/Test/Refresh") #define AWF_RECE QStringLiteral("/Test/Recent") #define AWF_CALE QStringLiteral("/Test/Calendar") #define AWF_SCAL QStringLiteral("/Test/Scales") #define AWF_PROP QStringLiteral("/Test/Properties") #define AWF_PRSE QStringLiteral("/Test/PrintSetup") #define AWF_PRIN QStringLiteral("/Test/Print") #define AWF_MCUT QStringLiteral("/Test/More/Cut") #define AWF_MCOP QStringLiteral("/Test/More/Copy") #define AWF_MPAS QStringLiteral("/Test/More/Paste") #define AWF_CLOS QStringLiteral("/Test/Close") #define AWF_QUIT QStringLiteral("/Test/Quit") #define AWF_INSP QStringLiteral("/Test/Inspector") #define AWF_ABOU QStringLiteral("/Test/About") #define AWF_ACCEL_OPEN QKeySequence(Qt::CTRL | Qt::Key_O) #define AWF_ACCEL_SAVE QKeySequence(Qt::CTRL | Qt::Key_S) #define AWF_ACCEL_REFR QKeySequence(Qt::Key_F5) #define AWF_ACCEL_RECE QKeySequence() #define AWF_ACCEL_CALE QKeySequence() #define AWF_ACCEL_SCAL QKeySequence() #define AWF_ACCEL_PROP QKeySequence(Qt::ALT | Qt::Key_Return) #define AWF_ACCEL_PRSE QKeySequence(Qt::CTRL | Qt::SHIFT | Qt::Key_P) #define AWF_ACCEL_PRIN QKeySequence(Qt::CTRL | Qt::Key_P) #define AWF_ACCEL_MCUT QKeySequence(Qt::CTRL | Qt::Key_X) #define AWF_ACCEL_MCOP QKeySequence(Qt::CTRL | Qt::Key_C) #define AWF_ACCEL_MPAS QKeySequence(Qt::CTRL | Qt::Key_V) #define AWF_ACCEL_CLOS QKeySequence(Qt::CTRL | Qt::Key_W) #define AWF_ACCEL_QUIT QKeySequence(Qt::CTRL | Qt::Key_Q) #define AWF_ACCEL_INSP QKeySequence(Qt::Key_F12) #define AWF_ACCEL_ABOU QKeySequence(Qt::Key_F1) // @see https://stackoverflow.com/a/10018581/2980105 #define _app(x) QString::fromUtf8(gettext(x)).replace('_', '&') #define _qt(y, x) QCoreApplication::translate(y, x) // global variables static bool awf_debug = qEnvironmentVariableIsSet("AWF_DEBUG"); static bool awf_trace = qEnvironmentVariableIsSet("AWF_TRACE"); static bool awf_gqss = false; constexpr std::nullptr_t null = nullptr; static QStringList list_system_theme; static QStringList list_user_theme; static QMainWindow *window = null; static QDialog *inspector = null; static QLineEdit *toolbarentry = null; static QProgressBar *progress1 = null, *progress2 = null, *progress3 = null, *progress4 = null, *progress8 = null, *progress9 = null; static QSlider *scale1 = null, *scale2 = null, *scale3 = null, *scale4 = null, *scale5 = null, *scale6 = null, *scale7 = null; static QTabWidget *notebook1 = null, *notebook2 = null, *notebook3 = null, *notebook4 = null; static int current_direction = 0; static QString current_theme = "auto"; static QString opt_theme = "auto"; static QString opt_screenshot = ""; static QString original_style = ""; static bool allow_update_values = true; static bool must_save_accels = false; // gtk_style_context_to_string static QString generateTooltipRecursive(QWidget *widget) { if (!widget) return ""; QString tooltip = widget->metaObject()->className(); if (widget->property("textVisible").isValid()) tooltip += "[textVisible=bool]"; if (widget->property("hasMenu").isValid()) tooltip += "[hasMenu=bool]"; if (widget->property("isInverted").isValid()) tooltip += "[isInverted=bool]"; if (widget->property("hasTicks").isValid()) tooltip += "[hasTicks=" + widget->property("hasTicks").toString() + "]"; if (!widget->objectName().isEmpty()) tooltip += "#" + widget->objectName(); if (widget->property("class").isValid()) tooltip += "." + widget->property("class").toString(); QString style = widget->styleSheet().trimmed(); if (!style.isEmpty()) tooltip += "\n" + style; for (QObject *child : widget->children()) { if (QWidget *childWidget = qobject_cast(child)) tooltip += "\n " + generateTooltipRecursive(childWidget).replace("\n", "\n "); } return tooltip; } class AwfHBoxLayout : public QHBoxLayout { public: using QHBoxLayout::QHBoxLayout; void addWidget(QWidget *widget) { widget->setToolTip(generateTooltipRecursive(widget)); QHBoxLayout::addWidget(widget); } }; class AwfVBoxLayout : public QVBoxLayout { public: using QVBoxLayout::QVBoxLayout; void addWidget(QWidget *widget) { widget->setToolTip(generateTooltipRecursive(widget)); QVBoxLayout::addWidget(widget); } }; class AwfToolBar : public QToolBar { public: using QToolBar::QToolBar; QAction* addWidget(QWidget *widget) { widget->setToolTip(generateTooltipRecursive(widget)); return QToolBar::addWidget(widget); } }; // global functions static QIcon get_icon(QString name); static void awf_load_theme(QStringList& themes, QString directory); static void update_text_direction(int direction); static void update_theme(QString new_theme); static void update_statusbar(QString message); static void update_values(QAbstractSlider *range); static void update_widgets(); static void display_notification(); static bool findAndCheckMenu(QList actions, QString search); static void on_sighup(int signum); static bool take_screenshot(); static void create_window(); static void create_widgets(AwfVBoxLayout *root); static void create_toolbar(AwfToolBar *toolbar); static void create_combos_entries(AwfVBoxLayout *root); static void create_spinbuttons(AwfHBoxLayout *root); static void create_checkbuttons(AwfVBoxLayout *root); static void create_radiobuttons(AwfVBoxLayout *root); static void create_otherbuttons(AwfVBoxLayout *root1, AwfHBoxLayout *root2, AwfHBoxLayout *root3, AwfHBoxLayout *root4, AwfHBoxLayout *root5); static void create_progressbars(AwfVBoxLayout *root1, AwfHBoxLayout *root2, AwfHBoxLayout *root3, AwfVBoxLayout *root4); static void create_labels(AwfHBoxLayout *root); static void create_spinners(AwfHBoxLayout *root); static void create_expander(AwfVBoxLayout *root); static void create_frames(AwfHBoxLayout *root1, AwfHBoxLayout *root2); static void create_notebooks(AwfHBoxLayout *root1, AwfHBoxLayout *root2); static void create_notebook_tab(QTabWidget *notebook, QString text, QWidget *content, bool close); static void create_treview(AwfVBoxLayout *root); static void create_scales(); static QSlider* create_horizontal_scale(int value, bool draw, bool inverted, QSlider::TickPosition position); static QSlider* create_vertical_scale(int value, bool draw, bool inverted, QSlider::TickPosition position); static void create_traditional_menubar(QMenuBar *root); static void accels_load(); static bool accels_change(QObject *obj, QEvent *event); static void accels_save(); static QAction* create_menuitem_check(QMenu *menu, QString text, bool chk, bool ist, bool dsb); static QAction* create_menuitem_radio(QMenu *menu, QString text, bool chk, bool ist, bool dsb, QActionGroup *group); static QAction* create_menuitem(QMenu *menu, QIcon icon, QString text, bool dsb, QKeySequence acl, QString kmp, std::function function); static void dialog_open(); static void dialog_save(); static void dialog_message(); static void dialog_page_setup(); static void dialog_print(); static void dialog_about(); static void dialog_inspector(); static void dialog_calendar(); static void dialog_scales(); // other class AwfMainWindow : public QMainWindow { Q_OBJECT protected: void changeEvent(QEvent *e) override { if (qEnvironmentVariableIsSet("GQSS_SIGNAL") && (e->type() == QEvent::StyleChange)) { QString new_theme = QString::fromUtf8(qgetenv("GQSS_THEME")); if (awf_debug) printf("SIGNAL_theme_update: %s\n", new_theme.toUtf8().constData()); findAndCheckMenu(menuBar()->actions().mid(1), new_theme); } QMainWindow::changeEvent(e); } }; class AwfTreeView : public QTreeView { Q_OBJECT Q_PROPERTY(QString columnWidths READ getColumnWidths WRITE setColumnWidths) public: explicit AwfTreeView(QWidget* parent = null) : QTreeView(parent) { /* connect(header(), &QHeaderView::sortIndicatorChanged, this, [this](int column, Qt::SortOrder) { QString normalColor = getSortedColumnColor(), altColor = getAlternateSortedColumnColor(); if (!normalColor.isEmpty()) { QAbstractItemModel* m = model(); QVariant color; for (int c = 0; c < m->columnCount(); ++c) for (int r = 0; r < m->rowCount(); ++r) m->setData(m->index(r, c), QVariant(), Qt::BackgroundRole); for (int r = 0; r < m->rowCount(); ++r) { color = QVariant(QColor(altColor.isEmpty() ? normalColor : ((r % 2 == 0) ? normalColor : altColor))); m->setData(m->index(r, column), color, Qt::BackgroundRole); } } }); */ } QString getColumnWidths() { QStringList list; for (int i = 0; i < 11; ++i) list << QString::number(columnWidth(i)); return list.join(","); } void setColumnWidths(QString widths) { QTimer::singleShot(0, this, [this, widths]() { // QTimer mainly for Qt 6.6/6.9 QStringList list = widths.split(",", Qt::SkipEmptyParts); for (int i = 0; i < list.size() && i < 11; ++i) setColumnWidth(i, list[i].trimmed().toInt()); }); } }; class AwfProgressDelegate : public QStyledItemDelegate { public: AwfProgressDelegate(QAbstractItemView* view) : QStyledItemDelegate(view) { m_view = view; m_pbar = new QProgressBar(m_view->viewport()); m_pbar->setOrientation(Qt::Horizontal); m_pbar->setMinimum(0); m_pbar->setMaximum(100); m_pbar->setTextVisible(true); m_pbar->hide(); } void paint(QPainter *painter, const QStyleOptionViewItem &opt, const QModelIndex &idx) const override { opt.widget->style()->drawPrimitive(QStyle::PE_PanelItemViewItem, &opt, painter, opt.widget); if (!(opt.state & QStyle::State_Selected)) { QColor bg = idx.data(Qt::BackgroundRole).value(); if (bg.isValid()) painter->fillRect(opt.rect, bg); } QLocale locale; bool isfr = (locale.language() == QLocale::French) && (locale.territory() == QLocale::France); QStyleOptionProgressBar option; option.initFrom(m_pbar); option.rect = opt.rect; option.minimum = m_pbar->minimum(); option.maximum = m_pbar->maximum(); option.progress = idx.data().toInt(); option.textVisible = m_pbar->isTextVisible(); option.text = QString::number(idx.data().toInt()) + (isfr ? " %" : "%"); option.state |= QStyle::StateFlag::State_Horizontal; if (!idx.flags().testFlag(Qt::ItemIsEnabled)) option.state &= ~QStyle::State_Enabled; if (opt.state & QStyle::State_Selected) option.state |= QStyle::State_Selected; m_pbar->style()->drawControl(QStyle::CE_ProgressBar, &option, painter, m_pbar); } private: QAbstractItemView* m_view; QProgressBar* m_pbar; }; class AwfRadioDelegate : public QStyledItemDelegate { public: AwfRadioDelegate(QAbstractItemView* view) : QStyledItemDelegate(view) { m_view = view; m_radio = new QRadioButton(m_view->viewport()); m_radio->hide(); } void paint(QPainter *painter, const QStyleOptionViewItem &opt, const QModelIndex &idx) const override { opt.widget->style()->drawPrimitive(QStyle::PE_PanelItemViewItem, &opt, painter, opt.widget); if (!(opt.state & QStyle::State_Selected)) { QColor bg = idx.data(Qt::BackgroundRole).value(); if (bg.isValid()) painter->fillRect(opt.rect, bg); } QStyleOptionButton option; option.initFrom(m_radio); option.rect = opt.rect; option.state |= (idx.data(Qt::CheckStateRole).toInt() == Qt::Checked) ? QStyle::State_On : QStyle::State_Off; if (!idx.flags().testFlag(Qt::ItemIsEnabled)) option.state &= ~QStyle::State_Enabled; if (opt.state & QStyle::State_Selected) option.state |= QStyle::State_Selected; m_radio->style()->drawControl(QStyle::CE_RadioButton, &option, painter, m_radio); } private: QAbstractItemView* m_view; QRadioButton* m_radio; }; class AwfShortcutFilter : public QObject { public: bool eventFilter(QObject *obj, QEvent *event) override { return (accels_change(obj, event)) ? true : QObject::eventFilter(obj, event); } }; // run run run int main(int argc, char **argv) { if (awf_trace) printf("» main()\n"); int opt = 0, status = 0; QApplication app(argc, argv); awf_gqss = qEnvironmentVariableIsSet("GQSS_SET"); if (awf_gqss) { // load available system themes (/usr/local/share/themes && /usr/share/themes) for (QString dir : QStandardPaths::standardLocations(QStandardPaths::GenericDataLocation)) awf_load_theme(list_system_theme, QDir(dir).filePath("themes")); list_system_theme.sort(Qt::CaseInsensitive); list_system_theme.push_front("None"); // load available user themes (HOME/.local/share/themes && HOME/.themes) awf_load_theme(list_user_theme, QDir(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation)).filePath("themes")); awf_load_theme(list_user_theme, QDir(QDir::homePath()).filePath(".themes")); list_user_theme.sort(Qt::CaseInsensitive); } // locale QString appDir = QCoreApplication::applicationDirPath(); QLocale::setDefault(QLocale::system()); QTranslator *qtTr = new QTranslator(qApp); if (qtTr->load("qt_" + QLocale::system().name(), QLibraryInfo::path(QLibraryInfo::TranslationsPath))) qApp->installTranslator(qtTr); else if (qtTr->load("qt_" + QLocale::system().name(), appDir + "/translations")) qApp->installTranslator(qtTr); QTranslator *qtBaseTr = new QTranslator(qApp); if (qtBaseTr->load("qtbase_" + QLocale::system().name(), QLibraryInfo::path(QLibraryInfo::TranslationsPath))) qApp->installTranslator(qtBaseTr); else if (qtBaseTr->load("qtbase_" + QLocale::system().name(), appDir + "/translations")) qApp->installTranslator(qtBaseTr); setlocale(LC_ALL, ""); #if defined (Q_OS_WIN) || defined (_WIN32) bindtextdomain(GETTEXT_PACKAGE, (appDir + "/share/locale").toLocal8Bit().constData()); #endif bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8"); textdomain(GETTEXT_PACKAGE); // init static struct option options[] = { {"help", no_argument, null, 'x'}, {"version", no_argument, null, 'v'}, {"list-themes", no_argument, null, 'l'}, {"theme", required_argument, null, 't'}, {"screenshot", required_argument, null, 's'}, {"ltr", no_argument, null, 'y'}, {"rtl", no_argument, null, 'z'}, {null, 0, null, 0} }; QString cpp; while ((opt = getopt_long(argc, argv, "hvlt:s:xyz", options, null)) != -1) { switch (opt) { // --version -v case 'v': printf("%s\n", VERSION); return status; // --list-themes -l case 'l': for (QString theme : list_system_theme) printf("%s\n", theme.toUtf8().constData()); for (QString theme : list_user_theme) printf("%s\n", theme.toUtf8().constData()); return status; // --theme -t case 't': if (list_system_theme.contains(optarg) || list_user_theme.contains(optarg)) opt_theme = optarg; break; // --screenshot -s case 's': opt_screenshot = optarg; break; // --ltr case 'y': current_direction = 1; // Qt::LeftToRight break; // --rtl case 'z': current_direction = 2; // Qt::RightToLeft break; // --help -h case 'x': case 'h': default: switch (__cplusplus) { case 199711L: cpp = "C++98"; break; case 201103L: cpp = "C++11"; break; case 201402L: cpp = "C++14"; break; case 201703L: cpp = "C++17"; break; case 202002L: cpp = "C++20"; break; case 202302L: cpp = "C++23"; break; default: cpp = "C++ (" + QString::number(__cplusplus) + ")"; break; } printf("%s\n\n %s %s\n %s %s\n %s %s\n %s %s\n %s %s\n %s %s\n\n%s\n%s\n", qPrintable(QString(_app("A widget factory - Qt %1.%2")).arg(QT_VERSION_MAJOR).arg(QT_VERSION_MINOR)), "-v ", qPrintable(_app("Show version number.")), "-l ", qPrintable(_app("List available themes.")), "-t ", qPrintable(_app("Run with the specified theme.")), "-s ", qPrintable(QString(_app("Run and save a png screenshot on %1.")).arg("SIGHUP")), "--ltr ", qPrintable(_app("Run with text from left to right (Left-To-Right).")), "--rtl ", qPrintable(_app("Run with text from right to left (Right-To-Left).")), qPrintable(QString(_app("compiled in %1 with qt %2.%3.%4")).arg(cpp).arg(QT_VERSION_MAJOR).arg(QT_VERSION_MINOR).arg(QT_VERSION_PATCH)), qPrintable(QString(_app(" started with qt %1")).arg(qVersion()))); return status; } } // create and show window QCommandLineParser parser; parser.setApplicationDescription(_app("A widget factory - Qt %1.%2").arg(QT_VERSION_MAJOR).arg(QT_VERSION_MINOR)); parser.addHelpOption(); parser.addVersionOption(); // << "v" << "version", _app("Show version number."))); parser.addOption(QCommandLineOption(QStringList() << "l" << "list-themes", _app("List available themes."))); parser.addOption(QCommandLineOption(QStringList() << "t" << "theme", _app("Run with the specified theme."), "theme")); parser.addOption(QCommandLineOption(QStringList() << "s" << "screenshot", QString(_app("Run and save a png screenshot on %1.").arg("SIGHUP")), "filename")); parser.addOption(QCommandLineOption(QStringList() << "y" << "ltr", _app("Run with text from left to right (Left-To-Right)."))); parser.addOption(QCommandLineOption(QStringList() << "z" << "rtl", _app("Run with text from right to left (Right-To-Left)."))); parser.process(app); create_window(); return app.exec(); } static QIcon get_icon(QString name) { static const QHash map = { {"application-exit", QStyle::SP_DialogCloseButton}, {"dialog-close", QStyle::SP_DialogCloseButton}, {"dialog-information", QStyle::SP_MessageBoxInformation}, {"document-open", QStyle::SP_DialogOpenButton}, {"document-save", QStyle::SP_DialogSaveButton}, {"help-about", QStyle::SP_MessageBoxQuestion}, {"help-browser", QStyle::SP_MessageBoxQuestion}, {"view-refresh", QStyle::SP_BrowserReload}, {"window-close", QStyle::SP_DialogCloseButton}, }; QIcon icon = QIcon::fromTheme(name); if (icon.isNull()) icon = qApp->style()->standardIcon(map.value(name, QStyle::SP_FileIcon)); return icon; } static void awf_load_theme(QStringList& themes, QString directory) { if (awf_trace) printf("» awf_load_theme(%s)\n", directory.toUtf8().constData()); QDir dir(directory); if (dir.exists()) { if (awf_debug) printf("themes_dir: %s\n", directory.toUtf8().constData()); QStringList entries = dir.entryList(QDir::Dirs | QDir::NoDotAndDotDot); for (QString theme : entries) { if (QDir(QDir(dir.filePath(theme)).filePath("qt6")).exists()) themes.append(theme); } } } static void update_text_direction(int direction) { // ok if (awf_trace) printf("» update_text_direction()\n"); if ((direction == 1) && (qApp->layoutDirection() != Qt::LeftToRight)) { current_direction = 1; notebook3->setTabPosition(QTabWidget::West); notebook4->setTabPosition(QTabWidget::East); qApp->setLayoutDirection(Qt::LeftToRight); } else if ((direction == 2) && (qApp->layoutDirection() != Qt::RightToLeft)) { current_direction = 2; notebook3->setTabPosition(QTabWidget::East); notebook4->setTabPosition(QTabWidget::West); qApp->setLayoutDirection(Qt::RightToLeft); } } static void update_theme(QString new_theme) { // ok if (awf_gqss) { if (awf_trace) printf("» update_theme(%s)*\n", new_theme.toUtf8().constData()); if (awf_debug) printf("update_theme_before: %s » %s\n", current_theme.toUtf8().constData(), new_theme.toUtf8().constData()); if (new_theme == "refresh") { qputenv("GQSS_RELOAD", "yes"); QApplication::style()->polish(qApp); QApplication::processEvents(); window->adjustSize(); if (!opt_screenshot.isEmpty()) { if (take_screenshot()) update_statusbar(_app("Theme %1 reloaded, then screenshot saved (%2).").arg(current_theme).arg(opt_screenshot)); else update_statusbar(_app("Theme %1 reloaded (error saving screenshot).").arg(current_theme)); } else { update_statusbar(_app("Theme %1 reloaded.").arg(current_theme)); } if (awf_debug) printf("update_theme_after1: %s\n", current_theme.toUtf8().constData()); } else if (new_theme == "auto") { current_theme = QString::fromUtf8(qgetenv("GQSS_THEME")); window->adjustSize(); if (awf_debug) printf("update_theme_after2: %s\n", current_theme.toUtf8().constData()); } else if (current_theme != new_theme) { current_theme = new_theme; qputenv("GQSS_RELOAD", "yes"); qputenv("GQSS_THEME", new_theme.toUtf8()); if (!qEnvironmentVariableIsSet("GQSS_SIGNAL")) { // useless for changeEvent (notify_updated_gtktheme) QApplication::style()->polish(qApp); QApplication::processEvents(); } window->adjustSize(); update_statusbar(_app("Theme %1 loaded.").arg(current_theme)); if (awf_debug) printf("update_theme_after3: %s\n", current_theme.toUtf8().constData()); } original_style = "!^!"; } } static void update_statusbar(QString message) { // ok if (awf_trace) printf("» update_statusbar(%s)\n", message.toUtf8().constData()); if (window && window->statusBar()) { QStatusBar *statusbar = window->statusBar(); statusbar->showMessage(QTime::currentTime().toString("HH:mm:ss") + " - " + message, 0); QVariantAnimation *anim = new QVariantAnimation(statusbar); anim->setStartValue(QColor(255,255,0,255)); // yellow anim->setEndValue(window->palette().color(QPalette::Window)); anim->setDuration(1000); QObject::connect(anim, &QVariantAnimation::valueChanged, [statusbar](const QVariant &value) { QColor c = value.value(); statusbar->setStyleSheet(QString("background-color:rgba(%1,%2,%3,%4);").arg(c.red()).arg(c.green()).arg(c.blue()).arg(c.alpha())); }); QObject::connect(anim, &QVariantAnimation::finished, [statusbar]() { statusbar->setStyleSheet(""); }); anim->start(QAbstractAnimation::DeleteWhenStopped); } } static void update_values(QAbstractSlider *range) { // ok if (allow_update_values) { // range(0..100) allow_update_values = false; int value = range->value(); //if (awf_trace) // printf("» update_values(%d)*\n", value); progress1->setValue(value); progress2->setValue(value); progress3->setValue(value); progress4->setValue(value); progress8->setValue(value); progress9->setValue(value); if (scale1 != range) scale1->setValue(value); if (scale2 != range) scale2->setValue(value); if (scale3 != range) scale3->setValue(value); if (scale4 != range) scale4->setValue(value); if (scale5 != range) scale5->setValue(value); if (scale6 != range) scale6->setValue(value); if (scale7 != range) scale7->setValue(value); // text progress8->setTextVisible(value > 50); progress8->setProperty("textVisible", value > 50); progress8->style()->polish(progress8); progress8->updateGeometry(); progress9->setTextVisible(value > 50); progress9->setProperty("textVisible", value > 50); progress9->style()->polish(progress9); progress9->updateGeometry(); allow_update_values = true; } } static void update_widgets() { // ok if (awf_trace) printf("» update_widgets()\n"); // function called when user click on [+] toolbar button // when toggle = true, the [+] toolbar button is NOT checked int width1, width2, height1, height2; bool toggle = notebook1->tabBar()->usesScrollButtons(); // show progressbar in toolbar and statusbar when [+] toolbar button is NOT checked if (toggle) { qobject_cast(progress8->property("action").value())->setVisible(false); progress9->setVisible(false); qobject_cast(toolbarentry->property("action").value())->setVisible(false); } else { progress8->setValue(0); progress9->setValue(0); qobject_cast(progress8->property("action").value())->setVisible(true); progress9->setVisible(true); qobject_cast(toolbarentry->property("action").value())->setVisible(true); } // enabled or not scale2->setEnabled(toggle); scale4->setEnabled(toggle); scale6->setEnabled(toggle); scale7->setEnabled(toggle); progress2->setEnabled(toggle); progress4->setEnabled(toggle); // text or not progress1->setTextVisible(!toggle); progress1->setProperty("textVisible", !toggle); progress1->style()->polish(progress1); progress1->updateGeometry(); progress2->setTextVisible(!toggle); progress2->setProperty("textVisible", !toggle); progress2->style()->polish(progress2); progress2->updateGeometry(); progress3->setTextVisible(!toggle); progress3->setProperty("textVisible", !toggle); progress3->style()->polish(progress3); progress3->updateGeometry(); progress4->setTextVisible(!toggle); progress4->setProperty("textVisible", !toggle); progress4->style()->polish(progress4); progress4->updateGeometry(); progress8->setTextVisible(false); progress8->setProperty("textVisible", false); progress8->style()->polish(progress8); progress8->updateGeometry(); progress9->setTextVisible(false); progress9->setProperty("textVisible", false); progress9->style()->polish(progress9); progress9->updateGeometry(); // scrollable or not if (toggle) { notebook1->tabBar()->setUsesScrollButtons(false); notebook2->tabBar()->setUsesScrollButtons(false); notebook3->tabBar()->setUsesScrollButtons(false); notebook4->tabBar()->setUsesScrollButtons(false); notebook1->setMinimumWidth(width1 = notebook1->tabBar()->sizeHint().width()); notebook2->setMinimumWidth(width2 = notebook2->tabBar()->sizeHint().width()); notebook3->setMinimumHeight(height1 = notebook3->tabBar()->sizeHint().height()); notebook4->setMinimumHeight(height2 = notebook4->tabBar()->sizeHint().height()); } else { notebook1->setMinimumWidth(width1 = notebook1->tabBar()->sizeHint().width() / 2); notebook2->setMinimumWidth(width2 = notebook2->tabBar()->sizeHint().width() / 2); notebook3->setMinimumHeight(height1 = notebook3->tabBar()->sizeHint().height() / 2); notebook4->setMinimumHeight(height2 = notebook4->tabBar()->sizeHint().height() / 2); notebook1->tabBar()->setUsesScrollButtons(true); notebook2->tabBar()->setUsesScrollButtons(true); notebook3->tabBar()->setUsesScrollButtons(true); notebook4->tabBar()->setUsesScrollButtons(true); } // auto width and height @todo notebook1->updateGeometry(); notebook2->updateGeometry(); notebook3->updateGeometry(); notebook4->updateGeometry(); QSplitter *hpane, *vpane; QWidget *widget = notebook1->parentWidget(); while (widget) { hpane = qobject_cast(widget); if (hpane) break; widget = widget->parentWidget(); } hpane->setSizes({qMax(width1, width2), 10000}); hpane->updateGeometry(); widget = widget->parentWidget(); while (widget) { vpane = qobject_cast(widget); if (vpane) break; widget = widget->parentWidget(); } QList sizes = vpane->sizes(); sizes[1] = qMax(height1, height2); vpane->setSizes(sizes); vpane->updateGeometry(); window->setMinimumHeight(0); window->setMinimumWidth(0); window->adjustSize(); } static void display_notification() { // ok if (awf_trace) printf("» display_notification()\n"); #if defined (Q_OS_UNIX) signal(SIGCHLD, SIG_IGN); if (fork() == 0) { execlp("notify-send", "notify-send", "-i", "dialog-information", "-t", "50000", "--action", _qt("QShortcut", "Close").toUtf8().constData(), GETTEXT_PACKAGE, _app("A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme.").toUtf8().constData(), null); _exit(1); } #endif } static bool findAndCheckMenu(QList actions, QString search) { // ok if (awf_trace) printf("» findAndCheckMenu()\n"); for (QAction *action : actions) { if (action->menu()) { // process submenu if (findAndCheckMenu(action->menu()->actions(), search)) return true; } else if (action->isEnabled() && (action->text() == search)) { // check menuitem action->trigger(); // set state checked and activate action return true; } } return false; } static void on_sighup(int signum) { // ok if (awf_trace) printf("» on_sighup()\n"); QMetaObject::invokeMethod(qApp, [](){ update_theme("refresh"); }, Qt::QueuedConnection); } static bool take_screenshot() { // ok (without window borders) if (awf_trace) printf("» take_screenshot()\n"); QPixmap pixmap = window->grab(); return pixmap.save(opt_screenshot, "PNG", 0); // 0 = 9 } // layout and widgets static void create_window() { if (awf_trace) printf("» create_window()\n"); // window QApplication::setApplicationName("awf"); window = new AwfMainWindow; window->setWindowTitle(_app("A widget factory - Qt %1.%2").arg(QT_VERSION_MAJOR).arg(QT_VERSION_MINOR)); window->setObjectName("AwfMainWindow"); #if defined (Q_OS_UNIX) QApplication::setWindowIcon(QIcon::fromTheme(GETTEXT_PACKAGE)); window->setWindowIcon(QIcon::fromTheme(GETTEXT_PACKAGE)); #elif defined (Q_OS_WIN) || defined (_WIN32) HICON hIcon = (HICON) LoadImage(GetModuleHandle(nullptr), "IDI_ICON1", IMAGE_ICON, 48, 48, LR_DEFAULTSIZE); QPixmap pixmap = QPixmap::fromImage(QImage::fromHICON(hIcon)); QApplication::setWindowIcon(QIcon(pixmap)); window->setWindowIcon(QIcon(pixmap)); DestroyIcon(hIcon); #endif // theme auto or from command line if (awf_gqss) update_theme((current_theme == opt_theme) ? current_theme : opt_theme); if (current_direction == 0) current_direction = (qApp->layoutDirection() == Qt::LeftToRight) ? 1 : 2; // layout AwfVBoxLayout *layout = new AwfVBoxLayout; QWidget *central = new QWidget; window->setCentralWidget(central); layout->setSpacing(0); layout->setContentsMargins(0,0,0,0); create_widgets(layout); central->setLayout(layout); QMenuBar *menubar = window->menuBar(); menubar->setContextMenuPolicy(Qt::PreventContextMenu); create_traditional_menubar(menubar); AwfToolBar *toolbar = new AwfToolBar; toolbar->setMovable(false); toolbar->setFloatable(false); toolbar->setContextMenuPolicy(Qt::PreventContextMenu); create_toolbar(toolbar); window->addToolBar(toolbar); update_statusbar(_app("Theme %1 loaded.").arg(current_theme)); progress9 = new QProgressBar; progress9->setMaximumWidth(140); progress9->setFixedHeight(16); progress9->setAttribute(Qt::WA_StyledBackground, true); // @todo not working progress9->setVisible(false); window->statusBar()->addPermanentWidget(progress9); QLocale locale; if ((locale.language() == QLocale::French) && (locale.territory() == QLocale::France)) progress9->setFormat("%p %"); // go go go update_text_direction(current_direction); #if defined (Q_OS_UNIX) if (awf_gqss) std::signal(SIGHUP, on_sighup); #endif window->show(); QObject::connect(qApp, &QCoreApplication::aboutToQuit, accels_save); #if defined (Q_OS_WIN) || defined (_WIN32) window->move(QGuiApplication::primaryScreen()->availableGeometry().center() - window->rect().center()); #endif } static void create_widgets(AwfVBoxLayout *root) { // todo if (awf_trace) printf("» create_widgets()\n"); auto *hbox_columns = new AwfHBoxLayout; hbox_columns->setSpacing(0); hbox_columns->setContentsMargins(0,0,0,0); auto *vbox_column1 = new AwfVBoxLayout, *vbox_combo_entry = new AwfVBoxLayout, *vbox_check = new AwfVBoxLayout, *vbox_radio = new AwfVBoxLayout; auto *hbox_spin = new AwfHBoxLayout, *hbox_check_radio = new AwfHBoxLayout; vbox_column1->setSpacing(0); vbox_column1->setContentsMargins(5,5,5,5); vbox_combo_entry->setSpacing(3); vbox_combo_entry->setContentsMargins(5,5,5,5); hbox_spin->setSpacing(0); hbox_spin->setContentsMargins(5,5,5,5); hbox_check_radio->setSpacing(0); hbox_check_radio->setContentsMargins(5,5,5,5); vbox_check->setSpacing(0); vbox_check->setContentsMargins(0,0,0,0); vbox_radio->setSpacing(0); vbox_radio->setContentsMargins(0,0,0,0); auto *vbox_column2 = new AwfVBoxLayout, *vbox_buttons = new AwfVBoxLayout; auto *hbox_btns1 = new AwfHBoxLayout, *hbox_btns2 = new AwfHBoxLayout, *hbox_btns3 = new AwfHBoxLayout, *hbox_btns4 = new AwfHBoxLayout; vbox_column2->setSpacing(0); vbox_column2->setContentsMargins(5,5,5,5); vbox_buttons->setSpacing(3); vbox_buttons->setContentsMargins(5,5,5,5); hbox_btns1->setSpacing(3); hbox_btns1->setContentsMargins(5,5,5,5); hbox_btns2->setSpacing(3); hbox_btns2->setContentsMargins(5,5,5,5); hbox_btns3->setSpacing(3); hbox_btns3->setContentsMargins(5,5,5,5); hbox_btns4->setSpacing(3); hbox_btns4->setContentsMargins(5,5,5,5); auto *vbox_column3 = new AwfVBoxLayout, *vbox_progress1 = new AwfVBoxLayout, *vbox_progress2 = new AwfVBoxLayout; auto *hbox_progress1 = new AwfHBoxLayout, *hbox_progress2 = new AwfHBoxLayout; vbox_column3->setSpacing(0); vbox_column3->setContentsMargins(5,5,5,5); vbox_progress1->setSpacing(10); vbox_progress1->setContentsMargins(6,6,6,6); vbox_progress2->setSpacing(10); vbox_progress2->setContentsMargins(5,5,5,5); hbox_progress1->setSpacing(10); hbox_progress1->setContentsMargins(5,5,5,5); hbox_progress2->setSpacing(10); hbox_progress2->setContentsMargins(5,5,5,5); auto *vbox_column4 = new AwfVBoxLayout, *vbox_others = new AwfVBoxLayout; auto *hbox_label = new AwfHBoxLayout, *hbox_spinner = new AwfHBoxLayout; vbox_column4->setSpacing(0); vbox_column4->setContentsMargins(5,5,5,5); vbox_others->setSpacing(3); vbox_others->setContentsMargins(5,5,5,5); hbox_label->setSpacing(0); hbox_label->setContentsMargins(5,5,5,5); hbox_spinner->setSpacing(0); hbox_spinner->setContentsMargins(5,5,5,5); auto *vpane = new QSplitter(Qt::Vertical), *hpane1 = new QSplitter(Qt::Horizontal), *hpane2 = new QSplitter(Qt::Horizontal); vpane->setContentsMargins(0,0,0,0); hpane1->setContentsMargins(0,0,0,0); hpane2->setContentsMargins(0,0,0,0); auto *wbox_frame1 = new QWidget, *wbox_frame2 = new QWidget, *wbox_notebook1 = new QWidget, *wbox_notebook2 = new QWidget; wbox_frame1->setContentsMargins(0,0,0,0); wbox_frame2->setContentsMargins(0,0,0,0); wbox_notebook1->setContentsMargins(0,0,0,0); wbox_notebook2->setContentsMargins(0,0,0,0); auto *hbox_frame1 = new AwfHBoxLayout, *hbox_frame2 = new AwfHBoxLayout, *hbox_notebook1 = new AwfHBoxLayout, *hbox_notebook2 = new AwfHBoxLayout; hbox_frame1->setSpacing(3); hbox_frame1->setContentsMargins(10,10,10,10); hbox_frame2->setSpacing(3); hbox_frame2->setContentsMargins(10,10,10,10); hbox_notebook1->setSpacing(3); hbox_notebook1->setContentsMargins(10,10,10,10); hbox_notebook2->setSpacing(3); hbox_notebook2->setContentsMargins(10,10,10,10); QFrame *sep1 = new QFrame, *sep2 = new QFrame, *sep3 = new QFrame, *sep4 = new QFrame; sep1->setFrameShape(awf_gqss ? QFrame::NoFrame : QFrame::VLine); sep1->setFrameShadow(QFrame::Plain); sep1->setProperty("class", "separator vertical"); sep2->setFrameShape(awf_gqss ? QFrame::NoFrame : QFrame::VLine); sep2->setFrameShadow(QFrame::Plain); sep2->setProperty("class", "separator vertical"); sep3->setFrameShape(awf_gqss ? QFrame::NoFrame : QFrame::VLine); sep3->setFrameShadow(QFrame::Plain); sep3->setProperty("class", "separator vertical"); sep4->setFrameShape(awf_gqss ? QFrame::NoFrame : QFrame::HLine); sep4->setFrameShadow(QFrame::Plain); sep4->setProperty("class", "separator horizontal"); // columns layout root->addLayout(hbox_columns); // column 1 hbox_columns->addLayout(vbox_column1); vbox_column1->addLayout(vbox_combo_entry); create_combos_entries(vbox_combo_entry); vbox_column1->addLayout(hbox_spin); create_spinbuttons(hbox_spin); vbox_column1->addLayout(hbox_check_radio); hbox_check_radio->addLayout(vbox_check); create_checkbuttons(vbox_check); hbox_check_radio->addLayout(vbox_radio); create_radiobuttons(vbox_radio); vbox_column1->addStretch(); hbox_columns->addWidget(sep1); // column 2 hbox_columns->addLayout(vbox_column2); vbox_column2->addLayout(vbox_buttons); vbox_column2->addLayout(hbox_btns1); vbox_column2->addLayout(hbox_btns2); vbox_column2->addLayout(hbox_btns3); vbox_column2->addLayout(hbox_btns4); create_otherbuttons(vbox_buttons, hbox_btns1, hbox_btns2, hbox_btns3, hbox_btns4); vbox_column2->addStretch(); hbox_columns->addWidget(sep2); // column 3 hbox_columns->addLayout(vbox_column3); vbox_column3->addLayout(vbox_progress1); vbox_column3->addLayout(hbox_progress1); vbox_column3->addLayout(hbox_progress2); vbox_column3->addLayout(vbox_progress2); create_progressbars(vbox_progress1, hbox_progress1, hbox_progress2, vbox_progress2); vbox_column3->addStretch(); hbox_columns->addWidget(sep3); // column 4 hbox_columns->addLayout(vbox_column4); vbox_column4->addLayout(vbox_others); create_treview(vbox_others); vbox_others->addLayout(hbox_label); create_labels(hbox_label); vbox_others->addLayout(hbox_spinner); create_spinners(hbox_spinner); create_expander(vbox_others); vbox_column4->addStretch(); root->addWidget(sep4); // paned layout root->addWidget(vpane); vpane->addWidget(hpane1); wbox_frame1->setMinimumHeight(70); // The 70 wbox_frame1->setLayout(hbox_frame1); hpane1->addWidget(wbox_frame1); wbox_frame2->setMinimumHeight(70); // The 70 wbox_frame2->setLayout(hbox_frame2); hpane1->addWidget(wbox_frame2); create_frames(hbox_frame1, hbox_frame2); vpane->addWidget(hpane2); //wbox_notebook1->setMinimumHeight(120); // The 120 wbox_notebook1->setLayout(hbox_notebook1); hpane2->addWidget(wbox_notebook1); //wbox_notebook2->setMinimumHeight(120); // The 120 wbox_notebook2->setLayout(hbox_notebook2); hpane2->addWidget(wbox_notebook2); create_notebooks(hbox_notebook1, hbox_notebook2); hpane2->setSizes({wbox_notebook1->sizeHint().width(), 10000}); } static void create_toolbar(AwfToolBar *toolbar) { // ok if (awf_trace) printf("» create_toolbar()\n"); QToolButton *tool1, *tool2, *tool3, *tool4, *tool5, *tool6, *tool7, *tool8, *tool9; QAction *action1, *action2; QWidget *spacer; QMenu *menu; // QToolButton tool1 = new QToolButton; menu = new QMenu(tool1); menu->addAction("Menu item 1"); menu->addAction("Menu item 2"); menu->addAction("Menu item 3"); tool1->setMenu(menu); tool1->setIcon(get_icon("document-open")); tool1->setPopupMode(QToolButton::MenuButtonPopup); tool1->setProperty("hasMenu", true); QObject::connect(tool1, &QToolButton::clicked, dialog_open); tool2 = new QToolButton; tool2->setIcon(get_icon("document-open")); tool2->setPopupMode(QToolButton::MenuButtonPopup); tool2->setProperty("hasMenu", true); tool2->setEnabled(false); tool3 = new QToolButton; tool3->setIcon(get_icon("document-save")); QObject::connect(tool3, &QToolButton::clicked, dialog_save); tool4 = new QToolButton; tool4->setIcon(get_icon("view-refresh")); tool4->setEnabled(awf_gqss); QObject::connect(tool4, &QToolButton::clicked, [](){ on_sighup(0); }); tool5 = new QToolButton; tool5->setIcon(get_icon("camera-photo")); tool5->setEnabled(opt_screenshot.isEmpty() ? false : true); QObject::connect(tool5, &QToolButton::clicked, take_screenshot); tool6 = new QToolButton; tool6->setIcon(get_icon("dialog-information")); QObject::connect(tool6, &QToolButton::clicked, display_notification); #if defined (Q_OS_WIN) || defined (_WIN32) tool6->setEnabled(false); #endif tool7 = new QToolButton; tool7->setCheckable(true); tool7->setChecked(true); tool7->setIcon(get_icon("list-add")); QObject::connect(tool7, &QToolButton::clicked, update_widgets); tool8 = new QToolButton; tool8->setCheckable(true); tool8->setChecked(false); tool8->setIcon(get_icon("list-remove")); QObject::connect(tool8, &QToolButton::clicked, update_widgets); tool9 = new QToolButton; tool9->setCheckable(true); tool9->setChecked(false); tool9->setIcon(get_icon("window-close")); tool9->setEnabled(false); toolbarentry = new QLineEdit; toolbarentry->setPlaceholderText("..."); toolbarentry->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed); spacer = new QWidget; spacer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); progress8 = new QProgressBar; progress8->setValue(0); progress8->setOrientation(Qt::Horizontal); progress8->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed); QLocale locale; if ((locale.language() == QLocale::French) && (locale.territory() == QLocale::France)) progress8->setFormat("%p %"); // layout toolbar->addWidget(tool1); toolbar->addWidget(tool2); toolbar->addWidget(tool3); toolbar->addSeparator(); toolbar->addWidget(tool4); toolbar->addWidget(tool5); toolbar->addWidget(tool6); toolbar->addSeparator(); toolbar->addWidget(tool7); toolbar->addWidget(tool8); toolbar->addWidget(tool9); action1 = toolbar->addWidget(toolbarentry); toolbar->addWidget(spacer); action2 = toolbar->addWidget(progress8); // links action1->setVisible(false); toolbarentry->setProperty("action", QVariant::fromValue(action1)); action2->setVisible(false); progress8->setProperty("action", QVariant::fromValue(action2)); } static void create_combos_entries(AwfVBoxLayout *root) { // ok if (awf_trace) printf("» create_combos_entries()\n"); QComboBox *combo1, *combo2, *combo3, *combo4; QLineEdit *entry1, *entry2, *entry3, *entry4; // QComboBox combo1 = new QComboBox; combo1->setEditable(true); combo1->addItem("Combo box entry 1"); combo1->addItem("Combo box entry 2"); combo2 = new QComboBox; combo2->setEditable(true); combo2->addItem("Combo box entry 1"); combo2->addItem("Combo box entry 2"); combo2->setDisabled(true); combo3 = new QComboBox; combo3->addItem("Combo box 1"); combo3->addItem("Combo box 2"); combo4 = new QComboBox; combo4->addItem("Combo box 1"); combo4->addItem("Combo box 2"); combo4->setDisabled(true); // QLineEdit entry1 = new QLineEdit; entry1->setText("Entry"); entry1->setPlaceholderText("Placeholder"); entry2 = new QLineEdit; entry2->setText("Entry"); entry2->setEnabled(false); entry3 = new QLineEdit; entry3->setText("Entry"); entry3->setClearButtonEnabled(true); entry3->setPlaceholderText("Placeholder"); entry4 = new QLineEdit; entry4->setText("Entry"); entry4->setClearButtonEnabled(true); entry4->setEnabled(false); // layout root->addWidget(combo1); root->addWidget(combo2); root->addWidget(combo3); root->addWidget(combo4); root->addWidget(entry1); root->addWidget(entry2); root->addWidget(entry3); root->addWidget(entry4); } static void create_spinbuttons(AwfHBoxLayout *root) { // ok if (awf_trace) printf("» create_spinbuttons()\n"); QSpinBox *spinbutton1, *spinbutton2; // QSpinBox spinbutton1 = new QSpinBox; spinbutton1->setRange(-100, 100); spinbutton1->setSingleStep(1); spinbutton1->setValue(1); spinbutton1->setFixedWidth(58); // like gtk2 spinbutton1->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); spinbutton2 = new QSpinBox; spinbutton2->setRange(-100, 100); spinbutton2->setSingleStep(1); spinbutton2->setValue(1); spinbutton2->setFixedWidth(58); // like gtk2 spinbutton2->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); spinbutton2->setEnabled(false); // layout root->addWidget(spinbutton1); root->addStretch(); root->addWidget(spinbutton2); } static void create_checkbuttons(AwfVBoxLayout *root) { // ok if (awf_trace) printf("» create_checkbuttons()\n"); QCheckBox *checkbutton1, *checkbutton2, *checkbutton3, *checkbutton4, *checkbutton5, *checkbutton6; // QCheckBox checkbutton1 = new QCheckBox("Check btn 1"); checkbutton2 = new QCheckBox("Check btn 2"); checkbutton2->setChecked(true); checkbutton3 = new QCheckBox("Check btn 3"); checkbutton3->setTristate(true); checkbutton3->setCheckState(Qt::PartiallyChecked); checkbutton4 = new QCheckBox("Check btn 4"); checkbutton4->setEnabled(false); checkbutton5 = new QCheckBox("Check btn 5"); checkbutton5->setChecked(true); checkbutton5->setEnabled(false); checkbutton6 = new QCheckBox("Check btn 6"); checkbutton6->setTristate(true); checkbutton6->setCheckState(Qt::PartiallyChecked); checkbutton6->setEnabled(false); // layout root->addWidget(checkbutton1); root->addWidget(checkbutton2); root->addWidget(checkbutton3); root->addWidget(checkbutton4); root->addWidget(checkbutton5); root->addWidget(checkbutton6); } static void create_radiobuttons(AwfVBoxLayout *root) { // ok if (awf_trace) printf("» create_radiobuttons()\n"); QRadioButton *radiobutton1, *radiobutton2, *radiobutton3, *radiobutton4, *radiobutton5, *radiobutton6; QButtonGroup *group1, *group2; // QRadioButton radiobutton1 = new QRadioButton("Radio btn 1"); radiobutton2 = new QRadioButton("Radio btn 2"); radiobutton2->setChecked(true); radiobutton3 = new QRadioButton("Radio btn 3"); radiobutton3->setCheckable(true); radiobutton4 = new QRadioButton("Radio btn 4"); radiobutton4->setEnabled(false); radiobutton5 = new QRadioButton("Radio btn 5"); radiobutton5->setChecked(true); radiobutton5->setEnabled(false); radiobutton6 = new QRadioButton("Radio btn 6"); radiobutton6->setCheckable(true); radiobutton6->setEnabled(false); // QButtonGroup group1 = new QButtonGroup(root); group1->addButton(radiobutton1); group1->addButton(radiobutton2); group1->addButton(radiobutton3); group2 = new QButtonGroup(root); group2->addButton(radiobutton4); group2->addButton(radiobutton5); group2->addButton(radiobutton6); // layout root->addWidget(radiobutton1); root->addWidget(radiobutton2); root->addWidget(radiobutton3); root->addWidget(radiobutton4); root->addWidget(radiobutton5); root->addWidget(radiobutton6); } static void create_otherbuttons(AwfVBoxLayout *root1, AwfHBoxLayout *root2, AwfHBoxLayout *root3, AwfHBoxLayout *root4, AwfHBoxLayout *root5) { //ok if (awf_trace) printf("» create_otherbuttons()\n"); // QPushButton QPushButton *button1, *button2, *button3, *button4; button1 = new QPushButton("Button 1"); button2 = new QPushButton("Button 2"); button2->setEnabled(false); button3 = new QPushButton("Button 3"); button3->setCheckable(true); button3->setChecked(true); button4 = new QPushButton("Button 4"); button4->setCheckable(true); button4->setChecked(true); button4->setEnabled(false); // QPushButton for dialogs QPushButton *button5, *button6, *button7, *button8; button5 = new QPushButton(_app("Choose a color")); button5->setMinimumWidth(186); // The 186 button5->setProperty("class", "awf-cheatcode-colorbtn"); QObject::connect(button5, &QPushButton::clicked, [=](){ QColorDialog::getColor(QColor("#7796ba"), window, "QColorDialog"); }); button6 = new QPushButton(_app("Choose a font")); button6->setMinimumWidth(186); // The 186 button6->setProperty("class", "awf-cheatcode-fontbtn"); QObject::connect(button6, &QPushButton::clicked, [=](){ bool ok; QFontDialog::getFont(&ok, QFont(), window, "QFontDialog"); }); button7 = new QPushButton(_app("Choose a file")); button7->setMinimumWidth(186); // The 186 button7->setProperty("class", "awf-cheatcode-filebtn"); QObject::connect(button7, &QPushButton::clicked, [=](){ QFileDialog::getOpenFileName(window, "QFileDialog:Open"); }); button8 = new QPushButton(_app("Choose a folder")); button8->setMinimumWidth(186); // The 186 button8->setProperty("class", "awf-cheatcode-folderbtn"); QObject::connect(button8, &QPushButton::clicked, [=](){ QFileDialog::getExistingDirectory(window, "QFileDialog:Open"); }); // Other QFontComboBox *button9; QDoubleSpinBox *button10; button9 = new QFontComboBox; button9->setSizeAdjustPolicy(QComboBox::AdjustToMinimumContentsLengthWithIcon); button9->setMinimumContentsLength(8); button10 = new QDoubleSpinBox; button10->setRange(-100, 100); button10->setSingleStep(1); button10->setValue(1); button10->setSuffix(" mm"); button10->setPrefix("± "); // layout root1->addWidget(button1); root1->addWidget(button2); root1->addWidget(button3); root1->addWidget(button4); root1->addWidget(button5); root1->addWidget(button6); root1->addWidget(button7); root1->addWidget(button8); root2->addWidget(button9); root3->addWidget(button10); root4->addStretch(); root5->addStretch(); } static void create_progressbars(AwfVBoxLayout *root1, AwfHBoxLayout *root2, AwfHBoxLayout *root3, AwfVBoxLayout *root4) { // ok if (awf_trace) printf("» create_progressbars()\n"); // QProgressBar progress1 = new QProgressBar; progress1->setOrientation(Qt::Horizontal); progress1->setTextVisible(false); progress1->setValue(50); progress2 = new QProgressBar; progress2->setOrientation(Qt::Horizontal); progress2->setTextVisible(false); progress2->setValue(50); progress2->setInvertedAppearance(true); progress2->setProperty("isInverted", true); progress3 = new QProgressBar; progress3->setOrientation(Qt::Vertical); progress3->setTextVisible(false); progress3->setValue(50); progress3->setFixedHeight(100); progress3->setInvertedAppearance(true); progress3->setProperty("isInverted", true); progress4 = new QProgressBar; progress4->setOrientation(Qt::Vertical); progress4->setTextVisible(false); progress4->setValue(50); progress4->setFixedHeight(100); QLocale locale; if ((locale.language() == QLocale::French) && (locale.territory() == QLocale::France)) { progress1->setFormat("%p %"); progress2->setFormat("%p %"); progress3->setFormat("%p %"); progress4->setFormat("%p %"); } // QSlider scale1 = create_horizontal_scale(50, false, false, QSlider::NoTicks); QObject::connect(scale1, &QSlider::valueChanged, [=](){ update_values(scale1); }); scale2 = create_horizontal_scale(50, false, true, QSlider::NoTicks); QObject::connect(scale2, &QSlider::valueChanged, [=](){ update_values(scale2); }); scale3 = create_vertical_scale(50, false, !false, QSlider::NoTicks); QObject::connect(scale3, &QSlider::valueChanged, [=](){ update_values(scale3); }); scale4 = create_vertical_scale(50, false, !true, QSlider::NoTicks); QObject::connect(scale4, &QSlider::valueChanged, [=](){ update_values(scale4); }); scale5 = create_vertical_scale(50, false, !false, QSlider::TicksAbove); scale5->setProperty("hasTicks", "TicksAbove"); QObject::connect(scale5, &QSlider::valueChanged, [=](){ update_values(scale5); }); scale6 = create_vertical_scale(50, false, !true, QSlider::TicksBelow); scale6->setProperty("hasTicks", "TicksBelow"); QObject::connect(scale6, &QSlider::valueChanged, [=](){ update_values(scale6); }); scale7 = create_vertical_scale(50, false, !true, QSlider::TicksBothSides); scale7->setProperty("hasTicks", "TicksBothSides"); QObject::connect(scale7, &QSlider::valueChanged, [=](){ update_values(scale7); }); // layout root1->addWidget(progress1); root1->addWidget(progress2); root1->addWidget(scale1); root1->addWidget(scale2); root2->addWidget(progress3); root2->addWidget(progress4); root2->addStretch(); root3->addWidget(scale3); root3->addWidget(scale5); root3->addWidget(scale6); root3->addWidget(scale4); root3->addWidget(scale7); root3->addStretch(); root4->addStretch(); } static void create_labels(AwfHBoxLayout *root) { // ok if (awf_trace) printf("» create_labels()\n"); QLabel *label1, *label2; // QLabel label1 = new QLabel("Label 1"); label2 = new QLabel("Label 2"); label2->setEnabled(false); // layout root->addWidget(label1); root->addStretch(); root->addWidget(label2); root->addStretch(); } static void create_spinners(AwfHBoxLayout *root) { } static void create_expander(AwfVBoxLayout *root) { // todo if (awf_trace) printf("» create_expander()\n"); QGroupBox *expander; QTextEdit *text; // QGroupBox expander = new QGroupBox(_app("More...")); expander->setCheckable(true); expander->setChecked(true); // QTextEdit text = new QTextEdit; text->setFixedHeight(120); text->setMinimumWidth(160); text->setWordWrapMode(QTextOption::WordWrap); text->setText(_app("A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme.") + " " + _app("A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme.")); // layout AwfVBoxLayout *expanderLayout = new AwfVBoxLayout(expander); expanderLayout->addWidget(text); root->addWidget(expander); } static void create_frames(AwfHBoxLayout *root1, AwfHBoxLayout *root2) { // todo if (awf_trace) printf("» create_frames()\n"); QGroupBox *frame1, *frame2, *frame3, *frame4; // QGroupBox frame1 = new QGroupBox("Frame (shadow in)"); frame1->setProperty("class", "border-inset"); frame2 = new QGroupBox("Frame (shadow out)"); frame2->setProperty("class", "border-outset"); frame3 = new QGroupBox("Frame (shadow etched in)"); frame3->setProperty("class", "border-groove"); frame4 = new QGroupBox("Frame (shadow etched out)"); frame4->setProperty("class", "border-ridge"); frame4->setEnabled(false); // layout root1->addWidget(frame1); root1->addWidget(frame2); root2->addWidget(frame3); root2->addWidget(frame4); } static void create_notebooks(AwfHBoxLayout *root1, AwfHBoxLayout *root2) { // ok if (awf_trace) printf("» create_notebooks()\n"); // QTabWidget notebook1 = new QTabWidget; notebook1->setTabPosition(QTabWidget::North); notebook1->setTabsClosable(false); notebook1->setUsesScrollButtons(false); notebook1->tabBar()->setExpanding(false); notebook1->tabBar()->setMovable(true); create_notebook_tab(notebook1, "Tab1", null, false); create_notebook_tab(notebook1, "Tab2", null, false); create_notebook_tab(notebook1, "Tab3", null, true); create_notebook_tab(notebook1, "Tab4", null, true); notebook2 = new QTabWidget; notebook2->setTabPosition(QTabWidget::South); notebook2->setTabsClosable(false); notebook2->setUsesScrollButtons(false); notebook2->tabBar()->setExpanding(false); notebook2->tabBar()->setMovable(true); create_notebook_tab(notebook2, "Tab1", null, false); create_notebook_tab(notebook2, "Tab2", null, false); create_notebook_tab(notebook2, "Tab3", null, true); create_notebook_tab(notebook2, "Tab4", null, true); notebook3 = new QTabWidget; notebook3->setTabPosition(QTabWidget::West); notebook3->setTabsClosable(false); notebook3->setUsesScrollButtons(false); notebook3->tabBar()->setExpanding(false); notebook3->tabBar()->setMovable(true); create_notebook_tab(notebook3, "T1", null, false); create_notebook_tab(notebook3, "Tab2", null, false); create_notebook_tab(notebook3, "T3b", null, true); create_notebook_tab(notebook3, "T4", null, true); notebook4 = new QTabWidget; notebook4->setTabPosition(QTabWidget::East); notebook4->setTabsClosable(false); notebook4->setUsesScrollButtons(false); notebook4->tabBar()->setExpanding(false); notebook4->tabBar()->setMovable(true); create_notebook_tab(notebook4, "T1", null, false); create_notebook_tab(notebook4, "Tab2", null, false); create_notebook_tab(notebook4, "T3b", null, true); create_notebook_tab(notebook4, "T4", null, true); // layout notebook1->setMinimumWidth(notebook1->tabBar()->sizeHint().width()); notebook2->setMinimumWidth(notebook2->tabBar()->sizeHint().width()); notebook3->setMinimumHeight(notebook3->tabBar()->sizeHint().height()); notebook4->setMinimumHeight(notebook4->tabBar()->sizeHint().height()); root1->addWidget(notebook1); root1->addWidget(notebook2); root2->addWidget(notebook3); root2->addWidget(notebook4); } static void create_notebook_tab(QTabWidget *notebook, QString text, QWidget *content, bool close) { // todo if (!content) content = new QWidget; content->setAutoFillBackground(true); if ((notebook->tabPosition() == QTabWidget::West) || (notebook->tabPosition() == QTabWidget::East)) { // @todo force horizontal tab for vertical tabs bar if (close) { QWidget *layout = new QWidget; layout->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum); QToolButton *btn = new QToolButton; btn->setIcon(get_icon("window-close")); btn->setIconSize(QSize(16, 16)); btn->setAutoRaise(true); // flat AwfHBoxLayout *hbox = new AwfHBoxLayout(layout); hbox->setContentsMargins(0, 0, 0, 0); hbox->addWidget(new QLabel(text)); hbox->addWidget(btn); layout->setLayout(hbox); notebook->tabBar()->setTabButton(notebook->addTab(content, ""), QTabBar::LeftSide, layout); } else { notebook->tabBar()->setTabButton(notebook->addTab(content, ""), QTabBar::LeftSide, new QLabel(text)); } } else if (close) { QToolButton *btn = new QToolButton; btn->setIcon(get_icon("window-close")); btn->setIconSize(QSize(16, 16)); btn->setAutoRaise(true); // flat notebook->tabBar()->setTabButton(notebook->addTab(content, text), QTabBar::RightSide, btn); } else { notebook->addTab(content, text); } } static void create_treview(AwfVBoxLayout *root) { // ok if (awf_trace) printf("» create_treview()\n"); QStandardItemModel *model = new QStandardItemModel; model->setColumnCount(11); model->setHorizontalHeaderLabels({ "i", "c", "r", "Text", "Progress", "Progress", "Text", "Icon", "Icon", "c", "r" }); auto addRow = [&](int a, bool b, bool c, QString d, int e, int f, QString g, QString h, QString i, bool j, bool k) { QList items; auto it0 = new QStandardItem; it0->setData(a, Qt::DisplayRole); auto it1 = new QStandardItem; it1->setData(b ? Qt::Checked : Qt::Unchecked, Qt::CheckStateRole); it1->setEditable(false); auto it2 = new QStandardItem; it2->setData(c ? Qt::Checked : Qt::Unchecked, Qt::CheckStateRole); it2->setEditable(false); auto it3 = new QStandardItem; it3->setData(d, Qt::DisplayRole); auto it4 = new QStandardItem; it4->setData(e, Qt::DisplayRole); it4->setEditable(false); auto it5 = new QStandardItem; it5->setData(f, Qt::DisplayRole); it5->setEditable(false); it5->setEnabled(false); auto it6 = new QStandardItem; it6->setData(g, Qt::DisplayRole); it6->setEditable(false); it6->setEnabled(false); auto it7 = new QStandardItem; it7->setIcon(get_icon(h)); it7->setEditable(false); auto it8 = new QStandardItem; it8->setIcon(get_icon(i)); it8->setEditable(false); it8->setEnabled(false); auto it9 = new QStandardItem; it9->setData(j ? Qt::Checked : Qt::Unchecked, Qt::CheckStateRole); it9->setEditable(false); it9->setEnabled(false); auto it10 = new QStandardItem; it10->setData(k ? Qt::Checked : Qt::Unchecked, Qt::CheckStateRole); it10->setEditable(false); it10->setEnabled(false); items << it0 << it1 << it2 << it3 << it4 << it5 << it6 << it7 << it8 << it9 << it10; model->appendRow(items); }; addRow(1, false, false, "Text 1.1", 0, 0, "Text 1.2", "document-open", "document-open", false, false); addRow(2, true, true, "Text 2.1", 10, 10, "Text 2.2", "document-save", "document-save", true, true); addRow(3, false, false, "Text 3.1", 20, 20, "Text 3.2", "document-save-as", "document-save-as", false, false); addRow(4, true, true, "Text 4.1", 30, 30, "Text 4.2", "view-refresh", "view-refresh", true, true); addRow(5, false, false, "Text 5.1", 40, 40, "Text 5.2", "edit-cut", "edit-cut", false, false); addRow(6, true, true, "Text 6.1", 50, 50, "Text 6.2", "help-browser", "help-browser", true, true); addRow(7, false, false, "Text 7.1", 60, 60, "Text 7.2", "document-open", "document-open", false, false); addRow(8, true, true, "Text 8.1", 70, 70, "Text 8.2", "document-save", "document-save", true, true); addRow(9, false, false, "Text 9.1", 80, 80, "Text 9.2", "document-save-as", "document-save-as", false, false); addRow(10, true, true, "Text 10.1", 90, 90, "Text 10.2", "view-refresh", "view-refresh", true, true); addRow(11, false, false, "Text 11.1", 100, 100, "Text 11.2", "edit-cut", "edit-cut", false, false); // QTreeView AwfTreeView *view = new AwfTreeView; // same as QTreeView *view = new QTreeView; but with QSS columns width support view->setFixedHeight(200); // The 200 view->setMinimumWidth(200); // The 200 model->setParent(view); view->setModel(model); view->setSortingEnabled(true); view->setRootIsDecorated(false); view->setItemsExpandable(false); view->setAlternatingRowColors(true); view->sortByColumn(0, Qt::AscendingOrder); view->setItemDelegateForColumn(2, new AwfRadioDelegate(view)); view->setItemDelegateForColumn(4, new AwfProgressDelegate(view)); view->setItemDelegateForColumn(5, new AwfProgressDelegate(view)); view->setItemDelegateForColumn(10, new AwfRadioDelegate(view)); view->header()->setStretchLastSection(false); view->header()->setMinimumSectionSize(16); for (int c = 0; c < model->columnCount(); ++c) view->resizeColumnToContents(c); view->header()->setSectionResizeMode(QHeaderView::Interactive); root->addWidget(view); } static void create_scales() { } static QSlider* create_horizontal_scale(int value, bool draw, bool inverted, QSlider::TickPosition position) { // todo if (awf_trace) printf("» create_horizontal_scale()\n"); QSlider *scale = new QSlider(Qt::Horizontal); scale->setRange(0, 100); scale->setValue(value); scale->setInvertedAppearance(inverted); if (inverted) scale->setProperty("isInverted", true); // @todo draw scale->setTickPosition(position); scale->setFixedWidth(186); // The 186 scale->setTracking(true); return scale; } static QSlider* create_vertical_scale(int value, bool draw, bool inverted, QSlider::TickPosition position) { // todo if (awf_trace) printf("» create_vertical_scale()\n"); QSlider *scale = new QSlider(Qt::Vertical); scale->setRange(0, 100); scale->setValue(value); scale->setInvertedAppearance(inverted); if (inverted) scale->setProperty("isInverted", true); // @todo draw scale->setTickPosition(position); scale->setFixedHeight(100); // The 100 scale->setTracking(true); return scale; } // traditional menu static void create_traditional_menubar(QMenuBar *root) { if (awf_trace) printf("» create_traditional_menubar()\n"); static AwfShortcutFilter *g_shortcutFilter = new AwfShortcutFilter; QMenu *menu, *submenu, *base; QActionGroup *group; QAction *menuitem; bool ok = false, noRefresh = !awf_gqss, noPrint = false; #if ! defined (QT_PRINTSUPPORT_LIB) noPrint = true; #endif // options menu = root->addMenu(_app("_Options")); menu->installEventFilter(g_shortcutFilter); // @todo option command line? if (qEnvironmentVariableIsSet("AWF_TEAROFF")) menu->setTearOffEnabled(true); create_menuitem(menu, get_icon("document-open"), _qt("QFileDialog", "&Open"), false, AWF_ACCEL_OPEN, AWF_OPEN, dialog_open); create_menuitem(menu, QIcon(), _app("Open recent file"), true, AWF_ACCEL_RECE, AWF_RECE, null); create_menuitem(menu, get_icon("document-save"), _qt("QFileDialog", "&Save"), false, AWF_ACCEL_SAVE, AWF_SAVE, dialog_save); create_menuitem(menu, get_icon("view-refresh"), _app("_Refresh"), noRefresh, AWF_ACCEL_REFR, AWF_REFR, [](){ on_sighup(0); }); create_menuitem(menu, QIcon(), _app("Calendar"), false, AWF_ACCEL_CALE, AWF_CALE, dialog_calendar); create_menuitem(menu, QIcon(), "QSliders", false, AWF_ACCEL_SCAL, AWF_SCAL, dialog_scales); create_menuitem(menu, get_icon("document-properties"), _app("Properties"), false, AWF_ACCEL_PROP, AWF_PROP, dialog_message); create_menuitem(menu, get_icon("document-page-setup"),_app("Page Set&up"), noPrint, AWF_ACCEL_PRSE, AWF_PRSE, dialog_page_setup); create_menuitem(menu, get_icon("document-print"), _qt("QPrintDialog", "&Print"), noPrint, AWF_ACCEL_PRIN, AWF_PRIN, dialog_print); submenu = menu->addMenu(_app("More...")); create_menuitem(submenu, get_icon("edit-cut"), _qt("QLineEdit", "Cu&t"), false, AWF_ACCEL_MCUT, AWF_MCUT, null); create_menuitem(submenu, get_icon("edit-copy"), _qt("QLineEdit", "&Copy"), false, AWF_ACCEL_MCOP, AWF_MCOP, null); create_menuitem(submenu, get_icon("edit-paste"), _qt("QLineEdit", "&Paste"), false, AWF_ACCEL_MPAS, AWF_MPAS, null); menu->addSeparator(); create_menuitem_check(menu, QString("Check 1 %1").arg(_app("(unchecked)")), false, false, false); create_menuitem_check(menu, QString("Check 2 %1").arg(_app("(checked)")), true, false, false); create_menuitem_check(menu, QString("Check 3 %1").arg(_app("(inconsistent)")), false, true, false); create_menuitem_check(menu, QString("Check 1 %1").arg(_app("(unchecked)")), false, false, true); create_menuitem_check(menu, QString("Check 2 %1").arg(_app("(checked)")), true, false, true); create_menuitem_check(menu, QString("Check 3 %1").arg(_app("(inconsistent)")), false, true, true); menu->addSeparator(); group = new QActionGroup(window); group->setExclusive(true); create_menuitem_radio(menu, QString("Radio 1 %1").arg(_app("(unchecked)")), false, false, false, group); create_menuitem_radio(menu, QString("Radio 2 %1").arg(_app("(checked)")), true, false, false, group); create_menuitem_radio(menu, QString("Radio 3 %1").arg(_app("(inconsistent)")), false, true, false, group); group = new QActionGroup(window); group->setExclusive(true); create_menuitem_radio(menu, QString("Radio 1 %1").arg(_app("(unchecked)")), false, false, true, group); create_menuitem_radio(menu, QString("Radio 2 %1").arg(_app("(checked)")), true, false, true, group); create_menuitem_radio(menu, QString("Radio 3 %1").arg(_app("(inconsistent)")), false, true, true, group); menu->addSeparator(); create_menuitem(menu, get_icon("window-close"), _qt("QMdiSubWindow", "&Close"), true, AWF_ACCEL_CLOS, AWF_CLOS, null); create_menuitem(menu, get_icon("application-exit"), _qt("QCocoaMenuItem", "Quit"), false, AWF_ACCEL_QUIT, AWF_QUIT, qApp->quit); // system themes group = new QActionGroup(window); group->setExclusive(true); menu = root->addMenu(_app("_System themes")); for (QString theme : list_system_theme) { if (theme == "Azertyuiop") { submenu = menu->addMenu(theme); base = submenu; ok = true; } else if (ok && theme.startsWith("Azertyuiop")) { base = submenu; } else { base = menu; ok = false; } if (list_user_theme.contains(theme)) { menuitem = create_menuitem_radio(base, theme, false, false, true, group); if (theme == current_theme) menuitem->setChecked(true); QObject::connect(menuitem, &QAction::triggered, [theme](){ update_theme(theme); }); } else { menuitem = create_menuitem_radio(base, theme, false, false, false, group); if (theme == current_theme) menuitem->setChecked(true); QObject::connect(menuitem, &QAction::triggered, [theme](){ update_theme(theme); }); } } if (noRefresh) create_menuitem(menu, QIcon(), _app("GlobalQSS not available"), true, QKeySequence(), null, null); else if (list_system_theme.isEmpty()) create_menuitem(menu, QIcon(), _app("No themes found"), true, QKeySequence(), null, null); // user themes menu = root->addMenu(_app("_User themes")); for (QString theme : list_user_theme) { if (theme == "Azertyuiop") { submenu = menu->addMenu(theme); base = submenu; ok = true; } else if (ok && theme.startsWith("Azertyuiop")) { base = submenu; } else { base = menu; ok = false; } menuitem = create_menuitem_radio(base, theme, false, false, false, group); if (theme == current_theme) menuitem->setChecked(true); QObject::connect(menuitem, &QAction::triggered, [theme](){ update_theme(theme); }); } if (noRefresh) create_menuitem(menu, QIcon(), _app("GlobalQSS not available"), true, QKeySequence(), null, null); else if (list_user_theme.isEmpty()) create_menuitem(menu, QIcon(), _app("No themes found"), true, QKeySequence(), null, null); // text direction menu = root->addMenu(_app("_Text direction")); group = new QActionGroup(window); group->setExclusive(true); menuitem = create_menuitem_radio(menu, _app("Left to Right (LTR)"), false, false, false, group); if (current_direction == 1) menuitem->setChecked(true); QObject::connect(menuitem, &QAction::triggered, [](){ update_text_direction(1); }); // Qt::LeftToRight menuitem = create_menuitem_radio(menu, _app("Right to Left (RTL)"), false, false, false, group); if (current_direction == 2) menuitem->setChecked(true); QObject::connect(menuitem, &QAction::triggered, [](){ update_text_direction(2); }); // Qt::RightToLeft // help menu = root->addMenu(_qt("QWizard", "&Help")); menu->installEventFilter(g_shortcutFilter); create_menuitem(menu, QIcon(), "QtInspector", false, AWF_ACCEL_INSP, AWF_INSP, dialog_inspector); create_menuitem(menu, get_icon("help-about"), _qt("QCocoaMenuItem", "About"), false, AWF_ACCEL_ABOU, AWF_ABOU, dialog_about); // gtk-can-change-accels for Qt | so same GTK 2.24 3.x 4.x & Qt 5.x 6.x accels_load(); } static QAction* create_menuitem_check(QMenu *menu, QString text, bool chk, bool ist, bool dsb) { if (awf_trace) printf("» create_menuitem_check(%s)\n", text.toUtf8().constData()); QAction *menuitem; menuitem = new QAction(text, window); menuitem->setCheckable(true); menuitem->setChecked(chk); // @todo inconsistent (ist) menuitem->setEnabled(!dsb); menu->addAction(menuitem); return menuitem; } static QAction* create_menuitem_radio(QMenu *menu, QString text, bool chk, bool ist, bool dsb, QActionGroup *group) { if (awf_trace) printf("» create_menuitem_radio(%s)\n", text.toUtf8().constData()); QAction *menuitem; menuitem = new QAction(text, group); menuitem->setCheckable(true); menuitem->setChecked(chk); // @todo inconsistent (ist) menuitem->setEnabled(!dsb); menu->addAction(menuitem); return menuitem; } static QAction* create_menuitem(QMenu *menu, QIcon icon, QString text, bool dsb, QKeySequence acl, QString kmp, std::function function) { if (awf_trace) printf("» create_menuitem(%s)\n", text.toUtf8().constData()); QAction *menuitem; menuitem = new QAction(icon, text, window); menuitem->setShortcut(acl); menuitem->setEnabled(!dsb); if (!kmp.isEmpty()) menuitem->setObjectName(kmp); if (function) QObject::connect(menuitem, &QAction::triggered, function); menu->addAction(menuitem); return menuitem; } static void accels_load() { // ok if (awf_trace) printf("» accels_load()\n"); QString oldPath = QDir::homePath() + "/.awf-gtk-accels"; if (QFile::exists(oldPath)) QFile::rename(oldPath, QDir::homePath() + "/.awf-accels"); // gtk-can-change-accels for Qt | so same GTK 2.24 3.x 4.x & Qt 5.x 6.x QFile f(QDir::homePath() + QStringLiteral("/.awf-accels")); if (f.exists() && f.open(QIODevice::ReadOnly | QIODevice::Text)) { QMap accels; QMap actions; QString kmp, acl; auto parseModifiers = [](QString mod) { Qt::KeyboardModifiers m = Qt::NoModifier; if (mod.contains("Primary")) m |= static_cast(Qt::CTRL); if (mod.contains("Shift")) m |= static_cast(Qt::SHIFT); if (mod.contains("Alt")) m |= static_cast(Qt::ALT); if (mod.contains("Meta")) m |= static_cast(Qt::META); return m; }; auto parseKey = [](QString keyStr) { if (keyStr.length() == 1) return static_cast(keyStr.toUpper().at(0).unicode()); if ((keyStr.compare("Delete", Qt::CaseInsensitive) == 0) || (keyStr.compare("Del", Qt::CaseInsensitive) == 0)) return Qt::Key_Delete; if (keyStr.compare("Return", Qt::CaseInsensitive) == 0) return Qt::Key_Return; if (keyStr.compare("F1", Qt::CaseInsensitive) == 0) return Qt::Key_F1; if (keyStr.compare("F2", Qt::CaseInsensitive) == 0) return Qt::Key_F2; if (keyStr.compare("F3", Qt::CaseInsensitive) == 0) return Qt::Key_F3; if (keyStr.compare("F4", Qt::CaseInsensitive) == 0) return Qt::Key_F4; if (keyStr.compare("F5", Qt::CaseInsensitive) == 0) return Qt::Key_F5; if (keyStr.compare("F6", Qt::CaseInsensitive) == 0) return Qt::Key_F6; if (keyStr.compare("F7", Qt::CaseInsensitive) == 0) return Qt::Key_F7; if (keyStr.compare("F8", Qt::CaseInsensitive) == 0) return Qt::Key_F8; if (keyStr.compare("F9", Qt::CaseInsensitive) == 0) return Qt::Key_F9; if (keyStr.compare("F10", Qt::CaseInsensitive) == 0) return Qt::Key_F10; if (keyStr.compare("F11", Qt::CaseInsensitive) == 0) return Qt::Key_F11; if (keyStr.compare("F12", Qt::CaseInsensitive) == 0) return Qt::Key_F12; return Qt::Key_unknown; }; // read file // QMap accels QTextStream in(&f); while (!in.atEnd()) { //; (gtk_accel_path "/Test/Print" "p") QString l = in.readLine().trimmed(); if (l.isEmpty() || l.startsWith(';')) continue; int a = l.indexOf('"'); if (a < 0) continue; int b = l.indexOf('"', a + 1); if (b < 0) continue; int c = l.indexOf('"', b + 1); if (c < 0) continue; int d = l.indexOf('"', c + 1); if (d < 0) continue; kmp = l.mid(a + 1, b - a - 1); acl = l.mid(c + 1, d - c - 1); if (kmp.isEmpty()) continue; if (awf_debug) printf("accels_foundInFile: %s %s\n", kmp.toUtf8().constData(), acl.toUtf8().constData()); accels.insert(kmp, acl); } f.close(); // find all QAction in submenus and menus // QMap actions for (QAction *menuAction : window->menuBar()->actions()) { QMenu *menu = menuAction->menu(); if (!menu) continue; for (QAction *action : menu->actions()) { QMenu *subMenu = action->menu(); if (subMenu) { for (QAction *subAction : subMenu->actions()) { kmp = subAction->objectName(); if (accels.contains(kmp)) actions.insert(kmp, subAction); } } else { kmp = action->objectName(); if (accels.contains(kmp)) actions.insert(kmp, action); } } } // apply shortcuts for (QString tmp : actions.keys()) { kmp = tmp; acl = accels.value(kmp); if (awf_debug) printf("accels_foundInMenu: %s %s\n", kmp.toUtf8().constData(), acl.toUtf8().constData()); if (acl.isEmpty()) { actions.value(kmp)->setProperty("shortcutModified", true); actions.value(kmp)->setShortcut(QKeySequence()); } else { Qt::KeyboardModifiers mods = parseModifiers(acl); acl.remove(QRegularExpression("<.*>")); Qt::Key key = parseKey(acl); if (key == Qt::Key_unknown) { printf("accels_foundInMenu: %s %s » unknown key\n", kmp.toUtf8().constData(), acl.toUtf8().constData()); } else { actions.value(kmp)->setProperty("shortcutModified", true); actions.value(kmp)->setShortcut(QKeySequence(key | mods)); } } } } } static bool accels_change(QObject *obj, QEvent *event) { // ok // gtk-can-change-accels for Qt | so same GTK 2.24 3.x 4.x & Qt 5.x 6.x if (event->type() != QEvent::KeyPress) return false; QMenu *menu = qobject_cast(obj); if (!menu || !menu->activeAction()) return false; QAction *menuitem = menu->activeAction(); if (menuitem->objectName().isEmpty()) return false; QKeyEvent *keyEvent = static_cast(event); int key = keyEvent->key(); if ((key == Qt::Key_Control) || (key == Qt::Key_Shift) || (key == Qt::Key_Meta) || (key == Qt::Key_Alt)) return false; if (awf_trace) printf("» accels_change()\n"); Qt::KeyboardModifiers mods = keyEvent->modifiers(); bool del = (key == Qt::Key_Delete) || (key == Qt::Key_Backspace); if ( del || // f1..12 ((key >= Qt::Key_F1) && (key <= Qt::Key_F12)) || // crtl/shift/super/alt + ? mods ) { must_save_accels = true; QKeySequence seq = del ? QKeySequence() : QKeySequence(mods | key); menuitem->setProperty("shortcutModified", true); menuitem->setShortcut(seq); return true; } return false; } static void accels_save() { // ok if (awf_trace) printf("» accels_save()\n"); // gtk-can-change-accels for Qt | so same GTK 2.24 3.x 4.x & Qt 5.x 6.x // gtk_accel_map_save if (must_save_accels) { QFile f(QDir::homePath() + QStringLiteral("/.awf-accels")); if (f.open(QIODevice::WriteOnly | QIODevice::Text)) { QMap actions; QString kmp, acl; QAction *act; auto parseModifiers = [](Qt::KeyboardModifiers m) { QString s; if (m & Qt::CTRL) s += QString(""); if (m & Qt::SHIFT) s += QString(""); if (m & Qt::ALT) s += QString(""); if (m & Qt::META) s += QString(""); return s; }; auto parseKey = [](Qt::Key k) { if ((k >= Qt::Key_A) && (k <= Qt::Key_Z)) return QString(QChar('a' + (k - Qt::Key_A))); if (k == Qt::Key_Delete) return QString("Delete"); if (k == Qt::Key_Return) return QString("Return"); if (k == Qt::Key_F1) return QString("F1"); if (k == Qt::Key_F2) return QString("F2"); if (k == Qt::Key_F3) return QString("F3"); if (k == Qt::Key_F4) return QString("F4"); if (k == Qt::Key_F5) return QString("F5"); if (k == Qt::Key_F6) return QString("F6"); if (k == Qt::Key_F7) return QString("F7"); if (k == Qt::Key_F8) return QString("F8"); if (k == Qt::Key_F9) return QString("F9"); if (k == Qt::Key_F10) return QString("F10"); if (k == Qt::Key_F11) return QString("F11"); if (k == Qt::Key_F12) return QString("F12"); return QString(); }; // find all QAction in submenus and menus // QMap actions for (QAction *menuAction : window->menuBar()->actions()) { QMenu *menu = menuAction->menu(); if (!menu) continue; for (QAction *action : menu->actions()) { QMenu *subMenu = action->menu(); if (subMenu) { for (QAction *subAction : subMenu->actions()) { kmp = subAction->objectName(); if (!kmp.isEmpty()) actions.insert(kmp, subAction); } } else { kmp = action->objectName(); if (!kmp.isEmpty()) actions.insert(kmp, action); } } } // save file QTextStream out(&f); out << "; awf-qt" << QT_VERSION_MAJOR << " GtkAccelMap rc-file -*- scheme -*-\n"; out << "; this file is an automated accelerator map dump\n"; out << ";\n"; for (QString tmp : actions.keys()) { kmp = tmp; act = actions.value(kmp); acl = act->shortcut().toString(); if (!acl.isEmpty()) { const QKeyCombination kc = act->shortcut()[0]; Qt::Key key = kc.key(); Qt::KeyboardModifiers mods = kc.keyboardModifiers(); acl = parseModifiers(mods) + parseKey(key); } out << (act->property("shortcutModified").toBool() ? "" : "; ") << "(gtk_accel_path \"" << kmp << "\" \"" << acl << "\")\n"; } out << "\n"; f.close(); } } } // dialogs static void dialog_open() { // ok if (awf_trace) printf("» dialog_open()\n"); QFileDialog::getOpenFileNames(window, "QFileDialog:Open"); } static void dialog_save() { // ok if (awf_trace) printf("» dialog_save()\n"); QFileDialog::getSaveFileName(window, "QFileDialog:Save"); } static void dialog_message() { // ok if (awf_trace) printf("» dialog_message()\n"); QMessageBox msgBox(window); msgBox.setIcon(QMessageBox::Information); msgBox.setWindowTitle("QMessageBox"); msgBox.setText("QMessageBox"); msgBox.setInformativeText(_app("A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme.")); msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No); msgBox.exec(); } static void dialog_page_setup() { // ok if (awf_trace) printf("» dialog_page_setup()\n"); QPrinter printer; QPageSetupDialog(&printer, window).exec(); } static void dialog_print() { // ok if (awf_trace) printf("» dialog_print()\n"); QPrinter printer; QPrintDialog(&printer, window).exec(); } static void dialog_about() { // ok if (awf_trace) printf("» dialog_about()\n"); QString cpp; switch (__cplusplus) { case 199711L: cpp = "C++98"; break; case 201103L: cpp = "C++11"; break; case 201402L: cpp = "C++14"; break; case 201703L: cpp = "C++17"; break; case 202002L: cpp = "C++20"; break; case 202302L: cpp = "C++23"; break; default: cpp = "C++ (" + QString::number(__cplusplus) + ")"; break; } QString t1 = QString("%1

%2 %3

%4
%5
QT_QPA_PLATFORMTHEME=%6 QT_STYLE_OVERRIDE=%7") .arg(_app("A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme.")) .arg(QString(_app("Remove %1 file")).arg("~/.awf-accels")) .arg(_app("to reset keyboard shortcuts.")) .arg(QString(_app("compiled in %1 with qt %2.%3.%4")).arg(cpp).arg(QT_VERSION_MAJOR).arg(QT_VERSION_MINOR).arg(QT_VERSION_PATCH)) .arg(QString(_app(" started with qt %1")).arg(qVersion())) .arg(QString::fromUtf8(qgetenv("QT_QPA_PLATFORMTHEME"))) .arg(QString::fromUtf8(qgetenv("QT_STYLE_OVERRIDE"))); QString t2 = QString("awf-qt%1 / %2

%3

%4

%5

%6") .arg(QT_VERSION_MAJOR) .arg(VERSION) .arg(t1) .arg("https://github.com/luigifab/awf-extended") .arg("Copyright © 2020-2026 Fabrice Creuzot (luigifab)
Copyright © 2011-2017 Valère Monseur (valr)") .arg(_app("A widget factory 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.")); QMessageBox::about(window, _qt("QCocoaMenuItem", "About"), t2); } static void dialog_inspector() { // ok if (awf_trace) printf("» dialog_inspector()\n"); if (inspector) { inspector->raise(); inspector->activateWindow(); } else { inspector = new QDialog(window, Qt::Window); inspector->setAttribute(Qt::WA_DeleteOnClose); inspector->setWindowTitle("QtInspector"); inspector->resize(500, 400); QTextEdit *textEdit = new QTextEdit; textEdit->setAcceptRichText(false); textEdit->setFont(QFontDatabase::systemFont(QFontDatabase::FixedFont)); textEdit->setPlaceholderText(_app("Write QSS here...")); textEdit->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); QPushButton *btnCopy = new QPushButton(_qt("QShortcut", "Copy")); btnCopy->setIcon(get_icon("edit-copy")); QPushButton *btnClear = new QPushButton(_qt("QShortcut", "Clear")); btnClear->setIcon(get_icon("edit-clear")); QPushButton *btnClose = new QPushButton(_qt("QMdiSubWindow", "&Close")); btnClose->setIcon(get_icon("dialog-close")); AwfHBoxLayout *buttonLayout = new AwfHBoxLayout; buttonLayout->addWidget(btnCopy); buttonLayout->addWidget(btnClear); buttonLayout->addWidget(btnClose); AwfVBoxLayout *mainLayout = new AwfVBoxLayout; mainLayout->addWidget(textEdit); mainLayout->addLayout(buttonLayout); inspector->setLayout(mainLayout); QTimer* counter = new QTimer(inspector); counter->setSingleShot(true); QObject::connect(textEdit, &QTextEdit::textChanged, counter, [=](){ counter->start(1000); }); QObject::connect(btnClose, &QPushButton::clicked, inspector, [=](){ inspector->close(); }); QObject::connect(btnCopy, &QPushButton::clicked, inspector, [=](){ QString text = textEdit->toPlainText(); if (!text.isEmpty()) QApplication::clipboard()->setText(text); }); QObject::connect(btnClear, &QPushButton::clicked, inspector, [=](){ if (awf_gqss && (original_style == "!^!")) original_style = qApp->styleSheet(); qApp->setStyleSheet(original_style); original_style = "!^!"; QSignalBlocker blocker(textEdit); textEdit->clear(); }); QObject::connect(inspector, &QWidget::destroyed, window, [=](){ if (awf_gqss && (original_style == "!^!")) original_style = qApp->styleSheet(); qApp->setStyleSheet(original_style); original_style = "!^!"; inspector = null; }); QObject::connect(window, &QWidget::destroyed, inspector, &QWidget::close); QObject::connect(counter, &QTimer::timeout, inspector, [=](){ if (awf_gqss && (original_style == "!^!")) original_style = qApp->styleSheet(); #if defined (Q_OS_UNIX) int savedFd = dup(fileno(stderr)); FILE* ignored = freopen("/dev/null", "w", stderr); qApp->setStyleSheet(original_style + "\n\n" + textEdit->toPlainText()); fflush(stderr); dup2(savedFd, fileno(stderr)); close(savedFd); #else qApp->setStyleSheet(original_style + "\n\n" + textEdit->toPlainText()); #endif }); inspector->show(); } } static void dialog_calendar() { if (awf_trace) printf("» dialog_calendar()\n"); QWidget *dialog = new QDialog(window, Qt::Window | Qt::Dialog); dialog->setWindowModality(Qt::ApplicationModal); dialog->setAttribute(Qt::WA_DeleteOnClose); dialog->setWindowTitle("QDialog"); dialog->setObjectName("AwfDialogWindow"); dialog->setFixedSize(500, 400); dialog->show(); } static void dialog_scales() { if (awf_trace) printf("» dialog_scales()\n"); QWidget *dialog = new QDialog(window, Qt::Window | Qt::Dialog); dialog->setWindowModality(Qt::ApplicationModal); dialog->setAttribute(Qt::WA_DeleteOnClose); dialog->setWindowTitle("QDialog"); dialog->setObjectName("AwfDialogWindow"); dialog->setFixedSize(500, 400); dialog->show(); } #include "awf-qt6.moc"awf-extended-4.1.0/src/awf.pot000066400000000000000000000307611517644610000161720ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2026-05-01 10:38+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" #: gtk-awf/src/awf-gtk2.c:340 gtk-awf/src/awf-gtk2.c:2560 #: gtk-awf/src/awf-gtk3.c:349 gtk-awf/src/awf-gtk3.c:2977 #: gtk-awf/src/awf-gtk4.c:338 gtk-awf/src/awf-gtk4.c:2917 #, c-format msgid " started with gtk %d.%d.%d and glib %d.%d.%d and pango %s" msgstr "" #: gtk-awf/src/awf-qt5.cpp:597 gtk-awf/src/awf-qt5.cpp:2528 #: gtk-awf/src/awf-qt6.cpp:571 gtk-awf/src/awf-qt6.cpp:2487 msgid " started with qt %1" msgstr "" #: gtk-awf/src/awf-gtk2.c:2081 gtk-awf/src/awf-gtk2.c:2085 #: gtk-awf/src/awf-gtk2.c:2093 gtk-awf/src/awf-gtk2.c:2098 #: gtk-awf/src/awf-gtk3.c:2463 gtk-awf/src/awf-gtk3.c:2467 #: gtk-awf/src/awf-gtk3.c:2475 gtk-awf/src/awf-gtk3.c:2480 #: gtk-awf/src/awf-gtk4.c:2411 gtk-awf/src/awf-gtk4.c:2427 #: gtk-awf/src/awf-gtk4.c:2442 gtk-awf/src/awf-gtk4.c:2452 #: gtk-awf/src/awf-qt5.cpp:1999 gtk-awf/src/awf-qt5.cpp:2003 #: gtk-awf/src/awf-qt5.cpp:2012 gtk-awf/src/awf-qt5.cpp:2019 #: gtk-awf/src/awf-qt6.cpp:1957 gtk-awf/src/awf-qt6.cpp:1961 #: gtk-awf/src/awf-qt6.cpp:1970 gtk-awf/src/awf-qt6.cpp:1977 msgid "(checked)" msgstr "" #: gtk-awf/src/awf-gtk2.c:2082 gtk-awf/src/awf-gtk2.c:2086 #: gtk-awf/src/awf-gtk2.c:2094 gtk-awf/src/awf-gtk2.c:2099 #: gtk-awf/src/awf-gtk3.c:2464 gtk-awf/src/awf-gtk3.c:2468 #: gtk-awf/src/awf-gtk3.c:2476 gtk-awf/src/awf-gtk3.c:2481 #: gtk-awf/src/awf-gtk4.c:2413 gtk-awf/src/awf-gtk4.c:2429 #: gtk-awf/src/awf-gtk4.c:2443 gtk-awf/src/awf-gtk4.c:2453 #: gtk-awf/src/awf-qt5.cpp:2000 gtk-awf/src/awf-qt5.cpp:2004 #: gtk-awf/src/awf-qt5.cpp:2013 gtk-awf/src/awf-qt5.cpp:2020 #: gtk-awf/src/awf-qt6.cpp:1958 gtk-awf/src/awf-qt6.cpp:1962 #: gtk-awf/src/awf-qt6.cpp:1971 gtk-awf/src/awf-qt6.cpp:1978 msgid "(inconsistent)" msgstr "" #: gtk-awf/src/awf-gtk2.c:2080 gtk-awf/src/awf-gtk2.c:2084 #: gtk-awf/src/awf-gtk2.c:2091 gtk-awf/src/awf-gtk2.c:2096 #: gtk-awf/src/awf-gtk3.c:2462 gtk-awf/src/awf-gtk3.c:2466 #: gtk-awf/src/awf-gtk3.c:2473 gtk-awf/src/awf-gtk3.c:2478 #: gtk-awf/src/awf-gtk4.c:2405 gtk-awf/src/awf-gtk4.c:2420 #: gtk-awf/src/awf-gtk4.c:2441 gtk-awf/src/awf-gtk4.c:2451 #: gtk-awf/src/awf-qt5.cpp:1998 gtk-awf/src/awf-qt5.cpp:2002 #: gtk-awf/src/awf-qt5.cpp:2011 gtk-awf/src/awf-qt5.cpp:2018 #: gtk-awf/src/awf-qt6.cpp:1956 gtk-awf/src/awf-qt6.cpp:1960 #: gtk-awf/src/awf-qt6.cpp:1969 gtk-awf/src/awf-qt6.cpp:1976 msgid "(unchecked)" msgstr "" #: gtk-awf/src/awf-gtk2.c:328 gtk-awf/src/awf-gtk2.c:796 #: gtk-awf/src/awf-gtk3.c:337 gtk-awf/src/awf-gtk3.c:935 #: gtk-awf/src/awf-gtk4.c:326 gtk-awf/src/awf-gtk4.c:885 #, c-format msgid "A widget factory - GTK %d.%d" msgstr "" #: gtk-awf/src/awf-qt5.cpp:589 gtk-awf/src/awf-qt5.cpp:605 #: gtk-awf/src/awf-qt5.cpp:991 gtk-awf/src/awf-qt6.cpp:563 #: gtk-awf/src/awf-qt6.cpp:578 gtk-awf/src/awf-qt6.cpp:957 msgid "A widget factory - Qt %1.%2" msgstr "" #: gtk-awf/src/awf-gtk2.c:685 gtk-awf/src/awf-gtk2.c:1484 #: gtk-awf/src/awf-gtk2.c:2490 gtk-awf/src/awf-gtk2.c:2552 #: gtk-awf/src/awf-gtk3.c:791 gtk-awf/src/awf-gtk3.c:1826 #: gtk-awf/src/awf-gtk3.c:2894 gtk-awf/src/awf-gtk3.c:2969 #: gtk-awf/src/awf-gtk4.c:735 gtk-awf/src/awf-gtk4.c:1793 #: gtk-awf/src/awf-gtk4.c:2827 gtk-awf/src/awf-gtk4.c:2909 #: gtk-awf/src/awf-qt5.cpp:930 gtk-awf/src/awf-qt5.cpp:1709 #: gtk-awf/src/awf-qt5.cpp:2484 gtk-awf/src/awf-qt5.cpp:2524 #: gtk-awf/src/awf-qt6.cpp:902 gtk-awf/src/awf-qt6.cpp:1667 #: gtk-awf/src/awf-qt6.cpp:2443 gtk-awf/src/awf-qt6.cpp:2483 msgid "" "A widget factory is a theme preview application for GTK and Qt. It displays " "the various widget types in a single window allowing to see the visual " "effect of the applied theme." msgstr "" #: gtk-awf/src/awf-gtk2.c:2570 gtk-awf/src/awf-gtk3.c:2987 #: gtk-awf/src/awf-gtk4.c:2927 gtk-awf/src/awf-qt5.cpp:2538 #: gtk-awf/src/awf-qt6.cpp:2497 msgid "" "A widget factory 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." msgstr "" #: gtk-awf/src/awf-gtk2.c:2064 gtk-awf/src/awf-gtk3.c:2446 #: gtk-awf/src/awf-gtk4.c:2383 gtk-awf/src/awf-qt5.cpp:1984 #: gtk-awf/src/awf-qt6.cpp:1942 msgid "Calendar" msgstr "" #: gtk-awf/src/awf-gtk2.c:1274 gtk-awf/src/awf-gtk3.c:1535 #: gtk-awf/src/awf-gtk4.c:1514 gtk-awf/src/awf-gtk4.c:1519 #: gtk-awf/src/awf-qt5.cpp:1526 gtk-awf/src/awf-qt6.cpp:1484 msgid "Choose a color" msgstr "" #: gtk-awf/src/awf-gtk2.c:1286 gtk-awf/src/awf-gtk3.c:1547 #: gtk-awf/src/awf-gtk4.c:1536 gtk-awf/src/awf-qt5.cpp:1541 #: gtk-awf/src/awf-qt6.cpp:1499 msgid "Choose a file" msgstr "" #: gtk-awf/src/awf-gtk2.c:1291 gtk-awf/src/awf-gtk3.c:1552 #: gtk-awf/src/awf-gtk4.c:1540 gtk-awf/src/awf-qt5.cpp:1548 #: gtk-awf/src/awf-qt6.cpp:1506 msgid "Choose a folder" msgstr "" #: gtk-awf/src/awf-gtk2.c:1280 gtk-awf/src/awf-gtk3.c:1541 #: gtk-awf/src/awf-gtk4.c:1527 gtk-awf/src/awf-gtk4.c:1532 #: gtk-awf/src/awf-qt5.cpp:1533 gtk-awf/src/awf-qt6.cpp:1491 msgid "Choose a font" msgstr "" #: gtk-awf/src/awf-qt5.cpp:2061 gtk-awf/src/awf-qt5.cpp:2089 #: gtk-awf/src/awf-qt6.cpp:2019 gtk-awf/src/awf-qt6.cpp:2047 msgid "GlobalQSS not available" msgstr "" #: gtk-awf/src/awf-gtk2.c:2199 gtk-awf/src/awf-gtk3.c:2581 #: gtk-awf/src/awf-gtk4.c:2566 gtk-awf/src/awf-qt5.cpp:2099 #: gtk-awf/src/awf-qt6.cpp:2057 msgid "Left to Right (LTR)" msgstr "" #: gtk-awf/src/awf-gtk2.c:330 gtk-awf/src/awf-gtk3.c:339 #: gtk-awf/src/awf-gtk3.c:380 gtk-awf/src/awf-gtk4.c:328 #: gtk-awf/src/awf-gtk4.c:365 gtk-awf/src/awf-qt5.cpp:591 #: gtk-awf/src/awf-qt5.cpp:608 gtk-awf/src/awf-qt6.cpp:565 #: gtk-awf/src/awf-qt6.cpp:581 msgid "List available themes." msgstr "" #: gtk-awf/src/awf-gtk2.c:1473 gtk-awf/src/awf-gtk2.c:2070 #: gtk-awf/src/awf-gtk3.c:1802 gtk-awf/src/awf-gtk3.c:2452 #: gtk-awf/src/awf-gtk4.c:1775 gtk-awf/src/awf-gtk4.c:2390 #: gtk-awf/src/awf-qt5.cpp:1700 gtk-awf/src/awf-qt5.cpp:1990 #: gtk-awf/src/awf-qt6.cpp:1658 gtk-awf/src/awf-qt6.cpp:1948 msgid "More..." msgstr "" #: gtk-awf/src/awf-gtk2.c:2154 gtk-awf/src/awf-gtk2.c:2193 #: gtk-awf/src/awf-gtk3.c:2536 gtk-awf/src/awf-gtk3.c:2575 #: gtk-awf/src/awf-gtk4.c:2513 gtk-awf/src/awf-gtk4.c:2554 #: gtk-awf/src/awf-qt5.cpp:2063 gtk-awf/src/awf-qt5.cpp:2091 #: gtk-awf/src/awf-qt6.cpp:2021 gtk-awf/src/awf-qt6.cpp:2049 msgid "No themes found" msgstr "" #: gtk-awf/src/awf-gtk2.c:2605 gtk-awf/src/awf-gtk3.c:3030 #: gtk-awf/src/awf-gtk4.c:2979 msgid "Ok" msgstr "" #: gtk-awf/src/awf-gtk2.c:2061 gtk-awf/src/awf-gtk3.c:2443 #: gtk-awf/src/awf-gtk4.c:2380 gtk-awf/src/awf-qt5.cpp:1981 #: gtk-awf/src/awf-qt6.cpp:1939 msgid "Open recent file" msgstr "" #: gtk-awf/src/awf-qt5.cpp:1987 gtk-awf/src/awf-qt6.cpp:1945 msgid "Page Set&up" msgstr "" #: gtk-awf/src/awf-qt5.cpp:1986 gtk-awf/src/awf-qt6.cpp:1944 msgid "Properties" msgstr "" #: gtk-awf/src/awf-qt5.cpp:2525 gtk-awf/src/awf-qt6.cpp:2484 msgid "Remove %1 file" msgstr "" #: gtk-awf/src/awf-gtk2.c:2553 gtk-awf/src/awf-gtk3.c:2970 #: gtk-awf/src/awf-gtk4.c:2910 #, c-format msgid "Remove %s file" msgstr "" #: gtk-awf/src/awf-gtk2.c:2205 gtk-awf/src/awf-gtk3.c:2587 #: gtk-awf/src/awf-gtk4.c:2567 gtk-awf/src/awf-qt5.cpp:2104 #: gtk-awf/src/awf-qt6.cpp:2062 msgid "Right to Left (RTL)" msgstr "" #: gtk-awf/src/awf-qt5.cpp:593 gtk-awf/src/awf-qt5.cpp:610 #: gtk-awf/src/awf-qt6.cpp:567 gtk-awf/src/awf-qt6.cpp:583 msgid "Run and save a png screenshot on %1." msgstr "" #: gtk-awf/src/awf-gtk2.c:332 gtk-awf/src/awf-gtk3.c:341 #: gtk-awf/src/awf-gtk3.c:387 gtk-awf/src/awf-gtk4.c:330 #: gtk-awf/src/awf-gtk4.c:372 #, c-format msgid "Run and save a png screenshot on %s." msgstr "" #: gtk-awf/src/awf-gtk2.c:333 gtk-awf/src/awf-gtk3.c:342 #: gtk-awf/src/awf-gtk3.c:394 gtk-awf/src/awf-gtk4.c:331 #: gtk-awf/src/awf-gtk4.c:379 gtk-awf/src/awf-qt5.cpp:594 #: gtk-awf/src/awf-qt5.cpp:611 gtk-awf/src/awf-qt6.cpp:568 #: gtk-awf/src/awf-qt6.cpp:584 msgid "Run with text from left to right (Left-To-Right)." msgstr "" #: gtk-awf/src/awf-gtk2.c:334 gtk-awf/src/awf-gtk3.c:343 #: gtk-awf/src/awf-gtk3.c:398 gtk-awf/src/awf-gtk4.c:332 #: gtk-awf/src/awf-gtk4.c:383 gtk-awf/src/awf-qt5.cpp:595 #: gtk-awf/src/awf-qt5.cpp:612 gtk-awf/src/awf-qt6.cpp:569 #: gtk-awf/src/awf-qt6.cpp:585 msgid "Run with text from right to left (Right-To-Left)." msgstr "" #: gtk-awf/src/awf-gtk2.c:331 gtk-awf/src/awf-gtk3.c:340 #: gtk-awf/src/awf-gtk3.c:384 gtk-awf/src/awf-gtk4.c:329 #: gtk-awf/src/awf-gtk4.c:369 gtk-awf/src/awf-qt5.cpp:592 #: gtk-awf/src/awf-qt5.cpp:609 gtk-awf/src/awf-qt6.cpp:566 #: gtk-awf/src/awf-qt6.cpp:582 msgid "Run with the specified theme." msgstr "" #: gtk-awf/src/awf-gtk2.c:329 gtk-awf/src/awf-gtk3.c:338 #: gtk-awf/src/awf-gtk3.c:376 gtk-awf/src/awf-gtk4.c:327 #: gtk-awf/src/awf-gtk4.c:361 gtk-awf/src/awf-qt5.cpp:590 #: gtk-awf/src/awf-qt6.cpp:564 msgid "Show version number." msgstr "" #: gtk-awf/src/awf-qt5.cpp:728 gtk-awf/src/awf-qt5.cpp:1032 #: gtk-awf/src/awf-qt6.cpp:700 gtk-awf/src/awf-qt6.cpp:998 msgid "Theme %1 loaded." msgstr "" #: gtk-awf/src/awf-qt5.cpp:699 gtk-awf/src/awf-qt6.cpp:671 msgid "Theme %1 reloaded (error saving screenshot)." msgstr "" #: gtk-awf/src/awf-qt5.cpp:697 gtk-awf/src/awf-qt6.cpp:669 msgid "Theme %1 reloaded, then screenshot saved (%2)." msgstr "" #: gtk-awf/src/awf-qt5.cpp:702 gtk-awf/src/awf-qt6.cpp:674 msgid "Theme %1 reloaded." msgstr "" #: gtk-awf/src/awf-gtk2.c:518 gtk-awf/src/awf-gtk2.c:830 #: gtk-awf/src/awf-gtk3.c:610 gtk-awf/src/awf-gtk3.c:1068 #: gtk-awf/src/awf-gtk4.c:563 gtk-awf/src/awf-gtk4.c:1006 #, c-format msgid "Theme %s loaded." msgstr "" #: gtk-awf/src/awf-gtk2.c:485 gtk-awf/src/awf-gtk3.c:572 #: gtk-awf/src/awf-gtk4.c:530 #, c-format msgid "Theme %s reloaded (error saving screenshot)." msgstr "" #: gtk-awf/src/awf-gtk2.c:480 gtk-awf/src/awf-gtk3.c:567 #: gtk-awf/src/awf-gtk4.c:525 #, c-format msgid "Theme %s reloaded, then screenshot saved (%s)." msgstr "" #: gtk-awf/src/awf-gtk2.c:491 gtk-awf/src/awf-gtk3.c:578 #: gtk-awf/src/awf-gtk4.c:536 #, c-format msgid "Theme %s reloaded." msgstr "" #: gtk-awf/src/awf-gtk2.c:2607 gtk-awf/src/awf-gtk3.c:3032 #: gtk-awf/src/awf-gtk4.c:2981 msgid "This is a question bar." msgstr "" #: gtk-awf/src/awf-gtk2.c:2613 gtk-awf/src/awf-gtk3.c:3038 #: gtk-awf/src/awf-gtk4.c:2987 msgid "This is a warning bar." msgstr "" #: gtk-awf/src/awf-gtk2.c:2619 gtk-awf/src/awf-gtk3.c:3044 #: gtk-awf/src/awf-gtk4.c:2993 msgid "This is an error bar." msgstr "" #: gtk-awf/src/awf-gtk2.c:2601 gtk-awf/src/awf-gtk3.c:3026 #: gtk-awf/src/awf-gtk4.c:2975 msgid "This is an info bar." msgstr "" #: gtk-awf/src/awf-qt5.cpp:2561 gtk-awf/src/awf-qt6.cpp:2520 msgid "Write QSS here..." msgstr "" #: gtk-awf/src/awf-gtk2.c:2211 gtk-awf/src/awf-gtk3.c:2593 #: gtk-awf/src/awf-gtk4.c:2573 msgid "_Help" msgstr "" #: gtk-awf/src/awf-gtk2.c:2053 gtk-awf/src/awf-gtk3.c:2435 #: gtk-awf/src/awf-gtk4.c:2377 gtk-awf/src/awf-qt5.cpp:1973 #: gtk-awf/src/awf-qt6.cpp:1931 msgid "_Options" msgstr "" #: gtk-awf/src/awf-gtk4.c:2382 gtk-awf/src/awf-qt5.cpp:1983 #: gtk-awf/src/awf-qt6.cpp:1941 msgid "_Refresh" msgstr "" #: gtk-awf/src/awf-gtk2.c:2109 gtk-awf/src/awf-gtk3.c:2491 #: gtk-awf/src/awf-gtk4.c:2475 gtk-awf/src/awf-qt5.cpp:2030 #: gtk-awf/src/awf-qt6.cpp:1988 msgid "_System themes" msgstr "" #: gtk-awf/src/awf-gtk2.c:2197 gtk-awf/src/awf-gtk3.c:2579 #: gtk-awf/src/awf-gtk4.c:2565 gtk-awf/src/awf-qt5.cpp:2094 #: gtk-awf/src/awf-qt6.cpp:2052 msgid "_Text direction" msgstr "" #: gtk-awf/src/awf-gtk2.c:2157 gtk-awf/src/awf-gtk3.c:2539 #: gtk-awf/src/awf-gtk4.c:2519 gtk-awf/src/awf-qt5.cpp:2066 #: gtk-awf/src/awf-qt6.cpp:2024 msgid "_User themes" msgstr "" #: gtk-awf/src/awf-qt5.cpp:596 gtk-awf/src/awf-qt5.cpp:2527 #: gtk-awf/src/awf-qt6.cpp:570 gtk-awf/src/awf-qt6.cpp:2486 msgid "compiled in %1 with qt %2.%3.%4" msgstr "" #: gtk-awf/src/awf-gtk2.c:335 gtk-awf/src/awf-gtk2.c:2555 #: gtk-awf/src/awf-gtk3.c:344 gtk-awf/src/awf-gtk3.c:2972 #: gtk-awf/src/awf-gtk4.c:333 gtk-awf/src/awf-gtk4.c:2912 #, c-format msgid "compiled in %s with gtk %d.%d.%d and glib %d.%d.%d and pango %s" msgstr "" #: gtk-awf/src/awf-gtk2.c:2554 gtk-awf/src/awf-gtk3.c:2971 #: gtk-awf/src/awf-gtk4.c:2911 gtk-awf/src/awf-qt5.cpp:2526 #: gtk-awf/src/awf-qt6.cpp:2485 msgid "to reset keyboard shortcuts." msgstr "" awf-extended-4.1.0/src/awf.rc000066400000000000000000000053541517644610000157740ustar00rootroot00000000000000#include #define GTK2 12 #define GTK3 13 #define GTK4 14 #define GTK5 15 #define QT5 25 #define QT6 26 #define QT7 27 #if ENGINE == GTK2 # define EXE_NAME "awf-gtk2\0" # define EXE_FILE "awf-gtk2.exe\0" #elif ENGINE == GTK3 # define EXE_NAME "awf-gtk3\0" # define EXE_FILE "awf-gtk3.exe\0" #elif ENGINE == GTK4 # define EXE_NAME "awf-gtk4\0" # define EXE_FILE "awf-gtk4.exe\0" #elif ENGINE == GTK5 # define EXE_NAME "awf-gtk5\0" # define EXE_FILE "awf-gtk5.exe\0" #elif ENGINE == QT5 # define EXE_NAME "awf-qt5\0" # define EXE_FILE "awf-qt5.exe\0" #elif ENGINE == QT6 # define EXE_NAME "awf-qt6\0" # define EXE_FILE "awf-qt6.exe\0" #elif ENGINE == QT7 # define EXE_NAME "awf-qt7\0" # define EXE_FILE "awf-qt7.exe\0" #endif IDI_ICON1 ICON "../data/awf.ico" VS_VERSION_INFO VERSIONINFO FILEVERSION 4,0,0,0 PRODUCTVERSION 4,0,0,0 FILEFLAGSMASK VS_FFI_FILEFLAGSMASK FILEFLAGS 0 FILEOS VOS_NT_WINDOWS32 FILETYPE VFT_APP FILESUBTYPE VFT_UNKNOWN BEGIN BLOCK "StringFileInfo" BEGIN BLOCK "040904B0" BEGIN VALUE "FileDescription", "A widget factory 4.1.0\0" VALUE "FileVersion", "4.1.0\0" VALUE "ProductName", "A widget factory\0" VALUE "ProductVersion", "4.1.0\0" VALUE "CompanyName", "luigifab\0" VALUE "LegalCopyright", "2026 Fabrice Creuzot (luigifab), GNU GPL v3\0" VALUE "Info1", "https://github.com/luigifab/awf-extended\0" VALUE "Info2", "https://www.luigifab.fr/gtkqt/awf-extended\0" VALUE "InternalName", EXE_NAME VALUE "OriginalFilename", EXE_FILE VALUE "Comments", "A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme.\0" END BLOCK "040C04B0" BEGIN VALUE "FileDescription", "La fabrique à widgets 4.1.0\0" VALUE "FileVersion", "4.1.0\0" VALUE "ProductName", "La fabrique à widgets\0" VALUE "ProductVersion", "4.1.0\0" VALUE "CompanyName", "luigifab\0" VALUE "LegalCopyright", "2026 Fabrice Creuzot (luigifab), GNU GPL v3\0" VALUE "Info1", "https://github.com/luigifab/awf-extended\0" VALUE "Info2", "https://www.luigifab.fr/gtkqt/awf-extended\0" VALUE "InternalName", EXE_NAME VALUE "OriginalFilename", EXE_FILE VALUE "Comments", "La fabrique à widgets est une application d'aperçu de thème pour GTK et Qt. Elle affiche les différents types de widgets dans une seule fenêtre permettant de voir l'effet visuel du thème appliqué.\0" END END BLOCK "VarFileInfo" BEGIN VALUE "Translation", 0x0409, 0x04B0, 0x040C, 0x04B0 END ENDawf-extended-4.1.0/src/po/000077500000000000000000000000001517644610000153005ustar00rootroot00000000000000awf-extended-4.1.0/src/po/fr.po000066400000000000000000000340341517644610000162530ustar00rootroot00000000000000msgid "" msgstr "" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2026-05-01 10:38+0200\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" #: gtk-awf/src/awf-gtk2.c:340 gtk-awf/src/awf-gtk2.c:2560 #: gtk-awf/src/awf-gtk3.c:349 gtk-awf/src/awf-gtk3.c:2977 #: gtk-awf/src/awf-gtk4.c:338 gtk-awf/src/awf-gtk4.c:2917 #, c-format msgid " started with gtk %d.%d.%d and glib %d.%d.%d and pango %s" msgstr " démarré avec gtk %d.%d.%d et glib %d.%d.%d et pango %s" #: gtk-awf/src/awf-qt5.cpp:597 gtk-awf/src/awf-qt5.cpp:2528 #: gtk-awf/src/awf-qt6.cpp:571 gtk-awf/src/awf-qt6.cpp:2487 msgid " started with qt %1" msgstr " démarré avec qt %1" #: gtk-awf/src/awf-gtk2.c:2081 gtk-awf/src/awf-gtk2.c:2085 #: gtk-awf/src/awf-gtk2.c:2093 gtk-awf/src/awf-gtk2.c:2098 #: gtk-awf/src/awf-gtk3.c:2463 gtk-awf/src/awf-gtk3.c:2467 #: gtk-awf/src/awf-gtk3.c:2475 gtk-awf/src/awf-gtk3.c:2480 #: gtk-awf/src/awf-gtk4.c:2411 gtk-awf/src/awf-gtk4.c:2427 #: gtk-awf/src/awf-gtk4.c:2442 gtk-awf/src/awf-gtk4.c:2452 #: gtk-awf/src/awf-qt5.cpp:1999 gtk-awf/src/awf-qt5.cpp:2003 #: gtk-awf/src/awf-qt5.cpp:2012 gtk-awf/src/awf-qt5.cpp:2019 #: gtk-awf/src/awf-qt6.cpp:1957 gtk-awf/src/awf-qt6.cpp:1961 #: gtk-awf/src/awf-qt6.cpp:1970 gtk-awf/src/awf-qt6.cpp:1977 msgid "(checked)" msgstr "(coché)" #: gtk-awf/src/awf-gtk2.c:2082 gtk-awf/src/awf-gtk2.c:2086 #: gtk-awf/src/awf-gtk2.c:2094 gtk-awf/src/awf-gtk2.c:2099 #: gtk-awf/src/awf-gtk3.c:2464 gtk-awf/src/awf-gtk3.c:2468 #: gtk-awf/src/awf-gtk3.c:2476 gtk-awf/src/awf-gtk3.c:2481 #: gtk-awf/src/awf-gtk4.c:2413 gtk-awf/src/awf-gtk4.c:2429 #: gtk-awf/src/awf-gtk4.c:2443 gtk-awf/src/awf-gtk4.c:2453 #: gtk-awf/src/awf-qt5.cpp:2000 gtk-awf/src/awf-qt5.cpp:2004 #: gtk-awf/src/awf-qt5.cpp:2013 gtk-awf/src/awf-qt5.cpp:2020 #: gtk-awf/src/awf-qt6.cpp:1958 gtk-awf/src/awf-qt6.cpp:1962 #: gtk-awf/src/awf-qt6.cpp:1971 gtk-awf/src/awf-qt6.cpp:1978 msgid "(inconsistent)" msgstr "(incohérent)" #: gtk-awf/src/awf-gtk2.c:2080 gtk-awf/src/awf-gtk2.c:2084 #: gtk-awf/src/awf-gtk2.c:2091 gtk-awf/src/awf-gtk2.c:2096 #: gtk-awf/src/awf-gtk3.c:2462 gtk-awf/src/awf-gtk3.c:2466 #: gtk-awf/src/awf-gtk3.c:2473 gtk-awf/src/awf-gtk3.c:2478 #: gtk-awf/src/awf-gtk4.c:2405 gtk-awf/src/awf-gtk4.c:2420 #: gtk-awf/src/awf-gtk4.c:2441 gtk-awf/src/awf-gtk4.c:2451 #: gtk-awf/src/awf-qt5.cpp:1998 gtk-awf/src/awf-qt5.cpp:2002 #: gtk-awf/src/awf-qt5.cpp:2011 gtk-awf/src/awf-qt5.cpp:2018 #: gtk-awf/src/awf-qt6.cpp:1956 gtk-awf/src/awf-qt6.cpp:1960 #: gtk-awf/src/awf-qt6.cpp:1969 gtk-awf/src/awf-qt6.cpp:1976 msgid "(unchecked)" msgstr "(décoché)" #: gtk-awf/src/awf-gtk2.c:328 gtk-awf/src/awf-gtk2.c:796 #: gtk-awf/src/awf-gtk3.c:337 gtk-awf/src/awf-gtk3.c:935 #: gtk-awf/src/awf-gtk4.c:326 gtk-awf/src/awf-gtk4.c:885 #, c-format msgid "A widget factory - GTK %d.%d" msgstr "La fabrique à widgets - GTK %d.%d" #: gtk-awf/src/awf-qt5.cpp:589 gtk-awf/src/awf-qt5.cpp:605 #: gtk-awf/src/awf-qt5.cpp:991 gtk-awf/src/awf-qt6.cpp:563 #: gtk-awf/src/awf-qt6.cpp:578 gtk-awf/src/awf-qt6.cpp:957 msgid "A widget factory - Qt %1.%2" msgstr "La fabrique à widgets - Qt %1.%2" #: gtk-awf/src/awf-gtk2.c:685 gtk-awf/src/awf-gtk2.c:1484 #: gtk-awf/src/awf-gtk2.c:2490 gtk-awf/src/awf-gtk2.c:2552 #: gtk-awf/src/awf-gtk3.c:791 gtk-awf/src/awf-gtk3.c:1826 #: gtk-awf/src/awf-gtk3.c:2894 gtk-awf/src/awf-gtk3.c:2969 #: gtk-awf/src/awf-gtk4.c:735 gtk-awf/src/awf-gtk4.c:1793 #: gtk-awf/src/awf-gtk4.c:2827 gtk-awf/src/awf-gtk4.c:2909 #: gtk-awf/src/awf-qt5.cpp:930 gtk-awf/src/awf-qt5.cpp:1709 #: gtk-awf/src/awf-qt5.cpp:2484 gtk-awf/src/awf-qt5.cpp:2524 #: gtk-awf/src/awf-qt6.cpp:902 gtk-awf/src/awf-qt6.cpp:1667 #: gtk-awf/src/awf-qt6.cpp:2443 gtk-awf/src/awf-qt6.cpp:2483 msgid "" "A widget factory is a theme preview application for GTK and Qt. It displays " "the various widget types in a single window allowing to see the visual " "effect of the applied theme." msgstr "" "La fabrique à widgets est une application d'aperçu de thème pour GTK et Qt. " "Elle affiche les différents types de widgets dans une seule fenêtre " "permettant de voir l'effet visuel du thème appliqué. " #: gtk-awf/src/awf-gtk2.c:2570 gtk-awf/src/awf-gtk3.c:2987 #: gtk-awf/src/awf-gtk4.c:2927 gtk-awf/src/awf-qt5.cpp:2538 #: gtk-awf/src/awf-qt6.cpp:2497 msgid "" "A widget factory 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." msgstr "" "La fabrique à widgets est un logiciel libre ; vous pouvez le redistribuer et/" "ou le modifier selon les termes de la Licence Publique Générale GNU, telle " "que publiée par la Free Software Foundation ; version 3 de la licence, ou (à " "votre discrétion) toute version ultérieure. " #: gtk-awf/src/awf-gtk2.c:2064 gtk-awf/src/awf-gtk3.c:2446 #: gtk-awf/src/awf-gtk4.c:2383 gtk-awf/src/awf-qt5.cpp:1984 #: gtk-awf/src/awf-qt6.cpp:1942 msgid "Calendar" msgstr "Calendrier" #: gtk-awf/src/awf-gtk2.c:1274 gtk-awf/src/awf-gtk3.c:1535 #: gtk-awf/src/awf-gtk4.c:1514 gtk-awf/src/awf-gtk4.c:1519 #: gtk-awf/src/awf-qt5.cpp:1526 gtk-awf/src/awf-qt6.cpp:1484 msgid "Choose a color" msgstr "Choisir une couleur" #: gtk-awf/src/awf-gtk2.c:1286 gtk-awf/src/awf-gtk3.c:1547 #: gtk-awf/src/awf-gtk4.c:1536 gtk-awf/src/awf-qt5.cpp:1541 #: gtk-awf/src/awf-qt6.cpp:1499 msgid "Choose a file" msgstr "Choisir un fichier" #: gtk-awf/src/awf-gtk2.c:1291 gtk-awf/src/awf-gtk3.c:1552 #: gtk-awf/src/awf-gtk4.c:1540 gtk-awf/src/awf-qt5.cpp:1548 #: gtk-awf/src/awf-qt6.cpp:1506 msgid "Choose a folder" msgstr "Choisir un dossier" #: gtk-awf/src/awf-gtk2.c:1280 gtk-awf/src/awf-gtk3.c:1541 #: gtk-awf/src/awf-gtk4.c:1527 gtk-awf/src/awf-gtk4.c:1532 #: gtk-awf/src/awf-qt5.cpp:1533 gtk-awf/src/awf-qt6.cpp:1491 msgid "Choose a font" msgstr "Choisir une police" #: gtk-awf/src/awf-qt5.cpp:2061 gtk-awf/src/awf-qt5.cpp:2089 #: gtk-awf/src/awf-qt6.cpp:2019 gtk-awf/src/awf-qt6.cpp:2047 msgid "GlobalQSS not available" msgstr "GlobalQSS indisponible" #: gtk-awf/src/awf-gtk2.c:2199 gtk-awf/src/awf-gtk3.c:2581 #: gtk-awf/src/awf-gtk4.c:2566 gtk-awf/src/awf-qt5.cpp:2099 #: gtk-awf/src/awf-qt6.cpp:2057 msgid "Left to Right (LTR)" msgstr "Gauche à droite (LTR)" #: gtk-awf/src/awf-gtk2.c:330 gtk-awf/src/awf-gtk3.c:339 #: gtk-awf/src/awf-gtk3.c:380 gtk-awf/src/awf-gtk4.c:328 #: gtk-awf/src/awf-gtk4.c:365 gtk-awf/src/awf-qt5.cpp:591 #: gtk-awf/src/awf-qt5.cpp:608 gtk-awf/src/awf-qt6.cpp:565 #: gtk-awf/src/awf-qt6.cpp:581 msgid "List available themes." msgstr "Liste les thèmes disponibles." #: gtk-awf/src/awf-gtk2.c:1473 gtk-awf/src/awf-gtk2.c:2070 #: gtk-awf/src/awf-gtk3.c:1802 gtk-awf/src/awf-gtk3.c:2452 #: gtk-awf/src/awf-gtk4.c:1775 gtk-awf/src/awf-gtk4.c:2390 #: gtk-awf/src/awf-qt5.cpp:1700 gtk-awf/src/awf-qt5.cpp:1990 #: gtk-awf/src/awf-qt6.cpp:1658 gtk-awf/src/awf-qt6.cpp:1948 msgid "More..." msgstr "Plus..." #: gtk-awf/src/awf-gtk2.c:2154 gtk-awf/src/awf-gtk2.c:2193 #: gtk-awf/src/awf-gtk3.c:2536 gtk-awf/src/awf-gtk3.c:2575 #: gtk-awf/src/awf-gtk4.c:2513 gtk-awf/src/awf-gtk4.c:2554 #: gtk-awf/src/awf-qt5.cpp:2063 gtk-awf/src/awf-qt5.cpp:2091 #: gtk-awf/src/awf-qt6.cpp:2021 gtk-awf/src/awf-qt6.cpp:2049 msgid "No themes found" msgstr "Aucun thème trouvé" #: gtk-awf/src/awf-gtk2.c:2605 gtk-awf/src/awf-gtk3.c:3030 #: gtk-awf/src/awf-gtk4.c:2979 msgid "Ok" msgstr "Ok" #: gtk-awf/src/awf-gtk2.c:2061 gtk-awf/src/awf-gtk3.c:2443 #: gtk-awf/src/awf-gtk4.c:2380 gtk-awf/src/awf-qt5.cpp:1981 #: gtk-awf/src/awf-qt6.cpp:1939 msgid "Open recent file" msgstr "Ouvrir un fichier récent" #: gtk-awf/src/awf-qt5.cpp:1987 gtk-awf/src/awf-qt6.cpp:1945 msgid "Page Set&up" msgstr "Page Set&up" #: gtk-awf/src/awf-qt5.cpp:1986 gtk-awf/src/awf-qt6.cpp:1944 msgid "Properties" msgstr "Properties" #: gtk-awf/src/awf-qt5.cpp:2525 gtk-awf/src/awf-qt6.cpp:2484 msgid "Remove %1 file" msgstr "Supprimer le fichier %1" #: gtk-awf/src/awf-gtk2.c:2553 gtk-awf/src/awf-gtk3.c:2970 #: gtk-awf/src/awf-gtk4.c:2910 #, c-format msgid "Remove %s file" msgstr "Supprimer le fichier %s" #: gtk-awf/src/awf-gtk2.c:2205 gtk-awf/src/awf-gtk3.c:2587 #: gtk-awf/src/awf-gtk4.c:2567 gtk-awf/src/awf-qt5.cpp:2104 #: gtk-awf/src/awf-qt6.cpp:2062 msgid "Right to Left (RTL)" msgstr "Droite à gauche (RTL)" #: gtk-awf/src/awf-qt5.cpp:593 gtk-awf/src/awf-qt5.cpp:610 #: gtk-awf/src/awf-qt6.cpp:567 gtk-awf/src/awf-qt6.cpp:583 msgid "Run and save a png screenshot on %1." msgstr "Démarre et enregistre une capture d'écran png lors du %1." #: gtk-awf/src/awf-gtk2.c:332 gtk-awf/src/awf-gtk3.c:341 #: gtk-awf/src/awf-gtk3.c:387 gtk-awf/src/awf-gtk4.c:330 #: gtk-awf/src/awf-gtk4.c:372 #, c-format msgid "Run and save a png screenshot on %s." msgstr "Démarre et enregistre une capture d'écran png lors du %s." #: gtk-awf/src/awf-gtk2.c:333 gtk-awf/src/awf-gtk3.c:342 #: gtk-awf/src/awf-gtk3.c:394 gtk-awf/src/awf-gtk4.c:331 #: gtk-awf/src/awf-gtk4.c:379 gtk-awf/src/awf-qt5.cpp:594 #: gtk-awf/src/awf-qt5.cpp:611 gtk-awf/src/awf-qt6.cpp:568 #: gtk-awf/src/awf-qt6.cpp:584 msgid "Run with text from left to right (Left-To-Right)." msgstr "Démarre avec le texte de gauche à droite (Left-To-Right)." #: gtk-awf/src/awf-gtk2.c:334 gtk-awf/src/awf-gtk3.c:343 #: gtk-awf/src/awf-gtk3.c:398 gtk-awf/src/awf-gtk4.c:332 #: gtk-awf/src/awf-gtk4.c:383 gtk-awf/src/awf-qt5.cpp:595 #: gtk-awf/src/awf-qt5.cpp:612 gtk-awf/src/awf-qt6.cpp:569 #: gtk-awf/src/awf-qt6.cpp:585 msgid "Run with text from right to left (Right-To-Left)." msgstr "Démarre avec le texte de droite à gauche (Right-To-Left)." #: gtk-awf/src/awf-gtk2.c:331 gtk-awf/src/awf-gtk3.c:340 #: gtk-awf/src/awf-gtk3.c:384 gtk-awf/src/awf-gtk4.c:329 #: gtk-awf/src/awf-gtk4.c:369 gtk-awf/src/awf-qt5.cpp:592 #: gtk-awf/src/awf-qt5.cpp:609 gtk-awf/src/awf-qt6.cpp:566 #: gtk-awf/src/awf-qt6.cpp:582 msgid "Run with the specified theme." msgstr "Démarre avec le thème spécifié." #: gtk-awf/src/awf-gtk2.c:329 gtk-awf/src/awf-gtk3.c:338 #: gtk-awf/src/awf-gtk3.c:376 gtk-awf/src/awf-gtk4.c:327 #: gtk-awf/src/awf-gtk4.c:361 gtk-awf/src/awf-qt5.cpp:590 #: gtk-awf/src/awf-qt6.cpp:564 msgid "Show version number." msgstr "Affiche le numéro de version." #: gtk-awf/src/awf-qt5.cpp:728 gtk-awf/src/awf-qt5.cpp:1032 #: gtk-awf/src/awf-qt6.cpp:700 gtk-awf/src/awf-qt6.cpp:998 msgid "Theme %1 loaded." msgstr "Thème %1 chargé." #: gtk-awf/src/awf-qt5.cpp:699 gtk-awf/src/awf-qt6.cpp:671 msgid "Theme %1 reloaded (error saving screenshot)." msgstr "" "Thème %1 rechargé (erreur lors de la sauvegarde de la capture d'écran)." #: gtk-awf/src/awf-qt5.cpp:697 gtk-awf/src/awf-qt6.cpp:669 msgid "Theme %1 reloaded, then screenshot saved (%2)." msgstr "Theme %1 reloaded, then screenshot saved (%2)." #: gtk-awf/src/awf-qt5.cpp:702 gtk-awf/src/awf-qt6.cpp:674 msgid "Theme %1 reloaded." msgstr "Thème %1 rechargé." #: gtk-awf/src/awf-gtk2.c:518 gtk-awf/src/awf-gtk2.c:830 #: gtk-awf/src/awf-gtk3.c:610 gtk-awf/src/awf-gtk3.c:1068 #: gtk-awf/src/awf-gtk4.c:563 gtk-awf/src/awf-gtk4.c:1006 #, c-format msgid "Theme %s loaded." msgstr "Thème %s chargé." #: gtk-awf/src/awf-gtk2.c:485 gtk-awf/src/awf-gtk3.c:572 #: gtk-awf/src/awf-gtk4.c:530 #, c-format msgid "Theme %s reloaded (error saving screenshot)." msgstr "" "Thème %s rechargé (erreur lors de la sauvegarde de la capture d'écran)." #: gtk-awf/src/awf-gtk2.c:480 gtk-awf/src/awf-gtk3.c:567 #: gtk-awf/src/awf-gtk4.c:525 #, c-format msgid "Theme %s reloaded, then screenshot saved (%s)." msgstr "Thème %s rechargé, puis capture d'écran enregistrée (%s)." #: gtk-awf/src/awf-gtk2.c:491 gtk-awf/src/awf-gtk3.c:578 #: gtk-awf/src/awf-gtk4.c:536 #, c-format msgid "Theme %s reloaded." msgstr "Thème %s rechargé." #: gtk-awf/src/awf-gtk2.c:2607 gtk-awf/src/awf-gtk3.c:3032 #: gtk-awf/src/awf-gtk4.c:2981 msgid "This is a question bar." msgstr "Ceci est une barre de question." #: gtk-awf/src/awf-gtk2.c:2613 gtk-awf/src/awf-gtk3.c:3038 #: gtk-awf/src/awf-gtk4.c:2987 msgid "This is a warning bar." msgstr "Ceci est une barre d'avertissement." #: gtk-awf/src/awf-gtk2.c:2619 gtk-awf/src/awf-gtk3.c:3044 #: gtk-awf/src/awf-gtk4.c:2993 msgid "This is an error bar." msgstr "Ceci est une barre d'erreur." #: gtk-awf/src/awf-gtk2.c:2601 gtk-awf/src/awf-gtk3.c:3026 #: gtk-awf/src/awf-gtk4.c:2975 msgid "This is an info bar." msgstr "Ceci est une barre d'information." #: gtk-awf/src/awf-qt5.cpp:2561 gtk-awf/src/awf-qt6.cpp:2520 msgid "Write QSS here..." msgstr "Écrire le QSS ici..." #: gtk-awf/src/awf-gtk2.c:2211 gtk-awf/src/awf-gtk3.c:2593 #: gtk-awf/src/awf-gtk4.c:2573 msgid "_Help" msgstr "Aid_e" #: gtk-awf/src/awf-gtk2.c:2053 gtk-awf/src/awf-gtk3.c:2435 #: gtk-awf/src/awf-gtk4.c:2377 gtk-awf/src/awf-qt5.cpp:1973 #: gtk-awf/src/awf-qt6.cpp:1931 msgid "_Options" msgstr "_Options" #: gtk-awf/src/awf-gtk4.c:2382 gtk-awf/src/awf-qt5.cpp:1983 #: gtk-awf/src/awf-qt6.cpp:1941 msgid "_Refresh" msgstr "A_ctualiser" #: gtk-awf/src/awf-gtk2.c:2109 gtk-awf/src/awf-gtk3.c:2491 #: gtk-awf/src/awf-gtk4.c:2475 gtk-awf/src/awf-qt5.cpp:2030 #: gtk-awf/src/awf-qt6.cpp:1988 msgid "_System themes" msgstr "Thèmes _système" #: gtk-awf/src/awf-gtk2.c:2197 gtk-awf/src/awf-gtk3.c:2579 #: gtk-awf/src/awf-gtk4.c:2565 gtk-awf/src/awf-qt5.cpp:2094 #: gtk-awf/src/awf-qt6.cpp:2052 msgid "_Text direction" msgstr "Direction du _texte" #: gtk-awf/src/awf-gtk2.c:2157 gtk-awf/src/awf-gtk3.c:2539 #: gtk-awf/src/awf-gtk4.c:2519 gtk-awf/src/awf-qt5.cpp:2066 #: gtk-awf/src/awf-qt6.cpp:2024 msgid "_User themes" msgstr "Thèmes _utilisateur" #: gtk-awf/src/awf-qt5.cpp:596 gtk-awf/src/awf-qt5.cpp:2527 #: gtk-awf/src/awf-qt6.cpp:570 gtk-awf/src/awf-qt6.cpp:2486 msgid "compiled in %1 with qt %2.%3.%4" msgstr " compilé en %1 avec qt %2.%3.%4" #: gtk-awf/src/awf-gtk2.c:335 gtk-awf/src/awf-gtk2.c:2555 #: gtk-awf/src/awf-gtk3.c:344 gtk-awf/src/awf-gtk3.c:2972 #: gtk-awf/src/awf-gtk4.c:333 gtk-awf/src/awf-gtk4.c:2912 #, c-format msgid "compiled in %s with gtk %d.%d.%d and glib %d.%d.%d and pango %s" msgstr " compilé en %s avec gtk %d.%d.%d et glib %d.%d.%d et pango %s" #: gtk-awf/src/awf-gtk2.c:2554 gtk-awf/src/awf-gtk3.c:2971 #: gtk-awf/src/awf-gtk4.c:2911 gtk-awf/src/awf-qt5.cpp:2526 #: gtk-awf/src/awf-qt6.cpp:2485 msgid "to reset keyboard shortcuts." msgstr "pour réinitialiser les raccourcis clavier."