pax_global_header00006660000000000000000000000064113403047720014513gustar00rootroot0000000000000052 comment=1ce46ec93a2cfac48f4b8a19abfd9f412ec74a73 promoe-0.1.1/000077500000000000000000000000001134030477200130135ustar00rootroot00000000000000promoe-0.1.1/AUTHORS000066400000000000000000000022771134030477200140730ustar00rootroot00000000000000## ## This should be a somewhat complete list of people that have ## contributed to the Promoe project. The format is copied from the ## CREDITS-file in the Linux kernel source tree. The fields are: name ## (N), email (E), web-address (W), PGP key ID and fingerprint (P), ## description (D). ## ## This list is sorted alphabetically. ## N: Henrik Grindal Bakken E: henrik.bakken@tandberg.com D: Fix for compiling with g++ 4.4 N: Tobias Bengtsson E: tobbe@tobbe.nu D: Various widgets N: Thomas Frauendorfer E: Thomas.Frauendorfer@googlemail.com P: 1024D/50817EB1 A1A5 77A8 54C3 0B8D 8A4C 749A C49E 18C3 5081 7EB1 D: Current Developer N: Chris Gilbert E: neovanglist@neovanglist.net D: Various widgets and fixes N: Jonne Lehtinen E: jonne.lehtinen@tut.fi D: Lots of fixes. N: Lucas Adam M Paul E: reilithion@gmail.com D: Some fixes N: Tobias Rundström E: tru@xmms.org W: http://tobi.nu/ P: 1024D/9B1FA0CB 527E C4EC D205 88ED FC07 B744 315F F685 9B1F A0CB D: Previous main developer and coordinator. N: Laszlo Simon E: laszlo.simon@gmail.com D: Creator of the Almond-blue theme N: Daniel Svensson E: daniel@nittionio.nu P: 1024D/633F5931 9D2D 8156 23A2 8305 95A2 4D71 7BF0 2E28 633F 5931 D: Various fixes. promoe-0.1.1/COPYING000066400000000000000000000431301134030477200140470ustar00rootroot00000000000000 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) 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 this service 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 make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. 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. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute 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 and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), 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 distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the 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 a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, 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. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE 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. 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 convey 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) 19yy 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 2 of the License, or (at your option) any later version. This program is distributed in the hope that 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) 19yy name of author Gnomovision 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, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This 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 Library General Public License instead of this License. promoe-0.1.1/ChangeLog000066400000000000000000000014321134030477200145650ustar00rootroot00000000000000Version 0.1.1 (2010-02-21) * Fixed segfaults when promoe is not connected * Update to DrNO API changes * tweak skinloading on startup so that default skin is only loaded once * guard headerfiles against multiple inclusion * workaround segfault and endles loop in Browse Model * fix lintian warnings (from debian) Version 0.1.0 (2009-08-25) * disabled icon.png * hardcoding $PREFIX/share/promoe/skins as searchpath Version 0.1rc2 (2009-07-20) * changed default skin to Almond-blue (licensed under GPL) * fix a time formating issue in the playlist * fix playlist so that it is updated when entries are added * fix infinite loop when enabling equalizer effect in deamon Version 0.1rc1 (2009-07-08) * first release candidate * mainwindow, playlistwindow and equalizer mostly work promoe-0.1.1/README000066400000000000000000000031271134030477200136760ustar00rootroot00000000000000Required dependencies: * QT4.2.x http://www.trolltech.no/ * XMMS2 http://xmms2.xmms.org/ * XMMS2 C++ bindings (make sure you have boost_signals when compiling xmms2) - promoe works with 0.4DrK and 0.5DrL Optional dependencys: * Avahi http://www.avahi.org/ Compiling: 1) Run qmake in the topdir (not in ./src) (on debian systems it's called qmake-qt4) 2) Run make 3) Have a coffe 4) ./promoe 5) ???? 6) profit To change the install directory, use 'qmake PREFIX=' at step 1 Compilation problems: - Errormessage "WARNING: Found potential symbol conflict of " -> make sure you use uic from Qt4 (uic -version) (on debian systems it's sufficant if uic-qt4 exists) - Errormessage "error: xmmsclient/xmmsclient++.h: No such file or directory" followed by a bunch of other errors -> You don't have the xmms2-c++ header files installed (package libxmmsclient++-dev on debian) After installing the headerfiles run 'make distclean' and start again from 'Compiling 1)' Reporting Bugs: preferred way to report bugs is through xmms2's bugtracker at 'http://bugs.xmms2.xmms.se/' at project 'Client - Promoe' Patches: Best practice to submit a path is through the bugtracker at 'http://bugs.xmms2.xmms.se/' at project 'Client - Promoe'. Either append the patch to the bug it fixes or supply a link to your own git repository (github.com is a good place for your own public git repository) To discuss a patch or feature request, you can also try to reach the developer at xmms2's irc channel #xmms2 on freenode (irc.freenode.net) promoe-0.1.1/TODO000066400000000000000000000013351134030477200135050ustar00rootroot00000000000000Todo: General: + Feature Requests and Bugs on tracker + new icon with clear copyright + Mainwindow + enable random play (will have to wait for a randomplay service client), has to wait for bug 1598 before even considering * Playlist + Make displayed Information configurable + Add scrollbuttons to slider * Jump entry to dialog * drag and drop outside viewport * jump to entry when it's played. * accept drops from other applications * Skin * Compressed file reader * Manage with faulty skins * make cool effects when switching skin? * Medialib browser + Make it work again * Keep it very simple * browse by album art * Textbox * redraw text in textbox when switching skin. * figure out something smart on osx. promoe-0.1.1/config.pri000066400000000000000000000005121134030477200147720ustar00rootroot00000000000000DEFINES += PROMOE_VERSION="\"\\\"0.1.1\\\"\"" isEmpty(PREFIX): PREFIX = /usr/local isEmpty(BINDIR): BINDIR = $$PREFIX/bin isEmpty(DATADIR): DATADIR = $$PREFIX/share/promoe isEmpty(MANDIR): MANDIR = $$PREFIX/share/man DEFINES += DATADIR="\"\\\"$$DATADIR\\\"\"" DEPENDPATH += $PWD/src $PWD/lib INCLUDEPATH += $$PWD/src $$PWD/lib promoe-0.1.1/data/000077500000000000000000000000001134030477200137245ustar00rootroot00000000000000promoe-0.1.1/data/Almond-blue.qrc000066400000000000000000000012321134030477200165700ustar00rootroot00000000000000 Almond-blue/Balance.bmp Almond-blue/Cbuttons.bmp Almond-blue/Eq_Ex.bmp Almond-blue/EqMain.bmp Almond-blue/Main.bmp Almond-blue/MonoSter.bmp Almond-blue/Numbers.bmp Almond-blue/PlayPaus.bmp Almond-blue/PlEdit.bmp Almond-blue/PlEdit.txt Almond-blue/PosBar.bmp Almond-blue/ShufRep.bmp Almond-blue/Text.bmp Almond-blue/Titlebar.bmp Almond-blue/VisColor.txt Almond-blue/Volume.bmp promoe-0.1.1/data/Almond-blue/000077500000000000000000000000001134030477200160635ustar00rootroot00000000000000promoe-0.1.1/data/Almond-blue/Balance.bmp000066400000000000000000001717101134030477200201170ustar00rootroot00000000000000BM6(/  kWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrjWqccccccccccccccdRdRdRdRdRdRdRdRdRdRdRdRcQcQcccccccccccccc]Li]Li]Li]Li]Li]Li]LicccUFUFUFUFUFUFUFUFccccccccccccccccccccw`N@w`N@w`N@w`N@ccccccccccccccccccccI=I=I=I=I=I=I=I=ccccccccccccccccccccjVA6jVA6jVA6jVA6cccccccccccccccccccc;1;1;1;1;1;1;1;1ccccccccccccccccccccccccccccccc4,_N4,_N4,_N4,_N4,_N4,_N4,_Ncccccccccccccc-&-&-&-&-&-&-&-&-&-&-&-&-&-&'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TEq\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\p[p[p[p[p[p[p[p[p[p[kWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrjWqjWqjWqjWqjWqaOaOcQdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRcQcQcQcQcQcQcQcQaO_NTEv`UF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUFzcUFu_ccOAcM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cccI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cG;cccC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cA6ccc=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3ccc:0c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c:0c4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&,%'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE""""""""""""""""""""""""""""""""""""""q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\p[p[p[p[p[p[p[p[p[p[kWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrjWqjWqjWqjWqjWqaOaOcQdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRcQcQcQcQcQcQcQcQaO_NTEv`UF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUFzcUFu_ccOAcM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cccI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cG;cccC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cA6ccc=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3ccc:0c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c:0c4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&,%'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE""""""""""""""""""""""""""""""""""""""q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\p[p[p[p[p[p[p[p[p[p[kWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrjWqjWqjWqjWqjWqaOaOcQdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRcQcQcQcQcQcQcQcQaO_NTEv`UF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUFzcUFu_ccOAcM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cN@cccI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cH<cccC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8ccc=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3ccc:0c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c:0c4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&,%'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE""""""""""""""""""""""""""""""""""""""q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\p[p[p[p[p[p[p[p[p[p[kWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrjWqjWqjWqjWqjWqaOaOcQdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRcQcQcQcQcQcQcQcQaO_NTEv`WH{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUFzcWHu_ccRDcM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cPBcccK>cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cJ=cccD9cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8ccc>4c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3X=3ccc90c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/M:0c4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&,%'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE""""""""""""""""""""""""""""""""""""""q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\p[p[p[p[p[p[p[p[p[p[kWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrjWqjWqjWqjWqjWqaOaOcQdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRcQcQcQcQcQcQcQcQaO_NTEv`YI}eUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF~fWHu_ccRDɧ>M@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@0PBcccL?Ϊ;I=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=/J=cccD98C8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8l)C8ccc>46=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3w'=3ccc9018/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/dS :0c4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&,%'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE""""""""""""""""""""""""""""""""""""""q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\p[p[p[p[p[p[p[p[p[p[kWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrjWqjWqjWqjWqjWqaOaOcQdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRcQcQcQcQcQcQcQcQaO_NTEv`YIiUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dYIhWHu_ccRDUFM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cPBTEPBcccL?w`I=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cK>w`J=cccD9I=C8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cD9I=C8ccc>4jV=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c>4jV=3ccc90;18/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c:1;1:0c4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&,%'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE""""""""""""""""""""""""""""""""""""""q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\p[p[p[p[p[p[p[p[p[p[kWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrjWqjWqjWqjWqjWqaOaOcQdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRcQcQcQcQcQcQcQcQaO_NTEv`YIiZJ{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{d]LhWHu_ccRDUFRDcM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@[UFTEPBcccL?w`M@cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=RN@w`J=cccD9I=H<cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8LI=I=C8ccc>4jV?5c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3IA6jV=3ccc90;1;1c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/߹F;1;1:0c4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&,%'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE""""""""""""""""""""""""""""""""""""""q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\p[p[p[p[p[p[p[p[p[p[kWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrjWqjWqjWqjWqjWqaOaOcQdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRcQcQcQcQcQcQcQcQaO_NTEv`YIi]L}eUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUFh]LhWHu_ccRDUFUFͪ?M@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@p)UFTEPBcccL?w`N@ԯ>I=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=|'N@w`J=cccD9I=I=;C8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8kY"I=I=C8ccc>4jVA67=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3}f!A6jV=3ccc90;1;138/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/I=;1;1:0c4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&,%'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE""""""""""""""""""""""""""""""""""""""q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\p[p[p[p[p[p[p[p[p[p[kWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrjWqjWqjWqjWqjWqaOaOcQdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRcQcQcQcQcQcQcQcQaO_NTEv`YIi]LiUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dYIi]LhWHu_ccRDUFUFUFM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cPBUFUFTEPBcccL?w`N@w`I=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cK>w`N@w`J=cccD9I=I=I=C8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cF:I=I=I=C8ccc>4jVA6jV=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c>4jVA6jV=3ccc90;1;1;18/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c:1;1;1;1:0c4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&,%'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE""""""""""""""""""""""""""""""""""""""q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\p[p[p[p[p[p[p[p[p[p[kWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrjWqjWqjWqjWqjWqaOaOcQdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRcQcQcQcQcQcQcQcQaO_NTEv`YIi]LiZJ{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF|d]Li]LhWHu_ccRDUFUFUFRDcM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@JUFUFUFTEPBcccL?w`N@w`L?cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=HN@w`N@w`J=cccD9I=I=I=G;cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8޸EI=I=I=I=C8ccc>4jVA6jV?5c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3ݷCA6jVA6jV=3ccc90;1;1;1;1c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/ģ=;1;1;1;1:0c4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&,%'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE""""""""""""""""""""""""""""""""""""""q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\p[p[p[p[p[p[p[p[p[p[kWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrjWqjWqjWqjWqjWqaOaOcQdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRcQcQcQcQcQcQcQcQaO_NTEv`YIi]Li]L}eUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUFh]Li]LhWHu_ccRDUFUFUFUFֲBM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@o\!UFUFUFTEPBcccL?w`N@w`N@ײ?I=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=l!N@w`N@w`J=cccD9I=I=I=I=;C8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8RDI=I=I=I=C8ccc>4jVA6jVA6ǥ;=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3jVA6jVA6jV=3ccc90;1;1;1;158/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/;1;1;1;1;1:0c4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&,%'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE""""""""""""""""""""""""""""""""""""""q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\p[p[p[p[p[p[p[p[p[p[kWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrjWqjWqjWqjWqjWqaOaOcQdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRcQcQcQcQcQcQcQcQaO_NTEv`YIi]Li]LiUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dZJi]Li]LhWHu_ccRDUFUFUFUF^NM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cRDUFUFUFUFTEPBcccL?w`N@w`N@w`I=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cL?w`N@w`N@w`J=cccD9I=I=I=I=I=C8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cG;I=I=I=I=I=C8ccc>4jVA6jVA6jV=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c@5jVA6jVA6jV=3ccc90;1;1;1;1;18/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c;1;1;1;1;1;1:0c4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&,%'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE""""""""""""""""""""""""""""""""""""""q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\p[p[p[p[p[p[p[p[p[p[kWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrjWqjWqjWqjWqjWqaOaOcQdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRcQcQcQcQcQcQcQcQaO_NTEv`YIi]Li]LiZJ{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF}e]Li]Li]LhWHu_ccRDUFUFUFUFUFRDcM@cM@cM@cM@cM@cM@cM@cM@cM@cM@سCUFUFUFUFUFTEPBcccL?w`N@w`N@w`L?cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=ڴAN@w`N@w`N@w`J=cccD9I=I=I=I=I=G;cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8ģ=I=I=I=I=I=I=C8ccc>4jVA6jVA6jV@5c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3ɦ;A6jVA6jVA6jV=3ccc90;1;1;1;1;1;1c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/5;1;1;1;1;1;1:0c4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&,%'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE""""""""""""""""""""""""""""""""""""""q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\p[p[p[p[p[p[p[p[p[p[kWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrjWqjWqjWqjWqjWqaOaOcQdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRcQcQcQcQcQcQcQcQaO_NTEv`YIi]Li]Li]L}eUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUFi]Li]Li]LhWHu_ccRDUFUFUFUFUFUFڵCM@cM@cM@cM@cM@cM@cM@cM@cM@cM@VGUFUFUFUFUFTEPBcccL?w`N@w`N@w`N@ݷAI=cI=cI=cI=cI=cI=cI=cI=cI=cI=w`N@w`N@w`N@w`J=cccD9I=I=I=I=I=I=ǥ>C8cC8cC8cC8cC8cC8cC8cC8cC8cC8I=I=I=I=I=I=I=C8ccc>4jVA6jVA6jVA6ʧ<=3c=3c=3c=3c=3c=3c=3c=3c=3c=3jVA6jVA6jVA6jV=3ccc90;1;1;1;1;1;188/c8/c8/c8/c8/c8/c8/c8/c8/c8/;1;1;1;1;1;1;1:0c4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&,%'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE""""""""""""""""""""""""""""""""""""""q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\p[p[p[p[p[p[p[p[p[p[kWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrjWqjWqjWqjWqjWqaOaOcQdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRcQcQcQcQcQcQcQcQaO_NTEv`YIi]Li]Li]LiUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dZJi]Li]Li]LhWHu_ccRDUFUFUFUFUFUFdSM@cM@cM@cM@cM@cM@cM@cM@cM@cRDUFUFUFUFUFUFTEPBcccL?w`N@w`N@w`N@|eI=cI=cI=cI=cI=cI=cI=cI=cI=cM@w`N@w`N@w`N@w`J=cccD9I=I=I=I=I=I=I=C8cC8cC8cC8cC8cC8cC8cC8cC8cH<I=I=I=I=I=I=I=C8ccc>4jVA6jVA6jVA6jV=3c=3c=3c=3c=3c=3c=3c=3c=3c?5jVA6jVA6jVA6jV=3ccc90;1;1;1;1;1;1;18/c8/c8/c8/c8/c8/c8/c8/c8/c;1;1;1;1;1;1;1;1:0c4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&,%'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE""""""""""""""""""""""""""""""""""""""q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\p[p[p[p[p[p[p[p[p[p[kWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrjWqjWqjWqjWqjWqaOaOcQdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRcQcQcQcQcQcQcQcQaO_NTEv`YIi]Li]Li]LiZJ{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF}e]Li]Li]Li]LhWHu_ccRDUFUFUFUFUFUFUFRDcM@cM@cM@cM@cM@cM@cM@cM@;UFUFUFUFUFUFUFTEPBcccL?w`N@w`N@w`N@w`L?cI=cI=cI=cI=cI=cI=cI=cI=ɦ:N@w`N@w`N@w`N@w`J=cccD9I=I=I=I=I=I=I=G;cC8cC8cC8cC8cC8cC8cC8cC86I=I=I=I=I=I=I=I=C8ccc>4jVA6jVA6jVA6jV@5c=3c=3c=3c=3c=3c=3c=3c=34A6jVA6jVA6jVA6jV=3ccc90;1;1;1;1;1;1;1;1c8/c8/c8/c8/c8/c8/c8/c8/x-;1;1;1;1;1;1;1;1:0c4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&,%'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE""""""""""""""""""""""""""""""""""""""q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\p[p[p[p[p[p[p[p[p[p[kWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrjWqjWqjWqjWqjWqaOaOcQdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRcQcQcQcQcQcQcQcQaO_NTEv`YIi]Li]Li]Li]L}eUF{dUF{dUF{dUF{dUF{dUF{dUF{dUFi]Li]Li]Li]LhWHu_ccRDUFUFUFUFUFUFUFUFEM@cM@cM@cM@cM@cM@cM@cOAUFUFUFUFUFUFUFUFTEPBcccL?w`N@w`N@w`N@w`N@CI=cI=cI=cI=cI=cI=cI=cJ=w`N@w`N@w`N@w`N@w`J=cccD9I=I=I=I=I=I=I=I=ͪ?C8cC8cC8cC8cC8cC8cC8cC8I=I=I=I=I=I=I=I=I=C8ccc>4jVA6jVA6jVA6jVA6ӯ?=3c=3c=3c=3c=3c=3c=3c=3jVA6jVA6jVA6jVA6jV=3ccc90;1;1;1;1;1;1;1;198/c8/c8/c8/c8/c8/c8/c90;1;1;1;1;1;1;1;1;1:0c4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&,%'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE""""""""""""""""""""""""""""""""""""""q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\p[p[p[p[p[p[p[p[p[p[kWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrjWqjWqjWqjWqjWqaOaOcQdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRcQcQcQcQcQcQcQcQaO_NTEv`YIi]Li]Li]Li]LhUF{dUF{dUF{dUF{dUF{dUF{dUF{d\Li]Li]Li]Li]LhWHu_ccRDUFUFUFUFUFUFUFUFjXM@cM@cM@cM@cM@cM@cM@cTEUFUFUFUFUFUFUFUFTEPBcccL?w`N@w`N@w`N@w`N@j I=cI=cI=cI=cI=cI=cI=cM@w`N@w`N@w`N@w`N@w`J=cccD9I=I=I=I=I=I=I=I=NAC8cC8cC8cC8cC8cC8cC8cI=I=I=I=I=I=I=I=I=I=C8ccc>4jVA6jVA6jVA6jVA6jV=3c=3c=3c=3c=3c=3c=3cA6jVA6jVA6jVA6jVA6jV=3ccc90;1;1;1;1;1;1;1;1;18/c8/c8/c8/c8/c8/c8/c;1;1;1;1;1;1;1;1;1;1:0c4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&,%'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE""""""""""""""""""""""""""""""""""""""q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\p[p[p[p[p[p[p[p[p[p[kWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrjWqjWqjWqjWqjWqaOaOcQdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRcQcQcQcQcQcQcQcQaO_NTEv`YIi]Li]Li]Li]LiZJ{dUF{dUF{dUF{dUF{dUF{dUFg]Li]Li]Li]Li]LhWHu_ccRDUFUFUFUFUFUFUFUFUFRDcM@cM@cM@cM@cM@cM@5UFUFUFUFUFUFUFUFUFTEPBcccL?w`N@w`N@w`N@w`N@w`L?cI=cI=cI=cI=cI=cI=2N@w`N@w`N@w`N@w`N@w`J=cccD9I=I=I=I=I=I=I=I=I=G;cC8cC8cC8cC8cC8cC8y.I=I=I=I=I=I=I=I=I=I=C8ccc>4jVA6jVA6jVA6jVA6jV@5c=3c=3c=3c=3c=3c=3,A6jVA6jVA6jVA6jVA6jV=3ccc90;1;1;1;1;1;1;1;1;1:1c8/c8/c8/c8/c8/c8/vb&;1;1;1;1;1;1;1;1;1;1:0c4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&,%'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE""""""""""""""""""""""""""""""""""""""q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\p[p[p[p[p[p[p[p[p[p[kWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrjWqjWqjWqjWqjWqaOaOcQdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRcQcQcQcQcQcQcQcQaO_NTEv`YIi]Li]Li]Li]Li]L}eUF{dUF{dUF{dUF{dUF{dWHi]Li]Li]Li]Li]LhWHu_ccRDUFUFUFUFUFUFUFUFUFUFHM@cM@cM@cM@cM@cOAUFUFUFUFUFUFUFUFUFUFTEPBcccL?w`N@w`N@w`N@w`N@w`N@EI=cI=cI=cI=cI=cK>w`N@w`N@w`N@w`N@w`N@w`J=cccD9I=I=I=I=I=I=I=I=I=I=ӯBC8cC8cC8cC8cC8cD9I=I=I=I=I=I=I=I=I=I=I=C8ccc>4jVA6jVA6jVA6jVA6jVA6ֱA=3c=3c=3c=3c=3c>4jVA6jVA6jVA6jVA6jVA6jV=3ccc90;1;1;1;1;1;1;1;1;1;1<8/c8/c8/c8/c8/c90;1;1;1;1;1;1;1;1;1;1;1:0c4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&,%'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE""""""""""""""""""""""""""""""""""""""q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\p[p[p[p[p[p[p[p[p[p[kWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrjWqjWqjWqjWqjWqaOaOcQdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRcQcQcQcQcQcQcQcQaO_NTEv`YIi]Li]Li]Li]Li]LhUF{dUF{dUF{dUF{dUF{d\Li]Li]Li]Li]Li]LhWHu_ccRDUFUFUFUFUFUFUFUFUFUFp]!M@cM@cM@cM@cM@cUFUFUFUFUFUFUFUFUFUFUFTEPBcccL?w`N@w`N@w`N@w`N@w`N@p"I=cI=cI=cI=cI=cN@w`N@w`N@w`N@w`N@w`N@w`J=cccD9I=I=I=I=I=I=I=I=I=I=UGC8cC8cC8cC8cC8TI=I=I=I=I=I=I=I=I=I=I=I=C8ccc>4jVA6jVA6jVA6jVA6jVA6lX=3c=3c=3c=3c=3NA6jVA6jVA6jVA6jVA6jVA6jV=3ccc90;1;1;1;1;1;1;1;1;1;1;18/c8/c8/c8/c8/K;1;1;1;1;1;1;1;1;1;1;1;1:0c4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&,%'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE""""""""""""""""""""""""""""""""""""""q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\p[p[p[p[p[p[p[p[p[p[kWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrjWqjWqjWqjWqjWqaOaOcQdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRcQcQcQcQcQcQcQcQaO_NTEv`YIi]Li]Li]Li]Li]LiZJ{dUF{dUF{dUF{dUFg]Li]Li]Li]Li]Li]LhWHu_ccRDUFUFUFUFUFUFUFUFUFUFUFRDcM@cM@cM@cM@|.UFUFUFUFUFUFUFUFUFUFUFTEPBcccL?w`N@w`N@w`N@w`N@w`N@w`L?cI=cI=cI=cI=+N@w`N@w`N@w`N@w`N@w`N@w`J=cccD9I=I=I=I=I=I=I=I=I=I=I=F:cC8cC8cC8cC8ye&I=I=I=I=I=I=I=I=I=I=I=I=C8ccc>4jVA6jVA6jVA6jVA6jVA6jV@5c=3c=3c=3c=3q%A6jVA6jVA6jVA6jVA6jVA6jV=3ccc90;1;1;1;1;1;1;1;1;1;1;1:1c8/c8/c8/c8/ZK;1;1;1;1;1;1;1;1;1;1;1;1:0c4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&,%'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE""""""""""""""""""""""""""""""""""""""q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\p[p[p[p[p[p[p[p[p[p[kWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrjWqjWqjWqjWqjWqaOaOcQdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRcQcQcQcQcQcQcQcQaO_NTEv`YIi]Li]Li]Li]Li]Li]L|dUF{dUF{dUF{dYIi]Li]Li]Li]Li]Li]LhWHu_ccRDUFUFUFUFUFUFUFUFUFUFUFUFJM@cM@cM@cPBUFUFUFUFUFUFUFUFUFUFUFUFTEPBcccL?w`N@w`N@w`N@w`N@w`N@w`N@HI=cI=cI=cK>w`N@w`N@w`N@w`N@w`N@w`N@w`J=cccD9I=I=I=I=I=I=I=I=I=I=I=I=۶DC8cC8cC8cF:I=I=I=I=I=I=I=I=I=I=I=I=I=C8ccc>4jVA6jVA6jVA6jVA6jVA6jVA6ݷC=3c=3c=3c>4jVA6jVA6jVA6jVA6jVA6jVA6jV=3ccc90;1;1;1;1;1;1;1;1;1;1;1;1ģ=8/c8/c8/c:1;1;1;1;1;1;1;1;1;1;1;1;1;1:0c4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&,%'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE""""""""""""""""""""""""""""""""""""""q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\p[p[p[p[p[p[p[p[p[p[kWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrjWqjWqjWqjWqjWqaOaOcQdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRcQcQcQcQcQcQcQcQaO_NTEv`YIi]Li]Li]Li]Li]Li]LhUF{dUF{dUF{d]Li]Li]Li]Li]Li]Li]LhWHu_ccRDUFUFUFUFUFUFUFUFUFUFUFUFvb#M@cM@cM@NUFUFUFUFUFUFUFUFUFUFUFUFUFTEPBcccL?w`N@w`N@w`N@w`N@w`N@w`N@r#I=cI=cI=LN@w`N@w`N@w`N@w`N@w`N@w`N@w`J=cccD9I=I=I=I=I=I=I=I=I=I=I=I=^NC8cC8cC8II=I=I=I=I=I=I=I=I=I=I=I=I=I=C8ccc>4jVA6jVA6jVA6jVA6jVA6jVA6s^=3c=3c=3GA6jVA6jVA6jVA6jVA6jVA6jVA6jV=3ccc90;1;1;1;1;1;1;1;1;1;1;1;1;18/c8/c8/ձC;1;1;1;1;1;1;1;1;1;1;1;1;1;1:0c4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&,%'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE""""""""""""""""""""""""""""""""""""""q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\p[p[p[p[p[p[p[p[p[p[kWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrjWqjWqjWqjWqjWqaOaOcQdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRcQcQcQcQcQcQcQcQaO_NTEv`YIi]Li]Li]Li]Li]Li]LiZJ{dUF{dUFh]Li]Li]Li]Li]Li]Li]LhWHu_ccRDUFUFUFUFUFUFUFUFUFUFUFUFUFPBcM@cM@~h%UFUFUFUFUFUFUFUFUFUFUFUFUFTEPBcccL?w`N@w`N@w`N@w`N@w`N@w`N@w`L?cI=cI=v%N@w`N@w`N@w`N@w`N@w`N@w`N@w`J=cccD9I=I=I=I=I=I=I=I=I=I=I=I=I=F:cC8cC8`PI=I=I=I=I=I=I=I=I=I=I=I=I=I=C8ccc>4jVA6jVA6jVA6jVA6jVA6jVA6jV>4c=3c=3u`A6jVA6jVA6jVA6jVA6jVA6jVA6jV=3ccc90;1;1;1;1;1;1;1;1;1;1;1;1;1:1c8/c8/C8;1;1;1;1;1;1;1;1;1;1;1;1;1;1:0c4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&,%'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE""""""""""""""""""""""""""""""""""""""q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\p[p[p[p[p[p[p[p[p[p[kWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrjWqjWqjWqjWqjWqaOaOcQdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRcQcQcQcQcQcQcQcQaO_NTEv`YIi]Li]Li]Li]Li]Li]Li]L|dUF{dZJi]Li]Li]Li]Li]Li]Li]LhWHu_ccRDUFUFUFUFUFUFUFUFUFUFUFUFUFUFLM@cPBUFUFUFUFUFUFUFUFUFUFUFUFUFUFTEPBcccL?w`N@w`N@w`N@w`N@w`N@w`N@w`N@II=cL?w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`J=cccD9I=I=I=I=I=I=I=I=I=I=I=I=I=I=FC8cF:I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=C8ccc>4jVA6jVA6jVA6jVA6jVA6jVA6jVA6D=3c@5jVA6jVA6jVA6jVA6jVA6jVA6jVA6jV=3ccc90;1;1;1;1;1;1;1;1;1;1;1;1;1;1ΫA8/c:1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1:0c4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&,%'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE""""""""""""""""""""""""""""""""""""""q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\p[p[p[p[p[p[p[p[p[p[kWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrjWqjWqjWqjWqjWqaOaOcQdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRcQcQcQcQcQcQcQcQaO_NTEv`YIi]Li]Li]Li]Li]Li]Li]LhUF}e]Li]Li]Li]Li]Li]Li]Li]LhWHu_ccRDUFUFUFUFUFUFUFUFUFUFUFUFUFUF~h%M@GUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFTEPBcccL?w`N@w`N@w`N@w`N@w`N@w`N@w`N@v%I=FN@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`J=cccD9I=I=I=I=I=I=I=I=I=I=I=I=I=I=bQC8ӯBI=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=C8ccc>4jVA6jVA6jVA6jVA6jVA6jVA6jVA6yc =3԰@A6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jV=3ccc90;1;1;1;1;1;1;1;1;1;1;1;1;1;1D98/;;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1:0c4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&,%'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE""""""""""""""""""""""""""""""""""""""q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\p[p[p[p[p[p[p[p[p[p[kWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrjWqjWqjWqjWqjWqaOaOcQdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRcQcQcQcQcQcQcQcQaO_NTEv`YIi]Li]Li]Li]Li]Li]Li]LiYIh]Li]Li]Li]Li]Li]Li]Li]LhWHu_ccRDUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFPBfTUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFTEPBcccL?w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`K>~fN@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`J=cccD9I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=F:I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=C8ccc>4jVA6jVA6jVA6jVA6jVA6jVA6jVA6jV>4jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jV=3ccc90;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1:1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1:0c4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&,%'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE""""""""""""""""""""""""""""""""""""""promoe-0.1.1/data/Almond-blue/Cbuttons.bmp000066400000000000000000000346301134030477200203720ustar00rootroot00000000000000BM96($b9QQPppoNNN997.-+'&#$#&$&$'%&$%# !! )))775NNMoonQQP rrpssqtspsrotsptsptspsrnsrnsrnqpnrqnrqnpomppnqqq{{{ܐ21-HHGqqoNNM443('%"!%#&#,(-)/+.*+((%$"%%$332NMKqqoHHG32/ܣzzzqqppomoompomrqmrqmsrmsrntsntsntsotsotsotsntsnxvpvtoxvpxvpwuousnsrmsrmsrmsrnsrnvtoxvp}zq}zq}zq}zq}zrywqwupwuputoutoutowupywqywqwuptsotsotsptsprqorqorqotsptsptsptsptsptsprqotsnzxp|qsuMLHKJFOMGPNGRPHRPHSPHROGROGQOGPNGNLFJIDIHDGFDLLJZZZ00.hhgSSS444&&$ '$-)4.7193825/2-,((%" $$#444SSShhg331ZZXMLJIHEHGCMKEOMFPNFSPHSPHTQHTQITQITQIROGTQHSPHTQHSPGSPGURHPNFOMFOMFOMFOMFOMFSPGVSH\XJ`[Kb]Lb]Lb\K`[K]YKWTIWTITQISPHSPHSPHTQITQISPHRPHQOHNLGNLGNLGNLGNLGNLGNLGNLGNLGNLGNLGNLGROGXTI`[KkdNtkO42,42+:7-;7,<8->:-A<.A<-A<-<8,;7,85+31*.-(/.+442HHGpppSSSbba==<''&$!,(3.͓XQH+F="D<">7 711,(%" ''&===bbaSSSpppHHG542/.)1/)63+96+<8,<8,=9,=9->:-=9-=9,<8,<8,<8,;7,;7,96,96,63*42*31*42*63*96,<8,E@/MF1QI1VM3WN3WN3TL2OH2F@/C>.>:-<8-<8-<8-<8-<8-<8-:7,:7,85,85,85,:7,<8-<8-<8-<8-<8-:7,74,74+;7,A<.IC/VM3cX6&$*'0,61 71 ;5!=6"?8#>7"93 600,)&$""!+*(DDCyyx###hhgLLK.., '$0+<5ˏ[TI'KA#D; :30+'$# ..-MMLhhg###yyyDDC.-(&$'$,(2-6093 93!:4!93!82 82 505/4/2-/+-),('$&#&#'$)&/+5/A9!LB%SH'ZN([N([N(UJ'OE&E=$=6"93!3. .*-)-)-)-)-)-).*/+/+3. 61 61 61 4/ 3. 1-.*+(0,60?8!MC%YM(tr~{qxvosrnqpnqpntsnxvpywpzxq|yq|yqzxpxvpvtosrmrqnpomonlmmkkkk'$-)@8!D<"F="G>"F=!4.-)&#&$21.MMLbbbeed==<##!!*&60B: ޞږٕȇUYN+D; 92/*$! $$#>>=eedccbONL21,*'+'2-A9!@8!@8!?7 603-0+.)+'&#$!&#)%.)5/<5ߠܝޡD<"<5 5/0+-)-)-)-).*0+4/5/:3=6 >7 =6 :3931,3.71@8 LB#WK&sjOg`L[WIURHOMFLJENLFQNFURHVSHYUIZVIZVJZVJXTIURHQNFLJEHGCFECDDBBBB*&0+H?"MC#QF$TH%;40+($)'652VVUHHH[[[WWV332!*&81E< ҇zw|׍ƂPG?&4.)%!333WWV[[[IIHWVT:83.+ /*60J@#H?"G>!E< ;4603-.),'%"%"%")%/*70C:ܚӈ~yԌޟKA#@8 821,-),(,(-)0+3.71;4E.96+42*31*42*96+>:,B=-E?.IC/KD0HB0F@/A<-;7,42*.-(*)'''&&&%+'5/MC#TH%WK&ߞ?75/)%*( :96\\[///yyxMML,,* +'92H> ڔwhܾcft҆ŁwN60",,+MMLyyx00/]\ZA?81-"1,92KA#J@"I?"H?"=5924..)+'$!# %"*&/*;4G>!уoe_frӈNC#E<"921,,(+'+',(1,4.92=6KA#I@#F=!D;!6060:3A9 J@"TH$SH%D<"71-)'$&#)&2-82>7!A9!E=#G>$E=$@9":4!3.*'$",(5/PE$WK%ܘאԉ֌A95/)%+)!<;8``_WWV&&&!*&81F<׌oܽ_ٺZڻ\jzܔޙV!&&&WWVba_CA:2.#1+:3KA!J@ J@!I?!=5703--(($!!$!($0+:3G= ِr޿_޼SܹN߽TbwۖPE$D; :31,,(*&*&+'/*3-:3>6LB"I?"D; 606081>6I?!SG$QF$B: 60-()%)%.)-)'$SODZUEofKݡښוؖa[GZUFQNCTRKba^}))(#!,(93F="؍se۽`cq҂ѻwqfE0, $")))}ge_YVLWSE]XGmdJkcIjbIiaI_YF\VEVRDTPCPMBJH@JH@KIAPMBVRD^XFh`HܜΆvlglwЈޢofKf_I]XGUQDSODQNDQNDSODUQDYTE]XGc\HiaIf_HZUEZUF\WFa[Gh`IofJPE"B95/-(($($.)/*%"հШſ֬Ѧ͜ޯޮ̮߰ҟ֬գOD#?73-+'%"'#-(70@8H>!OD"QF#QF#PE$I?"B:!82-)# ծԨ,,,--,խѧ͞ߴѮѠ֭եI? <40*($$!&",'5/=5G= NC"QE"PE#MB"G>!>660*&" #"-,*888ҩѥDDD¯EEDҩѤ̞ҫџԨҢjbI_YFVRDPMBLIAMJBPMBߠۚߠZUEQNDMKDRQNddbkkjѥС___ {{{޾½{{{ ``_ѥϣʜѦΟѤџԦ  ͢ѤԪ::::::ҭ֮Ѩ~~~ uuuķuuu ~~~ݿݿ½ФttsttsvvtvvtvvtvvtvvtvvtvvtvvtvvtvvtttsttssssssssssssslllKKKüïKKKlllsssssssssttsttsvvtvvtvvtvvtvvtvvtvvtvvtvvtvvtvvtvvtvvtvvtwvtwvtwvtvvtvvtvvtvvtvvtvvtvvtwvtyxuyxtyxtzytyxtyxtyxuwvtwvtvvtvvtvvtvvtvvtwvtvvtvvtvvtvvtvvtvvtttsttsttsvvtvvtvvtvvtvvtvvtvvtvvtyxuzyt}uwQQPppoNNN997.-+'&#$#&$&$'%&$%# !! )))775NNMoonQQP rrpssqtspsrotsptsptspsrnsrnsrnqpnrqnrqnpomppnqqq{{{ܐ21-HHGqqoNNM443('%"!%#&#,(-)/+.*+((%$"%%$332NMKqqoHHG32/ܣzzzqqppomoompomrqmrqmsrmsrntsntsntsotsotsotsntsnxvpvtoxvpxvpڒwuousnsrmsrmsrmsrnsrnvtoxvp}zq}zq}zq}zq}zrywqwupwuputoutoutowupywqݕywqwuptsotsotsptsprqorqorqotsptsptsptsptsptsprqotsnzxp|qsu½MLHKJFOMGPNGRPHRPHSPHROGROGQOGPNGNLFJIDIHDGFDLLJZZZ00.hhgSSS444&&$ '$-)4.7193825/2-,((%" $$#444SSShhg331ZZXMLJIHEHGCMKEOMFPNFSPHSPHTQHTQITQITQIROGTQHSPHTQHSPGSPGURHoPNFOMFOMFOMFOMFOMFSPGVSH\XJ`[Kb]Lb]Lb\K`[K]YKWTIWTITQISPHSPHSPHTQIsTQISPHRPHQOHNLGNLGNLGNLGNLGNLGNLGNLGNLGNLGNLGNLGROGXTI`[KkdNtkOtr~{qxvosrnqpnqpntsnxvpywpzxq|yq|yqzxpxvpvtosrmrqnpomonlmmkkkk42,42+:7-;7,<8->:-A<.A<-A<-<8,;7,85+31*.-(/.+442HHGpppSSSbba==<''&$!,(3.@p`0LC&F="D<">7 711,(%" ''&===bbaSSSpppHHG542/.)1/)63+96+<8,<8,=9,=9->:-=9-=9,<8,<8,<8,;7,;7,96,96,طR63*42*31*42*63*96,<8,E@/MF1QI1VM3WN3WN3TL2OH2F@/C>.>:-<8-<8-<8-<8-߾Y<8-<8-:7,:7,85,85,85,:7,<8-<8-<8-<8-<8-:7,74,74+;7,A<.IC/VM3cX6sjOg`L[WIURHOMFLJENLFQNFURHVSHYUIZVIZVJZVJXTIURHQNFLJEHGCFECDDBBBB&$*'0,61 71 ;5!=6"?8#>7"93 600,)&$""!+*(DDCyyx###hhgLLK.., '$0+<5ɩFʪG?}k4SH&KA#D; :30+'$# ..-MMLhhg###yyyDDC.-(&$'$,(2-6093 93!:4!93!82 82 505/4/2-/+-),(̩?'$&#&#'$)&/+5/A9!LB%SH'ZN([N([N(UJ'OE&E=$=6"93!3. .*-)-)ղG-)-)-)-).*/+/+3. 61 61 61 4/ 3. 1-.*+(0,60?8!MC%YM(]S4QI2C>.96+42*31*42*96+>:,B=-E?.IC/KD0HB0F@/A<-;7,42*.-(*)'''&&&%'$-)ͭJϯL@8!D<"F="G>"F=!ͭI̬I4.-)&#&$21.MMLbbbeed==<##!!*&60B: ƦBǧCǧDǧD?yg1SH%D; 92/*$! $$#>>=eedccbONL21,*'+'2-˫GͭJϯLA9!@8!@8!?7 ˫GʪFɩF603-0+.)+'á7&#$!&#)%.)5/<5ʪF˫H˫G̬IͭIͭJήJϯLϯLD<"<5 5/0+-)-)ΫA-)-).*0+4/5/аM:3=6 >7 =6 :393ϯLϯL1,3.71@8 LB#WK&SH%D<"71-)'$&#)&2-82>7!A9!E=#G>$E=$@9":4!3.*'$"*&0+ʪG̬IH?"MC#QF$TH%ʪGɩFɩF;40+($)'652VVUHHH[[[WWV332!*&81E< ã?Ĥ@ȧCʩDȧCƥA:n^.B:!4.)%!333WWV[[[IIHWVT:83.+ /*60ɩF˫H̬IJ@#H?"G>!E< ǧDƦCťB;4603-.),'4%"%"%")%/*70C:ƦCǧD̫EЮGҰHҰIϮH̬I̬IKA#@8 821,-),(ʨ>,(-)0+3.71;4ͭJͭJE <Ť@ȧA̪CɨAƥ@=;6`S+0+",,+MMLyyx00/]\ZA?81-"1,92ťAǧCɩEKA#J@"I?"H?"¢?=<=5924..)+'/$!# %"*&/*;4G>!¢?ȧAϭDֳGصH״HѯF̫EȨDNC#E<"921,,(+'Ƥ:+',(1,4.92=6ɩEɩEɩEKA#I@#F=!D;!ȨDȨD6060:3A9 J@"TH$PE"B95/-(($($.)ã@ĤAĤAťBǧDǧDɩF˫HͭJ̬I/*%",(5/¢>Ĥ@PE$WK%ťAĤ@¢>¢?=A95/)%+)!<;8``_WWV&&&!*&81F<:â;Ȧ?˩@Ȧ>ţ<;985dV*!&&&WWVba_CA:2.#1+:3¢?Ĥ@ƦBKA!J@ J@!I?!;:8=5703--(($,!!$!($0+:3G= ;ƥ>ЭB׳DشEٵFүD˪CĤ@PE$D; :31,,(*& 6*&+'/*3-:3>6ƦBƦBƦBƦBLB"I?"D; Ĥ@Ĥ@606081>6I?!SG$OD#?73-+'%"'#-(70@8H>!OD"QF#QF#PE$I?"B:!82-)# SODZUE˰_ͲaofKγbγbͲa˰_ʰ_ʯ^a[GZUFQNCTRKba^}))(#!,(93F=";=Ť@Ǧ@ƥ@â><:x3VK(/+$")))}ge_YVLWSE]XGʰ_ͲaγbmdJkcIjbIiaIǭ\Ƭ[ūZ_YF\VEVRDTPCPMBRJH@JH@KIAPMBVRD^XFh`Hǭ\ϴa׻cfggھfӷcͲaofKf_I]XGUQDSODQNDʮYQNDSODUQDYTE]XGc\HγbγbγbγbγbiaIf_HͲaͲaZUEZUF\WFa[Gh`IofJI? <40*($$!&",'5/=5G= NC"QE"PE#MB"G>!>660*&" #"-,*888ӦԧԧԧӦӦӦӪԪ֬׫֬ԪƦӦԧԧѤФФ̟Ѥԧب۪۫۫ڪ֨ԧѢԧԧԧԧԧԧjbI_YFVRDPMBLIAMJBPMBéYĪZūZƬ[Ƭ\ǭ\ʯ^˰_ͲaZUEQNDMKDRQNddbkkjҧӨӨҧҧҧ,,,ѨӨԪөȦ--,ҧөԩѧХЦ͡Хӧ֩ت٫٫תըӨҥԩԩԩӨӨϣФФѥҦӧӦҦҦҦХХDDDѧҧŦEEDХҦҦϤϤϤʟϤϤӧԧԨըӦҦҦУҧҧҦҦЦХХѧҧѥѥϤϤ___ {{{ȿ{{{ ``_ϤϤѥϤΣΣɞΣΣϤϤϤѥѥѥѥΡҥѥѥϤϤХ  ̣ЦϤ::::::Үհ~~~ uuuķuuu ~~~ۿ½ttsttsvvtvvtvvtvvtvvtvvtvvtvvtvvtvvtttsttssssssssssssslllKKKüïKKKlllsssssssssttsttsvvtvvtvvtvvtvvtvvtvvtvvtvvtvvtvvtvvtvvtvvtwvtwvtwvtvvtvvtvvtvvtvvtvvtvvtwvtyxuyxtyxtzytyxtyxtyxuwvtwvtvvtvvtvvtvvtvvtwvtvvtvvtvvtvvtvvtvvtttsttsttsvvtvvtvvtvvtvvtvvtvvtvvtyxuzyt}uw½promoe-0.1.1/data/Almond-blue/EqMain.bmp000066400000000000000000007754141134030477200177570ustar00rootroot00000000000000BM 6(; ߭ککک۪۪۪۪۪۪۪۪ݫݫݫݫݫ߭߭߭߭߭߭߭߭߭߭ݫݫݫݫݫݫ۪۪۪۪۪۪۪کککک߭  zw w w w w w w w w w w w xxxxxxxxxz&zzzzzzzz{{{'{{{{|||||||'~~~~~~~~~~~'||||||{{{{{'{{zzzzzzzzz&zxxxxxxxxw w #w w w w w w w w w w w #z # w lT hQ r hQ r hQ r hQ s hQ s jR jR s jR s jR s jR t lT t lT lT t lT t mU u mU u mU u mU mU u mU w oV w oV w oV w oV pW xpW xpW xpW xpW xpW oV w oV w oV w oV w mU u mU mU u mU u mU u lT t lT t lT lT t lT t jR s jR s jR s jR jR s hQ r hQ r hQ r hQ r hQ lT w  M<M<K:K:K:K:K:K:M<M<M<M<M<եM<M<M<M<M<M<M<M<M<M<M<֦M<M<Q?Q?Q?Q?Q?Q?Q?Q?Q?ݫQ?Q?Q?R@R@R@R@R@R@R@R@߭TATATATATATATATATATATA߭R@R@R@R@R@R@R@R@Q?Q?Q?ݫQ?Q?Q?Q?Q?Q?Q?Q?M<M<M<۪M<M<M<M<M<M<M<M<M<M<M<۪M<M<M<M<M<K:K:K:K:K:K:کM<M< ۪ u[ D5D5u[ D5u[ D5u[ D5u[ D5u[ D5СF7u[ F7u[ F7u[ F7u[ F7u[ F7ѢH8x] H8x] H8x] H8x] H8x] H8کI9y^ I9y^ I9y^ I9y^ I9y^ I9کK:{_ K:{_ K:{_ K:{_ K:{_ K:کI9y^ I9y^ I9y^ I9y^ I9y^ H8کH8x] H8x] H8x] H8x] H8x] F7اF7u[ F7u[ F7u[ F7u[ F7u[ F7֦D5u[ D5u[ D5u[ D5u[ D5u[ D5֦D5sY ֦ :-:-:-:-:-NJ=NJ>zwnxulyvmxulwtk ~s~{r{xo|ypmjbNJ?NJ>NJ=zwnxulyvmxulwtk ~s~{r{xo|ypmjbNJ?NJ>NJ=zwnxulyvmxulwtk ~s~{r{xo|ypmjbNJ?NJ>NJ=zwnxulyvmxulwtk ~s~{r{xo|ypmjbNJ?NJ>NJ=zwnxulyvmxulwtk ~s~{r{xo|ypmjbNJ?NJ>NJ=zwnxulyvmxulwtk ~s~{r{xo|ypmjbNJ?NJ>NJ=zwnxulyvmxulwtk ~s~{r{xo|ypmjbzwnxulyvmxulwtk ~s~{r{xo|ypmjbzwnxulyvmxulwtk ~s~{r{xo|ypmjbzwnxulyvmxulwtk ~s~{r{xo|ypmjbzwnxulyvmxulwtk ~s~{r{xo|ypmjbzwnxulyvmxulwtk ~s~{r{xo|ypmjbzwnxulyvmxulwtk ~s~{r{xo|ypmjbzwnxulyvmxulwtk |yo{xnzwmzwmjg_KH=KG;KGzwnyvmyvmxulvsj u}r}zq|qnkbrodzwlvzwnyvmyvmxulvsj u}r}zq|qnkbzwnyvmyvmxulvsj u}r}zq|qnkbzwnyvmyvmxulvsj u}r}zq|qnkbzwnyvmyvmxulvsj u}r}zq|qnkbzwnyvmyvmxulvsj u}r}zq|qnkbzwnyvmyvmxulvsj u}r}zq|qnkbzwnyvmyvmxulvsj u}r}zq|qnkbzwnyvmyvmxulvsj u}r}zq|qnkbzwnyvmyvmxulvsj u}r}zq|qnkbzwnyvmyvmxulvsj u}r}zq|qnkbzwnyvmyvmxulvsj u}r}zq|qnkbzwnyvmyvmxulvsj u}r}zq|qnkbzwnyvmyvmxulvsj {xn{xnzwmzwmliaLI>NJ?NJ>xulwtkxulxulwtk {xn{xnzwmzwmliaLI>NJ?NJ>xulwtkxulxulwtk {xn{xnzwmzwmliaxulwtkxulxulwtk {xn{xnzwmzwmliaxulwtkxulxulwtk {xn{xnzwmzwmliaxulwtkxulxulwtk {xn{xnzwmzwmliaxulwtkxulxulwtk {xn{xnzwmzwmliaxulwtkxulxulwtk {xn{xnzwmzwmliaxulwtkxulxulwtk {xn{xnzwmzwmliaxulwtkxulxulwtk {xn{xnzwmzwmliaxulwtkxulxulwtk {xn{xnzwmzwmliaxulwtkxulxulwtk {xn{xnzwmzwmliaxulwtkxulxulwtk {xn{xnzwmzwmliaxulwtkxulxulwtk {xn{xnzwmzwmliaxulwtkxulxulwtk xulyvlxujxukfd\IF;IF;JF;spgtqgtqgqnepmd xulyvlxujxukfd\IF;IF;JF;spgtqgtqgqnepmd xulyvlxujxukfd\heZqnc}rspgtqgtqgqnepmd xulyvlxujxukfd\spgtqgtqgqnepmd xulyvlxujxukfd\spgtqgtqgqnepmd xulyvlxujxukfd\spgtqgtqgqnepmd xulyvlxujxukfd\spgtqgtqgqnepmd xulyvlxujxukfd\spgtqgtqgqnepmd xulyvlxujxukfd\spgtqgtqgqnepmd xulyvlxujxukfd\spgtqgtqgqnepmd xulyvlxujxukfd\spgtqgtqgqnepmd xulyvlxujxukfd\spgtqgtqgqnepmd xulyvlxujxukfd\spgtqgtqgqnepmd xulyvlxujxukfd\spgtqgtqgqnepmd u~t}s}soldOK@OK@OK?{xo{xn{xnyvlxuk u~t}s}soldOK@OK@OK?{xo{xn{xnyvlxuk u~t}s}soldOK@OK@OK?{xo{xn{xnyvlxuk u~t}s}sold{xo{xn{xnyvlxuk u~t}s}sold{xo{xn{xnyvlxuk u~t}s}sold{xo{xn{xnyvlxuk u~t}s}sold{xo{xn{xnyvlxuk u~t}s}sold{xo{xn{xnyvlxuk u~t}s}sold{xo{xn{xnyvlxuk u~t}s}sold{xo{xn{xnyvlxuk u~t}s}sold{xo{xn{xnyvlxuk u~t}s}sold{xo{xn{xnyvlxuk u~t}s}sold{xo{xn{xnyvlxuk u~t}s}sold{xo{xn{xnyvlxuk spgspgspgtqhfd\IF;IF;JF;spgrofqnepmepme spgspgspgtqhfd\IF;IF;JF;spgrofqnepmepme spgspgspgtqhfd\IF;IF;JF;spgrofqnepmepme spgspgspgtqhfd\daWli_~zospgrofqnepmepme spgspgspgtqhfd\spgrofqnepmepme spgspgspgtqhfd\spgrofqnepmepme spgspgspgtqhfd\spgrofqnepmepme spgspgspgtqhfd\spgrofqnepmepme spgspgspgtqhfd\spgrofqnepmepme spgspgspgtqhfd\spgrofqnepmepme spgspgspgtqhfd\spgrofqnepmepme spgspgspgtqhfd\spgrofqnepmepme spgspgspgtqhfd\spgrofqnepmepme spgspgspgtqhfd\spgrofqnepmepme u~t}s|qnkbNJ>OK@OK?{xozwnzwnyvmxul u~t}s|qnkbNJ>OK@OK?{xozwnzwnyvmxul u~t}s|qnkbNJ>OK@OK?{xozwnzwnyvmxul u~t}s|qnkbNJ>OK@OK?{xozwnzwnyvmxul u~t}s|qnkb{xozwnzwnyvmxul u~t}s|qnkb{xozwnzwnyvmxul u~t}s|qnkb{xozwnzwnyvmxul u~t}s|qnkb{xozwnzwnyvmxul u~t}s|qnkb{xozwnzwnyvmxul u~t}s|qnkb{xozwnzwnyvmxul u~t}s|qnkb{xozwnzwnyvmxul u~t}s|qnkb{xozwnzwnyvmxul u~t}s|qnkb{xozwnzwnyvmxul u~t}s|qnkb{xozwnzwnyvmxul spgtqhsphrogb`XFC9FC9FC8qnfoldpmeoldpme spgtqhsphrogb`XFC9FC9FC8qnfoldpmeoldpme spgtqhsphrogb`XFC9FC9FC8qnfoldpmeoldpme spgtqhsphrogb`XFC9FC9FC8qnfoldpmeoldpme spgtqhsphrogb`X^[Qkh^yvkqnfoldpmeoldpme spgtqhsphrogb`Xqnfoldpmeoldpme spgtqhsphrogb`Xqnfoldpmeoldpme spgtqhsphrogb`Xqnfoldpmeoldpme spgtqhsphrogb`Xqnfoldpmeoldpme spgtqhsphrogb`Xqnfoldpmeoldpme spgtqhsphrogb`Xqnfoldpmeoldpme spgtqhsphrogb`Xqnfoldpmeoldpme spgtqhsphrogb`Xqnfoldpmeoldpme spgtqhsphrogb`Xqnfoldpmeoldpme zwlzwmyvlzwmjg_KH=KGLI>LH=vsjuriuritqhtqh }zp|yozwn{xoliaLI>LI>LH=vsjuriuritqhtqh }zp|yozwn{xoliaLI>LI>LH=vsjuriuritqhtqh }zp|yozwn{xoliaLI>LI>LH=vsjuriuritqhtqh }zp|yozwn{xoliaLI>LI>LH=vsjuriuritqhtqh }zp|yozwn{xoliaLI>LI>LH=vsjuriuritqhtqh }zp|yozwn{xoliavsjuriuritqhtqh }zp|yozwn{xoliavsjuriuritqhtqh }zp|yozwn{xoliavsjuriuritqhtqh }zp|yozwn{xoliavsjuriuritqhtqh }zp|yozwn{xoliavsjuriuritqhtqh }zp|yozwn{xoliavsjuriuritqhtqh }zp|yozwn{xoliavsjuriuritqhtqh }zp|yozwn{xoliavsjuriuritqhtqh uritqhtqhuriec[IF;HE:IE:qnfnkcoldoldnkc uritqhtqhuriec[IF;HE:IE:qnfnkcoldoldnkc uritqhtqhuriec[IF;HE:IE:qnfnkcoldoldnkc uritqhtqhuriec[IF;HE:IE:qnfnkcoldoldnkc uritqhtqhuriec[IF;HE:IE:qnfnkcoldoldnkc uritqhtqhuriec[IF;HE:IE:qnfnkcoldoldnkc uritqhtqhuriec[\YNkh]tpeqnfnkcoldoldnkc uritqhtqhuriec[qnfnkcoldoldnkc uritqhtqhuriec[qnfnkcoldoldnkc uritqhtqhuriec[qnfnkcoldoldnkc uritqhtqhuriec[qnfnkcoldoldnkc uritqhtqhuriec[qnfnkcoldoldnkc uritqhtqhuriec[qnfnkcoldoldnkc uritqhtqhuriec[qnfnkcoldoldnkc spgsphqnfpmdb_WFC8FC8FB7oldnkcnkcmjblia spgsphqnfpmdb_WFC8FC8FB7oldnkcnkcmjblia spgsphqnfpmdb_WFC8FC8FB7oldnkcnkcmjblia spgsphqnfpmdb_WFC8FC8FB7oldnkcnkcmjblia spgsphqnfpmdb_WFC8FC8FB7oldnkcnkcmjblia spgsphqnfpmdb_WFC8FC8FB7oldnkcnkcmjblia spgsphqnfpmdb_WFC8FC8FB7oldnkcnkcmjblia spgsphqnfpmdb_Woldnkcnkcmjblia spgsphqnfpmdb_Woldnkcnkcmjblia spgsphqnfpmdb_Woldnkcnkcmjblia spgsphqnfpmdb_Woldnkcnkcmjblia spgsphqnfpmdb_Woldnkcnkcmjblia spgsphqnfpmdb_Woldnkcnkcmjblia spgsphqnfpmdb_Woldnkcnkcmjblia spgsphrogrogdbZHE:HE:IE:spgqnerofspfrof spgsphrogrogdbZHE:HE:IE:spgqnerofspfrof spgsphrogrogdbZHE:HE:IE:spgqnerofspfrof spgsphrogrogdbZHE:HE:IE:spgqnerofspfrof spgsphrogrogdbZHE:HE:IE:spgqnerofspfrof spgsphrogrogdbZHE:HE:IE:spgqnerofspfrof spgsphrogrogdbZHE:HE:IE:spgqnerofspfrof spgsphrogrogdbZZWLdaVolaspgqnerofspfrof spgsphrogrogdbZspgqnerofspfrof spgsphrogrogdbZspgqnerofspfrof spgsphrogrogdbZspgqnerofspfrof spgsphrogrogdbZspgqnerofspfrof spgsphrogrogdbZspgqnerofspfrof spgsphrogrogdbZspgqnerofspfrof vsjvsjtqhspgfc[HE:IF;IE:spgqnfqnfpmenkc vsjvsjtqhspgfc[HE:IF;IE:spgqnfqnfpmenkc vsjvsjtqhspgfc[HE:IF;IE:spgqnfqnfpmenkc vsjvsjtqhspgfc[HE:IF;IE:spgqnfqnfpmenkc vsjvsjtqhspgfc[HE:IF;IE:spgqnfqnfpmenkc vsjvsjtqhspgfc[HE:IF;IE:spgqnfqnfpmenkc vsjvsjtqhspgfc[HE:IF;IE:spgqnfqnfpmenkc vsjvsjtqhspgfc[HE:IF;IE:spgqnfqnfpmenkc vsjvsjtqhspgfc[spgqnfqnfpmenkc vsjvsjtqhspgfc[spgqnfqnfpmenkc vsjvsjtqhspgfc[spgqnfqnfpmenkc vsjvsjtqhspgfc[spgqnfqnfpmenkc vsjvsjtqhspgfc[spgqnfqnfpmenkc vsjvsjtqhspgfc[spgqnfqnfpmenkc tqhtqhtqhspgdbZHE:GD:GC8pmenkcmjblialia tqhtqhtqhspgdbZHE:GD:GC8pmenkcmjblialia tqhtqhtqhspgdbZHE:GD:GC8pmenkcmjblialia tqhtqhtqhspgdbZHE:GD:GC8pmenkcmjblialia tqhtqhtqhspgdbZHE:GD:GC8pmenkcmjblialia tqhtqhtqhspgdbZHE:GD:GC8pmenkcmjblialia tqhtqhtqhspgdbZHE:GD:GC8pmenkcmjblialia tqhtqhtqhspgdbZHE:GD:GC8pmenkcmjblialia tqhtqhtqhspgdbZZWLa^Tli^pmenkcmjblialia tqhtqhtqhspgdbZpmenkcmjblialia tqhtqhtqhspgdbZpmenkcmjblialia tqhtqhtqhspgdbZpmenkcmjblialia tqhtqhtqhspgdbZpmenkcmjblialia tqhtqhtqhspgdbZpmenkcmjblialia {xnyvkyvlzwmjg_KH=KH=KGNJ?NJ>zwnyvmyvm u}s}snkbNJ>NJ?NJ>zwnyvmyvm u}s}snkbNJ>NJ?NJ>zwnyvmyvm u}s}snkbNJ>NJ?NJ>zwnyvmyvm u}s}snkbNJ>NJ?NJ>zwnyvmyvm u}s}snkbNJ>NJ?NJ>zwnyvmyvm u}s}snkbNJ>NJ?NJ>zwnyvmyvm u}s}snkbNJ>NJ?NJ>zwnyvmyvm u}s}snkbNJ>NJ?NJ>zwnyvmyvm u}s}snkbNJ>NJ?NJ>zwnyvmyvm u}s}snkbNJ>NJ?NJ>zwnyvmyvm u}s}snkbNJ>NJ?NJ>zwnyvmyvm u}s}snkbNJ>NJ?NJ>zwnyvmyvm u}s}snkbNJ>NJ?NJ>zwnyvmyvm |yozwmxujzwmjg_KH=KH=KG4~t|} zwmwtkvsjvsjec[IF;HE:JF;urhtqgtqgspgspg zwmwtkvsjvsjec[IF;HE:JF;urhtqgtqgspgspg zwmwtkvsjvsjec[IF;HE:JF;urhtqgtqgspgspg zwmwtkvsjvsjec[IF;HE:JF;urhtqgtqgspgspg zwmwtkvsjvsjec[IF;HE:JF;urhtqgtqgspgspg zwmwtkvsjvsjec[IF;HE:JF;urhtqgtqgspgspg zwmwtkvsjvsjec[IF;HE:JF;urhtqgtqgspgspg zwmwtkvsjvsjec[IF;HE:JF;urhtqgtqgspgspg zwmwtkvsjvsjec[IF;HE:JF;urhtqgtqgspgspg zwmwtkvsjvsjec[IF;HE:JF;urhtqgtqgspgspg zwmwtkvsjvsjec[IF;HE:JF;urhtqgtqgspgspg zwmwtkvsjvsjec[IF;HE:JF;urhtqgtqgspgspg zwmwtkvsjvsjec[IF;HE:JF;urhtqgtqgspgspg zwmwtkvsjvsjec[IF;HE:JF;urhtqgtqgspgspg spgqneqneqneqneqnepmdolcnkbli`liakh`jg_if^he\gd\ebZdaYc`X_]U_]U_]V^\T\ZR[YQZXQYWPXVPWUOVTNUSMTRLRPIRPIQOIPNHNLFNLFMKEKIDLJDLJDKICJHB qpn{xonkcZXQxxx[YQnkc}zq pmepmepmeolda_XFC9FC9FC8mjbli`mjbmjbkh` pmepmepmeolda_XFC9FC9FC8mjbli`mjbmjbkh` pmepmepmeolda_XFC9FC9FC8mjbli`mjbmjbkh` pmepmepmeolda_XFC9FC9FC8mjbli`mjbmjbkh` pmepmepmeolda_XFC9FC9FC8mjbli`mjbmjbkh` pmepmepmeolda_XFC9FC9FC8mjbli`mjbmjbkh` pmepmepmeolda_XFC9FC9FC8mjbli`mjbmjbkh` pmepmepmeolda_XFC9FC9FC8mjbli`mjbmjbkh` pmepmepmeolda_XFC9FC9FC8mjbli`mjbmjbkh` pmepmepmeolda_XFC9FC9FC8mjbli`mjbmjbkh` pmepmepmeolda_XFC9FC9FC8mjbli`mjbmjbkh` pmepmepmeolda_XFC9FC9FC8mjbli`mjbmjbkh` pmepmepmeolda_XFC9FC9FC8mjbli`mjbmjbkh` pmepmepmeolda_XFC9FC9FC8mjbli`mjbmjbkh` liakh`liakh`ig_hf^fd\ge]he]ec[caYcaYb`Ya_Xa_X`^W^\U][S][S^\T][S\ZR[YRYWPYWPXVOXVOXVOWUNVTMUSLUSLTRKTRKTRLSQKRPJQOIOMGMKELJEKIDJHCIGB trmsph[YQμlUMUlϽ^\Tyvn ~{q|yozwmzwmif^KGNJ=zwnxulyvmxulwtk ~s~{r{xo|ypmjbNJ?NJ>NJ=zwnxulyvmxulwtk ~s~{r{xo|ypmjbNJ?NJ>NJ=zwnxulyvmxulwtk ~s~{r{xo|ypmjbNJ?NJ>NJ=zwnxulyvmxulwtk ~s~{r{xo|ypmjbNJ?NJ>NJ=zwnxulyvmxulwtk ~s~{r{xo|ypmjbNJ?NJ>NJ=zwnxulyvmxulwtk ~s~{r{xo|ypmjbNJ?NJ>NJ=zwnxulyvmxulwtk ~s~{r{xo|ypmjbNJ?NJ>NJ=zwnxulyvmxulwtk ~s~{r{xo|ypmjbNJ?NJ>NJ=zwnxulyvmxulwtk ~s~{r{xo|ypmjbNJ?NJ>NJ=zwnxulyvmxulwtk ~s~{r{xo|ypmjbNJ?NJ>NJ=zwnxulyvmxulwtk ~s~{r{xo|ypmjbNJ?NJ>NJ=zwnxulyvmxulwtk ~s~{r{xo|ypmjbNJ?NJ>NJ=zwnxulyvmxulwtk ~s~{r{xo|ypmjbNJ?NJ>NJ=zwnxulyvmxulwtk uriuriurispgrofuritqhtqhurirofqnenkbmjbli`mjbliaif^ge]fd]db[ec\db[ca[a_Y`^X_]W^\U][U\ZT[YSZXRYWQWUNWUNVTMUSMTRLTRLSQKQOIQOILJDKICJHB nkbWUOͪŝ—ŝͪ[YRwtl |yo{xnzwmzwmjg_KH=KH=KG;urhtqgtqgspfqne |yo{xnzwmzwmjg_KH=KH=KG;urhtqgtqgspfqne |yo{xnzwmzwmjg_KH=KH=KG;urhtqgtqgspfqne |yo{xnzwmzwmjg_KH=KH=KG;urhtqgtqgspfqne |yo{xnzwmzwmjg_KH=KH=KG;urhtqgtqgspfqne |yo{xnzwmzwmjg_KH=KH=KG;urhtqgtqgspfqne |yo{xnzwmzwmjg_KH=KH=KG;urhtqgtqgspfqne |yo{xnzwmzwmjg_KH=KH=KG;urhtqgtqgspfqne |yo{xnzwmzwmjg_KH=KH=KG;urhtqgtqgspfqne |yo{xnzwmzwmjg_KH=KH=KG;urhtqgtqgspfqne |yo{xnzwmzwmjg_KH=KH=KG;urhtqgtqgspfqne |yo{xnzwmzwmjg_KH=KH=KG;urhtqgtqgspfqne |yo{xnzwmzwmjg_KH=KH=KG;urhtqgtqgspfqne |yo{xnzwmzwmjg_KH=KH=KG;urhtqgtqgspfqne nkcoldpmdolcmkcmkcnkcnkbolcmjbliali`kh_kh`jg_he]ec[dbZcaYcaYcaYdaYcaYb`Xb_W`^V`^V`]U^\T^\U][T\ZS[YR[YRYWOXVOXVPWUNVTMTRKTRKTRKSQJRPI ~trog][Sγa_Wwtk| u}r|q}soldOK@OK@OK?|ynzwnzwnyvmxul u}r|q}soldOK@OK@OK?|ynzwnzwnyvmxul u}r|q}soldOK@OK@OK?|ynzwnzwnyvmxul u}r|q}soldOK@OK@OK?|ynzwnzwnyvmxul u}r|q}soldOK@OK@OK?|ynzwnzwnyvmxul u}r|q}soldOK@OK@OK?|ynzwnzwnyvmxul u}r|q}soldOK@OK@OK?|ynzwnzwnyvmxul u}r|q}soldOK@OK@OK?|ynzwnzwnyvmxul u}r|q}soldOK@OK@OK?|ynzwnzwnyvmxul u}r|q}soldOK@OK@OK?|ynzwnzwnyvmxul u}r|q}soldOK@OK@OK?|ynzwnzwnyvmxul u}r|q}soldOK@OK@OK?|ynzwnzwnyvmxul u}r|q}soldOK@OK@OK?|ynzwnzwnyvmxul u}r|q}soldOK@OK@OK?|ynzwnzwnyvmxul mjbmjbnkcmjbjg_jg_if^jg_kh`jg_if^ec[caYb`XcaYcaY_]U^\U][T\ZS][T\ZS\ZRZXQYWPXVOYWPZXRYWQXVPWUNWUMVTMVTMVTMUSLTRKSQJRPIQOIQOIRPJQOIPNH zwnzwnrogVTM75-42*96.tqi}zq~{r {xnyvkyvlzwmjg_KH=KG4~t|} }zp|yozwnzwnkh`LH=LH=LH=wtkwtkxulwtkwtk }zp|yozwnzwnkh`LH=LH=LH=wtkwtkxulwtkwtk }zp|yozwnzwnkh`LH=LH=LH=wtkwtkxulwtkwtk }zp|yozwnzwnkh`LH=LH=LH=wtkwtkxulwtkwtk }zp|yozwnzwnkh`LH=LH=LH=wtkwtkxulwtkwtk }zp|yozwnzwnkh`LH=LH=LH=wtkwtkxulwtkwtk }zp|yozwnzwnkh`LH=LH=LH=wtkwtkxulwtkwtk }zp|yozwnzwnkh`LH=LH=LH=wtkwtkxulwtkwtk }zp|yozwnzwnkh`LH=LH=LH=wtkwtkxulwtkwtk }zp|yozwnzwnkh`LH=LH=LH=wtkwtkxulwtkwtk }zp|yozwnzwnkh`LH=LH=LH=wtkwtkxulwtkwtk }zp|yozwnzwnkh`LH=LH=LH=wtkwtkxulwtkwtk }zp|yozwnzwnkh`LH=LH=LH=wtkwtkxulwtkwtk }zp|yozwnzwnkh`LH=LH=LH=wtkwtkxulwtkwtk spgqneqneqneqneqnepmdolcnkbli`liakh`jg_if^he\gd\ebZdaYc`X_]U_]U_]V^\T\ZR[YQZXQYWPXVPWUOVTNUSMTRLRPIRPIQOIPNHNLFNLFMKEKIDLJDLJDKICJHB {xonkcZXQƺ[YQnkc}zq xuluritqhtqhfc[HE:HE:HD9nkcmjbnkcmjblia xuluritqhtqhfc[HE:HE:HD9nkcmjbnkcmjblia xuluritqhtqhfc[HE:HE:HD9nkcmjbnkcmjblia xuluritqhtqhfc[HE:HE:HD9nkcmjbnkcmjblia xuluritqhtqhfc[HE:HE:HD9nkcmjbnkcmjblia xuluritqhtqhfc[HE:HE:HD9nkcmjbnkcmjblia xuluritqhtqhfc[HE:HE:HD9nkcmjbnkcmjblia xuluritqhtqhfc[HE:HE:HD9nkcmjbnkcmjblia xuluritqhtqhfc[HE:HE:HD9nkcmjbnkcmjblia xuluritqhtqhfc[HE:HE:HD9nkcmjbnkcmjblia xuluritqhtqhfc[HE:HE:HD9nkcmjbnkcmjblia xuluritqhtqhfc[HE:HE:HD9nkcmjbnkcmjblia xuluritqhtqhfc[HE:HE:HD9nkcmjbnkcmjblia xuluritqhtqhfc[HE:HE:HD9nkcmjbnkcmjblia liakh`liakh`ig_hf^fd\ge]he]ec[caYcaYb`Ya_Xa_X`^W^\U][S][S^\T][S\ZR[YRYWPYWPXVOXVOXVOWUNVTMUSLUSLTRKTRKTRLSQKRPJQOIOMGMKELJEKIDJHCIGB sph[YQ^\Tyvn ~s}r|q|qnkbOK@OK@OK?{xo{xn{xnyvmxul ~s}r|q|qnkbOK@OK@OK?{xo{xn{xnyvmxul ~s}r|q|qnkbOK@OK@OK?{xo{xn{xnyvmxul ~s}r|q|qnkbOK@OK@OK?{xo{xn{xnyvmxul ~s}r|q|qnkbOK@OK@OK?{xo{xn{xnyvmxul ~s}r|q|qnkbOK@OK@OK?{xo{xn{xnyvmxul ~s}r|q|qnkbOK@OK@OK?{xo{xn{xnyvmxul ~s}r|q|qnkbOK@OK@OK?{xo{xn{xnyvmxul ~s}r|q|qnkbOK@OK@OK?{xo{xn{xnyvmxul ~s}r|q|qnkbOK@OK@OK?{xo{xn{xnyvmxul ~s}r|q|qnkbOK@OK@OK?{xo{xn{xnyvmxul ~s}r|q|qnkbOK@OK@OK?{xo{xn{xnyvmxul ~s}r|q|qnkbOK@OK@OK?{xo{xn{xnyvmxul ~s}r|q|qnkbOK@OK@OK?{xo{xn{xnyvmxul tqhspgspgrofqneuritqhtqhqnfpmemjajh`ig_db[][T\ZSZXRXVOXVPXVPTRLSQKSQKNLFKIDJHB if^~z~nkc rogpmeoldpmeb_WFC8FC8FB7oldnkcli`kh`jh` rogpmeoldpmeb_WFC8FC8FB7oldnkcli`kh`jh` rogpmeoldpmeb_WFC8FC8FB7oldnkcli`kh`jh` rogpmeoldpmeb_WFC8FC8FB7oldnkcli`kh`jh` rogpmeoldpmeb_WFC8FC8FB7oldnkcli`kh`jh` rogpmeoldpmeb_WFC8FC8FB7oldnkcli`kh`jh` rogpmeoldpmeb_WFC8FC8FB7oldnkcli`kh`jh` rogpmeoldpmeb_WFC8FC8FB7oldnkcli`kh`jh` rogpmeoldpmeb_WFC8FC8FB7oldnkcli`kh`jh` rogpmeoldpmeb_WFC8FC8FB7oldnkcli`kh`jh` rogpmeoldpmeb_WFC8FC8FB7oldnkcli`kh`jh` rogpmeoldpmeb_WFC8FC8FB7oldnkcli`kh`jh` rogpmeoldpmeb_WFC8FC8FB7oldnkcli`kh`jh` rogpmeoldpmeb_WFC8FC8FB7oldnkcli`kh`jh` xulvsjvsjvskvsizwmyvlyvlurjsphrogqnfomekh`jg_hf^ge^ge]fd]db\b`Ya_Y`^X^\T][S\ZR[YRYWPXVOWUNXVOUSLVTNRPJQOIOMG ][Syk|fkya^V |yo{xnzwmyvljg_KH=KH=KG~{r?=8@>9A?:A?:B@;B@;B@;CADC>FD?HFAJHBIGBHFAHFAIGBKIDLJEOMGOMFPNGPNGQOHRPITRKVTMWUNXVOXVOZXQ\ZS\ZR\ZR][S][T][S^\T`^Va_Wb`XdbZfc[dbZhe]ig_ljbljbnkcoldoldpmdqnepmdqnfrofrofspgspgspgtqhuriurivsjvsjwtkxulxulyvmyvmyvmyvmzwn{xo|yp{xo|ypig_XTGVREVREVREVREVREVREXTFXTFXTFXTFVREVREVREVREVREVREVREVREVREXTFXTFXTFXTFXTFXTFXTFXTFXTFVREVREXTFXTFXTFXTFXTFXTFXTFXTFXTFXTFXTFXTFXTFXTFXTFXTFXTFWSFWSFWSFWSFXTFXTFXTFXTFXTFVREVREVREVREVREWSFWSFWSFVREXTFVREVREVREVREVREVREVREVREVREVREVREVREVREVREVREVREVREVREVREVREVREVREVREVREVREVREVREVREVREVREVREVREVREVREVREVREVREVREVREVREVREVREVREVREVREVREVREVREVREVREVREVREVREVREVRE_[Mwtkvsjvsjvsjuritqhspgrofrofspgtqgtqgspfrofspgqnepmdolcolcnkbljbjh`liakh`jg_if^if^he]ec[dbZcaYb`Xb`Xa_W`^V^\T^\T][S][S\ZS[YRZXQZXPYWPXVOXVOWUNVTMUSLTRKSQJQOIQOIQOIQOIPNHNLFMKEMKELJDJHCJHCIGBIGBIGBIGAIGAHF@FD?TRK\YNxB@;CAEC>EC>FD?EC>DB=DB=DB=BAGE@HF?HF@HF@IG@JHBKICLJDLJDMKENLFOMFPNHOMFOMGPNGRPJSQKTRLTRKUSMUSLVTMWUNXVOYWPZXQ[YQ[YQ]ZR^[S`^Va_Wb`Xb`XcaYdbZec[he]if^he\if]kh`kh_li`nkbnkbnkcoldolcqndrofspgtqhtqgtqgurhurhurhtqhtqhspgtqhtqhurivsjvsjurivsjwtkzwnzwnxulyvmyvmzwnif^c_Rd`Rvsjuriurixukwtiwtjvsiurhurhurhtqgrofqnfoldoldnkcmjbliajg_if^if^fd\he]dbZcaYb`Xb`Xa_W_]U^\T][T\ZS][T\ZS[YRZXQYWPWUNWUNVTMTRKSQJSQKRPJPNGOMHNLGMKFLJEKIDJHCKICKICKICJHBGE@GE@FD?FD?EC>EC>DB=CAEC>FD?DB=DB=EC>EC>FD?GE@GE@HFAIGBJHCLJDLJELJENLFOMGPNHQOIQOIRPJQOIRPJRPISQJTRKVTMWUNWUNWUNXVO[YR\ZS][S^\T`^Wa_Xb`YcaYfc[dbZfc[he]fd\fd\he]he]hf^hf^ge]hf^ig_hf^jh`lialiamjbmjamjbmjboldoldoldoldpmepmepmeqnfrogrogsphspgspgspgtqhuridbZb^Qd`Rwtkwtkvsjtqhtqhuritqhspgrofrofqnfqnfoldoldpmdolcmkcmkcljbnkcolcnkbliajg_if^if^if^he]fd\ec[dbZcaYcaYb`X`^V^\T][S[YR[YSXVOWUNVTMUSLTRLTRLTRLSQKSQKRPJPNHOMGOMGNLFLJEKIDJHCIGBGE@GE@FD?nnEC>FD?FD?nnCAFD?FD?GE@HF@HF@IGAHFAIGBKICKICKIDKICLJDMKEMKEMKENLFOMGPNHQOIRPJSQKTRLVTNWUOWUNWUNXVPXVOXVOYWPZXQ\ZR][S^\T^\T_]Ua_Xb`YcaYcaYcaYfc[gd\hf^ig_mjbljbnkbolcolcqndrofrofspftqgtqgurhspgspgtqhuriwtjyvlzwmzwm{xn{xn|yo|yo{xm|yo}zp}zp~{q~{p|qliac_RMKEywrrpkca\\ZTzxssqkkidMKEkicxwrTRMkiczxsMKEca[d`R|yo{xnzwn{xozwnzwnzwnzwnyvmzwnyvmwtkurispgspgspgrofrofqneqneqnepmepmepmdolcnkbnkbmjakh_hf^ge]fd\he]gd\fc[daYb_Wa^Va^V`]U][T\ZSZXPZXQYWPZXPYWOXVNVTNTRKSQJSQKSQKSQKRPJQOIPNGPNHPNHOMGNLFMKDnnnLJDLJDKICJHBXVP~{r?=8@>9A?:A?:B@;A@;A@;CADC>FD?GE@HFAKICKIDKICJHCMKENLFOMGQOIRPJQOIRPJSQJTRKUSMUSLVTNWUNXVOYWP[YR\ZS][S^\T`^Wa_Xa_WcaYfc[fd\ge]hf^ig_jh`nkcnkcnkcolcolcpmdroespgtqhuritqhuriurhurhvsiwtjwtixukxukyvlzwmxulwtkwtkwtkxulyvmyvm{xo~{q}smjbeaSMKExvqzxsca\TRLca\xwrzMKEjhcxwrywrkicMKEjhbc_R|s}zq{xo|yp{xo{xo{xozwn|ynyvmvsjwtkvsjwtkwtkurispgspgrofrofqneolcnkcnkcmjbkh`kh`hf^fd\ec[caYb_Wb`Xa^V`]U_]U^\T][S][S\ZS[YRZXQZXPXVOWUNVTMTRKTRLTRKSQKRPJQOIQOIQOIPNHOMGOMGMKFMKEKICJHCJHCnnnIGAHFAGE@EC>SQK~zCAEC>FD?GE@HFAGE@IGBLJENLFOMGOMGOMGPNGQOHRPISQKSQKUSMUSMVTNWUOXVPYWQZXR[YS[YS[YQ\ZR^\T_]U`^V`^Va_Wa_Wb`Xec[fd\ec[fd\ge]he]if^kh`kh`kh`kh`jg_liaoldnkcmjbmjbmjboldoldoldpmeqnfpmeqnfrogspgtqhtqhvsjvsjvsjvsjvsjvsjwtkwtjxukfc[d`RMKE}~~}hfaigbigbMKEjhb[YTMKEigab`[jhbxvqMKEjhbwupd`R{xnzwmzwmzwmxulxulxulwtkxulxulwtkwtkvsjvsjvsjtqhspgrofqneqnerofpmenkcmjbliakh`jg_hf^fd\ec[fc[ebZebZdaYc`X_]U^\T][S][S\ZS[YRZXQYWPWUMVTMUSLTRKSQJRPIQOIOMGNLGOMGOMGMKFLJDLJDKICKICIGBHFAGE@nnnFD?ED?DC>CB=RPJ~{r?=8@>9@>9@>9A?:@>9@>9A?:A?:B@;DB=DB=DBCB=CB=ED?GE@FE@IGBKICLJDLJDMKENLEOMFPNGPNGQOHRPIRPISQKUSKVTMYWPXVNXVNYWOZXP^\T_]U_]U][S][S`]Ub`Xec[ec[fd\fd\fd\ge]hf^hf^ig_kiakiamjboldnkcnkbpmeqnfrogqnfrogspguriwtkyvm{xn|yo}zp{xozwn|yp}zqif^c_RMKE|}xvpigbMKE}wMKEhfab`ZigbMKEa_Zb^Qrofrogqnfpmdolcolcoldnkcoldpmepmepmenkcnkcnkckh`jg_lialialjbljbjh`ig_ge]fd\fd\fd\caYb`Ya_W`^W_]V_]V^\U[YQYWPXVOWUNWUNVTMUSLUSLUSMTRKSQKSQKSQKRPJQOIPNHnnnnnnnKICKICJHBnnHF@HF@HF@nnDC>EC>SQK~FD?GE@HFAHF@IGAHF?HF@IGAIGAJHAKIBLJDMKENLEOMGOMGOMGOMGPNGQOHRPISQKSQKTRLTRLTRKVTMXVPYWQZXR[YSZXQYWPZXQ\ZR][S^\T][S][S`^Vb`YcaYdbZcaYfc[he]he]if^jg_if^if^jg_kh`kh`kh`kh`mjbnkcli`mjaoldpmepmeqnfpmerogsphsphsphsphtqhtqhtqhurivsivsjwtkuriuridbZb^QMKE~y~y~y~}x~trlyztrmge_MKEge_mkfMKEfd_zzzmkfSQLge`trm~y~y~y~yMKE{{ztrmsqkb^Qrofqnepmdqnfpmepmepmepmenkcnkcmjbnkcmjblialialiakh`liajg_if^jg_if^if^he]gd\ec[fd\ec[b`Xa_Wa_W`^Vb_W`^V_]U^\T^\T][S][S\ZS[YRZXQXVNWUMVTMVTMTRKTRLSQKQOHnnnnnnnLJDLJDKICnnJHBJHBJHBnnHF@FD?TRK~FD?GE@HFAIGAJHBIGBIGBJHCJHCKICLJDLJDMKENLEOMFPNGPNHOMFQOISQJTRKTRLTRKUSLUSLVTLWUNXVOYWQXVOZXQ[YR]ZR^[S`^Va_WcaYcaYfc[ec[fd\jg_lialiamjbmjbnkcnkbolcpmdqnespgspgtqhuriurixulyvmxulxulxulyvm{xozwnxulzwmzwm{xn|yo|yo{xm{xn|yo}zp~{q~{q|r}s~tnkbeaSd`Rspgspgspgspgsphrogoldnkcnkcnkcnkcnkcmjblialiakh`jg_jg_kh`lialiaig_ig_hf^fd\he]he\he]ec[dbZcaYb`XcaYa_W`]U][S]ZR\ZR\ZR[YQZXPYWOYWPXVOWUNWUNVTMUSLSQKQOHQOIPNGPNGPNGOMFOMGOMGNLFMKFLJDJHCJHCIGBIGBIGBHFAHFAGE@FD?SQKJHCKIDMKEMKENLFNLFNLFOMGNLFOMGPNHPNHQOIRPISQJTRKSQJSQJUSLUSMVTNVTMVTMWUNXVOYWPZXPZXQ[YR\ZS^\T_]U`^Va_Wb`XcaYdbZdbZfc[gd\he]jg_kh`liamjbmjbnkcnkbpmdpmdqneqnepmdqndqnerofspgtqhtqgurhrofspgtqhuritqhuriurivsjvsjurivsjvsjvsjwtkwtkwtkxulwtkxulhe]d`Rc_R|yo{xnzwmzwnyvmzwnxulwtkwtkwtkvsjwtkvsjspgspgrofqneqneolcnkbolcnkbmjali`kh_jg_jg_hf^fd\dbZcaYb_Wb_W_]U^\UZXQYWPYWPZXQYWPYWQXVPWUOUSLSQKTRLSQKRPJQOIQOIPNGOMGOMGNLGMKFLJELJDKICKICJHAJHBJHCIGBIGBIGBHFAHFAGE@FD?TRK~|s?>9A?:CAEC>GE@GE@GE@IGBKICLJDMKENLFOMGPNGPNHPNHQOISQKTRKUSMVTMWUNXVNYWOZXQ[YSZXQ[YR\ZS][T^\U^\T_]Va_WdaYebZgd\he]if^jg_kh`kh_liankbnkbolcpmdpmdqnerofroerofrofrofspgurhurhvsixukxulyvlxujzwm{xn{xn|yo{xm{xn|yo{xo}zp~{q~{p}snkbeaSc_R~{r|yp{xo{xoyvmyvmxulwtkwtkwtkvsjvsjvsjtqhspgrofqnepmdnkbnkcljbliakh_jg^if]he\he\gd\ebZdaYa_Wb_Wb`Xb`X`^V^\T]ZR[YQ[YQ[YQZXPZXQYWPXVOWUNWUNVTMVTMUSLTRKSQJRPJRPJSQKRPJPNHOMGMKELJDKICJHCKICIGBIGAHF?HF@HF@FD?EC>RPI ||}~~ĿhdWhdWhdWhdWhdWhdWhdWhdWhdWhdWhdWhdWhdWhdWhdWhdWhdWhdWhdWhdWhdWhdWieXieXjfYjfYkgZkg[kgZlh\mi\mi\lh[lh[lh\mi\mi\mi\nj\nj\nj\nj\nj\mi]mi]lh[lh[lh[kgZkgZkgZlh[lh[lh[lh[mi]mi]lh[lh[lh[lh[kgZkgZkgZkgZkgZkgZkgZkgZlh[mi[mi\nj\mi]mi]nj^nj^nj^mi]nj^mi]lh[lh[lh[lh[lh[lh[mi]mi]mi]mi]lh[lh\kg[jfYieXieXhdWhdWhdWhdWhdWhdWhdWgcVgcVgcVgcVgcVgcVgcVgcVgcVgcVgcVgcVgcVgcVgcVgcVgcVgcVgcVz~{r?=8@>9A?:A?:B@;B@;B@;CADC>FD?HFAJHBIGBHFAHFAIGBKIDLJEOMGOMFPNGPNGQOHRPITRKVTMWUNXVOXVOZXQ\ZS\ZR\ZR][S][T][S^\T`^Va_Wb`XdbZfc[dbZhe]ig_ljbljbnkcoldoldpmdqnepmdqnfrofrofspgspgspgtqhuriurivsjvsjwtkxulxulyvmyvmyvmyvmzwn{xo|yp{xo|ypig_VRDUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCTPCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCTPCSOBSOBSOBTPCTPCTPCTPCSOBSOBTPCTPCTPCTPCSOBSOBSOBSOBUQCUQCUQCSOBSOBUQCUQCUQCUQCUQCUQCSOBSOBSOBSOBSOBSOBSOBSOBSOBSOBSOBSOBSOBSOBSOBUQCUQCUQCUQCUQCZUGwtkvsjvsjvsjuritqhspgrofrofspgtqgtqgspfrofspgqnepmdolcolcnkbljbjh`liakh`jg_if^if^he]ec[dbZcaYb`Xb`Xa_W`^V^\T^\T][S][S\ZS[YRZXQZXPYWPXVOXVOWUNVTMUSLTRKSQJQOIQOIQOIQOIPNHNLFMKEMKELJDJHCJHCIGBIGBIGBIGAIGAHF@FD?TRKzxB@;CAEC>EC>FD?EC>DB=DB=DB=BAGE@HF?HF@HF@IG@JHBKICLJDLJDMKENLFOMFPNHOMFOMGPNGRPJSQKTRLTRKUSMUSLVTMWUNXVOYWPZXQ[YQ[YQ]ZR^[S`^Va_Wb`Xb`XcaYdbZec[he]if^he\if]kh`kh_li`nkbnkbnkcoldolcqndrofspgtqhtqgtqgurhurhurhtqhtqhspgtqhtqhurivsjvsjurivsjwtkzwnzwnxulyvmyvmzwnif^[VGZUGvsjuriurixukwtiwtjvsiurhurhurhtqgrofqnfoldoldnkcmjbliajg_if^if^fd\he]dbZcaYb`Xb`Xa_W_]U^\T][T\ZS][T\ZS[YRZXQYWPWUNWUNVTMTRKSQJSQKRPJPNGOMHNLGMKFLJEKIDJHCKICKICKICJHBGE@GE@FD?FD?EC>EC>DB=CAEC>FD?DB=DB=EC>EC>FD?GE@GE@HFAIGBJHCLJDLJELJENLFOMGPNHQOIQOIRPJQOIRPJRPISQJTRKVTMWUNWUNWUNXVO[YR\ZS][S^\T`^Wa_Xb`YcaYfc[dbZfc[he]fd\fd\he]he]hf^hf^ge]hf^ig_hf^jh`lialiamjbmjamjbmjboldoldoldoldpmepmepmeqnfrogrogsphspgspgspgtqhuridbZZUGxxwwvxxxxyyyzyzzyyzzzzz|~||}}|{{||{z{yyzzxzzxxywxZUGwtkwtkvsjtqhtqhuritqhspgrofrofqnfqnfoldoldpmdolcmkcmkcljbnkcolcnkbliajg_if^if^if^he]fd\ec[dbZcaYcaYb`X`^V^\T][S[YR[YSXVOWUNVTMUSLTRLTRLTRLSQKSQKRPJPNHOMGOMGNLFLJEKIDJHCIGBGE@GE@FD?nnEC>FD?FD?nnCAFD?FD?GE@HF@HF@IGAHFAIGBKICKICKIDKICLJDMKEMKEMKENLFOMGPNHQOIRPJSQKTRLVTNWUOWUNWUNXVPXVOXVOYWPZXQ\ZR][S^\T^\T_]Ua_Xb`YcaYcaYcaYfc[gd\hf^ig_mjbljbnkbolcolcqndrofrofspftqgtqgurhspgspgtqhuriwtjyvlzwmzwm{xn{xn|yo|yo{xm|yo}zp}zp~{q~{p|qlia[VHvvxwvwwwxxyyyyyyxxxxxzzz}MKExumyvnxvnyvnwum|zrmkdxvnhf^^\UXVO|{xpnldzwozwnig_{{xp{xocaZMKExvnyvnxumxum}caYnldSQJzwoywoxvnywocaZpmezwnzwoxvnyvnMKE\ZSzwo}|xxxxxxyywwxvvwwvwwwvwuu[VG|yo{xnzwn{xozwnzwnzwnzwnyvmzwnyvmwtkurispgspgspgrofrofqneqneqnepmepmepmdolcnkbnkbmjakh_hf^ge]fd\he]gd\fc[daYb_Wa^Va^V`]U][T\ZSZXPZXQYWPZXPYWOXVNVTNTRKSQJSQKSQKSQKRPJQOIPNGPNHPNHOMGNLFMKDnnnLJDLJDKICJHBXVP~{r?=8@>9A?:A?:B@;A@;A@;CADC>FD?GE@HFAKICKIDKICJHCMKENLFOMGQOIRPJQOIRPJSQJTRKUSMUSLVTNWUNXVOYWP[YR\ZS][S^\T`^Wa_Xa_WcaYfc[fd\ge]hf^ig_jh`nkcnkcnkcolcolcpmdroespgtqhuritqhuriurhurhvsiwtjwtixukxukyvlzwmxulwtkwtkwtkxulyvmyvm{xo~{q}smjb[VHsstsrtsuuutttttttttttuuyzMKEwtlmjb}pme{xp^\URPI^\U{xpzwozwonldurjMKEzb`XpmenldcaZMKEb`X~u|zvvtttuttuuttuttuuttuuuuss[VH|s}zq{xo|yp{xo{xo{xozwn|ynyvmvsjwtkvsjwtkwtkurispgspgrofrofqneolcnkcnkcmjbkh`kh`hf^fd\ec[caYb_Wb`Xa^V`]U_]U^\T][S][S\ZS[YRZXQZXPXVOWUNVTMTRKTRLTRKSQKRPJQOIQOIQOIPNHOMGOMGMKFMKEKICJHCJHCnnnIGAHFAGE@EC>SQKzCAEC>FD?GE@HFAGE@IGBLJENLFOMGOMGOMGPNGQOHRPISQKSQKUSMUSMVTNWUOXVPYWQZXR[YS[YS[YQ\ZR^\T_]U`^V`^Va_Wa_Wb`Xec[fd\ec[fd\ge]he]if^kh`kh`kh`kh`jg_liaoldnkcmjbmjbmjboldoldoldpmeqnfpmeqnfrogspgtqhtqhvsjvsjvsjvsjvsjvsjwtkwtjxukfc[ZUG}yn}yn}yn}yn}yn}yn}zo~zo{p|q|q|q|q|q|q|q|q{p|q{p|q|q~{q~tw{MKEuskuskuskvskw`^Wx{b`Yza_WMKEzb`YWUNMKEu`^V|yq\ZSb`Yljcwtlwtlwtl{xoMKExumwumb`Xkiazwo~zwt}r|p|p|p|q}q|p|q|q|p|q|q{p{p|q|q{p{p{p~zn~zn~zo}ym}ym[VG{xnzwmzwmzwmxulxulxulwtkxulxulwtkwtkvsjvsjvsjtqhspgrofqneqnerofpmenkcmjbliakh`jg_hf^fd\ec[fc[ebZebZdaYc`X_]U^\T][S][S\ZS[YRZXQYWPWUMVTMUSLTRKSQJRPIQOIOMGNLGOMGOMGMKFLJDLJDKICKICIGBHFAGE@nnnFD?ED?DC>CB=RPJ ~{r?=8@>9@>9@>9A?:@>9@>9A?:A?:B@;DB=DB=DBCB=CB=ED?GE@FE@IGBKICLJDLJDMKENLEOMFPNGPNGQOHRPIRPISQKUSKVTMYWPXVNXVNYWOZXP^\T_]U_]U][S][S`]Ub`Xec[ec[fd\fd\fd\ge]hf^hf^ig_kiakiamjboldnkcnkbpmeqnfrogqnfrogspguriwtkyvm{xn|yo}zp{xozwn|yp}zqif^[VGyujzvkyvk{wl{wl|xm|xm}yn}yn}yn}ym}ym~zm}ym}ym}ym~zm{m{n{o|q|p|ptuzMKEurjurimkcwumza_XMKEqogzwtl~uMKE}t`^Vz\ZSb`XzMKE[YRv}v~s{o}ym}ym}yn}yn}yn}yn}yn|yn|xmzvkzvkyvkyujyujxukwtjvshvsjvsjwtjxujwtiwtiwshZUFrofrogqnfpmdolcolcoldnkcoldpmepmepmenkcnkcnkckh`jg_lialialjbljbjh`ig_ge]fd\fd\fd\caYb`Ya_W`^W_]V_]V^\U[YQYWPXVOWUNWUNVTMUSLUSLUSMTRKSQKSQKSQKRPJQOIPNHnnnnnnnKICKICJHBnnHF@HF@HF@nnDC>EC>SQK ~FD?GE@HFAHF@IGAHF?HF@IGAIGAJHAKIBLJDMKENLEOMGOMGOMGOMGPNGQOHRPISQKSQKTRLTRLTRKVTMXVPYWQZXR[YSZXQYWPZXQ\ZR][S^\T][S][S`^Vb`YcaYdbZcaYfc[he]he]if^jg_if^if^jg_kh`kh`kh`kh`mjbnkcli`mjaoldpmepmeqnfpmerogsphsphsphsphtqhtqhtqhurivsivsjwtkuriuridbZZUGtqgtqgtqgspespetqgtqgtqfurgurgurgvshvrgvrgvshvshvrgvrgvshwtiwtixukwtjyvk|yn~sy}MKEpnfpnfpnfqnftqisqige]qnfqnfhf^wtl~{q^\UMKE^\UcaYMKE|{{{{xul^\TzpnfqohqogcaZQOI|_]Vhf_pngpnfpnfqnfMKErphrpiqoghf^fd\zv}rzwnyvlxtivshvshurgurgurgvrgurgurgvrgvrgvrgtqgtqgtqgtqgtqgtqgtqgtqgtqgtqgtpetpeZUFrofqnepmdqnfpmepmepmepmenkcnkcmjbnkcmjblialialiakh`liajg_if^jg_if^if^he]gd\ec[fd\ec[b`Xa_Wa_W`^Vb_W`^V_]U^\T^\T][S][S\ZS[YRZXQXVNWUMVTMVTMTRKTRLSQKQOHnnnnnnnLJDLJDKICnnJHBJHBJHBnnHF@FD?TRK~FD?GE@HFAIGAJHBIGBIGBJHCJHCKICLJDLJDMKENLEOMFPNGPNHOMFQOISQJTRKTRLTRKUSLUSLVTLWUNXVOYWQXVOZXQ[YR]ZR^[S`^Va_WcaYcaYfc[ec[fd\jg_lialiamjbmjbnkcnkbolcpmdqnespgspgtqhuriurixulyvmxulxulxulyvm{xozwnxulzwmzwm{xn|yo|yo{xm{xn|yo}zp~{q~{q|r}s~tnkb[VHvrfvrfwshwsgwsgwshwshwsgxthwshwsgwsgxtgxtgxtgxtgxtgxtgxthyujyuizvjzvj{wk}ym}rux||}}|{||}}}~~~}||{{||~|~}}z{xxuuvw{z}~~~}|~~{v|p}ym{wkyuixtgxtgwsgwsgwsgwshvrguqfuqftpetpespetpetpespespetpetpespespespesodtpetpeZUGspgspgspgspgsphrogoldnkcnkcnkcnkcnkcmjblialiakh`jg_jg_kh`lialiaig_ig_hf^fd\he]he\he]ec[dbZcaYb`XcaYa_W`]U][S]ZR\ZR\ZR[YQZXPYWOYWPXVOWUNWUNVTMUSLSQKQOHQOIPNGPNGPNGOMFOMGOMGNLFMKFLJDJHCJHCIGBIGBIGBHFAHFAGE@FD?SQKvrgJHCKIDMKEMKENLFNLFNLFOMGNLFOMGPNHPNHQOIRPISQJTRKSQJSQJUSLUSMVTNVTMVTMWUNXVOYWPZXPZXQ[YR\ZS^\T_]U`^Va_Wb`XcaYdbZdbZfc[gd\he]jg_kh`liamjbmjbnkcnkbpmdpmdqneqnepmdqndqnerofspgtqhtqgurhrofspgtqhuritqhuriurivsjvsjurivsjvsjvsjwtkwtkwtkxulwtkxulhe][VHqncqncpmbpmbpmbqncpmbqmbqncqncqncqncsodsodsodsodsodsodspetpeuqfuqfuqfwsfyuhzwl}ym|pssuuut~s~sttttuuvtssrrrrssttvwwvtsst~r~r~q~q~qswwxyzz{xwwyxvvwuuvxwwxuu}r~zo}ym{wkyuixthxthxtixtiwshwshxtfxtgxtgxtfxtfwsfvreuqeuqfuqfuqfuqftpetpesodsodsodsod[VG|yo{xnzwmzwnyvmzwnxulwtkwtkwtkvsjwtkvsjspgspgrofqneqneolcnkbolcnkbmjali`kh_jg_jg_hf^fd\dbZcaYb_Wb_W_]U^\UZXQYWPYWPZXQYWPYWQXVPWUOUSLSQKTRLSQKRPJQOIQOIPNGOMGOMGNLGMKFLJELJDKICKICJHAJHBJHCIGBIGBIGBHFAHFAGE@FD?TRKtrl|s?>9A?:CAEC>GE@GE@GE@IGBKICLJDMKENLFOMGPNGPNHPNHQOISQKTRKUSMVTMWUNXVNYWOZXQ[YSZXQ[YR\ZS][T^\U^\T_]Va_WdaYebZgd\he]if^jg_kh`kh_liankbnkbolcpmdpmdqnerofroerofrofrofspgurhurhvsixukxulyvlxujzwm{xn{xn|yo{xm{xn|yo{xo}zp~{q~{p}snkb[VHrnbrnbsocsobsobsocsodsocsocsobtpcsoctpctpctpdtpdtpctpctpdtpdtpdtpdtpduqevrfxtiyuj{wk}ym}ym}ym}yn{xm|xm|xl}yl~zn~zm~zm~zn{n{n{o~zm}ym~zl}yl|xl|xl}yl~zm~zl~zm~zm~zm{n{n{m~zm~zl~zl}yl|xk{wk{wk}yk}yk|xl}yl}yl~zm{n{o|p|q}r|p|p|p{p}yn}yn}yn}ym|yn|yn~zo~zo~zo~zo|xl{wkyuiwsgvretpdtpdsobtpcsodsocsocsocsocsodsocsobsobsoctpbtpbtpbsocsocsodrncrncrnbrncqmbqmb[VH~{r|yp{xo{xoyvmyvmxulwtkwtkwtkvsjvsjvsjtqhspgrofqnepmdnkbnkcljbliakh_jg^if]he\he\gd\ebZdaYa_Wb_Wb`Xb`X`^V^\T]ZR[YQ[YQ[YQZXPZXQYWPXVOWUNWUNVTMVTMUSLTRKSQJRPJRPJSQKRPJPNHOMGMKELJDKICJHCKICIGBIGAHF?HF@HF@FD?EC>RPIwuo||}~~Ŀd_Qd_Qd_Qc_Qc_Qd_Qc_Qc_Qc_Qc_Qc^Pc^Pc_Qc_Qc_Qd_Qc_Qd_Qd_Qd_Qd_Qd_Qd_Qd_Qe`Re`RfaSfbTgbTgcUhdVhdVhdVhdVgcUgcUgcUgcUhdVhdVhdVhdVhdVgcUgcUhcUhcUhcUfbUfbUfbUgcUgcUhcUhcUgcVgcVgcUhcUhcUhcUgcUgcUgbTfbTfbTfbTgcUfbTgbTgbTgcUhdVidVidVieWieWieWidVieWhdVgcVgcVhdVhdVgcVgcVhdVhdVhdVhdVgcVgcUeaSe`Rd_Qd_Qc^Pc^Pc^Pb^Pb^Pb^Pc^Pc^Pc^Pc^Pc^Pc^Pc^Pb]Ob]Ob]Oc^Pb]Ob]Ob]Ob]Ob]Ob^Pc^Pb^Pc^PxPNHOMGNLGNLGOMGNLENLFLJCKIB }ynUSMSQJRPJQOIQOIPNHOMGNLFLJD xvoPNHOMGOMGNLFLJEKIDJHCIGBGE@ wunTRKSQJSQKSQKSQKRPJQOIPNGPNH QOIRPJSQKRPJRPJSQJTRKTRKUSLVTMXVOWUNXVOWUMXVNZXP[YQ][S][S^\T^\Ta_Wb`XcaYcaYdbZec[fd\hf^jg_jg_jg_kh`liali`ljbljbljbnkcmjbolcpmdoldoldnkcnkcoldoldoldpmesphspgspgsphtqhvsjvsjvsj QOIRPJSQKRPJRPJSQJTRKTRKUSLVTMXVOWUNXVOWUMXVNZXP[YQ][S][S^\T^\Ta_Wb`XcaYcaYdbZec[fd\hf^jg_jg_jg_kh`liali`ljbljbljbnkcmjbolcpmdoldoldnkcnkcoldoldoldpmesphspgspgsphtqhvsjvsjvsj QOIRPJSQKRPJRPJSQJTRKTRKUSLVTMXVOWUNXVOWUMXVNZXP[YQ][S][S^\T^\Ta_Wb`XcaYcaYdbZec[fd\hf^jg_jg_jg_kh`liali`ljbljbljbnkcmjbolcpmdoldoldnkcnkcoldoldoldpmesphspgspgsphtqhvsjvsjvsj QOIRPJSQKRPJRPJSQJTRKTRKUSLVTMXVOWUNXVOWUMXVNZXP[YQ][S][S^\T^\Ta_Wb`XcaYcaYdbZec[fd\hf^jg_jg_jg_kh`liali`ljbljbljbnkcmjbolcpmdoldoldnkcnkcoldoldoldpmesphspgspgsphtqhvsjvsjvsj SQKRPJQOIQOIQOIPNHOMGOMGMKF MKEMKFNLGNLFNLFOMGPNHQOIRPJSQKTRKTRKVTNWUOXVOYWPZXP[YQ[YR\ZR\ZR^\T`^Vb_Wb_WcaYdaYebZgd[if^if^kh_li`mjankbpmdpmdnkbolcolcqnerofrofspgtqhtqhuriuriuriwtkyvmzwnzwnzwm{xn|yo|yo|yo MKEMKFNLGNLFNLFOMGPNHQOIRPJSQKTRKTRKVTNWUOXVOYWPZXP[YQ[YR\ZR\ZR^\T`^Vb_Wb_WcaYdaYebZgd[if^if^kh_li`mjankbpmdpmdnkbolcolcqnerofrofspgtqhtqhuriuriuriwtkyvmzwnzwnzwm{xn|yo|yo|yo MKEMKFNLGNLFNLFOMGPNHQOIRPJSQKTRKTRKVTNWUOXVOYWPZXP[YQ[YR\ZR\ZR^\T`^Vb_Wb_WcaYdaYebZgd[if^if^kh_li`mjankbpmdpmdnkbolcolcqnerofrofspgtqhtqhuriuriuriwtkyvmzwnzwnzwm{xn|yo|yo|yo MKEMKFNLGNLFNLFOMGPNHQOIRPJSQKTRKTRKVTNWUOXVOYWPZXP[YQ[YR\ZR\ZR^\T`^Vb_Wb_WcaYdaYebZgd[if^if^kh_li`mjankbpmdpmdnkbolcolcqnerofrofspgtqhtqhuriuriuriwtkyvmzwnzwnzwm{xn|yo|yo|yo zvkQOIOMGNLGOMGOMGMKFLJDLJDKIC QOIPNHPNGPNGQOIRPJSQKTRKUSLVTMWUNWUNXVOZXPZXQ[YR\ZS][T][T_]U`^Va_Wb`XcaYcaYdbZdbZebZhe]jg_jg_kh_li`mjankbpmdpmdolcpmdpmdpmdpmdpmepmepmeqnfrofrofroftqhuritqhspgtqhvsjwtkwtkwtk QOIPNHPNGPNGQOIRPJSQKTRKUSLVTMWUNWUNXVOZXPZXQ[YR\ZS][T][T_]U`^Va_Wb`XcaYcaYdbZdbZebZhe]jg_jg_kh_li`mjankbpmdpmdolcpmdpmdpmdpmdpmepmepmeqnfrofrofroftqhuritqhspgtqhvsjwtkwtkwtk QOIPNHPNGPNGQOIRPJSQKTRKUSLVTMWUNWUNXVOZXPZXQ[YR\ZS][T][T_]U`^Va_Wb`XcaYcaYdbZdbZebZhe]jg_jg_kh_li`mjankbpmdpmdolcpmdpmdpmdpmdpmepmepmeqnfrofrofroftqhuritqhspgtqhvsjwtkwtkwtk QOIPNHPNGPNGQOIRPJSQKTRKUSLVTMWUNWUNXVOZXPZXQ[YR\ZS][T][T_]U`^Va_Wb`XcaYcaYdbZdbZebZhe]jg_jg_kh_li`mjankbpmdpmdolcpmdpmdpmdpmdpmepmepmeqnfrofrofroftqhuritqhspgtqhvsjwtkwtkwtk & PNHKIC RPISQJTRKTRKTRKVTNWUNYWQZXQ\ZS^\U^\Ub`XcaYdbZdbZfd]hf^hf^jg_hf^hf^ig_liankcnkbmjbnkcpmdoldpmerofrofspgspgspftqgrofspgspgspgvsjxukyvkzwlzwlzwl RPISQJTRKTRKTRKVTNWUNYWQZXQ\ZS^\U^\Ub`XcaYdbZdbZfd]hf^hf^jg_hf^hf^ig_liankcnkbmjbnkcpmdoldpmerofrofspgspgspftqgrofspgspgspgvsjxukyvkzwlzwlzwl RPISQJTRKTRKTRKVTNWUNYWQZXQ\ZS^\U^\Ub`XcaYdbZdbZfd]hf^hf^jg_hf^hf^ig_liankcnkbmjbnkcpmdoldpmerofrofspgspgspftqgrofspgspgspgvsjxukyvkzwlzwlzwl RPISQJTRKTRKTRKVTNWUNYWQZXQ\ZS^\U^\Ub`XcaYdbZdbZfd]hf^hf^jg_hf^hf^ig_liankcnkbmjbnkcpmdoldpmerofrofspgspgspftqgrofspgspgspgvsjxukyvkzwlzwlzwl QOHLJD JHCKICLJELJELJETSQOMGPNHRPJSQKTRKTRKUSLWUOXVOZXQ\ZR][S_]V_]V_]Ua_XcaYgd\mljhe\jg_kh`kh_li`pmdpmdpmdrofspgtqhuriwtkwtkyvmyvmzwn|yo~{r~{r|s JHCKICLJELJETRKTRKUSLWUOXVOZXQ\ZR][S_]V_]V_]Ua_XcaYli`pmdpmdpmdrofspgtqhuriwtkwtkyvmyvmzwn|yo~{r~{r|s JHCKICLJELJELJETSQOMGPNHRPJSQKTRKTRKUSLWUOXVOZXQ\ZR][S_]V_]V_]Ua_XcaYgd\mljhe\jg_kh`kh_li`pmdpmdpmdrofspgtqhuriwtkwtkyvmyvmzwn|yo~{r~{r|s JHCKICLJELJETRKTRKUSLWUOXVOZXQ\ZR][S_]V_]V_]Ua_XcaYli`pmdpmdpmdrofspgtqhuriwtkwtkyvmyvmzwn|yo~{r~{r|s QOHQOIPNGPNGPNGOMFOMGOMGNLF MKENLFOMGOMGOMG><6;-;-;-SQKTRLSQKSQKUSLYWP[YR\ZS][T][T^\T_]U`^Vb`X><6;-;-;-dbZdbZge]hf^ig_li`liamjbliankcoldpmdrogspgspgspg MKENLFOMGOMGcccc}TRLSQKSQKUSLYWP[YR\ZS][T][T^\T_]U`^Vcccc}dbZge]hf^ig_li`liamjbliankcoldpmdrogspgspgspg MKENLFOMGOMGOMG><6;-;-;-SQKTRLSQKSQKUSLYWP[YR\ZS][T][T^\T_]U`^Vb`X><6;-;-;-dbZdbZge]hf^ig_li`liamjbliankcoldpmdrogspgspgspg MKENLFOMGOMGcccc}TRLSQKSQKUSLYWP[YR\ZS][T][T^\T_]U`^Vcccc}dbZge]hf^ig_li`liamjbliankcoldpmdrogspgspgspg rpkJHAJHBJHCIGAHF?HF@ED?HF@GE@ NLFOMGPNHPNGPNH=:0;-;-;-VTMWUNXVOYWPZXP][S^\T`^Vb`XebZcaYdbZec[fd\hf^=:0;-;-;-mjankbolcolcqnespguriurivsjyvmyvm{xo{xozwmzwmzwlzwlzwl NLFOMGPNHPNG{bcccwWUNXVOYWPZXP][S^\T`^Vb`XebZcaYdbZec[fd\{bcccwnkbolcolcqnespguriurivsjyvmyvm{xo{xozwmzwmzwlzwlzwl NLFOMGPNHPNGPNH=:0;-;-;-VTMWUNXVOYWPZXP][S^\T`^Vb`XebZcaYdbZec[fd\hf^=:0;-;-;-mjankbolcolcqnespguriurivsjyvmyvm{xo{xozwmzwmzwlzwlzwl NLFOMGPNHPNG{bcccwWUNXVOYWPZXP][S^\T`^Vb`XebZcaYdbZec[fd\{bcccwnkbolcolcqnespguriurivsjyvmyvm{xo{xozwmzwmzwlzwlzwl KICIGBIGAIGAGE@ NLFOMGOMFOMFOMF><6><4;8-?<4\\ZWUNVTMZXQ\ZR][T][T_]Vb`XcaYdbZdbZfc[gd\he]hf^><6><4;8-?<4qqoolcqnetqitqixukxukxulvsjwtkxujxukwtkzwmzwm{xn NLFOMGOMFOMFnj\ccccjeVWUNVTMZXQ\ZR][T][T_]Vb`XcaYdbZdbZfc[gd\he]nj\ccccjeVolcqnetqitqixukxukxulvsjwtkxujxukwtkzwmzwm{xn NLFOMGOMFOMFOMF><6><4;8-?<4\\ZWUNVTMZXQ\ZR][T][T_]Vb`XcaYdbZdbZfc[gd\he]hf^><6><4;8-?<4qqoolcqnetqitqixukxukxulvsjwtkxujxukwtkzwmzwm{xn NLFOMGOMFOMFnj\ccccjeVWUNVTMZXQ\ZR][T][T_]Vb`XcaYdbZdbZfc[gd\he]nj\ccccjeVolcqnetqitqixukxukxulvsjwtkxujxukwtkzwmzwm{xn tpdFD?EC>FD?FD?CA< HFAJHBKICIGBKICJHCMKENLFOMGOMGPNHPNHPNHQOIRPJSQKTRKVTNUSLVTMWUNZXR[YQ[YQ[YQ\ZS][T^\U`^W`^W`^Wb`YdaYebZfc[he]he]he]ig_ig_jg_kh`kh`liamjbnkcoldnkcmjbmjbmjbmjboldpmeqnespgspgspg HFAJHBKICIGBvsimi[pjYpjYlgYtqhPNHPNHPNHQOIRPJSQKTRKVTNUSLVTMWUNZXR[YQ[YQ[YQ\ZS][T^\Uvsimi[pjYpjYlgYtqhfc[he]he]he]ig_ig_jg_kh`kh`liamjbnkcoldnkcmjbmjbmjbmjboldpmeqnespgspgspg HFAJHBKICIGBKICJHCMKENLFOMGOMGPNHPNHPNHQOIRPJSQKTRKVTNUSLVTMWUNZXR[YQ[YQ[YQ\ZS][T^\U`^W`^W`^Wb`YdaYebZfc[he]he]he]ig_ig_jg_kh`kh`liamjbnkcoldnkcmjbmjbmjbmjboldpmeqnespgspgspg HFAJHBKICIGBvsimi[pjYpjYlgYtqhPNHPNHPNHQOIRPJSQKTRKVTNUSLVTMWUNZXR[YQ[YQ[YQ\ZS][T^\Uvsimi[pjYpjYlgYtqhfc[he]he]he]ig_ig_jg_kh`kh`liamjbnkcoldnkcmjbmjbmjbmjboldpmeqnespgspgspg tpdOMGNLFMKDLJDLJDKIC NLEPNHQOIQOIQOIRPJSQKTRKUSLWUNXVOWUNXVO[YR\ZS][T^\U_]V_]U`^Va_WdbZec[fd\fd\ge]jg_liamjamjbnkbolcpmdqnespfsphsphsphtqitqiurivsjvsjwtkxulxulyvmzwnzwn}zo~{p~{p}s}s~{r|s|s~s NLEPNHQOIQOIQOIRPJSQKTRKUSLWUNXVOWUNXVO[YR\ZS][T^\U_]V_]U`^Va_WdbZec[fd\fd\ge]jg_liamjamjbnkbolcpmdqnespfsphsphsphtqitqiurivsjvsjwtkxulxulyvmzwnzwn}zo~{p~{p}s}s~{r|s|s~s NLEPNHQOIQOIQOIRPJSQKTRKUSLWUNXVOWUNXVO[YR\ZS][T^\U_]V_]U`^Va_WdbZec[fd\fd\ge]jg_liamjamjbnkbolcpmdqnespfsphsphsphtqitqiurivsjvsjwtkxulxulyvmzwnzwn}zo~{p~{p}s}s~{r|s|s~s NLEPNHQOIQOIQOIRPJSQKTRKUSLWUNXVOWUNXVO[YR\ZS][T^\U_]V_]U`^Va_WdbZec[fd\fd\ge]jg_liamjamjbnkbolcpmdqnespfsphsphsphtqitqiurivsjvsjwtkxulxulyvmzwnzwn}zo~{p~{p}s}s~{r|s|s~s qpnKICJHCJHCIGAHFAGE@ GE@HFAKICKICLJDLJDMKELJEMKFOMGOMGPNHPNHQOIRPJSQKTRKUSLUSLWUOXVOZXQ\ZS][S^\T_]U`^Va_WcaYcaYb`XcaYdbZec[he]kh`lialiankcmkcolcpmdqneroftqgtqgurhurhurhvsiwtjwtiyvlzwmzwm{xn{xn{xn GE@HFAKICKICLJDLJDMKELJEMKFOMGOMGPNHPNHQOIRPJSQKTRKUSLUSLWUOXVOZXQ\ZS][S^\T_]U`^Va_WcaYcaYb`XcaYdbZec[he]kh`lialiankcmkcolcpmdqneroftqgtqgurhurhurhvsiwtjwtiyvlzwmzwm{xn{xn{xn GE@HFAKICKICLJDLJDMKELJEMKFOMGOMGPNHPNHQOIRPJSQKTRKUSLUSLWUOXVOZXQ\ZS][S^\T_]U`^Va_WcaYcaYb`XcaYdbZec[he]kh`lialiankcmkcolcpmdqneroftqgtqgurhurhurhvsiwtjwtiyvlzwmzwm{xn{xn{xn GE@HFAKICKICLJDLJDMKELJEMKFOMGOMGPNHPNHQOIRPJSQKTRKUSLUSLWUOXVOZXQ\ZS][S^\T_]U`^Va_WcaYcaYb`XcaYdbZec[he]kh`lialiankcmkcolcpmdqneroftqgtqgurhurhurhvsiwtjwtiyvlzwmzwm{xn{xn{xn ,&IGBHFAGE@FD?ED?DC> MKENLFPNHPNGQOIRPJSQKTRKUSLVTMWUNWUNXVOYWPZXQ[YR\ZS][T][T^\T_]Uc`XdaYcaYb`Xc`XdaYebZgd\he]he\if]jg^kh`liankbnkbnkcmkcmkcolcpmdoldqnftqgtqgurhurhurhvshxulxulzwmyvlyvk{xn{xn{xn MKENLFPNHPNGQOIRPJSQKTRKUSLVTMWUNWUNXVOYWPZXQ[YR\ZS][T][T^\T_]Uc`XdaYcaYb`Xc`XdaYebZgd\he]he\if]jg^kh`liankbnkbnkcmkcmkcolcpmdoldqnftqgtqgurhurhurhvshxulxulzwmyvlyvk{xn{xn{xn MKENLFPNHPNGQOIRPJSQKTRKUSLVTMWUNWUNXVOYWPZXQ[YR\ZS][T][T^\T_]Uc`XdaYcaYb`Xc`XdaYebZgd\he]he\if]jg^kh`liankbnkbnkcmkcmkcolcpmdoldqnftqgtqgurhurhurhvshxulxulzwmyvlyvk{xn{xn{xn MKENLFPNHPNGQOIRPJSQKTRKUSLVTMWUNWUNXVOYWPZXQ[YR\ZS][T][T^\T_]Uc`XdaYcaYb`Xc`XdaYebZgd\he]he\if]jg^kh`liankbnkbnkcmkcmkcolcpmdoldqnftqgtqgurhurhurhvshxulxulzwmyvlyvk{xn{xn{xn tpdJHBHF@HF@HF@DC> cKICJHBJHBJHBHF@ cLJDJHCJHCIGBIGBIGBHFAHFAGE@ c^\V&%"&%"'&#'&#'&#'&#'&#('$('$('$('$('$&%#('$('$('$('$('$('$('$('$'&#('$('$('$('#)(%)($)($)($*)&*)&*)&*)&*)%*)%*)%*)%,+(,+(,+(,+',+',+'.-*.-*.-).-).-).-*.-).-)/.*/.*/.*0/,0/,/.*/.*/.*/.*0/,0/+0/+0/+0/+0/,0/+10,10,0/*0/+0/,0/+0/*0/*0/*0/*0/*10,10,10,21.21.21.21.21-21-21-21-21.10,10,21-21-21-21-21-21,32.43.43.43.43/43043054054054054054054043.43.43.43.43.54054054054065165065154065165154054054054054043.54065154054054065165165065165154043.43.43/43/43/43.43/32-43/43/32-32-32.32.43/43.54054054054/65165154/43.43.43/32.32.21,21-21,32.32.43/32.32.21-21.21.21.21.21.21.10,0/*0/*0/*0/*0/*0/*0/+0/,/.+/.+/.+/.+.-*.-*.-*.-).-*.-*-,(,+',+'-,(-,(,+(,+(-,)-,)-,(-,(-,)-,)-,),+(-,(,+(,+',+(+*'+*&+*',+(+*',+(,+(+*&+*&+*&*)%*)%*)%*)%*)&*)&*)&*)&)($)(%)(%('$('$('$('$('$&%"&%"&%"&%"&%"&%"%$"%$"&%"$#!#" $# #" $# #" %$!$#!$#!%$!%$!$# $# .-*usm}t@>9A?:CAEC>DB=DB=DB=CAEC>FD?HF@HF@HFAIGAJHBLJDLJDMKENLFOMGPNGPNGPNHPNGQOHRPITRLUSMVTMVTMXVOYWPZXQ[YR\ZS][S][S][S^[S`^Vb`XcaYcaYdbZgd\he]kh`liajg_kh_li`mjankbpmdpmdpmdqneqneqnerofrofspgtqgtqgurhspgroftqhuriurivsjvsjyvk{xn|yo|yo{xm{xn|yo}zo~{q}s|r}s~t}r~t|s|s}t}t~u~uvv}t~uvxxxxzz{|{}~~{|||||}}~~}}}}|z|||yzxxwxwvvu}t|s~su~t~t}s|r~{p}zo}zp|yo{xn{xn{xnzwmzwlzwmzwmzwmyvmyvmxulwtkvsjvsjvsjvsjuritqhtqhurivsivsiuriuriurisphrogqnfolcnkbnkbmjakh_hf^ge]fd\fd\ec[dbZc`Xb_Wa^V_]V][S[YRZXQYWPXVOXVOXVOWUNWUOWUMVTMTRLRPJRPJRPJRPJQOIPNHNLFMKFNLFNLFNLFMKEMKEMKEKICJHCHFAGE@USL {EC>FD?ED?ED?HF@GE@GE@IGAIGAJHBKICJHCLJDMKENLFOMGNLFMKENLFPNHQOIRPJRPJTRLTRKUSLUSMVTNVTMWUNXVOZXQ[YQ\ZR^\T_]Ub_Wb_WcaYdbZec[hf^kh`kh`kh_kh`liamjbpmdpmdqnespgtqivskxukxukyvl{xn{xn{xo{xo{xo~{q~{p~{p|q}suuutttwwwxyzzyzzz{z{|}~~~}~}{{zwvuuuu~t~s~s}s}s|q|r}s|r~{q|yn{xm{xm{xm{xn|yo{xnyvlxujwtiwtitqhspgurhspgqneqnfpmenkcnkcmjblialialialialiajg_if^he]gd\dbZdbZb`X_]U^\U\ZS[YS[YSZXRZXRXVPWUOVTNVTNTRKTRLSQKRPIQOHPNGOMHOMGNLFMKEKIDIGBHFAIGBKICHFAGE@FD?FD?GE?FD>EC>DB=CA<7?=8@>9@>9A?:@?:@?:B@;B@;B@;CASQK vCAFD?GE@FD?FD?HFAIGAJHAKIBKIBLJCNLFOMGPNHPNGPNGQOIQOHRPISQJTRLTRLTRLTRKUSLVTMWUNXVPYWPZXQ[YQ\ZR^\T_]V_]V^\T_]Ua_Xb`XcaYdbZdbZfc[gd\he]he]if^if^if^jg_ig_kh`mjbliamjbnkcmjbnkcmjamjbnkcolcpmepmepmeqnesphspgtqhtqhtqhurivsjvsjwtkyvmzwn{xo|yp}zq}zq}zq~{r~{r|s|s|s|s|s}t~uvvv~u~u~uu~uvwwxwxxxyyzz|{||}}~}}|||{z{zzzzywxxyywxv~t}s~{q}zo|yoyvmxulxulxulxulwtkvsjtqhspgspgrofqnfpmepmepmepmeoldnkcnkcliajg_jg_if^jg_kh`jg_he]dbZcaYb`Xa_X`^W^\U^\U][T\ZS\ZS[YRYWQVTMUSMTRLTRLTRLSQKRPJQOIPNHMKFMKFMKEKICIGAJHBIGAGE?FD?FD?DB=BA9>=9=<7>=9=<7=<7><7=;6IGAED?JHBKICKICKICLJDLJDLJDNLFNLFOMGPNHPNHRPJRPISQJTRKTRKTRKVTNVTMWUNXVOZXR[YR[YR\ZS][T^\U_]V`^Wb`XcaZec\ge]jg_liamjbmjbnkcmkcnldqnfrogrogsphspgtqitqiuriuriurivsjvsivskwtkxukxulwtkxulyvmxulxulyvmyvmxulyvlxujyvlxulwtkyvmyvmxulyvm{xo{xo~{q~{p|q}r}r~t~t~t}t|s|s~uwwwxz|{{{||}~~}~}~~}|}|{|{{zzyxyxwwvvutt}t|s|s~{r}zq|ypzwnzwnyvmxulwtkwtkwtkvsjtqhrofroeqnepmdpmdpmdpmdolcnkbmjali`kh_jg_jg_hf^fd\ec[dbZb`Xb`Xa_W`^V][S[YQ[YS[YSXVOXVOXVPVTMTRKRPIRPJQOIPNHOMGMKENLFNLFMKELJEKIDKICKICJHCJHCIGAGE@GE@FD?FD?FD?DB=DB=CAEC>GE@HFAHFAIGBKICKIDLJELJELJENLFQOIQOIQOISQKUSMUSMVTNWUOXVPYWQZXR[YS[YS\ZR][S`^Vb`XcaYcaYdbZec[fd\jg_liakh`liamjbmjankbpmdpmdnkbolcolcpmdqneqnerofroftqgurhspgurhvshwtjuritqhtqhwtkzwmzwm{xm|yo}zp}zp~{q~{q|r~{p|r}r}r~t|s~{r~{r|svuxyyzxyyyz{{||~}~~~~}|z{||||{zzywwvvuvvu~t}s|r}s|r|r~{q~{q~{q~{q}zp}zp|yo{xo}zq|yp{xoyvmyvmzwn|yn{xn{xnyvlwtkxukwtkvsjvsjurhsphsphpmeoldnkcmjbliamjbkiaig_gd\fc[ebZebZb`X`^V^[S\ZR[YS[YSZXRYWQWUNVTMTRKTRKTRLRPJPNGOMGNLFMKELJDLJDLJDJHCIGAIGAGE@GE@FD?FD?EC>DB=DB=DB=CAEC>HF@GE@FD?GE@GE@GE@HFAHFAKICKICKIDLJEMKEMKELJEOMHPNHRPJSQKUSMYWP[YR\ZS^\T_]U_]U`^Va_Wa^Va^VdbZdbZdbZfd\ge]hf^jh`ig_jh`lialialiakiajh`if^jg_kh_mjbnkcoldpmepmeqnfqnfqnfrogspgspgtqhtqhtqhuriwtkwtk{xozwn|yo~{q~{r|s|s}s}t}t}t~tvwxx{}||}}}||{z{{zzyzywwvwwxw~t}s}s~{q}zp}zp}zp|yo|yo{xnzwmyvmxuluriurivsjuritqhtqhtqhspgspgqneqnerofnkcliagd\fc[ebZebZb`Xa_W_]U^\U][S][SZXPXVNWUMVTMTRKSQKRPJQOIRPJRPJQOIPNHPNHOMGOMGNLEMKDLJEKIDKIDKIDJHCJHCIGBHFAUSLGE@~FD?HFAIGBIGBJHCJHCJHBKICKICLJEMKEMKEOMGPNHPNHPNGPNGRPIUSLXVOZXP^\U`^Wa_XcaZdbZkiakiaoldpmeqnfqnfsphtqitqhurixumxumxumyvnyvnzwn{xo{xo{xozwn{xn|yozwnzwn}zo~{p~{p|q|q}r~s|s}s|r~{q|r~t~t~t}s~tvzzyyzz{{|{{{z||~~}||{{yxyxwvwwv~uwv|s|s~{r}zq|yp{xoyvmxulvsjurhsphrogsphrogqnfoldnkcmjbmjbkh`kiajh`hf^ge]ge]fd\ec[ec[dbZdbZdbZ`]U`^V`^W][T\ZS[YS[YR[YRZXRWUNUSMRPIRPIRPJOMGOMGKIDKIDJHCIGBIGBIGBGE@FD?FD?EC>EC>EC>EC>DB=CAFD?HF@HF@IGAHF@HF@JHBJHBKICKIBKIBMKENLFOMGPNHPNHQOHRPJUSMUSMYWP[YQ\ZR][Sa_Wb`Xec[fd\jg_kh`liamjbnkcoldolcqneqnepmdqneqnerofspgspgtqhuriurivsjvsjvsjwtjxukxulzwmzwn|yo}zp}zp~{q|r|r|r}s~tu~tuvxxxyyyzz|{|{{{|}~}~~}}}}}{zyxyxxvv~t~t~{q}zp}zp|yo{xn{xn{xnzwmxulwtkurispgspgspgrofqneqnfpmdqnepmdolcolcnkbnkcljbkh`jg_if^ebZcaYcaYcaYb`X`^V_]U^\T\ZR[YQYWOXVNWUMVTMVTMTRLRPJRPIRPJRPJQOIOMFNLEMKELJDLJDKICJHCJHCIGBIGBJHBIGAHFAFD?EC>SQK~u|DB=DC>GE@GE@HF@GE@FD?GE@GE@IGAJHBJHBIGBLJDNLFNLGMKELJENLFOMGPNHRPJTRLUSMUSMVTNWUMYWOZXP[YQ][S][S^\U_]Va_Wa_Wb`Xb`XdbZec[he]jg_liankbolcpmdroespfurhuriuriwtkwtkwtjxukxulyvm{xozwn|yo|yo|yo}zo|r|r}s}suuutttuuuvwxyy{||{zyzyxyxxvwxwv~s}r~t}s}zo}zo|yoyvmyvm{xnxulwtkuritqhsphqnfrogqnfpmeoldoldmjbliakh`if^he]ge]caYcaYb`Ya_X^\U\ZS[YR[YQ[YQZXPXVPVTMUSLUSLSQKRPJPNHPNHMKFMKELJDKICKICIGBJHBGE@FD?EC>GE?FD>EC>EC>DB=DB=DB=CAFD?HF@GE@HF@HF@HF@IGAIGAJHALJDLJDMKENLEOMFRPJRPJRPJSQJTRKUSLVTMXVOYWPYWPZXQZXPZXQ[YR\ZS\ZR\ZR][S^\T`^V`^V`^V`^Vc`XdaYebZhe]if^if^jg_kh`liamjbolcolcolcolcoldrofspgspgurivsjvsjwtkxulzwn{xo{xozwnzwn{xo~{r|s~{r}t}t}s~tuuvwxyyzyy{{zyy{{||}}}}~}~~~|zyxwvwyyyv~t}s|r|r~{q}zp}zp}zp|yo{xnyvkxujyvlxukxukvshspgspgspgrofrofqnepmdpmenkclialiajg_if^jg_if^he]he]fd\fd\fd\dbZb`Xb`Xa_W`^Vb_W_]U^\U[YRZXQXVOYWPZXRYWQXVPWUNVTLVTMUSLTRKTRLSQKRPJPNGOMGOMGOMGNLEMKDLJDKICKICJHBIGAIGAFD?FD?EC>DB=EC>CB=DB=QOIv@?:B@;DB=DB=DB=DB=DB=EC>EC>FD?HFAJHBKICLJENLFOMGNLGOMGPNGRPJSQKTRLUSMVTMWUNWUMWUMXVOYWO[YQ\ZR\ZR][S^\Ta_Wb`XcaYcaYdbZec[fd\gd[he\jg_kh_li`mjaolcrofqnespgtqhvsjxukxujxukyvkzwmxulyvmyvmyvmzwn{xo}zp~{p|r~t~t}r~t~tuwwwwvxwxxyyyyyxxyz||}}~~~~|{{{zyyyyxxyyxwu}t|s|s|s}s}s|r~{q~{q{xo}zp}zp|yo|yo|yo{xn{xnyvkxujxukwtjwtjvsiurhurhuritqhuriuritqhtqhspgrofqnepmdqneqneolcnkcnkcnkcnkboldnkcliaig_hf^ge]he]gd\fc[daYc`Xa^V_]V^\U][T\ZS[YRZXQZXPZXPXVOVTMTRKSQJRPIPNGQOIRPJQOIPNHPNHOMFOMFNLFLJDLJDKICKIDKIDJHCIGBIGAIGAXVP{EC>FD?HFAHFAIGBJHCJHCKIDLJDNLFMKFMKEOMGPNHPNHQOIRPJRPJSQJUSMVTNVTMWUNYWPYWP[YQ\ZR\ZS\ZR\ZS^\T_]Va_X`^Vb`XcaYdbZdbZfc[gd\he]jg_kh`kh`liamjbmjankbolcnkbpmdrofspgtqhuriuriwtjxulzwmzwn|yo~{q~{q|r|r~{q|r}s|r|r~{q}zq~{r~{r|s|s~tuu~u|s~{r~{r~{r|s|r}zq|yp|yp~{r|s|svwvwxxxzzyyy{{|~~~~~~}}||{}}{||~~~}}|{|{{yxwvu}s|r|r~{q~{q|yoyvmyvm{xnzwmzwlzwmyvlyvlxukxukwtjuriuriuritqhtqgrofrofspgrofqnerofqneqnerofqnfpmenkcmjbkh`liakiaig_ge]ge]fd\ec[dbZcaYa_W`^V_]V_]V^\U][T\ZS[YRYWPYWPYWPWUNUSLTRKSQKRPJQOIQOIQOIPNHOMGNLFMKEMKFLJEKIDKIDJHCJHCJHBHFAHF@FD?EC>SQK}zq}t@?:CAEC>FD?GE@GE@GE@HFAHFAIGAJHBLJDPNHRPJSQKSQK`^V}t}nkcVTMWUNWUNWUNYWPcaYec[he]he\~|tnkbqnespgurivsjvsjwtjxukvsjvsjwtkwtkwtkwtk}s}sv~u~u~uvwyyzz~|{{~uvvxvw~t}s}s~{q}zq|yp}yvmwtkvsjuriolcolc|yo}zqec[ec[ebZdbZ[YS[YShf^{~mjbTRLUSMTRLSQKNLFMKELJDLJDJHCJHBIGAGE@GE@FD?EC>DB=CA9MKEzEC>FD?HF@HF@IGAIGAIGAJHCJHBJHAKICKIBMKENLFOMGPNHPNHPNGRPISQJTRKUSLVTMVTMvsh;8-<9/<9.\ZS][T^\T`^V`^Vc`Xb`XcaYcaYdbZec[fd\hf^jg_jg_jg_kh`liamjbnkbnkcoldolcpmdqneroftqgvsjwtjwtjwtjxukyvl{xn|yo{xn|yo{xm{xnzwn{xo{xo|yp|yp}zq~{r}zqLI>NJ?OK@}t}t~uwwxwxzzwwwQMAQMARNC{{|}~}}}~UQFUQFUQE[WI[WJZVJXTHXTGXTF~SOCSODRNBzzzzxyyyxwwvtOK?OK?OK>|r~{q|r~{q|r|r~{q~{q~{q}zp|yo{xnzwnLH=LH=LH=|yn{xozwnzwnyvmxulxulwtjvsivsiurhurhurhHD9GD9GC8mjbmjakh_hf^fc[ebZcaYb`Xa_W_]V_]U^\T^\T~s?<1?;0>;1YWPYWPXVOWUOVTNTRKSQJSQJTRKTRKSQJRPIPNGOMGNLFLJEKIDKIDKICKICJHCIGAHFAGE@FD?TRK~{rIGAJHBKICKICKIDKIDKIDLJELJEMKEMKFMKFOMGOMGPNHQOIRPJQOIRPIRPJRPITRLUSMVTM[YR;8-<9/<9.\ZS][S][S^\T_]Ua_Wb`XcaYb`XcaYdbZebZec[fd\fd\ge]he]hf^jh`if^jg_jg_liaoldqnfpmeqnfroftqhtqhtqhtqhurivsjvsjuritqhtqhvsjxulyvmzwnzwn|yp~{r~{rig_NK@NK@OK?}t~uvwxwv~u}t}t}t~u~ujg_PL@PL@RNC~}|{||~qnfVRFVRGVRFtqhYUIYUIYUIqnfUQFVRGVRE}|zzzyxwwvvhf^NJ?LI>MI>|yp}zq}s}s|r}zq~{q~{r~{r|yp}zq|yp|yphe]MI>LI>MI=|ypzwnzwnyvmyvmwtkvsjvsjvsjuritqhtqhspgfc[HE:HE:IE:urhurhtqgtqhspgroerofrofqneqneolcnkbnkbcaYFB7DA6EA6liajg_fd\ec[fc[ebZebZdaYc`Xa_Wa_X_]V_]V`^V?<1@<1?<2[YR[YRZXRYWPXVOWUOVTNTRKUSMUSMTRLSQKRPJQOIPNHOMGNLFOMGMKFMKEMKEKICKICJHBHFAUSLwHFAIGBJHCJHCKIDKIDKIDLJEMKDNLEOMGOMGPNGRPISQJTRKTRKTRKUSLVTMWUMXVNYWOYWP\ZR<9.>;1>:/`]Ua^Va^Vb_WcaYfc[fc[fd\fd\ge]jg^kh_nkcoldnkbolcpmdroeqnfsphsphurhtqitqiurivsjvsjvsjvsjurivsjvsjvsjyvmzwnzwnzwnzwn}zq|s|s}t}t}t~t~tuwuvwxpmeRNBTPETPD}||||}}~}}~~rofVREVREVRF~pmeTPESODTPDpmeVRFWSGVRFoldTPEUQFTPD}||||||||{{zykh`PL@QMBQMAv~uv~u|s|s~{r}t~{r|yp|yp{xo|ypif^NJ?NJ?NJ?}zq|yp~{q}zo}zp|yo|yo|yo|yo|yo|yo{xnyvlif^KH=LH=KGCB=CA9B@;CADC>ED?FD?GE@HFAIGBIGBJHCKIDKIDLJEMKFOMGRPJ63)52)63)|PNGQOHRPISQJTRKUSKUSLUSLUSNUSNVTOXVPZXR[YSZXP[YR][S_\T`]Uc`Xc`Xc`Xc`Xc`XebZebYdaYebZfc[he]jh`he]he]jg_lialiamjbli`kh_mjaoldqnfqnfrogrogrofrofspgspgtqhvsjvsjec[KH=LI>LH=|yp|yp}zq~{r~{r~uvyyzzzxmkcSOCRNBRNC{z|}}}tqgWSGWSGYUGxul\XK^ZL\XKyvm[WKZVI[WIqndUQEUQEUQD||||{zwyxwxxxolcRNCRNBRNBu~t}s|r}zozwnyvmyvmyvmxulzwmyvlxukfd\HE:HE:FC8nkcnkcliajh`ig_ig_jh`ig_ig_jg_hf^he]hf^][TA>3A>4@=2b_W`^V_]U^\U][S][S^\T][S[YQZXQYWPWUNWUNXVO96-;8-:7-USMTRKSQKSQKRPJPNHOMGNLGNLGNLFMKELJDIGBGE@GE@FD?EC>EC>DB=EC>FD?EC>EC>DB=BAzwnzwnyvmyvmxulvsjvsjuritqitqisphsphsphge]IE9HD9HD8oldkiaig_jg^ge]fd\he]fd\ec[caYb`Xa_Xa_Xa^V?<1>;0=:0WUNWUNVTMUSLTRKTRKRPJQOIQOIRPJQOIQOIPNHOMGOMGNLFLJDKIDJHBJHBJHBIGAIGAHF@FD?TRKnldGE@HFAIGAIGAJHBIGBIGAIGAIGAJHBKICKICLJDMKENLFOMGOMGNLFMKEMKENLFOMGOMFPNHSQK52)63*85+VTMWUNVTMWUNXVOZXP[YQ\ZS\ZS\ZR][S^\Ta_Wb`Xb`Xfc[gd\he]he]kh`jg_if^kh`liankcpmdpmdqnerofqnerofspgspgrofspgtqhtqhtqhuriuritqhtqhtqhtqhurivsjvsjyvmyvm{xo{xo{xojg_NJ?NJ?NJ>}zq~{r|s}t~uxxzzy{{zmkcSOCSOCTPEyvm[WK[WK\XJwtj[WJ[WJZVJvsjZVI[WK[WJvskXTGWSGWSF}|z{zyyxxolcQMBQMBRNBvuu~t}s~{q|yo|yo|yo{xn{xn{xnzwmjg_LI>NJ?NJ>zwnxulwtkxulxulwtkwtkvsktqitqirofrofroffc[HD8FC8GC8mjbmjaig_ge]ge]fd\dbZdaYc`X_]V^\U][S][T^\T>;1=:/<9/XVOYWPWUNVTMTRKSQKRPIPNHPNHPNHOMFNLFLJCLJDLJDKICIG@JHBIGBJHBJHCJHBJHCIGBIGAWUMmjb~{r?=8@>9@?:@?:A@;B@;B@;CADC>EC>EC>FD>GE?HFAHFAJHBKICKIDNLFNLGOMHTRK85+85+96+WUNWUNWUNWUNXVNZXR[YR[YQ[YR\ZS\ZS][S_]Va_Xa_Xb`YcaYdbZec[fd\ec[ec[fd\fd\ig_jh`jh`kh`liali`mjamjamjankbolcolcqnfqnfrogspgtqhtqhtqhtqhurivsjvsjwtkwtkyvm{xozwnfd\MI>MJ?NJ>|s}tvwwwxyzzz|}qneVREVREVRFtqhYUIYUIYUHxul\XK]YKZVJrofWSHWSGWSF~}}pmdTPCSOCSOBzzxxwv|s~{r}zq~{r~{r}zq~{rig_OK@OK@NJ?}zq{xo|yp}zo~{q}zp|yo{xmyvmxulxulyvlxujhe]IF;IF;JF;spgspgtqgtqgqnepmdpmdolcmjblialialjbljbc`XEA6C@6C@5fd\caYb`XdaYc`Xb`Xb_W`^V`]U^[S\ZR[YR[YR[YQ<9/;8-:7-USLUSLTRKSQJRPIQOHPNGOMGOMFPNHOMGMKDLJDKIBLJDKICJHCJHCJHBJHCKIDJHCJHCHFAFD?TRK|EC>DC>ED?ED?HF@HF@HF@IGAJHBKICLJDKIBLJCMKENLFOMGOMGOMGPNGQOHRPJRPJSQKTRLWUO96,85+96+XVPXVOYWP[YR\ZR^\U_]V`^V_]U`^VdaYebZhe]if^if^if^hf^ig_liankbnkbnkcmkcmkcolcpmdpmdroftqgrofspgspgspgtqhspgsphtqhvsjyvlzwmzwmyvmyvmyvmzwnyvm{xo~{q|r}s}s}sli`OK?PL@PL?uvwwwyyzzzz{{olcUQETPCTPD~vsjYUIZVI\XJwtk\XK\XK[WKwtkZVI[WK[WJspgWSGWSGYUG~||||sphTPDTPDTPCyxwvvwwwvuu~t}soldOK@OK@OK?{xo{xo{xn{xnyvlxukxukwtjvsjvsjuriurivsjhf^IE9IE:HD8oldmjakh_jg_hf^ge]ge]fd\ec[caYb`Xa_Xb`XcaZA>4B>3A>3^\U^\U][T\ZT[YSYWPXVPWUOWUOVTMUSMSQKQOIPNHPNHOMGMKDLJEKIDLJDKIDIGBJHBIGAGE@USLxul;:5<;7=<8=<8>=9>=9?=8?>9A?:B@;CAGE?GE?GE?GE@HF@JHBLJDLJDLJCPNG63)52)52)QOHQOHRPIUSLVTMYWQZXRZXQZXQ[YR\ZS][S_]V`^Wa_Xc`XdbZec[fd\if^if^hf^ig_ig_liankcpmeqnetqgtqgurhrofroftqhspgsphspgspgspgurivsjwtkwtkyvmzwn{xo}zp~{p~{p|r}s}sliaOK?PL@QMAxxz||}~}~~spgWSGWSGWSGwtkZVIZVI\XJwtk]YK]YK[WKwtkZVIZVIYUH}|mjbPL@OLAOK@}s}zq|yp}zq}zq}zq~{q~{r}zq|yo|yo{xo{xnfc[KH=KH=KG4A>3dbZcaYb`Y`^V`^W_]V_]V^\U][TZXQYWPXVOXVOXVO96-;8-:7-USLUSLUSMSQJRPJQOIPNHOMGOMGPNHOMFNLEMKELJDMKELJELJDLJDKICKICKICJHBJHCIGBHFAUSLꩋ~FD?FD?HF@GE@HF@HF@HF@IGAIGAJHBKICKICLJDMKENLFOMGOMGOMGQOIRPJSQKSQJTRKUSLYWP;8.;8.;8-ZXQ[YRZXQ[YR\ZS][T\ZR][T][T_]U`^Va_WcaYec[fd\ge]ge]ig_jh`mjbljbnkbpmdpmdqneroepmdqneroftqgurhurhspgtqhuriurivsjvsjyvlzwmxulyvmyvmyvmxulxulyvm|yp|yp|r}s~{rjh`OK@OK@NJ>vuxxxxxzzzy{{mkcSOCTPCTPDuriYUIYUI\XJzwn_[M^ZL\XKuriYUIYUIYUHqneUQETPEUQD|||}|||~}||{{rofTPDTPDTPCzwwwwwvvvuu~t}snkbNJ>OK@OK?{xo{xozwnzwnyvmxulxulwtkvsjvsjuriuriurhif]IE9HD9HD8nkbnkcliaig_ig_hf^he]gd\ec[caYb`X`^V`^V`^V?<1@<1?<2[YR[YRZXRYWQYWQXVOXVPWUNWUNXVOWUNUSLTRKSQKSQKQOJPNIPNIOMHOMGOMGLJELJDKICJHBXVP|s?>9@?:@?:@?:A@;A@;CAEC>FD?HFAHFAIGBKICLJDMKEMKELJEMKEMKENLFPNHQOHTRLWUN:7-:7-;8-ZXQ[YR[YR\ZR^[S`]Ua^Vb_Wb_Wc`XdbZfd\he]if^if^if^hf^ig_jh`ljbliakh`mjbmkcpmdroeqneroftqhtqhuriuriuriwtjxukxulyvlxukyvlzwm{xn|yo{xmyvmzwn}zp}zp~{q~{q|r}r}rli`OK?PL@QMAwwxyyzxyy{yzzoldTPCTPCTPDqnfVRGUQFUQEpmeVRFVRFUQF~~~~~}}~liaQNCQNCRNC||||{zzzzz{zzkh`PLAOLAOK@~{r}s}t}t|s|s|s|s|s|s~{r|yp|ypfd\KH=MI>MI>yvmwtkwtkvsjxulxulwtkvsjtqhspgspgtqhsphb`XFC9FC9FC8pmeqnfoldpmeoldpmepmdolcoldolcolcolcpmddbZFB7EB7EA6kh`jg_he]gd\fc[ebZcaYb`Xa_W_]U]ZR[YR[YR[YR;8.;8-96-SQKTRLSQKRPJQOIPNHOMGNLFOMGOMGNLFMKELJDKICKICJHBIGAIGAFD?FD?FD?EC>EC>CAMI=|yp}zq|s}t}tvyzywvwxmkcTPCTPCTPD~~~~~}}}~tqgXTGXTHYUHtqhZVIZVIZVJtqhXTHYUIYUHrofVRETPETPD{zyyyxywvuuu|sig_OK?OK?PL@|q|r}s|r|r~{q}zp|yo{xmzwlzwlzwmyvljg_KH=KG;1=:/=:0YWPYWPWUNVTMTRKSQJRPIPNGPNGPNGOMFNLFMKELJDLJDKICJHCJHBIGAIGBIGBHFAHFAHF@FD?TRKꩃwBAEC>FD?HF@HF@IGAIGAJHBKICKICLJDNLFOMGPNGPNGQOIRPJSQKUSLVTMWUNYWP][T=:/=:/>:/^\U_]V_]U`^Vb`XdbZec[he]he]if^jg_kh_mjankbnkbnkcnkcpmepmerofqnepmdrofrofspgtqhtqhtqhtqhtqgurhurivsjwtkxukxukzwmzwn|yo|yo|yo}zp|yo{xm}zp|r|r}s}s~tuuolcQMBQMBQMAxxzzy{{||}}}}qneVREVREVRFtqgWSGWSGWSGzwn^ZL\XK[WKxul[WKZVIYUHrofVREUQEUQD||||{{zyxwwvtli`OK?OK?PL@~t}s|r~{q|r|r~{q|r|r}zp}zp|yozwnliaLI>LI>LH=wtkvsjuriuritqhtqhtqhspgrofrofrofsphsphge]IE9IE:HD8liakh`he]gd\dbZcaYcaYa_W_]U\ZR[YQ[YQ\ZR][S=:0<9.<9/WUNXVOWUNUSLTRKSQJRPIPNGPNGPNGOMFNLFMKELJDLJDKICJHBJHBHF?HF@HF@HF@HF@FD?EC>SQKꩌFD?GE@HFAHF@IGBIGBJHBJHCJHCKICLJDLJDMKEOMGPNHPNGPNGPNGRPISQJTRKUSLVTMWUN[YR;8-<9/<8-\ZS][S\ZR\ZR][S_]Ua^Vb_Wb_Wa_Wa_Wb`Yec[he\he\jg_kh`liankbqneqnepmdrofspguriuritqhurivsjurivsjwtkxulyvmzwnzwn{xo|yp~{r|s~{q|r}s}t}s}s|r}s}s~tu~tliaOK?QMBQMAwxyzz{{||||}}qneUQEUQEUQFvsjYUIZVI\XJxul\XK\XK[WKuriYUIXTHWSFrofVREUQEUQD|{||{zyyvvvvvmjbPLAPLAPL@}zqzwnyvmxulxulwtkvsjvsjvsjuriuritqhtqhec[IF;HE:IE:rofqnfnkcoldoldnkcnkcliajg_ig_he]hf^if^][SB?4A>4A>3b`Xa_Wa_Wa_X`^W_]U`^V_]U^\U\ZR]ZR\ZR\ZR\ZR=:0<9.<9/USLUSLTRKTRLSQKRPJQOIPNHPNGPNGOMFNLEMKELJDLJDKICIG@JHBIGBIGBIGBHFAIGBIGAGE@TRK\ZS{EC>FD?ED?FD?FD?GE@HF@IGAIG@JHALJDLJDMKENLFOMGOMFOMGOMFPNGQOHRPISQKSQKTRLYWQ;8.<9/<9.[YQ\ZR[YR[YQ\ZR_]U`^Vb_Wb_Wc`XdaYec[he]he\fd\if^jg^kh_li`olcolcnkbolcolcpmdpmeoldpmeqneqnfoldnkcnkcpmepmeolcoldnkcpmeqnfrogspgtqhsphurhvsjvsjwtkwtkxulzwn{xoif^KH=LI>MI=}zq~{r~uvwyxyyzyz{oldTPCTPCTPD~~uriYUIYUIZVIwtk]YK]YK[WK{xn\XK[WK[WJtqhVREUQEUQD|{zzxxwv~u|s}t|s~{rif^KH=KH=LH=xulwtkwtkvsivsjuritqhtqhuritqhspgsphqnfb_WFC8FC8FB7mjaoldnkcnkcmjblialiakh`jg_jg_if^if^hf^][TB?4A>4@=2b`Xa_W`^V_]U][S\ZS\ZS[YQZXPXVNWUNVTMVTMVTM74+85+74+RPIRPJPNHPNHOMFOMGNLFMKENLFNLFNLFMKEKIDKICKICJHBJHBJHBIGBIGBIGBHFAHFAGE@FD?TRKWUO~FD?GE@HF@HF@HF?IGBIGBJHBIGAJHBKICKIBLJCMKENLFNLGNLFOMGPNGQOHSQKTRLUSMWUN[YR<9.<9/=:/^\T^\T][T^\U_]Va_Wa_WebZdbZfc[gd\he]jg_liamjbnkcnkcoldpmesphrofqneqneqnerofspgspgspgtqgtqguriuriuriwtjxulxulzwmzwm{xn|yo|yo}zp}zp}zp~{q|r|r}s|r}s~t~tmjbOK?PL@PL?wwyzyz{}}~~~~rofVREWSGWSHyvm[WK[WK^ZLvsh[WJ]YK[WKtqhYUIYUIYUH}}nkcQMAQMBQMBvvvv~u~u~uv~u|s}t|s|sif^KH=KH=MI>zwnyvmwtkvsjvsiuritqhtqhtqhspgspgsphrogb`XHE:HE:IE:spgspgqnerofspfrofrofqnepmdpmdpmdpmdolcc`XEA6DA6EA6if^he]fd\ec[dbZcaYcaYb`Xa_W^\T]ZR\ZR][S][S=:0<9.=:0XVOWUNVTMUSLTRKSQJRPIPNGPNGPNGOMFNLFMKELJDLJDJHAIGAIG@HF@HF@GE@ED?ED?DC>CB=RPIOMGxCAzwnyvmyvmxulwtkuriurivsjwtkvsjvsjvsjtqhdbZHE:IF;IE:spgspgqnfqnfpmenkcmjblialiamjbkh`jg_kh`_]UC@5A>4@=2`^W`^W^\U][T[YRZXQZXQYWPXVOVTNSQJTRLTRLTRL63*52)52)MKFMKFMKELJDKICKICIGAGE?HF@HFAGE@FD?ED?EC>FD?EC>CA9@>9?=8><7KICHFAHFAIGBJHCJHBJHCKICKIDKIDKIDLJENLFNLFOMGQOIRPITRKTRKSQJSQJTRKUSLVTMWUNXVO[YR<9.=:0=:/\ZS][S][S^\T_]U`^Va^Vb_Wb_WcaYdbZebZec[ec[fd\gd\gd\he]if^if^hf^if^liamjbkh`lialiamjbnkcnkcpmeoldpmerogspgsphrogrogtqhtqhspgtqhurivsjwtkxulyvmzwnzwn{xo|yp|ypjg_LI>MI>MI=~{r|yp}zq~{r|s}t~uvvvvwwliaQMAPL@QMB|||{|{z{{~}nkcTPEUQFVRFwtk[WJ[WJ[WKuriXTHXTHXTG}}qndUQEUQEUQDzzzzxywv}t|s|s|s}tjh`OK@NK@NJ?zwnyvmyvmxulvsjurivsjwtkvsjuritqhtqhtqhdbZHE:GD:GC8pmepmenkcmjblialiakh`ig_ig_jg_jg_if^hf^][SB?4A>4A>3b`Xa_W_]U^\T\ZR[YQ\ZS[YQYWQWUNVTMTRLTRLTRL63+63)52)MKFMKFMKELJEKIDKIDJHCIGBIGBIGBGE@FD?ED?EC>EC>DB=CA9MKECB=zCB=FD?HF@HF@IGBIGAIGAJHBJHCKICMKEMKENLFOMGPNHQOIPNGPNGRPISQKTRKUSLVTMWUNZXP;8-<9/=:/\ZS][S][S^\T_]U`^V`^Vb_Wb_Wa_Wb`XcaYgd\he]he]ge]hf^ig_lialjbnkcnkbpmdpmdqndroeroeroftqgtqgurhurhurhvsiuritqhuritqhtqhspgspgurivsjvsjwtkyvm{xo|yp{xo|yp~{r}zqig_OK?QMBQMAwvvwxxyzyyyzzoldTPCSOCTPE~}}|~qnfWSHXTGYUHvsiZVIZVIYUIxul[WK[WK[WJtqhWSFWSGWSF}|}}||{zyxxxxolcRNCSODSOCxuu~tu~t~{q}zp}zp{xn{xnyvkyvljg_KH=KH=KGLI>MI>zwnyvmzwnzwnzwnxulxulxulwtkurispgspgspgdbZHE:GD:FC8nkcnkcnkcnkcmjblialiakh`jg_jg_kh`lialia`^VDA6C@6C@5he\he]ec[dbZcaYb`XcaYa_W`]U][S]ZR\ZR\ZR\ZR=:0<9.<9/WUNWUNVTMUSLSQKQOHQOIPNGPNGPNGOMFOMGOMGNLFMKFLJDJHCJHCIGBIGBIGBHFAHFAGE@FD?SQKxCADB=DB=DB=DB=EC>FD?GE@JHBJHBKIDMKENLFOMGOMGOMGPNGQOHRPISQJTRKUSLYWP;8-<9/<9.[YQ[YQ[YS[YR\ZR^\T_]V_]V^\T`^VdaYebZgd\he]if^jg_kh`liamjbolcolcpmdpmdoldpmdqnerofspgtqhtqgspgurhurhvsiwtjwtjxujxujyvkzwlzwl|yo|yo|yo}zp~{q~{q|r|r}s}r}rmjbOK?PL@PL?vvvwz{zyzzyzznkcRNBRNBSOD|{{|~~}}~~qnfTPETPETPDliaTPETPESODnkcUQFUQFTPD}}{zxxzzzyzyznkcQMAQMBPL@}t}tvv~u|s~{r~{r|s|s|s}zq{xofd\KH=MI>MI>xulwtkwtkvsjwtkwtkuriurivsjvsjxulwtkxukhe]KGEC>DB=DB=DB=DB=CAFD?HF@IGAIGAJHBKICKIBMKENLFOMGPNGPNGQOIRPISQJSQKTRLUSMWUN[YR<9.=:/>;0_]U`^Va^Vc`XcaYec[fd\hf^ge]if]jg_liaoldpmeoldolcpmdqnerofuriuriurivsjwtkwtkxukxukyvl{xnyvmyvmyvmyvm{xo|yp|yp}zq|q~tuuvwwwwwz{|||urjVRFVRFVREvsiZVHXTGXTHuriXTHXTHYUHwtk[WJ[WJZVJwtkYUIYUIYUH}rofUQESOCSOBy{||{zwww~u~uu}tjg_NJ?LI>MI>zwnyvmzwnyvmyvmxulwtkwtkwtkvsjuritqhrogb`XFC9EB8DA6mjbmjblialiakh`ig_ig_ig_if^if^hf^ge]fd\\ZS@=3>;2?<2`^W`^W^\U][T\ZS[YR[YR[YQZXPXVNWUOUSLUSLVTN74,63*63*PNGPNGOMFOMGNLFMKELJDKIDKIDKIDJHCIGBIGAGE@GE?DB=CAMI>|yp|yp~{r~{r~{r|s|s}t}t~{r~{r|s~uhf^NK@OK?PMByyzzzzz}}~~qnfVRGVRGVRFnkbUQEUQEUQF~~~mjbSODTPEUQE~~~~pmdTPCQNCRNCz{{{{zyyxxxwxnkbQMBPLAPL@~t}s}s~{q~{q~{q}zp~{q}zp|yo|yo{xnzwmjg_KH=KH=KG9KID_zBAEC>EC>FD?FD?GE@HFAHFAIGBJHCLJDMKEMKEMKEOMGPNHQOIQOISQKTRLWUN:7-96,:7,XVPYWP[YS[YQ[YR][T^\U_]V_]V`^Wa_Wb`XcaYec[fd\ge]ge]kh`li`ljbnkcolcqneqnerofspgroftqhurivsjwtkxulxulxulzwnzwn{xo{xo|yo~{q~{q|r|r~{q|r~t~tuuuvunkbQMBQMBQMAxy{{{||}~~~spgVREVREUQF~}}}~~tqgXTHYUIYUHpmeVRFVRFUQF~~liaQNCQNCRNB}}{{yxwww~uv~uvjg_PLAOK@NJ>}t}t~u~u|s}t}t}t|s|svu}tjg_LI>LI>MI=|r~{q~{q}zo}zozwnxulxulxulvsjvsjtqhtqhfd\JGLH=|yp}zq}tw~u~uvxyxwyzmkcSOCSOCSOD{{}}}}}tqgWSGWSGYUGvsi[WJ]YK[WKuriYUIYUIYUHspgVRETPESOB||||{{zzyxyxxolcQMBQMBPL@~t}s}s|r~{q}zp{xn{xn{xnzwmzwlyvkxujif^KGED?DC>DB=RPJ uA?:B@;B@;B@;CAEC>FD>FD?FD?HF@IGAJHBKICKICKIDMKEOMGQOIRPJSQKTRKYWQ:7-96-;8-ZXR[YR[YR\ZR][S_]U`^V`^V_]Ua_WdaYebZhe]if^jg_kh_kh`liamjbpmdpmdpmdrofrofrofrofrofspguriurivsjuriuriwtjxulyvmzwmzwm{xn|yo|yo}zp}zp}zp~{q|r|r}s|r~tuunkbQMBSODQMAz{||}~}|{yy{znkcSOCSOCTPE}|}}||{}}~~oldTPETPETPDnkcTPDTPEQNC}}~|zzzzfc[MJ?LI>MI>~u}u|t}t~{s}zr|zs{yr}zr|yq|yq|yq|yqa_WJG4A>3b`Xb`X_]U^\T_]U^\T][T\ZR][T\ZS[YQ[YR[YR[YR<9/;8-:7-USMUSMTRLSQKRPJQOIPNHOMGOMGOMGNLFMKELJDKICKICJHBIGAHFAGE@HF@HF@FD?FD?CB=CA9A?:CAFD?EC>EC>EC>GE@HFAHFAIGBLJDMKENLFNLGNLGOMGQOIRPJSQKTRLTRKWUO96,74+96,VTMWUNWUNXVOXVOZXQ\ZS^\T_]Ua_Wa_Wb`XdbZec[ec[fd\ge]hf^jh`nkbolcnkbqnerofspgurhxukxukxujxujyvkzwmxulxulwtkvsjvsjwtkyvm{xozwnzwnzwn{xojg_LI>MJ?NJ>}zq}zq~{r|s|s}t}t~u}t}t}t~u~uig_PLAPLAPMByyyxxz{}~~~oldTPETPEUQEqnfVRFVRFVRGrofWSGXTHXTGvskXTGVRFVRE~~}||z{pmeQMBQMBPL@u~t~t}s|r|yn{xm{xm|yo|yo|yozwmzwmjg_LH=LH=KG|r~{q|r|r|r~{q~{q~{q|r~{q~{q|yp{xokh`LH=KH=KGEC>CB=CB=RPJ |CB=FD?HF@HFAIGBIGAHF@IGAIGAJHBKICKICLJDMKENLFSQKTRLUSMVTMYWO;8-;8.;8-ZXQ[YR[YQ][S^\Tfd\jg_kh`kh`liawumurhurivsjvsjxulxuk|yn|yp|yp}zq}zq}r~s|s|r~{qyyspfSODSOCSOB||}|spgWSGWSGWSGvsjYUIYUIZVIxul]YK]YK[WKyvm[WK\XK]YKwtjXTGVRFWSF{|sphTPDTPDTPCyxxwu}soldNJ>NJ?NJ>zwnzwnyvmyvmuriurihf^IE9IE:HD8nkbkiaif^gd\`^Va_Xa^V?<1>;0>;1ZXPZXPZXRYWQSQKRPIQOIOMGNLFNLFMKEKIDKICIGBIGBIGBHFAIGAHFAGE@TRK@5IGAJHBJHCJHCJHCJHBJHBKIDKIDLJELJDLJDNLFPNHQOIRPJRPJRPJSQJTRKUSLVTMWUNXVO[YR<9.=:0=:/\ZS][S][S^\T_]Va_Wa_Wb_Wb_WcaYdbZec[gd[he]ec[ge]hf^~|uig_mjbmjbmjbliankcnkcoldoldpmeoldqnfrogqnfrogrogsphspgsphsphsphtqhurivsjvsjwtkwtkxulyvmyvmfd\KH=LI>MI=|s}t~uwxxyzy{||zolcUQEVREVRFvsjYUIYUI\XJ~{qa]Ob^P`\Oxul[WK]YL]YLwtjZVHXTGWSF|{z{zyxwwnkbQMBQMBRNBu~t~t}s~t}s}zp}zp}zp|yo|yozwmxujjg_KH=KH=KG|s~{r|s}t~{r|s}zq}zq}zq}zq~{r|s|shf^NK@OK@NK@xxyxyyyzzz{}}kiaQNCQNCSOC~nkbUQEVRFUQF~~~mjbTPETPESOC||{{zzz{zyyxxkh`PLAOLAOK@}t}t}t}t|s|s~{r~{r}zq|yp|yp{xo{xofd\KH=KH=KGEC>EC>DB=DB=EC>EC>FD?GE@GE@IGAIGBJHCKICKICKICMKENLFPNHQOIRPJSQKWUN96+85,:7,VTMWUNWUNXVOYWPZXQ[YQ[YQ[YQ\ZR][S^\U_]V`^W`^Wb`YcaYdbZdbZec[fd\ge]ge]ge]ig_kh_kh`li`lialiankcoldnkcoldpmeqnfspgtqhwtkvsjuriwtkyvmyvmyvmyvmzwn|yp|yp}zq}zq|ypif^LI>NJ?NJ>|s|s}tvwyyzzzz{zoldTPCUQEUQFuriYUIYUI\XJxul\XK^ZL[WKtqgYUIYUIYUHrofVREUQEUQD{yzzyxwwvwwtuliaOK@OK@OK>}zq|yp~{q~{q~{q}zp|yo{xm{xnxulxulurispgcaYGD:GD:GD9pmepmepmepmeoldmjbmjbmjblialiakh`kh`lia`^WC@5B?5B?4fc[caYa_W`^V_]U_]V`^V_]U][T[YRZXQYWPYWPYWP;8.;8-96-USMUSMSQKSQJRPIQOIPNGPNHPNGPNGOMFNLEMKELJDLJDLJDKICKIDJHCJHBJHBIGBIGBHFAFD?USL5,xBAGE@GE@HF@HF?HF?IGAIGAIGBJHCJHCKICKICLJDNLFOMGOMGPNGQOHRPITRLUSMVTMYWO;8.;8-<9.[YQ\ZR\ZR][S^[S^\T_]U`^V`^Vc`Xb`XebZhe]jg_he\if]kh`liamjbolcnkbnkcoldmkcpmdroerofspgurivsjwtkwtkwtkxulyvmyvmzwmzwm{xn}zp}zp}zp}zp}zp~{q|r~{q|r|r}s}r}sjh`OK@PL@QMAuuvxxwxzy{y||qneVREVREVRF~uriYUIYUIZVIwtk]YK[WJZVItqhXTHXTHXTGvskXTGWSGVRE~~}|{zyxxolcQMBQMBQMAv~t}s|r~{q|yn{xm{xnyvmzwmzwlyvkxujhe\KGRPI5,~GE@IGAJHBJHCLJDMKEMKEOMGPNHQOIRPJRPJSQKTRLVTMWUNWUNWUNYWQYWPZXQ[YR[YR][Ta_X@<1@=3A=2b`YcaZcaZdbZec[ge]hf^ig_jg_hf^jg_kh_mjamjbnkbolcpmdroespfurhurhsphtqispgspgtqhurivsjvsjurivsjwtkxulzwn|yp|yp}zq{xo|yo}zp|yo}zp}zp}zp~{q|r|r|r|r|q~{r~{rliaPLAQMBQMAwuwxxxwwwwwxxmjbRNBRNBRNCyy|{zzz{||}pmeUQFVRGWSFrofYUHYUIYUIpmeVRGVRGUQE~~}|}||zyliaQMARNCQMBvvv}t|s}zq{xo|yp{xoyvmxulwtkwtkcaZIF;0`^W_]U][S\ZS\ZS[YS[YSZXRYWQVTMUSLUSLUSLUSL74+96,63*QOIQOIOMFPNHOMGMKELJDLJDLJDKIDJHBHFAHFAGE@GE@FD?EC>FD?FD?FD?FD?EC>EC>CB=CB=RPJ5,~FD?GE@IGBIGBJHBJHBJHBKICKICKICLJDLJDLJCMKDNLFOMGOMGOMGQOISQJTRKUSLVTMWUN\ZR<9.=:0=:/][S][T][S^\T^\T`]U`^Vb`Xb`XcaYdbZec[gd\he]he]if^hf^if^jg_mjbmjbmjbnkcmjbnkcnkcliankcqnfoldnkcoldoldpmesphsphtqhurivsjwtkvsjxulyvm{xm|yn}zo}zo|r|r}suunkbOK?PL@PL?|s|s}t~u~uv~uvxyyzzmjbQMAQMASOD|{||||{{{||~oldTPETPETPDoldVRFVRFUQFoldTPEUQFTPD~}{{yxyyyxwvvig_NK@OK@NJ>~{r~{r}s}s|r|r~{q~{r~{r|s|s~{r~{rig_OK@OK@NJ?}zq|yp~{q}zp}zp|yo{xn{xnxulwtkxulyvlyvlif^KGCB=BA<7?=8?=8=<7@>9@>9@>9B@;A?:@?:B@;B@;A@;BA=CB=DC>DC>DC>FD?HF@IGAJHBLJDLJCPNG52(41(63)}PNGQOIQOHSQJVTNUSLVTMWUNYWPZXQ[YR\ZS\ZR\ZR^[S`^Wa_XcaYdbZec[ec[ec[fd\fd\hf^ig_jh`li`nkcli`nkcoldoldoldpmeqnfsphtqhvsjxulzwm{xn{xnxulyvm{xoyvmyvmyvmzwnzwn{xojg_NJ?NJ?OK?~uvvwxyyzzy{}}qneVREWSGWSHxul[WK[WK^ZLxul\XK\XK[WKuriYUIYUIXTGrofUQESOCRNByyzzyxv}t}zq|yp|yp{xo{xndbZIFTRK<2}FD?GE@HFAHFAIGBIGBIGBJHCJHCKICLJDLJDNLFOMGPNHQOIQOIRPJSQJTRKUSLVTMXVOYWP][T<9.<9/<9.\ZS\ZR\ZR][S^\T`^Va_Wb`Xb`Xc`XdaYebZec[ec[fd\if^kh`kh_liankcnkcnkcmkcmkcolcpmdpmdqneqneqnfrogrogspgtqhuriurixukvsjvsjvsjvsjwtkwtkyvmyvmyvmyvmzwnyvmzwnzwnyvmfd\KH=LI>KH=yvmyvm{xo~{q|yp{xo{xo|yp}zq~{r}zq~{r~{rge]NK@NK@NK@wwxyyxz{{}qnfVRGVRGUQEqnfWSFWSFVRG~mjbTPETPETPD|}}}||}~~spgVREUQEUQD}}}}||{{zyxwxolcQMBPLAOK>|q~{q~{q}zo}zo|yn{xn{xn{xmzwmzwmwtkvsjfd\IF;HE:JF;urhurhtqgtqgspgspgspgrofpmdolcolcpmdpmdfc[GC7EB7FB7liakiaif^gd\fc[caYebZdaYb`X`^V_]U^\T_]U_]V?<2>;0=:0WUNVTMTRKSQJRPIQOHOMGMKELJELJDJHCIGBHFAGE@GE@GE@GE@FD?DB=EC>EC>DB=CAMI>}zq|yp}zq~{r~{q|r|r}s}s}s}s|s|sig_PL@QMAQMByz{||}}tqhXTHXTHZVIwtk]YK[WIZVIqneVRGVRGUQE~{{zzzzzyyxxig_NK@OLAOK?vvvvv~u|s}t}zq|yp|yp{xo{xofd\KH=KH=KGFD?FD?EC>EC>GE@HFAHFAKICLJENLFOMGOMGOMFPNGQOHRPISQKTRLUSLYWP;8.;8.;8-ZXR[YR[YR][S^\T`^Va_Wb`Xb`Xc`XdbZec[hf^jg_kh`kh_li`mjankbpmdolcolcpmdpmdqnespgspgspgtqhtqhurivsjvsjwtkyvmyvmzwnzwn|yo}zp}zp}s}t}s}s~tvwwxyyqnfTPDUQEUQD|{|}}~~~~~rofVREVRETPD~~~}~nkcTPETPETPD~nkbUQEVRFVRGmjbTPETPESOC}|{{yyyyyxxvvjg_PL@QMBOK?}t~uvv~uvvwv}t~u}tumjbPLAQMBPL@~t}s}s|r|r}s}s}t|r~{q~{q|yozwmjg_KGEC>EC>DB=CA9LJEF:FD?GE@HF@HFAJHBJHCJHCKIDKIDLJEOMGOMGOMGPNHQOIRPJSQKRPJRPISQJTRKUSLVTMWUNYWO;8.<9/<9.[YQ\ZR][S^\T_]Ua_Wb`XcaYcaYdbZec[fd\hf^jg_jg_jg_kh`liamjbolcnkbnkbolcolcqndrofspgtqhuritqhurivsjwtkyvmzwnzwnzwnzwn|yo~{q~{q|r|r|r|r}s|r}s}s~tvvolcQMBSODTPD{|}~~~~}||}|olcTPCSOCTPDuriYUIYUIYUHwtj[WIZVIYUJqnfVRFVRFUQE|}}}|{zyzyyxxkh`PL@PLAOK?vwwyxwvxxwwvvnkbQMBPLAOK>|q|r|r~{q~{q}zp}zp}zp}zp|yo|yo{xnyvlhe\KGCB=RPJI=zDB=DC>ED?ED?GE@FD?EC>EC>EC>FD?GE@GE@IGAJHBJHCKIDKIDLJEOMGQOIRPJRPJSQKTRKXVO:7-96-;8-ZXP\ZR[YQ]ZR^[S`]Ua_WcaYb`Xc`Xb`XcaYgd[jg_jg_jg_kh`kh_li`nkbnkcljbnkcmjbmjbmjbmjboldqneqnfqnfpmeqnfrofsphsphtqhspgspgtqhtqhuriuriurivsjwtkvsjwtkwtkxulyvmyvmfd\KH=KH=LH=|yp|yo}zp|yp~{q|s~uwvvvwvjg_PL@QMAQMByyz{|||{{}}~oldTPESODTPDvsi[WJ[WJ[WKyvm[WK[WK[WJtqhVREUQEUQD}}}|zxwyyxwvwolcQMBQMBPL@}s~{p|r|r|r~{q}zp}zp}zp|yo}zp|yozwmjg_KGED?ED?GE@GE@HF@IGAIGAJHAKIBKIBLJDMKENLFOMGOMGNLFOMGQOIRPISQJTRKUSLZXP;8-<9/<9.[YQ\ZR\ZR][S^\T`]Ua^Vb_Wb_Wc`Xb`Xb`XcaYfd\he]if^hf^if^jg_lialiamjbmkcmkcolcqneqneroftqgtqgurhspgrofspguriwtjxujxujyvlxulxul{xm{xnxulzwn}zp}zo~{p~{p|r}s~tnkbQMBSODSOC||}~vsjZVHXTGZVIxul[WK[WK\XK{xo^ZM^ZM]YMuriYUIYUIXTG}olcSOCSODRNCyyxv|s|s~{r~{r}zq|yp~{r~{r}zqhe]LI>LI>MI=|ypzwnzwnyvmyvmwtkuritqhtqhtqhuriuritqhfc[IF;IF;JF;rofrofrofqneqnfqneroeqndoldnkcliajg_if^][SB?4A>4@=2b`Xa_W`^Va_Xa_Wb_Wb_W_]U][TZXQYWPXVOXVOXVO96-:7-96-TRKTRLSQKRPJQOIQOIOMGMKENLFNLFMKEKICKICJHBJHBIGAGE@IGAHF@HF@HF@GE@FD?CB=BAFD?DB=DB=FD?FD?GE@HFAJHCKIDMKENLFOMFOMFOMFPNGQOIRPJSQJTRKUSLYWP;8.;8.;8-ZXQ\ZR\ZR][S^\T`^Va_Wb_Wb`XcaYec[fd\jg_kh`jg_kh_li`mjamjbolcolcolcpmdqnerofspgrofspgtqhurivsjvsjvsjxulyvmyvmzwnzwn|yo~{q|s}t|r|ruvvwwxyysphTPDTPDTPD{{|}}~~}}~~qneUQETPCTPD~~~~}~~~}||nkcTPESODSOCnkbVRFVRFVRGnkcTPETPETPD|}zzyyyyywwxxliaPL@OLAOK@~uvvwvxwv~u~uvtvmjbQMBQMBPL@~t}s}s}suu}s|r|r}zp|yo{xnzwmif^KGEC>EC>CA9MKE;1xBADB=EC>FD?FD?HFAHFAIGBKICKIBLJCMKDOMGPNHPNHOMFPNGQOHRPJSQKTRLUSMYWQ;8-<9/<9.[YQ\ZR\ZR]ZR^[S_]U`^Vb_Wb_Wc`XdaYebZec[he]if^kh_li`lialialjbljbljbmkcoldpmdqneqnerofroftqguriuriuriwtjxukxukxujxujyvlzwmzwm{xn{xn{xm}zp~{q|r~t~tuvvnkbQMBRNCRNByz}~vsiZVHXTGXTHwtkZVI[WK^ZL~{q`\Na\N]YMuriYUIYUIYUHvskXTGVRFWSF}|||||{{zzz{{rofTPDTPDTPCxwwvvuttt~s~s~{r{xoliaNJ?NJ>NJ=|ynzwnxulyvmxulwtkwtkvskvsivsiurhurhuriif^IE9HD9HD8oldnkcliajg_hf^ge]ge]fd\ec[daYb_W`^Va_Xa_X@=2@<1?<1[YRZXPXVOWUOVTNUSMTRLSQKSQKSQKRPIQOIPNHOMGPNHOMGNLFNLFMKEMKEMKEKICKICJHBHFAUSLcGE@HFAJHCJHBKICLJDLJDMKDMKDOMGPNHOMFPNHQOIRPJSQJSQJTRKVTNVTMWUNXVOYWOYWP][T=:/>;0>;0^\T_]U_]U_]U_]Va_Wb`XcaYcaYfc[gd\he]jg_kh`liankcoldpmeqnfsphsphroftqitqiuriuriurivsjxulxulzwnzwn|yo~{q~{p{xo|yp{xo|yp~{q~{q~{q~{q|r}s}s}s}s}s~tuumjbOK?PL@QMAu~u~uwv~u~uv}t}t}twxkh`PL@PL@QMByzzz|}}{{~}oldUQFUQFUQEpmeWSFWSFWSHoldUQFTPESOC|~|{zz{|}|}||olcTPCSOCSOB{{{|{{yyyyxvwnkbQMBQMBPL@}s|r|r~{q|r~{q|yo|yo|yo{xn|yo{xnzwmjg_KH=KH=KG;urhurhtqgtqgspfqnerofrofqnepmdnkcnkcnkcc`XEA6DA6C@5fc[caYb`Ya_Wa_W`^V`^V_]V^\UZXQYWPXVOXVOXVO96-96+96,SQKSQKQOHQOIQOIOMGNLFLJELJDLJDKICJHCIGAGE@GE@FD?EC>DB=DB=DB=EC>DB=CAFD?HF@HF@IGAHF?HF?IGAIGAJHBKIBKIBLJDMKENLFOMFPNHPNGRPIQOHRPISQKTRLUSMYWP;8.;8.;8-ZXR[YS[YR][S^\T`^Va_Wb`Xb_Wc`XdaYebZgd\he]he]if^jg^liankbpmdqneqnerofrofrofspgtqhurivsjvsjwtkyvm|yn}zo|r|r}s}s~tu~stttuvvwwxyyspfSOCTPESOCxxz{|}tqiXTGXTGWSGxulZVIYUIZVIwtk]YK]YK[WKvsjYUIYUIYUHwtjZVHXTGYUG~~~~}||z{qnfSODSODSOCxwxwvuttvuu}r|qoldOK@OK@OK?|yn|ynzwnzwnyvmxulyvmxulvsjvsiurhsphsphge]HD9GD9GC8mjbmjaig_hf^if]ge]ge]fd\ec[caYc`X`^Va^Va^V?<1>;0=:/YWPYWPWUNWUOWUMVTMUSLTRKTRKSQJRPJQOIPNHOMFOMFOMGNLFNLFMKEMKELJDJHCJHCIGBIGAVTN zDB=FD?HF@HF@HF?HF?HF?JHBJHBKICLJDKICLJDMKEOMGPNGPNGPNHQOIQOHRPISQJTRKTRKXVO96+85,:7-XVOZXQYWPYWPZXQ\ZR^\U^\T^\T`^W`^V`^Vb`XcaYcaYdbZec[fd\he]if^if^if^ig_ig_jg_kh`kh`liamjbmjbnkcmjamjbnkcpmerogspgtqhtqhuriurivsjuritqhvsjwtkvsjwtkwtkxulyvmzwnif^LI>MI>LH=|yp|yp}zq|s~{r|s|s}t}t~uwxxmjbRNBSOCTPE~wtk[WK[WK\XK}zo`\N`\N_[NtqgXTGXTHXTG~rofVREUQEUQD|}}|{zz{yxxwwnkbQMBQMBQMA~t}s}s|r|r~{q}zp}zp}zp|yo{xnyvkyvljg_KH=KG;0=:/XVOYWPXVOVTMTRKSQJRPIPNGPNGPNGNLEMKEMKELJDLJDKICJHBJHCIGBIGBIGBHFAHFAGE@FD?TRK}zq><7><7@>9A?:B@;A@;A@;CADC>FD?GE@JHBKICLJDKICLJDNLFOMGOMGPNHRPJVTM:7-96-;8-ZXQ[YRYWP[YR\ZR][T][S^\T^\T^\T`^Vb`YcaYfc[fd\ge]hf^kh`li`nkbnkcnkcoldoldpmdroeroftqhuriuriwtkxulxulyvm|yp|yp{xozwn|yp}zp}zp|r|r|r~tvvvvxyyspfSODSODRNB|{{||}|}}}}~~rofVREVREUQF~~tqhXTHYUIZVItqhYUIZVIYUI~~li`TPESODRNB}{z{zyyyzyyzzliaQMAQMBPL@~uvxyxxwvv~u}t~{r|sig_NJ?NJ?MI=xulwtkwtkvsjvsjuritqhvsjwtkvsjuriuritqhfc[HE:HE:HD9qnfqnfpmeqnfqnepmdqnepmdolcpmdnkcljbljba_WDA6DA6EA6jg_he]fd\gd\fc[ec[ec[dbZcaYa_W`^V_]V_]V_]V>;0=:/<9/WUNVTMUSMTRLSQKRPJPNGOMGOMGOMGNLFMKDMKELJDLJDKICJHBJHBIGAIGAIGAHF@GE@FD?FD?TRKꩋ~FD?HF@IGAIGAJHBIGBIGAIGAIG@KICMKEMKENLFOMGPNHQOIQOIRPJSQJTRKTRKUSLVTMWUN[YR<9.<9/<9.\ZS\ZR[YQ\ZR][S_]U`^Vb_Wb_Wc`XdaYebZgd\fd\ec[fd\he]if^jg_mjbmjbmjbnkcnkcoldpmepmdroftqgtqgurhurhurhtqhuriwtjxukxujzwm{xnzwm{xm|yo|yo~{q|r|r|r}s~t}r}rli`PLAQMBQMAwwxyy{|~}||}}qneVREVREVRFwtk[WK[WK\XKxul\XK\XK[WKxul[WK[WK[WJvskXTGWSGVRE~~~~}|}|{qnfSOCSODSOCyxxwwwtt}t~{q}zp|yozwnkh`LH=LH=LH=wtkwtkwtkxulwtkwtkwtkvsktqitqirofrofqnefc[GC7EB7FB7jg_hf^fd\ec[caYb`Xb`Xa_Wa_W_]U^\T][S][S][S=:0<9.;8.VTMWUNVTMUSLTRKRPJPNGPNHPNHPNHOMGMKDLJDKIBKIBJHBHFAHFAGE@HF@HF@ED?FD?CB=CADC>GE@GE@HF@HF@HF@IGAIGAJHBKICLJDMKENLFOMGPNHPNHPNHPNGRPJTRKUSLVTMWUN[YR;8-<9/<9.[YQ\ZR\ZR][S_]Ua_Wb`Xb`Xb`XcaYec[fd\hf^jg_kh`liamjbnkcolcqnerofsphtqitqitqhvsjxukyvl{xn{xn|ynzwn|yn~{q|r~{p}zq|yp}zq~{r~{r}s}s}suvu~t~tuvumjbOK?PL@OK?~u~u~u~u~uwvv~u}t}t~u~ujg_PL@OK?PMByy{{zzz{z{{||mjbTPETPETPDpmeVRFWSFVRG~nkcSODSODSOC~~~~~~~~rofVREUQEUQD||}~~||{xxwvli`OK?OK?NJ>}zq~{q~{q}zp{xozwnyvmyvmyvmxulxuluritqhfc[HE:HE:HD9nkcnkcmjbnkcmjblialiajg_ig_ig_ge]ge]he]][SB?4B?5B?4dbZcaYa_W_]U_]U][S\ZS[YRZXQYWPXVOWUNVTMVTM85,96,74+PNHPNHOMGMKFLJEKIDJHCHFAIGBKICHFAGE@GE@GE?GE@FD>DB=DB=DB=DB=DB=CA;0ZXP[YRZXRYWQXVPWUNVTNTRKTRKTRKSQJRPIQOIPNHPNHOMGNLFNLFMKEMKEMKELJDLJDLJDKIDZXQ꩑JHBKICKICJHCKIDKIDKIDLJELJDLJDLJDLJDNLFOMGPNHQOIPNGPNGRPISQKTRKVTMVTMWUN[YR<9.<9/=:/\ZS][S][S^\T_]U`^Va^Vb`XcaYdbZec[fd\hf^jg_jg_kh_kh`liali`nkcljbmjblialiankcpmepmeqnerofrofrofqnfrogspgtqhtqhvsjxukwtkxulwtkxulxulyvmzwn}zp}zo|r}s~tuunkbQMBQMBQMAwxy{zzxzy{yz|pmdUQEVREVRFqneWSHWSGYUGvsh[WJ[WJZVJqnfVRFVRFUQE~~}}||{{zyyxxmjbQMAQMBPL@}t}t~uvvv~uv~u}t|s}zq{xofd\KH=KH=KGDB=RPỈ~FD?GE@HFAHFAIGBIGBJHBKICKICKICLJDLJDMKENLEOMFQOIRPJQOIRPIRPJSQKSQJTRKUSLZXP;8-;8.;8-ZXP[YQ[YQ]ZR^\T`^Va_Wb`Xb`XcaYdaYebZhe]jg_jg_kh_li`nkcpmerofsphurhvsivsivskwtkwtkwtkxulyvmzwnyvmyvmzwn{xo{xo{xo{xo|yp}zp}zp~{q~{q~{q|r}s}su~t~tu~tmjbOK?PL@OK?uuvwwyyzzz{}|pmdTPCTPCTPDyvm[WKZVIZVIwtj[WIZVIYUItqgWSGWSGXTF~~qneVREUQEUQD||||{{zzyyyxypmeRNBRNBRNAu}s}s|r|r~{q}zp|yo|yo{xn|yo{xnzwmif^KH=KH=KGRPI]~{r>=8?=8@>9@>9@>9@>9@>9A?:A?:CADC>ED?GE@HFAJHBKICLJDPNG41(41(63)|QOHQOHQOIRPJSQJVTMXVOWUNWUNYWO[YR\ZS^\T^[S\ZR][Sa_Wb`YcaZfd\fd\ec[fd\fd\ge]hf^ig_jh`liamjboldmjankcpmeqnfpmeqnfrogtqhvsjwtkyvm{xn{xnzwnyvm{xo|ypzwnzwn{xo{xohe]LI>NJ?NJ>~u~uvxyxyzzzyz|qneVREVREVRFyvm[WK[WK\XKxul\XK\XK[WKuriYUIYUIYUHspgVREUQESOByyyyyyxw}t~{r|yp{xo{xofd\JG=IFEC>FD?FD?DB=EC>EC>FD?HFAJHBIGBJHCJHCKIDKICKICJHCMKENLFOMGPNHOMHTRL52)63+52)SQKTRLTRLUSLVTMWUNXVOYWPXVNWUNYWOZXP\ZR[YR[YR[YR\ZS][S`]U`^V`^Vb_Wa_W`^Vb`Zb`Yb`XdaYebZfc[gd\fc[gd\fd\if^if^kh_kh_mjankboldpmepmeqnfrogrofrofspgroespguriuricaZIF3@=3?<2a_X_]V^\U][T[YRZXQZXQZXRYWQWUNVTMTRLTRLUSL74,63*63+OMHOMHNLGOMGNLFMKEJHCKICKIDLJDKICJHBHFAGE@GE@EC>DB=DB=CA|yp~{r|s~u~uvwyxxxyznkcSOCTPCTPD||{zzz{{||qnfWSHWSGWSGrofYUHYUIXTIrofVRFVRGUQE~}||}}|{{|nkcRNBRNCQMB}t}t}s}s}zq}zq|yp|yp{xoyvmxulwtkwtkcaZIF;1=:/<9/WUNWUNVTMUSLUSLTRKTRLSQKSQJTRKSQJRPIQOIQOIQOIPNHNLFOMGMKFMKEMKELJDLJEKIDJHCXVO ~FD?GE@HFAHFAIGBIGBIGBJHCJHCKICLJDLJDMKENLFOMGPNHPNHOMFPNGQOHRPITRLUSMWUN[YR;8-<9/<9.\ZS^\T^\T^\U_]Vc`XdaYdbZdbZfc[gd\he]jg_jg_jg_kh_nkcolcqneqnespguriwtkyvlxulyvmxulxulzwmyvlyvlxulxul{xn|yo}zp~{q|r|r}s~tvwvolcQMBQMBQMAxxxzz{z{{{z{|pmdUQEUQEUQF~~}||||}}~~qnfVRFVRFVRFpmeVRFVRFVRGtqhXTHXTHXTGrofVREUQETPD{|||{|||{xxwwnkbQMBQMBPL@}s|r|r~{q}zo|yo{xm{xnyvmwtkxulwtkvsjfd\JGFD?EC>EC>DB=CAEC>EC>GE@GE@GE@HFAHFAIGBKICLJDQOIRPJSQKTRLGE@96+96,:7,{xoZXR[YSYWPZXQ[YRb`Yec[fd\ec[~liaqneqnerofuriwtkzwnzwnzwn|yp~{q~{q~{q~{quu^\TQMBQMBQMAzzz{~a_WUQEUQEUQF~~}dbZXTHWSGWSG`^VVRFVRFUQF][TSODSODSOC{|zywx[YQOK?OLAOK@}t~u}t~u~{r}zqYWPNJ?OK@OK>|r~{p~{p{xovsjxukXVOJGEC>RPI.&v@?:B@;CAEC>GE@HFAGE@HFAIGAJHCKIDKIDKICLJDOMGQOIRPJSQKTRKEC>@>9983YWP[YRXVOYWPYWP[YR\ZR^\T`^Vb`Xb`Xc`Xb`XcaYcaYdbZdbZfc[fd\if^kh`kh`jg_kh`kh`kh`liajh`kiaoldqnfqnfpmdoldoldpmeoldqnfqnfqnfrogspgspgtqhurivsjurivsj[YRJHCDB=kh`xul|ypzwnyvmzwnzwnzwn{xo|yp|yp|yp|yp}zq~{r_]VOMGEC>nkc{xo~u~uw}t}t|s~{r}t}tvvxv][SMKEBAmjb~u~||}}}}|zz|}b`YQOIFD?pme|szzyzyxzzyyyxxa_WQOIGE@rogvyzzyvxw~u|s~{r~{r|yp}zq^\UOMGFD?olc{xo}zq~{q|r}zo}zp|yo{xn{xn{xmzwl{xn{xnzwm\ZSOMGGE@nkcwtkzwnyvmvsjwtkvsjtqhtqhtqhspgspgsphsphsphWUNKICEC>jg^olcmjbkiahe]gd\fd\fd\ec[caYb`X`^V_]U][T][TJHBCA<><7\ZS\ZSWUNWUNVTMTRLSQKQOHQOIPNGPNGPNGOMFNLEMKELJDLJDKICJHBJHBIGAIGAIGBIGAIGAHF@GE@USL.&GE@HFAIGBIGBJHCJHBJHBKIDKIDLJDMKELJDMKENLEOMFPNGPNHOMGPNGRPJSQKSQJTRLTRKUSMUSLUSMVTNWUOVTMWUNWUNYWP[YR[YQ\ZS][T][T][S^\T`^Va_Wb`XdbZfc[he]fd\fd\if^jg_kh`nkcoldqnfqnfrogrofsphsphsphsphtqhspgsphtqhuriuriwtkxulxulyvmyvmzwn{xo{xo|ypzwnzwn|yp~{r|s~{r~{r}t|s|s|s}tv~u}t~u~uwyz{|}}~}}|}}}|{zwwvvv~u|s~u~u}t|s}zq~{r~{r}zq|yp{xozwnyvmyvmyvmwtkwtkvsjvsjurispgspgtqhtqhspgrogrogsphrogqnfoldnkcnkcoldnkcmjbli`kh`kh`ig_ge]ge]ec[ec[ec[b_W`]U`]U`^V_]U_]U^\T][S\ZS\ZS[YS[YSZXRYWQVTMUSLTRLUSLTRKSQKRPJQOIPNHOMHQOIPNHOMGLJEKIDJHCHFAHFAHFAHFAHFAHF@GE?GE@FD?EC>EC>DB=DB=DB=CA9A?:A?:A@;A@;A@;CAEC>FD?HFAJHCKICKICKICLJDMKENLFPNHPNHPNGQOISQKSQKSQJTRLVTMWUNWUNXVOYWP[YQ][S_]V_]V_]U`^Vb`YdbZfd\fd\ge]hf^kh`liankcnkcnkboldoldqnespgspgtqhtqhtqhurhurhurhvshwtjwtjxukxukwtkvsjvsjwtkwtkwtkxulyvm{xo~{p|r~t~t~tz|}t~{r~{q}zq|yp|yp|yp|yp}zozwnxulwtkwtkxulxulvsjvsjtqhspgspgrofqneqneolcoldnkcliakh`jg_hf^ec[daYcaYb`Xb_Wa_Wa_W_]U^\T][S][T\ZS[YRZXQYWPWUMUSLUSLVTMUSLTRKSQKRPJQOIQOIQOIQOIPNHOMGLJDLJDKICJHCKICJHBJHBIGBHFAHFAFD?EC>RPI.&GE@IGBJHCJHCKIDKIDKICKIDKICLJDMKEMKENLFOMGOMFPNGPNGPNGRPIRPJSQKTRLUSMWUNWUNXVOYWPZXQ[YR[YQ[YQ[YS\ZR^\Ta_Wb`XcaYb`Xc`XdaYec[he]if^if^if]jg_kh_lialjbmjbmjbnkcmkcolcpmdoldpmepmepmeqnfqnfqnfqnfrogqnfqnfqnfsphsphsphtqhtqhtqhvsjxulxulyvmzwn|yp}zqvzHSHEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEHTOvxwu~t|r|r~{q{xo{xo|yo{xn{xnxulxukxukvsktqitqiurhurhsphqnfpmenkcmjbkh`kh`hf^fd\ec[dbZcaYb`Xa_W`^V^[S][S][S][T\ZS[YRZXQYWPXVOWUNWUNVTMUSLTRKSQJQOIPNHPNHPNGOMFNLEMKELJDMKFLJEKICKIDJHCKICJHCIGAIGBHFAFD?TRK-&zCB=DC>FD?FD?GE@GE@HF@IGAIG@JHALJDLJDMKENLFNLEPNHPNHOMGPNHQOHSQKTRLUSMVTMVTMWUMXVNYWOZXP[YQ\ZR\ZR][S_]Ua_Wb`XcaYebZfc[gd\he]jg_lialiamjbnkcoldpmeqneqneqnespgspgtqhtqhtqhuriuriurivsjvsjvsjxulyvmyvmzwnzwm{xn|yo|yo}zp}zp~{q~{q|r~{q|r~{q|rx_XZ߭ککک۪۪۪۪۪۪۪۪ݫݫݫݫݫ߭߭߭߭߭߭߭߭߭߭ݫݫݫݫݫݫ۪۪۪۪۪۪۪کککک߭YXiyvmrogqnfqnfqnfpmeqnfpmepmeqnfqnfpmeoldnkcmjbmjbliamjbmkcliakh`liajh`ig_hf^ge]fd\fd\ec[caYb`Xc`Xb_Wb`Xb`Xa_W_]U^\T][S][S][S\ZRZXQYWPXVOWUNWUNVTMTRLRPIQOHPNGOMGOMGOMGNLFMKELJCKICKICJHBIG@IGAHF@FD?FD?ED?GE@FD?EC>SQK/'{EC>FD?HF@HF@IGAIGAHF?IG@IGAJHBJHBJHBKIDLJDLJDLJDKIDKIDMKEMKELJENLFMKFPNHPNHPNISQKSQJTRLVTMWUNWUNXVOYWP[YR\ZR^\T^\T][S^\T`^Vb`XdbZfc[fd\hf^kh`liankbnkbnkboldmkcpmdqneqneroftqgtqgurhspgurhvshxukxukyvlyvlzwm{xnzwl|yo|yo}zp~{q}s|r}s}s~tصIW"եzw w w w w w w w w w w w xxxxxxxxxz&zzzzzzzz{{{'{{{{|||||||'~~~~~~~~~~~'||||||{{{{{'{{zzzzzzzzz&zxxxxxxxxw w #w w w w w w w w w w w #zե"Wϻ|~tqhsphqnfrogrogsphrogqnfrogrofrofqneqnfpmdqneqndpmdpmdpmdpmdpmdnkbmjali`kh_jg_liakiaif^gd\fc[dbZebZb`Xa_W^\T]ZR[YQ[YRZXRXVOWUNWUNVTMUSLUSMTRLSQKRPJQOIPNHOMGNLFNLFMKELJDKICJHBHFAFD?EC>EC>DB=DB=DB=DB=DB=B@;@?:NLF4+JHBKICLJDLJDMKEKIDKICLJDLJDNLFOMGOMGPNHRPISQJTRKTRKTRKVTMWUNXVPYWQZXR\ZS][T^\U^\U_]V`^Wb`Yb`Xb`XcaYec[hf^hf^jg_hf^ig_ig_liankcoldnkbolcoldroespfsphsphsphvsivsiwtjwtkwtkwtkwtkvsjwtkvsjvsjwtkxulxulyvlyvlzwmzwlzwl}zp~{q}zp~{q|r|r~t~tuzUС|` w lT hQ r hQ r hQ r hQ s hQ s jR jR s jR s jR s jR t lT t lT lT t lT t mU u mU u mU u mU mU u mU w oV w oV w oV w oV pW xpW xpW xpW xpW xpW oV w oV w oV w oV w mU u mU mU u mU u mU u lT t lT t lT lT t lT t jR s jR s jR s jR jR s hQ r hQ r hQ r hQ r hQ lT w |` СVPsphrogqnfrogqnfolcmjbkiakialialialiali`lialiajg_ig_jg_if^if^hf^fd\ec[dbZdbZcaYb`Xa_W_]U^\T][S\ZS\ZS[YRZXQXVOXVOWUNWUNVTMUSMTRLSQKRPJRPJRPJQOIPNHNLFMKELJDKICKIDLJEKIDJHCIGBHFAGE@FD?EC>EC>DB=DB=CA<@?:A?:@>9?>9LJE5,yvm;:5<;6=<7?=8@>9@>9@>9B@;B@;CA9@?:@?:@?:A@;B@;B@;CAGE?GE?HF@HF@HF@HFAIGBHGBJHCIHCJIDLJEMKFNLEPNHQOHQOHSQJSQJUSLUSKVTMVTMXVNXVOXVN[YQ\ZR_]U_\T_\T`]Ub`XdbZdbZdbZdaYc`XebZge]hf^ig_kiajh`kiakiakialiamjbnkcoldpmdsphsphroftqhtqhtqhurivsjvsjyvmzwn}zqpmdEp n H8u[ D5D5u[ D5u[ D5u[ D5u[ D5u[ D5СF7u[ F7u[ F7u[ F7u[ F7u[ F7ѢH8x] H8x] H8x] H8x] H8x] H8کI9y^ I9y^ I9y^ I9y^ I9y^ I9کK:{_ K:{_ K:{_ K:{_ K:{_ K:کI9y^ I9y^ I9y^ I9y^ I9y^ H8کH8x] H8x] H8x] H8x] H8x] F7اF7u[ F7u[ F7u[ F7u[ F7u[ F7֦D5u[ D5u[ D5u[ D5u[ D5u[ D5֦D5sY H8n p Erogrogrogpmdolcpmenkbmjankcnkcli`li`li`kh`liakh`lialiakh`jg_kh`he]ec[ec[fc[fc[fd\ec[caYb`X`^V_]U`^V_]U][T[YR[YRYWPYWPXVOWUOUSLSQJSQKRPJRPJQOIPNHPNHOMGOMGMKEMKENLFMKELJDKICHFAHFAGE@GE@GE@FD?HF@HF@GE@GE@FD?EC>RPI:0GE@IGBKICKICLJDKIDKIDMKDMKDNLEOMGOMGPNHQOIRPJSQKRPJRPJSQJTRKTRKUSLVTMXVOWUNXVOWUMXVNZXP[YQ][S][S^\T^\Ta_Wb`XcaYcaYdbZec[fd\hf^jg_jg_jg_kh`liali`ljbljbljbnkcmjbolcpmdoldoldnkcnkcoldoldoldpmesphspgspgsphtqhvsjvsjxulxulwtkxulyvmyvmyvmxulxulfd\Eǚe TAEC>DB=FD?GE@ED?FD?EC>DB=QOIdRJHBKICLJELJDMKEMKEMKENLFNLFOMGPNHPNHQOIRPISQJTRKTRKTRKVTNWUNYWQZXQ\ZS^\U^\U_]Ua_Wb`XcaYcaYdbZdbZec\fd]hf^hf^jg_hf^hf^ig_liankcnkbmjbnkcpmdoldpmesphrofrofspgspgspgspgrofspftqgrofrofspgspgspgtqhurivsjxukyvkzwlzwl{xm{xn{xn|yo{xoyvmzwn|yp|rli`EӤĘĘĘĘĘĘĘĘĘĘĘĘĘĘĘĘĘĘĘС6E~{q|yozwmyvlwtixukwtjurivsjvsjtqhuritqhspgspgrofqneqnepmdpmdpmdmjbliakh`if]fd\fd\ec[caYa_X`^V`^V_]U][S[YRYWPXVOWUNWUNVTMWUOVTMUSMSQJSQKSQKSQKRPJQOIPNHOMGNLFNLFNLFKIDJHBIGAHFAHFAIGAGE@GE@GE@HF@HF@FD?FD?EC>CB=QOIxb}t?>9@>9A?:?>9B@;B@;A@;DB=EC>FD>FD?GE?IGAJHCKICLJELJELJENLFOMGPNHRPJSQKTRKTRKTRKUSLVTMWUOXVPXVOXVOYWPZXQ\ZR][S_]V_]V_]Ua_XcaYgd\he\he\jg_kh`kh_li`olcpmdpmdpmdpmdqndrofspgspgtqhurixulwtkwtkwtkyvmyvmzwnzwn|yo~{r|s}t}ttuvwyyzsphExe*bZB_\Q`]R_\QW_\Q_\Q`\Q`\Q`\Q`\Q`\Q`\Q`\Q`\Q`\Q˯X`\Q`\Q`\Q`\Q`\Q`\Q`\Q`\Q`\Q`\Q`\Q˯X`\Q`\Q`\Q`\Q`\Q`\Q`\Q`\Q`\Q`\Q`\Q˯X`\P`\P`\P`\P`\P`\P`\P`\P`\P`\P`\P̰X`\P`\P`\P`\P`\P`\P`\P`\P`\P`\P`\PѴY`\P`\P`\P`\P`\P`\P`\P`\P`\P`\P`\PѴY`\Q`\Q`\Q`\Q`\Q`\Q`\Q`\Q`\Q`\Q`\QѴY`\Q`\Q`\Q`\Q`\Q`\Q`\Q`\Q`\Q`\Q`\QѴY`\Q`\Q`\Q`\Q`\Q`\Q`\Q`\Q`\Q_\Q_\QѴY`]R`]RXTITK1oZE}zp{xnzwmzwnzwnzwnxulwtkyvmzwnyvmyvmxulvsjvsjvskvsivsiurhurhurhqnfoldoldnkcmjbmjbkiaif^gd\fc[ebZcaYdaYb`X_]V^\T][S][S\ZS[YRYWOXVNWUMVTMVTMTRKSQJRPISQJRPIPNGQOIRPJQOIOMGNLFMKEMKEKICJHCJHCIGAHF?HF?GE@GE@FD?EC>SQKu"~FD?GE@HFAHFAIGBIGBIGBJHCJHCKICLJDLJDMKEMKENLFOMGOMGOMGOMGOMGPNHQOISQKTRLSQKSQKSQKTRLUSLVTMWUNWUNXVOYWP[YR\ZS][T][T^\T_]U`^Vb`Xb`Xb`XcaYdbZdbZdbZfd\fd\fd\ge]ge]ge]hf^ig_kh`li`liamjbmjblialiankcoldpmepmdrogspgspgtqhurivsjyvmzwn{xo|yp{xo{xoig_E̡xg3Tljcfljciljceljceljceljceljceljc϶kljceljceljceljceljcemkc϶kmkcemkcemkcemkcemkcemkc϶kmkcemkcemkcemkcenkcenkc϶knkcenkcenkcenkcenkcenkcԺknkcenkcemkcemkcemkcemkcԺkmkcemkcemkcemkcemkcemkcԺlljceljceljceljceljceljcԺlljceljceljceljceljceljcԺlljcgcaZp>jWʝEspgsphrogrogrogsphrofrogrofrofqnfqneqneqneroeqndolcpmdolcolcpmdnkbmjakh`if]he\he]dbZb`Ya_X`^W_]V_]V^\U\ZR[YR[YQ[YS[YSZXRWUNVTNUSMTRKTRKTRLRPJQOIPNHOMGNLFLJELJDLJDKICJHBHFAGE@HFAGE@EC>EC>DB=DB=DB=CAGE@GE@HF@HF@HF@IGAIGAIGBJHCKICLJDNLFOMGPNHPNGPNHQOIRPJSQKUSLVTMWUNWUNXVOYWPYWOZXP\ZS][S][S^\T^\T`^Vb`XebZcaYdbZec[fd\hf^jg_jg_kh_li`mjankbpmdolcolcqneqnerofspguriuriurivsjxulyvmyvmyvm{xo{xozwnzwmzwmzwlzwlyvmxulxulzwn{xo{xo|ypzwn{xojg_Exh8ojZsrntsosrntsrnsrnsrnsrnsrnsrnsrnsrnsrnsrnsrnðusrnsrnsrnsrntsntsntsntsntsntsntsnкutsntsntsntsntsntsntsntsntsntsntsnкutsntsntsntsntsntsntsntsntsntsntsnкutsntsntsntsntsntsntsntsntsntsntsnվvtsntsntsntsntsntsntsntsntsntsntsnվvtsntsntsntsntsntsntsntsntsntsntsnվvtsntsntsntsntsntsntsnsrnsrnsrnsrnվvsrnsrnsrnsrnsrnsrnsrnsrnsrnsrnsrnվwsrnutpjidYSAfU~Etqhsphrogspgsphqnfrogrofspgspgtqgtqgrofqneqneolcnkcmkcljbljbljbjh`ig_hf^ge]fd\fd\ec[caYb`Xa_W`^V`^V_]V^\U\ZR[YQZXQZXQYWPWUNVTNUSMTRLSQKRPIQOIPNGPNHPNHNLFKIDKIDLJDKICJHBIGAGE@GE@FD?EC>EC>EC>EC>FD?EC>EC>CAEC>DB=BAEC>EC>DB=DB=DB=CAEC>EC>DB=DB=DB=DB=DB=CA9@?:@?:@?:B@;A@;DB=EC>EC>EC>EC>EC>FD?GE@HFAKICKICLJDLJDMKELJEMKFOMGOMGPNHPNHQOIRPJSQKTRKUSLUSLWUOXVOZXQ\ZS][S^\T_]U`^Va_WcaYcaYb`XcaYdbZec[he]kh`lialiankcmkcolcpmdqneroftqgtqgurhurhurhvsiwtjwtiyvlzwmzwm{xn{xn{xnxulyvmzwn{xoyvmyvmzwn}zqli`EtLȢȢȢϢϢϢϢѢѢѢkg\iZ+zEspgsphrogsphrogrogrogrogqnfpmeoldnkcmjbmjbnkcmjbjg_jg_if^jg_kh`jg_if^ec[caYb`XcaYcaY_]U^\U][T\ZS][T\ZS\ZRZXQYWPXVOYWPZXRYWQXVPWUNWUMVTMVTMVTMUSLTRKSQJRPIQOIQOIRPJQOIPNHNLFMKELJDKICJHCJHBHF?HF@HF@GE@ED?EC>DB=QOIzvB@;CAFD?GE@GE@GE@JHBJHCLJDMKENLFPNHPNGQOIRPJSQKTRKUSLVTMWUNWUNXVOYWPZXQ[YR\ZS][T][T^\T_]Uc`XdaYcaYb`Xc`XdaYebZgd\he]he\if]jg^kh`liankbnkbnkcmkcmkcolcpmdoldqnftqgtqgurhurhurhvshxulxulzwmyvlyvk{xn{xn}zp~{q~{q|r}s}suwwpmeE֫&Pſӭľľľľľӭľľľľľӭľľľľľٮľľľľľٮľľľľľٮľľľľľٮľľľľľۮľľľľľۮľľľľľۮſe~k/ӤEqnfpmeoldnkcmjbmjbkh`if^if^he]fc[fc[ebYebYebZebZdaYa_W`^V_]U`^X][T][T][U\ZT[YSZXP[YQYWOXVOXVNWUNWUNUSKUSKSQJSQJQOHQOIPNGPNGQOINLEMKDMKEMKFMKELJEKICIGAHF@HFAHFAHFAHFAGE@ED?DC>DC>CB=CADB=DB=EC>EC>FD>GE@GE@HF@HFAJHBKICKICIGBJHCKIDLJEMKFNLGPNHOMHPNIRPJSQKTRKUSMVTNVTNWUOXVPZXR[YR[YQ\ZS][T][S^\Ta_WcaYdbZgd\ge]if^jg_mjbmjbmjbmkcmkcolcpmepmepmeqnfpmeqnfqnfrogrofspgsphspgspgspgtqhtqhvsjxulyvm|yn}zo}zo~{p~{p|qmjbEܰ(WòŴòߵòòòòòòòòòòòߵòòòòòòòòòòòߵòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòijŴj3اEvsjtqhspgtqhspgsphrogpmeoldoldoldoldnkcmjbliajg_ig_jg_jg_jg_if^fd\ec[dbZcaYb`Xb`X`^W^\U^\U][S][S][S\ZS[YRZXQYWPXVOXVOXVPWUNVTMWUOVTMUSLVTMVTMUSLTRKSQKRPJQOIQOIQOIPNHOMGNLFMKEMKELJDKICKICJHBIGBJHBIGAHFAGE@EC>RPI]|EC>FD?HF@HF@IGBIGBIGAJHBJHBKICLJDLJDMKENLFNLEOMGOMGOMGPNGQOIQOIRPJTRLUSLUSLVTNUSLVTNWUNXVOZXQ[YS[YQ\ZR_]U`^Vb_Wb_Wc`Xb`Xb`XdbZfd\he]if]jg^kh`lialjbnkcnkbmkcnkcolcroeroespftqgtqgurhurivsjxulzwn{xo}zq|q}ruutttuvvwwxsphE^_ڞܿӰv߷;MEspgsphrogqnfqnfqnfpmepmeqnfroftqgtqgqneoldnkcliakh`kh`kh`lialiajg_if^ge]fd\fc[fc[caYb`Xb`X`^W^\T_]V^\U\ZR[YRZXQYWPYWPXVOXVOXVPWUOVTNUSLUSMSQKRPJQOIOMGOMGNLGOMGNLGMKEKICIGBJHBJHBIGAGE@HFAGE@FD?FD?EC>EC>CA9A?:A?:B@;B@;B@;CADC>FD?HFAJHBIGBHFAHFAIGBKIDLJEOMGOMFPNGPNGQOHRPITRKVTMWUNXVOXVOZXQ\ZS\ZR\ZR][S][T][S^\T`^Va_Wb`XdbZfc[dbZhe]ig_ljbljbnkcoldoldpmdqnepmdqnfrofrofspgspgspgtqhuriurivsjvsjwtkxulxulyvmyvmyvmyvmzwn{xo|yp{xo|ypig_VRDUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCTPCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCUQCTPCSOBSOBSOBTPCTPCTPCTPCSOBSOBTPCTPCTPCTPCSOBSOBSOBSOBUQCUQCUQCSOBSOBUQCUQCUQCUQCUQCUQCSOBSOBSOBSOBSOBSOBSOBSOBSOBSOBSOBSOBSOBSOBSOBUQCUQCUQCUQCUQCZUGwtkvsjvsjvsjuritqhspgrofrofspgtqgtqgspfrofspgqnepmdolcolcnkbljbjh`liakh`jg_if^if^he]ec[dbZcaYb`Xb`Xa_W`^V^\T^\T][S][S\ZS[YRZXQZXPYWPXVOXVOWUNVTMUSLTRKSQJQOIQOIQOIQOIPNHNLFMKEMKELJDJHCJHCIGBIGBIGBIGAIGAHF@FD?TRKxB@;CAEC>EC>FD?EC>DB=DB=DB=BAGE@HF?HF@HF@IG@JHBKICLJDLJDMKENLFOMFPNHOMFOMGPNGRPJSQKTRLTRKUSMUSLVTMWUNXVOYWPZXQ[YQ[YQ]ZR^[S`^Va_Wb`Xb`XcaYdbZec[he]if^he\if]kh`kh_li`nkbnkbnkcoldolcqndrofspgtqhtqgtqgurhurhurhtqhtqhspgtqhtqhurivsjvsjurivsjwtkzwnzwnxulyvmyvmzwnif^[VGZUGvsjuriurixukwtiwtjvsiurhurhurhtqgrofqnfoldoldnkcmjbliajg_if^if^fd\he]dbZcaYb`Xb`Xa_W_]U^\T][T\ZS][T\ZS[YRZXQYWPWUNWUNVTMTRKSQJSQKRPJPNGOMHNLGMKFLJEKIDJHCKICKICKICJHBGE@GE@FD?FD?EC>EC>DB=CAEC>FD?DB=DB=EC>EC>FD?GE@GE@HFAIGBJHCLJDLJELJENLFOMGPNHQOIQOIRPJQOIRPJRPISQJTRKVTMWUNWUNWUNXVO[YR\ZS][S^\T`^Wa_Xb`YcaYfc[dbZfc[he]fd\fd\he]he]hf^hf^ge]hf^ig_hf^jh`lialiamjbmjamjbmjboldoldoldoldpmepmepmeqnfrogrogsphspgspgspgtqhuridbZZUGxxwwvxxxxyyyzyzzyyzzzzzzz{{{{|}}|||~~~~~~~~~~~~~~~~~|}~||||||}}|{{||{z{yyzzxzzxxywxZUGwtkwtkvsjtqhtqhuritqhspgrofrofqnfqnfoldoldpmdolcmkcmkcljbnkcolcnkbliajg_if^if^if^he]fd\ec[dbZcaYcaYb`X`^V^\T][S[YR[YSXVOWUNVTMUSLTRLTRLTRLSQKSQKRPJPNHOMGOMGNLFLJEKIDJHCIGBGE@GE@FD?EC>FD?EC>FD?FD?EC>EC>CAFD?FD?GE@HF@HF@IGAHFAIGBKICKICKIDKICLJDMKEMKEMKENLFOMGPNHQOIRPJSQKTRLVTNWUOWUNWUNXVPXVOXVOYWPZXQ\ZR][S^\T^\T_]Ua_Xb`YcaYcaYcaYfc[gd\hf^ig_mjbljbnkbolcolcqndrofrofspftqgtqgurhspgspgtqhuriwtjyvlzwmzwm{xn{xn|yo|yo{xm|yo}zp}zp~{q~{p|qlia[VHvvxwvwwwxxyyyyyyxxxxxzzxxyyyyyz|{{{{}}}{{||||}~~~~}|{||}}}{||||{{{}||{|{|}|{{{zxxxxxxyywwxvvwwvwwwvwuu[VG|yo{xnzwn{xozwnzwnzwnzwnyvmzwnyvmwtkurispgspgspgrofrofqneqneqnepmepmepmdolcnkbnkbmjakh_hf^ge]fd\he]gd\fc[daYb_Wa^Va^V`]U][T\ZSZXPZXQYWPZXPYWOXVNVTNTRKSQJSQKSQKSQKRPJQOIPNGPNHPNHOMGNLFMKDLJDMKEMKELJDLJDKICJHBXVPֿ~{r?=8@>9A?:A?:B@;A@;A@;CADC>FD?GE@HFAKICKIDKICJHCMKENLFOMGQOIRPJQOIRPJSQJTRKUSMUSLVTNWUNXVOYWP[YR\ZS][S^\T`^Wa_Xa_WcaYfc[fd\ge]hf^ig_jh`nkcnkcnkcolcolcpmdroespgtqhuritqhuriurhurhvsiwtjwtixukxukyvlzwmxulwtkwtkwtkxulyvmyvm{xo~{q}smjb[VHsstsrtsuuutttttttttttuuuuvvvvwyyxxxxxxxxxxzzzzyzzyyyyyzzzyyzyxxyxxyyyxyyxxxyyxxxxxxxxywwwwvvwttttttttuttuuttuttuuttuuuuss[VH|s}zq{xo|yp{xo{xo{xozwn|ynyvmvsjwtkvsjwtkwtkurispgspgrofrofqneolcnkcnkcmjbkh`kh`hf^fd\ec[caYb_Wb`Xa^V`]U_]U^\T][S][S\ZS[YRZXQZXPXVOWUNVTMTRKTRLTRKSQKRPJQOIQOIQOIPNHOMGOMGMKFMKEKICJHCJHCIGBJHBJHBIGAHFAGE@EC>SQK洆zCAEC>FD?GE@HFAGE@IGBLJENLFOMGOMGOMGPNGQOHRPISQKSQKUSMUSMVTNWUOXVPYWQZXR[YS[YS[YQ\ZR^\T_]U`^V`^Va_Wa_Wb`Xec[fd\ec[fd\ge]he]if^kh`kh`kh`kh`jg_liaoldnkcmjbmjbmjboldoldoldpmeqnfpmeqnfrogspgtqhtqhvsjvsjvsjvsjvsjvsjwtkwtjxukfc[ZUG}yn}yn}yn}yn}yn}yn}zo~zo{p|q|q|q|q|q|q|q|q{p|q{p|q|q~{q~{p~{p~{q|q|q|q|q|q|q|q|q}r|q|q|q|q|q|q|q}r}r}r}r|q}r}r}r}q}q}q}q~stt~r~r}q~rtut~s~r~r}q}r|q|q|q|q}r}r|q|q}r}r}r}r}p}p}p|p|p}p~q}q}q}p~q}q}p|p}r}r|p|p|p|p|q}q|p|q|q|p|q|q{p{p|q|q{p{p{p~zn~zn~zo}ym}ym[VG{xnzwmzwmzwmxulxulxulwtkxulxulwtkwtkvsjvsjvsjtqhspgrofqneqnerofpmenkcmjbliakh`jg_hf^fd\ec[fc[ebZebZdaYc`X_]U^\T][S][S\ZS[YRZXQYWPWUMVTMUSLTRKSQJRPIQOIOMGNLGOMGOMGMKFLJDLJDKICKICIGBHFAGE@FD?FD?FD?FD?ED?DC>CB=RPJ}`~{r?=8@>9@>9@>9A?:@>9@>9A?:A?:B@;DB=DB=DBCB=CB=ED?GE@FE@IGBKICLJDLJDMKENLEOMFPNGPNGQOHRPIRPISQKUSKVTMYWPXVNXVNYWOZXP^\T_]U_]U][S][S`]Ub`Xec[ec[fd\fd\fd\ge]hf^hf^ig_kiakiamjboldnkcnkbpmeqnfrogqnfrogspguriwtkyvm{xn|yo}zp{xozwn|yp}zqif^[VGyujzvkyvk{wl{wl|xm|xm}yn}yn}yn}ym}ym~zm}ym}ym}ym~zm{m{n{o|q|p|p|p}p}p~qr~p}p~q~q~p~pssrrtsssuttttstutssstttsssssssrrq~q~q~qqq~q~q~q}p}p}p}p|p|p|p|p|p}q}q|p}p}p}q|p|p|p{o{n}ym}ym}ym}ym}yn}yn}yn}yn}yn|yn|xmzvkzvkyvkyujyujxukwtjvshvsjvsjwtjxujwtiwtiwshZUFrofrogqnfpmdolcolcoldnkcoldpmepmepmenkcnkcnkckh`jg_lialialjbljbjh`ig_ge]fd\fd\fd\caYb`Ya_W`^W_]V_]V^\U[YQYWPXVOWUNWUNVTMUSLUSLUSMTRKSQKSQKSQKRPJQOIPNHNLFLJEMKEMKELJDLJDKIDKICKICJHBIG@JHBHF@HF@HF@ED?ED?DC>EC>SQK875~FD?GE@HFAHF@IGAHF?HF@IGAIGAJHAKIBLJDMKENLEOMGOMGOMGOMGPNGQOHRPISQKSQKTRLTRLTRKVTMXVPYWQZXR[YSZXQYWPZXQ\ZR][S^\T][S][S`^Vb`YcaYdbZcaYfc[he]he]if^jg_if^if^jg_kh`kh`kh`kh`mjbnkcli`mjaoldpmepmeqnfpmerogsphsphsphsphtqhtqhtqhurivsivsjwtkuriuridbZZUGtqgtqgtqgspespetqgtqgtqfurgurgurgvshvrgvrgvshvshvrgvrgvshwtiwtixukwtjwtiwtiyujyvkzvkzvkyuizvkyujyujyujyujzvkyvkzvjzvj{wk{wk{wk|xm|xm|xl|xl|xl}yn}yn|xl|xl}yn|xl{wk|xm{wl{wl{wk{wk{wk{wlzwlzwl{wl{wl{wlzvkzvkzvkyujyujyujyvkyujwtivshxujxujxujxukxukxujyujyujyujyujyujzvkyvkxujzvkyujyujyujyujwtjwtjxtivshvshurgurgurgvrgurgurgvrgvrgvrgtqgtqgtqgtqgtqgtqgtqgtqgtqgtqgtpetpeZUFrofqnepmdqnfpmepmepmepmenkcnkcmjbnkcmjblialialiakh`liajg_if^jg_if^if^he]gd\ec[fd\ec[b`Xa_Wa_W`^Vb_W`^V_]U^\T^\T][S][S\ZS[YRZXQXVNWUMVTMVTMTRKTRLSQKQOHPNHNLGOMGOMGNLFNLFMKELJDLJDKICJHBJHCJHBJHBJHBIGAIGAHF@FD?TRK~FD?GE@HFAIGAJHBIGBIGBJHCJHCKICLJDLJDMKENLEOMFPNGPNHOMFQOISQJTRKTRLTRKUSLUSLVTLWUNXVOYWQXVOZXQ[YR]ZR^[S`^Va_WcaYcaYfc[ec[fd\jg_lialiamjbmjbnkcnkbolcpmdqnespgspgtqhuriurixulyvmxulxulxulyvm{xozwnxulzwmzwm{xn|yo|yo{xm{xn|yo}zp~{q~{q|r}s~tnkb[VHvrfvrfwshwsgwsgwshwshwsgxthwshwsgwsgxtgxtgxtgxtgxtgxtgxthyujyuizvjzvjyuiyui{wk{wk|xj|xj|xj{wj{wj|xj|xk|xl|xl|xl|xl|xl}yl|xk|xk|xl|xl~zl~zl~zl~zm{n~zn{n{m{n}o}o|p{n{m{m~zm~zl}yl}yl|xl|xk|xk|xk|xk|xk|xk|xk|xk|xk|xk|xl|xl|xl|xk|xj{wk{wk{wj{wj{wj{wkzvkzvizvizvjzvjyujyujyujxtgxtgxtgxthxtgxtgwsgwsgwsgwshvrguqfuqftpetpespetpetpespespetpetpespespespesodtpetpeZUGspgspgspgspgsphrogoldnkcnkcnkcnkcnkcmjblialiakh`jg_jg_kh`lialiaig_ig_hf^fd\he]he\he]ec[dbZcaYb`XcaYa_W`]U][S]ZR\ZR\ZR[YQZXPYWOYWPXVOWUNWUNVTMUSLSQKQOHQOIPNGPNGPNGOMFOMGOMGNLFMKFLJDJHCJHCIGBIGBIGBHFAHFAGE@FD?SQKJHCKIDMKEMKENLFNLFNLFOMGNLFOMGPNHPNHQOIRPISQJTRKSQJSQJUSLUSMVTNVTMVTMWUNXVOYWPZXPZXQ[YR\ZS^\T_]U`^Va_Wb`XcaYdbZdbZfc[gd\he]jg_kh`liamjbmjbnkcnkbpmdpmdqneqnepmdqndqnerofspgtqhtqgurhrofspgtqhuritqhuriurivsjvsjurivsjvsjvsjwtkwtkwtkxulwtkxulhe][VHqncqncpmbpmbpmbqncpmbqmbqncqncqncqncsodsodsodsodsodsodspetpeuqfuqfuqfvrevrewshwsgxtgxtgxtgxthxthxthxthxthxthyuiyuiyui{wi{wizvizvizvi{wi{wi{wi|xj|xj|xj}xj}xj|xj|xj|xj|xk|xk}yk|xj|xj|xj|xk|xl|xl}yk}yk}yk}yl}ym}yl}yl}yl}ym}yl}ym|xj|xj}xj|xj|xj}xj|wi|xj|wi{wi{wiyuhxtgxthxthyuhyuhyuiyuiyuiyuixthxthxthxtixtiwshwshxtfxtgxtgxtfxtfwsfvreuqeuqfuqfuqfuqftpetpesodsodsodsod[VG|yo{xnzwmzwnyvmzwnxulwtkwtkwtkvsjwtkvsjspgspgrofqneqneolcnkbolcnkbmjali`kh_jg_jg_hf^fd\dbZcaYb_Wb_W_]U^\UZXQYWPYWPZXQYWPYWQXVPWUOUSLSQKTRLSQKRPJQOIQOIPNGOMGOMGNLGMKFLJELJDKICKICJHAJHBJHCIGBIGBIGBHFAHFAGE@FD?TRK$|s?>9A?:CAEC>GE@GE@GE@IGBKICLJDMKENLFOMGPNGPNHPNHQOISQKTRKUSMVTMWUNXVNYWOZXQ[YSZXQ[YR\ZS][T^\U^\T_]Va_WdaYebZgd\he]if^jg_kh`kh_liankbnkbolcpmdpmdqnerofroerofrofrofspgurhurhvsixukxulyvlxujzwm{xn{xn|yo{xm{xn|yo{xo}zp~{q~{p}snkb[VHrnbrnbsocsobsobsocsodsocsocsobtpcsoctpctpctpdtpdtpctpctpdtpdtpdtpdtpdtpdtpduqfuqfvrevrevrevreuqeuqfuqevrfwsfxtgxtfxtfxtgxtfxtfxtgxtgxtgxtfxtgxtgxtgxtgyugyugyugxtgxtgyuhyuhyugyugyugyugxtgxtgxtgxtgyugyugxtgxtgxtfxtfxtfxtgxtgwsgxthwsfwsfwsfvrfuqeuqeuqevreuqfuqftpdtpdtpdtpdtpctpctpdtpctpcsocsocsobtpcsodsocsocsocsocsodsocsobsobsoctpbtpbtpbsocsocsodrncrncrnbrncqmbqmb[VH~{r|yp{xo{xoyvmyvmxulwtkwtkwtkvsjvsjvsjtqhspgrofqnepmdnkbnkcljbliakh_jg^if]he\he\gd\ebZdaYa_Wb_Wb`Xb`X`^V^\T]ZR[YQ[YQ[YQZXPZXQYWPXVOWUNWUNVTMVTMUSLTRKSQJRPJRPJSQKRPJPNHOMGMKELJDKICJHCKICIGBIGAHF?HF@HF@FD?EC>RPIiV||}~~Ŀd_Qd_Qd_Qc_Qc_Qd_Qc_Qc_Qc_Qc_Qc^Pc^Pc_Qc_Qc_Qd_Qc_Qd_Qd_Qd_Qd_Qd_Qd_Qd_Qd_Qd_Qd_Qd_Qd_Qd_Qd_Qd_Qd_Qd_Qd_Qd_Qd_Qd_Qd_Qd_Qd_Qd_Qd_Qd_Qd_Qe`Re`Re`Rd`Rd`Rd`Rd`Rd`Re`Re`Rd`Rd`Rd`Re`Re`Re`Re`Re`Re`Rd`Rd`Rd`Re`Rd_Qd_Qd_Qd_Qd_Qd_Qd_Qd_Qd_Qd_Qd_Qd_Qc_Qc_Qc_Qd_Qd_Qc_Qc_Qc_Qc_Qc_Qc_Qc_Qc_Qc^Pc^Pc^Pc^Pc^Pc^Pc^Pb^Pb^Pb^Pc^Pc^Pc^Pc^Pc^Pc^Pc^Pb]Ob]Ob]Oc^Pb]Ob]Ob]Ob]Ob]Ob^Pc^Pb^Pc^PA6promoe-0.1.1/data/Almond-blue/Eq_Ex.bmp000066400000000000000000001325301134030477200175700ustar00rootroot00000000000000BMX6(8" LJCKJEKIDKIDJHCIGAHF@HF@GE? FE@GFAFE@CB>FD>FD?CA6A?8@>8><7 ><4@>8?=7?=7><7 MKFMKFMKCNLFNLDOMGOMGNLFLJD KICIHCKICLJCKIC FD=FD=EC;EC;DB8 @>8>=8=<7><7?=7?>9 IG?IG?IG?JHBHF>GE=FD LIAKH@IG?IG@GE?FDDC>EC=EC=DB:BA=CAFD>FD?CA6A?8@>8><7 ><4xx@>8?=7?=7ww><7 MKFMKFMKCNLFNLDOMGOMGNLFLJD KIC~IHCKICLJCKIC FD=FD=EC;EC;DB8 @>8>=8=<7wwx><7?=7?>9 IG?IG?IG?JHBHF>GE=FD LIAKH@IG?IG@GE?FDDC>EC=EC=DB:BA=CA:?>9?>:@?;@?:A@;@?:@?;@?;B@;B@;BACB>CB>EC>CB=CB>CB>CB>DC?CB>CB>CB>DC?DB=BA=BA=BAB@;@?;@?:A@;A@;A@;A@;A?:B@;A@;BADB=BAA@CB>CA9>=8=<7>=8>=9?=8@?;A?9@?:@?:B@:A?9?>9?>9?>9?>9?=5><4?=7=;5=;5=;5><6><6><6><6><6><6;:5=;5=;5><6><6=;3=;5<:5<:2><6=;3><6><6?=8@>8?>9@>8?=7?>9@>9@>8@>8?>9A?:A?:A?9@?;A?9?=8?=8?=8A?9?=8=<7?=7?=8@>7@>9@>9@>8A?8>=8><7A?9@>7><7@>7><7?=8=;6@>8@>9@>7=;6=;6><5?=8@>9?=8?=8@>9><7><5=;6><7?=8?=6?=6?=8=<7=<7=<7=<7><7@>9?>9@?:A?:@>9@>9A?:?=8?=6?=8><7><7><7><7?=7=<7><7>=8?=8?>9@>8>=9<;6;:5<:5;:5=;5<:4:94:94:94;93;94:9498387287287276165065065054075065065064/43.43.43.32-21,32-42-21,42-31,21.10+21-31,10+10,10,20+31,@>9}zqA@;B@;CA9ECFD>EC>GE?HF>HF@HF>IGAIGAIG@IG?KIBLJCLJBLJBNKCMKDOLDQNFQOGQOGSPGTQHURIVSKWTKXULXULYVM\YO]ZQ]ZQ]ZP\YO_\R`]Rb_Uc`Ub_Uc`VebXfcXfcXgdYgdYheZif[jg_gd\gdYheZheZheZkg\kg\lh]mi^mi^mi^mi^ok`plaok`olbrnbsn`pmcpmcok_pl`pl`qmaqmapl`pmcqmarnbqmaqmarnbqmaqmasodsodtpetpetpetpetpeuqfvrftpewshxtixtiyuj{wlzvkwtiwtktqivshwshwshyujyujxujwtlwtivsjvshwtiwtiwtlvshurgvshvshwtjwtjwtjxujzwmzwm{xm{xm{xm{xm|yn|yn|yn{xp{yq~{q~{q|yq|yq|yn}zr}zr{xmyvkwtlxujxujvsjxujyvkyvkwtiwtivshvsktqfspesodrofqncnkbmjaolcqmbolaqncrofrpiqnesodsodqmbqneqneqneqnerofrncrncolbli_olbkiajg]if\kh^jh`ge]jg]ieYif\if\ig_kiali_lh]mi]li`if]if]kg\kg\if]he\jg^kh_hf_gd[ebYgcXdaXb_Vc`Ub_Wa^V_\T_\T^[R]ZR[XMZWL[XM[XNZWOYWOYVLXUKWTJUSKTRJTRJUSKTRJSQIPNGSPGROFNLDOMEOMFPNGPNGNKCOLDNLENLENKCNKCLJBKIBKICKICJHBIGAIGAHF@GE?GE?FD>DB;DB;CA:CA:CA:CA9CA9CA:B@9JH@zwn?>9@>9B@9CAHF?IG@IG?KH@LIALJCLJCMKDOMEPNGPNFPNGSPGTQHRPHVSJVTLXVNYWOZWM]ZR^\T_\T`]Ra^Sb_Tc`XdaYdaYebYfcZfcZfcZgd[gd[fcXfcXfcXtpdxxz{xplankbqohqohmkdmkdli`if]hf_he]ge^ge^ge^ec\caZcaZb_W`]U_\T_]V]ZR\YQ\ZT[XPYWO[YRYWQXVPWUOVTLWUOWUMVTLTRKTRKSQISQIQOHRPIQOHQOHPNIOMFNLEMKDKIBMKELJCKJEKIDKIDJHCIGAHF@HF@GE?FE@FE@GFAFE@CB>FD>FD?CAFD?FD?EC=FD>FD>GE?JHBJHBIHCJIDJHAKIALJCNLGPNHQOHQOHQOHRPKQOHSQJUSLVTMVTMXVOYWPZXP[YQ][U][T`^X^\T_]U_]U^\W^\T_]Wa_Yc`XebZgd\he]hf_ljcjhahf_he]hf`heZheZgd[ec\caZebYdaX{xnٿuu~u~s«b^Sa]R`]T`]T_\S^[Ra]R`]T^[P]ZO[XO[XO[XO[XO]ZQ\YNYVN[XP\YQ[XM[XMYVLXUKWTJUSKTRJSPFSPFQNDPNFPMENLDNKBNKCMJAKH@JG>IF=HF?IF=HF>JG?IF>FD=EC6A?8@>8><7?=5><4xx@>8?=7?=7ww><7=;6DB<vsi=<7@>8A?9A?9B@:@?;A?9A@;A@;CA;CA;CA;B@9A?7CA;DB:ECHF?JG?IG@JG?JHAKH@IG@JH@LI@LJBOMEPMDQOGTQGUSMVTNVSHWTLVSHWTKURJURGTQFTQIJH@ٿrpi«ʩljcljcljcljcif^gd[fbWebYfcZfd]c`Xa^V`]U`]R`]U_\R^[Q[YSZXRVTLVTMUSLSQLSQLQOJRPIQNFNLEMKDOMFMKFMKFMKCNLFNLDOMGOMGNLFLJDLJDKIC~IHCKICLJCKICIG@RPJ{xoA?9B@;CB>CACB>CB=CB=CB=ECFDJG?IF>HE=GE>FD=FD=FD=FD=EC;EC;DB8><7@>8>=8=<7wwx><7?=7?>9?=7FD<{xo?>9CA;CAEC=BAGE?GFAGFAIGBIGBJHCJHCJHAKICLJEMLGOMHPNIOMHONISQJRPISQJSQIUSKUSNXVPZXP[XP\ZT\ZR_]W`]Ub_Wb_Wdb[fd]fc[fd]fd]fcZYVLٿ~~kib«©`]T`]T`]T_]V^[S]ZQ^ZO\YPXUJXUJYVKYVLYVLXUKVSKWTLWTIURHUSMSQISQISQINLDMKDLJELJCMJBLIAJHBKH@KH@JHAIG?IG?IG?JHBHF>GE=FDLKFvsi<;6=<7?=7A?9A?:A?9B@:CA9CA9DB:EC;EC=EC=HF@GE=HF>KICJH@KIBKIBLJCNLFPNGPNGQOHTQIRPISQJSQJTQHURIXUKYVL[XP\YO]ZP`]U`]Sa^Sb_Tb_T`]Rb_TgdYgdYfcXfcZZWM}tqf˗ljcnkbli`li`he\gd\gd\fc[gdYgd\fc[he]fc[ebYdaYa^V`^X\ZR\YQ[XPZWOXVNXVNPNGNLENLFJHCJHAKIDKIBKICKIDJHBJHAJHB}|}}}|{EC;EC;DB:zzCA:B@8@?;yy=;6><6DB:{yrA@;CADB=CA;DBFD=NLD~uFD=GE@HFAHFAIGAHF@HF@JHAJHAKIBKIAIGBKIBJH@IGAIG?JH@JH@KIBLJBNLFMKCOLDQNFROGQNFRPIROFSPHSPGTQHTQHVSJTQHVSJXUKZWN[YQ[XOZWO[XP]ZR^[Q_\T`]U`]Ua^Va^Vb_T`]Ua^Vb_Wa^Sb_Tc`Ub_T`]Ua^UeaVMJBA?7<:4<:4<:3<:3<:3;94=;5;94<:4<:4=;5=;5<:5:83<:3=;5<:3=;4=;6=;4><6=;4=;4><6><5?=6><5><5><7><7?=6><7><6=;6=;6><5?=6><7A?7CA;B@;B@;@?;@?;@?;B@;B@;CA;CAFD>FD>EC;EC;FD>FDGE>GE>GE?FDFD>FD>FD7@>7?=8@>9@>8?=8@>8@>8@>7?=8?=7?=7><7A?9@>7@>7@>7daXRPHFD<5=;4=;4;94<:4;93:81;93;93:81:81;92;92;92;92;93:83:81[XNeaVfbWebXgcXeaVfbWeaVc`Wa^U_\T\YP]ZQ]ZQ^[R^[R^[R_\S^[R]ZQ]ZQ\YQ[XP[XPZWMYVLYWO[XP[XNZWMVTLVTLXUKXUKXULUSKVTLTRJUSKTRJSQJROFQOHPNGNLGMKDNKCLJCMJBLIAKH@IG?IG@GE?FDDC>EC=EC=DB:BA=CAEC=NLFyuj?=6@>8?>9A?:B@:A?:A?9@>6A?9A?7B@8B@:CA;DBHE=HE=IF>KH@MJBMJANLEOMEQNEROFRPHURIWUMXVNYWO[XP[XO]ZP_\R`]Ra^T`]S`]Ub_Tc`VdaWdaVdaVebXfcZfc[heZjg_jhakibli`mjapmdqneqnespguriuriuriurivtmzwnyvmyvmyvmyvm{xo}yn~zo~|u}zq|s}t~{r~|u~|u}v}v~uwx}~~}}~~}|{{{z|w}v}w{yr{yr}zq|yp}{t{xo{yr{yr{xoyvmxvovtmvtmwtjurhsocolcnldnkapmcnkbmjali`li`kh^jg]if\he[he[ieYif\hdXfcYebXd`TebXeaUdaWfbVgdZfcZgd[gd[ebYfd]ec[ebXebXgd[gd[fcZfd]fd]daXc`Wc`Wb_Vc`Wb_W_]W^\Ub`Ya^V`]U`]U`]R^[S][T^[Q^[S[XP[XP[XNWUMWUMYVLYVLXVNVTLRPHRPHSQISQJSQJRPHQOHQOHPMEOLDNLENLEMKDNKCLJBLJDKIBKIBJHAHGBIGAHGBJHBIGBKICJHBJHBHF@FE@GE=FD>FD>EC=DB=MKEz}}~}}}|{{~~~}~~~~}}}y|yu}yn20+21-32-32-43/43054054054064/763762762762761872:94874761761872983:94:95;:6;:5;:5:94:94;:7;:7;:7<;7=;6<;6?>:?>9?>:@?;@?:A@;@?:@?;@?;B@;B@;BACB>CB>EC>CB=CB>CB>CB>DC?CB>CB>CB>DC?DB=BA=BA=BAB@;@?;@?:A@;A@;A@;A@;A?:B@;A@;BADB=BAA@CB>CA9>=8=<7>=8>=9?=8@?;A?9@?:@?:B@:A?9?>9?>9?>9?>9?=5><4?=7=;5=;5=;5><6><6><6><6><6><6;:5=;5=;5><6><6=;3=;5<:5<:2><6=;3><6><6?=8@>8?>9@>8?=7?>9@>9@>8@>8?>9A?:A?:A?9@?;A?9?=8?=8?=8A?9?=8=<7?=7?=8@>7@>9@>9@>8A?8>=8><7A?9@>7><7@>7><7?=8=;6@>8@>9@>7=;6=;6><5?=8@>9?=8?=8@>9><7><5=;6><7?=8?=6?=6?=8=<7=<7=<7=<7><7@>9?>9@?:A?:@>9@>9A?:?=8?=6?=8><7><7><7><7?=7=<7><7>=8?=8?>9@>8>=9<;6;:5<:5;:5=;5<:4:94:94:94;93;94:9498387287287276165065065054075065065064/43.43.43.32-21,32-42-21,42-31,21.10+21-31,10+10,10,20+31,@>9}zqA@;B@;CA9ECFD>EC>GE?HF>HF@HF>IGAIGAIG@IG?KIBLJCLJBLJBNKCMKDOLDQNFQOGQOGSPGTQHURIVSKWTKXULXULYVM\YO]ZQ]ZQ]ZP\YO_\R`]Rb_Uc`Ub_Uc`VebXfcXfcXgdYgdYheZif[jg_gd\gdYheZheZheZkg\kg\lh]mi^mi^mi^mi^ok`plaok`olbrnbsn`pmcpmcok_pl`pl`qmaqmapl`pmcqmarnbqmaqmarnbqmaqmasodsodtpetpetpetpetpeuqfvrftpewshxtixtiyuj{wlzvkwtiwtktqivshwshwshyujyujxujwtlwtivsjvshwtiwtiwtlvshurgvshvshwtjwtjwtjxujzwmzwm{xm{xm{xm{xm|yn|yn|yn{xp{yq~{q~{q|yq|yq|yn}zr}zr{xmyvkwtlxujxujvsjxujyvkyvkwtiwtivshvsktqfspesodrofqncnkbmjaolcqmbolaqncrofrpiqnesodsodqmbqneqneqneqnerofrncrncolbli_olbkiajg]if\kh^jh`ge]jg]ieYif\if\ig_kiali_lh]mi]li`if]if]kg\kg\if]he\jg^kh_hf_gd[ebYgcXdaXb_Vc`Ub_Wa^V_\T_\T^[R]ZR[XMZWL[XM[XNZWOYWOYVLXUKWTJUSKTRJTRJUSKTRJSQIPNGSPGROFNLDOMEOMFPNGPNGNKCOLDNLENLENKCNKCLJBKIBKICKICJHBIGAIGAHF@GE?GE?FD>DB;DB;CA:CA:CA:CA9CA9CA:B@9JH@zwn?>9@>9B@9CAHF?IG@IG?KH@LIALJCLJCMKDOMEPNGPNFPNGSPGTQHRPHVSJVTLXVNYWOZWM]ZR^\T_\T`]Ra^Sb_Tc`XdaYdaYebYfcZfcZfcZgd[gd[fcXfcXfcXtpdxxz{xplankbqohqohmkdmkdli`if]hf_he]ge^ge^ge^ec\caZcaZb_W`]U_\T_]V]ZR\YQ\ZT[XPYWO[YRYWQXVPWUOVTLWUOWUMVTLTRKTRKSQISQIQOHRPIQOHQOHPNIOMFNLEMKDKIBMKELJCKJEKIDKIDJHCIGAHF@HF@GE?FE@FE@GFAFE@CB>FD>FD?CAFD?FD?EC=FD>FD>GE?JHBJHBIHCJIDJHAKIALJCNLGPNHQOHQOHQOHRPKQOHSQJUSLVTMVTMXVOYWPZXP[YQ][U][T`^X^\T_]U_]U^\W^\T_]Wa_Yc`XebZgd\he]hf_ljcjhahf_he]hf`heZheZgd[ec\caZebYdaX{xnjñ{ò|ij}ƵƵǶƶǷʺʻ˼˼̽;ο–—ÙěŜƞǟǠȡɣʤ˦̧̨ͩΫϬЮѰѱҲӳԵշֹ׺׻ؽؼپڿ®uu~u~sƿڿپؼؽ׻׺ֹշԵӳҲѱѰЮϬΫͩʤɣȡǠǟƞŜěٗ–ο;̽˼˼ʻʺub^Sa]R`]T`]T_\S^[Ra]R`]T^[P]ZO[XO[XO[XO[XO]ZQ\YNYVN[XP\YQ[XM[XMYVLXUKWTJUSKTRJSPFSPFQNDPNFPMENLDNKBNKCMJAKH@JG>IF=HF?IF=HF>JG?IF>FD=EC6A?8@>8><7?=5><4xx@>8?=7?=7ww><7=;6DB<vsi=<7@>8A?9A?9B@:@?;A?9A@;A@;CA;CA;CA;B@9A?7CA;DB:ECHF?JG?IG@JG?JHAKH@IG@JH@LI@LJBOMEPMDQOGTQGUSMVTNVSHWTLVSHWTKURJURGTQFTQIJH@jñ{ò|ij}ƵƵǶƶǷʺʻ˼˼̽;ο–—ÙěŜƞǟǠȡɣʤ˦̧̨ͩΫϬЮѰѱҲӳԵշֹ׺׻ؽؼپڿ®rpiƿڿپؼؽ׻׺ֹշԵӳҲѱѰЮϬΫͩʻʤɣȡǠǟƞŜěٗ–ο;̽˼˼ʻʺuljcljcljcljcif^gd[fbWebYfcZfd]c`Xa^V`]U`]R`]U_\R^[Q[YSZXRVTLVTMUSLSQLSQLQOJRPIQNFNLEMKDOMFMKFMKFMKCNLFNLDOMGOMGNLFLJDLJDKIC~IHCKICLJCKICIG@RPJ{xoA?9B@;CB>CACB>CB=CB=CB=ECFDJG?IF>HE=GE>FD=FD=FD=FD=EC;EC;DB8><7@>8>=8=<7wwx><7?=7?>9?=7FD<{xo?>9CA;CAEC=BAGE?GFAGFAIGBIGBJHCJHCJHAKICLJEMLGOMHPNIOMHONISQJRPISQJSQIUSKUSNXVPZXP[XP\ZT\ZR_]W`]Ub_Wb_Wdb[fd]fc[fd]fd]fcZYVLjñ{ò|ij}ƵƵǶƶǷʺʻ˼˼̽;ο–—ÙěŜƞǟǠȡɣʤ˦̧̨ͩΫϬЮѰѱҲӳԵշֹ׺׻ؽؼپڿ®~~kibƿڿپؼؽ׻׺ֹշԵӳҲѱѰЮϬΫͩ»ʤɣȡǠǟƞŜěٗ–ο;̽˼˼ʻʺu`]T`]T`]T_]V^[S]ZQ^ZO\YPXUJXUJYVKYVLYVLXUKVSKWTLWTIURHUSMSQISQISQINLDMKDLJELJCMJBLIAJHBKH@KH@JHAIG?IG?IG?JHBHF>GE=FDLKFvsi<;6=<7?=7A?9A?:A?9B@:CA9CA9DB:EC;EC=EC=HF@GE=HF>KICJH@KIBKIBLJCNLFPNGPNGQOHTQIRPISQJSQJTQHURIXUKYVL[XP\YO]ZP`]U`]Sa^Sb_Tb_T`]Rb_TgdYgdYfcXfcZZWM^kllpqrtuxyz{}~úºûûļļŽƾǿƿ¯®ïŲƴƴǵƵǵȷɸɸɺɺʺ˽˽̾˾̾̿̿̿̾˾̾˽˽ʺɺɺɸɸȷǵƵǵƴƴŲïtqfǿƾŽļļûûºú˧~}{zyxhljcnkbli`li`he\gd\gd\fc[gdYgd\fc[he]fc[ebYdaYa^V`^X\ZR\YQ[XPZWOXVNXVNPNGNLENLFJHCJHAKIDKIBKICKIDJHBJHAJHB}|}}}|{EC;EC;DB:zzCA:B@8@?;yy=;6><6DB:{yrA@;CADB=CA;DBFD=NLD~uFD=GE@HFAHFAIGAHF@HF@JHAJHAKIBKIAIGBKIBJH@IGAIG?JH@JH@KIBLJBNLFMKCOLDQNFROGQNFRPIROFSPHSPGTQHTQHVSJTQHVSJXUKZWN[YQ[XOZWO[XP]ZR^[Q_\T`]U`]Ua^Va^Vb_T`]Ua^Vb_Wa^Sb_Tc`Ub_T`]Ua^UeaVMJBA?7<:4<:4<:3<:3<:3;94=;5;94<:4<:4=;5=;5<:5:83<:3=;5<:3=;4=;6=;4><6=;4=;4><6><5?=6><5><5><7><7?=6><7><6=;6=;6><5?=6><7A?7CA;B@;B@;@?;@?;@?;B@;B@;CA;CAFD>FD>EC;EC;FD>FDGE>GE>GE?FDFD>FD>FD7@>7?=8@>9@>8?=8@>8@>8@>7?=8?=7?=7><7A?9@>7@>7@>7daXRPHFD<5=;4=;4;94<:4;93:81;93;93:81:81;92;92;92;92;93:83:81[XNeaVfbWebXgcXeaVfbWeaVc`Wa^U_\T\YP]ZQ]ZQ^[R^[R^[R_\S^[R]ZQ]ZQ\YQ[XP[XPZWMYVLYWO[XP[XNZWMVTLVTLXUKXUKXULUSKVTLTRJUSKTRJSQJROFQOHPNGNLGMKDNKCLJCMJBLIAKH@IG?IG@GE?FDDC>EC=EC=DB:BA=CAEC=NLFyuj?=6@>8?>9A?:B@:A?:A?9@>6A?9A?7B@8B@:CA;DBHE=HE=IF>KH@MJBMJANLEOMEQNEROFRPHURIWUMXVNYWO[XP[XO]ZP_\R`]Ra^T`]S`]Ub_Tc`VdaWdaVdaVebXfcZfc[heZjg_jhakibli`mjapmdqneqnespguriuriuriurivtmzwnyvmyvmyvmyvm{xo}yn~zo~|u}zq|s}t~{r~|u~|u}v}v~uwx}~~}}~~}|{{{z|w}v}w{yr{yr}zq|yp}{t{xo{yr{yr{xoyvmxvovtmvtmwtjurhsocolcnldnkapmcnkbmjali`li`kh^jg]if\he[he[ieYif\hdXfcYebXd`TebXeaUdaWfbVgdZfcZgd[gd[ebYfd]ec[ebXebXgd[gd[fcZfd]fd]daXc`Wc`Wb_Vc`Wb_W_]W^\Ub`Ya^V`]U`]U`]R^[S][T^[Q^[S[XP[XP[XNWUMWUMYVLYVLXVNVTLRPHRPHSQISQJSQJRPHQOHQOHPMEOLDNLENLEMKDNKCLJBLJDKIBKIBJHAHGBIGAHGBJHBIGBKICJHBJHBHF@FE@GE=FD>FD>EC=DB=MKEz}}~}}}|{{~~~}~~~~}}}y|yupromoe-0.1.1/data/Almond-blue/Main.bmp000066400000000000000000002735461134030477200174700ustar00rootroot00000000000000BMfw6(t0w  zzx,,*,,+--+--+--+--+--,..,..,..,/.,/.,//-//-//-0/-00.00.00.10.11/11/21/21/220220320331331320431442442542652653653763764764764874985985985986:96:96;:7;:7;:7;:7;:7;:6<;8<;8<;8<;7<;7=<9=<9=<9=<8=<8=<8>=:>=:>=9>=9>=9?>;?>;?>;?>:?>:?>:@?;@?;@?;@?;@?;@?;@?;A@=A@BA=BA=BA=BA=CB>CB>CB>CB>CB>CB>CB>DC>DC>DC>DC>DC?DC?FE@FE@FEAGFBGFBGFBGFBGFAGFAGFAHGBHGBHGBHGBHGCHGCHGCHGBHGBHGBHGBHGBHGCHGCHGCHGBHGBHGBHGBIHCIHCIHCHGBHGBHGBHGBHGCHGCHGCHGBHGBHGBHGBHGBGFBHGCHGCHGBHGBIHCIHCIHCHGBHGBHGCGFBGFBGFBGFBGFAGFAFEAFEAFE@FE@FE@FE@EDADC?DC?CB>CB>CB>CB>BA=BA=BA=BA=BA>BA=BA=A@:?>:?>:?>;?>;?>;>=9>=9>=9>=:>=:=<8=<8=<8=<9=<9=<9<;7<;7<;8<;8<;8;:6;:7;:7;:7;:7;:7:96:9698698598598587476476476476365365365254244244243132033133132022022021/21/11/11/10.00.00.00.0/-//-//-//-/.,/.,..,..,..,--,--+--+--+--+,,+,,*===qpm%$&% '&!'&!('"('")(#+)$+)$,*%-+&-+&.,'/-(0.)20*31+31+42,53-64.75/86/970:81;92<:3=;4><5?=5@>6A?7B@8DA9FC;GDJG?KH@LIANKBPMCQNDROESPFTQGURHWTJWTJXUKYVLYVLZWL\XM\XM]YN^ZO^ZO_[P`\Q`\Qa]Rb^Sb^Sc_Tc_Td`UeaVeaVfbWgcXgcXhdWieXieXjfYjfYkgZlh[lh[mi\mi\nj]ok^ok^pl_pl_qm`rnarnatpbtpbuqcuqcwrdwrdxsexseytfzugzug{vh{vh|wi|wi}xj}xj~yk~yk~ykzlzl{l{l|m|m}n}n}n~p~p~pqqrrrsssttttuuuttttsssrrrqq~p~p~p}n}n}n|m|m{l{lzlzl~yk~yk~yk}xj}xj|wi|wi{vh{vhzugzugytfxsexsewrdwrduqcuqctpbtpbrnarnaqm`pl_pl_ok^ok^nj]mi\mi\lh[lh[kgZjfYjfYieXieXhdWgcXgcXfbWeaVeaVd`Uc_Tc_Tb^Sb^Sa]R`\Q`\Q_[P^ZO^ZO]YN\XM\XMZWLYVLYVLXUKWTJWTJURHTQGSPFROEQNDPMCNKBLIAKH@JG?IF>HE=GD6?=5><5=;4<:3;92:8197086/75/64.53-42,31+31+20*0.)/-(.,'-+&-+&,*%+)$+)$)(#('"('"'&!'&!&% %$BB@qpm%$&% '&!'&!('"('")(#+)$+)$,*%-+&-+&.,'/-(0.)20*31+31+42,53-64.75/86/970:81;92<:3=;4><5?=5@>6A?7B@8DA9FC;GDJG?KH@LIANKBPMCQNDROESPFTQGURHWTJWTJXUKYVLYVLZWL\XM\XM]YN^ZO^ZO_[P`\Q`\Qa]Rb^Sb^Sc_Tc_Td`UeaVeaVfbWgcXgcXhdWieXieXjfYjfYkgZlh[lh[mi\mi\nj]ok^ok^pl_pl_qm`rnarnatpbtpbuqcuqcwrdwrdxsexseytfzugzug{vh{vh|wi|wi}xj}xj~yk~yk~ykzlzl{l{l|m|m}n}n}n~p~p~pqqrrrsssttttuuuttttsssrrrqq~p~p~p}n}n}n|m|m{l{lzlzl~yk~yk~yk}xj}xj|wi|wi{vh{vhzugzugytfxsexsewrdwrduqcuqctpbtpbrnarnaqm`pl_pl_ok^ok^nj]mi\mi\lh[lh[kgZjfYjfYieXieXhdWgcXgcXfbWeaVeaVd`Uc_Tc_Tb^Sb^Sa]R`\Q`\Q_[P^ZO^ZO]YN\XM\XMZWLYVLYVLXUKWTJWTJURHTQGSPFROEQNDPMCNKBLIAKH@JG?IF>HE=GD6?=5><5=;4<:3;92:8197086/75/64.53-42,31+31+20*0.)/-(.,'-+&-+&,*%+)$+)$)(#('"('"'&!'&!&% %$BB@qpm%$&% '&!'&!('"('")(#+)$+)$,*%-+&-+&.,'/-(0.)20*31+31+42,53-64.75/86/970:81;92<:3=;4><5?=5@>6A?7B@8DA9FC;GDJG?KH@LIANKBPMCQNDROESPFTQGURHWTJWTJXUKYVLYVLZWL\XM\XM]YN^ZO^ZO_[P`\Q`\Qa]Rb^Sb^Sc_Tc_Td`UeaVeaVfbWgcXgcXhdWieXieXjfYjfYkgZlh[lh[mi\mi\nj]ok^ok^pl_pl_qm`rnarnatpbtpbuqcuqcwrdwrdxsexseytfzugzug{vh{vh|wi|wi}xj}xj~yk~yk~ykzlzl{l{l|m|m}n}n}n~p~p~pqqrrrsssttttuuuttttsssrrrqq~p~p~p}n}n}n|m|m{l{lzlzl~yk~yk~yk}xj}xj|wi|wi{vh{vhzugzugytfxsexsewrdwrduqcuqctpbtpbrnarnaqm`pl_pl_ok^ok^nj]mi\mi\lh[lh[kgZjfYjfYieXieXhdWgcXgcXfbWeaVeaVd`Uc_Tc_Tb^Sb^Sa]R`\Q`\Q_[P^ZO^ZO]YN\XM\XMZWLYVLYVLXUKWTJWTJURHTQGSPFROEQNDPMCNKBLIAKH@JG?IF>HE=GD6?=5><5=;4<:3;92:8197086/75/64.53-42,31+31+20*0.)/-(.,'-+&-+&,*%+)$+)$)(#('"('"'&!'&!&% %$BB@qpm%$&% '&!'&!('"('")(#,*%64,@=3HD9MI=PL?QM@QM@SOASOASOASOASOARNARNARNATPBTPBTPBTPBSOBSOBSOBUQCUQCUQCUQCTPCVRDVRDVRDVRDVRDVRDWSEWSEWSEWSEWSEWSEXSEXTFXTFXTFXTFXTFXTFYTFYTFYTFZUGZUGYUGYUGYUGYUGYUGYUGZUGZUGZUG[VH[VHZVHZVHZVHZVH[VH[VH[VH[VH[VH\WI\WI\WI\WI[WI[WI[WI\WI\WI\WI]XJ]XJ]XJ]XJ]XJ]XJ]XJ]XJ]XJ]XJ]XJ]XJ]XJ^YK^YK^YK^YK^YK^YK^YK^YK^YK^YK^YK^YK^YK^YK^YK^YK^YK^YK_ZL_ZL_ZL_ZL_ZL_ZL_ZL_ZL_ZL_ZL_ZL_ZL_ZL_ZL_ZL_ZL_ZL_ZL_ZL_ZL_ZL_ZL_ZL_ZL_ZL_ZL_ZL_ZL_ZL_ZL_ZL_ZL_ZL^YK^YK^YK^YK^YK^YK^YK^YK^YK^YKslWxsba^SRPJVSJRPKKIDKIDKIDLJEKIDIHCKIDKIDKIDIHCJHCJHCJHCHFAHFAGE@GE@GE@GE@GE@GE@GE@GE@FD?FD?EC>EC>FD?FD?EC>A@;B@;B@;@?:?>9?>9?>9>=8?>9?>9?>9=<7<;6<;6<;6;:5;:5:94983983872983983983983:94:9598376187387376176276254/54/54043/43/43/21,21,21,21-21-10+21-32.21-21-21-21.10,10,0/+0/+0/+/.*/.*/.*/.*/.*0/+10+75/75-20(+)!('"('"'&!'&!&% %$BB@qpm%$&% '&!'&!('")(#86.PL?A>420(&$  ! ! ! "! $#(&!(&!('"('"('")(#)(#)(#*(#*)$*)$*)$*)$+*%+*%+*%+*%,+&,+&-+&-,'-,'.,'.,'/-'/-(/-(/-(/-(/.)0.)0.)20*20*20+20+20+20+20+31+31+42,42,42,42,53-53-53-53-53-64.64.75.75.75/75/75/64/64/86/86/86/86/970970970971971971972972:82:82:82:81:81:81;92;92;92;92;93;93;93;92;92;92;92:81:81:81:82:82:8297297297197197197097097086/86/86/86/64/64/IF;zwlwtkvsjpmevsjurisphsphqnfpmdnkbmjamjali`li`kh_li`kh_jg^jg_jg_if]if^jg_jh`kiajh`ig_ig_kh`kh`ig_ge]ge]fd\ec[dbZcaYcaYb`Xa_W`^V_]V_]U_]U^\T^\U_]V^\U^\U\ZS\ZT\ZTZXQXVOXVOWUNUSLUSLTRKSQKTRLSQKRPJQOIPNHPNHNLFLJEJHCIGBJHCIGBHFAGE@FD?DB=CA=8<;6<;6;:5:9498476254032-21,10+/.)/.*.-).-)-,(,+'+*'*)&*)%.-)0/+10,/.)20+1/))''&!'&!&% %$BB@qpm%$&% '&!'&!1/)OK>:7.'%    ! "!"!"!#"#">>>WWWdddlllssssssllldddWWW>>>$#*)$*)$*)$+*%,*%,*%-+&,+&,+&,+&,+&.,'.,'.,'.-(.-(.-(0.(0.)0.)1/*1/*1/*1/*1/*20*20*20+31,31,31,31,42-53-53-53.53.53.53.53.53.75/75/75/75/75/860860750750971971971971971972972:81:81:82:82;93;93;93;93;93;93;94;94<:4<:4<:4<:4<:4<:4=;5=;5=;5=;5><5><5><5=;5=;5=;5=;5<:4<:4<:4<:4<:4<:4;94;94;93;93;93;93;93;93:82:82:81:81972972sxulwtkwtkvsjvsjuritqhrogqnfpmeoldpmenkcmjamjbnkcoldpmdoldpmeoldmjbmjbmjbnkcmjblialiakiakialiakiakh`jh`jg_ge]fd\gd\fd\ec[ec[caYa_Wa_W`^W`^W_]V^\U^\U][T\ZTZXQYWQXVOYWPXVOWUNXVPWUOUSMTRLRPJRPJPNHOMGNLFLJELJDJHBIGAHFAED?DC>CB=A@;?>9@>9?=8><7<;6;:5:9598487276165054/54043/32.21-10-10,0/+/.+.-)-,(,+(,+(+*'*)&+*'/.+10,86020('&!&% %$BB@qpm%$&% '&!53+FB7-+%    ! "!"!#"$#$#$#%$!%$!UUTkkjkkk^^]VVUPPPNNMNNMPPPUUT^^]kkkkkjTTT,+&,+&-,'-,'-,'.-(.-(.-(.-(.-(0.)/.)/.)1/*1/*1/*20*20+20+42,42,31,42-42-53-53-42-64.64.64/64/64/75/75/860860750750861861971971971:82:82:82:82:83:83;93;93;93;93;93<:4<:4=;4=;4=;5=;5=;4=;4=;4=;5=;5=;5><6><6><6><6><6?=7?=7?=7?=7?=7?=7?=7@>8@>8@>8?=7?=7?=7?=7?=7?=7?=7><6><6><6><6><6=;5=;5=;5=;4=;4=;4=;5=;5=;4=;4<:4<:4~uxulxulxulwtkwtkwtkwtkvsjuritqhspgrofroftqisphsphsphtqhtqispgrofrogrogpmepmeoldoldpmdoldoldnkcmjbnkcmjbmjbkh`jg_jg_hf^ge]ge]fd\ec[ec[dbZec[dbZdb[db[b`Xb`Yb`Y`^W^\U^\U][TZXQZXQWUNVTNVTNTRLSQKQOIOMHNLGMKFLJEJHCIGAGE@FD?EC>CB=DB=A@;@?:>=8?=8<;6;:5:9587276165054/54043/32-21,21,10,0/,0/,/.*-,(,+'+*',+(+*'*)&*)&)(%)(%10,86031*&% %$BB@qpm%$&% 53+C@6'&! ! ! "!"!#"#"#"#"$# %$!%$!%$ &%!'&"'&"%$ HHHjjjffeRRRCCB998443000..-..-000332998CCBRRRfffjjjHHH-,(0/*0/*0/*10+10+10+10+10+31,21,21,32-32-32-53-53.53.64/64/64/64/64/75/75/750861861861861972:82:82;93;93:83:83:83:83<:4<:4<:3=;4=;4=;5=;5=;6=;6><6><6><5><5><5?=7?=7@>7@>7@>8@>8@>7@>7@>7@>7@>7@>7A?9A?9A?9A?9A?9B@:B@:B@:B@:B@:B@:B@:CA;CA;CA;B@:B@:B@:B@:B@:B@:B@:A?9A?9A?9A?9A?9@>7@>7@>7@>7@>7@>7@>8@>8@>7@>7?=7?=7zwnyvmyvmyvmwtkwtkvsjtqhrogrogrogqnfoldmjali`kh_kh_kh_kh_kh`kh`if]if^he]gd\gd\fc[ebZebZc`Xc`Xa^V`]Ua^V_]U_]U_\T][S^[S]ZR[YQ[YQZXPYWOYWOXVNYWOXVNWUMWUMVTMTRJTRKSQJSQJTRKSQJRPIQOHPNGOMFOMFNLFNLELJCLJDKICJHBIGAGE?FD>EC=DB=CA9?>9>=8><7=;6:9487276165054/43.32-43/32.21-10,0/+/.*/.+.-*-,),+(+*',+(+*'*)&*)&)(%('$)(%10,<:531)%$BB@qpm%$1/(FC8*(#    ! "!"!"!"!"" #" $# $# %$!%$"&%"&%"&%"&%!'&#('$('$('#)($*)&('$$#QQPqqpVVVBB@331))'##!!! ##!))'331BB@VVUqqpQQP%$0/*42-42-53.43.43.43.43.64/54/54/650650650860861861972972972972972:82:82:83;94;94;94;94<:5=;5=;5=;6=;6=;6=;6=;6=;6?=7?=7?=7?=7?=7@>8@>8?=8?=8A?9A?9A?9A?9A?9A?:A?:B@9B@9B@:B@:CA:CA:CA:CA:CA:CA:DBDB=CA9?=8><7=;6;:598398487376265154043/32.21-10,0/+/.*.-)-,(,+(-,),+(+*'+*')(%)(%)(%)(%21-?=7-*"BB@qpm(&!MI=1/)   ! !!!!"!!  QQPoonNNM775**(!!!!))(775NNMoonQQPxulwtkwtkwtkvsktqirphrphrogqneolcmjamj`kh_jg^jg^kh_jg^if^if^if^he]gd[gd[ebYdaYb`Xa_Wa^V^\T_\T_\T\ZR^[S\ZR\ZR\YQ[YQ[YQ[YQZXP[YQ[YQ[YQ[YRYWOYWOXVNWUMWUMUSKUSLVTLUSKUSLSQJQOHPNGOMFOMFOMFNLFKIBKIBKICJHBHF@GE?GE@FD?EC>DB=CA9>=9=<8<;7;:6:9598487376276265154043/32/21.21.21-21-10,0/+/.+-,(,+(,+(+*')(&*)&)(%('$'&$%$"'Ȝ93BB@qpm75-=:2##!##!##!##!$#!$#!$#!)))LLLeeeooopppnnnmmmnnnnnnnnnmmmmmmmmmmmmlllllllllmmmqqq{{{ܐ21-HHGqqoNMK331%%#%%#331NMKqqoHHG32/ܣzzzpppllllllllllllllllllmmmmmmmmmnnnnnnnnnmmmmmmmmmmmmmmmmmmllllllllllllllllllmmmmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmmmmmmmmmmmmmmmmmmmmmmmmmmmlllllllllllllllmmmmmmmmmmmmmmmmmmnnnnnnnnnmmmmmmmmmlllllllllkkkkkkkkkjjjjjjuuuyvmyvmxulxulwtkwtkwtkwtkvsjwtlvsktqitqisphsphsphsphrogrogrogspgrofoldoldnkcnkcoldnkcljbkh`kh`if^ge]ig_hf^hf^ge]gd\gd\ec[caYcaYa_X_]U][T\ZS\ZS[YR[YR[YRYWPZXRZXRYWQXVOZXRYWQWUNVTMUSLUSMUSMSQKSQKSQJRPJQOIPNIOMHMKGLJFKIEJHDIGCHFBFEAED@DC?BA=@?;>=:=<9;:798576365254143032/21.10-0/,0/+/.*.-)-,(,+(+*'+*')($('$)(%'&"&%"'&#%$"&%#,+(<;6GE?onjMI>/.)'&$'&$''%''%('%('% 777bba```SSSKKKFFEDDCCCBCCBDDCDDCDDCCCBCCBCCBCCBCCCBBABBACCBJJJYYX00.hhgSSS332""!""!332SSShhg331XXXIIICCCBBBBBBBBABBACCBCCBCCBDDCDDCDDCCCBCCBCCBCCBBBABBABBABBABBABBABBABBABBABBACCCCCBCCBCCBCCBCCBCCBCCBDDCDDCDDCDDCDDCDDCDDCDDCDDCDDCDDCDDCDDCDDCDDCDDCDDCDDCDDCDDCDDCDDCDDCDDCDDCCCBCCBCCBCCBCCBCCBCCCBBABBABBABBABBABBABBABBABBABBACCCCCBCCBCCBCCBDDCDDCCCBCCBCCCBBABBBBBBBBBAA@AAA@@?LLKeee~{r|s~t~t}s}s|r|r~{q~{q|yp{xo|yp{xozwnxulzwnxulwtkvsjvsjuriurjurjtqitqirogqnfqnfpmepmepmeoldoldnkcomenldljbljbkiaig_ig_hf_hf_ge^fd]ge^fd]ec\ec\caZa_Wa_W_]U^\T_]V^\U\ZS\ZSZXQXVOWUNUSLTRKRPJPNINLGLJEKIDJHCHFAFE@ED?DC>CB=BA:>=9=<8<;7;:6:95:9598487376265154043/32.21-10,0/+/.*.-).-*-,)+*'+*'*)&)(%)(%'&"&%"'&#%$!%$!$# 761JHAjhaC@7*)'**(**(**(**(+*( FFF^^]LLJ:::220--+(('((&((&''&''&''&''&'''''&''&''&''&''%''%))'220HHFpppSSSbba==<&&%&&%==CB=A@;?>:>=9=<8<;7;:698487376265154043/32.21-10,0/+/.*.-)-,(,+'+*&*)&)(%)($('#'&"'&"&%"%$!%$ $# $# #".-)LJCdaY=;4.-+..,..,..,..,-,*>>>^^\CCA..,##!((&DDByyx###hhgLLK..,..,LLKhhg###yyyCCA&&%""!FFE~{r~{r|yp|yp|yp{xpzwo|yp}zp{xo{xozwo{xo{xo|yq{xpzwnyvmzwoxulxulwtlvsktqhspgsphrogrogsphsqisqirphpngpngnldmjbliaig_ig_hf^hf^ge]fd\ge]fd\ec[ec[dbZcaYb`Xa_W`^V`^V_]V^\U^\U][T\ZS\ZS[YRYWPZXRWUNVTMSQJRPJPNIOMHNLGMKFLJEKIDJHCIGBHFAGE@FD?EC>CB=9<;7;:6:9598487376265154043/32.21-10,0/+/.*.-).-*-,),+(+*'*)&*)&)(%('$('$'&#'&#&%"+*'IGBa^T76111/21/21/2202201/''''``_HHG++*++*KKJbbbeed==<##!##!==DB=DC>CB?BA>A@=@?;>=:=<9<;8;:7:9698587476365254143032/21.10-0/,/.+.-*-,),+(+*'*)&*)&)(%)(%('$('$'&#&%"GE@^ZO764553653653664664 GGG[[Z665110UUTHHH[[[WWV332332WWV[[[HHGTTT110??>tts|ypzwnyvmzwnyvmxulxumyvnyvmyvmxulvskvskurjtqirogqnepmeqnfoldoldnkcljbkh`jh`kiajh`ig_ig_hf^hf^if^hf^hf^ge]ec[dbZb`Xb`Xa_W_]V^\T][S^\U_]U^\T][T[YRZXQZXQZXQXVOXVOXVOXVPWUNUSLTRLTRKTRKSQKSQKQOIPNHPNHOMGNLFMKELJEKIDJHCIGBHFAGE@FD?EC>DB=CA>A@=@?;>=:=<9<;8;:7:9698587476365254143032/21.10-0/,/.+.-*-,),+(+*'*)&)(%('$('$('$%$"&%"#" #"@?:[WK997997:97:97::8::8TTTMML,,*553ZZY///yyxMML,,*,,*MMLyyx///ZZZ553776``^vsjurispgtqhtqhtqhsphsphspgspgrogrofspgrogsphsphqnfpmdpmeoldnldmkcljbmjbkiakiamjbljbljbmjbkh`if^ge]ig_hf^ge]fd\ec[ec[ec[caYa_W`^V`^W`^W_]V_]V_]V^\U^\U][T[YR\ZT[YRZXQZXQYWPYWPZXQXVOVTNUSMRPJQOIOMGNLGMKELJDKICJHBIGAHFAHFAFD?EC>DB=CA9[WK==;==;>=;>=;>><>>< ggfDDC&&$775^^]WWV&&&&&&WWV^^]775**(886@@>hhg~t~t~{r~{r|r}zq{xozwnxumxumwtlurjvskurjtqisphrogqnfrogrogrogqnfoldnkckiakiaig_hf^ig_kh`mjbliaig_jg_he]fd\ec\caZb`Yb`Xa_Wa_X`^W_]V_]V^\T][T\ZS\ZS\ZS[YR[YR[YSYWQYWQYWPYWQYWPZXQYWPWUNWUNUSLTRLSQJSQKRPIQOIPNIOMHOMGMKFKJEJIDIHCHGBGFBFEBEDADC@CB?BA>A@=@?;>=:=<9<;8;:7:9698587476365254143032/21.10-0/,/.+.-*-,),+(+*'+*')(%)(%('$'&#HFA[WKA@>A@>BA?BA?BB@BB@bbbKKK??>>>=>>=>>>??>??>??>??>?????????????????>??>??>??>??>??>HHH\\\|||))())(|||\\[HHG??>??>??>???????????>??>??>??>>>=>>=>>=>>=>>=>>=>>=>>=>>=>>=>>=>>=>>=>>=>>=??>??>??>??>??>??>????????????????????????????????????????????????????????????????????????????????>??>??>??>??>??>>>>>>=>>=>>=>>=>>=>>=>>=>>=>>=>>=>>=>>=>>=>>=>>>??>??>??>?????????AAAMMMaaajjixywv~t~t|r|r~{r~{r{xozwnyvmwtkvsjuritqisphsphqnfpmenkcljbljbkiajh`he]ec[ec[fc[ge]ge]ec[dbZcaYdbZcaYcaYcaYa_Wa_Wa_W`^V_]V_]V^\U^\U[YR\ZR\ZSYWPXVOXVOWUOVTNUSLSQISQJSQJRPIQOHPNGNLFLJCKIBKICKICJHCJHCIGBHFAGE@FD?EC>DB=CA:>=9=<8<;7;:6:9598487376265154043/32.21-10,0/+/.*/.+.-*-,),+(+*'*)&*)&*)&)(%)(%'&#'&#&%"%$!BA<[WKEDBEDBFECFECFFDFFD('$yvmxulwtkxulwtkwtkuriuriuritqhpmenkboldli`li`kh_kh_lialialiamjbliakh`liakiakiaif^he]he]fc[gd\fd\ec[dbZb`Xb`Xb`Yb`XcaYb`X`^Va_WcaYb`Xa_W^\U^\U][T\ZR\ZR[YRZXQZXRWUNWUNVTMSQIRPISQKQOHOMFQOHOMFNLENLFLJEKIDJHCJHCIGBHFAGE@FD?EC>DC>CB=BA:>=9=<8<;7;:6:9598487376265154043/32.21-10,0/+/.*.-*-,),+(+*(+*'*)&*)&)(%('$'&#&%"'&#%$"&%"DC>[WKIHFIHFJIGJIGJJHJJH,,,,,,GE@uvvv~u~t}t}t~{r~{q{xozwnyvmwtkurjsphsphrogrogpmeoldnkcmjbmjbkiakiaig_hf^hf^hf^hf^if^ge]fd\ec[ec[dbZb`Xb`X`^W_]V_]V_]V_]U_]U][T\ZS[YR[YR\ZRZXQYWPYWPWUNXVPXVPWUOUSLVTNTRKSQKSQKRPJPNHOMGNLGMKFLJDKIDJHCIGBHFAGE@FD?EC>DB=CABA=A@<@?;?>:>=9=<8<;7;:6:9598487376265154043/32.21-10,0/+/.*/.*/.+.-*.-*-,),+(,+(+*'+*'('%'&$JHC[WKLLJLLJMLJMLJMMKMMKDDDDDDhhhqoh{{xoyvmwtkwtkvsjwtkvsjurispgspgrogqnfoldmjamjakh_kh_jg^kh_jg^jg^jg_jg_if^he]if^if^he]gd\fc[fc[caYb_W`^V_]U_]U`]U][S][S\ZR\ZR\ZR][S][T^\U^\T^\T\ZS[YR[YR[YRZXRZXRYWPYWPYWPXVOVTNVTMUSMSQKTRLTRLSQKRPJQOJQOIPNHOMGMKFLJEKIDJHCIGBHFAGE@FD?EC>DB>CA=B@:=<8<;7;:6:9598487376265154043/43/32.32.21.10-/.*0/,/.+-,)-,)+*&*)&*)&('$('$'&#&%"EC>[WKPOMPOMQPNQPNQQOQQO___ {{{{{{ ___IHD|r|ypzwnyvmzwnzwoyvmxumxumwtlxumwtlurjspgrogsphrogrogqnfrogrogrogpmenkcoldoldoldmkcljbnkcmjbkiaif^fd\fd\dbZdbZcaYa_X`^V_]U^\T^\T][S\ZR\ZR[YR[YR[YRZXQYWPXVOVTLVTLUSLSQJSQJRPHPNGPNGPNGNLFNLFMKELJDKICKIBJHAIGAHF@GE?EC=CA;B@:A?9@>8?=8><7=<7>=8<;7:9598487376265154043/32.21-10,0/+/.*.-).-(-,'-,(,+'+*&*)%*)&)(%('#)(%('$'&#'&#&%"%$"&%"$# A?:[WKSRPSRPTSQTSQTTRTTR  FEBwumx}zq|yp{xozwnzwnxulwtkvsjvsjvsjvsjvskurjtqirogrofqnfqnepmdpmdnkcnkcmkcljbmjbkiakiajh`hf^he]ge]ge]fd\ec[ec[dbZdbZdbZcaYcaYb`Xa_Wa_W`^W_]U_]U^\U_]V][S\ZR\ZS[YR[YR[YRZXQXVPXVPWUNWUNWUNVTNUSMUSMTRLRPJQOIPNHNLFLJDKICJHBIGAHF@FE?ED>DC=CB:=<8<;7<;7;:6:9598476265154043/32.21-10,0/+0/+/.*.-)-,(,+(*)%*)&)(%('$('#'&#&%"&%"$#!%$!$# "!A?:[WKVVTVVTWVTWVTWWUWWUʺ::::::áPPNhe]|yourhrofrofurhrofrofqneqndolcpmdpmdqnfrogrofspgrofrogrogrogqnfqnfpmepmeoldpmerogpmenkcmjbljbljbkiamjbmjbkiakiajh`liakh`jg_jg_if^ge]he]ec[dbZdbZcaYdbZcaYb`Xb`X`^V`^V`^W_]V^\T_]V_]V_]W_]W][T[YR[YRZXRYWQXVPWUOVTNUSMUSMSQKQOJPNIOMHNLGLJEJHCHFAFD?DC>CB=A@;>=:=<9<;8;:7:9698587476365254143032/21.10-0/,/.+.-).-*-,),+(,+(+*')(%)(%)(%('$'&#&%"DC>[WKYYWYYWZYWZYWZZXZZX~~~ uuuķuuu ~~~a`\nkcy~t}zq|yp|yp{xoyvmxulwtkwtkvsjvsjtqhspgpmenkbnkbnkcoldnkcli`jg^jg^kh`jg^if^he]gd\fc[fcZdaXb_Wb_Wb_Wa^V_\T^[S^[S[YQ[YQ\YQZXPZXPYWOYWOYWOXVNWUMWUMWUMWUMVTLUSKUSKTRJSQITRKTRJSQIRPIQOHPNGPNGPNGOMFOMFNLFMKEMKDLJELJDJHCIGBGE@GE@FD?ED?ED?DC>EC>DC?CB>BA=A@<@?;?>:>=9=<8<;7;:6:9598487376265154043/32.21-10,0/+0/+/.*.-)-,(,+',+'+*'*)&*)&('$)(%('$'&#HFA[WK\[Y\[Y]\Z]\Z]][]][QQQsssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssslllKKKüïKKKlllsssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssspppkjhge`dbZsphyvmzwnzwn|yp}zp~{q|yp|yp{xoxulxulvskurjuriuritqisphspgrogrofpmepmepmepmeoldpmeoldljbmkcmjbnkcoldnkcnkcmjbmjbliaig_kh`jh`liaig_ig_ig_ig_ig_ig_hf_ge]ge^fd]ec[dbZcaYcaYa_W`^V`^W_]V^\T`^W`^W_]W_]W^\V\ZU[YRXVPWUOVTNTRKSQJSQKQOIPNHOMGNLFMKELJDKICJHBIGAHF@GE?FD>EC=DB9?=8?=8?=8?=8A?9A?9@>8@>9@>9?=8@>8@>8@>8@>8@>8@>8@>8A?9A?9A?9A?:A?:A?9@>9@>9A?:B@:B@;B@;CA;CAEC=DB8=<7<;6:9487265054/43.32-21-10,0/+/.*.-)-,(,+(,+(+*'*)&*)&)(%('$('$&%#'&#&%"&%"EC>kh_#"$# %$!%$!&%"&%"'&#('$('$)($*)%*)&+*&,+'-,(/.*/.*/.*0/+21-32.32.32-43.651761984:95:94;:5<;6?=8?>9@?:BAED?HF@GE@IGAJHCJHBKIDMKENLFPNHQOISQKSQKUSMUSLUSLWUOXVPXVPXVOZXRZXQ[YR][T^\U_]V_]V`^Wa_W`^Wb`Xb`Yb`YdbZfd\fd\fd\hf^ge]ge]ge]ge]hf^hf^ig_hf^if^kiamjbljbkh`nkcnkcmjbnkcpmdpmeoldoldoldqnfrofspgspgspgvsjvsjxulxulxulxulyvmzwnyvmzwnyvmyvmxulyvmxukyvlyvlyvlyvlyvlyvlyvlyvlzwm{xn{xn|yo}zp{xn|yn|yn{xm|yn}zp}zo}zp}zp~{q~{q~{r~{r~{r|s}t~u}t|s|s~{r~{r|s}t}t}t|s|s~{r~{q|yp|ypzwnyvmyvmxulvsjuriwtkwtkwtkwtlwtlvskvskvskurjurjtqiuritqhuritqitqirofqnfrogrofqnfpmenkcnkcmjbmjbliakh`kiajh`jg_if^ge]hf^if^fd\ec[caYb`Xb`X`^W`^W_]V^\U][T\ZSZXQZXQYWQXVPWUNVTMVTNVTNUSMTRLTRLRPJRPJQOIPNHOMGOMGMKEKICJHCIGBHFAGE@FD?EC>DB=CA9?=8=;6;:598387376265154043/43/32.21-21-10,0/+/.*.-*-,)-,)+*'*)&)(%('$'&#'&#'&#%$"$#!%$!BA<vsk&%"'&#('$('$)(%)(%*)&+*'*)&*)&+*'+*',+'-,(.-)/.*0/,10-21.32.541652651762873984:95;:5<;6>=8A?:B@;BAGE@FE@IGBJHCJHCKIDJIDMKFOMGPNIQOJRPJSQKTRKVTMVTMWUOXVPXVPXVPXVPXVPYWPZXRZXR[YS[YRZXQ[YR\ZS[YR[YQ[YR][S][S][S_]U`^Vb`Ydb[caZdb[ec\dbZfd]ge]gd\he]he]he]he]if^kh`kh`jg_kh`kh`kh_liamjbli`mjamjankbnkbpmerogspgvsjvsjuritqhtqhrofspgspgspgurhspgwtjwtkxukwtjxukxukxukyvlzwn{xo}zq}zq~{r|s|s~u~u~uvvvvwwxxyxxxyzyz{zzyyyyyyyzyxvxvuu~t~t~t~t|r|r~{q~{q{xozwnzwnzwn{xoyvm{xp{xp{xpyvnyvnwumuskuskurjvsktqisphtqirphsqiqogomeoldljbljbkialialiaig_ge^he]dbZb`Xb`Xa_W`^W_]V^\U^\U[YRZXRZXRYWQWUNVTMUSMSQJSQJTRLTRLSQKQOIPNHOMGNLGMKFMKEKIDIGBIGAHF@GE@FD?EC>DB=A?:?=8@>9><7;:5:9498387276154/54043/21,10+10,/.).-).-)-,(-,(,+',+(+*'+*'*)&)(%)(%('$'&#'&#&%"&%"%$!$# B@;wtk&%"'&#('$('$)(%)(%)(%*)&*)&+*',+(,+(-,(.-)/.*0/+10,10,21-32.43/43.54/762873984:94;:5;:5<;6?=8@>9@?:B@;BADC>CB=CA9>=8>=8<;6;:5;:5:94:9498387276265065154043/43/32.10,0/+/.*.-*.-).-*-,)-,),+(+*'*)%)(%)(%('$'&#GE@qnf$# %$!&%"&%"%$"'&#('$('#)(%*)&+*(,+(,+'-,(.-)/.*0/+0/,10,21-32.32.43/540651761872872983:94;:5<;6><7?=8A?:B@;CAGE@JHBLJDLJELJDLJEMKDMKDNLEPNGPNGPNGSQJSQJSQITRKTRKUSLVTLVTLWUMZXQZXQ[YR\ZS][T^\U^\U`^Wa_Wa_Wb`XcaYcaYdbZec[ec[hf^ig_ig_kh`kiankcnkcoldqnfspgtqhtqhurivsjvsjxulxulyvmyvm{xo{xo{xozwn}zq~{q~{q|r|r}s~tuuvuuvvwxzy|}}~~}~~~}{{yxxwvv}t|t~{r}zq}zq}zqzwnyvmwtkwtkxulzwnyvmxulwtkwtkwtkvsjwtkuriuriuriuritqhspgspgrogrofoldqnepmdnkcmjbliakh`jg_if^he]he]gd\fc[fc[daYc`Xb_Wa^V`^Vb_Wb`Xa_W`^V`^V_]U^\T_]V^\U][T\ZR\ZS\ZSZXQZXQZXQYWPZXQ[YRZXQYWPYWPXVOXVPXVPVTNTRLUSMSQKRPJRPJQOIPNHNLFLJDJHCJHCIGBHFAED?EC>BA<@?:?>9>=8><7;:5;:5;:6:9598487376176254054043/32.10,21-10,0/+/.*.-)-,)-,)+*'*)&*)&)(%('$('$'&#'&#&%"$#!CB=zwn{xo|ypzwnyvmxukyvl{xn|yp|yp|yp|yp|yp|yp}zq|s~{r~{r}t~uvvuxzyyyy{{{|{|}|}~~~~~~~}||||{{z{yxx~u|s|s~{r~{r}zq{xoD67(1(1)1)1)3*2(2)5)6)7)7)7*7)7)7)7)7)7)7)7)7)8)8+8+8+8+9+9+9+9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9+9+9+9+8+8+8)8)8)7)7)7)7)7)7)7)7*7)7)7)7)6)5)2(3*3)1)1)1(1(66D7ݰ'ƞ$$$$$$$$$›%›%›$›$›$Ü$Ü$ĝ$ĝ$ĝ$ĝ$ƞ$ƞ$ƞ$ƞ$ƞ$ǟ$ǟ$ǟ$ɡ%ɡ%ɡ%ɡ%ˢ%ˢ%ˢ%ˢ%ˢ%ˢ%̣%̣%̣%̣%̣%̣%̣%̣%̣%Τ%Τ%Τ%Τ%Τ%Τ%Τ%Τ%Τ%Τ%Τ%Τ%Τ%Ц%Ц%Ц%Ц%Ц%Ц%Ц%Ц%Ц%Ц%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%Ц%Ц%Ц%Ц%Ц%Ц%Ц%Ц%Ц%Ц%Τ%Τ%Τ%Τ%Τ%Τ%Τ%Τ%Τ%Τ%Τ%Τ%̣%̣%̣%̣%̣%̣%̣%̣%̣%ˢ%ˢ%ˢ%ˢ%ˢ%ˢ%ˢ%ɡ%ɡ%ɡ%ǟ$ǟ$ǟ$ƞ$ƞ$ƞ$ƞ$ƞ$ƞ$ĝ$ĝ$ĝ$Ü$Ü$Ü$›$›$›%›%›%$$$$$$$$ƞ$ݰ'71Ü$ŝ$!# #!#!#!#"# $!$!"!#!$!$ $ $!$!›$!›$"›$"›$"›$"›$"›$"›$"Ü$"Ü$"ŝ$"ŝ$"ŝ$"ŝ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ŝ$"ŝ$"ŝ$"Ü$"Ü$"Ü$"›$"›$"›$"›$"›$"›$!›$!›$!$!$ $!$!$!#!"!# #!$~ $!#!#!# "!ŝ$Ü$1ޱ'"zqqqqqrrrsssuuuvronoopppqqqqqqqqqqqrrrrsssssuuuuuuuuvvvvvvvwwwwwwwwwwyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyywwwwwwwwwwvvvvvvvuuuuuuuuussssrrrrqqqqqqqqqqqqppoooonnnmmljlprrqqqqqqz#ޱ')"#n!n!o o!p!q!q!r!ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccl!o n!n!m#")٭'"ujjjjjjmmmmmnnnojcmppqqqqrrrrrsssuuuuvvvvvvwwwwwx x x x x x x x x x x z z z z z z z z z z zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz z z z z z z z z z z x x x x x x x x x x wwwwwvvvvvvuuuussssrrrrrqqqpppoooonnmicgmmjjjjjjs"٭'("!{d ~f g!g!g!i i j!c{g g!i!i!j j l l l mmn n n n!o!o!o!o!o!p!p!p!p!p!q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q!p!p!p!p!p!o!o!o!o!o n n n mmm l l l j i!i!g!g g g!g!~f~ v`c{d!g!~f ~f {d!!(ѧ% mv`v`ybybybybzczczc{d{d~f~f~f~fzccs]v`v`v`v`v`v`v`ybybybybzczczczc{d{d{d{d{d{d{d}e}e}e}e}e}e}e~f~f~f~f~f~fggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg~f~f~f~f~f~f}e}e}e}e}e}e}e{d{d{d{d{d{dzczczczcybybybybv`v`v`v`v`v`v`v`t^t^r]r]r]r]q\q\cv`zczcybybybv`v`v`l ѧ%(!!q\y r]zt^zt^zv`zv`|v`} yb{cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccct^zt^zt^y r]y q\!!(ˢ%~ {dkWlXlXlXoZoZoZoZp[p[p[q\q\q\q\r]r]r]t^t^t^t^v`v`v`v`v`v`v`v`v`ybybybybybzczczczczczczczc{d{d{d{d{d{d{d{d~f~f~f~f~f~f~f~f~f~f~f~f~f~f~fgggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg~f~f~f~f~f~f~f~f~f~f~f~f~f~f~f{d{d{d{d{d{d{d{dzczczczczczczczcybybybybybv`v`v`v`v`v`v`v`v`v`t^t^t^r]r]r]r]q\q\q\p[p[p[oZoZoZoZlXlXlXkWkW{d~ ʡ%߲'yzfSqhUqhUqiVriVrkWskWukWukWulXuoZvoZvq\wq\wq\y q\y q\y q\ys]ys]ys]ys]yv`zv`zv`zv`zv`zv`zv`zv`zv`zv`zv`zv`|v`|v`|v`|v`|v`|v`|v`|v`|v`|v`|v`|v`|v`|v`|v`|v`|v`|v`|v`|v`|v`|v`|v`|v`|v`|v`|v`|v`|v`|v`|v`|v`|v`|v`|v`|v`|v`|v`|v`|v`|v`|v`|v`|v`|v`|v`|v`|v`|v`|v`|v`|v`|v`|v`|v`|v`|v`|v`|v`|v`|v`|v`|v`|v`|v`|v`|v`zv`zv`zv`zv`zv`zv`zv`zv`zv`zv`zv`zv`ys]ys]ys]ys]yq\y q\y q\y q\wq\woZvoZvlXulXukWukWskWsiVriVriVqhUqfSqfSzy߲'Ü$up[aOaOaOaOcQcQcQcQdRdRdReSeSeSfSgTgTgTgTiViViVjWjWjWjWjWkWkWkWkWkWkWkWlXlXlXlXlXlXoZoZoZoZoZoZoZoZoZoZoZoZp[p[p[p[p[p[p[p[p[p[p[p[p[p[p[q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[oZoZoZoZoZoZoZoZoZoZoZlXlXlXlXlXlXkWkWkWkWkWkWkWjWjWjWjWjWiViViVgTgTgTgTfSeSeSeSdRdRdRcQcQcQcQaOaOaOaOaOp[uÜ$٭'rrZJh\Lh]Li]Li]Lk_Nk_Nl_Nl_NnbPnbPndRndRndRpeSpeSpgTqgTqgTqgTqgTqgTqgTqgTqgTqjWqjWqjWqjWqjWqjWqjWqjWqkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrjWqjWqjWqjWqjWqjWqjWqjWqjWqgTqgTqgTqgTqgTqgTqgTqgTqgTpeSpeSndRndRndRnbPnbPl_Nl_Nk_Nk_Nk]Li]Li\LhZJhZJrr٭'$ogTUFUFUFUFUFUFWHWHWHWHWHYIYIYIYIZJZJZJZJZJ]L]L]L]L]L_N_N_N_N_N_N_N_N_N_N_N_N_NaOaOaOaOaOaOaOaOaOaOaOcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRcQaOaOcQdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRcQaOaOcQdRdRdRcQaOaOcQdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRcQcQcQcQcQcQcQcQaO_N_NaOcQcQcQcQcQcQaOaOaOaOaOaOaOaOaOaO_N_N_N_N_N_N_N_N_N_N_N_N_N]L]L]L]L]L]LZJZJZJZJYIYIYIYIYIWHWHWHWHUFUFUFUFUFUFUFgTo$Ц%jlOAxaOAxaPBybPBybPBzcRDzcRD{dTE{dTE}eUF}eUF}eUFgUFgUFgWHhWHhWHhWHhYIhYIhYIhYIhYIhZJhZJhZJhZJhZJhZJhZJi]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]LgTEv`YIi]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]LiYIv`TEg]Li]LgTEv`YIi]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]LhWHu_RD}eZJhZJhZJhZJhZJhYIhYIhYIhYIhYIhWHhWHhWHhWHgUFgUFgUF}eUF}eUF{dTE{dTE{dRDzcRDzcPBybPBybOAxaOAxaOAljЦ%#gYII=I=I=I=I=J=J=J=J=J=L?L?L?L?L?M@M@M@M@N@N@OAOAOAOAOAPBPBPBPBPBPBPBPBPBRDRDRDRDRDRDRDRDRDTETETETETETETETETETETETETETETEUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFRDccRDUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFRDccRDUFUFUFRDccRDUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFTEPBccPBTETETETETETETETETETERDRDRDRDRDRDRDRDRDRDPBPBPBPBPBPBPBPBOAOAOAOAOAOAN@M@M@M@M@M@L?L?L?L?L?J=J=J=J=I=I=I=I=I=I=YIg#̣%zc{dB7mYD9mYD9mYD9mYF:mYF:mYF:p[G;p[G;p[I=q\I=q\I=q\J=s]J=s]J=s]J=u_L?u_L?u_L?u_L?u_L?u_M@u_M@u_M@u_M@u_M@u_M@u_M@u_M@u_M@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@s]ccL?w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`L?ccs]N@w`N@s]ccL?w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`J=ccq\M@u_M@u_M@u_M@u_M@u_M@u_L?u_L?u_L?u_L?u_L?u_L?u_J=s]J=s]J=s]I=q\I=q\I=q\G;p[G;p[G;p[F:mYF:mYF:mYD9mYD9mYB7mYB7{dzcˢ%"v`PB=3=3=3=3=3?4?4?4>4>4B7?4?4?4>4B7B7C8C8C8C8C8C8C8C8C8C8C8C8D9D9D9D9D9D9D9D9D9D9D9D9D9G;G;G;G;G;G;G;G;G;G;G;G;G;G;G;G;I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=D9ccD9I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=D9ccD9I=I=I=D9ccD9I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=C8ccC8G;G;G;G;G;G;G;G;G;G;G;G;G;D9D9D9D9D9D9D9D9D9D9D9D9C8C8C8C8C8C8C8C8C8C8C8C8C8B7B7B7B7B7B7@5>4?4?4?4=3=3=3=3=3=3OAv`"ŝ$q\q\6-cQ7.cQ7.cQ8/eR90eR90_N5,[K7.cQ;1eR;1eR;1eR;1eR;1eR;1fS=3fS=3fS=3fS=3fS=3fS=3hU=3hU=3hU>4hU>4hU>4hU>4hU>4hU>4hU>4hU>4hU>4hU>4hU>4hU>4hU>4hU>4hU>4hU>4hU>4hU>4hU>4hU>4hU>4hU>4hU>4hU>4hU>4hU>4hU>4hU>4jVA6jVA6hUcc>4jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jV>4cchUA6jVA6hUcc>4jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jV=3ccfS>4hU>4hU>4hU>4hU>4hU>4hU>4hU>4hU>4hU>4hU>4hU=3hU=3hU=3hU=3fS=3fS=3fS=3fS;1eR;1eR;1eR90eR90eR90cQ7.cQ7.cQ7.bP6-q\q\ŝ$ kWD90(0(1)3+3+3+3+3+3+4,3+0(ll0(3+5,5,4,4,4,4,4,4,5,5,5,5,5,5,4,4,4,4,4,4,6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.8/;1;1;1;190cc90;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;190cc90;1;1;190cc90;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1:0cc:08/8/8/8/8/8/8/8/8/8/8/8/8/8/8/8/8/8/7.7.7.7.7.7.6-6-6-6-6-6-6-4,4,4,4,4,4,5,4,4,4,4,4,4,4,3+3+3+3+3+3+1)0(0(0(D9kW #iVjV,%XH,%XH,%XH-&YI-&YI,%llllXH0([K-&c-&c0(c0(c0(c1)c1)c1)c1)c1)c1)c1)c1)c1)c1)c1)c1)c1)c3+c3+c4,c4,c4,c4,c4,c4,c4,c4,c4,c4,c4,c4,c4,c4,c4,c4,c4,c4,c4,c4,c4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,^M4,^M4,^M4,^M4,^M4,^M4,^M3+^M3+^M3+^M3+]L1)]L1)]L1)]L1)]L1)]L1)]L0([K0([K0([K0(YI-&YI-&YI-&YI,%XH,%XH,%XH,%jViV# aO:0'!'!'!'!'!'!'!'!'!("'!l'!'!l'!(")#("("(")#)#)#)#)#*#*#*#,%,%,%,%,%,%,%,%,%+$+$+$+$+$+$+$+$+$+$+$,%,%,%,%,%,%,%,%,%-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&,%,%,%,%,%,%,%,%+$+$+$+$+$+$+$+$+$+$+$+$,%,%,%,%,%,%,%,%*#*#*#)#)#)#)#)#)#)#)#)#("("("("("("("("'!'!'!'!'!'!'!'!'!'!:0aO #_N`N  OA  OA" RD" RD" RD  l  N@lOA#RD$c$RD#RD#RD%TE%TE%TE%TE%TE& TE& TE& TE& TE& TE& TE& TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE& TE& TE& TE& TE& TE& TE& TE%TE%TE%TE%TE$RD#RD#RD#RD#RD$RD" RD" RD" RD" RD" RD" OA  OA  `N_N#zZJ0(           l  l                               " " " " " " " " """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " " " " " "                                                0(ZJz#UFXH F: F: H; H; H; l E9lF: H; c I< I< I< I< I< I< I< I< I< I< I< J= J= J= J= J= J= J= J= J= J= J= J= J= J= J= J= J= J= J= J= J= J= J= J= J= J= J= J= J= J= J= J= J= J= J= J= J= J= J= J= J= J= J= J= J= J= J= J= J= J= J= J= J= J= J= J= J= J= J= J= J= J= J= J= J= J= J= J= J= J= J= J= J= J= J= J= J= J= J= J= J= J= J= J= J= J= J= J= J= J= J= J= I< I< I< I< I< I< I< I< I< I< I< I< H; H; H; H; H; H; F: F: F: XHUF#uTE("                                                                                                                                                                                                                                                                           ("TEu"OARD @5 @5 @5 @5 @5lll @5 @5 c @5 @5 A6A6A6A6B6B6B6B6B6B6B6B6 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7B6B6B6B6B6B6B6B6A6A6A6@5 @5 @5 @5 @5 @5 @5 @5 @5 @5 @5 @5 @5 RDOA"rN@"           l  l                                                                                                                                                                                                                                                              # N@r!J=M@:0:0:0:0 :0l8.l8. ;1 c ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 :0 :0 :0 :0 :0:0:0:0M@J=!oG; ll G;oMqhMypVHGEkeQHGEkeQHGEkeQHGEkeQHGEkeQHGE[HGEjdQ[keQIHFkeQIHFIHFkeQIHFkeQIHFkeQIHFkeQIHFkeQIHFkeQIHFkeQIHFkeQIHFkeQIHFkeQIHFkeQIHFkeQIHFkeQIHFkeQIHFkeQIHFkeQIHFkeQIHFkeQIHFkeQIHFkeQIHFkeQIHFkeQIHFkeQIHFkeQIHFkeQIHFkeQIHFkeQIHFkeQIHFkeQIHFkeQIHFkeQIHFkeQIHFkeQIHFkeQIHFkeQIHFkeQIHFkeQIHFkeQIHFkeQIHFkeQIHFkeQIHFkeQIHFkeQIHFkeQIHFkeQIHFkeQIHFkeQIHFkeQIHFkeQIHFkeQIHFkeQIHFkeQIHFkeQIHFkeQIHFjdQIHFjdQIHFjdPIHFkeQIHFjdRIHFkeQIHFjdQIHFkeQIHFkeQIHFkeQIHFkeQIHFkeQIHFkeQIHFkeQIHFkeQIHFkeQIHFkeQIHFkeQIHFkeQIHFkeQIHFjdQIHFjdQIHFkeQIHFjdQIHFjdQIHFjdPIHFkeQIHFkeQIHFkeQIHFkeQIHFkeQIHFkeQIHFkeQIHFkeQIHFkeQIHFkeQIHFkeQIHFkeQIHFkeQIHFkeQIHFkeQIHFkeQIHFkeQIHFkeQIHFkeQIHFkeQIHFkeQIHFkeQIHFkeQIHFkeQIHFkeQIHFkeQIHFkeQIHFkeQIHFkeQIHFkeQIHFkeQIHFkeQIHFkeQIHFkeQIHFkeQIHFkeQIHFkeQHGEkeQHGEkeQHGEkeQHGEkeQHGEkeQHGEkeQHGEkeQ?>EC;cZ=~8PtlR}tZNMKnhWNMKnhWNMKnhWNMKnhWNMKnhWNMKnhWNMKnhWNMKpjWNMKpjWNMKNMKpjWNMKpjWNMKpjWNMKpjWNMKpjWNMKpjWNMKpjWNMKpjWNMKpjWNMKpjWNMKpjWNMKpjWNMKpjWNMKpjWNMKpjWNMKpjWNMKpjWNMKpjWNMKpjWNMKpjWNMKpjWNMKpjWNMKpjWNMKpjWNMKpjWNMKpjWNMKpjWNMKpjWNMKpjWNMKpjWNMKpjWNMKpjWNMKpjWNMKpjWNMKpjWNMKpjWNMKpjWNMKpjWNMKpjWNMKpjWNMKpjWNMKpjWNMKpjWNMKpjWNMKpjWNMKpjWNMKpjWNMKpjWNMKpjWNMKpjWNMKpjWNMKpjWNMKpjWNMKnhWlgVmgVlgWNMKlgWNMKnhWNMKpjWNMKpjWNMKpjWNMKpjWNMKpjWNMKpjWNMKpjWNMKpjWNMKpjWNMKpjWNMKpjWNMKnhWlgVmgVlgWNMKNMKpjWNMKpjWNMKpjWNMKpjWNMKpjWNMKpjWNMKpjWNMKpjWNMKpjWNMKpjWNMKpjWNMKpjWNMKpjWNMKpjWNMKpjWNMKpjWNMKpjWNMKpjWNMKpjWNMKpjWNMKpjWNMKpjWNMKpjWNMKpjWNMKpjWNMKpjWNMKpjWNMKpjWNMKpjWNMKpjWNMKpjWNMKpjWNMKpjWNMKpjWNMKpjWNMKpjWNMKpjWNMKpjWNMKnhWNMKnhWNMKnhWNMKnhWNMKnhWNMKnhWCB@mdGe[>=OvnT^\VQQOQQOQQOQQOQQOQQOQQOQQOQQOQQOQQOQQOQQOQQOQPNQPNQPNQPNQPNQQOQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQQOQQOQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQQOQQOQQOQQOQQOQQOQQOQQOQQOQQOQQOQQOFECJHAe\?;TxpVy`TTRsm\TTRsm\TTRsm\TTRsm\TTRsm\TTRfffTSQuo\TSQuo\TSQTSQuo\TSQuo\TSQuo\TSQuo\TSQuo\TSQuo\TSQuo\TSQuo\TSQuo]TSQuo]TSQuo]TSQuo]TSQuo]TSQuo]TSQuo]TSQuo]TSQuo]TSQuo]TSQuo]TSQuo]TSQuo]TSQuo]TSQuo]TSQuo]TSQuo]TSQuo]TSQuo]TSQuo]TSQuo]TSQuo]TSQuo]TSQuo]TSQuo]TSQuo]TSQuo]TSQuo]TSQuo]TSQuo]TSQuo]TSQuo]TSQuo]TSQuo]TSQuo]TSQuo]TSQuo]TSQuo]TSQuo]TSQuo]TSQuo]TSQuo]TSQuo]TSQuo]TSQuo]TSQsm\TSQsm\rm\TSQTSQTSQTSQTSQsm\TSQuo]TSQuo]TSQuo]TSQuo]TSQuo]TSQuo]TSQuo]TSQuo]TSQuo]TSQuo]TSQuo]TSQsm\TSQsm\TSQsm\TSQTSQsm\TSQuo]TSQuo]TSQuo]TSQuo]TSQuo]TSQuo]TSQuo]TSQuo]TSQuo]TSQuo]TSQuo]TSQuo]TSQuo]TSQuo]TSQuo]TSQuo]TSQuo]TSQuo]TSQuo]TSQuo]TSQuo]TSQuo]TSQuo]TSQuo]TSQuo]TSQuo\TSQuo\TSQuo\TSQuo\TSQuo\TSQuo\TSQuo\TSQuo\TSQuo\TSQuo\TSQuo\TSQuo\TTRsm\TTRsm\TTRsm\TTRsm\TTRsm\TTRsm\HGEofIg^A>TzrYdb\WWUWWUWWUWWUWWUWWUWWUWWUWWUWWUWWUWWUiWWUWVTWVTWVTWVTWVTWWUWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWWUWWUWWUWWUWWUWWUWWUWWUWWUWWUWWUWWUKJHMKDh_C>X{s[~eZZXytcZZXytcZZXytcZZXytcZZXytcZZXxsblwrbZYWysbZYWysbZYWZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWytcytcZYWytcytcZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWytcytcZYWysbysbZYWZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZZXytcZZXytcZZXytcZZXytcZZXytcZZXytcNMKsjNi`DAW}u]jhb]][]][]][]][]][]][]][]][]][]][]][]][n]][]\Z]\Z]\Z]\Z]\Z]][]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]][]][]][]][]][]][]][]][]][]][]][]][PPNQOHjaFA[w_k``^~yh``^~yh``^~yh``^~yh``^~yh``^{vgq{vg`_]~xg`_]~xg`_]`_]~xg`_]~xg`_]~xg`_]~xg`_]~xg`_]~xg`_]~xg`_]~xg`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]~xg`_]~xg`_]~xg`_]~xg`_]~xg`_]~xg`_]~xg`_]~xg`_]~xg`_]~xg`_]~xg`_]~xg``^~yh``^~yh``^~yh``^~yh``^~yh``^~yhSSQvmRlcHCZxaomgccaccaccaccaccaccaccaccaccaccaccatttcb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`ccaccaccaccaccaccaccaccaccaccaccaccaTTRUSLmdHB^{dqffd}mffd}mffd}mffd}mffd}mffd|mfecnfecnfecnfecnfecnfecnfecnfecnfecnfecnfecnfecnfec~nfec~nfec~nfec~nfec~nfec~nfec~nfec~nfec~nfec~nfec~nfec~nfec~nfec~nfec~nfec~nfec~nfec~nfec~nfec~nfec~nfec~nfec~nfec~nfec~nfec~nfec~nfec~nfec~nfec~nfec~nfec~nfec~nfec~nfec~nfec~nfec~nfec~nfec~nfec~nfec~nfec~nfec~nfec~nfec~nfec~nfec~nfec~nfec~nfec~nfec~nfec~nfec~nfec~nfec~nfec~nfec~nfec~nfec~nfec~nfec~nfec~nfec~nfec~nfec~nfec~nfec~nfec~nfec~nfec~nfec~nfec~nfec~nfec~nfec~nfec~nfec~nfec~nfec~nfec~nfec~nfec~nfec~nfec~nfec~nfec~nfec~nfec~nfec~nfec~nfec~nfec~nfec~nfec~nfec~nfec~nfec~nfec~nfecnfecnfecnfecnfecnfecnfecnfecnfecnfecnfecnfecnffd}mffd}mffd}mffd}mffd}mffd}mWWUypVneJF^}ftrmiigiigiigiigiigiigiigiigiigiigiigiigihfihfiigihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfihfiigiigiigiigiigiigiigiigiigiigiigiigZZXYWPofKDcjvlljslljslljslljslljsllj|lljs|tlkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislkislljslljslljslljslljslljs]][}tZqhNHcjzxsoomoomoomoomoomoomoomoomoomoomoom~oomoom~oomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoom__]\ZTsjPF«en|rrpyrrpyrrpyrrpyrrpyrrpyrrpxrrpxrrpxrrpxrrpxrrpxrrpxrrpxrrpxrrpxrrpyrrpyrrpyrrpyrrpyrrpyrrpyrrpyrrpyrrpyrrpyrrpyrrpyrrpyrrpyrrpyrrpyrrpyrrpyrrpyrrpyrrpyrrpyrrpyrrpyrrpyrrpyrrpyrrpyrrpyrrpyrrpyrrpyrrpyrrpyrrpyrrpyrrpyrrpyrrpyrrpyrrpyrrpyrrpyrrpyrrpyrrpyrrpyrrpyrrpyrrpyrrpyrrpyrrpyrrpyrrpyrrpyrrpyrrpyrrpyrrpyrrpyrrpyrrpyrrpyrrpyrrpyrrpyrrpyrrpyrrpyrrpyrrpyrrpyrrpyrrpyrrpyrrpyrrpyrrpyrrpyrrpyrrpyrrpyrrpyrrpyrrpyrrpyrrpyrrpyrrpyrrpyrrpyrrpyrrpyrrpyrrpyrrpyrrpxrrpxrrpxrrpxrrpxrrpxrrpxrrpxrrpxrrpxrrpxrrpxrrpyrrpyrrpyrrpyrrpyrrpybb`w]skQKep}xuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusddba_YtlRIĮjrxxvxxvxxvxxvxxvxxvxxv~xxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvffd{bumSMju~{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{yiigec]woULůmv}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{kki~expVNmy~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~nnligayqXMƱpzöö찃ppnizrYPq~ĸĸssqljdzrZNɴuŹŹuusl{s[Ttƺƺxxvpnh}u]Qɵxȼȼzzxqw_UxȽȽ||zsqlw_Tʷ{~~|rybWzwupzcU̹~w{dY~zxs|eWλ{}f[|{viYϽ~j]~yj\Ͻl^|m\пoap^qaµr`øscķtbđƻudķucŔȽļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļv«eŹwdŕƿƿƿƿƿƿƿƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƿƿƿƿƿƿƿƿx«fƺye̘½ëzεi͘Ȯļ~зjٰɭ̘upromoe-0.1.1/data/Almond-blue/MonoSter.bmp000066400000000000000000000102701134030477200203310ustar00rootroot00000000000000BM6(: ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 :0 :0 :0 :0 :0:0;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1IHFkeQIHFkeQIHFkeQIHFjdPHGEjdQHGEjdQHGEjdPIHFkeQIHFjdPHGEjdQHGEjdQHGEjdQHGEkeQHGEkeQHGEkeQIHFkeQIHFkeQIHFkeQIHFkeQIHFkeQIHFjdQIHFjdPIHFjdPIHFjdQIHFkeQIHFkeQIHFkeQIHFkeQIHFkeQKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKKIKKIKKIKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHNMKpjWNMKpjWNMKpjWNMKuo\uo\uo\uo\uo\uo\uo\NMKpjWNMKuo\uo\uo\uo\uo\uo\uo\NMKnhWNMKnhWNMKpjWNMKpjWNMKpjWNMKpjWNMKpjWNMKpjWNMKuo\uo\uo\uo\uo\uo\uo\NMKpjWNMKpjWNMKpjWNMKpjWNMKpjWQPNQPNQPNQPNQPNQPNQQOuo\uo\uo\uo\uo\uo\uo\QQOQPNQQOuo\uo\uo\uo\uo\uo\uo\QQOQQOQQOQQOQQOQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNuo\uo\uo\uo\uo\uo\uo\QPNQPNQPNQPNQPNQPNQPNQPNQPNQPNTSQuo\TSQuo\TSQuo\TSQuo\uo\uo\uo\uo\uo\uo\TSQuo\TSQuo\uo\uo\uo\uo\uo\uo\TTRsm\TTRsm\TTRuo]TSQuo]TSQuo]TSQuo]TSQuo]TSQuo]TSQuo\uo\uo\uo\uo\uo\uo\TSQuo]TSQuo]TSQuo]TSQuo]TSQuo]WVTWVTWVTWVTWVTWVTWVTuo\uo\uo\uo\uo\uo\uo\WVTWVTWVTuo\uo\uo\uo\uo\uo\uo\WWUWWUWWUWWUWWUWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTuo\uo\uo\uo\uo\uo\uo\WVTWVTWVTWVTWVTWVTWVTWVTWVTWVTZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZZXytcZZXytcZZXytcZZXytcZZXysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysb]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]][]][]][]][]][]][]][]][]][]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z`_]~xg`_]~xg`_]~xg`_]~xg`_]~xg`_]~xg`_]~xg`_]~xg`_]~xg`_]~xg``^~yh``^~yh``^~yh``^~yh``^zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zicb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`ccaccaccaccaccaccaccaccaccacb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb` ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 :0 :0 :0 :0 :0:0;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1IHFkeQIHFkeQIHFkeQIHFjdPHGEjdQHGEjdQHGEjdPIHFkeQIHFjdPHGEjdQHGEjdQHGEjdQHGEkeQHGEkeQHGEkeQIHFkeQIHFkeQIHFkeQIHFkeQIHFkeQIHFjdQIHFjdPIHFjdPIHFjdQIHFkeQIHFkeQIHFkeQIHFkeQIHFkeQKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKKIKKIKKIKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHNMKpjWNMKpjWNMKpjWNMKNMKpjWNMKNMKnhWNMKnhWNMKpjWNMKpjWNMKpjWNMKpjWNMKpjWNMKpjWNMKNMKpjWNMKpjWNMKpjWNMKpjWNMKpjWQPNQPNQPNQPNQPNQPNQQOQQOQPNQQOQQOQQOQQOQQOQQOQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNQPNTSQuo\TSQuo\TSQuo\TSQTSQuo\TSQTTRsm\TTRsm\TTRuo]TSQuo]TSQuo]TSQuo]TSQuo]TSQuo]TSQTSQuo]TSQuo]TSQuo]TSQuo]TSQuo]WVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWWUWWUWWUWWUWWUWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTWVTZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZZXytcZZXytcZZXytcZZXytcZZXysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysbZYWysb]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]][]][]][]][]][]][]][]][]][]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z]\Z`_]~xg`_]~xg`_]~xg`_]~xg`_]~xg`_]~xg`_]~xg`_]~xg`_]~xg`_]~xg``^~yh``^~yh``^~yh``^~yh``^zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zi`_]zicb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`ccaccaccaccaccaccaccaccaccacb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`cb`promoe-0.1.1/data/Almond-blue/Numbers.bmp000066400000000000000000000102541134030477200202000ustar00rootroot00000000000000BM6(l vsvvslkislkislkislkislkisvvslkilkislkislkislkislkislkilkisvvslkislkislkislkislkisvvslkilkislkislkislkislkislkislkislkislkislkixoomoomxoomoomoomoomoomoomoomoomxxoomoomoomoomoomoomxoomoomoomoomoomoomoomoomxoomoomoomxxoomoomxoomoomoomoomoomoomoomoomxyoomoomyoomoomoomxoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoomoom蠍yrrpyrrpyrrpyrrpyrrpyrrp蠍yrrpyrrpyrrpyrrpyrrpyrrpyrrp蠍yrrpyrrpyrrpyrrpyrrpyrrpyrrp蠍yrrpyrrpyrrpyrrpyrrpyrrp蠍yrrpyrrpyrrpyrrpyrrpyrrp蠍yrrpyrrpyrrpyrrpyrrpyrrpyrrpyrrpyrrpuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuus餑xxvxxvxxvxxvxxvxxv餑xxvxxvxxvxxvxxvxxvxxv餑xxvxxvxxvxxvxxvxxvxxv餑xxvxxvxxvxxvxxvxxv餑xxvxxvxxvxxvxxvxxv餑xxvxxvxxvxxvxxvxxvxxvxxvxxvӿ{{y{{y{{y{{y{{yӿ{{y{{y{{y{{y{{y{{y{{yӿӿ{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{yӿ{{y{{y{{y{{y{{y{{y{{yӿ{{y{{y{{y{{y{{y{{y{{yӿӿ{{y{{y{{y{{y{{yӿ{{y{{y{{y{{y{{y{{y{{yӿӿ{{y{{y{{y{{y{{yӿ{{y{{y{{y{{y{{y{{y{{yӿ{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{ʉʉ}}{}}{ʉʉ}}{}}{}}{}}{}}{}}{}}{ʉʉ}}{}}{}}{}}{}}{}}{ʉʉ}}{≀~~~~~~~≀~~~~~~~~≀~~ÆÆÆÆÆ~≀~~ÆÆÆÆÆ~≀~ÆÆÆÆÆ~≀~ÆÆÆÆÆ~~≀~ÆÆÆÆÆ~~~~~~~~~~އ~†††††~އ≀~ÆÆÆÆÆ~≀~~~~~~~~~~~ÆÆÆÆÆ~~묙쳃묙쳃묙쳃묙묙쳃묙뮆뮆뮆뮆뮆뮆뮆뮆뮆뮆뮞뮞뮞뮞뮞뮞㒋첋㒋㒋첋㒋첋㒋㒋첋㒋첋첋ᒋ첋㒋첋㒋䕣䕣矎矎䕣矎ᔣ矎promoe-0.1.1/data/Almond-blue/PlEdit.bmp000066400000000000000000004612061134030477200177550ustar00rootroot00000000000000BMb6(Pb rqoqpnqpnrqnqplqpkqpkqpkqpkqpkqpkqplrqnqpnqpnqpnsrntrmvtmy'",& rqoqpnqpnrqnqplqpkqpkqpkqpkqpkqpkqplrqnqpnqpnqpnsrntrmvtmy'",& sroqpnqpnrqnqplqplqpkqpkqpkqpkqplqplrqnqpnqpnqpnsrosrmusmy'#-' sroqpnqpnrqnqplqplqpkqpkqpkqpkqplqplrqnqpnqpnqpnsrosrmusmy'#-' qpnqpnqpnqplqplqpkqpkrpkrpkqpkqpkqpkqplrqnqpnqpnqpnsrotrmz($-' qpnqpnqpnqplqplqpkqpkrpkrpkqpkqpkqpkqplrqnqpnqpnqpnsrotrmz($-' qpnqpnqplqpkrpkrpksqksqksqksqksqksqkrpkqpkqplrqnqpnqpnsroz)%.) qpnqpnqplqpkrpkrpksqksqksqksqksqksqkrpkqpkqplrqnqpnqpnsroz)%.)   qpnqplqpksqkrphrphsphsphsphsphsphsphrphrphsqkqpkqplqpnqpn~z+(/* qpnqplqpksqkrphrphsphsphsphsphsphsphrphrphsqkqpkqplqpnqpn~z+(/* bcz` qplrpkrphsphtqgtqftpdtpdtpdtpdtpdtpdtqftqgsphrphrpkqplqpn~}z+( /+ qplrpkrphsphtqgtqftpdtpdtpdtpdtpdtpdtqftqgsphrphrpkqplqpn~}z+( /+ }nAsf@j_? rphsphtpdtpdtpdtpdtpdtpdtqfrqn|{y,*"0, crphsphctpdtpdcctpdtpdctpdtpdctqfcccrqn|{y,*"0, qa/eX1\R2 sphtqftpdtpdtpdtpdtpdtpdtpdsphsqkqpl|{y-+#1-! csphtqfctpdctpdtpdctpdctpdtpdctpdcsphsqkqpl|{y-+#1-! m_2eY6\S9 tpdtpdtpdtpdtpdtpdqpl|{y.,%1- cccctpdctpdtpdctpdccctpdtpdcccqpl|{y.,%1- ylEpfIgaM tpdtpdtpdtpdtpdtpdtpdsphsqkqpl|{y-+#1-! cccctpdctpdtpdctpdctpdtpdctpdcsphsqkqpl|{y-+#1-! {Z}u]vq` rphsphtpdtpdtpdtpdtpdtqfrqn|{y,*"0, crphsphctpdtpdcctpdtpdccctpdtqfcccrqn|{y,*"0, i~i~zl qplrpksqksphtqgtqftqftpdtpdtpdtpdtqftqftqgsphrphrpkqplqpn~}z+(/+ qplrpksqksphtqgtqftqftpdtpdtpdtpdtqftqftqgsphrphrpkqplqpn~}z+(/+ qq}s qpnrqnqplrpkrpksqkrphrphrphrphrphrphsqksqkrpkqpkrqnqpnqpn~z+(.) qpnrqnqplrpkrpksqkrphrphrphrphrphrphsqksqkrpkqpkrqnqpnqpn~z+(.) sroqpnqpnqpnrqnqplqplqplqplqplqplqplqplrqnrqnqpnqpnrqosrnz)%/* sroqpnqpnqpnrqnqplqplqplqplqplqplqplqplrqnrqnqpnqpnrqosrnz)%/* trmsrnsrorqoqpnqpnqpnqpnqpnqpnqpnqpnqpnqpnrqosrosrntrmusmy'#.( trmsrnsrorqoqpnqpnqpnqpnqpnqpnqpnqpnqpnqpnrqosrosrntrmusmy'#.( vtlusmusmtrmtrmsrmsrnsrnsrnsrnsrnsrnsrmtrmtrmusmusmvtlwtly&!,& vtlusmusmtrmtrmsrmsrnsrnsrnsrnsrnsrnsrmtrmtrmusmusmvtlwtly&!,& wtkwtlwtlwtlvtlvtlvtlvtlvtlvtlvtlvtlvtlvtlvtlwtlwtlwtkxukx("+% wtkwtlwtlwtlvtlvtlvtlvtlvtlvtlvtlvtlvtlvtlvtlwtlwtlwtkxukx("+% yxxyyyyyyyyyyyyxxxyy,%/( yxxyyyyyyyyyyyyxxxyy,%/( µ                 !$"&#)&)&)%(%%""   !$"&#)&)&)%(%%""   Ϳ                         !         !         LJDKICKIAKIBKIAJHBHF>GE>FD=DB:CA:CA:A?8A?9@>8><6<:5<:4:8397265064/ LJDKICKIAKIBKIAJHBHF>GE>FD=DB:CA:CA:A?8A?9@>8><6<:5<:4:8397265064/ kibkh`mi^jg]ge]ge__^\]\Z^^\]\Z]\Z]\ZZZY_^\_^[ca\he]mi]tn]{t]y^~^ kibkh`mi^jg]ge]ge__^\]\Z^^\]\Z]\Z]\ZZZY_^\_^[ca\he]mi]tn]{t]y^~^ |vctpdmkdihegfage]gdZjfXhdWieWieWgcVebXfcXba\dc`febliasn_{t`y__ |vctpdmkdihegfage]gdZjfXhdWieWieWgcVebXfcXba\dc`febliasn_{t`y__ qpmdc^fd^ z`xr^rm^mj_hf^dc`_^\`_[^^\_^Z^]Y^]Y\\Z`_\`_\ba\hf^mi]tn]{t^x^~^ z`xr^rm^mj_hf^dc`_^\`_[^^\_^Z^]Y^]Y\\Z`_\`_\ba\hf^mi]tn]{t^x^~^ xays`rm^li_hf_dc`_^\`_[^^\_^Z_^Z^]Y]\X]\Y^]Z]\Y]\Z]\Zgge||z xays`rm^li_hf_dc`_^\`_[^^\_^Z_^Z^]Y]\X]\Y^]Z]\Y]\Z]\Zgge||z SQISPHOMEPMEOLCOLDNKCKIAKH@IF=HEBA>A@<@?;?=7?=7><6=;6=;6=<9?>:?=8FC8MH9SL6ZQ6aU2j\3 eZ:\TBA>A@<@?;?=7?=7><6=;6=;6=<9?>:?=8FC8MH9SL6ZQ6aU2j\3  cYSN=MJ?GE>BA>BA<@?;@>8@>8><7=;6<:5;:5:94983874763A@=XXV cYSN=MJ?GE>BA>BA<@?;@>8@>8><7=;6<:5;:5:94983874763A@=XXV #$ TQISPGROGQNEPMDPMCOLBOLBNKAMJALI@KH?JG=HE=FC;EB9DB:B@:@>8=;6650861 TQISPGROGQNEPMDPMCOLBOLBNKAMJALI@KH?JG=HE=FC;EB9DB:B@:@>8=;6650861 OMFNLELJC QH,IB,B<+>:/75-32/43/21,20+20+1/*0.).-(--+.-)20+41&>9+@9"I?"F:XH QH,IB,B<+>:/75-32/43/21,20+20+1/*0.).-(--+.-)20+41&>9+@9"I?"F:XH keRwq`pmb UN9NJ=9;:6A>3E?+LC(M@]M UN9NJ=9;:6A>3E?+LC(M@]M  VL,LD+F@.A>3:8387454275096.96.75-75.53,21/0/-32-63(?:,B;%I@#F:VG VL,LD+F@.A>3:8387454275096.96.75-75.53,21/0/-32-63(?:,B;%I@#F:VG bb}] SJ0JC/E@2C@6:9498543154/96.96.86.64,74,42+20*0.).,'+*%32/HGDvvt SJ0JC/E@2C@6:9498543154/96.96.86.64,74,42+20*0.).,'+*%32/HGDvvt ab|_ WTKXUKWTJXUJZVKXTIYUJWTIWSHVRFVRGUQFSPEQNCOLBLI@LI?JG?GE=FD=75/650 WTKXUKWTJXUJZVKXTIYUJWTIWSHVRFVRGUQFSPEQNCOLBLI@LI?JG?GE=FD=75/650 WUMUSKSPH UM3LF2GC5EB:>=8>=;=<9<;6@=5A>6?<4><6><6<:3=<7?=7@=4C?2F@-LD+=0 I9 UM3LF2GC5EB:>=8>=;=<9<;6@=5A>6?<4><6><6<:3=<7?=7@=4C?2F@-LD+=0 I9 wWsiIbY= XR@QNFPOJXUKYUJZVHZTBYSBXR@WQ@TN=NK@KH?FD?IF;JE4PH0C6P? XR@QNFPOJXUKYUJZVHcZTBcYSBXR@WQ@cTN=NK@KH?FD?IF;JE4PH0C6P? ZQ4OI5IE8HEGE=GE=FC8GD;FC:EB8DA9B@9@>6@>9@>8@>6D@2F@,ME+=0 H8 ZQ4OI5IE8HEGE=GE=FC8GD;FC:EB8DA9B@9@>6@>9@>8@>6D@2F@,ME+=0 H8 p>xiJHAFE@IF>HE4?<3;91:8175.;:5RQMmlj UN9NI;IF>JHAFE@IF>HE4?<3;91:8175.;:5RQMmlj {l?re=g\: `]Rb^Ra]Qzxxb^Pxxx_[Mwx[WK[WLZVK~TQHRPHQOG53-64- `]Rb^Ra]Qzxxb^Pxxx_[Mwx[WK[WLZVK~TQHRPHQOG53-64- XVNUSLSQI e^I_ZKXVN[YSWVQ[YQZWO[WLYVLYVLYUJVSJWTLVTNQPKPPNRQLVSJYTE^XD7, G8 e^I_ZKXVN[YSWVQ[YQZWO[WLYVLYVLYUJVSJWTLVTNQPKPPNRQLVSJYTE^XD7, G8 na9bV3WL+ b^S`^V`^VeaUe`Pf`Od^Md_N]YLZXPYWR[XO\XJb\H=1N> b^S`^V`^VeaUcce`Pf`Occcd^Mcd_N]YLZXPYWR[XO\XJb\H=1N> d]G`[MYVNYWPXVPXVOXUL]YN\XL]YM\XL[WLYVLWUMQPLOOMQPKURIXSC^WC6+F7 d]G`[MYVNYWPXVPXVOXUL]YN\XL]YM\XL[WLYVLWUMQPLOOMQPKURIXSC^WC6+F7 uc+iZ+`S+ a\N_\R\ZT^\U\ZR\YP\YN^ZN^ZL_ZK^YK\XJZVHXTHVRGSPEROELJBSQKqpk~}z  a\N_\R\ZT^\U\ZR\YP\YN^ZN^ZL_ZK^YK\XJZVHXTHVRGSPEROELJBSQKqpk~}z  m],dW.ZO, ok_ok^ok]}oj[ojZojZojYyniXmhWlgWkfW|jeWgcVdaVa^V`^V31+42+ ok_ok^ok]}oj[ojZojZojYyniXmhWlgWkfW|jeWgcVdaVa^V`^V31+42+ [YQYVNXUM sn]nkamkenlfmkdmjbmj_pk]nj\lh[lh[lh]jg\li^ig`gfaed`ge^jfZnhV7- I: sn]nkamkenlfmkdmjbmj_pk]nj\lh[lh[lh]jg\li^ig`gfaed`ge^jfZnhV7- I: n`6cW2XN/ olcihdnkarm_ql\rm\rl[rlZrlYrlZrl[pk\nkakidihcmj`pkZ=2O? olcihdnkacrm_ql\rm\rl[crlZrlYrlZcrl[pk\nkakidihcmj`pkZ=2O? qpkdc^fd^ tn]kh^ig`ed_hf^kh^mi\oj\niZniZoj[nj\lh\mj_hf`ed_cb^ec\kgYnhT6+ H9 tn]kh^ig`ed_hf^kh^mi\oj\niZniZoj[nj\lh\mj_hf`ed_cb^ec\kgYnhT6+ H9 rb/j\0_S0 olcihcljdljcnk`ok^pk\rm\pkZqkZpjXojYlgWlgXieWhdWdaVc`Xsqj  olcihcljdljcnk`ok^pk\rm\pkZqkZpjXojYlgWlgXieWhdWdaVc`Xsqj  i[0dX3[Q4 {n{m~yi}wf|ve}we|vcyzta{ucztc{ytcytdytfwsgwtjtrj:81=;4 {n{m~yi}wf|ve}we|vcyzta{ucztc{ytcytdytfwsgwtjtrj:81=;4 gd\a^U`]S |o|yqttrzwo}yn|wh{vgzvhĺ˿vuqtsoxul{vf5,H9 |o|yqttrzwo}yn|wh{vgzvhĺ˿vuqtsoxul{vf5,H9 xkDmcCg^D wumtrlvshvrf}xg|vc}wf~yh{wluusywozj<2N> wumtrlvshvrfccc}xgccc|vcc}wf~yh{wluusywozj<2N> wx ~ykvskqoitqh{veárqnqojwshztc5+ F8 ~ykvskcqoitqhc{veccccccárqnqojwshztc5+ F8 ~pCuiDmdG xvnvtl{wi}wf|vdysbwrbǾ xvncvtl{wic}wfc|vdcccysbwrbccǾ vjElcGg`K r{hzfzf}yf{j~yi{n~{p~{r75.:81 rcc{hczfzf}cccyfc{j~yic{n~{p~{r75.:81 tqiolcnk` t~x~r~p}k~|tȢ|{x}ur3*C5 t~xc~r~pc}kcccccc~|tȢ|{x}ur3*C5 }YvYxpY xwrzwn{wl|xk}l}l}j|i|i}lrû~{zu8/I: xwrzwn{wl|xk}l}l}j|i|i}lrû~{zu8/I: uv |p{yq~l|l}zqxwrxwtwvq|q~m/& B4 |p{yqcccccc~l|lc}zqxwrxwtwvq|q~m/& B4 ~WxY{s[ {yt}zq|l}l|jyfyfy {ytc}zqc|lc}lc|jyfyfccy xZyr[up_ tpk~k}j~lwx75.:81 ctpckccc~k}jc~lcwx75.:81 zv}r wtt˭IC/_T4 ccwcttc˭IC/_T4 gf}i zwwxxwuľOH1cW4 zwwxxwuľOH1cW4 }{yrxwr zuzHA*^S3 czcuczcHA*^S3 ff~h vw ccccvccwc g|h|xk urmnlkmw{~:7/=;5 curcmcnclccckcmccw{~:7/=;5 {v ¶|yp cccccccc¶|yp npr ý}zp cccccccý}zp zsrorqm ¼}zo cccc¼}zo nop wvq cccccccwvq op~s wtnnmx|86.<:4 cwtccnccnmcccx|86.<:4 { |yq cccc|yq }zr cccccc}zr zsrorqm ÿ}zq cccÿ}zq ľ`_[30& ccccccccľ`_[30& s{g}ye~xdzh}zo~31*64, scc{gcc}yeccc~xdczhc}zo~31*64, } zxq cccccccczxq ¹ {yq ccccccccc{yq zsrorqm ÿ}zp ÿ}zp ƻ @?;a^U @?;a^U vtp~m}k|j~{h~{izk{n|s31*75. vtp~m}k|j~{h~{izk{n|s31*75. zxq zxq ü {yr ccccccc{yr zsrorqn Ŀ{xo Ŀ{xo Ǿ )' ~u )' ~u }xvrqon~n~n~ptw42+:82 }xvrqon~n~n~ptw42+:82 xt |zu |zu ý }{u cccccccc}{u zsrnsro }{t }{t Ǿ {ytVSK}zp {ytVSK}zp |zxtssrt~ux20*861 |zxtssrt~ux20*861 }z Ʉ} Ʉ} þ Ń} Ń} ztsnsro ̆~ ̆~ ǿ nlfebYwtj nlfebYwtj }|{yyxxwvwvvwxxx{0.)651 }|{yyxxwvwvvwxxx{0.)651 Ӑ Ӑ µ Џ Џ zvtntsn ¿֑ ¿֑ Ľ ~trj]ZPnj_ ~trj]ZPnj_ þ ~}{{{zyzyyzz{{{/-(64/ ~}{{{zyzyyzz{{{/-(64/  dc_dc_dc^fd^fd^fd^fd^fd^ge^fd^fd^fd^fd^dc^dc^dc_cb`cb`bb`qqo dc_dc_dc^fd^fd^fd^fd^fd^ge^fd^fd^fd^fd^dc^dc^dc_cb`cb`bb`qqo Ƚ ge^he]if\if[kg\kg[kg[kgZkgZkg[kg[if[if\he\he]ge^fd^dc^dc_qpn ge^he]if\if[kg\kg[kg[kgZkgZkg[kg[if[if\he\he]ge^fd^dc^dc_qpn zvtmvtn cb`cb`cb`dc_dc_dc_dc_dc_dc_dc_dc_dc_dc_cb`cb`cb`cb`bb`bb`ppo cb`cb`cb`dc_dc_dc_dc_dc_dc_dc_dc_dc_dc_cb`cb`cb`cb`bb`bb`ppo ge^he]he\if\if[if[kg[kg[kg[kg[kg[if[if[kh^pmbyvlxb_Vvsj ge^he]he\if\if[if[kg[kg[kg[kg[kg[if[if[kh^pmbyvlxb_Vvsj ǹ ~~~|{zzzzz{zzzz,+'53. ~~~|{zzzzz{zzzz,+'53. zwtlvtm zyuzyt}{u}{t|zs|zs{yq|zr|zr|zr|zr|zs}{t~|u~|u~|v}{v|{v}|x('$0/* zyuzyt}{u}{t|zs|zs{yq|zr|zr|zr|zr|zs}{t~|u~|u~|v}{v|{v}|x('$0/* qqocb`cb` |t|s|r~{p|q{o{o~zm~zm{o{o|p}r}s}t}u~vyz.-(861 |t|s|r~{p|q{o{o~zm~zm{o{o|p}r}s}t}u~vyz.-(861 ywtlusm }}|}}|||||}}}}}~54/@>9 }}|}}|||||}}}}}~54/@>9 ppobb`bb` zxvssrqqqsssuxif\~zn zxvssrqqqsssuxif\~zn qpmdc^fd^ ~}}{yyzzyyyy~y~}x+*%20+ ~}}{yyzzyyyy~y~}x+*%20+ yxszxs{yt|zt|zs|zr|zr}zr}{s}{s~{s}u~w~xyz{{|10-=;6 yxszxs{yt|zt|zs|zr|zr}zr}{s}{s~{s}u~w~xyz{{|10-=;6 {zwzyu ~}|||zzzzz{}HF@XVN ~}|||zzzzz{}HF@XVN yxulusm USKhe] USKhe] |} }|||}~b_Vtqh }|||}~b_Vtqh ~z }}|{{zzzzy{z{z/.)651 }}|{{zzzzy{z{z/.)651 {zu|{v~|v~|u~|t~|t~|t~|t|s}u~uwxz{}651CA< {zu|{v~|v~|u~|t~|t~|t~|t|s}u~uwxz{}651CA< yxuzyu ~||||{|}OMF`^W ~||||{|}OMF`^W ywtlusm ]ZRolb ]ZRolb |yvuttuwy{~b_Uspg |yvuttuwy{~b_Uspg ~{|{zyzyxxxvwwwyx0.)75/ ~{|{zyzyxxxvwwwyx0.)75/ ljc{ ljc{ {zwzyt û{yq û{yq zwumtrm Žw Žw ļy ccccccļy li^}r li^}r dc_ec^fd^ge]he]if\if[if[if[if[if\he\he]ge]fd^dc^dc_cb`cb`qqo dc_ec^fd^ge]he]if\if[if[if[if[if\he\he]ge]fd^dc^dc_cb`cb`qqo ge]he]if\if[kg\kg[kg[kgZkgZkg[kg[kg[if[if[he\he]ge^fd^dc^qpm  ge]he]if\if[kg\kg[kg[kgZkgZkg[kg[kg[if[if[he\he]ge^fd^dc^qpm  zvtmsrn ge]he]if\if\if[if[kg\kg[kg[kg[kg[kg[if[if[if[if\he]ge]fd^rpk  ge]he]if\if\if[if[kg\kg[kg[kg[kg[kg[if[if[if[if\he]ge]fd^rpk  û kgZpjXpjXpjXpjXpjXpjXpjXpjXojYkg[if\ge]rpk  kgZcpjXcpjXpjXcpjXcpjXpjXpjXcpjXojYckg[if\ge]rpk  ge]he]he\if\if[if[if[if[if[if[if[kg\if[if[if[if\if\he]ge]rpj  ge]he]he\if\if[if[if[if[if[if[if[kg\if[if[if[if\if\he]ge]rpj  wwxxzyyzzzzzxyxxvuvƶzcx# wwxxzyyzzzzzxyxxvuvƶzcx# qqocb`dc` yyyzzz{{{{z{yzzyxxwxc#x( yyyzzz{{{{z{yzzyxxwxc#x( ztrmqpn zyzzzz{{{{{{zzzzyzxvc*w, zyzzzz{{{{{{zzzzyzxvc*w, qpkdc^fd^ {zzzzzz{yxwd)x) {czczcczccczczzc{yxwd)x) rpjhe]if[ yxyyzz{zzzzzzzzzzzywe/z0 yxyyzz{zzzzzzzzzzzywe/z0 qpldc^fd^ uuvxw~w}w~|w~|w~|w~wxwwvttssRDcR uuvxw~w}w~|w~|w~|w~wxwwvttssRDcR ʹvv vw~x~|w|{v{zv{zu{yt{yt{zu{zv{zv}{v~|w~wwuutPE"`Q# vw~x~|w|{v{zv{zu{yt{yt{zu{zv{zv}{v~|w~wwuutPE"`Q# zsrnqpn w~v~x}{v{zv{zu{yt{yt{yt{yt{yt{yt{zu{zv}{v~|w~vwuPF(_R) w~v~x}{v{zv{zu{yt{yt{yt{yt{yt{yt{zu{zv}{v~|w~vwuPF(_R) xx }{v{ys{ys{ys{ys{ys{ys{ys{ys~|wwvQF%`Q# }{vc{yscc{ysc{ysc{ys{ys{ysc{ys{ysc~|wwvQF%`Q# xy wwx~x}{v|{v|{v|{v|{v{zv{zv|{v|{v|{v|{v}wxwwUL/cV- wwx~x}{v|{v|{v|{v|{v{zv{zv|{v|{v|{v|{v}wxwwUL/cV- xx }r~{syxswumxumxumwuovupxwr{yr|q}p~p|4,?5 }r~{syxscccwumxumcxumcwuovupcxwr{yr|q}p~p|4,?5 tt wvsvtlvsjvsjvsjvsjvskvtmutpwvsxwr{yq|60>6 wvsccvtlcvsjvsjcvsjvsjccvskvtmcutpwvsxwr{yq|60>6 zsroqpn utovtmvsjvsjvsjvsjvsjvsjvskwvr}94&@9$ cutovtmcvsjvsjccvsjvsjcvsjvsjcvskcccwvr}94&@9$ tu vtnvsjvsjvsjvsjvsjvsjvsjvtowvsxwr|71?6 vtncvsjcvsjvsjcvsjcccvsjvsjccvsjvtowvsxwr|71?6 vw vtmvtlwtlwtlwtlwtlwtlwtlvtm}>:.G@* cccvtmvtlcwtlwtlwtlcwtlwtlccwtlvtmccc}>:.G@* tv wuputqtsptrkurhvrgvrgurhtrksrorqoutowunxumy(#/( wuputqtspctrkurhcvrgcvrgcurhtrkcsrorqoutowunxumy(#/( ~rr sqjtqgtpdtpdtpdtpdtpdtpdtqfqpkqpnqpn~y*'/* csqjtqgtpdctpdtpdctpdctpdtpdctqfccqpkqpnqpn~y*'/* zqpnrqn sphtqftpdtpdtpdtpdtpdtpdtpdsphsqkqpl|{y.,%1-" csphtqfctpdctpdtpdctpdctpdtpdctpdcsphsqkqpl|{y.,%1-" |zxrwvs sphtpdtpdtpdtpdtpdtpdtpdtpdtpdtpdtpdtpdtpdtpdtpdrphqplqpn~z)&-( sphtpdtpdtpdtpdtpdtpdtpdtpdtpdtpdtpdtpdtpdtpdtpdrphqplqpn~z)&-( |wvrutr sqlsqjtqhtpduqfuqfuqfuqftrjtrm}|x42-84( sqlsqjtqhctpdcccccuqfuqfccuqfuqfctrjtrm}|x42-84( |{yrxwr wuputqtspurjurgvrgvrgtrmsrorqoutovtnxuly'"0) wuputqtspcurjurgcvrgcvrgccctrmsrorqoutovtnxuly'"0) {}yn{xo sqitqgtpdtpdtpdtpdtpdtpdrphrqnqpn~z*'/* csqitqgtpdccctpdtpdctpdtpdctpdcrphcrqnqpn~z*'/* zqpnqpl sphtpdtpdtpdtpdtpdtpdqpl|{y.,%1- csphcctpdctpdtpdctpdctpdcctpdcccqpl|{y.,%1- ~{qpnqpl sphtpdtpdtpdtpdtpdtpdtpdtpdtpdtpdtpdtpdtpdtpdtpdrphqplqpn~z*&.) sphtpdtpdtpdtpdtpdtpdtpdtpdtpdtpdtpdtpdtpdtpdtpdrphqplqpn~z*&.) ~{qpnqpk sqluqftpdtpduqfuqfuqfuqfuqfuqf}|x53.84) sqlccuqftpdtpdcuqfcuqfuqfcuqfuqfcuqfccc}|x53.84) ~zsrorqm wuputqtsptrjurhvrgvrgurhtrksrorqoutowunxuly'!/( wuputqtspctrjurhcvrgcvrgcurhtrkcsrorqoutowunxuly'!/( {}yn{xo rphtqgtpdtpdtpdtpdtpdtpdtqfrphrqnqpn~z*'/* crphtqgtpdctpdtpdctpdctpdtpdctqfcrphcrqnqpn~z*'/* zqpnqpl tqftpdtpdtpdtpdtpdtpdsphsqkqpl|{y.,%1-! cctqfctpdctpdtpdctpdcctpdctpdcsphsqkqpl|{y.,%1-! ~{qpnqpl rphtpdtpdtpdtpdtpdtpdtpdrphqplqpn~z)%.) rphtpdctpdtpdtpdctpdccctpdccctpdrphqplqpn~z)%.) ~zqqoqpk sqjtqhtqftpdtpduqfuqfuqfuqfuqfuqftrjtrm}|x42-84( csqjtqhtqftpdtpdcuqfcuqfuqfcuqfuqfcuqfctrjtrm}|x42-84( ~zqpnrqm xvpvurtsqurhvrgurgrqmrqotspvtowunyvly'!.' xvpvurtsqcccurhvrgcurgcccrqmrqotspvtowunyvly'!.' {}yn{xo rqltqgtpdtpdtpdtqftqgqplqpnrqo~y*&/* rqlcctqgccctpdtpdtpdcctqftqgccqplqpnrqo~y*&/* ~zqpnqpl rphsphtpdtpdtpdtpdtpdtpdtqfrqn|{y,*"0, crphsphctpdtpdcctpdtpdctpdtpdctqfcccrqn|{y,*"0, ~{qpnqpl sqktqftpdtpdtpdtpdtpdtpdtpdtpdtpdtqgrpkrqnqpn~y)%-' sqktqfctpdtpdtpdctpdctpdtpdtpdctpdtpdtqgrpkrqnqpn~y)%-' ~zqpnqpl rqltqguqftpduqfuqfuqfuqfuqfurh}|z42,73& rqlccctqguqftpdcuqfuqfuqfcuqfuqfcurhccc}|z42,73& ~zqpnrqm ywowuputqtspsrmusmtrkuriuritrjtrktrlsrmrqorqotsowunxumyvly'".' ywowuputqtspsrmusmtrkuriuritrjtrktrlsrmrqorqotsowunxumyvly'".' |~zn{xo rqmqpksqkrphsphtqgtqftqftqftqftqftqgsphrphsqkqpkrqnqpnsrnz)%.) rqmqpksqkrphsphtqgtqftqftqftqftqftqgsphrphsqkqpkrqnqpnsrnz)%.) ~zqpnqpl qplrpkrphsphtqgtqftpdtpdtpdtpdtpdtpdtqftqgsphrphrpkqplqpn~}z+( /+ qplrpkrphsphtqgtqftpdtpdtpdtpdtpdtpdtqftqgsphrphrpkqplqpn~}z+( /+ ~zqpnrqn rpksphtpdtpdtpdtpdtpdrphqpkqpnsroz($-' rpksphccctpdctpdctpdtpdtpdcccrphqpkqpnsroz($-' ~yqpnrqn rqnrqlsqksqjsqisqitqhtqhtqhtqhtqhtqgtqhtqhtqisqitrlsrmsro~{2/'83% rqnrqlsqksqjsqisqitqhtqhtqhtqhtqhtqgtqhtqhtqisqitrlsrmsro~{2/'83% ~yqpnrqn zwnywputputqsrpsrnsrmtrmtrmtrmsrmsrnsrprqotsowuowunyvlzvky& .' zwnywputputqsrpsrnsrmtrmtrmtrmsrmsrnsrprqotsowuowunyvlzvky& .' |~zn|yn rqorqnqpkrpksqkrphrphsphsphsphrphrphsqkrpkqpkrqnqpnrqosrmz($.) rqorqnqpkrpksqkrphrphsphsphsphrphrphsqkrpkqpkrqnqpnrqosrmz($.) ~zqpnqpl qpnqplqpksqkrphrphsphsphsphsphsphsphrphrphsqkqpkqplqpnqpn~z+(/* qpnqplqpksqkrphrphsphsphsphsphsphsphrphrphsqkqpkqplqpnqpn~z+(/* ~yrqoqpn qplsqktpdtpdtpdtpdtpdtpdtpdtpdsphrpkrqnqpnsrnz'#-' qplsqkctpdtpdtpdctpdctpdtpdtpdctpdsphrpkrqnqpnsrnz'#-' zsroqpn srorqnrqmrqlrqlsqlsqksqksqksqksqksqktrlsqlrqlrqlrqmsrptsp{0-$50 srorqnrqmrqlrqlsqlsqksqksqksqksqksqktrlsqlrqlrqlrqmsrptsp{0-$50 zsroqpn |ynzwoxvpvuptsqsrpssqsrpsrpsrpsrptspsrptsovtoxvnxumyvlzvkx'!,% |ynzwoxvpvuptsqsrpssqsrpsrpsrpsrptspsrptsovtoxvnxumyvlzvkx'!,% |{m}yn qpnqqorqnqplqpkrpkrpksqksqksqkrpkrpkqpkqplrqnqpnqpnsrnusmz'#-( qpnqqorqnqplqpkrpkrpksqksqksqkrpkrpkqpkqplrqnqpnqpnsrnusmz'#-( ~yqpnrqn qpnqpnrqnqplqpkrpksqksqksqksqksqksqkrpkqpkqplrqnqpnqpnsroz)%.) qpnqpnrqnqplqpkrpksqksqksqksqksqksqkrpkqpkqplrqnqpnqpnsroz)%.) zsrnqpn qpnqpktpdtpdtpdtpdtpdqplqqosrotrmz(#,& qpnqpkccctpdctpdctpdtpdtpdcccqplqqosrotrmz(#,& zsrnqpn srnsrosrorqorqorqnrqnrqmsrosrosrosrosrorqorqorrprqoutquto|.*4. srnsrosrorqorqorqnrqnrqmsrosrosrosrosrorqorqorrprqoutquto|.*4. ztrmsro }yn|ynzwoywovtoutoutputqtsqutqtsoutoutowuoxvnyvmxulzvk{wkx& ,% }yn|ynzwoywovtoutoutputqtsqutqtsoutoutowuoxvnyvmxulzvk{wkx& ,% {|n~zm sroqpnqqoqpnrqnqplqpkqpkqpkqpkqpkqplqplrqnqqoqpnsrotrmvtmy'"-' sroqpnqqoqpnrqnqplqpkqpkqpkqpkqpkqplqplrqnqqoqpnsrotrmvtmy'"-' zsroqqo sroqpnqqorqnqplqplqpkqpkqpkqpkqpkqpkqplqplrqnqqoqpnsrotrmz($-' sroqpnqqorqnqplqplqpkqpkqpkqpkqpkqpkqplqplrqnqqoqpnsrotrmz($-' ztrmsro qpnrqnqpksqkrphtqgtqftqftqftqftqgsphrphrpkqplqpnqpnsrnusmy'"+% qpnrqnqpksqkrphtqgtqftqftqftqftqgsphrphrpkqplqpnqpnsrnusmy'"+% ztrmrqo vtnusntsnsrnsrnsrosrosrotsptspsrosrorqosrptsptsoutovtowun{.)3- vtnusntsnsrnsrnsrosrosrotsptspsrosrorqosrptsptsoutovtowun{.)3- yusmtrm }yl}yn|yozwoxvoxvovtoutoutovtovtowunwunxvnyvmzwmyvk{wk{wky& ,% }yl}yn|yozwoxvoxvovtoutoutovtovtowunwunxvnyvmzwmyvk{wk{wky& ,% z|m{m srnsroqpnqpnrqnrqnqplqplqplqplqplrqnrqnqpnqpnsrosrnusmvtly&!,& srnsroqpnqpnrqnrqnqplqplqplqplqplrqnrqnqpnqpnsrosrnusmvtly&!,& zsrnqpn srnsroqpnqpnrqnqplqplqpkqpkqpkqpkqplrqnqpnqqoqpnsrosrmusmy(#,& srnsroqpnqpnrqnqplqplqpkqpkqpkqpkqplrqnqpnqqoqpnsrosrmusmy(#,& yusmtrm sroqpnrqnqplrpksqkrphrphrphrphsqkrpkqpkqplqpnqpnsrntrmvtmy&!+% sroqpnrqnqplrpksqkrphrphrphrphsqkrpkqpkqplqpnqpnsrntrmvtmy&!+% yusmsrn vtlwumvtmvtmvtnvtnvtnusnusnusnusnusnusnusnwuowunwunyvn{xnz+&2+ vtlwumvtmvtmvtnvtnvtnusnusnusnusnusnusnusnwuowunwunyvn{xnz+&2+ ywtlvtm {m~zn|yn{xnywoywowuowuowunwunwunxvnxvnxumyvmxulzvk{wk{wky& ,% {m~zn|yn{xnywoywowuowuowunwunwunxvnxvnxumyvmxulzvk{wk{wky& ,% z|m{m srmsroqpnqqorqnqplqplqpkqpkqplqplrqnqpnqqoqpnsrotrmusmwtly&!+% srmsroqpnqqorqnqplqplqpkqpkqplqplrqnqpnqqoqpnsrotrmusmwtly&!+% ztrmsro trmsrnqpnqpnrqnqplqplqpkqpkqpkqpkqplrqnqpnqpnrqosrnusmvtmy'",& trmsrnqpnqpnrqnqplqplqpkqpkqpkqpkqplrqnqpnqpnrqosrnusmvtmy'",& yvtlusm srnqpnqqorqnqplqpkqpkrpkrpkqpkqpkqplrqnqpnqpnrqosrnusmvtly&!+% srnqpnqqorqnqplqpkqpkrpkrpkqpkqpkqplrqnqpnqpnrqosrnusmvtly&!+% yvtmtrm wtlxulwtlwtlwumvtmvtmvtmvtmwumwumwumwumwunxvnyvmyvmzwm{xmz*%2+ wtlxulwtlwtlwumvtmvtmvtmvtmwumwumwumwumwunxvnyvmyvmzwm{xmz*%2+ xxukwtl {|m{m yusmsrn ywtlvtm yvtltrm yxujxuk }yl}yn|yn{xnywoywowuowuowuowunwunxvnwunxvnyvmxulzvk{wk{wkx& ,% }yl}yn|yn{xnywoywowuowuowuowunwunxvnwunxvnyvmxulzvk{wk{wkx& ,% z|m{m srmsroqpnqpnrqnqplqpkrpkrpkqpkqpkqplrqnqpnqpnsrotrmvtmwtly% *$ srmsroqpnqpnrqnqplqpkrpkrpkqpkqpkqplrqnqpnqpnsrotrmvtmwtly% *$ yusmsrn trmsrnqpnqpnrqnqplqpkrpkrpkrpkrpkqpkqplrqnqpnrqosrnusmvtly&!+% trmsrnqpnqpnrqnqplqpkrpkrpkrpkrpkqpkqplrqnqpnrqosrnusmvtly&!+% ywtlvtm srnqpnqpnqpnrqnqplqplqplqplqplqplrqnqpnqqoqpnsrosrnusmvtly&!+% srnqpnqpnqpnrqnqplqplqplqplqplqplrqnqpnqqoqpnsrosrnusmvtly&!+% yvtlusm xukxulxulxulwtlwtlwumvtmvtmwumwumxumxulxumyvmzwmzwm{wl|xly)#1* xukxulxulxulwtlwtlwumvtmvtmwumwumxumxulxumyvmzwmzwm{wl|xly)#1* yxujxuj ~zn|yn{xnzwoxvowuoutoutovtovtovtovtowunwunxumxumyvlzvk{wkx& ,% ~zn|yn{xnzwoxvowuoutoutovtovtovtovtowunwunxumxumyvlzvk{wkx& ,% z|m{m srnqpnqpnrqnqpkrpksqkrphrphsqksqkrpkqplrqnqpnsrosrmusmwtly% *$ srnqpnqpnrqnqpkrpksqkrphrphsqksqkrpkqplrqnqpnsrosrmusmwtly% *$ yusmsrn trmsroqpnrqnqpkrpksqkrphrphrphrphsqkqpkqplqpnqpnsrnusmvtly% ,& trmsroqpnrqnqpkrpksqkrphrphrphrphsqkqpkqplqpnqpnsrnusmvtly% ,& ywtlvtm srnqpnqpnqpnrqnrqnqplqplqplqplqplrqnqpnqpnqpnrqosrntrmvtmy'",& srnqpnqpnqpnrqnrqnqplqplqplqplqplrqnqpnqpnqpnrqosrntrmvtmy'",& yvtmtrm xukxulxulwtlwumvtmvtmvtmvtmwumwumwumwumxumyvmzwmzwm{wl|xly("1* xukxulxulwtlwumvtmvtmvtmvtmwumwumwumwumxumyvmzwmzwm{wl|xly("1* yxujxuj }ynzwoywowuoutoutputqtsqutqutqutqtsoutovtowunwunxulyvkzvkx%,% }ynzwoywowuoutoutputqtsqutqutqutqtsoutovtowunwunxulyvkzvkx%,% {|n~zn sroqpnqplrpksqksphtqgtqftqftqgsphrphsqkqpkrqnqpnsrnusmvtly% *$ sroqpnqplrpksqksphtqgtqftqftqgsphrphsqkqpkrqnqpnsrnusmvtly% *$ zusmsrn srnqpnrqnqpksqksphtqgtqftpdtpdtqfsphrphrpkrqnqpnsrotrmvtly% +% srnqpnrqnqpksqksphtqgtqftpdtpdtqfsphrphrpkrqnqpnsrotrmvtly% +% ywtlusm sroqpnqpnrqnqplqplqpkqpkqpkqpkqplqplrqnrqnqpnqpnsrosrnusmy(#,& sroqpnqpnrqnqplqplqpkqpkqpkqpkqplqplrqnrqnqpnqpnsrosrnusmy(#,& yusmsrm wtlvtlwumvtmvtnvtntsntsntsnusnusnvtmvtmwumwunyvmzwm{wl|xly("1) wtlvtlwumvtmvtnvtntsntsntsnusnusnvtmvtmwumwunyvmzwm{wl|xly("1) yxujxuk zwnxvowuputpsrpsrpsrptspsrosrpsrprrprqotsotsovtmwumyvlzvky&!,% zwnxvowuputpsrpsrpsrptspsrosrpsrprrprqotsotsovtmwumyvlzvky&!,% |{m}yn qpnqplrphtqgtpdtpdtqfqpnrqotrmvtmy&!+% qpnqplcrphtqgtpdctpdccctqfcccqpnrqotrmvtmy&!+% zsrmsro sroqpnqpltpdtpdtpdqpnqpnsrmvtmy&!+% sroqpnqplccctpdtpdccctpdcccqpnqpnsrmvtmy&!+% yvtltrm qpnqpnrqnqplqpkrpkrpksqksqksqkrpkrpkqpkqplrqnqpnqpnsrosrmz'#-' qpnqpnrqnqplqpkrpkrpksqksqksqkrpkrpkqpkqplrqnqpnqpnsrosrmz'#-' ztrmsro vtlusmvtntsnsrnsrosrosrosrosrosrotsptsntsnusnwunxumzwm|xlz)#2* vtlusmvtntsnsrnsrosrosrosrosrosrotsptsntsnusnwunxumzwm|xlz)#2* xxukwtl ywovuputqssqtspsrntrmtrmtrltrmsrmrqmrqorrprqotsnvtmxulyvly'!-& ywovuputqssqtspsrntrmtrmtrltrmsrmrqmrqorrprqotsnvtmxulyvly'!-& {~znzwn qpnrpktpdtpdtpdtpdsphrpkrqnqpnsrnusmy&!+% qpnrpkccccctpdctpdtpdtpdcsphrpkrqnqpnsrnusmy&!+% zsrnqpn qpnrqnrpktqgtpdtpdtpdtpdtpdtpdtqgsqkqplqpnsrnusmy&!,& qpnrqnrpktqgtpdtpdctpdctpdtpdtpdctqgsqkqplqpnsrnusmy&!,& yvtmsrn qpnqplqpkrpksqkrphrphsphsphsphrphrphrphsqkqpkqplqpnqpnsroz)%/* qpnqplqpkrpksqkrphrphsphsphsphrphrphrphsqkqpkqplqpnqpnsroz)%/* zsrnqpn usmsrnsrosrorqorqnrqmrqmrqmrqmsrorqorqosrosrputowuoxvnyvmz*%1* usmsrnsrosrorqorqnrqmrqmrqmrqmsrorqorqosrosrputowuoxvnyvmz*%1* ywtlvtl wuputqtsqsrntrmtrkurjurjurjurjtrjtrlrqlsrorqotspusnwumxuly'",% wuputqtsqsrntrmtrkurjurjurjurjtrjtrlrqlsrorqotspusnwumxuly'",% z}ynzwo qplsqktqgtpdtpdtpdtpdtpdtpdtqfrphqplqpnsrousmy'"+% qplsqktqgctpdctpdtpdctpdtpdtpdctqfrphqplqpnsrousmy'"+% ~yqpnqpn qpnqplrphtpdtpdtpdtpdtpdrphqpkqpnsrousmy&!,& qpnqplrphtpdcctpdtpdccctpdctpdrphqpkqpnsrousmy&!,& yusmsrn qplqpksqkrphsphtqgtqftqftpdtpdtqftqftqgsphrphrpkqplqpnqpn~z*'.) qplqpksqkrphsphtqgtqftqftpdtpdtqftqftqgsphrphrpkqplqpnqpn~z*'.) ~ysroqqo srnqpnrqorqmrqlsqlsqksqjsqjsqjsqksqlrqlrqmrqorqoutowuoxvnz*%2+ srnqpnrqorqmrqlsqlsqksqjsqjsqjsqksqlrqlrqmrqorqoutowuoxvnz*%2+ yvtlusm vuptsqtsnurhvrgurgurgtqisrotsnvtmxuly'",% vuptsqtsnccurhvrgcurgurgctqicccsrotsnvtmxuly'",% {zwnywo qpksphtpdtpdtpdtpdtpdtpdtpdtpdsphrpkqpnrqotrmy'"+% qpksphtpdctpdctpdtpdctpdtpdtpdctpdsphrpkqpnrqotrmy'"+% ~zqpnrqn qpnqpktqgtpdtpdtpdtpdtpdtpdtpdtpdtqgrpkrqnrqotrmy'",& qpnqpktqgctpdtpdtpdtpdctpdtpdtpdctpdtqgrpkrqnrqotrmy'",& yusmsro tqgtpdtpdtpdtpdtpdtpdtqgrphqplqpn~{,)/* ccctqgtpdtpdcctpdtpdctpdtpdctqgrphcqplqpn~{,)/* ~zqpnrqn rqoqpnrqmsqlsqjsqitqhtqgtqftqgtqhsqisqjsqkrqlrqorqoutowun{+&3, rqoqpnrqmsqlsqjsqitqhtqgtqftqgtqhsqisqjsqkrqlrqorqoutowun{+&3, yvtmsrm vurtsptrktqhvrgurgurgurhsqlrqmrqotsnvtmxuly'",% vurtspctrktqhcvrgcurgurgcurhcsqlrqmrqotsnvtmxuly'",% {zwnxvp rpktqgtpdtpdtpdtpdtpdtpdtpdtpdtpdtqgsqkrqnqpnsrmz(#,& rpktqgtpdtpdctpdtpdtpdctpdtpdtpdctpdtqgsqkrqnqpnsrmz(#,& ~{qpnqpl rqnrpktqftpdtpdtpdtpdtqfsqkrqnqpntrmz&"-' rqnrpktqftpdccctpdccctpdctpdtqfsqkrqnqpntrmz&"-' ytrmrqo rpkrphtqgtpdtpdtpdtpdtpdtpdtqfsphqpkqpn}|z+(0+ rpkrphtqgctpdctpdtpdctpdctpdtpdctqfsphcqpkqpn}|z+(0+ ~zqpnqpl qpnrqnsqjtqhtpdtpduqfsqirqlrrptsowuo{,'3, qpnrqncsqjtqhctpdccctpduqfcsqicrqlrrptsowuo{,'3, yusmsrn utqtsptrkurhvrguqfurhsqlrqmsrotsnvtmxuly'",% utqtspctrkurhcvrgcccuqfurhcsqlrqmsrotsnvtmxuly'",% {zwoxvp sqktqftpdtpdtpdtpdtpdtpdtpdtpdtpdtpdtpdtpdtqfsqkqplqpnsrnz(#,& sqktqftpdtpdtpdtpdtpdtpdtpdtpdtpdtpdtpdtpdtqfsqkqplqpnsrnz(#,& ~{qpnqpl rqnsqktqftpdtpdtpdtpdtpdtpdtpdtpdtpdtpdtpdtpdrphqplqpnsrmz'#-' rqnsqktqftpdtpdtpdtpdtpdtpdtpdtpdtpdtpdtpdtpdrphqplqpnsrmz'#-' ytrmqpn rpktpdtpdtpdtpdtpdtpdtpdtqgqpkrqn|{y,) /+ rpkcctpdtpdctpdtpdctpdccctpdtpdtqgcqpkrqn|{y,) /+ ~zqpnqpl qqoqpltqitqgtpdtpdtpdtpduqftqhsqlrqosrputo{+'2+ qqoqplctqitqgctpdctpdtpdtpduqfctqhcsqlrqosrputo{+'2+ ytrmsro utqtsptrktqhvrgurgurgtqhsqlsrosrotsnwumxuly'!-& utqtspctrktqhcvrgcurgurgctqhcsqlsrosrotsnwumxuly'!-& {zwoxvp rphtpdtpdtpdtpdtpdtpdtpdtpdtpdtpdtpdtpdtpdtqfrphqplqpnsrnz'#,& rphtpdtpdtpdtpdtpdtpdtpdtpdtpdtpdtpdtpdtpdtqfrphqplqpnsrnz'#,& ~{qpnqpl rqnsqktqftpdtpdtpdtpdtpdtpdtpdtpdtpdtpdtpdtpdrphqplqpnsrnz(#-' rqnsqktqftpdtpdtpdtpdtpdtpdtpdtpdtpdtpdtpdtpdrphqplqpnsrnz(#-' ytrmqpn rphtqgtpdtpdtpdtpdtpdtpdtpdtpdtqgqpkrqn|{y,) /+ crphtqgtpdtpdctpdtpdctpdctpdtpdctpdtqgcqpkrqn|{y,) /+ ~zqpnrqn qpnqpktqitpdtpduqfsqisrorqouto{-(1+ qpnqpkctqicctpdccctpdcuqfcsqicsrorqouto{-(1+ ztrmsro vurtsqusmurjvrgurhsqirqlrqotspusnwumxuly& ,% vurtsqcusmurjcvrgcccurhsqicrqlrqotspusnwumxuly& ,% {zwnywp rphtpdtpdtpdtpdtpdtpdtpdrphqplqpnsrnz'#,& rphctpdtpdctpdccctpdctpdtpdtpdcrphqplqpnsrnz'#,& ~zqpnrqn rqnsqktqftpdtpdtpdtpdtpdtpdtpdrphqplqpnsrnz(#-' rqnsqktqfctpdtpdctpdtpdctpdtpdcctpdrphqplqpnsrnz(#-' ytrmrqo qpktpdtpdtpdtpdtpdtqgqpn~}z+(0+ qpkccctpdtpdcctpdtpdccctpdtqgcccqpn~}z+(0+ ~zqpnrqn qqoqpltqftpdtpdtpdtpduqfsqjrqorqouto{-(2+ qqoqplcctqfctpdctpdtpdtpdcuqfcsqjcrqorqouto{-(2+ ytrmsro vuputqtspsrntrmtrkuriurjurjtrjtrlsqlrqmsrosrotsnvtmxulyvly&!,% vuputqtspsrntrmtrkuriurjurjtrjtrlsqlrqmsrosrotsnvtmxulyvly&!,% z{xmzwo rphtpdtpdtpdtpdtpdtpdtpdtpdsqkqplqpnsrnz'#,& rphctpdtpdctpdctpdtpdtpdctpdctpdcsqkqplqpnsrnz'#,& ~yrqoqpn qpnrpktqgtpdtpdtpdtpdtpdtpdtqfsqkqplqpnsrnz(#-' qpnrpktqgctpdtpdctpdtpdctpdtpdcctqfsqkqplqpnsrnz(#-' yusmsro rqnqpksqkrphsphtqgtqftqftpdtpdtqftqftqgsphrphsqkqpkrqnqpn~z+(/* rqnqpksqkrphsphtqgtqftqftpdtpdtqftqftqgsphrphsqkqpkrqnqpn~z+(/* zsroqpn qpnrqnsqjtqhtpdtpdtqgsqkrqotspvto{,'2+ qpnrqncsqjtqhctpdccctpdctqgcsqkcrqotspvto{,'2+ yusmsrn xvovupsrpsrptspsrmtrmtrmtrmtrmrqmsrorrprqotsnvtmwumyvlyvky%,% xvovupsrpsrptspsrmtrmtrmtrmtrmrqmsrorrprqotsnvtmwumyvlyvky%,% {}ynzwn sqktpdtpdtpdtpdtpdrpkrqnqpnsrmz'#,& sqkccctpdtpdccctpdctpdctpdcrpkrqnqpnsrmz'#,& zsrnqpn qpnqpkrphtpdtpdtpdtpdtpdtpdrpkrqnqpntrmz(#-' qpnqpkrphctpdtpdctpdcctpdctpdtpdcrpkrqnqpntrmz(#-' yusmsrn qpnrqnqplqpkrpksqkrphrphrphrphrphrphsqkrpkqpkqplrqnqpnsro~y*&.) qpnrqnqplqpkrpksqkrphrphrphrphrphrphsqkrpkqpkqplrqnqpnsro~y*&.) zsrmsro rqoqpnqplsqlsqjsqitqhtqgtqftqftqgtqhsqisqkrqlsrorqotsowun{+&3, rqoqpnqplsqlsqjsqitqhtqgtqftqftqgtqhsqisqkrqlsrorqotsowun{+&3, yvtmsrm zwoxvoutotsqsrpsrpsrpsrosrosrprrprqotsptsovtmwumyvlzvkzvky& ,% zwoxvoutotsqsrpsrpsrpsrosrosrprrprqotsptsovtmwumyvlzvkzvky& ,% |~zn|yn rpktpdtpdtpdtpdtpdtpdtpdqpkqpnsrotrmz(#,& rpkctpdtpdctpdctpdtpdtpdcctpdccqpkqpnsrotrmz(#,& zusmsrn qpnrqnsqktpdtpdtpdtpdtpdtqfqpkqpnsrotrmy'",& qpnrqnsqkctpdtpdcctpdctpdctpdtqfcqpkqpnsrotrmy'",& yvtmsrn sroqpnqpnqpnrqnqplqplqplqplqplqplqplqplrqnqpnqpnqpnsrosrmz($.) sroqpnqpnqpnrqnqplqplqplqplqplqplqplqplrqnqpnqpnqpnsrosrmz($.) yusmsrm srnqpnqpnrqmrqlsqlsqksqjsqjsqjsqjsqlrqlrqmrqnrqotsovtoxvnz*%2+ srnqpnqpnrqmrqlsqlsqksqjsqjsqjsqjsqlrqlrqmrqnrqotsovtoxvnz*%2+ yvtlusm |ynzwoxvowuoutputputqutqutqtsotsoutowuovtnxulyvlzvk{wk{wkx& ,% |ynzwoxvowuoutputputqutqutqtsotsoutowuovtnxulyvlzvk{wk{wkx& ,% {{m~zn qpltpdtpdtpdtpdtqgrphqplqpnsrnusmy'",& qplccctpdtpdccctpdctpdtqgrphcqplqpnsrnusmy'",& yvtlusm sroqpnqpktqgtpdtpdtpdtpdtqfsphqplqpnsrnusmy'",& sroqpnqpkctqgtpdctpdtpdctpdctqfsphcqplqpnsrnusmy'",& yvtltrm trmsrnsrosroqpnqpnqpnqpnqpnqpnqpnqpnqpnqpnsrosrosrntrmusmy(#-' trmsrnsrosroqpnqpnqpnqpnqpnqpnqpnqpnqpnqpnsrosrosrntrmusmy(#-' ywtlvtm usmsrnrqosrorqorqnrqmrqmrqlrqmrqmrqnrqorqosrosrntsnwunyvmz+&1* usmsrnrqosrorqorqnrqmrqmrqlrqmrqmrqnrqorqosrosrntsnwunyvmz+&1* ywtlvtl }ym|ynzwnzwnxvoxvowunwunwunwunwunxvnyvmxumyvlzvk{wk{wkzvix% ,% }ym|ynzwnzwnxvoxvowunwunwunwunwunxvnyvmxumyvlzvk{wk{wkzvix% ,% z{m{m rqnqpksqksphtqgtqftpdtpdtpdtpdtqfsphrphrpkqplqpnqpnsrnusmy'",& rqnqpksqksphtqgtqftpdtpdtpdtpdtqfsphrphrpkqplqpnqpnsrnusmy'",& ywtkwtl srnqpnqpnqpksqkrphtqgtqftqftqftqfsphrphrpkqplqpnrqosrmvtmy&!+% srnqpnqpnqpksqkrphtqgtqftqftqftqfsphrphrpkqplqpnrqosrmvtmy&!+% ywtlusm vtlvtmusmtrmtrmsrmsrnsrnsrnsrnsrnsrnsrmtrmtrmusmvtmvtlwtly&!,& vtlvtmusmtrmtrmsrmsrnsrnsrnsrnsrnsrnsrmtrmtrmusmvtmvtlwtly&!,& xxukwtl vtlusmtrmtsnsrnsrosrosrosrosrosrosrotsptsnusnvtmwunyvmzwmz)#1* vtlusmtrmtsnsrnsrosrosrosrosrosrosrotsptsnusnvtmwunyvmzwmz)#1* xxukwtl }yl}yl|xm{xm{xnzwn{xn{xn{xnyvmzwmzwmzwmyvk{wk{wk{wj|xjzviy& -& }yl}yl|xm{xm{xnzwn{xn{xn{xnyvmzwmzwmzwmyvk{wk{wk{wj|xjzviy& -& {{m{m qpnrqnqpkrpksqkrphsphsphsphsphrphsqkqpkqplrqnqpnsrotrmvtmy&!+% qpnrqnqpkrpksqkrphsphsphsphsphrphsqkqpkqplrqnqpnsrotrmvtmy&!+% yxujxuk usmsrnqpnqpnrqnqpkrpksqksqksqksqkrpkqplrqnqqoqpnsrnusmwtly("+% usmsrnqpnqpnrqnqpkrpksqksqksqksqkrpkqplrqnqqoqpnsrnusmwtly("+% xwtkvtl xukwtlwtlwtlvtlvtlvtlvtlvtlvtlvtlvtlvtlvtlwtlwtlwtlwtkxukx("+% xukwtlwtlwtlvtlvtlvtlvtlvtlvtlvtlvtlvtlvtlwtlwtlwtlwtkxukx("+% yxujxuk wtkwtlvtlvtmvtmvtnvtntsntsntsntsnvtnvtmwumwumxulxulzwm{wlz+%2* wtkwtlvtlvtmvtmvtnvtntsntsntsntsnvtnvtmwumwumxulxulzwm{wlz+%2* yxujxuk {{zz{{zzzzzzzyxyyyyy,%/( {{zz{{zzzzzzzyxyyyyy,%/( {zz qpnqpnrqnqplqpkrpksqksqksqkrpkrpkqpkqplrqnqqoqpnsrntrmvtmy'",& qpnqpnrqnqplqpkrpksqksqksqkrpkrpkqpkqplrqnqqoqpnsrntrmvtmy'",& yyy zz~z~}z|{y|{y{zx|{x|{x|{x|{x|{x|{y|{y~{~yzyyx-&/( zz~z~}z|{y|{y{zx|{x|{x|{x|{x|{x|{y|{y~{~yzyyx-&/( yyy yxxyyyyyyyyyyyyxxxyy,%/( yxxyyyyyyyyyyyyxxxyy,%/( yyy xyyzyzzzzzzzyyyyyzzy2*2* xyyzyzzzzzzzyyyyyzzy2*2* yyy zzx,,*,,+-,+-,+--,-,+--,.-,.-,.-,/.,/.,/.-/.-//-0/-0/.0/.0/.10.10/10/21/21/210220320321321421431432432542642653653753764764764874975975985986:86:96;97;97;97;:7;:7<:7<:8<:8<;8=;8=;8=;9=<9=<9><9><9><9><:><:?=:?=:?=:?=;?>;?>;@>;@>;@>;A?CA>CA>CA>CA>DA?DA?DB?DB?DB?DB?DB?EC?EC?EC?EC?EC@EC@FD@FD@FDAFDAFDAFDAFDAGDAGDAGEAGEAGEAGEAGEAGEBGEBFEAGFAGFAGFAGFAGFAGFBGFBGFBGFAGFAGFAGFAHGBHGBHGBGFAGFAGFAGFAGFBGFBGFBGFAGFAGFAGFAGFAFEAFEAFEAFE@FE@FE@FE@FE@ED?ED?ED@ED@ED@ED@ED@ED?ED?DC?DC?DC>DC>DC>DC>CB>CB>CB>CB>CB>CB>CB>BA=BA=BA=BA=BA>BA=BA=A@:?>:?>:?>;?>;?>;>=9>=9>=9>=:>=:=<8=<8=<8=<9=<9=<9<;7<;7<;8<;8<;8;:6;:7;:7;:7;:7;:7:96:9698698598598587476476476476365365365254244244243132033133132022022021/21/11/11/10.00.00.00.0/-//-//-//-/.,/.,..,..,..,--,--+--+--+--+,,+,,*===VVT qpm&$ '%!(&")'#*($)'#*($,)%,)%-*&.+'.+'/,(0-)1.*2/*30+30+41,52-63.74/950:61;72<83=94>:5?;6@<6A=7B>8C?9E@:GCJF?KG@LHAMIBOKCQLDRMESNFTOGUPHVQIXSKXSKYTLZUMZUM[VM]WN]WN^XO_YP_YP`ZQa[Ra[Rb\Sc]Tc]Td^Ud^Ue_Vf`Wf`WgaXhbYhbYjcYkdZkdZle[le[mf\ng]ng]oh^oh^pi_qj`qj`rlarlasmbtnctncvodvodwpewpexqexqeyrfyrfzsg{th{th|ui|ui}vj}vj~wk~wkxlxlxlymymznzn{o{o|p|p|p}q}q~pqqrrrsssttttuuuttttsssrrrqq~p~p~p}n}n}n|m|m{l{lzlzl~yk~yk~yk}xj}xj|wi|wi{vh{vhzugzugytfxsexsewrdwrduqcuqctpbtpbrnarnaqm`pl_pl_ok^ok^nj]mi\mi\lh[lh[kgZjfYjfYieXieXhdWgcXgcXfbWeaVeaVd`Uc_Tc_Tb^Sb^Sa]R`\Q`\Q_[P^ZO^ZO]YN\XM\XMZWLYVLYVLXUKWTJWTJURHTQGSPFROEQNDPMCNKBLIAKH@JG?IF>HE=GD6?=5><5=;4<:3;92:8197086/75/64.53-42,31+31+20*0.)/-(.,'-+&-+&,*%+)$+)$)(#('"('"'&!'&!&% %$BB@}|y qpm&$ '%!(&"(&")'#)'#*($,)%,)%-*&.+'.+'/,(0-)1.*2/*30+30+41,52-63.74/950:61;72<83=94>:5?;6@<6A=7B>8C?9E@:GCJF?KG@LHAMIBOKCQLDRMESNFTOGUPHVQIXSKXSKYTLZUMZUM[VM]WN]WN^XO_YP_YP`ZQa[Ra[Rb\Sc]Tc]Td^Ud^Ue_Vf`Wf`WgaXhbYhbYjcYkdZkdZle[le[mf\ng]ng]oh^oh^pi_qj`qj`rlarlasmbtnctncvodvodwpewpexqexqeyrfyrfzsg{th{th|ui|ui}vj}vj~wk~wkxlxlxlymymznzn{o{o|p|p|p}q}q~pqqrrrsssttttuuuttttsssrrrqq~p~p~p}n}n}n|m|m{l{lzlzl~yk~yk~yk}xj}xj|wi|wi{vh{vhzugzugytfxsexsewrdwrduqcuqctpbtpbrnarnaqm`pl_pl_ok^ok^nj]mi\mi\lh[lh[kgZjfYjfYieXieXhdWgcXgcXfbWeaVeaVd`Uc_Tc_Tb^Sb^Sa]R`\Q`\Q_[P^ZO^ZO]YN\XM\XMZWLYVLYVLXUKWTJWTJURHTQGSPFROEQNDPMCNKBLIAKH@JG?IF>HE=GD6?=5><5=;4<:3;92:8197086/75/64.53-42,31+31+20*0.)/-(.,'-+&-+&,*%+)$+)$)(#('"('"'&!'&!&% %$BB@}|y qpm&$ '%!(&"(&")'#)'#*($,)%,)%-*&.+'.+'/,(0-)1.*2/*30+30+41,52-63.74/950:61;72<83=94>:5?;6@<6A=7B>8C?9E@:GCJF?KG@LHAMIBOKCQLDRMESNFTOGUPHVQIXSKXSKYTLZUMZUM[VM]WN]WN^XO_YP_YP`ZQa[Ra[Rb\Sc]Tc]Td^Ud^Ue_Vf`Wf`WgaXhbYhbYjcYkdZkdZle[le[mf\ng]ng]oh^oh^pi_qj`qj`rlarlasmbtnctncvodvodwpewpexqexqeyrfyrfzsg{th{th|ui|ui}vj}vj~wk~wkxlxlxlymymznzn{o{o|p|p|p}q}q~pqqrrrsssttttuuuttttsssrrrqq~p~p~p}n}n}n|m|m{l{lzlzl~yk~yk~yk}xj}xj|wi|wi{vh{vhzugzugytfxsexsewrdwrduqcuqctpbtpbrnarnaqm`pl_pl_ok^ok^nj]mi\mi\lh[lh[kgZjfYjfYieXieXhdWgcXgcXfbWeaVeaVd`Uc_Tc_Tb^Sb^Sa]R`\Q`\Q_[P^ZO^ZO]YN\XM\XMZWLYVLYVLXUKWTJWTJURHTQGSPFROEQNDPMCNKBLIAKH@JG?IF>HE=GD6?=5><5=;4<:3;92:8197086/75/64.53-42,31+31+20*0.)/-(.,'-+&-+&,*%+)$+)$)(#('"('"'&!'&!&% %$BB@}|y qpm&$ '%!(&"(&")'#)'#*($,)%,)%-*&.+'.+'/,(0-)1.*2/*30+30+41,52-63.74/950:61;72<83=94>:5?;6@<6A=7B>8C?9E@:GCJF?KG@LHAMIBOKCQLDRMESNFTOGUPHVQIXSKXSKYTLZUMZUM[VM]WN]WN^XO_YP_YP`ZQa[Ra[Rb\Sc]Tc]Td^Ud^Ue_Vf`Wf`WgaXhbYhbYjcYkdZkdZle[le[mf\ng]ng]oh^oh^pi_qj`qj`rlarlasmbtnctncvodvodwpewpexqexqeyrfyrfzsg{th{th|ui|ui}vj}vj~wk~wkxlxlxlymymznzn{o{o|p|p|p}q}q~potuuuwwwxxxxy{{zyzzyyywuuttropmmnmmllllkkjiihhgihg~e|cyax`w_}v_}v_}u^}u^{t^{t^yr\xq\yr]xq[xq[unYrkWrkVpiUpiUpiTngSngSmfRleQibNgaOgaOf`Nf`Nf`Me_Ld^Kd^Kc]Kd^Ld^Lc]Jc]Ja[I_YH`ZH_YG^XF]WF\VE\WF\WFYTDXSCXSCVQBTO?SN>SN?QL2B>2A=1@<0?;0?;0>:/=9.<8-;7,96+85+74*52*42,31+31+20*0.)/-(.,'-+&-+&,*%+)$+)$)(#('"('"'&!'&!&% %$BB@}|y qpm&$ '%!(&"(&")'#)'#+)%92/C:7L@=SECWHGYIHYIHYIHZJHZJHZJHZJHZJHZJIZJIZJI[KI[KI[KI[KI[KJ[KJ[KJ\LJ\LJ\LJ\LJ\LK]MK]MK]MK]MK]MK]MK^NL^NL^NL^NL^NL^NL_NL_OM_OM_OM_OM_OM_OM`OM`OM`OM`PM`PM`PN`PN`PN`PN`PN`PNaPNaPNaPNaQNaQNaQOaQOaQOaQObQObQObQObQObQObRObRObRObRObRPbRPbRPcRPcRPcRPcSPcSPcSPcSPcSPcSPcSPcSPdSQdSQdSQdSQdSQdTQdTQdTQdTQdTQdTQdTQdTQdTQeTReTReTReTReTReTReTReTReTReURfURb[GicOniZ[XNLJCPMDMKEGE@GE@GE@GE@GE@GE@FD?FD?FD>FD>FD>FD>FD>DB=DB=DB=EC=EC>EC>EC>EC=DBEC>ED?ED?FD?FD?FD?FD?ED?GE@GE@FD?FD?DC>DC>DC>DC>DB=BA9@>9@>9@>9=<7><7><7><7><7><7><7<;6<;6<;6<;6;:5<;6<;6<;6<;6;:6;:6;:6;:6;:5<;6;:5;:5:94:94:94:9498398387387376165165165154054054043/32-32.21-10+10,10,0/*/.*/.*/.*/.+//-/////////.........///11065376321-*)$('"('"'&!'&!&% %$BB@}|y qpm&$ '%!(&"(&"*($;31VHFG;990.-'$$  !!"## $!$!%"&"&#'$($ (%!)&!*'"+(#,($,($,)$-*%.*&.,&0,'0,'1-(2.(2.)2/*40*40*40+51,51,62,72,72,72,83-83-94.94.94.95/:50:50;60;60;70<71<71=82=92=92>92?92?92?:3?:3@;4A;4A;4A;4A;4A<5B=6B=6C>7C>7C?7D?8D?8E?8E?8E@9E@9FA9FA9GA9GA9GA:HB:HB:HC;HC;IC;IC;JDLF>MG?MG?MG?MG?MG?\WIrzwn{xoxul~{r}t}t}t~u~u}t}t}t|s|s~{r~{r|s|s}zq}zp}zp|yp}zq~{r~{r|s~{r|s|s~{r}zq}zq|yp}zq|yp}zq|yp|yp{xo{xo|yp{xo{xo{xo|yp|yp{xo{xo{xoyvmvskvskurjvsjvsjvsjuriurisphrogpmeoldoldnkcoldmkcljbljbkiakh`ig_hf^ge]ec[ec[dbZcaYdb[caZb`Yb`Yb`Xa_Wa_W_]V^\U][S\ZR\ZS[YRZXRZXRYWQXVPWUNWUOVTNVTNUSMUSMUSMRPJQOIPNHOMGMKELJDKICIGBHFAGE@FD?EC>DB=CA9?=8=<7<;6;:5:9498398487376265154032-32/11/LLJ665...PPP333+++LLL;;;222QQQ777442320)(#'&!'&!&% %$BB@}|y qpm&$ '%!(&"2-)WGFA75-'%  !!"" # #!$!%"%"&# &$ '$!($!(%!)&"*&"*'#+($-)$-*%.+&.+&/+&/,'0-(1.(2.)3/)3/*40+51+51,62-62-73-73.73.84.94/94/95/:5/:5/;60;71;71;71<72<72=82=82>93>93>93?:4@;5@;5@;5A;5A;5B<5B<5B=6C>7C>7D>7D>7D>7D?8D?8E@9E@9FA9FA:FA:GB:GB:HB;HB;HC;HC;IC;IC;JDKF>LF>LF>LG?LG?LG?MG@MG@NH@NH@NH@NH@OIAOIAOIAOJBOJB}|s|s}t}t~u~u~uvwwwxwwvvv~u~uvwvvxvwwwvuuvvu}s}s}s}s|s~t~t}s}s|r|r~{q|r~{q~{q{xozwn{xnyvlyvmxulxulwtkwtkvsjvsjuritqhwoldUSMSQKSQKQOIPNHOMGOMGNLGNLFMKEKICIGBHF@GE@FD?EC>BA=8=<7<;6;:5:9498398487276165054043/32.21-10,0/+VUS@@>21/[[[===///YYY;;;---SSS888///553/.*'&!&% %$BB@}|y qpm&$ '%!81.M?>5-+ !!!!" #!#!#!$!%"%#%# '# '$!'%!(%")&#)'#*'#+'#+($,)%,)%-*&/+'/,'0-(0-(1-)2.)2/*30+40+51+62,62-73-74.84/84/95/:60:60:60;61;61<71<82<82=82>93>93>:4>:4>:4?:4?:4@;5@<6@<6A<6B=7B=7B=7C>7C>7D>8D>8E?8E@9E@9F@9F@9F@:GA:GA:GB;GB;HCKE>LF>MG>MG>MG?MG?MH@MH@NI@NI@OIAOIAOIAOIBOIBPJBPJBQKBQKBQKCQKCQKCQLDQLD{|s}t~u~uv~u~uvv~u|s}t}t}t}t}t|s~{r}zp{xn{xmzwlzwm{xn{xn{xnzwnzwnzwnyvlyvlyvlwtjwtjvsivsiurhurhspgspgrofqneroepmcolbolbpmcnkbnkbmjamj`mj`he\gd[fcZ|qQOHPNGPNGOMFNLEMKDLJDKICJHBIGBIGBIGAHF@FD?CB=BA=8><7=;6;:5:9498387276165054/43.32-21,10+0/*0/+/.*/.*WVT<;910.ZZY<<94>94?:4?;4?;4@;5A<6A<6A=6A=7A=7B=7B=7C>8C?8C?8D?9E@:E@:E@:FA:FA:GA;GA;GB;HCJE>KF?KF?KF?LG?LG?MG@MG@NH@NH@NHANHAOIAPIAPIAPJBPJBPKCPKCQKCQKCRLDRLDRLDRLERLESMESMETNETNETNFTNFTNFTOGTOFyvkxujyvkyvkyvkyvkyvk{xm{xm|yn|yn|yn{xmzwlyvkyvkyvkxujwtivshurgvshvshurgspfspfroespfroeqneqneolcnkbmjamjamjali`li`kh_kh_kh_kh_jg^jg_if^he\_\TUSLUSMUSMRPJQOIPNHOMGNLGMKFLJEJHCJHCIGBIGBHFAGE@FD?CA<@?:?>9>=8=<7=<7<;6:9498398487376265154043/21-10,10-0/+ZYV@?0+(#!$"$"$" %# %# &# &$!&$!&$"'%"(&#(&#)&$)&$*'$*($+(%+)&,)&-*&-*'.+(.,(/,)0,)1-)1.*2.*2/+30,51,52-63.63.73.74/850961:61;71;72<83=93=94>:5>:5?;5?;6?;6@<6A<7A<7A=7B=7B=7C>8D?9D?9D?9D?:D?:E@:E@:FA;FA;FA;GBKF?KF?LF?LF?LF?LG@LG@MHAMHANIANIBNIBOJBOJBPJCPJCPKCPKCQKDQKDRLDRLDRLDRMERMESNFSNFTNFTNFTOGTOGTOGUOHUOHVPHVPHWPHWPHWQIWQIWQIWRJWRJ~{r~{r~{r|s|s}t}u|t}t}s}s~{qyvkyvkyvkzwlzwlyvkxukxukwtivshurgtqgnkbmjbmjankakh_jg_if]if]if]if]jg_if]if^^\Uuo]uo]PNGOMFOMGNLFMKEMKDLJDKICJHBIGBHFAFD?EC>DB=CA=8=<7<;6<;6;:5:9487276176165065154043/32.32.21,21-21-10,0/+]\Z?>;0/-ZYW;;;---XXX999+++VVV444111;;9)(#BB@}|y pnkUFE81.&$!&$!'%"'%"(&#(&#(&#)&#*'$*'$*(%*(&+)&,*&,*',*'-*'.+(.,(.,)0,)0-*0.*1.+2/,20,30,40,41-52.52.63/840850961961:62;72;83<94=94>:4?;5?;6@<6@=7A=8A=8B>8C?9C?9C?9D?:D?:E@:EA;EA;FA;GBIE?IE?JE?KF@KF@KF@LG@LG@MGAMGANHANIBNIBOIBOIBOICPJCPJCPKDPKDQLERLERLERMERMESNFSNFTNFTNFTNGTNGUOGVPGVPGVPHVPHVQIVQIWRIWRIXRJXRJXRJXRKXRKYSKYSKZTKZTKZTLZTLZTLZUMZUM|s|s}t}t}t~u~uxyyxvvv~uvv|s~{r~{r}zq{xozwnzwnxulwtlvskvskvsjqnfpmemkclia`^WYWQXVPXVOVTNTRLSQKQOJPNHOMGMKFKIDIHCHGBIGBHFAED?DC>BA9=<7<;6;:5:9498387365054/43.43/21.10-0/,0/,/.*.-)-,(ZYW=<90/,YYW998---WWW888+++UUU888666:97BB@}|y hf^?<4)(%)(%)(%)($)($*)%+*''&$0.&                !   xxzz{||}~}|{}}{yyyyyxu~t~t~t~{q|t~{s~{s}zr}zrzwoyvnyvnxumwtlkiaUSMTRLTRLRPJPNHOMGMKEKIDJHCIGBIGAHFAHF@ED?EC>BA9?=8><7<;6;:5:9598487276165054/43.43/32.21-10,10-/.*.-).-*-,)ZYW=<9/.+XWU:97,,,VVV888***TTT888<<;EECdb] [WL42-,+(,+',+'-,(-,(.-*#OI7kdPys_socnkbmj`ok^lh\jg]ge^^^^^]Y_^\\\\\\\\\\]\Z^^^`^Yfd\jg\pk]vp\~v_{_^`aa`a^}`~v_wp\pk\kg\fd\a_Y^^^]\Z\\\\\\\\\]\Z^^^a_Yfd\kg\pk\wp\x_}`^aaaaa^}`~v^vp\pk\kg\fd\a_Y^^^]\Z\\\\\\\\\]\Z^^^a_Yfd\jg\pk]vp\~v^{_~^`````^{_~v^vp\pk]kg\fd\a_Y^^^]\Z\\\\\\[[[[[[[[[[[[[[[[[[[[[ggg~~~xxyzz{{|}~}}|{zzzxyzyxxwvvu~t}s~{r}zq|r~{q|yp{xo{xoyvmyvmxulyvmyvmxulwtkuritqhhf^uo]uo]YWPWUNWUNVTNVTMUSLSQKQOIPNHOMGLJELJDKICIGBHFAED?EC>CA=8=<7;:5;:698387376265054/43/32.10,0/+0/+/.*.-)-,(+*&*)%)(%SRO874,+(WVS875**)VVV777'''SSS<<0=:253,111////////////00043/971<9/E@1KE2RJ0[Q3eX2m_3wg6|k7}k3}l7xh6o`2h[3]S3UL1NG3FA1<9.:8143/000/////////00043/:81<9.FA1NG3UL1^S3h[2o`2zi6n8褀m4n8zi6o`2h[2^S3UL1NG3FA1<9.:8143/000/////////00043/:81<9/E@1LF2SK1[Q3eX2k]2uf6zj7yh3zj7uf6k]2eX2[Q3SK1LF2E@1<9.:8143/000//////.....................;;;VVVwxyxxyzzzz{|}}}}~~~}}|~{{{zzzwwwwvvvxxxxxxww}u~{r{xozwnzwnyvmyvmxulxulxulwtkvsjvsjwtlvskig_YWPWUOVTMUSLTRKSQJQOJPNIOMHNLGKIDJHCHFAGE@FD?CB=BA9?=8<;6;:5;:5:9498487376265154043/32/21.10-10-0/+/.*.-)-,(-,)-,)UTR<;8/.+ZYW874,,*UUU777)))FFFPPOcb] \ZR32/43043043043/('"4+d[xj>fW(`Q#TFM@A68/3,(#" $ '"3,:0A5M?YIcQjVlWmXfS\KQBE8;16.*$%!$ )#5-<2F9RC_MiVoZoYoZiV_MRCE8<25-)#%!%!("4-:0A5M?WGbPgTgSgTaOWGN@B6:04-'!# <<<vvvwwxwwyzzz{}}|{{{yyyyyyxxvvvvwxwvuuuu~t~t|s~{r}zq{xo{xozwn{xoyvmyvmxulxulxulvsjwtkwtkwtkvsjvsjtqispgoldnkcUSMyyyUSLUSMTRLQOIPNHOMGOMGNLGMKFLJDJHBIGBIGBHFAED?DC>EC>CA9=<7;:5;:6:9498398476165154043/32.32.21-21-10,0/+/.*.-)-,(-,(,+(YXV=<9/.+WVT:96,+)UUU666***HHHfd_ a_Y763762762762?<38/{_[uf8eT YHTCI9 D6 7+.$*#      ! )" .$6*D5L;XE [FxaK\G[G P>I9;.1'/'& !      $ -% 2'=/J:R?_J aK|fOaK_J R?I9<.1&-$ #    " *" -#8+D5K:WD WCo\GWCUBL;E6 8,/%+$ #     888{{{ww~u~u~uwwvwxyy{{{zyyyxww~u}t}t|s}t~{r~{r~{r}zq}zq|ypzwnzwnzwn{xozwnzwnyvmyvmyvmxulxulwtkyvmxumxumwtlvsjtqhspgrofqnfqnfpmepmenkcmjblialiamjbljbTRLIGAA?:A?:?>9?>9?>9?>9@>9>=8>=8>=8@>9>=8>=8?=8=<7<;6<;6<;6><7><7><7><7<;6;:5;:5<;6;:5;:5;:5;:5;:5;:6YWPZXQUSMTRLSQKQOIOMGNLFLJDKICJHBIGAGE@CA<><7:9498387265054/43.32-21,10+10,0/+/.*/.*.-),+&+*&*)$*)&+*'*)&)(%ZYW:96,+(VUS764++)UUU+++BBBrpj dc_;:7;:7;:6;:6PDf[:gzlAfU`MWD Q?H8E7 >2 2) 3,'#($!% -&1' :. A3L;TA[FmcM \GXDQ?F7@3 6, 3++&%! "*%2*7, @3 H8R@[GaKuhQ aK[GR@F6?2 3(-% # #*# 0&:. A2K:R@WCg\H WCR@J:A3 =14+1*(#"  RRR}zq|yp|yp|yo|yo}zq~{r~{r|s|s|s|s~u~u~u}t~uvv~uvwv}t}t|s|s~{r~{r~{r}zq}zq}zq|yp|yp{xo{xo|yp}zq|yp|yp~{q|ypzwnxulxulwtkyvnxumxumvskurjurjtqitqitqitqirogqnfnldnldoldnkcnkcmjbmjblialialjbkiakiaig_ge]ge]ge]hf^ge]fd\fd\ec[dbZdbZdbZcaYb`X`^W_]V][T\ZR\ZR[YSYWPYWPXVOVTMVTNUSMTRLSQJRPIQOHRPJPNHOMGNLFLJEKIDJHCJHCHFAEC>DB=CA<7=;6:9497265043.32-21,10+0/*0/+.-(.-)-,(.-)-,(,+'+*&*)%*)&*)&('#'&"'&"XWU653*)&UTQ664&&&OOOAAAnle ihd?>;?>:?>:?>:O@zpPzTn^,fS]I ]I UB M<F8 @4>4:31- .+"*("'&#%%###!#" !!! $#!$#(%)%-&3* 7+D6 N=WD \GlbL ^IZF SA J; =0 ;13,2. 0-#,+&+*'))'''%'&$$$"''%)(%)(#/,"2. 3,;1>1 K; UB ^I bLpfO bL^I UB I9<.5* ,$ '"'#%#$# "" %%#&%#$$"##!'&#$"%"% )" 2( 8+B4M<SAWCfZFWCR@L< F8;090600,/,#)($*)&##!%$" 887mmmyyzzz{{{|{zzzzzyxyyxwwv~u~u}t~u~u~u~u}t}t|s}zq|yp{xo{xoyvmyvmxulyvmzwn{xo|yp{xozwoyvnzwnxulwtlurjtqispgrogpnfpmeqnepmdpmenldnldnkcmjbmjbkiajh`ig_hf^ig`hf`hf_ge]ge]ge]fd]ec\db[db[db[caZebZdbZdbZcaYcaYa_Wa_Wa_W`^V_]V^\U^\T^\U^\T][S\ZS\ZT[YR\ZS[YR[YR[YRYWQXVPWUOVTNUSMTRLSQKPNINLFMKEKIDJHBFD?EC>BA=8=<7<;7;:6:9598476254043/43/32.21-10,0/+/.*/.*.-*-,)-,),+'YXV:97/.+XXV666%%%AAAcaZ mliCB?CB?CB>CB>H: a|nEjY$`L\H YETAO> L>E:?6;7,=:25530/,//-1-!/)3+9- C5 M<R?\Ge^I]HVBR@ I: A4<381;91;:7430:95<:497/81=4B5J; SAYEbLkdN bLYESAH9 9@>9>=8=<7<;6;:598387287376265154032.21.10-10,0/+/.*/.+.-*-,)-,)+*'*)&*)&)(%('$SRO874,+)UUU111AAApnh qpmGFCGFCGFBGFB=/mvh=eSZFYEWCVC O? H:G<F>$B?5?=7<;976354054165142+2,5,;0?1G7Q?XD`^I [GTAL;E7 B6?6;5!A?8BA>>=9<;7;:7CB?B@9<6"@7D8F7 N<XD^IhcM ^IXDN<B3>1 5+ -&,'-*!53-651;:676343/-+%'$(#(! 0' 8,<.G7O=S@YWD R@M<H9 A5A7@9"B?6BA=66410-0/,.-*::8HHGllk|s|s|s|s|s|TRLRPKRPKQOIPNHPNHOMHOMGOMGNLGLJEKICIGBHFACA<@?:<;698487376265154043/32.10,10,0/+/.*/.+.-*-,),+(*)')(&*)&)(%('$('$VUS985**(OOOAAAsqk tsoJIFKJGKJFKJF>0^|nCwg6wg5vg7sd7ob:k`>f]Ae_Lba_\[Y[ZWZYW[ZWZXRXSEXR>^U;_U5h[5oa5uf6|xh6wg7rc6k^5eZ7cZ>aZF_ZKgfcddbba^a`\a\Mc\Ge\?fZ7m_5uf6zj7|k7zj7uf6m_5cW3_U7ZR:TN=SOBUSK[ZX[ZX[ZXYXVQPLMKDOK@PJ8TM6ZQ5_T3fZ4m_5pb5tsd6pb6k^5g[7dZ9?>9>=8=<7=<7;:5;:5:9498487376265154043/32.21-10,0/+/.*/.*.-)-,)-,(-,)+*'+*'+*'\[Y:97((&DDBigb xwsNMJONKONJONJ>0ǺʨǦƤŢţŢ춳˨˨˧˩˦ˤ˥˟챰Ũʢʟү~u~u}t}t|sjh`YWPXVOXVOUSLTRKSQJRPJRPIQOIPNHNLFJHBEC>B@;@>9<;6;:5:9598487376265154/43/43/43/32.21.0/+/.+.-).-*-,)-,),+(+*'+*')(%)(%ZYW21/DC>omg |{wRQNRQMRQMRQM<.ƺʦŢţ̧̧̢̤̦ˠ˝첱Ǩʡ̠ǞȦzzz.,$ww~u~u~unkcPNGOMFNLFLJDKICJHBIGAHF?HF@GE?EC=DBA@;@>9;:598387365054043/32.21-10,0/+0/+0/+0/+0/+/.*.-).-)-,(,+',+'+*'*)&)(%&%"%$!$# "!A?:qoi YXUYXUYXTYXT9,Ż청쳮믬'&!yvlyvlyvl|yo{xn{xngd\^\U][T][T[YSZXRXVQXVPVTNUSMTRLRPKOMHMKFLJDIGBED?DB=@?:>=8;:5:9498387276276265143/43/32.10,0/+/.*.-).-)-,(,+',+'+*'*)&*)&)(%)(%'&#&%"FD?rpi \[X\[X\[W\[W2&ǿ첮mkc~vvvv~u}tkiaSQKRPJSQKRPJRPJQOIPNHPNHOMGMKFKIDIGBIGBHFADB=>=8:9498398387276254/43.32-21,32.21-10,0/+/.*.-)nnnnnn,+',+'+*'*)&*)&)(%)(%('$&%#FD?sqk _^[_^[_^Z_^Z1&￶￷VSKz}tuwwwxxold\ZS[YRZXQXVOWUNVTMUSMSQJRPJQOIOMGNLFLJELJDKICJHBHFAFD?EC>BA=8=<7<;6;:5:9587276254/43/32.21-32.21-10,0/+/.*nnnnnnnnnnnn,+'+*'*)&*)&)(%)(%%$"%$!DB=wuo ieZieZjfZjfZ,"ƿºººººººººººººººººxxxHHH!ROD{xmxujwtiwtjxukxukyvkzwlzwmgd\ZXQYWPYWPXVPWUOVTNUSMSQJRPIQOIOMGOMGMKFLJEKIDJHCHFAFD?EC>BA=8=<7<;6:9487276165054/43/32.21-32.21-10,0/+nnnnnnnnnnnnnnnnnn+*'*)&*)&)(%)(%'&#$#!CB=ge_ if[jf[jf[jf[ (&!GDCA9=<7<;6:9498398476165165154043/32.21-32.21-10,nnnnnnnnnnnnnnnnnnnnnnnn*)&*)&)(%)(%&%"#" CA9A?:A?:?>9A?:B@;B@;@?:@?:B@;B@;B@;B@;A@;DB=CB=CB=EC>EC>EC>DC>FD?FD?FD?FD?FD?HFAIGBIGBIGBIGBIGBJHCJHCKICKIDKIDKIDMKFUSMb`Xsph~tzzxz{zzz{{{ge]WUNMKFOMGOMGOMGOMGNLFNLFNLFNLFNLFNLFNLFMKFNLFNLFMKFNLGOMHOMHOMHMKFMKFMKFMKFMKFMKFMKFMKFMKFMKFLJELJELJELJELJELJEMKFKIDKIDKIDKICJHCJHCIGBIGBIGBIGBIGBIGBGFAHFAFE@FD?EC>EC>DB=DB=DB=BA9?>9?>9?>9>=8?=8=<7><7<;6;:5;:5<;6<;6=<7=<7<;6;:5;:5;:5;:5;:5;:5;:5;:5:95XVOYWPUSMTRLTRLSQKRPJQOIOMHNLGMKEKIDIGAIGAHFAFD?CB=BA9?=8><7<;6:9498387276165054/43.32-21,10+/.)/.*/.)32.21-10,0/+/.*.-).-)-,(,+',+'+*'*)&*)&)(%)(%&%"#" B@;pnh spg%$!&%"'&#'&#('$('$)(%)(%*)&+*',+(+*',+(,+'-,(.-)/.*/.*/.)0/*10+21,21,32-54/650761872:83;94<:5=;6><7>=8@?:CA9@>9@>9=<7<;6;:5:9498398487376265154043/32.21-10,0/+/.*.-).-)-,(,+',+'+*'*)&*)&)(%)(%('$'&#FD?nlf spg%$!'&#('$('$)(%)(%*)&+*'+*&-,).-*.-*/.*0/+21.32.43/43/540651762872983:94;:5=<7>=8?>9@?:CAGE@IGBJHCKICKIDLJENLFOMGQOISQKTRLUSMVTMWUNXVPZXRZXR[YR\ZS\ZS][T^\U_]V`^W`^Va_XcaZec\ec\fd]ge^ge^hf_ge^hf_ig_ig_kialjbljbmkcnldnldpnfpnfrphsqisqitqisphtqiurjtqiurjurjwtlxulxulxulxulxulwtkxulwtkwtkwtkxulyvmxumyvnyvnzwoyvmzwoyvnyvmyvmyvmzwnzwnzwnyvmyvmxulyvmyvmzwn}zq~{r~{r|s~{r~{r|s|s}t}t~uv~u~u~uwwwvvvv~u~u}t~{r}t}t|s}zq|yp|yp{xozwnzwnzwnxukxukwtjwtkvsivsiurhurhspgrofqneqndqndpmcolcolcpmdpmepmepmenkcnkcmjbmjbmjbnkcmjbmjbliajg_jg_if^if^he]ec[gd\gd\gd\fc[fd\ge]fd\fd\ec\db[db[caZb`YcaYb`Xa_W`^W^\T^\T][T\ZS][T\ZS\ZT\ZT[YSZXRYWPWUOVTNVTMVTNVTNVTNTRLRPJQOIOMHNLFMKELJDJHBIGAHF@FD?CB=DB=BA9?=8<;6;:5;:5:9498387287376265154032.21-21-32.21-10,nnnnnnnnnnnnnnnnnnnnnnnn*)&*)&)(%)(%&%"%$!BA_]U~|`xb xbv`m $Ԫ(c &m bQRDRDRDRDRDRDPBPBPBNANAM@M@M@K>K>I=J=J=I=I=I=G;G;G;F:F:F:F:E9E9E9E9E9B7B7B7B7B7B7B7B7A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6B7B7B7B7B7B7B7B7E9E9E9E9E9E9F:F:F:G;G;G;G;I=I=J=J=J=K>K>K>M@M@dZ:~n~nf[;RDRDRDRDcRm & %ycRD@5@5=3=3<2<2:0:08/6-6-5,5,5,5,5,5,5,5,5,5,5, :0:0;1<2<2<2=3=3@5A6A6cB7D8C8E9cF:G;H<I=I=\Lj & ;1cccccc;1 cccccccc >><>><>><>><>><>><>><>><>><>><>><>><>><>><>><>><>><>><>><>><>><>><>><>><>>< >><>>=;>><<<:<<:;;9;;9;;9::8::8::8::8997:97::888799788788777577577566455365377577554233233233244233133233133133122022022011022022011/11/10.220??= %ycRD@5@5=3=3<2<2:0:08/6-6-5,5,5,5,5,5,5,5,5,5,5, :0:0;1<2<2<2=3=3@5A6A6cB7D8C8E9cF:G;H<I=I=\Lj & ;1cccccc;1 cccccccc ~}{a`]LKIMLJMLJMLIMLILKHJJHIIGIIGHHFGFDGFDFECFECFECEDBCB@CB@BB@BB@BB@BA?BA?A@>@?=IHF %ycRD@5@5=3=3<2<2:0:08/6-6-5,5,5,5,5,5,5,5,5,5,5, :0:0;1<2<2<2=3=3@5A6A6cB7D8C8E9cF:G;H<I=I=\Lj & ;1cccccc;1 cccccccc ~}{NNLMLJKJHJJHLKIKKIKKIJJHJJHIIGHGEGGEFFDFFDEEDFFDFFEEEDCCADDBEDBCCACCABB@A@>HHF %ycRD@5@5=3=3<2<2:0:08/6-6-5,5,5,5,5,5,5,5,5,5,5, :0:0;1<2<2<2=3=3@5A6A6cB7D8C8E9cF:G;H<I=I=\Lj & ;1cccccc;1 cccccccc }|yHGDEECDDBDCADCACB@BA?AA?A@>@?=?><@?=?><>><>=;=<:nn>><>=;==;nn=<:<<:BA? %ycRD@5@5=3=3<2<2:0:08/6-6-5,5,5,5,5,5,5,5,5,5,5, :0:0;1<2<2<2=3=3@5A6A6cB7D8C8E9cF:G;H<I=I=\Lj & ;1cccccc;1 cc;1;1;1;1cc POMPOLMMKLLJNMKMMKMMKLKIMLJMLJNMKNMKLLJJIGJIGIHFnnIIGJIGKJHnnIIGHGEPOM %ycRD@5@5=3=3<2<2:0:08/6-6-5,5,5,5,5,5,5,5,5,5,5, :0:0;1<2<2<2=3=3@5A6A6cB7D8C8E9cF:G;H<I=I=\Lj & ;1cccccc;1 cc;1;1;1;1cc }|yHGDFECFECEECEECEECEDBDCADCABA?A@>BA?AA??><>><>><>><nnn==;=<:>><=<:EDB %ycRD@5@5=3=3<2<2:0:08/6-6-5,5,5,5,5,5,5,5,5,5,5, :0:0;1<2<2<2=3=3@5A6A6cB7D8C8E9cF:G;H<I=I=\Lj & ;1cccccc;1 cc;1;1;1;1cc }JIFIHFIHEHGEIIGIHEHGEIHEHGEGFDFECEDBEDBDCAEDBEDBCB@CB@nnnA@>A@>A@>@@>HGE %ycRD@5@5=3=3<2<2:0:08/6-6-5,5,5,5,5,5,5,5,5,5,5, :0:0;1<2<2<2=3=3@5A6A6cB7D8C8E9cF:G;H<I=I=\Lj & ;1cccccc;1 cc;1;1;1;1cc NNLNMKNMKMLJMLJKKIKJHKKILKIKJHJJHIHFIIGIHFIHFGGEFFDGGEnnnEDBEDBEDBDDBLLJ %ycRD@5@5=3=3<2<2:0:08/6-6-5,5,5,5,5,5,5,5,5,5,5, :0:0;1<2<2<2=3=3@5A6A6cB7D8C8E9cF:G;H<I=I=\Lj & ;1cccccc;1 cc;1;1;1;1cc ~|IHFIHFIIGHGEIIGHHFnnnnnnnEDAEDACB@nnBB@A@>AA?nn==;<<:CB@ %ycRD@5@5=3=3<2<2:0:08/6-6-5,5,5,5,5,5,5,5,5,5,5, :0:0;1<2<2<2=3=3@5A6A6cB7D8C8E9cF:G;H<I=I=\Lj & ;1cccccc;1 cc;1;1;1;1cc QQORQOQQOPPNPOMONLnnnnnnnIIGJIGIHFnnFFDFECFFDnnEDBDCANMJ %ycRD@5@5=3=3<2<2:0:08/6-6-5,5,5,5,5,5,5,5,5,5,5, :0:0;1<2<2<2=3=3@5A6A6cB7D8C8E9cF:G;H<I=I=\Lj & ;1cccccc;1 cc;1;1;1;1cc NNLLLJKJHKKIJIGIHFJIFIHEHGEFECEDBFECFECFFDDDBCB@DDBDDBCCACB@CB@CCACCABB@AA?IIG %ycRD@5@5=3=3<2<2:0:08/6-6-5,5,5,5,5,5,5,5,5,5,5, :0:0;1<2<2<2=3=3@5A6A6cB7D8C8E9cF:G;H<I=I=\Lj & ;1cccccc;1 cc;1;1;1;1cc vurSRPSRPSRPQPNPPNOOMNNLLKILKILLJLKINMKMMKLLJKKIIHFIHFIHFHGEHGEHHFGFDFECEECDDBMLJ %ycRD@5@5=3=3<2<2:0:08/6-6-5,5,5,5,5,5,5,5,5,5,5, :0:0;1<2<2<2=3=3@5A6A6cB7D8C8E9cF:G;H<I=I=\Lj & ;1cccccc;1 cc;1;1;1;1cc AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAA@@@@@@???????????????>>>>>>>>>>>>=========<<<<<<<<<<<<;;;ZZZQPMMLJMLJMLJLKIMLILKHKJHJIGJIGIIGHHFHGEGGFIHFIIGIIGIIGIIGGFDFFDFECDDBDDBCB@CB@KJH %ycRD@5@5=3=3<2<2:0:08/6-6-5,5,5,5,5,5,5,5,5,5,5, :0:0;1<2<2<2=3=3@5A6A6cB7D8C8E9cF:G;H<I=I=\Lj & ;1cccccc;1 cc;1;1;1;1cc } %ycRD@5@5=3=3<2<2:0:08/6-6-5,5,5,5,5,5,5,5,5,5,5, :0:0;1<2<2<2=3=3@5A6A6cB7D8C8E9cF:G;H<I=I=\Lj & ;1cccccc;1 cccccccc %ycRD@5@5=3=3<2<2:0:08/6-6-5,5,5,5,5,5,5,5,5,5,5, :0:0;1<2<2<2=3=3@5A6A6cB7D8C8E9cF:G;H<I=I=\Lj & ;1cccccc;1 cccccccc POJ>><>><>><>><>><>><>><>><>><>><>><>><>><>><>><>><>><>><>><>><>><>><>>< >><>>=;>><<<:<<:;;9;;9;;9::8::8::8::8997:97::888799788788777577577566455365377577554233233233244233133233133133122022022011022022011/11/10.220??= %ycRD@5@5=3=3<2<2:0:08/6-6-5,5,5,5,5,5,5,5,5,5,5, :0:0;1<2<2<2=3=3@5A6A6cB7D8C8E9cF:G;H<I=I=\Lj & ;1cccccc;1 cccccccc kjh ~}{a`]LKIMLJMLJMLIMLILKHJJHIIGIIGHHFGFDGFDFECFECFECEDBCB@CB@BB@BB@BB@BA?BA?A@>@?=IHF %ycRD@5@5=3=3<2<2:0:08/6-6-5,5,5,5,5,5,5,5,5,5,5, :0:0;1<2<2<2=3=3@5A6A6cB7D8C8E9cF:G;H<I=I=\Lj & ;1cccccc;1 cccccccc ~}{NNLMLJKJHJJHLKIKKIKKIJJHJJHIIGHGEGGEFFDFFDEEDFFDFFEEEDCCADDBEDBCCACCABB@A@>HHF %ycRD@5@5=3=3<2<2:0:08/6-6-5,5,5,5,5,5,5,5,5,5,5, :0:0;1<2<2<2=3=3@5A6A6cB7D8C8E9cF:G;H<I=I=\Lj & }|yHGDEECDDBDCADCACB@BA?AA?A@>@?=?><@?=?><>><>=;=<:nn>><>=;==;nn=<:<<:BA? %ycRD@5@5=3=3<2<2:0:08/6-6-5,5,5,5,5,5,5,5,5,5,5, :0:0;1<2<2<2=3=3@5A6A6cB7D8C8E9cF:G;H<I=I=\Lj & POMPOLMMKLLJNMKMMKMMKLKIMLJMLJNMKNMKLLJJIGJIGIHFnnIIGJIGKJHnnIIGHGEPOM %ycRD@5@5=3=3<2<2:0:08/6-6-5,5,5,5,5,5,5,5,5,5,5, :0:0;1<2<2<2=3=3@5A6A6cB7D8C8E9cF:G;H<I=I=\Lj & bbbbbbbbb bbbbbbbbb }|yHGDFECFECEECEECEECEDBDCADCABA?A@>BA?AA??><>><>><>><nnn==;=<:>><=<:EDB KKIKKIJJHJJHIIGHGEGGEFFDFFD %ycRD@5@5=3=3<2<2:0:08/6-6-5,5,5,5,5,5,5,5,5,5,5, :0:0;1<2<2<2=3=3@5A6A6cB7D8C8E9cF:G;H<I=I=\Lj & blYlYbbblYlYb bbbbbbbbb }JIFIHFIHEHGEIIGIHEHGEIHEHGEGFDFECEDBEDBDCAEDBEDBCB@CB@nnnA@>A@>A@>@@>HGE CB@BA?AA?A@>@?=?><@?=?><>>< %ycRD@5@5=3=3<2<2:0:08/6-6-5,5,5,5,5,5,5,5,5,5,5, :0:0;1<2<2<2=3=3@5A6A6cB7D8C8E9cF:G;H<I=I=\Lj & blYlYbbblYlYb bbbbbbbbb NNLNMKNMKMLJMLJKKIKJHKKILKIKJHJJHIHFIIGIHFIHFGGEFFDGGEnnnEDBEDBEDBDDBLLJ MMKMMKLKIMLJMLJNMKNMKLLJJIG %ycRD@5@5=3=3<2<2:0:08/6-6-5,5,5,5,5,5,5,5,5,5,5, :0:0;1<2<2<2=3=3@5A6A6cB7D8C8E9cF:G;H<I=I=\Lj & bbblYlYlYbbb bbbbbbbbb ~|IHFIHFIIGHGEIIGHHFnnnnnnnEDAEDACB@nnBB@A@>AA?nn==;<<:CB@ EECEDBDCADCABA?A@>BA?AA??>< %ycRD@5@5=3=3<2<2:0:08/6-6-5,5,5,5,5,5,5,5,5,5,5, :0:0;1<2<2<2=3=3@5A6A6cB7D8C8E9cF:G;H<I=I=\Lj & bbblYlYlYbbb bbbbbbbbb QQORQOQQOPPNPOMONLnnnnnnnIIGJIGIHFnnFFDFECFFDnnEDBDCANMJ IHEHGEIHEHGEGFDFECEDBEDBDCA %ycRD@5@5=3=3<2<2:0:08/6-6-5,5,5,5,5,5,5,5,5,5,5, :0:0;1<2<2<2=3=3@5A6A6cB7D8C8E9cF:G;H<I=I=\Lj & bbblYlYlYbbb bbbbbbbbb NNLLLJKJHKKIJIGIHFJIFIHEHGEFECEDBFECFECFFDDDBCB@DDBDDBCCACB@CB@CCACCABB@AA?IIG KKIKJHKKILKIKJHJJHIHFIIGIHF %ycRD@5@5=3=3<2<2:0:08/6-6-5,5,5,5,5,5,5,5,5,5,5, :0:0;1<2<2<2=3=3@5A6A6cB7D8C8E9cF:G;H<I=I=\Lj & blYlYbbblYlYb blYlYlYlYlYlYlYb vurSRPSRPSRPQPNPPNOOMNNLLKILKILLJLKINMKMMKLLJKKIIHFIHFIHFHGEHGEHHFGFDFECEECDDBMLJ HHFEDA %ycRD@5@5=3=3<2<2:0:08/6-6-5,5,5,5,5,5,5,5,5,5,5, :0:0;1<2<2<2=3=3@5A6A6cB7D8C8E9cF:G;H<I=I=\Lj & blYlYbbblYlYb blYlYlYlYlYlYlYb |{x999AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAA@@@@@@???????????????>>>>>>>>>>>>=========<<<<<<<<<<<<;;;ZZZQPMMLJMLJMLJLKIMLILKHKJHJIGJIGIIGHHFHGEGGFIHFIIGIIGIIGIIGGFDFFDFECDDBDDBCB@CB@KJH ONLIIG %ycRD@5@5=3=3<2<2:0:08/6-6-5,5,5,5,5,5,5,5,5,5,5, :0:0;1<2<2<2=3=3@5A6A6cB7D8C8E9cF:G;H<I=I=\Lj & bbbbbbbbb bbbbbbbbb } IHFJIFIHEHGEFECEDBFECFECFFD %|eVGC8B7?4>4=3=3;1:08/6-6-5,5,5,5,5,5,5,5,5,5,5, .&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.& .&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.& .&.&.&-&.&<2>3>4>3@5;1b``cccI=L?L?L?L?]Mj & %h[KH<F:B7@5>4>4<2;19/6-6-5,5,5,5,5,5,5,5,5,5,5, .&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.& .&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.& .&.&.&-&1)7.<2=3=3=3=3?4=3@5>4B7H<J>L?L?L?L?]Mj & &j ]ML?K>I=F:C8A6=3;1907.6-5,5,5,5,5,5,5,5,5,5,5, .&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.& .&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.& .&.&.&/'2*9/;1=3=3=3=3>4?4@5C8D9I=J>L?L?L?L?]Mj & &j ]ML?L?L?J>H<D9@5=3;18/6-5,4+4+3+4+3+4+4+4+5,5, .&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.& .&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.& .&.&.&/'2*6-90<2<2=3A6?5C8E9E9H<I=I=L?L?L?L?]Mj & GFAGFAGFAGFAGFAGFAGFAGFAGFAGFAGFAGFAGFAGFAGFAGFAGFAGFAGFAGFAGFAGFAGFAGFAGFA GFAGFAGFAGFAGFAGFAGFAGFAGFAGFAGFAGFAGFAGFAGFAGFAGFAGFAGFAGFAGFAGFAGFAGFAGFAGFAGFAGFAGFAGFAGFAGFAGFAGFAGFAGFAGFAGFAGFAGFAGFAGFAGFAGFAGFAGFAGFAGFAGFAGFAGFAGFAGFAGFAGFAGFAGFAGFAGFAGFAGFAGFAGFAGFAGFAGFAGFAGFAGFAGFAGFAGFAGFAGFAGFA&j ]ML?L?L?J>I=E:C8@5<28/6-5,3+4+2*3+2*2*4+4+4+4+ .&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.& .&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.& .&.&.&1)3+6-8/:1;1<2=3=3A6B7C8F:H<I=L?L?L?L?]Mj & rrrrrrrrrrrrrrrrrrrrrrrrr rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr&j ]ML?L?L?J>I=F:C8@5=3:06-5,2*2*1)1)/'1)1)2*3+3+ -&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-& -&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-& -&/'/'2*3+6-7.90:0;1<2=3@5B7C8E:G;J>L?L?L?L?]Mj & rrrrrrrrrrrrrrrrrrrrrrrrr rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr%k aPPCPCPCM@L?I=E:C8=3;18/5,5,3+0(1)1)1)1)2*2*3+ /'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/' /'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/' /'0(2*3+4+5,6-7.90;1<2>3A6C8D9H<J>M@PCPCPCPCaPk % rrrrrrrrrrrrrrrrrrrrrrrrr rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr&o!dRSESESERDPCL?I=F:B7=3;19/6-5,5,5,3+3+4+4+4+4+ 4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+ 4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+ 4+2*3+3+5,5,6-7.90;1<2@5B7F:I=K>M@RDSESESESEdRo!& uuuuuuuuuuuuuuuuuuuuuuuuu uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu&q!iVWHWHWHUGSEQCL?I=D9B7=3;1:08/6-7.5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,6-7.7.9/:0<2?4B7E9I=L?PCRDUGWHWHWHWHiVq!& [XN[XN[XN[XN[XNYVLWTKURJSPHPNFOMEMKDLJCKIBKIBKIALJBNKCOLDPMEPMDPMDPMDPMDPMD [XN[XN[XN[XN[XN[XN[XN[XN[XN[XN[XN[XN[XN[XNZWLZWMYVLXULXUKWTKVSJVSKURJTQITQISPHQOGROGPNFPNFOMEOMENLENLDMKDMKDLJCLJCLJCKIBKIBKIBKIBKIBKIBKIAKIAKIALJBLJBLJBNKCNKCNKCNKBOLDOLDPMEPMEPMEPMDPMDPMDPMDPMDPMDPMDPMDPMDPMDPMDPMDPMDPMDPMD'u"lY\L\L\LZKXIUGRDL?I=F:B7=3<2;1:09/9/9/6-6-6-6- 6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-VG_N6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6- 6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6- 6-6-6-9/9/9/9/:0;1>3A6E9I=K>PCccZK\L\LcclYu"' {xo{xo{xo{xo{xo{xozwnyvmyvmxulxulxulxulxulyvmzwn{xo{xo|yp}zq~{r~{r~{r~{r~{r {zv~}ya`]ĝ'w"p\aPaPaP_N\LXIUGRDL?I=F:A6A6>3<2;1;1;1:0:0:0:0 :0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0bQٮ):0:0:0:0:0:0p Ϧ(%%%y"p Ϧ(E9:0:0:0Ş'%:0:0%%:0:0:0bQٮ)&%%%:0bQٮ):0E9#Ϧ(%%Ϧ(y":0:0:0bQٮ):0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0 :0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0 :0:0:0;1;1;1<2<2<2A6E9G;K>PBSEcc]MaPaPccp\w"ĝ' |s|s|s|s|s|s|s|s|s}t}t}t}t}t}t}t}t}t}t}t}t}t}t}t}t qqqqqqqoooooonnnnnllljjjjjjhhhhhffffffeccccbb}`}`}`}`|_z^z^x\x\x\w[w[uZuZuZrWrWqWqWqWqWqWoUnUnUnUlSlS~Ǡ'{"v`fTfTfTdRbQ_NZKUGRDL?I=F:B7A6A6@5>3>3>3>3<2<2 <2<2<2<2<2<2<2<2<2<2<2<2<2<2<2<2<2<2<2<2<2<2dRۯ)<2<2<2<2<2<2r!&<2<2<2<2G;Ǡ'%r!r!%ѧ(PB<2<2&&<2<2<2dRۯ)dR<2<2<2<2dRۯ)<2o[&G;<2<2j ۯ)PB<2<2dRۯ)<2<2<2<2<2<2<2<2<2<2<2<2<2<2<2<2<2<2<2<2<2<2<2<2<2<2<2 <2<2<2<2<2<2<2<2<2<2<2<2<2<2<2<2<2<2<2<2<2<2<2<2<2 <2<2>3>3>3>3A6A6B7F:I=K>PBSEXI]MaPcccfTfTv`{"Ǡ' }t}t}t}t}t}t}t}t~u~u~u~u~u~u~u~u~u~u~u~u~u~u~u~u~u TSPq Sʛ Fʛ Fʛ Fʛ Fʛ FȚ FȚ FȚ CȚ CȚ CǙ CǙ >Ė >Ė >Ė >• >• >• >Ė >Ė >Ė >Ǚ CǙ CȚ CȚ CȚ FȚ Fʛ Fʛ Fʛ Fʛ Fʛ Fʛ S lS̤(~"}flYlYlYkXhVdRaP\LUGRDM@J=G;F:E9B7B7A6A6A6A6A6 A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6hVݱ*&&ˣ(ݱ*l A6u"&A6A6A6A6A6s^ݱ*}f}fݱ*l A6A6_Nө(ө(hVA6A6hVݱ*hVA6A6A6A6hVݱ*A6A6hV#&ݱ*'}fA6A6A6hVݱ*A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6 A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6 A6A6A6A6B7B7E9E9G;I=M@PBTFXI_NcRfTccclYlY}f~"̤( yvkyvkyvkyvkyvkyvkyvkyvkyvkyvkyvkyvkyvkyvkyvkyvkyvkyvkyvkyvkyvkyvkyvkyvkyvk ]\Zq • w hhhhhffffffffffffffeeeecccbbbb}`}`}`}`}`bbbccceeeefffffffffffffffhhhhhw Ė lSϦ(#j s^s^s^s^o[jWfTaP\LWHRDPBK>J=I=G;G;F:F:F:E9E9 E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9lY޲)E9E9E9o!޲)E9w"%E9E9E9E9E9E9%%%%E9E9~g֫)~g~g޲)~gE9lY޲)lYE9E9E9E9lY޲)E9XI޲)~"bQE9v`o!E9E9E9lY޲)E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9 E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9 E9E9F:F:G;G;I=J=K>NAQCVGZK_NdRiVlYcccs^s^j #Ϧ( ~{r~{r~{r~{r~{r~{r~{r~{r|s|s|s|s|s|s|s|s|s|s|s|s|s|s|s|s|s \[XqSy y ZEjZEjZEhXDhXDhXDfWCfWCfVBfVBeTAeTAcR?cP>cP>cO=bO=bO=cP>cR?cR?eTAeTAfVBfVBfWCfWCfXDhXDhXDjZEjZEjZEy y lSԪ)$m yc yc xbv`s^p\lYfTaP\LWHSEPBM@K>K>J=J=I=I=I=I= I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=o[*&&&ح)#I=y!&I=I=I=I=I=I=\Lح)*\LI=j *j I=I=j *j o[*o[I=I=I=I=o[*I=I=&Υ(&&ح)j I=&&ĝ'*&&#I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I= I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I= I=I=I=J=J=ccbccbb_NdRjWccv`xbyc ccm $Ԫ) }t}t}t}t}t}t}t}t}t}t}t}t}t}t}t}t}t}t}t}t}t}t}t}t}t [ZXq̝ jZEE5E5E5E5E5A2A2A2A2A2A2@1@1@1@1?1?1?1?1?1=/=/=/<.<.<.<.:-:-:-8+8+8+8+8+:-:-:-<.<.<.=/=/=/=/?1?1?1?1@1@1@1@1A2A2A2A2A2A2E5E5E5E5E5E5\Gj̝ lSح)$u"hhh~g|exbs^o[iVcR]MZKVGTFRDQCPBNANANANANA NANANANANANANANANANANANANANANANANANANANANANAWHs^s^s^aPNANANAaPjWNANANANANANANAjWjWNANAjWjWNANANANAjWjWWHs^WHNANANANAWHs^NANANAWHs^jWNANANAs^s^s^s^s^s^jWNANANANANANANANANANANANANANANANANANANANANANANANA NANANANANANANANANANANANANANANANANANANANANANANANANA NANANANAPBcbbbcbcfTlYs^cc~ghhccu"$ح) zzzzzzzzzzzzzzzzz{{{{{{{{ WVTqEjjE5w[E5w[E5w[A2uZA2uZA2rW@1rW@1qW?1qW?1qW=/oU=/nU<.nU<.lS:-lS8+kR8+kR8+lS:-lS<.nU<.oU=/oU=/qW?1qW?1rW@1rW@1uZA2uZA2uZA2w[E5w[E5w[E5jj lS޲)&{"q!q!q!m m j ~g xbs^lYfTaP]MZKXIWHVGVGTFTFTFTF TFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTF TFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTF TFTFTFVGVGWHXIZK]M_NdRjWp\t_zdhl m q!q!q!q!{"&޲) yyyyyyyyzzzzzzzzzzzzzzzzz `_\q̝ j\GE5E5E5E5E5E5A2A2A2A2A2@1@1@1@1@1?1?1?1?1=/=/=/<.<.<.<.:-:-:-8+8+8+8+8+:-:-:-<.<.<.=/=/=/=/?1?1?1?1@1@1@1@1A2A2A2A2A2E5E5E5E5E5E5E5\Gj̝ lS,Ǡ'$####}"z"y#r!m j ~g yc t_p\o[lYlYkXkXjWjWjW jWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjW jWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjW jWjWjWkXlYlYo[p\s^v`|ehl q!u!y!|"~"####$Ǡ', yyyyyyyyxxxxxxxxxxxxxxxxx ]\YqEjjE5w[E5w[E5w[A2uZA2uZA2rW@1rW@1rW?1qW?1qW=/oU=/nU<.nU<.lS:-lS8+kR8+kR8+lS:-lS<.nU<.oU=/oU=/qW?1qW?1rW@1rW@1uZA2uZA2uZE5w[E5w[E5w[F6jj lS9*̤('''&&&&%$$##|"{"y!y#w"w"u!u!u!u! u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u! u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u! u!u!u!u!w"y#y"z"|"##$$%&%'&''''̤(*9 vvvvvvvvwwwwwwwwwwwwwwwww a`^q̝ j\GE5E5E5E5E5E5A2A2A2A2A2A2@1@1@1@1?1?1?1?1=/=/=/<.<.<.<.:-:-:-8+8+8+8+8+:-:-:-<.<.<.=/=/=/=/?1?1?1?1@1@1@1@1A2A2A2A2A2E5E5E5E5E5E5F6\Gj̝ lSB:1+++,++*޲)ݱ*ح)Ԫ(ѧ(Υ(ˣ(ʢ(ɡ(Ǡ'Ǡ'Ş'Ş'Ş'Ş' Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş' Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş' Ş'Ş'Ş'Ş'Ǡ'Ǡ'ʢ(ˣ(Υ(Ϧ(ө(ح)ۯ)޲**++,++++1:B ~u~u~u~u~u~u~u~u~u~u~u~u~u~u~u~u~u~u~u~u~u~u~u~u~u WVTqEjjE5w[E5w[E5w[A2uZA2uZA2uZ@1rW@1rW?1qW?1qW=/oU=/nU<.nU<.lS:-lS8+kR8+kR8+lS:-lS<.nU<.oU=/oU=/qW?1qW?1rW@1rW@1uZA2uZA2uZE5w[E5w[E5w[F6jj lS |yp|yp|yp|yp|yp|yp|yp|yp|yo|yo|yo|yo|yo|yo|yo|yo|yo|yo|yo|yo|yo|yo|yo|yo|yo ZYVq̝ j\GF6E5E5E5E5E5A2A2A2A2A2A2@1@1@1@1?1?1?1?1=/=/=/<.<.<.<.:-:-:-8+8+8+8+8+:-:-:-<.<.<.=/=/=/?1?1?1?1?1@1@1@1@1A2A2A2A2A2E5E5E5E5E5E5F6\Gj̝ lS%|eVGC8B7?4>4=3=3;1:08/6-6-5,5,5,5,5,5,5,5,5,5,5, .&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.& .&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.& .&.&.&-&.&<2>3>4>3@5;1b``cccI=L?L?L?L?]Mj & zzzzzzzzzzzzzzzzzzzzzzzzz SRPxZ3DtRZxXZxXZxXZwXZwXZvXYvXYvYYvYY~uXY~uXZ|sXZ|sXY{rWYzrXYzrXYzrXY{rWY|sXZ|sXY~uXYvYYvYYvXYvXYvXZwXZwXZxXZxXZxXZwVJ9-u^%h[KH<F:B7@5>4>4<2;19/6-6-5,5,5,5,5,5,5,5,5,5,5, .&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.& .&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.& .&.&.&-&1)7.<2=3=3=3=3?4=3@5>4B7H<J>L?L?L?L?]Mj & ~~~~~~ \[YxҨ)7xHxX}^}^}^}^}^}^|^|^|^|^|^{^{^{^{^{^{^{^{^y^y^y^x^x^x^x^x^x^x^w^w^w^w^w^x^x^x^x^x^x^y^y^y^{^{^{^{^{^{^{^{^{^|^|^|^|^|^}^}^}^}^}^}^{[{L<ԫ/w`&j ]ML?K>I=F:C8A6=3;1907.6-5,5,5,5,5,5,5,5,5,5,5, .&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.& .&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.& .&.&.&/'2*9/;1=3=3=3=3>4?4@5C8D9I=J>L?L?L?L?]Mj & |s|s|s|s|s|s|s|s|s|s|s|s|s|s|s|s|s|s|s|s|s|s|s|s|s iiix]H<D9@5=3;18/6-5,4+4+3+4+3+4+4+4+5,5, .&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.& .&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.& .&.&.&/'2*6-90<2<2=3A6?5C8E9E9H<I=I=L?L?L?L?]Mj & ||||||||}}}}}}}}}}}}}}}}} iiizԫ/BWmttttttssssstttttttttttssssssstttttssssssttttttttttttssssstttttuo_Jծ7yb&j ]ML?L?L?J>I=E:C8@5<28/6-5,3+4+2*3+2*2*4+4+4+4+ .&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.& .&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.& .&.&.&1)3+6-8/:1;1<2=3=3A6B7C8F:H<I=L?L?L?L?]Mj & }t}t}t}t}t}t}t}t}t}t}t}t}t}t}t}t|s|s|s|s|s|s|s|s|s iiizeIaw~~~~~~~}}}~~~~~~~~~{iQ={d&j ]ML?L?L?J>I=F:C8@5=3:06-5,2*2*1)1)/'1)1)2*3+3+ -&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-& -&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-& -&/'/'2*3+6-7.90:0;1<2=3@5B7C8E:G;J>L?L?L?L?]Mj & ~u~u~u~u~u~u~u~u~u~u~u~u~u~u~u~u~u~u~u~u~u~u~u~u~u iii{ծ6MgpWֱ?{e %k aPPCPCPCM@L?I=E:C8=3;18/5,5,3+0(1)1)1)1)2*2*3+ /'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/' /'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/'/' /'0(2*3+4+5,6-7.90;1<2>3A6C8D9H<J>M@PCPCPCPCaPk % vvvvvvvvvvvvvvvvvvvvvvvvv iii|iSoĸĸĸ÷÷÷÷÷¶¶¶¶÷÷÷÷÷ĸĸĸz]D}g#&o!dRSESESERDPCL?I=F:B7=3;19/6-5,5,5,3+3+4+4+4+4+ 4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+ 4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+ 4+2*3+3+5,5,6-7.90;1<2@5B7F:I=K>M@RDSESESESEdRo!& |yo|yo|yo|yo|yo|yo|yo|yo{xn{xn{xn{xn{xn{xn{xn{xn{xn{xn{xn{xn{xn{xn{xn{xn{xn iii}ְ=XubٵH~h%&q!iVWHWHWHUGSEQCL?I=D9B7=3;1:08/6-7.5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,6-7.7.9/:0<2?4B7E9I=L?PCRDUGWHWHWHWHiVq!&vvvvvvvvv~u~u~u~u~u~u~u}t}t}t}t}t}t}t}t}t iii~n]}ŧĦĦĦĦħħħħħ榦¦ææħħħħĦĦĦĦĦŧǸhLj''u"lY\L\L\LZKXIUGRDL?I=F:B7=3<2;1:09/9/9/6-6-6-6- 6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-r!$6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6- 6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6- 6-6-6-9/9/9/9/:0;1>3A6E9I=K>PCccZK\L\LcclYu"' wwwwwwwwxxxxxxxxxxxxxxxxx iii~ײA`½½½½½½½½½½½½½½½½½½½½½lٷMk)ĝ'w"p\aPaPaP_N\LXIUGRDL?I=F:A6A6>3<2;1;1;1:0:0:0:0 :0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0$c:0:0:0:0:0:08`NNN=8`WH:0:0:0YN:0:0NN:0:0:0$cSNNN:0$c:0WHE`NN`=:0:0:0$c:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0 :0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0 :0:0:0;1;1;1<2<2<2A6E9G;K>PBSEcc]MaPaPccp\w"ĝ' yvkyvkyvkyvkyvkyvkyvkyvkyvkzvkzwlzwlzwlzwlzwmzwmzwlzwlzwmzwmzwmzwmzwmzwmzwm iii}F«fϽƿԷdzӶdzҵǴҵǴҵǴҵǴҵǴҵǵҵǵдǵдǵдŴдŴдŴдƵеƵеƵдŴдŴдŴдǵдǵҵǵҵǵҵǴҵǴҵǴҵǴҵǴӶdzӶdzԷîŕDzsSk)Ǡ'{"v`fTfTfTdRbQ_NZKUGRDL?I=F:B7A6A6@5>3>3>3>3<2<2 <2<2<2<2<2<2<2<2<2<2<2<2<2<2<2<2<2<2<2<2<2<2%c<2<2<2<2<2<28N<2<2<2<2[KYE88E`t_<2<2NN<2<2<2%c%<2<2<2<2%c<2'N[K<2<2,ct_<2<2%c<2<2<2<2<2<2<2<2<2<2<2<2<2<2<2<2<2<2<2<2<2<2<2<2<2<2<2 <2<2<2<2<2<2<2<2<2<2<2<2<2<2<2<2<2<2<2<2<2<2<2<2<2 <2<2>3>3>3>3A6A6B7F:I=K>PBSEXI]MaPcccfTfTv`{"Ǡ' }t}t}t}t}t}t}t}t}t}t}t}t}t}t}t}t}t|s|s|s|s|s|s|s|s iii IڿkѴֿֿֿֿֿӷțxUm+̤(~"}flYlYlYkXhVdRaP\LUGRDM@J=G;F:E9B7B7A6A6A6A6A6 A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6$cNNYc+A69NA6A6A6A6A6ĝ'cۯ)ۯ)c+A6A6y"``$A6A6$c$A6A6A6A6$cA6A6$BNcSۯ)A6A6A6$cA6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6 A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6 A6A6A6A6B7B7E9E9G;I=M@PBTFXI_NcRfTccclYlY}f~"̤( {{{{{{{{{{{{{{{{{{{{{{{{{ `_]}f߇ۨߴߴߴ޳޳޳ߴߴߴޭq㐀k)Ϧ(#j s^s^s^s^o[jWfTaP\LWHRDPBK>J=I=G;G;F:F:F:E9E9 E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9%cE9E9E9,cE99NE9E9E9E9E9E9GNGNE9E9ݱ*`ݱ*ݱ*cݱ*E9%c%E9E9E9E9%cE9}fc>z"E9Ǡ',E9E9E9%cE9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9 E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9 E9E9F:F:G;G;I=J=K>NAQCVGZK_NdRiVlYcccs^s^j #Ϧ( |yp|yp|yp|yp|yp|yp|yp|yp|yo|yo|yo|yo|yo|yo|yo|yo|yo|yo|yo|yo|yo|yo|yo|yo|yo RQOqqqqqqqoooooonnnnnllljjjjjjhhhhhffffffeccccbb}`}`}`}`|_z^z^x\x\x\w[w[uZuZuZrWrWqWqWqWqWqWoUnUnUnUlSlStspԪ)$m yc yc xbv`s^p\lYfTaP\LWHSEPBM@K>K>J=J=I=I=I=I= I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=%cNNN`AI=9NI=I=I=I=I=I=g`cgI=޲)c޲)I=I=޲)c޲)%c%I=I=I=I=%cI=I=NYNN`޲)I=NNTcNN>I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I= I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I= I=I=I=J=J=ccbccbb_NdRjWccv`xbyc ccm $Ԫ) ~{r~{r~{r~{r~{r~{r~{r~{r|s|s|s|s|s|s|s|s|s|s|s|s|s|s|s|s|s TTRHGE@?=@?=@?=@?=AA?AA?@@>@@>AA?AA?AA?@@>@@>@@>>><>><==;==;==;<<:;:8;;9;;9<<:;;9<<:<<:<<:<<:<<:==;=<:=<:<<:;;9;:8;:8;;9;;9;;9::8::8;:8:97::8::899799787577577588688688688688688676466455344244254243143143133122021/21/331NMJPOMح)$u"hhh~g|exbs^o[iVcR]MZKVGTFRDQCPBNANANANANA NANANANANANANANANANANANANANANANANANANANANANAiV&&&l NANANAl ~"NANANANANANANA~"~"NANA~"~"NANANANA~"~"iV&iVNANANANAiV&NANANAiV&~"NANANA&&&&&&~"NANANANANANANANANANANANANANANANANANANANANANANANA NANANANANANANANANANANANANANANANANANANANANANANANANA NANANANAPBcbbbcbcfTlYs^cc~ghhccu"$ح) ޲)&{"q!q!q!m m j ~g xbs^lYfTaP]MZKXIWHVGVGTFTFTFTF TFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTF TFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTFTF TFTFTFVGVGWHXIZK]M_NdRjWp\t_zdhl m q!q!q!q!{"&޲) ,Ǡ'$####}"z"y#r!m j ~g yc t_p\o[lYlYkXkXjWjWjW jWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjW jWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjWjW jWjWjWkXlYlYo[p\s^v`|ehl q!u!y!|"~"####$Ǡ', $$$$$$$$$$$$$$$$$$$$$$$$$ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$9*̤('''&&&&%$$##|"{"y!y#w"w"u!u!u!u! u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u! u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u! u!u!u!u!w"y#y"z"|"##$$%&%'&''''̤(*9 iViViViViViViViViViViViViViViViViViViViViViViViViV iViViViViViViViViViViViViViViViViViViViViViViViViViViViViViViViViViViViViViViViViViViViViViViViViViViViViViViViViViViViViViViViViViViViViViViViViViViVB:1+++,++*޲)ݱ*ح)Ԫ(ѧ(Υ(ˣ(ʢ(ɡ(Ǡ'Ǡ'Ş'Ş'Ş'Ş' Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş' Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş'Ş' Ş'Ş'Ş'Ş'Ǡ'Ǡ'ʢ(ˣ(Υ(Ϧ(ө(ح)ۯ)޲**++,++++1:BA6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6 A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6promoe-0.1.1/data/Almond-blue/PlEdit.txt000066400000000000000000000001651134030477200200070ustar00rootroot00000000000000[Text] Normal=#62d8ff Current=#ffffff NormalBG=#0f262e SelectedBG=#1d5e73 MbFG=#62d8ff MbBG=#0f262e Font=Arialpromoe-0.1.1/data/Almond-blue/PlayPaus.bmp000066400000000000000000000022701134030477200203220ustar00rootroot00000000000000BM6(* rrpxrrpxrrpxrrpxrrpxrrpxrrpxrrpyrrpyrrpyrrpyrrpyrrpyrrpyrrpyrrpyrrpyrrpyrrpyrrpjxbtkxuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuuscucucuxxvxxv뭒xxvxxvxxv뭑xxvxxvxxvxxvxxvxxvxxvxxvxxvxxvm|dxm|{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y}}{}}{뭕}}{뭕}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{~~~뭀~뭀~뭀~~~~ꪀ~~~~~~~~~~~~~~~~~~뭚뭃뭙ꪃsi}osi뭆sjsjsjtjptjpromoe-0.1.1/data/Almond-blue/PosBar.bmp000066400000000000000000000221201134030477200177460ustar00rootroot00000000000000BMP$6(3 $)5)6)7)7)7*7)7)7)7)7)7)7)7)7)8)8+8+8+8+9+9+9+9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9+9+9+9+8+8+8)8)8)7)7)7)7)7)7)7)7*7)7)7)7)6)5)2(3*3)17)7)7)7)7)7)7*7)7)7)7)6)5)2(37)7)7)7)7)7)7*7)7)7)7)6)5)2(3Ü$ĝ$ĝ$ĝ$ĝ$ƞ$ƞ$ƞ$ƞ$ƞ$ǟ$ǟ$ǟ$ɡ%ɡ%ɡ%ɡ%ˢ%ˢ%ˢ%ˢ%ˢ%ˢ%̣%̣%̣%̣%̣%̣%̣%̣%̣%Τ%Τ%Τ%Τ%Τ%Τ%Τ%Τ%Τ%Τ%Τ%Τ%Τ%Ц%Ц%Ц%Ц%Ц%Ц%Ц%Ц%Ц%Ц%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%ѧ%Ц%Ц%Ц%Ц%Ц%Ц%Ц%Ц%Ц%Ц%Τ%Τ%Τ%Τ%Τ%Τ%Τ%Τ%Τ%Τ%Τ%Τ%̣%̣%̣%̣%̣%̣%̣%̣%̣%ˢ%ˢ%ˢ%ˢ%ˢ%ˢ%ˢ%ɡ%ɡ%ɡ%ǟ$ǟ$ǟ$ƞ$ƞ$ƞ$ƞ$ƞ$ƞ$ĝ$ĝ$ĝ$Ü$Ü$Ü$›$›$›%›%›%$̣%̣%ˢ%ˢ%ˢ%ˢ%ˢ%ˢ%ˢ%ɡ%ɡ%ɡ%ǟ$ǟ$ǟ$ƞ$ƞ$ƞ$ƞ$ƞ$ƞ$ĝ$ĝ$ĝ$Ü$Ü$Ü$›$›$̣%̣%ˢ%ˢ%ˢ%ˢ%ˢ%ˢ%ˢ%ɡ%ɡ%ɡ%ǟ$ǟ$ǟ$ƞ$ƞ$ƞ$ƞ$ƞ$ƞ$ĝ$ĝ$ĝ$Ü$Ü$Ü$›$›$ꩤ!$!"!#!$!$ $ $!$!›$!›$"›$"›$"›$"›$"›$"›$"Ü$"Ü$"ŝ$"ŝ$"ŝ$"ŝ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ƞ$"ŝ$"ŝ$"ŝ$"Ü$"Ü$"Ü$"›$"›$"›$"›$"›$"›$!›$!›$!$!$ $!$!$!#!"!# #!$~ $!#›$"›$"›$!›$!›$!$!$ $!$!$!#!"!# #!$›$"›$"›$!›$!›$!$!$ $!$!$!#!"!# #!$꩒vronoopppqqqqqqqqqqqrrrrsssssuuuuuuuuvvvvvvvwwwwwwwwwwyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyywwwwwwwwwwvvvvvvvuuuuuuuuussssrrrrqqqqqqqqqqqqppoooonnnmmljlprsrrrrqqqqqqqqqqqqppoooonnnmmlsrrrrqqqqqqqqqqqqppoooonnnmmlꩍr!ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccl!ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccꩉojcmppqqqqrrrrrsssuuuuvvvvvvwwwwwx x x x x x x x x x x z z z z z z z z z z zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz z z z z z z z z z z x x x x x x x x x x wwwwwvvvvvvuuuussssrrrrrqqqpppoooonnmicgmcccccccccccccccccccccccccccccccccccussssrrrrrqqqpppoccccccꩃj!c{g g!i!i!j j l l l mmn n n n!o!o!o!o!o!p!p!p!p!p!q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q!p!p!p!p!p!o!o!o!o!o n n n mmm l l l j i!i!g!g g g!g!~f~ v`c{d!ccccccccccccccccccccccccccccccccccc l l j i!i!g!g g cccccc~fzccs]v`v`v`v`v`v`v`ybybybybzczczczc{d{d{d{d{d{d{d}e}e}e}e}e}e}e~f~f~f~f~f~fggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg~f~f~f~f~f~f}e}e}e}e}e}e}e{d{d{d{d{d{dzczczczcybybybybv`v`v`v`v`v`v`v`t^t^r]r]r]r]q\q\cv`zcccccccccccccccccccccccccccbcccccccczczczczcybybybybv`v`v`v`v`v`v`v`t^ccccccyb{cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccct^zcccccccccccccccccccccccccccccұcccccccccccccccccccccccccccccpromoe-0.1.1/data/Almond-blue/Readme.txt000066400000000000000000000003301134030477200200150ustar00rootroot00000000000000AlmondXMMSPlayer v1 by Laszlo Simon (laszlo.simon@gmail.com) My first XMMS skin, made for my Almond metacity theme. changelog: 2006.06.19. - first public release 2006 Laszlo Simon. General Public Licensepromoe-0.1.1/data/Almond-blue/ShufRep.bmp000066400000000000000000000557321134030477200201530ustar00rootroot00000000000000BM[6(\U[oZoZoZoZoZoZoZoZoZoZoZoZlXlXlXlXlXlXkWkWkWkWkWkWkWjWjWjWjWjWiViViVgTgTgTgTfSeSeSeSdRdRdRcQoZoZoZoZoZoZoZoZoZoZoZcQoZoZoZoZoZcQoZoZoZoZoZoZkWkWjWjWjWjWjWiViVcQoZoZoZoZoZcQoZoZoZoZoZoZcQjWqjWqgTqgTqgTqgTqgTqgTqgTqgTqgTpeSpeSndRndRndRnbPl_Nh\Lh\Lh]Lk_Nk]LqjWqjWqgTqgTqgTq]LqjWqjWq]LqjWqjWqgTpeSndRndRndRn]LqjWqjWq]LqjWqjWqgTicQcQcQcQaOaOaOaOaOaO_N_N_N_N_N_N_N_N_N_N_N_N_N_N_N_N_N]L]L]L]L]L]LYIUFTETERDRDTEWHYIWHWHWHcQcQcQcQcQaOaOaOaOaOcccccccccccccaO_N_N_N_N]L]L]L]L]LcccccccccccccWHZJhZJhYI}eWH}eUFhUFcJ=cJ=cJ=cJ=cUFhWHhWHgUF}eTEzcRDxaTEzcccccccM@u_OAxaPBhZJhZJhYI}eWH}eUFcchchchchchccYIhWHgUF}eTEzcRDxaccZJhZJhPBhcccccybTETETETEPBL?I=I=J=OAOAcF:cF:cF:cF:cM@PBPBPBPBPBOAL?I=F:F:I=L?L?I=I=I=I=G;G;G;G;G;I=J=TETETETETEPBL?I=I=J=ccTEcTEcTEcTEcTEccPBPBPBPBOAL?I=F:F:I=cccccccccccccJ=M@u_M@u_J=ccccq\I=c>4c>4c>4cB7cI=u_J=s]J=s]J=mYccccF:p[cccccccccmYF:u_M@u_M@u_J=ccccccu_cu_cu_cu_cu_ccJ=s]J=s]J=mYccccccM@u_M@u_F:u_M@u_M@ccmYG;G;G;G;D9ccccD9C8c:0c90c90c;1cC8D9D9C8C8C8C8B7ccccB7B7=3=3<2;1;1;1=3?4@5>4?4G;G;G;G;G;D9ccccccG;cG;cG;cG;cG;ccD9C8C8C8C8B7ccccccccccccccccc?4>4hU>4hU>4cccchU=3c4,c6-c4,c4,7.=3hU=3hU=3hU=3eRcccc=3eRccccccc_N7.cQ90hU>4hU>4hU>4cccccchUchUchUchUcccc>4hU=3hU=3eRcccccc>4hU>4hU90hU>4cccccQ8/8/8/8/8/8/8/8/8/8/6-c0(c3+^M1)c1)]L7.7.6-6-6-6-6-6-6-4,4,4,4,4,3+0(0(0(0(0(0(0(0(1)3+8/8/8/8/8/8/8/8/8/8/cc8/c8/ccc8/cccc8/6-6-6-6-6-6-4,4,4,ccccccccccccc3+4,^M4,^M4,^M4,^M4,^M1)c,%+$+$,%,%c,%,%1)]L1)]L1)]L1)]L1)]L1)]L0(YIcccccccccXH-&^M4,^M4,^M4,^M4,^M4,cc^Mccccc^Mcccc4,]L1)]L1)]L1)]L1)]Lcc4,^M4,^M-&^M4,^M4,ccYI,%+$,%+$+$+$+$+$+$,%,%,%*#*#*#)#)#)#)#)#)#,%,%*#*#*#)#)#)#)#)#)#)#)#)#("("("("("("("("'!'!,%,%+$,%+$+$+$+$+$+$ccccccccccccc+$*#*#*#)#)#)#)#)#)#ccccccccccccc'!'!TE'!TE& TE& TE& TE& TE& TE& TE& TE%TE%TE%TE%TE$RD#RD#RD#RD#RD$RD" RD" RD" RD" TE'!TE'!TE& TE& TE& TE" TE'!TE'!TE" TE'!TE'!TE& TE%TE$RD#RD#RD" TE'!TE'!TE" TE'!TE'!TE& RDoZoZoZoZoZoZoZoZoZoZoZoZlXlXlXlXlXlXkWkWkWkWkWkWkWjWjWjWjWjWiViViVgTgTgTgTfSeSeSeSdRdRdRcQoZoZoZoZoZoZoZoZoZoZoZcQoZoZoZoZoZcQoZoZoZoZoZoZkWkWjWjWjWjWjWiViVcQoZoZoZoZoZcQoZoZoZoZoZoZcQjWqjWqgTqgTqgTqgTqgTqgTqgTqgTqgTpeSpeSndRndRndRnbPl_Nh\Lh\Lh]Lk_Nk]LqjWqjWqgTqgTqgTq]LqjWqjWq]LqjWqjWqgTpeSndRndRndRn]LqjWqjWq]LqjWqjWqgTicQcQcQcQaOaOaOaOaOaO_N_N_N_N_N_N_N_N_N_N_N_N_N_N_N_N_N]L]L]L]L]L]LYIUFTETERDRDTEWHYIWHWHWHcQcQcQcQcQaOaOaOaOaOcccccccccccccaO_N_N_N_N]L]L]L]L]LcccccccccccccWHZJhZJhYI}eWH}eUFhUFcJ=cJ=cJ=cJ=cUFhWHhWHgUF}eTEzcRDxaTEzcccccccM@u_OAxaPBhZJhZJhYI}eWH}eUFcchchchchchccYIhWHgUF}eTEzcRDxaccZJhZJhPBhcccccybTETETETEPBL?I=I=J=OAOAcF:cF:cF:cF:cM@PBPBPBPBPBOAL?I=F:F:I=L?L?I=I=I=I=G;G;G;G;G;I=J=TETETETETEPBL?I=I=J=ccTEcTEcTEcTEcTEccPBPBPBPBOAL?I=F:F:I=cccccccccccccJ=M@u_M@u_J=hUhUhUhUq\I=c>4c>4c>4cB7cI=u_J=s]J=s]J=mYhUhUhUhUF:p[cccccccccmYF:u_M@u_M@u_J=hUhUhUhUccu_cu_cu_cu_cu_ccJ=s]J=s]J=mYhUhUhUhUccM@u_M@u_F:u_M@u_M@ccmYG;G;G;G;D9hUhUhUhUD9C8c:0c90c90c;1cC8D9D9C8C8C8C8B7hUhUhUhUB7B7=3=3<2;1;1;1=3?4@5>4?4G;G;G;G;G;D9hUhUhUhUccG;cG;cG;cG;cG;ccD9C8C8C8C8B7hUhUhUhUccccccccccccc?4>4hU>4hU>4hUhUhUhUhU=3c4,c6-c4,c4,7.=3hU=3hU=3hU=3eRhUhUhUhU=3eRccccccc_N7.cQ90hU>4hU>4hU>4hUhUhUhUcchUchUchUchUcccc>4hU=3hU=3eRhUhUhUhUcc>4hU>4hU90hU>4cccccQ8/8/8/8/8/8/8/8/8/8/6-c0(c3+^M1)c1)]L7.7.6-6-6-6-6-6-6-4,4,4,4,4,3+0(0(0(0(0(0(0(0(1)3+8/8/8/8/8/8/8/8/8/8/cc8/c8/ccc8/cccc8/6-6-6-6-6-6-4,4,4,ccccccccccccc3+4,^M4,^M4,^M4,^M4,^M1)c,%+$+$,%,%c,%,%1)]L1)]L1)]L1)]L1)]L1)]L0(YIcccccccccXH-&^M4,^M4,^M4,^M4,^M4,cc^Mccccc^Mcccc4,]L1)]L1)]L1)]L1)]Lcc4,^M4,^M-&^M4,^M4,ccYI,%+$,%+$+$+$+$+$+$,%,%,%*#*#*#)#)#)#)#)#)#,%,%*#*#*#)#)#)#)#)#)#)#)#)#("("("("("("("("'!'!,%,%+$,%+$+$+$+$+$+$ccccccccccccc+$*#*#*#)#)#)#)#)#)#ccccccccccccc'!'!TE'!TE& TE& TE& TE& TE& TE& TE& TE%TE%TE%TE%TE$RD#RD#RD#RD#RD$RD" RD" RD" RD" TE'!TE'!TE& TE& TE& TE" TE'!TE'!TE" TE'!TE'!TE& TE%TE$RD#RD#RD" TE'!TE'!TE" TE'!TE'!TE& RDfd]ec\ec\caZa_Wa_W_]U^\T_]V^\U\ZS\ZSZXQXVOWUNUSLTRKRPJQOJPNIOMGMKEJHBIGAHF@GE?GF@KJD~{r|s~t~t}s}s|r|r~{q~{q|yp{xo|yp{xozwnxulzwnxulwtkvsjvsjuriurjurjtqitqirogqnfqnfpmepmepmeoldoldnkcomenldljbljbkiaig_ig_hf_hf_ge^fd]ge^dbZcaYcaYb`Xa_Wa_W_]V][S][S\ZR\ZS\ZS\ZS[YR[YRXVOVTNTRLSQJRPIQOIPNHNLFLJEKIDJHCJHBKIC~{r~{r~{r}s|r|r|r|r~{q}zp|yo{xnxulwtkwtkurivsjvsjvsjvsjtqisphrogspgrofqnfpmepmdpmdoldnkcmjbkiankcljbljbkiaig_ig_ig_jg_jg_ge]ec[ec[ec[ec[dbZcaYb`Xa_W`^V`^V_]V^\U^\U][T\ZS\ZS[YRYWPZXRWUNVTMSQJRPJPNIOMHNLGLJELJDKICJHBIGAHF@~{r~{r|yp|yp|yp{xpzwo|yp}zp{xo{xozwo{xo{xo|yq{xpzwnyvmzwoxulxulwtlvsktqhspgsphrogrogsphsqisqirphpngpngnldmjbliaig_ig_hf^hf^ge]fd\ge]fd\ec[ec[_]V^\U][T][T\ZT[YRYWPXVOXVOXVOXVPWUNUSMTRLUSMSQKRPJQOIOMHNLFMKEKIDJHBIGBHF@FD?EC>CB=|yp{xo{xo{xoyvmzwozwnzwnyvm{xozwnxulxulvsjvsjvsjvsjuriurispgspgsphtqhtqhqnfqnfqnepmdpmdnkcmjbliajg_kh`if^if^if^gd\ge]ge]he]fd\caY`^W`^W`^Wa_W[YR[YS[YTVUPXWTYXUYXUWVTWVQVTOTRLTRKTRKSQKPNHOMGNLFMKELJEJHCIGAGE@EC>CADB=A@;vsjurjsqitrmutqutrwvrwvrtsqtspqpkrof@<097/@<0sph?;0pmdpme>:/nldmkc:6+=9.kiakia75-ljbljbmjb<8-if^ge]ig_53,96+96+ec[85*85*20)a_W`^V`^W`^W_]V_]V\ZS\[Y`_[fc[mhZqkYoiVkfWdaY]\XYWPZXQYWPWUN"!?=5SQJSQKRPIQOIPNIOMGOMGNLGMKFLJEKIC~t}u~|w~|}|zyw~|wxwuurjvskurj@<1sphB?7qnfrog=9.rogA>6oldnkc:6+kia<:2hf^ig_kh`?<4liaig_jg_;91fd\ec\caZ750b`Xa_Wa_X`^W_]V_]V^\T][T[YR^^\ec\{vgr{yqxsd\ZRSQJ!  QOHPNGNLFKIBKICKICJHCJHCHFAFD?EC>EC>DB=BA2A=1uri@<1@<0:80?;0pme=9.ljbljb;8-jh`96+85*85*fc[96+96+85*dbZ74*dbZcaYcaY74*63)1/(a_W`^V_]V_]V^\U^\U][T_^[kg\|fbcbbxab^RRPIA?:!OMFQOHNLENLFLJEKIDJHCJHCIGAFE@FD?EC>DC>EC>yvmxvoxwuxcccc}zwonkb>:/li`li`kh_<8,lialia=8)mjb=8)kh`lia;8-kia;7,he]he]fc[:6+fd\ec[dbZ40#b`Xb`Yb`X74*b`X`^Va_WcaYb`Xa_W^\U^\U[YR`_[kg[vnTbcbbvmRhcUUSLVTN?<4@>9PNHOMGNLGMKFLJDKIDIGBGE@GE@GE@FD?DB=uz{bcccwzzwnC?3B>2A=1sph@<0rogrog>:/old=9.mjbmjb<8-kia:7,:7,53,hf^:7,53+96+fd\85*ec[dbZb`X74)63)0.'_]V_]V_]U_]U][T\ZS\ZS_^ZjfZ_YEbbbd\VCgcWVTNVTMUSMSQKUSMTRLSQKRPJQOJQOIPNHOMGLJELJDKIDJHBHFAGE@{xozxqxwu~wnj\ccccjeV|yqqnfoldmjamjakh_kh_jg^kh_jg^jg^jg_jg_if^he]if^if^he]gd\fc[fc[caYb_W`^V_]U_]U`]U][S][S\ZR\ZR\ZR][S][T^\U^\T^\T[YRZZYb`Y_ZLYS@]V?]U>WQ=[VG[YRPNGPNGPNGNLFNLFKIBKIBKIBKIBJG>IGAHF@FD>EC=CA;B@:A?9?=8|ypzxpzyu~}xvsimi[pjYpjYlgYtqh{zuurjspgrogsphrogrogqnfrogrogrogpmenkcoldoldoldmkcljbnkcmjbkiaif^fd\fd\dbZdbZcaYa_X`^V_]U^\T_\Q^[P\ZR\ZR[YR[YR][S]\Y`_[fc[mhZpjYoiXkfVc`W[ZVWUNWUNVTNUSMUSMQOIOMGNLFMKELJDKICKICJHBIGAHF@ED?DC>CB=|yp{yqzxs|{x~|wvuvv|zuwvturjtqirogrofqnfqnepmdpmdnkcnkcmkcljbmjbkiakiajh`hf^he]ge]ge]fd\ec[ec[dbZdbZdbZcaYcaYb`Xa_Wa_W`^W_]U_]U^\U_]VcaYca\cb_bb`ed`hf`ge_cb]a`^_^\_]W_]W][T[YR[YRZXRYWQWUOWUOVTNUSMUSMSQKQOJPNINLGMKFLJEroftqhrphrpkrqmsrosrntsosrnrqnqpkrofspgrofrogrogrogqnfqnfpmepmeoldpmerogpmenkcmjbljbljbkiamjbmjbkiakiajh`liakh`jg_jg_if^ge]he]ec[dbZdbZcaYdbZVTLUSKUSKTRJSQITRKTRJSQIRPIQOHPNGPNGPNGOMFOMFNLFMKEMKDLJELJDJHCIGBGE@GE@FD?FD?FE?ED>|yp{xoyvmxulwtkwtkvsjvsjtqhspgpmenkbnkbnkcoldnkcli`jg^jg^kh`jg^if^he]gd\fc[fcZdaXb_Wb_Wb_Wa^V_\T^[S^[S[YQ[YQ\YQZXPZXPYWOYWOYWOXVNWUMWUMWUMWUMfd]ec\ec\caZa_Wa_W_]U^\T_]V^\U\ZS\ZSZXQXVOWUNUSLTRKRPJQOJPNIOMGMKEJHBIGAHF@HFAIGAJHB~{r|s~t~t}s}s|r|r~{q~{q|yp{xo|yp{xozwnxulzwnxulwtkvsjvsjuriurjurjtqitqirogqnfqnfpmepmepmeoldoldnkcomenldljbljbkiaig_ig_hf_hf_ge^fd]ge^dbZcaYcaYb`Xa_Wa_W_]V][S][S\ZR\ZS\ZS\ZS[YR[YRXVOVTNTRLSQJRPIQOIPNHNLFLJEKIDJHCJHBKIC~{r~{r~{r}s|r|r|r|r~{q}zp|yo{xnxulwtkwtkurivsjvsjvsjvsjtqisphrogspgrofqnfpmepmdpmdoldnkcmjbkiankcljbljbkiaig_ig_ig_jg_jg_ge]ec[ec[ec[ec[dbZcaYb`Xa_W`^V`^V_]V^\U^\U][T\ZS\ZS[YRYWPZXRWUNVTMSQJRPJPNIOMHNLGLJELJDKICJHBIGAHF@~{r~{r|yp|yp|yp{xpzwo|yp}zp{xo{xozwo{xo{xo|yq{xpzwnyvmzwoxulxulwtlvsktqhspgsphrogrogsphsqisqirphpngpngnldmjbliaig_ig_hf^hf^ge]fd\ge]fd\ec[ec[_]V^\U][T][T\ZT[YRYWPXVOXVOXVOXVPWUNUSMTRLUSMSQKRPJQOIOMHNLFMKEKIDJHBIGBHF@FD?EC>CB=|yp{xo{xo{xoyvmzwozwnzwnyvm{xozwnxulxulvsjvsjvsjvsjuriurispgspgsphtqhtqhqnfqnfqnepmdpmdnkcmjbliajg_kh`if^if^if^gd\ge]ge]he]fd\caY`^W`^W`^Wa_W[YR[YS[YTVUPXWTYXUYXUWVTWVQVTOTRMTRKTRKSQKPNHOMGNLFMKELJEJHCIGAGE@EC>CADB=A@;vsjurjsqitrmutqutrwvrwvrtsqtspqpkrphsphpmdpmenldmkckiakialjbljbmjbif^ge]ig_ec[a_W`^V`^W`^W_]V_]V][V\[Y`_[fc[mhZqkYoiVkfWdaY]\XYXVZXSYWPWUNSQJSQKRPIQOIPNIOMGOMGNLGMKFLJEKIC~t}u~|w~|}|zyw~|wxwutsnvtmurjsphqnfrogrogoldnkckiahf^ig_kh`liaig_jg_fd\ec\caZb`Xa_Wa_X`^W_]V_]V^\T][T[ZU^^\ec\{vgr{yqxsd\ZRUTRQOHPNGNLFKIBKICKICJHCJHCHFAFD?EC>EC>DB=BADC>EC>yvmxvoxwuxcccc}zwopolli`li`kh_lialiamjbkh`liakiahe]he]fc[fd\ec[dbZb`Xb`Yb`Xb`X`^Va_WcaYb`Xa_W^\U^\U[ZW`_[kg[vnTbcbbvmRhcUZYTUTRPNHOMGNLGMKFLJDKIDIGBGE@GE@GE@FD?DB=uz{bcccwz{zxsphrogrogoldmjbmjbkiahf^fd\ec[dbZb`X_]V_]V_]U_]U][T\ZS\[W_^ZjfZ_YEbbbd\VCgcWZYUVUQUSMSQKUSMTRLSQKRPJQOJQOIPNHOMGLJELJDKIDJHBHFAGE@{xozxqxwu~wnj\ccccjeV|yqrqoomhmjamjakh_kh_jg^kh_jg^jg^jg_jg_if^he]if^if^he]gd\fc[fc[caYb_W`^V_]U_]U`]U][S][S\ZR\ZR\ZR][S][T^\U^\T^\TZYTZZYb`Y_ZLYS@]V?]U>WQ=[VG[YRRQOPOJPNGNLFNLFKIBKIBKIBKIBJG>IGAHF@FD>EC=CA;B@:A?9?=8|ypzxpzyu~}xvsimi[pjYpjYlgYtqh{zuvursqirogsphrogrogqnfrogrogrogpmenkcoldoldoldmkcljbnkcmjbkiaif^fd\fd\dbZdbZcaYa_X`^V_]U^\T_\Q^[P\ZR\ZR[YR[YR^\V]\Y`_[fc[mhZpjYoiXkfVc`W[ZVWVTXVQVTNUSMUSMQOIOMGNLFMKELJDKICKICJHBIGAHF@ED?DC>CB=|yp{yqzxs|{x~|wvuvv|zuwvttsntrkrogrofqnfqnepmdpmdnkcnkcmkcljbmjbkiakiajh`hf^he]ge]ge]fd\ec[ec[dbZdbZdbZcaYcaYb`Xa_Wa_W`^W_]U_]U^\U_]VcaZca\cb_bb`ed`hf`ge_cb]a`^_^\_^Z_]X][T[YR[YRZXRYWQWUOWUOVTNUSMUSMSQKQOJPNINLGMKFLJEroftqhrphrpkrqmsrosrntsosrnrqnqpkrphsphrofrogrogrogqnfqnfpmepmeoldpmerogpmenkcmjbljbljbkiamjbmjbkiakiajh`liakh`jg_jg_if^ge]he]ec[dbZdbZcaYdbZVTLUSLVTNTSNSRNTSQUTQSRNRQMQOJPNHPNGPNGOMFOMFNLFMKEMKDLJELJDJHCIGBGE@GE@FD?ED?ED?DC>|yp{xozwowumwunxvpvtovtousmsqjpngoldnkbnkcoldnkcli`jg^jg^kh`jg^if^he]gd\fc[fcZdaXb_Wb_Wb_Wa^V_\T^[S^[S[YQ[YQ\YQZXPZXPYWOYWOYWOXVNWUMWUMWUMWUMfd]ec\ec\caZa_Wa_W_]U^\T_]V^\U\ZS\ZSZXQXVOWUNUSLTRKRPJQOJPNIOMGMKEJHBIGAHF@GE?FE@IHC~{r|s~t~t}s}s|r|r~{q~{q|yp{xo|yp{xozwnxulzwnxulwtkvsjvsjuriurjurjtqitqirogqnfqnfpmepmepmeoldoldnkcomenldljbljbkiaig_ig_hf_hf_ge^fd]ge^dbZcaYcaYb`Xa_Wa_W_]V][S][S\ZR\ZS\ZS\ZS[YR[YRXVOVTNTRLSQJRPIQOIPNHNLFLJEKIDJHCJHBKIC~{r~{r~{r}s|r|r|r|r~{q}zp|yo{xnxulwtkwtkurivsjvsjvsjvsjtqisphrogspgrofqnfpmepmdpmdoldnkcmjbkiankcljbljbkiaig_ig_ig_jg_jg_ge]ec[ec[ec[ec[dbZcaYb`Xa_W`^V`^V_]V^\U^\U][T\ZS\ZS[YRYWPZXRWUNVTMSQJRPJPNIOMHNLGLJELJDKICJHBIGAHF@~{r~{r|yp|yp|yp{xpzwo|yp}zp{xo{xozwo{xo{xo|yq{xpzwnyvmzwoxulxulwtlvsktqhspgsphrogrogsphsqisqirphpngpngnldmjbliaig_ig_hf^hf^ge]fd\ge]fd\ec[ec[_]V^\U][T][T\ZT[YRYWPXVOXVOXVOXVPWUNUSMTRLUSMSQKRPJQOIOMHNLFMKEKIDJHBIGBHF@FD?EC>CB=|yp{xo{xo{xoyvmzwozwnzwnyvm{xozwnxulxulvsjvsjvsjvsjuriurispgspgsphtqhtqhqnfqnfqnepmdpmdnkcmjbliajg_kh`if^if^if^gd\ge]ge]he]fd\caY`^W`^W`^Wa_W[YRZXQZXQVTMXVOXVOXVOXVPWUNUSLTRLTRKTRKSQKPNHOMGNLFMKELJEJHCIGAGE@EC>CADB=A@;vsjurispgtqhtqhtqhsphsphspgspgrogrof@<097/@<0sph?;0pmdpme>:/nldmkc:6+=9.kiakia75-ljbljbmjb<8-if^ge]ig_53,96+96+ec[85*85*20)a_W`^V`^W`^W_]V_]V\ZS\ZS\ZS[YR[YR[YSYWQYWQYWPYWQYWPZXQYWPWUN"!?=5SQJSQKRPIQOIPNIOMGOMGNLGMKFLJEKIC~t~t~{r~{r|r}zq{xozwnxumxumwtlurjvskurj@<1sphB?7qnfrog=9.rogA>6oldnkc:6+kia<:2hf^ig_kh`?<4liaig_jg_;91fd\ec\caZ750b`Xa_Wa_X`^W_]V_]V^\T][T[YR\ZR\ZSYWPXVOXVOWUOVTNUSLSQISQJ!  QOHPNGNLFKIBKICKICJHCJHCHFAFD?EC>EC>DB=BA2A=1uri@<1@<0:80?;0pme=9.ljbljb;8-jh`96+85*85*fc[96+96+85*dbZ74*dbZcaYcaY74*63)1/(a_W`^V_]V_]V^\U^\U][T\ZR\ZR[YR><6;-;-;-VTMSQIRPIA?:!OMFQOHNLENLFLJEKIDJHCJHCIGAFE@FD?EC>DC>EC>yvmxulwtkxulwtkNK@M;M;M;tqhpmenkb>:/li`li`kh_<8,lialia=8)mjb=8)kh`lia;8-kia;7,he]he]fc[:6+fd\ec[dbZ40#b`Xb`Yb`X74*b`X`^Va_WcaYb`Xa_W^\U^\U[YR[YR\ZRZXQ=:0;-;-;-XVPWUOUSLVTN?<4@>9PNHOMGNLGMKFLJDKIDIGBGE@GE@GE@FD?DB=uvvv~uXULUAUAT@~{q{xozwnC?3B>2A=1sph@<0rogrog>:/old=9.mjbmjb<8-kia:7,:7,53,hf^:7,53+96+fd\85*ec[dbZb`X74)63)0.'_]V_]V_]U_]U][T\ZS\ZS[YR[YR[YR><6><4;8-?<4WUNXVOVTNVTMUSMSQKUSMTRLSQKRPJQOJQOIPNHOMGLJELJDKIDJHBHFAGE@{xoyvmwtkwtkvsjROGMJBQNCPMBpmdrogqnfoldmjamjakh_kh_jg^kh_jg^jg^jg_jg_if^he]if^if^he]gd\fc[fc[caYb_W`^V_]U_]U`]U][S][S\ZR\ZR\ZR][S][T^\U^\T^\T[YRZXQYWPXVOVTLVTLUSLSQJSQJRPHPNGPNGPNGNLFNLFKIBKIBKIBKIBJG>IGAHF@FD>EC=CA;B@:A?9?=8|ypzwnyvmzwnzwoyvmxumxumwtlxumwtlurjspgrogsphrogrogqnfrogrogrogpmenkcoldoldoldmkcljbnkcmjbkiaif^fd\fd\dbZdbZcaYa_X`^V_]U^\T_\Q^[P\ZR\ZR[YR[YR][S\ZR\ZS[YR[YR[YRZXQXVPXVPWUNWUNWUNVTNUSMUSMQOIOMGNLFMKELJDKICKICJHBIGAHF@ED?DC>CB=|yp{xozwnzwnxulwtkvsjvsjvsjvsjvskurjtqirogrofqnfqnepmdpmdnkcnkcmkcljbmjbkiakiajh`hf^he]ge]ge]fd\ec[ec[dbZdbZdbZcaYcaYb`Xa_Wa_W`^W_]U_]U^\U_]VcaYb`Xb`X`^V`^V`^W_]V^\T_]V_]V_]W_]W][T[YR[YRZXRYWQWUOWUOVTNUSMUSMSQKQOJPNINLGMKFLJErofurhrofrofqneqndolcpmdpmdqnfrogrofspgrofrogrogrogqnfqnfpmepmeoldpmerogpmenkcmjbljbljbkiamjbmjbkiakiajh`liakh`jg_jg_if^ge]he]ec[dbZdbZcaYdbZVTLUSKUSKTRJSQITRKTRJSQIRPIQOHPNGPNGPNGOMFOMFNLFMKEMKDLJELJDJHCIGBGE@GE@FD?ED?ED?DC>|yp{xoyvmxulwtkwtkvsjvsjtqhspgpmenkbnkbnkcoldnkcli`jg^jg^kh`jg^if^he]gd\fc[fcZdaXb_Wb_Wb_Wa^V_\T^[S^[S[YQ[YQ\YQZXPZXPYWOYWOYWOXVNWUMWUMWUMWUMfd]ec\ec\caZa_Wa_W_]U^\T_]V^\U\ZS\ZSZXQXVOWUNUSLTRKRPJQOJPNIOMGMKEJHBIGAHF@GE?HF@JIC~{r|s~t~t}s}s|r|r~{q~{q|yp{xo|yp{xozwnxulzwnxulwtkvsjvsjuriurjurjtqitqirogqnfqnfpmepmepmeoldoldnkcomenldljbljbkiaig_ig_hf_hf_ge^fd]ge^dbZcaYcaYb`Xa_Wa_W_]V][S][S\ZR\ZS\ZS\ZS[YR[YRXVOVTNTRLSQJRPIQOIPNHNLFLJEKIDJHCJHBKIC~{r~{r~{r}s|r|r|r|r~{q}zp|yo{xnxulwtkwtkurivsjvsjvsjvsjtqisphrogspgrofqnfpmepmdpmdoldnkcmjbkiankcljbljbkiaig_ig_ig_jg_jg_ge]ec[ec[ec[ec[dbZcaYb`Xa_W`^V`^V_]V^\U^\U][T\ZS\ZS[YRYWPZXRWUNVTMSQJRPJPNIOMHNLGLJELJDKICJHBIGAHF@~{r~{r|yp|yp|yp{xpzwo|yp}zp{xo{xozwo{xo{xo|yq{xpzwnyvmzwoxulxulwtlvsktqhspgsphrogrogsphsqisqirphpngpngnldmjbliaig_ig_hf^hf^ge]fd\ge]fd\ec[ec[_]V^\U][T][T\ZT[YRYWPXVOXVOXVOXVPWUNUSMTRLUSMSQKRPJQOIOMHNLFMKEKIDJHBIGBHF@FD?EC>CB=|yp{xo{xo{xoyvmzwozwnzwnyvm{xozwnxulxulvsjvsjvsjvsjuriurispgspgsphtqhtqhqnfqnfqnepmdpmdnkcmjbliajg_kh`if^if^if^gd\ge]ge]he]fd\caY`^W`^W`^Wa_W[YRZXQZXQVTMXVOXVOXVOXVPWUNUSLTRLTRKTRKSQKPNHOMGNLFMKELJEJHCIGAGE@EC>CADB=A@;vsjurjsqitrmutqutrwvrwvrtsqtspqpkrphsphpmdpmenldmkckiakialjbljbmjbif^ge]ig_ec[a_W`^V`^W`^W_]V_]V][V\ZS\ZS[YR[YR[YSYWQYWQYWPYWQYWPZXSYWPWUNSQJSQKRPIQOIPNIOMGOMGNLGMKFLJEKIC~t}u~|w~{r|r}zq{xozwnxumxumwtltsnvtmurjsphqnfrogrogoldnkckiahf^ig_kh`liaig_jg_fd\ec\caZb`Xa_Wa_X`^W_]V_]V^\T][T[ZU\ZR\ZSYWPXVOXVOWUOVTNUSLSQISQJQOHPNGNLFKIBKICKICJHCJHCHFAFD?EC>EC>DB=BA<6;-;-;-VTMSQIRPIOMFQOHNLENLFLJEKIDJHCJHCIGAFE@FD?EC>DC>EC>yvmxvoxwuxulwtkNK@M;M;M;tqhpmepolli`li`kh_lialiamjbkh`liakiahe]he]fc[fd\ec[dbZb`Xb`Yb`Xb`X`^Va_WcaYb`Xa_W^\U^\U[ZW[YR\ZRZXQ=:0;-;-;-XVPWUOUSLUTRPNHOMGNLGMKFLJDKIDIGBGE@GE@GE@FD?DB=uzv~uXULUAUAT@~{q{xo{zxsphrogrogoldmjbmjbkiahf^fd\ec[dbZb`X_]V_]V_]U_]U][T\ZS\[W[YR[YR[YR><6><4;8-?<4WUNXVOVTNVUQUSMSQKUSMTRLSQKRPJQOJQOIPNHOMGLJELJDKIDJHBHFAGE@{xozxqxwuwtkvsjROGMJBQNCPMBpmdrogrqoomhmjamjakh_kh_jg^kh_jg^jg^jg_jg_if^he]if^if^he]gd\fc[fc[caYb_W`^V_]U_]U`]U][S][S\ZR\ZR\ZR][S][T^\U^\T^\TZYTZXQYWPXVOVTLVTLUSLSQJSQJRPHPNGPOJPNGNLFNLFKIBKIBKIBKIBJG>IGAHF@FD>EC=CA;B@:A?9?=8|ypzxpzyuzwnzwoyvmxumxumwtlxumwtlvursqirogsphrogrogqnfrogrogrogpmenkcoldoldoldmkcljbnkcmjbkiaif^fd\fd\dbZdbZcaYa_X`^V_]U^\T_\Q^[P\ZR\ZR[YR[YR^\V\ZR\ZS[YR[YR[YRZXQXVPXVPWUNWUNXVQVTNUSMUSMQOIOMGNLFMKELJDKICKICJHBIGAHF@ED?DC>CB=|yp{yqzxszwnxulwtkvsjvsjvsjvsjvsktsntrkrogrofqnfqnepmdpmdnkcnkcmkcljbmjbkiakiajh`hf^he]ge]ge]fd\ec[ec[dbZdbZdbZcaYcaYb`Xa_Wa_W`^W_]U_]U^\U_]VcaZb`Xb`X`^V`^V`^W_]V^\T_]V_]V_]W_]X][T[YR[YRZXRYWQWUOWUOVTNUSMUSMSQKQOJPNINLGMKFLJEroftqhrphrpkrqmsrosrntsosrnrqnqpkrphsphrofrogrogrogqnfqnfpmepmeoldpmerogpmenkcmjbljbljbkiamjbmjbkiakiajh`liakh`jg_jg_if^ge]he]ec[dbZdbZcaYdbZVTLUSLVTNTSNSRNTSQUTQSRNRQMQOJPNHPNGPNGOMFOMFNLFMKEMKDLJELJDJHCIGBGE@GE@FD?ED?ED?DC>|yp{xozwowumwunxvpvtovtousmsqjpngoldnkbnkcoldnkcli`jg^jg^kh`jg^if^he]gd\fc[fcZdaXb_Wb_Wb_Wa^V_\T^[S^[S[YQ[YQ\YQZXPZXPYWOYWOYWOXVNWUMWUMWUMWUMpromoe-0.1.1/data/Almond-blue/Text.bmp000066400000000000000000000204361134030477200175140ustar00rootroot00000000000000BM!6( + + 㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋㡋promoe-0.1.1/data/Almond-blue/Titlebar.bmp000066400000000000000000002573561134030477200203530ustar00rootroot00000000000000BM^6(XW^пoa :5%mYF:mYF:mYF:p[G;mYF:mYF:mYF:p[G;mYF:mYF:mYF:p[G;mYF:mYF:mYF:p[G;mYF:mYF:mYF:p[G;ÿ۷ݷݷԷݷݷݷٷôp^:5%?4>4>4B7?4?4?4>4?4>4>4B7?4?4?4>4?4>4>4B7?4?4?4>4?4>4>4B7?4?4?4>4?4>4>4B7?4?4?4>4Ͷָ޹ݸȶַŵqa:5%eR90eR90_N5,[K7.eR90eR90_N5,[K7.eR90eR90_N5,[K7.eR90eR90_N5,[K7.eR90eR90_N5,[K7.µ˷и׺չҹör`:5%3+3+4,3+0(ll0(3+3+4,3+0(ll0(3+3+4,3+0(ll0(3+3+4,3+0(ll0(3+3+4,3+,%cc,%øķĸǸѹй߼ں߼ķԺ潲߼ں߼߼ݼ˹ں߼Ƹ·ݼø߼ķٺ߼潲й߼Ƹ˹߼潿й߼ƸԺ潲̹߼߼༵Ժ潿߼̸ʹʹѹ߼߼պ߼ں߼ں߼ںѿѲsc:5%YI-&YI,%llllYI-&YI,%llllYI-&YI,%llllYI-&YI,%llllYI-&YI,%ccccķҳռȺϻռཱིռռźռռźݽźཱིʺźʺռཱི۽ͻʺռݽźʺʺռͻ۽ͻźͻźʺȺҵҳĊtb:5%'!'!("'!l'!'!l'!'!("'!l'!'!l'!'!("'!l'!'!l'!'!("'!l'!'!l'!'!("'!c%%cđƻºʼ׾˽˽ŻȼȻܿܿԽٿ׽ƻ޾Ǽݿܿ˼Խƻϼ۾ӽ׾߿νӽʼݿú˼־ú˼˼úپ޾ؾ޾ؾܿٽ־ݿud:5%RD" RD  l  N@lRD" RD  l  N@lRD" RD  l  N@lRD" RD  l  N@lRD" RD  c J=cķӷӿѿɾӿп¼ͿͿ¼ҿҿȾ¼»»տȾ»ͿͿ¼Ϳʽ¼¼¼¼Ϳ»ͿͿʽļͿͿļʽӷuc:5%    l  l    l  l    l  l    l  l    c  cŔȽļüüļļļļļļļļļļļļļļļļļļļɾοļļļļûŽüŽúŽɿûûüȾļɿûüúûüûļͿüúͿºûüüüüпüºüºüúͿüûļļļļļļļļļļļļļļļļļļļļļļļļļļļûýýýüüüüv«e:5%H; H; l E9lH; H; l E9lH; H; l E9lH; H; l E9lH; H; c A6cŹպ½ƾȿžž¾žžžžž¾žžž¾¾žžžžžžžžžž¾žž¾ž¾žžž¾žžžžž¾žžž¾ž¾žžž¾žպպƏwd:5%                              ŕƿƿƿƿƿƿƿƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾǿǿþƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƿƿػƿƥx«f:5%@5 @5lll @5 @5lll @5 @5lll @5 @5ccc @5 @5lll ƺý½ye:5%    l  l    l  l    l  l    c  c    l  l̘½ëzεi:5%:0 :0l8.l:0 :0l8.l:0 :0l8.l:0 :0c5,c:0 :0l8.l͘Ȯļ~зj:5%llllllccllٰɭ̘u:5%keQHGEkeQHGE[HGEjdQ[keQHGEkeQHGE[HGEjdQ[keQHGEkeQHGE[HGEjdQ[keQHGEkeQHGEHGEhbPkeQHGEkeQHGE[HGEjdQ[пoa:5%KJHKJHKJHKJH^^^KJHKJHKJHKJHKJH^^^KJHKJHKJHKJHKJH^^^KJHKJHKJHKJHKJHKJHKJHKJHKJHKJH^^^KJHնڷp^:5%nhWNMKnhWNMKnhWNMKnhWNMKnhWNMKnhWNMKnhWNMKnhWNMKnhWNMKnhWNMKnhWNMKnhWNMKnhWNMKnhWNMKmgVNMKmgVNMKnhWNMKnhWNMKnhWNMKnhWNMKܹqa:5%QQOQQOQQOQQOQQOQQOQQOQPNQQOQQOQQOQQOQQOQQOQQOQPNQQOQQOQQOQQOQQOQQOQQOQPNQQOQQOQQOQQOQQOQQOQQOQPNQQOQQOQQOQQOQQOQQOQQOQPNµθغŷ˸˸ʷr`:5%sm\TTRsm\TTRfffTSQsm\TTRsm\TTRfffTSQsm\TTRsm\TTRTSQsm\TTRsm\TTRfffTSQsm\TTRsm\TTRfffTSQø˹Ϲɸݼ콸Ĺ̸ѱıϺۻϹǹۻ̹˹¿ѱкػϺкѱɺ̸Ƹỳ弾ŲŲŲѿѲsc:5%WWUWWUWWUWWUWWUiWWUWVTWWUWWUWWUWWUWWUiWWUWVTWWUWWUWWUWWUWWUWWUWVTWWUWWUWWUWWUWWUiWWUWVTWWUWWUWWUWWUWWUiWWUWVTķҳͻ̻ɻܼҳųϻų׼dzͻټ۽Ѽ׼ҳ˺׼ϻͻҳͼ徳ͻͻ۽徳׼鿳Ѽڽڽ߽ҵҳĊtb:5%ytcZZXytcZZXxsblwrbZYWytcZZXytcZZXxsblwrbZYWytcZZXytcZZXxsbxsbZYWytcZZXytcZZXxsblwrbZYWytcZZXytcZZXxsblwrbZYWđƻĺݾ޾Ӿȼ¹ϽѽѽúԵپѽϽ׾ؾݾȵԵѽԵԽȵ׾վԽƵĵǵȵúúud:5%]][]][]][]][]][n]][]\Z]][]][]][]][]][n]][]\Z]][]][]][]][]][]][]\Z]][]][]][]][]][n]][]\Z]][]][]][]][]][n]][]\Zķӷǽ¿ҿ·ӿӷҿϾϾϾļӷӷͿҿӿӿӷҿɷҿ·Ͼļӷ·ż÷ɷɷӷżͷӷuc:5%~yh``^~yh``^{vgq{vg`_]~yh``^~yh``^{vgq{vg`_]~yh``^~yh``^zufzuf`_]~yh``^~yh``^{vgq{vg`_]~yh``^~yh``^{vgq{vg`_]ŔȽļüüļļļļļļļļļļļļļļļļļļļüοŽûļļüǽɾָʸɾüüȺļüýָοüüļüָ͸ü¼ºý͸ý͸ýָüļļļļļļļļļļļļļļļļļļļļļļļļļļļûýýýüüüüv«e:5%ccaccaccaccatttcb`ccaccaccaccatttcb`ccaccaccaccacb`ccaccaccaccatttcb`ccaccaccaccatttcb`Źպʿºú¾¾¼¼¼¼¾¼¾¼¼¾¾¼¾¼¾¾¼¾¾¼¼¼¾¾պպƏwd:5%}mffd}mffd|mfecnfec}mffd}mffd|mfecnfec}mffd}mffd|mfecnfec}mffd}mffd|mfecnfec}mffd}mffd|mfecnfecŕƿƿƿƿƿƿƿƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾȿûſƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƿƿػƿƥx«f:5%iigiigiigiigiigihfihfiigiigiigiigiighhgihfihfiigiigiigiigiigiigihfihfiigiigiigiigiigiigihfihfiigiigiigiigiigiigihfihfiigƺŽĽye:5%slljsllj|lljs|slljslljlljr複slljsllj|lljs|slljsllj|lljs|slljsllj|lljs|̘½ؿëzεi:5%oomoomoomoom~oomoom~oomoomoomoomoomoomoomoomoomoom~oomoom~oomoomoomoom~oomoom~oomoomoomoom~oomoom~͘Ȯļoa:5%yrrpyrrpyrrpyrrpꩌyrrpyrrpyrrpyrrpyrrpyrrpٰɭp^:5%uusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusuusпqa:5%xxvxxvxxv~xxvxxvxxv}뭑xxvxxvxxv~xxvxxvxxv~xxvxxvxxv~r`:5%{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{ysc:5%}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{}}{µtb:5%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ø쿲ѿѲud:5%찂ööööööööķҳҵҳČuc:5%촅촅ĸĸĸĸĸĸĸĸđƻ¸¿¹¿¿µ¸¿v«e:5%ŹŹŹŹŹŹŹŹķӷķķķķķķķӷwd:5%ƺƺƺƺƺƺƺƺŔȽļüüļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļüļļļļļļļļļļļüļļļŸļļļŸļļļļļļļļļļļļļļļļûýýýüüüüx«f:5%ȼȼȼȼȼȼȼȼŹպǺǺǺǺǺǺǺǺǺպպƑye:5%ȽȽȽȽȽȽȽȽŕƿƿƿƿƿƿƿƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƿƿػƿƱzεi:5%ƺ~зj:5%̘½ë̘u:5%͘Ȯļoa:5%J=J=J=L?L?L?L?L?J=J=J=L?L?L?L?L?:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%ٰɭp^:5%mYF:mYF:mYF:p[G;mYF:mYF:mYF:p[G;:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%ӵӵqa:5%?4>4>4B7?4?4?4>4?4>4>4B7?4?4?4>4:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%ӷӷµr`:5%eR90eR90_N5,[K7.eR90eR90_N5,[K7.:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%ӹӹø쿲ѿѲsc:5%3+3+4,3+0(ll0(3+3+4,3+0(ll0(:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%ļļļļļļļļļӺӺķҳҵҳĊtb:5%YI-&YI,%llllYI-&YI,%llll:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%ӼӼđƻ¸¿¹¿¿µ¸¿ud:5%'!'!("'!l'!'!l'!'!("'!l'!'!l:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%ķӷķķķķķķķӷuc:5%RD" RD  l  N@lRD" RD  l  N@l:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%ŔȽļüüļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļüļļļļļļļļļļļüļļļŸļļļŸļļļļļļļļļļļļļļļļûýýýüüüüv«e:5%    l  l    l  l:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%ŹպǺǺǺǺǺǺǺǺǺպպƏwd:5%H; H; l E9lH; H; l E9l:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%ӵӵŕƿƿƿƿƿƿƿƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƿƿػƿƥx«f:5%            :5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%ƺye:5%@5 @5lll @5 @5lll :5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%ӹӹ̘½ëzεi:5%    l  l    l  l:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%ļļӺļӺļļ͘Ȯļ~зj:5%:0 :0l8.l:0 :0l8.l:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%ӼӼٰɭ̘u :5%llll:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%ƿƾƾƾƾp^:5%keQHGEkeQHGE[HGEjdQ[keQHGEkeQHGE[HGEjdQ[:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%qa:5%KJHKJHKJHKJH^^^KJHKJHKJHKJHKJH^^^KJH:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%µr`:5%nhWNMKnhWNMKnhWNMKnhWNMKnhWNMKnhWNMKnhWNMKnhWNMK:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%øѿѲsc:5%QQOQQOQQOQQOQQOQQOQQOQPNQQOQQOQQOQQOQQOQQOQQOQPN:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%ķҳҵҳĊtb:5%sm\TTRsm\TTRfffTSQsm\TTRsm\TTRfffTSQ:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%đƻud:5%WWUWWUWWUWWUWWUiWWUWVTWWUWWUWWUWWUWWUiWWUWVT:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%ķӷӷuc:5%ytcZZXytcZZXxsblwrbZYWytcZZXytcZZXxsblwrbZYW:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%ļļļļļŔȽļüüļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļûýýýüüüüv«e:5%]][]][]][]][]][n]][]\Z]][]][]][]][]][n]][]\Z:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%ӼպŹպպպƏwd:5%~yh``^~yh``^{vgq{vg`_]~yh``^~yh``^{vgq{vg`_]:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%ƿƾջſſſŕƿƿƿƿƿƿƿƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƿƿػƿƥx«f:5%ccaccaccaccatttcb`ccaccaccaccatttcb`:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%ƺye:5%}mffd}mffd|mfecnfec}mffd}mffd|mfecnfec:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%̘½ëzεi:5%iigiigiigiigiigihfihfiigiigiigiigiigiigihfihfiig:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%ϲϲϿ͘Ȯļ~зj:5%slljsllj|lljs|slljsllj|lljs|:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%ҳҳҳҳٰɭ̘u:5%oomoomoomoom~oomoom~oomoomoomoom~oomoom~:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%ԵԵпoa:5%yrrpyrrpyrrpyrrp:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%ӷӷp^:5%uusuusuusuusuusuusuusuusuusuusuusuus:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%ԸüüüԸýqa:5%xxvxxvxxv~xxvxxvxxv~:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%պպպµr`:5%{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%ջſſøѿѲsc:5%}}{}}{}}{}}{}}{}}{}}{}}{:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%ķҳҵҳĊtb:5%~~~~~~~~~~~~~~~~:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%đƻud:5%öööö:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%ѿѲķӷӷuc:5%ĸĸĸĸ:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%ҳҵҳĊŔȽļüüļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļļûýýýüüüüv«e:5%ŹŹŹŹ:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%ŹպպպƏwd:5%ƺƺƺƺ:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%ӷӷŕƿƿƿƿƿƿƿƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƾƿƿػƿƥx«f:5%ȼȼȼȼ:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%üüļļļļļüüüƺye:5%ȽȽȽȽ:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%պպƏ̘½ëzεi:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%ƿƿƿƿƿƾƾƾƾƾƿػƿƥ͘Ȯļ~зj:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%ٰɭ̘u:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%:5%promoe-0.1.1/data/Almond-blue/VisColor.txt000066400000000000000000000004411134030477200203630ustar00rootroot0000000000000017,32,49, 88,130,162, 103,114,126, 98,110,122, 94,106,118, 90,102,114, 86,98,111, 82,93,108, 17,36,58, 17,38,62, 18,41,65, 18,43,69, 19,46,73, 19,48,76, 20,51,80, 20,53,84, 21,55,88, 21,58,92, 99,217,255, 99,217,255, 99,217,255, 99,217,255, 99,217,255, 99,217,255, promoe-0.1.1/data/Almond-blue/Volume.bmp000066400000000000000000002512001134030477200200320ustar00rootroot00000000000000BMR6(BJR kWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrccccccccccccccdRdRdRdRdRdRdRdRdRdRdRdRdRdRcccccccccccccc]Li]Li]Li]Li]Li]Li]LicccUFUFUFUFUFUFUFUFccccUFcUFcccccccUFUFUFcccw`N@w`N@w`N@w`N@ccccw`cw`cccccccw`N@w`cccI=I=I=I=I=I=I=I=ccccI=cI=cccccccI=I=I=cccjVA6jVA6jVA6jVA6ccccjVcjVcccccccjVA6jVccc;1;1;1;1;1;1;1;1cccc;1c;1ccccccc;1;1;1cccccccccccccc4,_N4,_N4,_N4,_N4,_N4,_N4,_Ncccccccccccccc-&-&-&-&-&-&-&-&-&-&-&-&-&-&'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TEq\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\kWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWraOaOaOcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQaOaOaOcQTEv`UF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUFv`TEgccOAcM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cOAccRDccI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=ccs]ccC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8ccD9cc=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3cchUcc:0c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c:0cc904,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\kWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWraOaOaOcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQaOaOaOcQTEv`UF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUFv`TEgccOAcM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cOAccRDccI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cJ=ccs]ccC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8ccD9cc=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c>4cchUcc:0c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c90cc904,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\kWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWraOaOaOcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQdRcQaOaOcQTEv`UF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dYIiYIv`TEgccOAcM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cRDUFRDccRDccI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cL?w`L?ccs]ccC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cH<I=D9ccD9cc=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3`A6jV>4cchUcc:0c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/K;1;190cc904,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\kWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWraOaOaOcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQdRdRdRdRcQaOaOcQTEv`UF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dZJi]LiYIv`TEgccOAcM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cTEUFUFUFRDccRDccI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=^N@w`N@w`L?ccs]ccC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8II=I=I=I=D9ccD9cc=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3سAA6jVA6jV>4cchUcc:0c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/5;1;1;1;190cc904,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\kWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWraOaOaOcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQdRdRdRdRdRdRcQaOaOcQTEv`UF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{d]Li]Li]LiYIv`TEgccOAcM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@HUFUFUFUFUFUFRDccRDccI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=հ?N@w`N@w`N@w`L?ccs]ccC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC83I=I=I=I=I=I=D9ccD9cc=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3-A6jVA6jVA6jV>4cchUcc:0c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/`P;1;1;1;1;1;190cc904,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\kWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWraOaOaOcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQdRdRdRdRdRdRdRdRcQaOaOcQTEv`UF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUFg]Li]Li]Li]LiYIv`TEgccOAcM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@3UFUFUFUFUFUFUFUFRDccRDccI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=,N@w`N@w`N@w`N@w`L?ccs]ccC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8bQI=I=I=I=I=I=I=I=D9ccD9cc=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3lXA6jVA6jVA6jVA6jV>4cchUcc:0c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/;1;1;1;1;1;1;1;1;190cc904,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\kkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWraOaOaOcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQdRdRdRdRdRdRdRdRdRdRdRcQaOaOcQTEv`UF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUFh]Li]Li]Li]Li]LiYIv`TEgccOAcM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@hVUFUFUFUFUFUFUFUFUFUFRDccRDccI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=w`N@w`N@w`N@w`N@w`N@w`L?ccs]ccC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8I=I=I=I=I=I=I=I=I=I=I=D9ccD9cc=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c>4jVA6jVA6jVA6jVA6jVA6jV>4cchUcc:0c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c:1;1;1;1;1;1;1;1;1;1;1;190cc904,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\kWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWraOaOaOcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQdRdRdRdRdRdRdRdRdRdRdRdRdRcQaOaOcQTEv`UF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUFi]Li]Li]Li]Li]Li]LiYIv`TEgiccOAcM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cOAUFUFUFUFUFUFUFUFUFUFUFUFUFRDccRDFccI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cK>w`N@w`N@w`N@w`N@w`N@w`N@w`L?ccs]ccC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cF:I=I=I=I=I=I=I=I=I=I=I=I=I=D9ccD9cc=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c@5jVA6jVA6jVA6jVA6jVA6jVA6jV>4cchUcc:0c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c;1;1;1;1;1;1;1;1;1;1;1;1;1;190cc904,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N'!-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""Wdq\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\kWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWr=aOaOaOcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRcQaOaOcQTEv`UF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dZJi]Li]Li]Li]Li]Li]Li]LiYIv`TEgccOAcM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cRDUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFRDccRD,ccI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cM@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`L?ccs]'ccC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cH<I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=D9ccD9"cc=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3XA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jV>4cchUcc:0c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/ܷD;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;190cc90p4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_Nr-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TEcM""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""3c8q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\kWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWr!aOaOaOcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRcQaOaOcQ"TEv`UF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{d\Li]Li]Li]Li]Li]Li]Li]Li]LiYIv`TEgccOAcM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFRDccRD\ccI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=NN@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`L?ccs]ccC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8۶DI=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=D9ccD9{dcc=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3ʧ4cchU@cc:0c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;190cc90cC4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""TEq\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\kWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrQaOaOaOcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRcQaOaOcQUTEv`UF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF}e]Li]Li]Li]Li]Li]Li]Li]Li]Li]LiYIv`TEgccOAcM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@سCUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFRDccRD8ccI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=ͩ4cchU&cc:0c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/QD;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;190cc904,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TEj""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""dRcIq\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\kWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWraOaOaOcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRcQaOaOcQ4TEv`UF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUFg]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]LiYIv`TEg-&ccOAcM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@}-UFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFRDccRDccI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=|'N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`L?ccs]ccC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8VHI=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=D9ccD9cc=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jV>4cchUWcc:0c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;190cc90d4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&='!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""",'q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\"kWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWraOaOaOcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRcQaOaOcQpTEv`UF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUFh]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]LiYIv`TEgrccOAcM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@\LUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFRDccRDccI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cJ=w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`L?ccs]cMccC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cD9I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=D9ccD9cc=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c>4jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jV>4cchU3cc:0c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c:1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;190cc90c84,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&!'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\{dkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWr@aOaOaOcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRcQaOaOcQCTEv`UF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dWHi]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]LiYIv`TEgccOAcM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cPBUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFRDccRDccI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cK>w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`L?ccs]-ccC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cG;I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=D9ccD9TEcc=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c?5jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jV>4cchUcc:0c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;190cc904,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_Nq\-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&Q'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TEU""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""8Aq\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\_NkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWr&aOaOaOcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRcQaOaOcQTEv`UF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dZJi]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]LiYIv`TEgccOAcM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cRDUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFRDccRDccI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cM@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`L?ccs]jccC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8`I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=D9ccD9dRcc=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3LA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jV>4cchUcc:0c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/ЭA;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;190cc90cI4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE4""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""-&q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\kWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrWaOaOaOcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRcQaOaOcQdTEv`UF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{d\Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]LiYIv`TEgUFccOAcM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@[UFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFRDccRD=ccI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=JN@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`L?ccs]ccC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8˩@I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=D9ccD9cc=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=38A6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jV>4cchU,cc:0c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/p+;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;190cc90'4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N"-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TEp""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""rcMq\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\kWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWr5aOaOaOcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRcQaOaOcQc8TEv`UF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF}e]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]LiYIv`TEgccOAcM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@ɧ>UFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFRDccRD!ccI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=5N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`L?ccs]"ccC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8t,I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=D9ccD9cc=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3l#A6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jV>4cchU\cc:0c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/@5;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;190cc904,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N{d-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&F'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TEC""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""-q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\TEkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWraOaOaOcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRcQaOaOcQTEv`UF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUFg]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]LiYIv`TEgq\ccOAcM@cM@cM@cM@cM@cM@cM@cM@cM@cM@cM@s*UFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFRDccRDQccI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cI=q#N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`L?ccs]UccC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cC8K>I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=D9ccD9cc=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c=3jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jV>4cchU8cc:0c8/c8/c8/c8/c8/c8/c8/c8/c8/c8/c90;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;190cc90A4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N_N-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&&'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""jq\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\dRkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWraOaOaOcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRcQaOaOcQcMTEv`UF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUFi]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]LiYIv`TEgI=ccOAcM@cM@cM@cM@cM@cM@cM@cM@cM@cM@UFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFRDccRDccI=cI=cI=cI=cI=cI=cI=cI=cI=cI=cJ=w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`L?ccs]4ccC8cC8cC8cC8cC8cC8cC8cC8cC8cC8cD9I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=D9ccD9-&cc=3c=3c=3c=3c=3c=3c=3c=3c=3c=3c>4jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jV>4cchUcc:0c8/c8/c8/c8/c8/c8/c8/c8/c8/c:1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;190cc904,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&W'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TEd""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""UF=q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\kWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWr,aOaOaOcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRcQaOaOcQ'TEv`UF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dWHi]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]LiYIv`TEg"ccOAcM@cM@cM@cM@cM@cM@cM@cM@cPBUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFRDccRDccI=cI=cI=cI=cI=cI=cI=cI=cI=cL?w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`L?ccs]pccC8cC8cC8cC8cC8cC8cC8cC8cC8cG;I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=D9ccD9rcc=3c=3c=3c=3c=3c=3c=3c=3c=3c?5jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jV>4cchUcc:0c8/c8/c8/c8/c8/c8/c8/c8/\;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;190cc90cM4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&6'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE98""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""!"q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\kWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWr\aOaOaOcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRcQaOaOcQTEv`UF{dUF{dUF{dUF{dUF{dUF{dUF{dUF{dZJi]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]LiYIv`TEg{dccOAcM@cM@cM@cM@cM@cM@cM@cSEUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFRDccRDFccI=cI=cI=cI=cI=cI=cI=cI=cM@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`L?ccs]CccC8cC8cC8cC8cC8cC8cC8cC8OI=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=D9ccD9cc=3c=3c=3c=3c=3c=3c=3c=3GA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jV>4cchUcc:0c8/c8/c8/c8/c8/c8/c8/<;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;190cc90-4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_NTE-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""q\QZq\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\kWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWr8aOaOaOcQcQcQcQcQcQcQcQcQcQcQcQcQdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRcQaOaOcQATEv`UF{dUF{dUF{dUF{dUF{dUF{dUF{d]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]LiYIv`TEg_NccOAcM@cM@cM@cM@cM@cM@MUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFRDccRD&ccI=cI=cI=cI=cI=cI=cI=FN@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`L?ccs]ccC8cC8cC8cC8cC8cC8cC8;I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=D9ccD9cc=3c=3c=3c=3c=3c=3c=34A6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jV>4cchUcc:0c8/c8/c8/c8/c8/c8/vb&;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;190cc90j4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_NdR-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TEN""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""I=4q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\-&kWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWraOaOaOcQcQcQcQcQcQcQcQcQcQcQdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRcQaOaOcQTEv`UF{dUF{dUF{dUF{dUF{dUF}e]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]LiYIv`TEgccOAcM@cM@cM@cM@cM@9UFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFRDccRDWccI=cI=cI=cI=cI=cI=2N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`L?ccs]dccC8cC8cC8cC8cC8cC8ye&I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=D9ccD9UFcc=3c=3c=3c=3c=3c=3zdA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jV>4cchU=cc:0c8/c8/c8/c8/c8/;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;190cc904,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N;1-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&,'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""pq\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\rkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWraOaOaOcQcQcQcQcQcQcQcQcQdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRcQaOaOcQcMTEv`UF{dUF{dUF{dUF{dUFh]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]LiYIv`TEgccOAcM@cM@cM@cM@~h%UFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFRDccRD6ccI=cI=cI=cI=cI=gN@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`L?ccs];ccC8cC8cC8cC8cC8I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=D9ccD9cc=3c=3c=3c=3c=3jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jV>4cchU!cc:0c8/c8/c8/c90;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;190cc90"4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&\'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""iFCq\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\kWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWraOaOaOcQcQcQcQcQcQdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRcQaOaOcQ-TEv`UF{dUF{dUF{dUFi]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]LiYIv`TEgTEccOAcM@cM@cOAUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFRDccRDccI=cI=cI=cK>w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`L?ccs]ccC8cC8cC8cF:I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=D9ccD9q\cc=3c=3c=3c>4jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jV>4cchUQcc:0c8/c8/c;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;190cc90]4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&='!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TEA""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""_N&q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\kWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWraOaOaOcQcQcQcQdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRcQaOaOcQjTEv`UF{dUF{dYIi]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]LiYIv`TEgdRccOAcM@cPBUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFRDccRDccI=cI=cL?w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`L?ccs]NccC8cC8cH<I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=D9ccD9I=cc=3c=3cA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jV>4cchUcc:0c8/L;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;190cc9044,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""Wdq\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\UFkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWr@aOaOaOcQdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRcQaOaOcQTEv`UF{dZJi]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]LiYIv`TEg;1ccOAcTEUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFRDccRD,ccI=`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`L?ccs]'ccC8LI=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=D9ccD9"cc=3ݷCA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jV>4cchUcc:07;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;190cc90p4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_Nr-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TEGU""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""6;q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\kWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWrkWr!aOaOcQdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRcQaOaOcQ"TEv`YIi]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]Li]LiYIv`TEgccRDUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFUFRDccRD\ccL?w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`N@w`L?ccs]ccD9I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=I=D9ccD9icc>4jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jVA6jV>4cchUFcc90;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;190cc90C4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_N4,_NjV-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&-&'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE'!TE-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""TEpromoe-0.1.1/features/000077500000000000000000000000001134030477200146315ustar00rootroot00000000000000promoe-0.1.1/features/pkgconfig.prf000066400000000000000000000005231134030477200173110ustar00rootroot00000000000000# This file is intended replacement for Qt's link_pkgconfig for(PACKAGE, $$list($$unique(PKGCONFIG))) { system(pkg-config --exists $$PACKAGE) { CONFIG += $$PACKAGE } } QMAKE_CXXFLAGS += $$system(pkg-config --cflags $$PKGCONFIG) QMAKE_CFLAGS += $$system(pkg-config --cflags $$PKGCONFIG) LIBS += $$system(pkg-config --libs $$PKGCONFIG) promoe-0.1.1/lib/000077500000000000000000000000001134030477200135615ustar00rootroot00000000000000promoe-0.1.1/lib/README000066400000000000000000000001451134030477200144410ustar00rootroot00000000000000Contains a copy of some of Esperanzas src/lib/ directory Will perhaps someday become a seperate lib promoe-0.1.1/lib/compat.h000066400000000000000000000030221134030477200152120ustar00rootroot00000000000000/** * This file is a part of Promoe, an XMMS2 Client. * * Copyright (C) 2005-2009 XMMS2 Team * * 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 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that 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. */ #ifndef __COMPAT_H__ #define __COMPAT_H__ #ifdef HAVE_XMMSV #undef HAVE_XMMSV #define HAVE_XMMSV 1 #else #include #define HAVE_XMMSV (XMMS_IPC_PROTOCOL_VERSION >= 13) #endif #include #include #if HAVE_XMMSV #include #include #endif inline QString decodeXmmsUrl (const QString &path) { QByteArray p_enc = path.toUtf8 (); QString ret; #if HAVE_XMMSV // TODO: error checking... xmmsv_t *v_enc = xmmsv_new_string (p_enc.constData ()); xmmsv_t *p_dec = xmmsv_decode_url (v_enc); xmmsv_unref (v_enc); const char *p; unsigned int p_len; xmmsv_get_bin (p_dec, reinterpret_cast(&p), &p_len); ret = QString::fromUtf8 (p, p_len); xmmsv_unref (p_dec); // Free p? #else char *p_dec = const_cast (xmmsc_result_decode_url (NULL, p_enc.constData ())); ret = QString::fromUtf8 (p_dec); free (p_dec); #endif return ret; } #endif promoe-0.1.1/lib/debug.h000066400000000000000000000020011134030477200150110ustar00rootroot00000000000000/** * This file is a part of Esperanza, an XMMS2 Client. * * Copyright (C) 2007 XMMS2 Team * * 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 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that 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. */ // Usage: include it and then just do a DBGOUT("bla foo bar " << variable << " is awesome."); // while in debug mode, it will all be print to console. In release mode, DBGOUT does nothing #ifndef __DEBUG_H__ # define __DEBUG_H__ # ifdef _DEBUG # include # define DBGOUT(a) qDebug () << QString(__FILE__ ":%1").arg(__LINE__) << "[" << __func__ << "] -" << a # else # define DBGOUT(a) # endif #endif promoe-0.1.1/lib/lib.pro000066400000000000000000000013521134030477200150520ustar00rootroot00000000000000TEMPLATE = lib CONFIG += static include (../config.pri) PKGCONFIG += xmms2-client-cpp load (../features/pkgconfig.prf) !xmms2-client-cpp:error (Please install the xmms2 c++ client library) MOC_DIR = .moc OBJECTS_DIR = .obj SOURCES += xclient.cpp \ xclientcache.cpp \ xconfig.cpp \ xplayback.cpp \ xcollection.cpp \ playlistmodel.cpp \ xmmsqt4.cpp HEADERS += xclient.h \ xclientcache.h \ xconfig.h \ xplayback.h \ xcollection.h \ xcollection_p.h \ playlistmodel.h \ xmmsqt4.h \ sourcepref.h \ compat.h \ debug.h QT += network QMAKE_LFLAGS += -L$$[QT_INSTALL_PLUGINS]/imageformats QMAKE_CXXFLAGS += -g QMAKE_CXXFLAGS_WARN_ON += -Wno-unused-parameter promoe-0.1.1/lib/playlistmodel.cpp000066400000000000000000000337651134030477200171650ustar00rootroot00000000000000/** * This file is a part of Esperanza, an XMMS2 Client. * * Copyright (C) 2005-2007 XMMS2 Team * * 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 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that 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. */ #include #include "compat.h" #include #include #include #include #include #include #include #include #include "playlistmodel.h" #include "xclient.h" #include "xclientcache.h" // Used to check for Protocolversion at compiletime #include PlaylistModel::PlaylistModel (QObject *parent, XClient *client, const QString &name) : QAbstractItemModel (parent), m_current_pos (0) { // m_columns.append ("#"); m_columns.append ("Artist"); m_columns.append ("Title"); m_columns.append ("Duration"); // m_colfallback.append (""); m_colfallback.append (""); m_colfallback.append ("url"); m_colfallback.append (""); m_cached_size.append (QSize ()); m_cached_size.append (QSize ()); m_cached_size.append (QSize ()); connect (client, SIGNAL(gotConnection (XClient *)), this, SLOT (got_connection (XClient *))); connect (client->cache (), SIGNAL(entryChanged (uint32_t)), this, SLOT (entry_changed (uint32_t))); m_isactive = (name == QLatin1String ("_active")); m_name = name; if (client->isConnected ()) { got_connection (client); } } void PlaylistModel::set_playlist (const QString &name) { if (name == QLatin1String ("_active")) { m_isactive = true; m_client->playlist ()->currentActive () (Xmms::bind (&PlaylistModel::handle_current_pls, this)); } else { m_isactive = false; } m_name = name; m_client->playlist ()->listEntries (XClient::qToStd (name)) (Xmms::bind (&PlaylistModel::handle_list, this)); } bool PlaylistModel::handle_current_pls (const std::string &name) { if (m_name == QLatin1String ("_active")) { m_name = XClient::stdToQ (name); } return true; } void PlaylistModel::got_connection (XClient *client) { if (m_isactive) { client->playlist ()->currentActive () (Xmms::bind (&PlaylistModel::handle_current_pls, this)); } client->playlist ()->listEntries (XClient::qToStd (m_name)) (Xmms::bind (&PlaylistModel::handle_list, this)); client->playlist ()->currentPos () (Xmms::bind (&PlaylistModel::handle_update_pos, this)); client->playlist ()->broadcastChanged () (Xmms::bind (&PlaylistModel::handle_change, this)); client->playlist ()->broadcastCurrentPos () (Xmms::bind (&PlaylistModel::handle_update_pos, this)); client->playlist ()->broadcastLoaded () (Xmms::bind (&PlaylistModel::handle_pls_loaded, this)); m_client = client; } bool PlaylistModel::handle_pls_loaded (const std::string &name) { if (m_isactive) { m_client->playlist ()->listEntries (name) (Xmms::bind (&PlaylistModel::handle_list, this)); m_name = XClient::stdToQ (name); } return true; } #if (XMMS_IPC_PROTOCOL_VERSION > 10) bool PlaylistModel::handle_update_pos (const Xmms::Dict &posdict) { QString changed_pl = XClient::stdToQ (posdict.get ("name")); if (changed_pl == m_name) { #if HAVE_XMMSV uint32_t pos = posdict.get ("position"); #else uint32_t pos = posdict.get ("position"); #endif m_current_pos = pos; emit currentPosChanged (index (pos, 0)); emit dataChanged(index (pos, 0), index (pos, m_columns.size ())); } return true; } #else bool PlaylistModel::handle_update_pos (const uint32_t &pos) { m_current_pos = pos; emit currentPosChanged (index (pos, 0)); emit dataChanged(index (pos, 0), index (pos, m_columns.size ())); return true; } #endif QList PlaylistModel::columns () const { return m_columns; } void PlaylistModel::setColumns (const QList &new_columns) { m_columns = new_columns; reset (); } void PlaylistModel::setColumnFallback (const QList &new_columns) { m_colfallback = new_columns; reset (); } bool PlaylistModel::handle_change (const Xmms::Dict &chg) { int32_t change = chg.get ("type"); int32_t pos = 0, npos = 0; int32_t id = 0; QString s; if (chg.contains ("position")) { pos = chg.get ("position"); } if (chg.contains ("id")) { #if HAVE_XMMSV id = chg.get ("id"); #else id = chg.get ("id"); #endif } if (chg.contains ("name")) { s = XClient::stdToQ (chg.get ("name")); } if (s != m_name) { return true; } QModelIndex idx = QModelIndex (); switch (change) { case XMMS_PLAYLIST_CHANGED_ADD: beginInsertRows (idx, pos, pos); m_plist.append (id); endInsertRows (); break; case XMMS_PLAYLIST_CHANGED_INSERT: beginInsertRows (idx, pos, pos); m_plist.insert (pos, id); endInsertRows (); break; case XMMS_PLAYLIST_CHANGED_MOVE: npos = chg.get ("newposition"); beginRemoveRows (idx, pos, pos); m_plist.removeAt (pos); endRemoveRows (); beginInsertRows (idx, npos, npos); m_plist.insert (npos, id); endInsertRows (); if (pos < npos && pos) pos --; emit entryMoved (index (pos, 0), index (npos, 0)); break; case XMMS_PLAYLIST_CHANGED_REMOVE: m_client->cache ()->invalidate (m_plist[pos]); beginRemoveRows (idx, pos, pos); m_plist.removeAt (pos); endRemoveRows (); break; case XMMS_PLAYLIST_CHANGED_SHUFFLE: case XMMS_PLAYLIST_CHANGED_SORT: case XMMS_PLAYLIST_CHANGED_CLEAR: m_client->cache ()->invalidate_all (); m_client->playlist ()->listEntries () (Xmms::bind (&PlaylistModel::handle_list, this)); break; } /* TODO: call this only for the necessary methods */ emitTotalPlaytime (); return true; } #if HAVE_XMMSV bool PlaylistModel::handle_list (const Xmms::List< int > &list) #else bool PlaylistModel::handle_list (const Xmms::List< unsigned int > &list) #endif { beginRemoveRows (QModelIndex (), 0, m_plist.size ()); m_plist.clear (); endRemoveRows (); int i = 0; #if HAVE_XMMSV for (Xmms::List< int >::const_iterator iter = list.begin(); iter != list.end(); ++iter) { i++; } #else for (list.first (); list.isValid (); ++list) { i ++; } #endif beginInsertRows (QModelIndex (), 0, i); #if HAVE_XMMSV for (Xmms::List< int >::const_iterator iter = list.begin(); iter != list.end(); ++iter) { m_plist.append (*iter); } #else for (list.first (); list.isValid (); ++list) { m_plist.append (*list); } #endif endInsertRows (); emitTotalPlaytime (); return true; } QModelIndexList PlaylistModel::get_idxlist_by_id (uint32_t id) { QModelIndexList ret; QList l = getPosById (id); for (int i = 0; i < l.count (); i++) { ret.append (index (l.at (i), 0)); } return ret; } QList PlaylistModel::getPosById (uint32_t id) { QList ret; int32_t pos = m_plist.indexOf (id); while (pos != -1) { ret.append (pos); pos = m_plist.indexOf (id, pos + 1); } return ret; } void PlaylistModel::entry_changed (uint32_t id) { QList pos = getPosById (id); for (int i = 0; i < pos.size (); i ++) { QModelIndex idx1 = index (pos.at (i), 0); QModelIndex idx2 = index (pos.at (i), m_columns.size ()); emit dataChanged(idx1, idx2); } emitTotalPlaytime (); } int PlaylistModel::columnCount (const QModelIndex &parent) const { return m_columns.size (); } int PlaylistModel::rowCount (const QModelIndex &parent) const { if (!parent.isValid ()) { return m_plist.size (); } return 0; } QModelIndex PlaylistModel::parent (const QModelIndex &idx) const { return QModelIndex (); } QModelIndex PlaylistModel::index (int row, int column, const QModelIndex &parent) const { if (!parent.isValid ()) { if (row > (m_plist.size () - 1)) return QModelIndex (); if (row < 0) return QModelIndex (); return createIndex (row, column, -1); } return QModelIndex (); } QVariant PlaylistModel::data (const QModelIndex &index, int role) const { if (!index.isValid ()) { return QVariant (); } if (index.row () >= m_plist.size ()) { return QVariant (); } if (role == MedialibIdRole) { return QVariant (m_plist[index.row ()]); } if (role == Qt::SizeHintRole) { if (m_cached_size[index.column ()].isValid ()) { return QVariant (m_cached_size[index.column ()]); } return QVariant (); } if (role == Qt::DisplayRole || role == Qt::ToolTipRole) { QString key = m_columns[index.column ()].toLower (); QString fallkey = m_colfallback[index.column ()].toLower (); if (key == "#") { return QVariant (index.row ()); } else { unsigned int id = m_plist[index.row ()]; PlaylistModel *fake = const_cast (this); QHash d = fake->m_client->cache ()->get_info (id); if (d.contains (key)) { return QVariant (d[key]); } else if (d.contains (fallkey)) { return QVariant (d[fallkey]); } return QVariant (); } } else if (role == CurrentEntryRole) { int i = m_current_pos; if (index.row () == i) return QVariant (true); return QVariant (false); } return QVariant (); } QStringList PlaylistModel::mimeTypes () const { QStringList l ("application/x-xmms2poslist"); l << "application/x-xmms2mlibid"; l << "text/uri-list"; return l; } QMimeData * PlaylistModel::mimeData (const QModelIndexList &list) const { QMimeData *ret = new QMimeData (); QByteArray ba; QDataStream stream (&ba, QIODevice::WriteOnly); QList l; for (int i = 0; i < list.size (); i ++) { QModelIndex idx = list.at (i); if (idx.column () != 0) continue; l.append (idx.row ()); } stream << l; ret->setData ("application/x-xmms2poslist", ba); return ret; } bool PlaylistModel::dropMimeData (const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex & parent) { if (parent.internalId () != -1 && parent.isValid ()) { return false; } if (data->hasFormat ("application/x-xmms2poslist")) { if (!parent.isValid ()) return false; QByteArray ba = data->data ("application/x-xmms2poslist"); QDataStream stream (&ba, QIODevice::ReadOnly); QList l; stream >> l; qSort (l); int target = parent.row (); int mod = 0; while (l.size ()) { int orow = l.takeAt (0) - mod; m_client->playlist ()->moveEntry (orow, target) (); if (orow < target) { mod ++; } else { target ++; } } return true; } else if (data->hasFormat ("application/x-xmms2mlibid")) { QByteArray ba = data->data ("application/x-xmms2mlibid"); QDataStream stream (&ba, QIODevice::ReadOnly); QList l; stream >> l; int target; if (parent.isValid ()) target = parent.row () + 1; else target = m_plist.size () + 1; while (l.size ()) { int id = l.takeAt (0); if (target >= m_plist.size ()) { m_client->playlist ()->addId (id) (); } else { m_client->playlist ()->insertId (target ++, id) (); } } return true; } else if (data->hasFormat ("text/uri-list")) { int target; if (parent.isValid ()) target = parent.row () + 1; else target = m_plist.size () + 1; QList l = data->urls (); qSort (l); for (int i = 0; i < l.size (); i++) { QFileInfo fi (l.at (i).toLocalFile ()); std::string s ("file:///"); s.append (fi.absoluteFilePath ().toLocal8Bit ()); if (fi.isFile ()) { if (target >= m_plist.size ()) { m_client->playlist ()->addUrl (s) (); } else { m_client->playlist ()->insertUrl (target ++, s) (); } } else if (fi.isDir ()) { m_client->playlist ()->addRecursive (s) (); } } return true; } return false; } Qt::DropActions PlaylistModel::supportedDropActions () const { return Qt::CopyAction | Qt::MoveAction; } QVariant PlaylistModel::headerData (int section, Qt::Orientation orientation, int role) const { if (role != Qt::DisplayRole) { return QVariant (); } if (orientation == Qt::Horizontal) { if (section <= m_columns.size ()) return QVariant (m_columns[section]); } return QVariant (); } Qt::ItemFlags PlaylistModel::flags (const QModelIndex &idx) const { // TODO: For now a workaround to enable drag and drop in promoe if (!idx.isValid()) { return 0; } unsigned int id = m_plist[idx.row ()]; PlaylistModel *fake = const_cast (this); QHash d = fake->m_client->cache ()->get_info (id); Qt::ItemFlags f = Qt::ItemIsSelectable | Qt::ItemIsDragEnabled; if (idx.isValid ()) { f |= Qt::ItemIsDropEnabled; } if (d.contains ("status") && d["status"] != XMMS_MEDIALIB_ENTRY_STATUS_NOT_AVAILABLE) { f |= Qt::ItemIsEnabled; } return f; } void PlaylistModel::emitTotalPlaytime () { bool isExact = true; uint32_t time = 0; foreach (uint32_t index, m_plist) { QHash data = m_client->cache ()->get_info (index, false); if (!data.isEmpty ()) { time += data.value ("duration", 0).toInt (); } else { isExact = false; } } emit totalPlaytime (time/1000, isExact); } uint32_t PlaylistModel::getPlaytimeForSelection(const QModelIndexList &index_list) { uint32_t playtime = 0; foreach (QModelIndex idx, index_list) { int id = idx.row (); if (id >= m_plist.size ()) continue; QHash data = m_client->cache ()->get_info (m_plist.at (id), false); if (!data.isEmpty ()) playtime += data.value ("duration", 0).toInt (); } return playtime/1000; } QList PlaylistModel::get_all_id () { return m_plist; } void PlaylistModel::removeRows (QModelIndexList index_list) { QList idlist; for (int i = 0; i < index_list.size (); ++i) { QModelIndex idx = index_list.at(i); if (idx.column () != 0) continue; idlist.append (idx.row ()); } qSort (idlist); /* Update of m_plist is done in handle_change through server notification */ for (int i = idlist.size () - 1; i >= 0; --i){ m_client->playlist ()->removeEntry (idlist.at(i)); } } promoe-0.1.1/lib/playlistmodel.h000066400000000000000000000113321134030477200166140ustar00rootroot00000000000000/** * This file is a part of Esperanza, an XMMS2 Client. * * Copyright (C) 2005-2007 XMMS2 Team * * 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 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that 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. */ #ifndef __PLAYLIST_MODEL_H__ #define __PLAYLIST_MODEL_H__ #include #include "compat.h" class XClient; #include #include #include #include /** * @class PlaylistModel playlistmodel.h * @brief A model that represents a playlist on the server * * This model will show the playlist and update it according to the * changes from the server. This can be subclassed to be customized. **/ class PlaylistModel : public QAbstractItemModel { Q_OBJECT public: /** * The constructor for the PlaylistModel. * @param parent The parent QObject for this model * @param client The XClient object to be used in order to get the updates * @param n The name of the playlist that this model should show **/ PlaylistModel (QObject *parent, XClient *client, const QString &n = "_active"); enum { DisplayRole = Qt::DisplayRole, ToolTipRole = Qt::ToolTipRole, CurrentEntryRole = 200, MedialibIdRole, AvailableRole }; int rowCount (const QModelIndex &parent) const; int columnCount (const QModelIndex &parent) const; QVariant data (const QModelIndex &index, int role = DisplayRole) const; QVariant headerData (int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const; Qt::ItemFlags flags (const QModelIndex &) const; QModelIndex parent (const QModelIndex &) const; QModelIndex index (int row, int column, const QModelIndex &idx = QModelIndex ()) const; QMimeData *mimeData (const QModelIndexList &list) const; bool dropMimeData (const QMimeData * data, Qt::DropAction action, int row, int column, const QModelIndex & parent); Qt::DropActions supportedDropActions () const; QStringList mimeTypes () const; QModelIndex currentPos () {return index (m_current_pos, 0);} /** * Set the columns that should be shown in the view. * @param columns A list of property keys. i.e. "artist", "album" **/ void setColumns (const QList &columns); /** * Set fallback columns. A fallback column is what should be shown * if the first column is not available for that entry. * @param columns A list of property keys. **/ void setColumnFallback (const QList &columns); /** * Return the current columns. **/ QList columns () const; /** * Return a list of all entry ids that are currently in the list. **/ QList get_all_id (); void set_cached_size (int i, const QSize &size) { m_cached_size[i] = size; }; QSize cached_size (int i) const { return m_cached_size[i]; }; /** * Return a list of QModelIndex for the entry. Since one * entry can be in the Playlist multiple times we need to * return a list of indexes. * @ **/ QModelIndexList get_idxlist_by_id (uint32_t); QModelIndex current_playlist_pos () const { return index (m_current_pos, 0); }; void set_playlist (const QString &); void removeRows (QModelIndexList); uint32_t getPlaytimeForSelection(const QModelIndexList &index_list); protected: XClient *m_client; QList < unsigned int > m_plist; QList < uint32_t > getPosById (uint32_t id); QList < QString > m_columns; QList < QString > m_colfallback; signals: void entryMoved (const QModelIndex &, const QModelIndex &); void currentPosChanged (QModelIndex); void totalPlaytime (uint32_t seconds, bool isExact); public slots: void got_connection (XClient *); void entry_changed (uint32_t); private: #if HAVE_XMMSV bool handle_list (const Xmms::List< int > &list); #else bool handle_list (const Xmms::List< unsigned int > &list); #endif bool handle_change (const Xmms::Dict &chg); #if (XMMS_IPC_PROTOCOL_VERSION > 10) bool handle_update_pos (const Xmms::Dict &pos); #else bool handle_update_pos (const unsigned int &pos); #endif bool handle_pls_loaded (const std::string &); bool handle_current_pls (const std::string &); void getInfo (unsigned int id) const; void emitTotalPlaytime (); uint32_t m_current_pos; bool m_isactive; QList m_cached_size; QString m_name; }; #endif promoe-0.1.1/lib/sourcepref.h000066400000000000000000000043051134030477200161110ustar00rootroot00000000000000/** * This file is a part of Promoe, an XMMS2 Client. * * Copyright (C) 2008 XMMS2 Team * * 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 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that 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. */ /* * This file contains a hack to be able to honor source preferences when * converting a Propdicts to a QHash. * It is only included in xclient.cpp and only used internally in that class * * The limitations that make this file necessary will be fixed with Coll2. So * this file can be removed as soon as Coll2 reaches xmms2-stabe * * * Minor note: At the time of writing this file, Coll2 wasn't in -devel, so * this might still take some time */ #ifndef __SOURCEPREF__ #define __SOURCEPREF__ #include #include #include #include /* * This class is used to get the source preference from a propdict as a * QList. */ class MyPropDict : public Xmms::PropDict { public: MyPropDict (const Xmms::PropDict &d) : PropDict (d) {} QList getSourcePreference () { const char **sourcepref = xmmsc_result_source_preference_get (result_); QList prio_list; for (; *sourcepref; ++sourcepref) { prio_list.append (QRegExp (*sourcepref, Qt::CaseSensitive, QRegExp::Wildcard)); } return prio_list; } }; int getPriority (const QString source, const QList prio_list) { for (int i=0; i < prio_list.size (); ++i) { if (prio_list[i].exactMatch (source)) return i; } // If source doesn't match any expression in prio_list return an invalid // value. (The biggest valid value is prio_list.length () -1 ) // In that case, the caller should not use the value corresponding with // this source return prio_list.size (); } #endif promoe-0.1.1/lib/xclient.cpp000066400000000000000000000153721134030477200157430ustar00rootroot00000000000000/** * This file is a part of Esperanza, an XMMS2 Client. * * Copyright (C) 2005-2007 XMMS2 Team * * 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 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that 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. */ #include #include "compat.h" #include #include #include #include #include #include "xclient.h" #include "xclientcache.h" #include "xplayback.h" #include "xcollection.h" #include "xconfig.h" #include "xmmsqt4.h" #include "debug.h" #include "playlistmodel.h" #if !HAVE_XMMSV #include "sourcepref.h" #endif #include QString XClient::stdToQ (const std::string &str) { return QString::fromUtf8 (str.c_str ()); } std::string XClient::qToStd (const QString &str) { return std::string (str.toUtf8 ().data ()); } /* QDir XClient::esperanza_dir () { QDir c (stdToQ (Xmms::getUserConfDir ())); if (!c.cd ("clients/Esperanza")) { c.mkpath ("clients/Esperanza"); if (!c.cd ("clients/Esperanza")) { qDebug ("couldn't open dir"); } return c; } else { return c; } return QDir (); } */ XClient::XClient (QObject *parent, const std::string &name) : QObject (parent), m_sync (name + "-sync") { m_client = NULL; m_isconnected = false; m_cache = new XClientCache (this); m_config = new XConfig (this); m_playback = new XPlayback (this); m_collection = new XCollection (this); m_active_playlist = new PlaylistModel(this, this, "_active"); m_name = name; } void XClient::disconnect () { delete m_client; m_client = NULL; m_isconnected = false; emit disconnected (this); } void XClient::shutdownServer () { if (!m_client) return; m_client->quit (); /* OnWrite is called here to make sure all pending messeages get sent * to the server, even if an application is closing down. * If this call is removed it can no longer be guaranted that the * quit messeage is sent to the server */ XmmsQT4 *notifier = dynamic_cast(&m_client->getMainLoop()); notifier->OnWrite (); return; } bool XClient::connect (const char *ipcpath, const bool &sync, QWidget *parent) { bool tried_once = false; try_again: try { delete m_client; m_client = new Xmms::Client (m_name); if (!ipcpath || ipcpath == QLatin1String ("")) m_client->connect (NULL); else m_client->connect (ipcpath); } catch (Xmms::connection_error& e) { if (ipcpath == NULL && !tried_once) { QSettings s; if (s.value ("core/autostart", true).toBool ()) { if (!system ("xmms2-launcher")) { tried_once = true; goto try_again; } } } QErrorMessage *err = new QErrorMessage (parent); err->showMessage ("Couldn't connect to XMMS2, please try again."); err->exec (); delete err; return false; } m_client->setMainloop (new XmmsQT4 (m_client->getConnection ())); if (sync) { try { m_sync.connect (ipcpath); } catch (Xmms::connection_error &e) { qWarning ("Couldn't establish sync connection!"); } } m_isconnected = true; // useing normal disconnect callback, if that causes problems, // an own method schould be created setDisconnectCallback (boost::bind (&XClient::disconnect, this)); emit gotConnection (this); return true; } void XClient::dictToQHash (const std::string &key, const Xmms::Dict::Variant &value, QHash &hash) { if (value.type () == typeid (int32_t)) { hash.insert (QString::fromLatin1 (key.c_str ()), QVariant (boost::get< int32_t > (value))); } else if (value.type () == typeid (uint32_t)) { hash.insert (QString::fromLatin1 (key.c_str ()), QVariant (boost::get< uint32_t > (value))); } else { QString val; val = QString::fromUtf8 (boost::get< std::string > (value).c_str ()); hash.insert (stdToQ (key), QVariant (val)); } } /** * convert a Xmms::Dict to a QHash **/ QHash XClient::convert_dict (const Xmms::Dict &dict) { QHash hash; dict.each (boost::bind (&XClient::dictToQHash, _1, _2, boost::ref (hash))); return hash; } void XClient::propDictToQHash (const std::string &key, const Xmms::Dict::Variant &value, const std::string &source, #ifdef SOURCEPREF_HACK const QList &prio_list, QHash &curr_prio, #endif QHash &hash) { #ifdef SOURCEPREF_HACK // braces because of tmp_prio definition { int tmp_prio = getPriority (QString::fromStdString (source), prio_list); QString tmp_key = QString::fromStdString (key); // Don't add a new value if the priority of it isn't better than the // priority already present in hash. If there is no "*" source // preference, this also get's rid of values we don't want at all if (tmp_prio >= curr_prio.value (tmp_key, prio_list.size ())) return; // Set the priority of the current source-key combination for the key, so // that we do not overwrite our value with a worse source for this key. // (higher priority values are worse) curr_prio[tmp_key] = tmp_prio; } #endif if (value.type () == typeid (int32_t)) { hash.insert (QString::fromLatin1 (key.c_str ()), QVariant (boost::get< int32_t > (value))); } else if (value.type () == typeid (uint32_t)) { hash.insert (QString::fromLatin1 (key.c_str ()), QVariant (boost::get< uint32_t > (value))); } else { QString val; if (key == "url") { QString tmp = QString::fromUtf8 (boost::get< std::string >(value).c_str ()); #if 0 val = decodeXmmsUrl (tmp); #else tmp = decodeXmmsUrl (tmp); val = tmp.mid (tmp.lastIndexOf ("/") + 1); if (val.isEmpty ()) { val = tmp; } #endif } else { val = QString::fromUtf8 (boost::get< std::string > (value).c_str ()); } hash.insert (stdToQ (key), QVariant (val)); } } /** * convert a Xmms::PropDict to a QHash **/ QHash XClient::convert_propdict (const Xmms::PropDict &dict) { QHash hash; #ifdef SOURCEPREF_HACK MyPropDict d (dict); QList priolist = d.getSourcePreference (); QHash curr_prio; #endif dict.each (boost::bind (&XClient::propDictToQHash, _1, _2, _3, #ifdef SOURCEPREF_HACK boost::ref (priolist), boost::ref (curr_prio), #endif boost::ref (hash))); return hash; } promoe-0.1.1/lib/xclient.h000066400000000000000000000102221134030477200153750ustar00rootroot00000000000000/** * This file is a part of Esperanza, an XMMS2 Client. * * Copyright (C) 2005-2007 XMMS2 Team * * 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 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that 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. */ #ifndef __XCLIENT_H__ #define __XCLIENT_H__ #include #include "compat.h" #include #include #include #include class QWidget; class XClientCache; class XConfig; class XPlayback; class XCollection; class PlaylistModel; #define SOURCEPREF_HACK // Doesn't work for XMMSV yet #if HAVE_XMMSV #undef SOURCEPREF_HACK #endif class XClient : public QObject { Q_OBJECT public: XClient (QObject *, const std::string &); bool connect (const char *path = NULL, const bool &sync = false, QWidget* parent = NULL); static void propDictToQHash (const std::string &key, const Xmms::Dict::Variant &value, const std::string &source, #ifdef SOURCEPREF_HACK const QList &priolist, QHash &curr_prio, #endif QHash &hash); static void dictToQHash (const std::string &key, const Xmms::Dict::Variant &value, QHash &hash); static QHash convert_propdict (const Xmms::PropDict &); static QHash convert_dict (const Xmms::Dict &); XClientCache *cache () const { return m_cache; }; XConfig *xconfig () const { return m_config; }; XPlayback *xplayback () const { return m_playback; } XCollection *xcollection () const { return m_collection; } PlaylistModel *active_playlist () const { return m_active_playlist; } const Xmms::Client *sync () const { return &m_sync; }; static QString stdToQ (const std::string &); static std::string qToStd (const QString &); bool isConnected () const { return m_isconnected; }; // static QDir esperanza_dir (); #if (XMMS_IPC_PROTOCOL_VERSION > 13) void setDisconnectCallback (const Xmms::DisconnectCallback::value_type &slot) { m_client->setDisconnectCallback (slot); } #else void setDisconnectCallback (const Xmms::DisconnectCallback::slot_type &slot) { m_client->setDisconnectCallback (slot); } #endif const Xmms::Collection* collection () { if (m_client && m_client->isConnected ()) return &m_client->collection; else return NULL; } const Xmms::Playlist* playlist () { if (m_client && m_client->isConnected ()) return &m_client->playlist; else return NULL; } const Xmms::Playback* playback () { if (m_client && m_client->isConnected ()) return &m_client->playback; else return NULL; } const Xmms::Medialib* medialib () { if (m_client && m_client->isConnected ()) return &m_client->medialib; else return NULL; } const Xmms::Bindata* bindata () { if (m_client && m_client->isConnected ()) return &m_client->bindata; else return NULL; } const Xmms::Config* config () { if (m_client && m_client->isConnected ()) return &m_client->config; else return NULL; } const Xmms::Stats* stats () { if (m_client && m_client->isConnected ()) return &m_client->stats; else return NULL; } // TODO: remove as soon as it's no longer neede Xmms::Client *getClient () {return m_client;} signals: void gotConnection (XClient *); void disconnected (XClient *); public slots: void disconnect (); void shutdownServer (); protected: Xmms::Client *m_client; private: std::string m_name; // Xmms::Client *m_client; XClientCache *m_cache; XConfig *m_config; XPlayback *m_playback; XCollection *m_collection; PlaylistModel *m_active_playlist; bool m_isconnected; Xmms::Client m_sync; }; #endif promoe-0.1.1/lib/xclientcache.cpp000066400000000000000000000112021134030477200167130ustar00rootroot00000000000000/** * This file is a part of Esperanza, an XMMS2 Client. * * Copyright (C) 2005-2007 XMMS2 Team * * 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 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that 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. */ #include "xclientcache.h" #include "xclient.h" #include #include #include #include #include #include #include #include XClientCache::XClientCache (XClient *client) : QObject (client) { QSettings s; connect (client, SIGNAL (gotConnection (XClient *)), this, SLOT (got_connection (XClient *))); QPixmapCache::setCacheLimit (s.value ("core/pixmapcache").toInt ()); } void XClientCache::got_connection (XClient *client) { m_client = client; client->playback ()->signalPlaytime () ( Xmms::bind (&XClientCache::handle_playtime, this)); client->playback ()->getPlaytime () ( Xmms::bind (&XClientCache::handle_playtime, this)); client->medialib ()->broadcastEntryChanged () ( Xmms::bind (&XClientCache::handle_mlib_entry_changed, this)); client->playback ()->broadcastCurrentID () ( Xmms::bind (&XClientCache::handle_current_id_changed, this)); client->playback ()->currentID () ( Xmms::bind (&XClientCache::handle_current_id_changed, this)); } bool XClientCache::handle_medialib_info_error (const std::string &error, uint32_t id) { /* we probably couldn't find that entry, let's remove it */ m_info.remove (id); emit entryRemoved (id); return true; } bool XClientCache::handle_medialib_info (const Xmms::PropDict &info) { uint32_t id = info.get ("id"); QHash hash = XClient::convert_propdict (info); m_info.insert (id, hash); emit entryChanged (id); if (id == m_current_id) { emit activeEntryChanged (hash); } return true; } void XClientCache::extra_info_set (uint32_t id, const QString &name, const QVariant &value) { m_extra_info[id][name] = value; } QVariant XClientCache::extra_info_get (uint32_t id, const QString &name) { return m_extra_info[id][name]; } void XClientCache::invalidate (uint32_t id) { m_info.remove (id); } void XClientCache::invalidate_all () { m_info.clear (); } bool XClientCache::handle_bindata (const Xmms::bin &data, const QString &id) { QPixmap i; i.loadFromData (data.c_str (), data.size()); if (i.isNull ()) { return true; } /* conserve memory client side */ if (i.width () < 300) { i = i.scaledToWidth (300, Qt::SmoothTransformation); } QPixmapCache::insert (id, i); QList ids = m_icon_map[id]; for (int i = 0; i < ids.size (); i++) { emit entryChanged (ids.at (i)); } return true; } QIcon XClientCache::get_icon (uint32_t id) { return QIcon (get_pixmap (id)); } QPixmap XClientCache::get_pixmap (uint32_t id) { if (m_info[id].contains ("picture_front")) { QString hash = m_info[id]["picture_front"].toString (); QPixmap p; if (!QPixmapCache::find (hash, p)) { m_client->bindata ()->retrieve (hash.toStdString ()) ( boost::bind (&XClientCache::handle_bindata, this, _1, hash)); QPixmapCache::insert (hash, QPixmap ()); m_icon_map[hash].append (id); } return p; } return QPixmap (); } QHash XClientCache::get_info (uint32_t id, bool fetchFromServer) { if ((!m_info.contains (id)) && fetchFromServer) { m_client->medialib ()->getInfo (id) ( Xmms::bind (&XClientCache::handle_medialib_info, this), boost::bind (&XClientCache::handle_medialib_info_error, this, _1, id)); m_info[id] = QHash (); } return m_info.value(id, QHash()); } bool XClientCache::handle_mlib_entry_changed (const uint32_t &id) { m_client->medialib ()->getInfo (id) (Xmms::bind (&XClientCache::handle_medialib_info, this)); return true; } bool XClientCache::handle_current_id_changed (const uint32_t &id) { m_current_id = id; if (!m_info.contains (id)) { // get_info fetches the metadata from the server, and calls handle_medialib_info. // handle_medialib_info sends the activeEntryChanged Signal get_info (id); return true; } emit activeEntryChanged (m_info[id]); return true; } bool XClientCache::handle_playtime (const unsigned int &tme) { emit playtime(tme); return true; } promoe-0.1.1/lib/xclientcache.h000066400000000000000000000056501134030477200163720ustar00rootroot00000000000000/** * This file is a part of Esperanza, an XMMS2 Client. * * Copyright (C) 2005-2007 XMMS2 Team * * 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 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that 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. */ #ifndef __XCLIENTCACHE_H__ #define __XCLIENTCACHE_H__ // for Xmms::bin definition #include "xmmsclient/xmmsclient++/result.h" class XClient; namespace Xmms { class Dict; class PropDict; } // class XClientCache; // #include "xclient.h" #include #include #include #include class QIcon; class QPixmap; //#include typedef QHash QVariantHash; class XClientCache : public QObject { Q_OBJECT public: XClientCache (XClient *); /* Returns the metadata of the given medialib id, if it is cached * locally. If the metadata is not cached, an empty QHash is returned * If the metadata is not cached and fetchFromServer is true, the * metadata is fetched from the server and a entryChanged SIGNAL is * emitted to notify the caller that the metadata has arrived * DO NOT use this function with fetchFromServer set to false if you * didn't understand this explanation */ QHash get_info (uint32_t id, bool fetchFromServer=true); QVariantHash get_current_info () {return get_info (m_current_id);} QIcon get_icon (uint32_t id); QPixmap get_pixmap (uint32_t id); QVariant extra_info_get (uint32_t, const QString &); void extra_info_set (uint32_t, const QString &, const QVariant &); void invalidate (uint32_t); void invalidate_all (); bool extra_info_has (uint32_t id, const QString &s) { if (m_extra_info.contains (id)) if (m_extra_info[id].contains (s)) return true; return false; }; signals: void entryChanged (uint32_t); void entryRemoved (uint32_t); void playtime (uint32_t); void activeEntryChanged (QVariantHash); public slots: void got_connection (XClient *); private: bool handle_medialib_info (const Xmms::PropDict &info); bool handle_medialib_info_error (const std::string &, uint32_t); bool handle_mlib_entry_changed (const uint32_t &id); bool handle_current_id_changed (const uint32_t &id); bool handle_bindata (const Xmms::bin &, const QString &); bool handle_playtime (const unsigned int &tme); QHash< uint32_t, QHash > m_info; QHash < QString, QList > m_icon_map; QHash < int, QHash < QString, QVariant > > m_extra_info; uint32_t m_current_id; XClient *m_client; }; #endif promoe-0.1.1/lib/xcollection.cpp000066400000000000000000000146401134030477200166150ustar00rootroot00000000000000/** * This file is a part of Promoe, an XMMS2 Client. * * Copyright (C) 2005-2008 XMMS2 Team * * 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; version 2 of the License. * * This program is distributed in the hope that 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. */ #include #include "compat.h" #include "xcollection.h" #include "xcollection_p.h" #include "xclient.h" #include #include #include #include #include /* * Private implemention to hide from collection.h */ XCollection::Private::Private (XCollection *collection, XClient* client) : QObject (collection) { m_client = client; } bool XCollection::Private::on_collection_modified (const Xmms::Dict &value) { QString newname = QString (); QHash tmp = XClient::convert_dict (value); int type = tmp["type"].toInt (); QString name = tmp["name"].toString (); // FIXME: handle other namespaces than "Playlists" if (tmp["namespace"].toString () != "Playlists") { return true; } if (type == XMMS_COLLECTION_CHANGED_RENAME) newname = tmp["newname"].toString (); // FIXME: use namespace parameter switch (type) { case XMMS_COLLECTION_CHANGED_ADD: m_playlists.append (name); break; case XMMS_COLLECTION_CHANGED_REMOVE: m_playlists.removeAll (name); break; case XMMS_COLLECTION_CHANGED_RENAME: m_playlists.removeAll (name); m_playlists.append (newname); break; case XMMS_COLLECTION_CHANGED_UPDATE: // do nothing here break; default: qDebug ("Unhandled collection change type %i", type); } m_playlists.sort (); /* qDebug ("---"); foreach (QString s, m_playlists) { qDebug (s.toAscii ()); } */ emit collectionModified (tmp["name"].toString (), tmp["namespace"].toString (), type, newname); return true; } bool XCollection::Private::handle_idlist_created (const Xmms::Coll::Coll &idlist) { // we add a idlist, we don't want to sort it in any way // I hope this does the trick. std::list < std::string > tmp; m_client->playlist ()->addCollection (idlist, tmp); return true; } /* * The XCollection class */ XCollection::XCollection (XClient * client) : QObject ( client) { m_client = client; d = new XCollection::Private (this, client); connect (client, SIGNAL (gotConnection (XClient *)), this, SLOT (on_connect (XClient *))); // emit signals from private implementation as our own connect (d, SIGNAL (collectionModified(QString, QString, int, QString)), this, SIGNAL (collectionModified(QString, QString, int, QString))); connect (d, SIGNAL (activePlaylistChanged (QString, QString)), this, SIGNAL (activePlaylistChanged (QString, QString))); if (client->isConnected ()) { on_connect (client); } } void XCollection::on_connect (XClient *client) { client->collection ()->broadcastCollectionChanged () (Xmms::bind (&XCollection::Private::on_collection_modified, d)); client->collection ()->list ("Playlists") (Xmms::bind (&XCollection::Private::handle_playlists_list, d)); client->playlist ()->currentActive () (Xmms::bind (&XCollection::Private::handle_active_pls_changed, d)); client->playlist ()->broadcastLoaded () (Xmms::bind (&XCollection::Private::handle_active_pls_changed, d)); m_client = client; } bool XCollection::remove (QString name, QString ns) { if (!m_client->isConnected ()) return false; m_client->collection ()->remove (name.toStdString (), ns.toAscii ()); return true; } /* * idList (Playlist) stuff */ QString XCollection::activePlaylist () { return d->m_activePlaylist; } bool XCollection::Private::handle_playlists_list (const Xmms::List< std::string > &list) { m_playlists.clear (); #if HAVE_XMMSV for (Xmms::List< std::string >::const_iterator iter = list.begin(); iter != list.end(); ++iter) { m_playlists.append (XClient::stdToQ(*iter)); } #else for (list.first (); list.isValid (); ++list) { m_playlists.append (XClient::stdToQ(*list)); } #endif m_playlists.sort (); return true; } QStringList XCollection::list (QString ns) { // FIXME: use the ns parameter. // We will need to handle querying the serverside playlists bettter... return d->m_playlists; } // FIXME: Probably should be in another file bool XCollection::setActivePlaylist (QString name) { if (!m_client->isConnected ()) return false; m_client->playlist ()->load (XClient::qToStd (name)); return true; } bool XCollection::Private::handle_active_pls_changed (const std::string &name) { QString tmp = m_activePlaylist; m_activePlaylist = XClient::stdToQ (name); emit activePlaylistChanged (m_activePlaylist, tmp); return true; } // FIXME: should be done in a more generic way bool XCollection::addIdlist (QString name) { if (!m_client->isConnected ()) return false; m_client->playlist ()->create (name.toStdString ()); return true; } bool XCollection::playlistAddUrl (QString url, QString plsname) { if (plsname == "") { plsname = d->m_activePlaylist; } m_client->playlist ()->addUrl (url.toStdString (), plsname.toStdString ()); return true; } bool XCollection::playlistAddUrl (QUrl url, QString plsname) { if (!m_client->isConnected ()) return false; //TODO: more tests if file is valid if (!url.isValid ()) { return false; } if (plsname == "") { plsname = d->m_activePlaylist; } m_client->playlist ()->addUrl (url.toString ().toStdString (), plsname.toStdString ()); return true; } bool XCollection::playlistClear (QString name) { if (!m_client->isConnected ()) return false; if (name == "") { name = d->m_activePlaylist; } m_client->playlist ()->clear (XClient::qToStd (name)); return true; } bool XCollection::addPlsFile (QUrl url) { if (!m_client->isConnected ()) return false; if (url.scheme ().isEmpty ()) { //the protocol identifier is missing //we guess we might be local, so just add file:// url.setScheme ("file"); } m_client->collection ()->idlistFromPlaylistFile (std::string (url.toEncoded ())) (Xmms::bind (&XCollection::Private::handle_idlist_created, d)); return true; } promoe-0.1.1/lib/xcollection.h000066400000000000000000000030211134030477200162510ustar00rootroot00000000000000/** * This file is a part of Promoe, an XMMS2 Client. * * Copyright (C) 2005-2008 XMMS2 Team * * 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; version 2 of the License. * * This program is distributed in the hope that 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. */ #ifndef __XCOLLECTION_H__ #define __XCOLLECTION_H__ class XClient; #include #include class QStringList; class QString; class XCollection : public QObject { Q_OBJECT public: XCollection (XClient *client); QStringList list (QString ns = "Playlists"); bool remove (QString name, QString ns); // idlist specific QString activePlaylist (); public slots: // idlist spesific bool setActivePlaylist (QString name); bool addIdlist (QString name); bool playlistAddUrl (QString url, QString plsname = ""); bool playlistAddUrl (QUrl url, QString plsname = ""); bool playlistClear (QString name = ""); bool addPlsFile (QUrl url); signals: void collectionModified (QString collection, QString ns, int type, QString newname); void activePlaylistChanged (QString newActive, QString oldActive); protected slots: void on_connect (XClient *); private: class Private; Private* d; XClient *m_client; }; #endif promoe-0.1.1/lib/xcollection_p.h000066400000000000000000000030511134030477200165730ustar00rootroot00000000000000/** * This file is a part of Promoe, an XMMS2 Client. * * Copyright (C) 2005-2008 XMMS2 Team * * 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 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that 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. */ // these headers are placed in here, so that the moc files are created and // that these Objects can emit signals #ifndef __XCOLLECTION_P_H__ #define __XCOLLECTION_P_H__ #include #include "xcollection.h" #include #include #include class XCollection::Private : public QObject { Q_OBJECT public: Private (XCollection* collection, XClient* client); bool on_collection_modified (const Xmms::Dict &value); bool handle_playlists_list (const Xmms::List< std::string > &list); bool handle_active_pls_changed (const std::string &name); bool handle_idlist_created (const Xmms::Coll::Coll &idlist ); QStringList m_playlists; QString m_activePlaylist; XClient* m_client; signals: void collectionModified (QString collection, QString ns, int type, QString newname); void activePlaylistChanged (QString newActive, QString oldActive); }; #endif promoe-0.1.1/lib/xconfig.cpp000066400000000000000000000066621134030477200157340ustar00rootroot00000000000000/** * This file is a part of Promoe, an XMMS2 Client * * Copyright (C) 2005-2008 XMMS2 Team * * 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 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that 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. */ #include #include "xconfig.h" #include "xclient.h" #include #include XConfig::XConfig (XClient *parent) : QObject (parent) { m_ready = false; connect (parent, SIGNAL (gotConnection (XClient *)), this, SLOT (on_connect (XClient *))); connect (parent, SIGNAL (disconnected (XClient *)), this, SLOT (on_disconnect (XClient *))); if (parent->isConnected ()) { on_connect (parent); } } QString XConfig::value_get (QString key) { /* if XConfig is ready, the local cache should be in sync with the * serverside configuration, otherwise the cache is empty */ if (!m_ready) { return QString (); } return m_config_cache.value (key); } QStringList XConfig::values_get (QRegExp key) { QStringList ret; QHash < QString, QString >::ConstIterator it = m_config_cache.constBegin (); while (it != m_config_cache.constEnd ()) { if (key.exactMatch (it.key ())) { ret.append (it.value ()); } ++it; } return ret; } bool XConfig::value_set (QString key, QString val) { /* Only send change request to server from here * update of local cache will be done through handle_config_value_changed */ if (!m_client->isConnected ()) { return false; } // Only send change, if the value really changed; if (val == value_get (key)) return true; m_client->config ()->valueSet (key.toStdString (), val.toStdString ()); return true; } bool XConfig::value_register (QString key, QString defval) { if (!m_client->isConnected ()) { return false; } m_client->config ()->valueRegister (key.toStdString (), defval.toStdString ()); return true; } void XConfig::on_connect (XClient *client) { client->config ()->valueList () (Xmms::bind (&XConfig::handle_config_value, this)); client->config ()->broadcastValueChanged () (Xmms::bind (&XConfig::handle_config_value_changed, this)); m_client = client; } void XConfig::on_disconnect (XClient *client) { /* We don't emit any signals here, as every class must be able to * react on the configChanged signal, which will be fired for every * configvalue on reonnect */ m_ready = false; m_config_cache.clear (); } bool XConfig::handle_config_value (const Xmms::Dict &value) { // FIXME: I should rework configuration handling, and perhaps I should // abolish the call to handle_config_value_changed here. bool ok = handle_config_value_changed (value); if (ok) { m_ready = true; } emit configLoaded (); return ok; } bool XConfig::handle_config_value_changed (const Xmms::Dict &value) { QHash tmp = XClient::convert_dict(value); QHash::const_iterator i = tmp.constBegin (); while (i != tmp.constEnd ()) { m_config_cache[i.key ()] = i.value ().toString (); emit configChanged (i.key (), i.value ().toString ()); i++; } // TODO return true; } promoe-0.1.1/lib/xconfig.h000066400000000000000000000030611134030477200153670ustar00rootroot00000000000000/** * This file is a part of Promoe, an XMMS2 Client * * Copyright (C) 2005-2008 XMMS2 Team * * 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 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that 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. */ #ifndef __XConfig_H__ #define __XConfig_H__ class XClient; namespace Xmms { class Dict; } #include #include #include #include #include class XConfig : public QObject { Q_OBJECT public: XConfig (XClient *parent); QString value_get (QString key); QStringList values_get (QRegExp key = QRegExp (".*")); bool value_set (QString key, QString value); bool value_register (QString key, QString defval); bool has_key (const QString &key) const {return m_config_cache.contains (key);}; bool isReady (void) {return m_ready;} signals: void configLoaded (); void configChanged (QString key, QString value); public slots: void on_connect (XClient *); void on_disconnect (XClient *); private: bool handle_config_value (const Xmms::Dict &value); bool handle_config_value_changed (const Xmms::Dict &value); bool m_ready; QHash < QString, QString > m_config_cache; XClient *m_client; }; #endif promoe-0.1.1/lib/xmmsqt4.cpp000066400000000000000000000040521134030477200157030ustar00rootroot00000000000000/** * This file is a part of Esperanza, an XMMS2 Client. * * Copyright (C) 2005-2007 XMMS2 Team * * 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 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that 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. */ #include #include #include "xmmsqt4.h" #include #include #include static void CheckWrite (int i, void *userdata); XmmsQT4::XmmsQT4 (xmmsc_connection_t *xmmsc) : QObject (), Xmms::MainloopInterface (xmmsc), m_fd (0), m_rsock (0), m_wsock (0), m_xmmsc (xmmsc) { m_fd = xmmsc_io_fd_get (xmmsc); xmmsc_io_need_out_callback_set (xmmsc, CheckWrite, this); m_rsock = new QSocketNotifier (m_fd, QSocketNotifier::Read, this); connect (m_rsock, SIGNAL (activated (int)), SLOT (OnRead ())); m_rsock->setEnabled (true); m_wsock = new QSocketNotifier (m_fd, QSocketNotifier::Write, this); connect (m_wsock, SIGNAL (activated (int)), SLOT (OnWrite ())); m_wsock->setEnabled (false); running_ = true; } XmmsQT4::~XmmsQT4 () { delete m_rsock; delete m_wsock; } void XmmsQT4::run () { } xmmsc_connection_t *XmmsQT4::GetXmmsConnection () { return m_xmmsc; } void XmmsQT4::OnRead () { if (!xmmsc_io_in_handle (m_xmmsc)) { return; /* exception? */ } } void XmmsQT4::OnWrite () { if (!xmmsc_io_out_handle (m_xmmsc)) { return; /* exception? */ } } void XmmsQT4::ToggleWrite (bool toggle) { m_wsock->setEnabled (toggle); } static void CheckWrite (int i, void *userdata) { XmmsQT4 *obj = static_cast< XmmsQT4* > (userdata); if (xmmsc_io_want_out (obj->GetXmmsConnection ())) { obj->ToggleWrite (true); } else { obj->ToggleWrite (false); } } promoe-0.1.1/lib/xmmsqt4.h000066400000000000000000000022421134030477200153470ustar00rootroot00000000000000/** * This file is a part of Esperanza, an XMMS2 Client. * * Copyright (C) 2005-2007 XMMS2 Team * * 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 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that 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. */ #ifndef __XMMSQT4_H__ #define __XMMSQT4_H__ #include #include #include #include class XmmsQT4 : public QObject, public Xmms::MainloopInterface { Q_OBJECT public: XmmsQT4(xmmsc_connection_t *xmmsc); ~XmmsQT4(); void run (); void ToggleWrite(bool toggle); xmmsc_connection_t *GetXmmsConnection(); public slots: void OnRead (); void OnWrite (); private: int m_fd; QSocketNotifier *m_rsock; QSocketNotifier *m_wsock; xmmsc_connection_t *m_xmmsc; }; #endif promoe-0.1.1/lib/xplayback.cpp000066400000000000000000000143121134030477200162440ustar00rootroot00000000000000/** * This file is a part of Promoe, an XMMS2 Client. * * Copyright (C) 2005-2008 XMMS2 Team * * 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 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that 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. */ #include #include "xplayback.h" #include "xclient.h" #include #include #include #include XPlayback::XPlayback (XClient *client) { m_client = client; m_volume = 0; m_balance = 0; connect (client, SIGNAL (gotConnection (XClient *)), this, SLOT (on_connect (XClient *))); if (client->isConnected ()) { on_connect (client); } } void XPlayback::on_connect (XClient *client) { client->playback ()->getStatus () (Xmms::bind (&XPlayback::playback_status, this)); client->playback ()->broadcastStatus () (Xmms::bind (&XPlayback::playback_status, this)); client->playback ()->volumeGet () (Xmms::bind (&XPlayback::volume_changed, this)); client->playback ()->broadcastVolumeChanged () (Xmms::bind (&XPlayback::volume_changed, this)); } void XPlayback::play () { if (!m_client->isConnected ()) return; m_client->playback ()->start (); } void XPlayback::pause () { if (!m_client->isConnected ()) return; m_client->playback ()->pause (); } void XPlayback::toggle_pause () { if (m_status == XMMS_PLAYBACK_STATUS_PLAY) { pause (); } else if (m_status == XMMS_PLAYBACK_STATUS_PAUSE) { play (); } } void XPlayback::stop () { if (!m_client->isConnected ()) return; m_client->playback ()->stop (); } void XPlayback::prev () { if (!m_client->isConnected ()) return; m_client->playlist ()->setNextRel (-1); m_client->playback ()->tickle (); } void XPlayback::next () { if (!m_client->isConnected ()) return; m_client->playlist ()->setNextRel (1); m_client->playback ()->tickle (); } void XPlayback::setPos (int pos) { if (!m_client->isConnected ()) return; m_client->playlist ()->setNext (pos) (); m_client->playback ()->tickle () (); } /* * Seeking */ void XPlayback::seekMs (uint milliseconds) { if (!m_client->isConnected ()) return; m_client->playback ()->seekMs (milliseconds); } void XPlayback::seekMsRel (int milliseconds) { if (!m_client->isConnected ()) return; m_client->playback ()->seekMsRel (milliseconds); } /* * Status signals */ bool XPlayback::playback_status (const Xmms::Playback::Status &status) { m_status = status; emit playbackStatusChanged (status); return true; } /* * Volume */ inline int calcBalance (int left, int right) { if (left == right) return 0; if (left == 0) return MAX_BALANCE; if (right == 0) return -MAX_BALANCE; //FIXME: This somehow works, but I'm not happy with it as // QStyle::sliderValueFromPosition is not intended for this if (left > right) return -QStyle::sliderValueFromPosition(0, MAX_BALANCE, right, left, true); else return QStyle::sliderValueFromPosition(0, MAX_BALANCE, left, right, true); } bool XPlayback::volume_changed (const Xmms::Dict &volDict) { QHash levels = XClient::convert_dict (volDict); if (levels.size () == 1) { m_onechannel = true; newVolume (levels.values ().first ().toInt ()); newBalance (0); } else { /* * I might add a configure option later, to map arbitrary keys to * left and right */ if (!levels.contains ("left") || !levels.contains ("right")) { qWarning () << "Could not get volume levels, dict contains keys: " << levels.keys (); // disable further updates. Otherwise we would spam the console return false; } int left = levels["left"].toInt (); int right = levels["right"].toInt (); newVolume (qMax (right, left)); newBalance (calcBalance (left, right)); } return true; } void XPlayback::newVolume (int new_volume) { // only emit signal if the volume really changed if (new_volume == m_volume) return; m_volume = new_volume; emit volumeChanged (new_volume); } void XPlayback::newBalance (int new_balance) { // only emit signal if balance really changed if (new_balance == m_balance) return; m_balance = new_balance; emit balanceChanged (new_balance); } int calcVolume (int volume, int balance) { balance = qAbs (balance); if (balance > MAX_BALANCE) { qWarning () << "Error in calculating balance, value " << balance << "is outside valid range"; return 0; } if (balance == 0) return volume; if (balance == MAX_BALANCE) return 0; //FIXME: this somehow works, but I'm not happy with it as // QStyle::sliderPositionFromValue is not intended for this return QStyle::sliderPositionFromValue(0, MAX_BALANCE, balance, volume, true); } void XPlayback::setVolume (int new_volume) { if (!m_client->isConnected ()) return; // Don't echo values the server sent us back to it if (m_volume == new_volume) return; //TODO: some error checking if (m_onechannel) { m_client->playback ()->volumeSet ("master", new_volume); } else { int right, left; if (m_balance < 0) { left = new_volume; right = calcVolume (new_volume, m_balance); } else { left = calcVolume (new_volume, m_balance); right = new_volume; } m_client->playback ()->volumeSet ("left", left); m_client->playback ()->volumeSet ("right", right); } m_volume = new_volume; } void XPlayback::setBalance (int new_balance) { if (!m_client->isConnected ()) return; // Don't echo values the server sent back to the server if ((m_balance == new_balance) || m_onechannel) return; if (new_balance < 0) { if (m_balance > 0) { m_client->playback ()->volumeSet ("left", m_volume); } m_client->playback ()->volumeSet ("right", calcVolume (m_volume, new_balance)); } else { if (m_balance < 0) { m_client->playback ()->volumeSet ("right", m_volume); } m_client->playback ()->volumeSet ("left", calcVolume (m_volume, new_balance)); } m_balance = new_balance; } promoe-0.1.1/lib/xplayback.h000066400000000000000000000036711134030477200157170ustar00rootroot00000000000000/** * This file is a part of Promoe, an XMMS2 Client. * * Copyright (C) 2005-2008 XMMS2 Team * * 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 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that 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. */ #ifndef __XPLAYBACK_H__ #define __XPLAYBACK_H__ class XClient; #include #include static const int MAX_BALANCE = 20; /** * @class XPlayback * @brief Thin wrapper around Xmms::Playback providing QT Signals and Slots * */ class XPlayback : public QObject { Q_OBJECT public: XPlayback (XClient *); int getVolume () {return m_volume;} int getBalance () {return m_balance;} public slots: void play (); void pause (); void toggle_pause (); void stop (); void prev (); void next (); void setPos (int pos); void seekMs (uint milliseconds); void seekMsRel (int milliseconds); // Helper to directly connect sliders to this class void seekMs (int milliseconds) {seekMs ((uint) milliseconds);}; void setVolume (int new_volume); void setBalance (int new_balance); // callbacks for clientlib bool playback_status (const Xmms::Playback::Status &status); bool volume_changed (const Xmms::Dict &volDict); void on_connect (XClient *); signals: void playbackStatusChanged (Xmms::Playback::Status status); void volumeChanged (int volume); void balanceChanged (int balance); private: XClient *m_client; Xmms::Playback::Status m_status; void newVolume (int new_volume); void newBalance (int new_balance); int m_volume; int m_balance; bool m_onechannel; }; #endif promoe-0.1.1/promoe.1000066400000000000000000000015261134030477200144020ustar00rootroot00000000000000.TH PROMOE 1 .SH NAME promoe \- GUI client for XMMS2 .SH SYNOPSIS .B promoe .P .SH DESCRIPTION .I Promoe is a QT client for the XMMS2 music daemon. Promoe's interface is modeled after XMMS/WinAMP classic. .SH FILES .TP .I $XDG_CONFIG_HOME/xmms2/Promoe.conf The configuration file .TP .I $HOME/.config/xmms2/clients/promoe/skins Default directory for skins, can be changed in the configuration file .SH ENVIRONMENT VARIABLES .TP .I XMMS_PATH The URL path to .I xmms2d. See .B IPC SOCKET in .I xmms2d(8) for details of possible values for this variable .SH SEE ALSO xmms2d(8), http://xmms2.xmms.org .SH BUGS Please report bugs at .B http://bugs.xmms2.xmms.se .SH AUTHORS Thomas Frauendorfer, Tobias Rundström, Daniel Svensson and others. The .B AUTHORS file contains a complete list of contributors .PP Thomas Frauendorfer is to blame for the manpage promoe-0.1.1/promoe.desktop000066400000000000000000000003151134030477200157060ustar00rootroot00000000000000[Desktop Entry] # Spec version, NOT application Version Version=1.0 Name=Promoe GenericName=XMMS2 Client Categories=Qt;Application;AudioVideo;Audio; Exec=promoe Icon=xmms2 Terminal=false Type=Application promoe-0.1.1/promoe.icns000066400000000000000000001004011134030477200151660ustar00rootroot00000000000000icnsics#H@o?@o?is320R*54&HD+355o_31575, 544353F-KI)0P473243 475/3553Yx+46U08S*54}+355ξ31575ף544353473243З475/3553 Ǘ?460U*54ц+35531575544353473243475/3553W46s8mk~k*!Ę?/i=&rё~MǴ,sϦ8vT^TK@B{X<@ICN#p???{{; `p???{{; `il32335235743#$473lƀF54557/F565-47.~`CKy`/7553674w~$ V"/7764$475P! @w\0rm!763757751͖ 371475 'T?Kk .74345$ b0L}27405* ! 37511/:d]0475/5454 -344UU?sqH3f352j35743473Գ54557/𳗗565-47.ʾ/7553674ʥ/7764$475ǻ×!76375775ԛ371475 ͹כ.74345$ ʞ27405* 37511/?475Uԙ/5454m34433523574347354557/565-47./7553674/7764$475!76375775371475.74345$27405*37511/o475/5454344l8mk }C֋jJQl)~H6 D-[$9 \" } JGL h` ]Qf.!@7 3M1 _[V:$$>$VxV;Nj?Cqt6[?!6gƮFich#H8x0????~>???8x0????~>???ih32$-3,24304575733575146$$3573]~533557-f35543675>17655$575%չjPWb477553472T4,$ '3Bb,4755*473Jn<M475347/p5$<(];475,467/> /Fv{V:(9Q47335670 m.374/667, B675.45773a: 067535773Q "G3573354074+3;(375-y457543Klg3675403.+M54/3 3303fm? Umf$-u3,243U04575733575$3573ʟ533557-qӢ35543675f17655$575 477553472չ切4755*47 3ï ϙ475347/ˬ ﯗ475,467/ ɺٸ47335670 ܩ374/667, 67 5.45773خ67535773ڳf3573354074+3375-U鬆57543𠅗367540354/3330?3mU $-3,24304575733575$3573533557-3554367517655$575 4775534724755*473475347/475,467/47335670374/667,67 5.45773675357733573354074+3375-57543367540354/33303h8mk oCʨ>-S3K+c g Z[|=F_MK #_{n1  S.o|_ /3;({v ' zb^19Z?([miq@z9\+*+.h,63cih`D r3w"  (WnhEǐX+ R rZ5q*3>2WL!rѼIit32 ̃̈́σфӃ݄̓τЃ҄ӃԀ3 քу҄ӃԄՄɄ̃̈́σфӃ݀́ǃτЄ҃= ΁Մփф҃ӄԃՀփɃ̄̓τуӄ́DŽσЄҁ8ۃՄփф҄ӃԂՇɃ̄ρلуӄ͂ǃτЂ< ԁۄՃт̃҄Ӄ҈Ʉ̃ψфӃ݀́ρ׃EӁԁۄՄс̄ӁـЁ܀҇Ʉ̃̀ψуӄ́ςB ӁԂۃՄс̄ӀـЂ҈̈ψӈ́1 AҁӂԁՂЃш΁ڀЁǃҀɈ͈ш݃ Ђҁ̀Ӂԁ΀Ձֈ̃΄ЁDŽɄ͈̃фӃ+BςЃ҄ӁԂՃքр׀̄΃ЂǃɄ͈̃ф`ՀρЄ҃ӁڀԁՄւɃ̄΄ЇҀɃ̄̓ρȀӽfe͂σЄ҃ӄԁՄћD"&)-10-&69<;=333434574+34575.33657435733556674236674046675 &.*% 3+467535RphO53003574=[x δhO/34433-35736mܶF(4754/$33761;ޗo6,57742.2575&i 474.31574!X 4754.576 {$$5755-473Q5753475N37532675]3754574q껌hZOC8- 4Nh57653573i꺏c7  %\ډ5765,475D] 9x4764/475 Ʉ֍I)+BT2764574Ɣd42m752573=֊G)dڂ2743675т/2733748ܢ3".7535671ee1743573   $t714673Fnð` w7557-{߉[1Y37*27)=.7347.x.074+57*y.75357'-3742571 ̯uW;7I\no275-447.uԒQ91)  +=eۂ44753473 0Y1 4rɁ57613672ڕP"\i674/4673 ч!!5764346675 3K -7535575 2763-571574'4657/5753345675,764$454474243"- 575rt157553d5753347540삜25747.3:`<9<>Q347523mU4 0T|r.675533+Gb@n376553 k- )577655443-565513"54*3̃̈́σфӃ݄̓τЃ҄ӃԀ̤ȃքу҄ӃԄՄɄ̃̈́σфӃ݀́ǃτЄ҃ۨՄփф҃ӄԃՀփɃ̄̓τуӄ́DŽσЄҁۃՄփф҄ӃԂՇɃ̄ρلуӄ͂ǃτЂ ԁۄՃт̃҄Ӄ҈Ʉ̃ψфӃ݀́ρ׃ ȝӁԁۄՄс̄ӁـЁ܀҇Ʉ̃̀ψуӄ́ςʁӁԂۃՄс̄ӀـЂ҈̈ψӈ́ңҁӂԁՂЃш΁ڀЁǃҀɈ͈ш݃Ђҁ̀Ӂԁ΀Ձֈ̃΄ЁDŽɄ͈̃фӃͶςЃ҄ӁԂՃքр׀̄΃ЂǃɄ͈̃фݯՀρЄ҃ӁڀԁՄւɃ̄΄ЇҀɃ̄̓ρȀͰ͂σЄ҃ӄԁՄћ"&)-10>>>>>>???????????DvOAAAAAAAAAAAAAABBBBBBCCCCCCCDDDDDDDDDDDDDEEEEEEFFFFFFiuB}#!oplUP:!L90Y/V- O  p; [-I]|꿟jT0_8 kU2 N_' @(MF*( Z0^ m&q4 hvZ\I w=$OHt C _*/ g#{V0bt0.k, e)H>T]1 Ub*(zvhGKAp 7D i*y Jf`jQF|B vb,Y9C # gt $o!r!*$1J'E[){ko,Yl21Lz rI K"he[v" DQZj\. ;p = ld) ^ / '+Lf&~2 OH,؝d) ốYC9Z|ΏMεs1bIuZ J*@E.59?#[1ZO%nу4Uzgܢ0Bbf8*pۭ\ >pԧxHpromoe-0.1.1/promoe.pro000066400000000000000000000005701134030477200150400ustar00rootroot00000000000000TEMPLATE = subdirs CONFIG += ordered SUBDIRS = lib src include (config.pri) message ( "Install prefix set to:" $$PREFIX ) binary.path = $$BINDIR binary.files = promoe INSTALLS += binary unix: { manpages1.path = $$MANDIR/man1 manpages1.files = promoe.1 INSTALLS += manpages1 desktop.path = $$PREFIX/share/applications desktop.files = promoe.desktop INSTALLS += desktop } promoe-0.1.1/src/000077500000000000000000000000001134030477200136025ustar00rootroot00000000000000promoe-0.1.1/src/BrowseDialog.cpp000066400000000000000000000132221134030477200166670ustar00rootroot00000000000000/** * This file is a part of Promoe, an XMMS2 Client. * * Copyright (C) 2005-2008 XMMS2 Team * * 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; version 2 of the License. * * This program is distributed in the hope that 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. */ #include "BrowseModel.h" #include "BrowseDialog.h" #include "xclient.h" #include "xcollection.h" #include "application.h" #include #include #include #include #include #include #include #include #include #include BrowseDialog::BrowseDialog (QWidget *parent) : QDialog (parent) { setSizeGripEnabled(true); QGridLayout *grid = new QGridLayout (this); m_list = new QTreeView (this); m_model = new BrowseModel (this); m_list->setModel (m_model); m_list->setSelectionMode (QAbstractItemView::ExtendedSelection); m_list->setSelectionBehavior (QAbstractItemView::SelectRows); // m_list->setWrapping (true); m_list->setIndentation (0); //m_list->setResizeMode (QListView::Adjust); m_list->setEditTriggers (QAbstractItemView::EditKeyPressed); m_list->setContextMenuPolicy (Qt::CustomContextMenu); m_selections = new QItemSelectionModel (m_model); m_list->setSelectionModel (m_selections); connect (m_model, SIGNAL (dirChanged (QString)), this, SLOT (dirChanged(const QString &))); grid->addWidget(m_list, 1, 0, 1, 6); connect (m_list, SIGNAL (activated (QModelIndex)), this, SLOT (setPath(const QModelIndex &))); /* QObject::connect(m_list, SIGNAL(customContextMenuRequested(QPoint)), q, SLOT(_q_showContextMenu(QPoint))); */ QHBoxLayout *box = new QHBoxLayout; box->setMargin(3); box->setSpacing(3); QSize tools(22, 22); QToolButton *toParentButton = new QToolButton (this); toParentButton->setIcon (style ()->standardPixmap (QStyle::SP_FileDialogToParent)); toParentButton->setToolTip (tr("Parent Directory")); toParentButton->setAutoRaise (true); toParentButton->setFixedSize (tools); QObject::connect (toParentButton, SIGNAL(clicked ()), this, SLOT (navigateToPrevious ())); box->addWidget(toParentButton); QToolButton *listModeButton = new QToolButton (this); listModeButton->setIcon (style ()->standardPixmap (QStyle::SP_FileDialogListView)); listModeButton->setToolTip (tr("List View")); listModeButton->setAutoRaise (true); listModeButton->setDown (true); listModeButton->setFixedSize (tools); box->addWidget(listModeButton); QToolButton *detailModeButton = new QToolButton (this); detailModeButton->setIcon(style ()->standardPixmap (QStyle::SP_FileDialogDetailedView)); detailModeButton->setToolTip (tr("Detail View")); detailModeButton->setAutoRaise (true); detailModeButton->setFixedSize (tools); box->addWidget (detailModeButton); box->setSizeConstraint (QLayout::SetFixedSize); grid->addLayout(box, 0, 4, 1, 2); QLabel *lookInLabel = new QLabel (tr ("Look in:"), this); grid->addWidget (lookInLabel, 0, 0); // push buttons QPushButton *acceptButton = new QPushButton (tr ("Open"), this); QObject::connect(acceptButton, SIGNAL(clicked()), this, SLOT(accept())); grid->addWidget(acceptButton, 2, 5); QPushButton *rejectButton = new QPushButton (tr ("Cancel"), this); QObject::connect(rejectButton, SIGNAL(clicked()), this, SLOT(reject())); grid->addWidget(rejectButton, 2, 4); m_lookInCombo = new QComboBox (this); m_lookInCombo->setInsertPolicy (QComboBox::NoInsert); m_lookInCombo->setDuplicatesEnabled (false); m_lookInCombo->setEditable (true); m_lookInCombo->setAutoCompletion (false); QObject::connect(m_lookInCombo, SIGNAL(activated(QString)), this, SLOT(setPath(QString))); m_lookInEdit = new QLineEdit (m_lookInCombo); m_lookInCombo->setLineEdit (m_lookInEdit); m_lookInCombo->setSizePolicy (QSizePolicy::Expanding, QSizePolicy::Fixed); grid->addWidget (m_lookInCombo, 0, 1, 1, 3); QSettings s; if (!s.contains ("browsedialog/path")) s.setValue ("browsedialog/path", ""); m_model->setPath (s.value("browsedialog/path").toString ()); resize(530, 340); } QStringList BrowseDialog::getFiles () { QStringList ret; if (exec () == QDialog::Accepted) { QModelIndexList list = m_selections->selectedIndexes (); for (int i = 0; i < list.size (); i++) { BrowseModelItem *item = m_model->itemByIndex (list.at (i)); if (!item) continue; if (!item->isDir ()) ret.append (item->data("path")); } } return ret; } void BrowseDialog::accept () { QSettings s; s.setValue ("browsedialog/path", m_model->currentPath ()); QDialog::accept (); } void BrowseDialog::dirChanged (const QString &path) { m_lookInCombo->insertItem (0, path); m_lookInCombo->setCurrentIndex (0); } void BrowseDialog::navigateToPrevious () { QString dir = m_model->currentPath (); if (dir.endsWith ("/")) m_model->setPath (dir.left (dir.lastIndexOf ("/", -2) + 1)); else m_model->setPath (dir.left (dir.lastIndexOf ("/") + 1)); } void BrowseDialog::setPath (const QModelIndex &index) { XClient *client = App->client (); BrowseModelItem *item = m_model->itemByIndex (index); if (item->isDir ()) { m_model->setPath (index); } else { client->xcollection ()->playlistAddUrl (item->data("path")); } } void BrowseDialog::setPath (const QString &path) { m_model->setPath (path); } promoe-0.1.1/src/BrowseDialog.h000066400000000000000000000024161134030477200163370ustar00rootroot00000000000000/** * This file is a part of Promoe, an XMMS2 Client. * * Copyright (C) 2005-2008 XMMS2 Team * * 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; version 2 of the License. * * This program is distributed in the hope that 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. */ #ifndef __BROWSEDIALOG_H__ #define __BROWSEDIALOG_H__ class BrowseModel; #include class QTreeView; class QComboBox; class QLineEdit; class QItemSelectionModel; class QModelIndex; class QString; class BrowseDialog : public QDialog { Q_OBJECT public: BrowseDialog (QWidget *parent); public slots: void setPath (const QModelIndex &index); void setPath (const QString &path); void navigateToPrevious (); void dirChanged (const QString &path); void accept (); QStringList getFiles (); private: QTreeView *m_list; QComboBox *m_lookInCombo; QLineEdit *m_lookInEdit; QLineEdit *m_fileNameEdit; QComboBox *m_fileTypeCombo; BrowseModel *m_model; QItemSelectionModel *m_selections; }; #endif promoe-0.1.1/src/BrowseModel.cpp000066400000000000000000000116201134030477200165300ustar00rootroot00000000000000/** * This file is a part of Promoe, an XMMS2 Client. * * Copyright (C) 2005-2008 XMMS2 Team * * 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; version 2 of the License. * * This program is distributed in the hope that 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. */ #include "xclient.h" #include "compat.h" #include "BrowseModel.h" #include "application.h" #include #include #include #include #include bool BrowseModelItem::itemCompare (BrowseModelItem *s1, BrowseModelItem *s2) { if (QString::localeAwareCompare (s1->m_vals["name"].toLower (), s2->m_vals["name"].toLower ()) < 0) { return true; } return false; } BrowseModel::BrowseModel (QWidget *parent) : QAbstractTableModel () { m_columns.append ("Name"); m_style = parent->style (); m_client = App->client ()->getClient (); m_filter_dot = true; //list_root (); } BrowseModelItem * BrowseModel::itemByIndex (const QModelIndex &index) { return m_list.at (index.row ()); } void BrowseModel::setPath (const QModelIndex &index) { BrowseModelItem *item = m_list.at (index.row ()); m_client->xform.browse (item->data("path").toStdString ()) (Xmms::bind (&BrowseModel::list_cb, this)); m_current_dir = item->data ("path"); } void BrowseModel::setPath (const QString &path) { if (path.isEmpty()) list_root (); m_client->xform.browse (path.toStdString ())( Xmms::bind (&BrowseModel::list_cb, this), Xmms::bind (&BrowseModel::list_err, this)); m_current_dir = path; } void BrowseModel::list_root () { while (!m_list.isEmpty ()) { delete m_list.takeFirst (); } m_list.append (new BrowseModelItem ("file:///", "Files", true)); // FIXME: removed for now, crashes application // m_list.append (new BrowseModelItem ("daap://", "DAAP", true)); emit dirChanged (""); reset (); m_current_dir = ""; } bool BrowseModel::list_err (const std::string err) { list_root (); return true; } bool BrowseModel::list_cb (const Xmms::List< Xmms::Dict > &res) { while (!m_list.isEmpty ()) { delete m_list.takeFirst (); } #if HAVE_XMMSV for (Xmms::List< Xmms::Dict >::const_iterator iter = res.begin(); iter != res.end(); ++iter) { Xmms::Dict d = *iter; #else for (res.first (); res.isValid (); ++res) { Xmms::Dict d = *res; #endif if (!d.contains ("path")) continue; QString path = QString::fromStdString (d.get ("path")); QString name; if (d.contains ("name")) { name = QString::fromStdString (d.get ("name")); } else { if (d.contains ("title")) { if (d.contains ("artist")) { name += QString::fromStdString (d.get ("artist")); name += " - "; } if (d.contains ("album")) { name += QString::fromStdString (d.get ("album")); name += " - "; } if (d.contains ("tracknr")) { name += QString::number (d.get ("tracknr")).rightJustified(2, '0'); name += " - "; } name += QString::fromStdString (d.get ("title")); } else { QString tmp2 = path.mid (path.lastIndexOf ("/")+1); name = decodeXmmsUrl (tmp2); } } bool isdir = d.get ("isdir"); if (m_filter_dot && name.startsWith (".")) // skip these files continue; m_list.append (new BrowseModelItem (path, name, isdir)); } qSort (m_list.begin (), m_list.end (), BrowseModelItem::itemCompare); //qDebug ("%s", m_list.size() > 0 ? qPrintable(m_list.at(0)->data("name")) : "none"); reset (); emit dirChanged (m_current_dir); return true; } /* QModel overrides */ int BrowseModel::rowCount (const QModelIndex &parent) const { if (parent.isValid()) return 0; return m_list.size (); } int BrowseModel::columnCount (const QModelIndex &parent) const { return m_columns.size (); } QVariant BrowseModel::data (const QModelIndex &index, int role) const { if (!index.isValid ()) return QVariant (); if (index.column () == 0 && role == Qt::DecorationRole) return fileIcon(index); if (role != Qt::DisplayRole) return QVariant (); QString h = m_columns[index.column ()].toLower (); return QVariant (m_list.at (index.row ())->data (h)); } QVariant BrowseModel::headerData (int section, Qt::Orientation orientation, int role) const { if (role == Qt::DisplayRole) return QVariant (m_columns[section]); return QVariant (); } QIcon BrowseModel::fileIcon (const QModelIndex &index) const { if (!index.isValid()) return QIcon (); BrowseModelItem *item = m_list.at (index.row ()); if (item && item->isDir ()) return QIcon (m_style->standardPixmap (QStyle::SP_DirClosedIcon)); return QIcon (m_style->standardPixmap (QStyle::SP_FileIcon)); } promoe-0.1.1/src/BrowseModel.h000066400000000000000000000044011134030477200161740ustar00rootroot00000000000000/** * This file is a part of Promoe, an XMMS2 Client. * * Copyright (C) 2005-2008 XMMS2 Team * * 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; version 2 of the License. * * This program is distributed in the hope that 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. */ #ifndef __BROWSEMODEL_H__ #define __BROWSEMODEL_H__ #include #include #include #include #include class QStyle; class BrowseModelItem { public: BrowseModelItem (const QString &path, const QString &name = 0, bool isdir = true) { m_isdir = isdir; m_vals["path"] = path; m_vals["name"] = name; }; QString data (const QString &key) { return m_vals[key]; }; bool isDir () { return m_isdir; }; static bool itemCompare (BrowseModelItem *s1, BrowseModelItem *s2); protected: QHash m_vals; bool m_isdir; }; class BrowseModel : public QAbstractTableModel { Q_OBJECT public: BrowseModel (QWidget *parent); QString currentPath () const { return m_current_dir; }; void setFilterDot (bool b) { m_filter_dot = b; }; void setPath (const QModelIndex &index); void setPath (const QString &path); BrowseModelItem *itemByIndex (const QModelIndex &index); /* QModel overrides */ int rowCount (const QModelIndex &parent) const; int columnCount (const QModelIndex &parent) const; QVariant data (const QModelIndex &index, int role = Qt::DisplayRole) const; QVariant headerData (int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const; QIcon fileIcon (const QModelIndex &index) const; signals: void dirChanged (QString); private: bool list_cb (const Xmms::List< Xmms::Dict > &res); bool list_err (const std::string err); void list_root (); bool m_filter_dot; QList m_list; QStringList m_columns; QString m_current_dir; QStyle *m_style; Xmms::Client *m_client; }; #endif promoe-0.1.1/src/FileDialog.cpp000066400000000000000000000025551134030477200163140ustar00rootroot00000000000000/** * This file is a part of Promoe, an XMMS2 Client. * * Copyright (C) 2005-2008 XMMS2 Team * * 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; version 2 of the License. * * This program is distributed in the hope that 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. */ #include "FileDialog.h" #include #include #include FileDialog::FileDialog (QWidget *parent, const QString &name) : QFileDialog (parent) { QSettings s; m_name = name; if (!s.contains("filedialog/" + name)) s.setValue ("filedialog/" + name, QDir::homePath ()); setDirectory (s.value("filedialog/" + name).toString ()); } QStringList FileDialog::getFiles () { QSettings s; QStringList ret = getOpenFileNames (NULL, "Choose files"); if (ret.size() > 0) s.setValue ("filedialog/" + m_name, directory ().absolutePath ()); qSort (ret); return ret; } QString FileDialog::getDirectory () { QSettings s; QString ret = getExistingDirectory (NULL, "Choose directory"); if (!ret.isNull()) s.setValue ("filedialog/" + m_name, directory ().absolutePath ()); return ret; } promoe-0.1.1/src/FileDialog.h000066400000000000000000000015171134030477200157560ustar00rootroot00000000000000/** * This file is a part of Promoe, an XMMS2 Client. * * Copyright (C) 2005-2008 XMMS2 Team * * 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; version 2 of the License. * * This program is distributed in the hope that 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. */ #ifndef __FILEDIALOG_H__ #define __FILEDIALOG_H__ #include class FileDialog : public QFileDialog { Q_OBJECT public: FileDialog (QWidget *parent, const QString &name); QString getDirectory (); QStringList getFiles (); private: QString m_name; }; #endif promoe-0.1.1/src/ServerBrowser.cpp000066400000000000000000000114631134030477200171250ustar00rootroot00000000000000/** * This file is a part of Promoe, an XMMS2 Client. * * Copyright (C) 2005-2008 XMMS2 Team * * 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; version 2 of the License. * * This program is distributed in the hope that 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. */ #include "ServerBrowser.h" #include ServerBrowserWindow::ServerBrowserWindow (QWidget *parent) : QMainWindow (parent) { #ifndef _WIN32 setWindowIcon (QIcon (":icon.png")); #endif setWindowFlags (Qt::Dialog); setWindowModality (Qt::ApplicationModal); setAttribute (Qt::WA_DeleteOnClose); QWidget *c = new QWidget (this); setCentralWidget (c); QVBoxLayout *vbox = new QVBoxLayout (c); QLabel *label = new QLabel ("Available XMMS2 servers...", c); label->setFont (QFont ("Helvetica", 16)); vbox->addWidget (label); m_list = new ServerBrowserList (c); vbox->addWidget (m_list); c = new QWidget (c); QHBoxLayout *hbox = new QHBoxLayout (c); vbox->addWidget (c); QPushButton *connect = new QPushButton ("Connect", c); hbox->addWidget (new QWidget (), 1); hbox->addWidget (connect); resize (300, 400); } ServerBrowserList::ServerBrowserList (QWidget *parent) : QListWidget (parent) { setIconSize (QSize (32, 32)); setupAvahi (); connect (this, SIGNAL (itemDoubleClicked (QListWidgetItem *)), SLOT (connectServer (QListWidgetItem *))); } void ServerBrowserList::connectServer (QListWidgetItem *it) { ServerBrowserWindow *sw = dynamic_cast (window ()); XClient *client = App->client (); ServerItem *item = dynamic_cast (it); if (client->connect (item->path ().toAscii())) { sw->close (); } } void ServerBrowserList::addServer (const QString &name, const QString &path) { new ServerItem (QIcon (":icon.png"), name, path, this); update (); } static void resolve_callback (AvahiServiceResolver *r, AvahiIfIndex interface, AvahiProtocol protocol, AvahiResolverEvent event, const char *name, const char *type, const char *domain, const char *host_name, const AvahiAddress *address, uint16_t port, AvahiStringList *txt, AvahiLookupResultFlags flags, void* userdata) { ServerBrowserList *sl = static_cast (userdata); switch (event) { case AVAHI_RESOLVER_FAILURE: qWarning ("something broke..."); break; case AVAHI_RESOLVER_FOUND: char a[AVAHI_ADDRESS_STR_MAX]; avahi_address_snprint (a, sizeof (a), address); QString path; path.sprintf ("tcp://%s:%u", a, port); sl->addServer (QString::fromLatin1 (name), path); break; } } static void browse_callback (AvahiServiceBrowser *b, AvahiIfIndex interface, AvahiProtocol protocol, AvahiBrowserEvent event, const char *name, const char *type, const char *domain, AvahiLookupResultFlags flags, void* userdata) { ServerBrowserList *sl = static_cast (userdata); switch (event) { case AVAHI_BROWSER_FAILURE: qWarning("(Browser) %s\n", avahi_strerror (avahi_client_errno(avahi_service_browser_get_client(b)))); sl->close (); return; case AVAHI_BROWSER_NEW: if (!(avahi_service_resolver_new (sl->client (), interface, protocol, name, type, domain, AVAHI_PROTO_UNSPEC, (AvahiLookupFlags) 0, resolve_callback, userdata))) { qWarning ("couldn't resolv service!"); sl->close (); } break; case AVAHI_BROWSER_REMOVE: break; case AVAHI_BROWSER_ALL_FOR_NOW: qDebug ("done!"); break; case AVAHI_BROWSER_CACHE_EXHAUSTED: break; } } static void client_callback (AvahiClient *c, AvahiClientState state, void *userdata) { ServerBrowserList *sl = static_cast (userdata); if (state == AVAHI_CLIENT_FAILURE) { qWarning ("Avahi failure!!"); sl->close (); } } bool ServerBrowserList::setupAvahi (void) { int ret = 1; int error; m_poll = avahi_qt_poll_get (); m_client = avahi_client_new (m_poll, (AvahiClientFlags)0, client_callback, this, &error); if (!m_client) { qWarning ("couldn't create avahi browser!"); return false; } if (!(m_sb = avahi_service_browser_new (m_client, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, "_xmms2._tcp", NULL, (AvahiLookupFlags)0, browse_callback, this))) { qWarning ("couldn't create avahi browser!"); return false; } } ServerBrowserList::~ServerBrowserList () { /* if (m_poll) { delete m_poll; } if (m_client) { avahi_client_free (m_client); } if (m_sb) { avahi_service_browser_free (m_sb); } */ } promoe-0.1.1/src/ServerBrowser.h000066400000000000000000000034501134030477200165670ustar00rootroot00000000000000/** * This file is a part of Promoe, an XMMS2 Client. * * Copyright (C) 2005-2008 XMMS2 Team * * 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; version 2 of the License. * * This program is distributed in the hope that 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. */ #ifndef __SERVER_BROWSER_H__ #define __SERVER_BROWSER_H__ #include "xclient.h" #include #include #include #include #include #include #include #include #include #include class ServerItem : public QListWidgetItem { public: ServerItem (QIcon i, const QString &name, const QString &path, QListWidget *parent) : QListWidgetItem (i, name, parent) { m_path = path; setToolTip (m_path); } QString path (void) const { return m_path; } private: QString m_path; }; class ServerBrowserList : public QListWidget { Q_OBJECT public: ServerBrowserList (QWidget *parent); ~ServerBrowserList (); void addServer (const QString &, const QString &); bool setupAvahi (void); AvahiClient *client (void) const { return m_client; } public slots: void connectServer (QListWidgetItem *); private: const AvahiPoll *m_poll; AvahiClient *m_client; AvahiServiceBrowser *m_sb; }; class ServerBrowserWindow : public QMainWindow { Q_OBJECT public: ServerBrowserWindow (QWidget *parent); ~ServerBrowserWindow () {} private: ServerBrowserList *m_list; }; #endif promoe-0.1.1/src/Skin.cpp000066400000000000000000000552011134030477200152150ustar00rootroot00000000000000/** * This file is a part of Promoe, an XMMS2 Client. * * Copyright (C) 2005-2008 XMMS2 Team * * 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; version 2 of the License. * * This program is distributed in the hope that 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. */ #include "Skin.h" #include #include #include static const QString defaultSkin = ":/skins/Almond-blue/"; Skin *Skin::singleton = NULL; Skin *Skin::getInstance (void) { if (!singleton) { singleton = new Skin (); } return singleton; } Skin::Skin () { setSizes (); setPositions (); QSettings settings; setSkin (settings.value("skin/path", defaultSkin).toString ()); } bool Skin::setSkin (const QString& name) { m_path = name; m_items.clear(); m_letterMap.clear(); m_smallNumbers.clear (); m_numbers.clear(); m_pledit_txt.clear(); m_playlist.clear (); if (!( BuildButtons() && BuildToggleButtons() && BuildTitleBar() && BuildOther() && BuildEqualizer () && BuildLetterMap() && BuildSliders() && ParsePLEdit() && BuildNumbers() && BuildPlaylist () )) { setSkin (defaultSkin); return false; } emit skinChanged(this); return true; } const QPixmap Skin::getPixmap (const QString& file, const QString &path) { /* check for files in zip and check if file exists */ QDir dir (path); dir.setFilter (QDir::Files|QDir::NoDotAndDotDot); QFileInfoList list = dir.entryInfoList(); for (int i = 0; i < list.size(); ++i) { QFileInfo fileInfo = list.at(i); QString fname = fileInfo.fileName().toLower(); if (fname.section(".", 0, 0) == file) { return QPixmap (fileInfo.filePath()); } } return QPixmap (); } const QPixmap Skin::getPixmap (const QString& file) { /* QDir dir; dir.setPath (m_path); dir.setFilter (QDir::Files); QFileInfoList list = dir.entryInfoList(); for (int i = 0; i < list.size(); ++i) { QFileInfo fileInfo = list.at(i); QString fname = fileInfo.fileName().toLower(); if (fname.section(".", 0, 0) == file) { return QPixmap (fileInfo.filePath()); } } return QPixmap (); */ return getPixmap (file, m_path); } bool Skin::ParsePLEdit (void) { QDir dir; QString path; dir.setPath (m_path); dir.setFilter (QDir::Files|QDir::NoDotAndDotDot); QFileInfoList list = dir.entryInfoList(); for (int i = 0; i < list.size(); ++i) { QFileInfo fileInfo = list.at(i); if (fileInfo.fileName().toLower() == "pledit.txt") { path += fileInfo.filePath (); break; } } if (path.isNull ()) { qDebug ("trasigt!"); return false; } QFile file (path); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) return false; while (!file.atEnd ()) { QByteArray line = file.readLine (); QList l = line.split ('='); if (l.count () == 2) { m_pledit_txt[l[0].toLower ()] = l[1].trimmed(); } else if (line.length() == 0) { break; } } return true; } bool Skin::BuildEqualizer (void) { QPixmap img = getPixmap ("eqmain"); // eq_ex is optional, so this Pixmap can be null. check before using it QPixmap imgex = getPixmap ("eq_ex"); if (img.isNull ()) return false; m_items[EQ_WIN_BG] = img.copy (0, 0, 275, 116); if (img.height () > 294) { m_items[EQ_WIN_GRAPH_BG] = img.copy (0, 294, 113, qMin (19, img.height () - 294)); } else { m_items[EQ_WIN_GRAPH_BG] = QPixmap (); } QIcon icon; icon.addPixmap (img.copy ( 0, 116, 9, 9), QIcon::Normal, QIcon::Off); icon.addPixmap (img.copy ( 0, 125, 9, 9), QIcon::Active, QIcon::Off); m_icons[BUTTON_EQ_CLOSE] = icon; icon = QIcon (); icon.addPixmap (img.copy (254, 3, 9, 9), QIcon::Normal, QIcon::Off); if (!imgex.isNull ()) { icon.addPixmap (imgex.copy ( 1, 38, 9, 9), QIcon::Active, QIcon::Off); } m_icons[BUTTON_EQ_SHADE] = icon; icon = QIcon (); icon.addPixmap (img.copy ( 10, 119, 25, 12), QIcon::Normal, QIcon::Off); icon.addPixmap (img.copy (128, 119, 25, 12), QIcon::Active, QIcon::Off); icon.addPixmap (img.copy ( 69, 119, 25, 12), QIcon::Normal, QIcon::On); icon.addPixmap (img.copy (187, 119, 25, 12), QIcon::Active, QIcon::On); m_icons[BUTTON_EQ_ACTIVE] = icon; icon = QIcon (); icon.addPixmap (img.copy ( 35, 119, 33, 12), QIcon::Normal, QIcon::Off); icon.addPixmap (img.copy (153, 119, 33, 12), QIcon::Active, QIcon::Off); icon.addPixmap (img.copy ( 94, 119, 33, 12), QIcon::Normal, QIcon::On); icon.addPixmap (img.copy (212, 119, 33, 12), QIcon::Active, QIcon::On); m_icons[BUTTON_EQ_AUTO] = icon; icon = QIcon (); icon.addPixmap (img.copy (224, 164, 44, 12), QIcon::Normal, QIcon::Off); icon.addPixmap (img.copy (224, 176, 44, 12), QIcon::Active, QIcon::Off); m_icons[BUTTON_EQ_PRESET] = icon; QPixmapList list; for (int i = 0; i < 14; i++) { list << img.copy (13+15*i, 164, 14, 63); } for (int i = 0; i < 14; i++) { list << img.copy (13+15*i, 229, 14, 63); } m_backgrounds[SLIDER_EQUALIZER_BGS] = list; m_items[EQ_WIN_BAR_BTN_0] = img.copy (0, 164, 11, 11); m_items[EQ_WIN_BAR_BTN_1] = img.copy (0, 176, 11, 11); return true; } bool Skin::BuildPlaylist (void) { QPixmap img = getPixmap ("pledit"); if (img.isNull ()) return false; QIcon icon; icon.addPixmap (img.copy (167, 3, 9, 9), QIcon::Normal, QIcon::Off); icon.addPixmap (img.copy ( 52, 42, 9, 9), QIcon::Active, QIcon::Off); m_icons[BUTTON_PLS_CLOSE] = icon; icon = QIcon (); icon.addPixmap (img.copy (158, 3, 9, 9), QIcon::Normal, QIcon::Off); icon.addPixmap (img.copy ( 62, 42, 9, 9), QIcon::Active, QIcon::Off); m_icons[BUTTON_PLS_SHADE] = icon; icon = QIcon (); icon.addPixmap (img.copy (129, 45, 9, 9), QIcon::Normal, QIcon::Off); icon.addPixmap (img.copy (150, 42, 9, 9), QIcon::Active, QIcon::Off); m_icons[BUTTON_PLS_SHADED_UNSHADE] = icon; m_playlist[PLS_CORNER_UL_0] = img.copy(0, 0, 25, 20); m_playlist[PLS_CORNER_UL_1] = img.copy(0, 21, 25, 20); m_playlist[PLS_TBAR_0] = img.copy (26, 0, 100, 20); m_playlist[PLS_TBAR_1] = img.copy (26, 21, 100, 20); m_playlist[PLS_CORNER_UR_0] = img.copy(153, 0, 25, 20); m_playlist[PLS_CORNER_UR_1] = img.copy(153, 21, 25, 20); m_playlist[PLS_TFILL_0] = img.copy(127, 0, 25, 20); m_playlist[PLS_TFILL_1] = img.copy(127, 21, 25, 20); m_playlist[PLS_BFILL_0] = img.copy(179, 0, 25, 38); m_playlist[PLS_VISMINI_0] = img.copy(205, 0, 75, 38); m_playlist[PLS_LFILL_0] = img.copy(0, 42, 12, 29); m_playlist[PLS_RFILL_0] = img.copy(31, 42, 5, 29); m_playlist[PLS_RFILL2_0] = img.copy(36, 42, 8, 29); m_playlist[PLS_RFILL3_0] = img.copy(44, 42, 7, 29); m_playlist[PLS_MAX_BTN_0] = img.copy(150, 42, 9, 9); m_playlist[PLS_SCROLL_0] = img.copy(52, 53, 8, 18); m_playlist[PLS_SCROLL_1] = img.copy(61, 53, 8, 18); m_playlist[PLS_WS_LE_0] = img.copy(72, 42, 25, 14); m_playlist[PLS_WS_RE_0] = img.copy(99, 42, 50, 14); m_playlist[PLS_WS_RE_1] = img.copy(99, 57, 50, 14); m_playlist[PLS_WS_MID_0] = img.copy(72, 57, 25, 14); m_playlist[PLS_LCBAR] = img.copy(0, 72, 125, 38); m_playlist[PLS_RCBAR] = img.copy(126, 72, 150, 38); /* extract the buttons */ m_playlist[PLS_ADD] = img.copy(11, 80, 25, 18); m_playlist[PLS_ADD_DEC] = img.copy(48, 111, 3, 54); m_playlist[PLS_ADD_URL_0] = img.copy(0, 111, 22, 18); m_playlist[PLS_ADD_URL_1] = img.copy(23, 111, 22, 18); m_playlist[PLS_ADD_DIR_0] = img.copy(0, 130, 22, 18); m_playlist[PLS_ADD_DIR_1] = img.copy(23, 130, 22, 18); m_playlist[PLS_ADD_FIL_0] = img.copy(0, 149, 22, 18); m_playlist[PLS_ADD_FIL_1] = img.copy(23, 149, 22, 18); /* Delete buttons */ m_playlist[PLS_DEL] = img.copy(40, 80, 25, 18); m_playlist[PLS_DEL_DEC] = img.copy(100, 111, 3, 72); m_playlist[PLS_DEL_ALL_0] = img.copy(54, 111, 22, 18); m_playlist[PLS_DEL_ALL_1] = img.copy(77, 111, 22, 18); m_playlist[PLS_DEL_CRP_0] = img.copy(54, 130, 22, 18); m_playlist[PLS_DEL_CRP_1] = img.copy(77, 130, 22, 18); m_playlist[PLS_DEL_FIL_0] = img.copy(54, 149, 22, 18); m_playlist[PLS_DEL_FIL_1] = img.copy(77, 149, 22, 18); /* Select buttons */ m_playlist[PLS_SEL] = img.copy(69, 80, 25, 18); m_playlist[PLS_SEL_DEC] = img.copy(150, 111, 3, 54); m_playlist[PLS_SEL_INV_0] = img.copy(104, 111, 22, 18); m_playlist[PLS_SEL_INV_1] = img.copy(127, 111, 22, 18); m_playlist[PLS_SEL_NIL_0] = img.copy(104, 130, 22, 18); m_playlist[PLS_SEL_NIL_1] = img.copy(127, 130, 22, 18); m_playlist[PLS_SEL_ALL_0] = img.copy(104, 149, 22, 18); m_playlist[PLS_SEL_ALL_1] = img.copy(127, 149, 22, 18); /* misc buttons */ m_playlist[PLS_MSC] = img.copy(98, 80, 25, 18); m_playlist[PLS_MSC_DEC] = img.copy(200, 111, 3, 54); m_playlist[PLS_MSC_SRT_0] = img.copy(154, 111, 22, 18); m_playlist[PLS_MSC_SRT_1] = img.copy(177, 111, 22, 18); m_playlist[PLS_MSC_INF_0] = img.copy(154, 130, 22, 18); m_playlist[PLS_MSC_INF_1] = img.copy(177, 130, 22, 18); m_playlist[PLS_MSC_OPT_0] = img.copy(154, 149, 22, 18); m_playlist[PLS_MSC_OPT_1] = img.copy(177, 149, 22, 18); /* list buttons */ m_playlist[PLS_LST] = img.copy(229, 80, 25, 18); m_playlist[PLS_LST_DEC] = img.copy(250, 111, 3, 54); m_playlist[PLS_LST_NEW_0] = img.copy(204, 111, 22, 18); m_playlist[PLS_LST_NEW_1] = img.copy(227, 111, 22, 18); m_playlist[PLS_LST_SAV_0] = img.copy(204, 130, 22, 18); m_playlist[PLS_LST_SAV_1] = img.copy(227, 130, 22, 18); m_playlist[PLS_LST_OPN_0] = img.copy(204, 149, 22, 18); m_playlist[PLS_LST_OPN_1] = img.copy(227, 149, 22, 18); /* misc button */ m_playlist[PLS_MSC_BTN_0] = img.copy(54, 168, 22, 18); m_playlist[PLS_MSC_BTN_1] = img.copy(77, 168, 22, 18); return true; } bool Skin::BuildLetterMap (void) { QPixmap img = getPixmap("text"); if (img.isNull ()) return false; QList >(letters); for (int i = 0; i < 3; i++) { QList(l); for (int j = 0; j < 31; j++) { l.append(img.copy(j*5, i*6, 5, 6)); } letters.append(l); } /* alphabet */ for (uint i = 97; i < 123; i++) { m_letterMap[i] = letters[0][i-97]; } /* digits */ for (uint i = 0; i <= 9; i++) { m_letterMap[i+48] = letters[1][i]; m_smallNumbers [i] = letters[1][i]; } /* special characters */ m_letterMap['"'] = letters[0][27]; m_letterMap['@'] = letters[0][28]; m_letterMap[':'] = letters[1][12]; m_letterMap['('] = letters[1][13]; m_letterMap[')'] = letters[1][14]; m_letterMap['-'] = letters[1][15]; m_letterMap['\''] = letters[1][16]; m_letterMap['`'] = letters[1][16]; m_letterMap['!'] = letters[1][17]; m_letterMap['_'] = letters[1][18]; m_letterMap['+'] = letters[1][19]; m_letterMap['\\'] = letters[1][20]; m_letterMap['/'] = letters[1][21]; m_letterMap['['] = letters[1][22]; m_letterMap[']'] = letters[1][23]; m_letterMap['^'] = letters[1][24]; m_letterMap['&'] = letters[1][25]; m_letterMap['%'] = letters[1][26]; m_letterMap['.'] = letters[1][27]; m_letterMap[','] = letters[1][27]; m_letterMap['='] = letters[1][28]; m_letterMap['$'] = letters[1][29]; m_letterMap['#'] = letters[1][30]; m_letterMap[229] = letters[2][0]; m_letterMap[246] = letters[2][1]; m_letterMap[228] = letters[2][2]; m_letterMap['?'] = letters[2][3]; m_letterMap['*'] = letters[2][4]; m_letterMap[' '] = letters[2][5]; /* text background */ m_items[TEXTBG] = letters[2][6]; m_smallNumbers[10] = letters[2][6]; m_smallNumbers[-1] = m_smallNumbers[10]; // also add Blank to index -1 m_smallNumbers[11] = letters[1][15]; return true; } bool Skin::BuildButtons (void) { QPixmap img = getPixmap("cbuttons"); if (img.isNull ()) return false; QIcon icon; icon.addPixmap (img.copy (0, 0, 23, 18), QIcon::Normal, QIcon::Off); icon.addPixmap (img.copy (0, 18, 23, 18), QIcon::Active, QIcon::Off); m_icons[BUTTON_MW_PREV] = icon; icon = QIcon (); icon.addPixmap (img.copy (23, 0, 23, 18), QIcon::Normal, QIcon::Off); icon.addPixmap (img.copy (23, 18, 23, 18), QIcon::Active, QIcon::Off); m_icons[BUTTON_MW_PLAY] = icon; icon = QIcon (); icon.addPixmap (img.copy (46, 0, 23, 18), QIcon::Normal, QIcon::Off); icon.addPixmap (img.copy (46, 18, 23, 18), QIcon::Active, QIcon::Off); m_icons[BUTTON_MW_PAUSE] = icon; icon = QIcon (); icon.addPixmap (img.copy (69, 0, 23, 18), QIcon::Normal, QIcon::Off); icon.addPixmap (img.copy (69, 18, 23, 18), QIcon::Active, QIcon::Off); m_icons[BUTTON_MW_STOP] = icon; icon = QIcon (); icon.addPixmap (img.copy (92, 0, 22, 18), QIcon::Normal, QIcon::Off); icon.addPixmap (img.copy (92, 18, 22, 18), QIcon::Active, QIcon::Off); m_icons[BUTTON_MW_NEXT] = icon; icon = QIcon (); icon.addPixmap (img.copy (114, 0, 22, 16), QIcon::Normal, QIcon::Off); icon.addPixmap (img.copy (114, 16, 22, 16), QIcon::Active, QIcon::Off); m_icons[BUTTON_MW_EJECT] = icon; return true; } bool Skin::BuildToggleButtons (void) { QPixmap img = getPixmap("shufrep"); if (img.isNull ()) return false; QIcon icon; icon.addPixmap (img.copy ( 0, 61, 23, 12), QIcon::Normal, QIcon::Off); icon.addPixmap (img.copy (46, 61, 23, 12), QIcon::Active, QIcon::Off); icon.addPixmap (img.copy ( 0, 73, 23, 12), QIcon::Normal, QIcon::On); icon.addPixmap (img.copy (46, 73, 23, 12), QIcon::Active, QIcon::On); m_icons[BUTTON_MW_EQ] = icon; icon = QIcon (); icon.addPixmap (img.copy (23, 61, 23, 12), QIcon::Normal, QIcon::Off); icon.addPixmap (img.copy (69, 61, 23, 12), QIcon::Active, QIcon::Off); icon.addPixmap (img.copy (23, 73, 23, 12), QIcon::Normal, QIcon::On); icon.addPixmap (img.copy (69, 73, 23, 12), QIcon::Active, QIcon::On); m_icons[BUTTON_MW_PLS] = icon; icon = QIcon (); icon.addPixmap (img.copy (28, 0, 46, 15), QIcon::Normal, QIcon::Off); icon.addPixmap (img.copy (28, 15, 46, 15), QIcon::Active, QIcon::Off); icon.addPixmap (img.copy (28, 30, 46, 15), QIcon::Normal, QIcon::On); icon.addPixmap (img.copy (28, 45, 46, 15), QIcon::Active, QIcon::On); m_icons[BUTTON_MW_SHUFFLE] = icon; icon = QIcon (); icon.addPixmap (img.copy (0, 0, 28, 15), QIcon::Normal, QIcon::Off); icon.addPixmap (img.copy (0, 15, 28, 15), QIcon::Active, QIcon::Off); icon.addPixmap (img.copy (0, 30, 28, 15), QIcon::Normal, QIcon::On); icon.addPixmap (img.copy (0, 45, 28, 15), QIcon::Active, QIcon::On); m_icons[BUTTON_MW_REPEAT] = icon; return true; } bool Skin::BuildTitleBar (void) { QPixmap img = getPixmap("titlebar"); if (img.isNull ()) return false; QIcon icon; icon.addPixmap (img.copy (0, 0, 9, 9), QIcon::Normal, QIcon::Off); icon.addPixmap (img.copy (0, 9, 9, 9), QIcon::Active, QIcon::Off); m_icons[BUTTON_MW_MENU] = icon; icon = QIcon (); icon.addPixmap (img.copy (9, 0, 9, 9), QIcon::Normal, QIcon::Off); icon.addPixmap (img.copy (9, 9, 9, 9), QIcon::Active, QIcon::Off); m_icons[BUTTON_MW_MINIMIZE] = icon; icon = QIcon (); icon.addPixmap (img.copy (18, 0, 9, 9), QIcon::Normal, QIcon::Off); icon.addPixmap (img.copy (18, 9, 9, 9), QIcon::Active, QIcon::Off); m_icons[BUTTON_MW_CLOSE] = icon; icon = QIcon (); icon.addPixmap (img.copy (0, 18, 9, 9), QIcon::Normal, QIcon::Off); icon.addPixmap (img.copy (9, 18, 9, 9), QIcon::Active, QIcon::Off); m_icons[BUTTON_MW_SHADE] = icon; icon = QIcon (); icon.addPixmap (img.copy (0, 27, 9, 9), QIcon::Normal, QIcon::Off); icon.addPixmap (img.copy (9, 27, 9, 9), QIcon::Active, QIcon::Off); m_icons[BUTTON_MW_SHADED_UNSHADE] = icon; m_items[TITLEBAR_0] = img.copy(27, 0, 275, 14); m_items[TITLEBAR_1] = img.copy(27, 15, 275, 14); m_items[STATUSBAR_0] = img.copy(27, 29, 275, 14); m_items[STATUSBAR_1] = img.copy(27, 29+13, 275, 14); m_items[CLUTTER_ON] = img.copy(304+8*0, 0, 8, 43); m_items[CLUTTER_OFF] = img.copy(304+8*1, 0, 8, 43); m_items[CLUTTER_O] = img.copy(304+8*0, 44, 8, 43); m_items[CLUTTER_A] = img.copy(304+8*1, 44, 8, 43); m_items[CLUTTER_I] = img.copy(304+8*2, 44, 8, 43); m_items[CLUTTER_D] = img.copy(304+8*3, 44, 8, 43); m_items[CLUTTER_V] = img.copy(304+8*4, 44, 8, 43); return true; } bool Skin::BuildOther (void) { QPixmap img, part; QPainter(painter); img = getPixmap("monoster"); if (img.isNull ()) return false; m_items[MONO_1] = img.copy(29, 0, 27, 12); m_items[MONO_0] = img.copy(29, 12, 27, 12); m_items[STEREO_1] = img.copy(0, 0, 29, 12); m_items[STEREO_0] = img.copy(0, 12, 29, 12); img = getPixmap("playpaus"); if (img.isNull ()) return false; int h = qMin (img.height (), 9); part = QPixmap(11, h); painter.begin(&part); painter.drawPixmap (0, 0, 3, h, img, 36, 0, 3, h); painter.drawPixmap (3, 0, 8, h, img, 1, 0, 8, h); painter.end(); m_items[PIC_PLAY] = part; part = QPixmap(11, h); painter.begin(&part); painter.drawPixmap (0, 0, 2, h, img, 27, 0, 2, h); painter.drawPixmap (2, 0, 9, h, img, 9, 0, 9, h); painter.end(); m_items[PIC_PAUSE] = part; part = QPixmap(11, h); painter.begin(&part); painter.drawPixmap (0, 0, 2, h, img, 27, 0, 2, h); painter.drawPixmap (2, 0, 9, h, img, 18, 0, 9, h); painter.end(); m_items[PIC_STOP] = part; img = getPixmap ("main"); if (img.isNull ()) return false; m_items[MAIN_WINDOW] = img; m_items[ABOUT_0] = img.copy(247, 83, 20, 25); m_items[ABOUT_1] = img.copy(247, 83, 20, 24); return true; } bool Skin::BuildSliders (void) { QPixmap img; img = getPixmap("posbar"); if (img.isNull ()) return false; int h = qMin (10, img.height ()); m_sizes[SLIDER_POSBAR_BGS] = QSize (248, h); m_items[POSBAR] = img.copy (0, 0, 248, h); m_items[POSBAR_BTN_0] = img.copy (248, 0, 29, h); m_items[POSBAR_BTN_1] = img.copy (278, 0, 29, h); QPixmapList list; img = getPixmap("volume"); if (img.isNull ()) return false; for (int i = 0; i <= 27; i++) { list << img.copy(0, i*15, qMin (68, img.width()), 13); } m_backgrounds[SLIDER_VOLUMEBAR_BGS] = list; if (img.height() > 421) { m_items[VOLBAR_BTN_1] = img.copy (0, 422, 14, qMin (11, img.height () - 422)); m_items[VOLBAR_BTN_0] = img.copy (15, 422, 14, qMin (11, img.height () - 422)); } list.clear (); QPixmap p; img = getPixmap("balance"); if (img.isNull ()) { img = getPixmap("volume"); } if (img.isNull ()) return false; list << img.copy (9, 15, 38, 13); for (int i = 1; i < 28; i++) { // use p to make use of Qt implicit sharing (I think it will not // work if appended and prepended Images are copied seperately) p = img.copy(9, i*15, 38, 13); list.append (p); list.prepend (p); } m_backgrounds[SLIDER_BALANCEBAR_BGS] = list; if (img.height() > 421) { m_items[BALANCE_BTN_1] = img.copy(0, 422, 14, qMin (11, img.height () - 422)); m_items[BALANCE_BTN_0] = img.copy(15, 422, 14, qMin (11, img.height () - 422)); } return true; } bool Skin::BuildNumbers (void) { int num = 12; QPixmap img = getPixmap("nums_ex"); if (img.isNull ()) { num = 11; img = getPixmap ("numbers"); } if (img.isNull ()) return false; for (int i = 0; i < num; i++) { m_numbers[i] = img.copy (i*9, 0, 9, qMin (13, img.height ())); } m_numbers[-1] = m_numbers[10]; // add Blank space to index -1 if (num < 12) { // We do not yet have a '-' Symbol, so we create one // from the '2' character and the blank as background QPixmap pix = m_numbers[10].copy (); QRect r (3, 6, 3, 1); QPainter painter (&pix); painter.drawPixmap (r, m_numbers[2], r); m_numbers[11] = pix; } return true; } void Skin::setSizes () { m_sizes.clear (); /* Please keep this list sorted like the enum */ m_sizes.insert (BUTTON_MW_MENU, QSize (9, 9)); m_sizes.insert (BUTTON_MW_MINIMIZE, QSize (9, 9)); m_sizes.insert (BUTTON_MW_CLOSE, QSize (9, 9)); m_sizes.insert (BUTTON_MW_SHADE, QSize (9, 9)); m_sizes.insert (BUTTON_MW_PREV, QSize (23, 18)); m_sizes.insert (BUTTON_MW_PLAY, QSize (23, 18)); m_sizes.insert (BUTTON_MW_PAUSE, QSize (23, 18)); m_sizes.insert (BUTTON_MW_STOP, QSize (23, 18)); m_sizes.insert (BUTTON_MW_NEXT, QSize (22, 18)); m_sizes.insert (BUTTON_MW_EJECT, QSize (22, 16)); m_sizes.insert (BUTTON_MW_EQ, QSize (23, 12)); m_sizes.insert (BUTTON_MW_PLS, QSize (23, 12)); m_sizes.insert (BUTTON_MW_SHUFFLE, QSize (46, 15)); m_sizes.insert (BUTTON_MW_REPEAT, QSize (28, 15)); m_sizes.insert (BUTTON_MW_SHADED_UNSHADE, QSize (9, 9)); m_sizes.insert (BUTTON_EQ_CLOSE, QSize (9, 9)); m_sizes.insert (BUTTON_EQ_SHADE, QSize (9, 9)); m_sizes.insert (BUTTON_EQ_ACTIVE, QSize (25, 12)); m_sizes.insert (BUTTON_EQ_AUTO, QSize (33, 12)); m_sizes.insert (BUTTON_EQ_PRESET, QSize (44, 12)); // m_sizes.insert (BUTTON_EQ_SHADED_CLOSE, QSize ()); // m_sizes.insert (BUTTON_EQ_SHADED_UNSHADE, QSize ()); m_sizes.insert (BUTTON_PLS_CLOSE, QSize (9, 9)); m_sizes.insert (BUTTON_PLS_SHADE, QSize (9, 9)); m_sizes.insert (BUTTON_PLS_SHADED_UNSHADE, QSize (9, 9)); // m_sizes.insert (SLIDER_POSBAR, QSize ()); m_sizes.insert (SLIDER_POSBAR_BGS, QSize (248, 10)); m_sizes.insert (SLIDER_VOLUMEBAR, QSize (14, 11)); m_sizes.insert (SLIDER_VOLUMEBAR_BGS, QSize (68, 13)); // m_sizes.insert (SLIDER_BALANCEBAR, QSize ()); m_sizes.insert (SLIDER_BALANCEBAR_BGS, QSize (38, 13)); // m_sizes.insert (SLIDER_EQUALIZER, QSize ()); m_sizes.insert (SLIDER_EQUALIZER_BGS, QSize (14, 63)); } void Skin::setPositions () { m_positions.clear (); /* Please keep this list sorted like the enum */ m_positions.insert (BUTTON_MW_MENU, QPoint (6, 3)); m_positions.insert (BUTTON_MW_MINIMIZE, QPoint (244, 3)); m_positions.insert (BUTTON_MW_CLOSE, QPoint (264, 3)); m_positions.insert (BUTTON_MW_SHADE, QPoint (254, 3)); m_positions.insert (BUTTON_MW_PREV, QPoint (16, 88)); m_positions.insert (BUTTON_MW_PLAY, QPoint (39, 88)); m_positions.insert (BUTTON_MW_PAUSE, QPoint (62, 88)); m_positions.insert (BUTTON_MW_STOP, QPoint (85, 88)); m_positions.insert (BUTTON_MW_NEXT, QPoint (108, 88)); m_positions.insert (BUTTON_MW_EJECT, QPoint (136, 89)); m_positions.insert (BUTTON_MW_EQ, QPoint (219, 58)); m_positions.insert (BUTTON_MW_PLS, QPoint (242, 58)); m_positions.insert (BUTTON_MW_SHUFFLE, QPoint (164, 89)); m_positions.insert (BUTTON_MW_REPEAT, QPoint (210, 89)); m_positions.insert (BUTTON_MW_SHADED_UNSHADE, QPoint (254, 3)); m_positions.insert (BUTTON_EQ_CLOSE, QPoint (264, 3)); m_positions.insert (BUTTON_EQ_SHADE, QPoint (254, 3)); m_positions.insert (BUTTON_EQ_ACTIVE, QPoint (14, 18)); m_positions.insert (BUTTON_EQ_AUTO, QPoint (39, 18)); m_positions.insert (BUTTON_EQ_PRESET, QPoint (217, 18)); // m_positions.insert (BUTTON_EQ_SHADED_CLOSE , QPoint ()); // m_positions.insert (BUTTON_EQ_SHADED_UNSHADE, QPoint ()); /* The next 3 widgets are placed from the right */ m_positions.insert (BUTTON_PLS_CLOSE, QPoint (-11, 3)); m_positions.insert (BUTTON_PLS_SHADE, QPoint (-20, 3)); m_positions.insert (BUTTON_PLS_SHADED_UNSHADE, QPoint (-20, 3)); // m_positions.insert (SLIDER_POSBAR, QPoint ()); m_positions.insert (SLIDER_POSBAR_BGS, QPoint (16, 72)); // m_positions.insert (SLIDER_VOLUMEBAR, QPoint ()); m_positions.insert (SLIDER_VOLUMEBAR_BGS, QPoint (107, 57)); // m_positions.insert (SLIDER_BALANCEBAR, QPoint ()); m_positions.insert (SLIDER_BALANCEBAR_BGS, QPoint (177, 57)); // m_positions.insert (SLIDER_EQUALIZER, QPoint ()); // m_positions.insert (SLIDER_EQUALIZER_BGS, QPoint ()); } promoe-0.1.1/src/Skin.h000066400000000000000000000134221134030477200146610ustar00rootroot00000000000000/** * This file is a part of Promoe, an XMMS2 Client. * * Copyright (C) 2005-2008 XMMS2 Team * * 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; version 2 of the License. * * This program is distributed in the hope that 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. */ #ifndef __SKIN_H__ #define __SKIN_H__ #include #include #include #include #include #include #include class QDir; typedef QList QPixmapList; typedef QMap PixmapMap; class Skin : public QObject { Q_OBJECT public: static Skin *getInstance (void); bool setSkin (const QString& name); static const QPixmap getPixmap (const QString&, const QString&); const QSize getSize (uint item) const { return m_sizes.value (item); }; const QPoint getPos (uint item) const { return m_positions.value (item); }; const QIcon getIcon (uint item) const { return m_icons.value(item); }; const QPixmapList getBackgrounds (uint item) const { return m_backgrounds.value(item); }; const PixmapMap getNumbers () const { return m_numbers; } const PixmapMap getSmallNumbers () const { return m_smallNumbers; } const PixmapMap getPixmapFont () const { return m_letterMap; } const QPixmap getItem (uint part) const { return m_items.value (part); } const QPixmap getPls (uint part) const { return m_playlist.value (part); } const QPixmap getLetter (uint c) const { return m_letterMap.value (c); } const QByteArray getPLeditValue (QByteArray c) const { return m_pledit_txt.value(c); } /* Workaround for programm starup */ void emitSkinChanged () { emit skinChanged(this); } signals: void skinChanged (Skin *skin); private: Skin(); static Skin *singleton; void setSizes (); void setPositions (); const QPixmap getPixmap (const QString& file); bool BuildLetterMap (void); bool BuildButtons (void); bool BuildToggleButtons (void); bool BuildTitleBar (void); bool BuildSliders (void); bool BuildOther (void); bool BuildNumbers (void); bool BuildPlaylist (void); bool ParsePLEdit (void); bool BuildEqualizer (void); QString m_skinname; QString m_path; QMap m_icons; QMap m_backgrounds; QMap m_numbers; QMap m_smallNumbers; QMap m_items; QMap m_letterMap; QMap m_playlist; QMap m_pledit_txt; /* Initialized on class construction */ QMap m_positions; QMap m_sizes; public: enum Part { /* Mainwindow buttons */ BUTTON_MW_MENU, BUTTON_MW_MINIMIZE, BUTTON_MW_CLOSE, BUTTON_MW_SHADE, BUTTON_MW_PREV, BUTTON_MW_PLAY, BUTTON_MW_PAUSE, BUTTON_MW_STOP, BUTTON_MW_NEXT, BUTTON_MW_EJECT, BUTTON_MW_EQ, BUTTON_MW_PLS, BUTTON_MW_SHUFFLE, BUTTON_MW_REPEAT, /* Mainwindow buttons shaded */ BUTTON_MW_SHADED_UNSHADE, /* Equalizer buttons */ BUTTON_EQ_CLOSE, BUTTON_EQ_SHADE, BUTTON_EQ_ACTIVE, BUTTON_EQ_AUTO, BUTTON_EQ_PRESET, /* Equalizer buttons shaded */ BUTTON_EQ_SHADED_CLOSE, BUTTON_EQ_SHADED_UNSHADE, /* Playlist buttons */ BUTTON_PLS_CLOSE, BUTTON_PLS_SHADE, /* Playlist buttons shaded */ BUTTON_PLS_SHADED_UNSHADE, /* Sliders */ SLIDER_POSBAR, SLIDER_POSBAR_BGS, SLIDER_VOLUMEBAR, SLIDER_VOLUMEBAR_BGS, SLIDER_BALANCEBAR, SLIDER_BALANCEBAR_BGS, SLIDER_EQUALIZER, SLIDER_EQUALIZER_BGS, // }; // // enum Part { // Old and not yet sorted enum NONE, MAIN_WINDOW, ABOUT_0, ABOUT_1, MONO_0, MONO_1, STEREO_0, STEREO_1, TITLEBAR_0, TITLEBAR_1, STATUSBAR_0, STATUSBAR_1, SEEKBAR, SEEKBAR_POS_0, SEEKBAR_POS_1, TEXTBG, PIC_PLAY, PIC_PAUSE, PIC_STOP, CLUTTER_ON, CLUTTER_OFF, CLUTTER_O, CLUTTER_A, CLUTTER_I, CLUTTER_D, CLUTTER_V, EQ_WIN_BG, EQ_WIN_GRAPH_BG, EQ_WIN_BAR_BTN_0, EQ_WIN_BAR_BTN_1, POSBAR, POSBAR_BTN_0, POSBAR_BTN_1, VOLBAR_BTN_0, VOLBAR_BTN_1, BALANCE_BTN_0, BALANCE_BTN_1, }; enum PlaylistParts { PLS_CORNER_UL_0, PLS_CORNER_UL_1, PLS_CORNER_UR_0, PLS_CORNER_UR_1, PLS_TBAR_0, PLS_TBAR_1, PLS_TFILL_0, PLS_TFILL_1, PLS_BFILL_0, PLS_BFILL_1 = PLS_BFILL_0, PLS_VISMINI_0, PLS_VISMINI_1 = PLS_VISMINI_0, PLS_LFILL_0, PLS_LFILL_1 = PLS_LFILL_0, PLS_RFILL_0, PLS_RFILL_1 = PLS_RFILL_0, PLS_RFILL2_0, PLS_RFILL2_1 = PLS_RFILL2_0, PLS_RFILL3_0, PLS_RFILL3_1 = PLS_RFILL3_0, PLS_CLOSE_BTN_0, PLS_CLOSE_BTN_1, PLS_SHADE_BTN_0, PLS_SHADE_BTN_1, PLS_MAX_BTN_0, PLS_MAX_BTN_1, PLS_SCROLL_0, PLS_SCROLL_1, PLS_WS_LE_0, PLS_WS_LE_1 = PLS_WS_LE_0, PLS_WS_RE_0, PLS_WS_RE_1, PLS_WS_MID_0, PLS_WS_MID_1 = PLS_WS_MID_0, PLS_LCBAR, PLS_RCBAR, PLS_MSC_BTN_0, PLS_MSC_BTN_1, PLS_ADD, PLS_ADD_DEC, PLS_ADD_URL_0, PLS_ADD_URL_1, PLS_ADD_DIR_0, PLS_ADD_DIR_1, PLS_ADD_FIL_0, PLS_ADD_FIL_1, PLS_DEL, PLS_DEL_DEC, PLS_DEL_ALL_0, PLS_DEL_ALL_1, PLS_DEL_CRP_0, PLS_DEL_CRP_1, PLS_DEL_FIL_0, PLS_DEL_FIL_1, PLS_SEL, PLS_SEL_DEC, PLS_SEL_INV_0, PLS_SEL_INV_1, PLS_SEL_NIL_0, PLS_SEL_NIL_1, PLS_SEL_ALL_0, PLS_SEL_ALL_1, PLS_MSC, PLS_MSC_DEC, PLS_MSC_SRT_0, PLS_MSC_SRT_1, PLS_MSC_INF_0, PLS_MSC_INF_1, PLS_MSC_OPT_0, PLS_MSC_OPT_1, PLS_LST, PLS_LST_DEC, PLS_LST_NEW_0, PLS_LST_NEW_1, PLS_LST_SAV_0, PLS_LST_SAV_1, PLS_LST_OPN_0, PLS_LST_OPN_1 }; }; #endif promoe-0.1.1/src/SkinChooser.cpp000066400000000000000000000057431134030477200165460ustar00rootroot00000000000000/** * This file is a part of Promoe, an XMMS2 Client. * * Copyright (C) 2005-2008 XMMS2 Team * * 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; version 2 of the License. * * This program is distributed in the hope that 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. */ #include "Skin.h" #include "SkinChooser.h" #include #include #include #include #include #include #include #include SkinChooser::SkinChooser (QWidget *parent) : QDialog (parent) { #ifndef _WIN32 setWindowIcon (QIcon (":icon.png")); #endif setWindowModality (Qt::ApplicationModal); setAttribute (Qt::WA_DeleteOnClose); QVBoxLayout *vbox = new QVBoxLayout (this); QLabel *label = new QLabel ("Available skins...", this); label->setFont (QFont ("Helvetica", 16)); vbox->addWidget (label); m_skin = new SkinList (this); vbox->addWidget (m_skin); resize (500, 300); } SkinList::SkinList (QWidget *parent) : QListWidget (parent) { setIconSize (QSize (137, 58)); new SkinChooserItem (QIcon (QIcon(Skin::getPixmap("main", ":/skins/Almond-blue"))), "Almond-blue (default)", ":/skins/Almond-blue/", this); foreach(QString skin, QDir(":/skins").entryList()) { if (skin == "Almond-blue") continue; QString path = ":/skins/" + skin; QIcon icon = QIcon(Skin::getPixmap("main", path)); if (icon.isNull()) continue; new SkinChooserItem(icon, skin, path, this); } QSettings settings; QStringList searchpath; if (settings.contains ("skin/searchpath") ) { searchpath = settings.value ("skin/searchpath").toStringList (); } else { QString path; path.append (QDir::homePath()); path.append ("/.config/xmms2/clients/promoe/skins/"); searchpath.append (path); settings.setValue ("skin/searchpath", searchpath); } // This should not be saved in the searchpath config value. searchpath.append (DATADIR "/skins"); QDir d; d.setFilter (QDir::AllDirs|QDir::NoDotAndDotDot|QDir::Files); QFileInfoList list; foreach (QString path, searchpath) { d.setPath (path); list += d.entryInfoList(); } foreach (QFileInfo fileInfo, list) { QPixmap p = Skin::getPixmap ("main", fileInfo.filePath()); if (!p.isNull()) { new SkinChooserItem (QIcon (p), fileInfo.baseName (), fileInfo.absoluteFilePath (), this); } } connect (this, SIGNAL (itemClicked (QListWidgetItem *)), this, SLOT (changeSkin (QListWidgetItem *))); } void SkinList::changeSkin (QListWidgetItem *item) { Skin *skin = Skin::getInstance (); SkinChooserItem *it = dynamic_cast (item); QSettings settings; skin->setSkin (it->getPath ()); settings.setValue ("skin/path", it->getPath ()); } promoe-0.1.1/src/SkinChooser.h000066400000000000000000000023561134030477200162100ustar00rootroot00000000000000/** * This file is a part of Promoe, an XMMS2 Client. * * Copyright (C) 2005-2008 XMMS2 Team * * 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; version 2 of the License. * * This program is distributed in the hope that 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. */ #ifndef __SKINCHOOSER__ #define __SKINCHOOSER__ #include #include class SkinList : public QListWidget { Q_OBJECT public: SkinList (QWidget *parent); ~SkinList () {} public slots: void changeSkin (QListWidgetItem *item); }; class SkinChooserItem : public QListWidgetItem { public: SkinChooserItem (QIcon i, QString n, QString p, QListWidget *parent) : QListWidgetItem (i, n, parent) { m_path = p; } ~SkinChooserItem () {} QString getPath (void) { return m_path; } private: QString m_path; }; class SkinChooser : public QDialog { public: SkinChooser (QWidget *parent); ~SkinChooser (void) {} private: SkinList *m_skin; }; #endif promoe-0.1.1/src/application.cpp000066400000000000000000000063101134030477200166110ustar00rootroot00000000000000/** * This file is a part of Promoe, an XMMS2 Client. * * Copyright (C) 2005-2008 XMMS2 Team * * 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; version 2 of the License. * * This program is distributed in the hope that 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. */ #include "xclient.h" #include "application.h" #include "mainwindow.h" #include "equalizerwindow.h" #include "playlistwindow.h" #include "Skin.h" #ifdef HAVE_SERVERBROWSER #include "Serverbrowser.h" #endif #include #include Application::Application (int &argc, char **argv) : QApplication (argc, argv) { setOrganizationName("xmms2"); setOrganizationDomain("xmms.org"); setApplicationName("Promoe"); m_xmms2_client = new XClient (this, "Promoe"); connect (this, SIGNAL (aboutToQuit ()), this, SLOT (cleanupHandler ())); connect (m_xmms2_client, SIGNAL(disconnected(XClient *)), this, SLOT(handleDisconnected ())); QSettings settings; MainWindow *mw = new MainWindow (NULL); /* * After all windows have been initialized, send the skinChanged signal, * so that all windows fetch their skin information. * The windows should fetch their skin information themselfes on startup * This is a wokaround until all widgets have been fixed */ Skin::getInstance()->emitSkinChanged(); mw->show (); // The Playlist- and EqualizerWindow has to become visible after the // mainwindow because metacity (gnome-windowmanager) can't handle them // correctly otherwise mw->getEQ ()->setVisible (settings.value ("equalizer/visible", false).toBool ()); mw->getPL ()->setVisible (settings.value ("playlist/visible", false).toBool ()); m_xmms2_client->connect (); #ifdef HAVE_SERVERBROWSER ServerBrowserWindow *browser = new ServerBrowserWindow (mw); browser->show (); #endif m_timemode_reverse = settings.value ("MainWindow/timemodereverse", false).toBool(); } void Application::cleanupHandler () { QSettings s; s.setValue("MainWindow/timemodereverse",m_timemode_reverse); if (s.value ("promoe/quitonclose", false).toBool ()) m_xmms2_client->shutdownServer (); } void Application::handleDisconnected () { // if the Application is about to quit, we no longer need to handle // disconnects if (closingDown ()) return; int pressed = QMessageBox::warning( NULL, "xmms2 daemon disconnected", "The xmms2 daemon has disconnected\n" "This could be because the server crashed\n" "or because another client has shut down the sever.", "Reconnect", "Quit Promoe"); switch (pressed) { case 0: m_xmms2_client->connect (); break; default: QApplication::quit (); } } int main (int argc, char **argv) { Application app(argc, argv); #ifdef Q_OS_MACX /** This is soooo wrong, there must exsist a flag for * static plugins Q_IMPORT_PLUGIN(QJpegPlugin); */ #endif return app.exec(); } promoe-0.1.1/src/application.h000066400000000000000000000027031134030477200162600ustar00rootroot00000000000000/** * This file is a part of Promoe, an XMMS2 Client. * * Copyright (C) 2005-2008 XMMS2 Team * * 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; version 2 of the License. * * This program is distributed in the hope that 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. */ #ifndef __APPLICATION__ #define __APPLICATION__ #include class XClient; class Application; #if defined(qApp) #undef qApp #endif #define qApp (static_cast(QCoreApplication::instance())) #define App (static_cast(QCoreApplication::instance())) class Application : public QApplication { Q_OBJECT signals: void settingsChanged (void); public: Application (int &argc, char **argv); XClient *client () const {return m_xmms2_client;} public slots: void cleanupHandler (); void handleDisconnected (); private: XClient *m_xmms2_client; // TODO: Search some better place for those methods public: bool isTimemodeReverse(void) {return m_timemode_reverse;} void setTimemodeReverse(bool b) {m_timemode_reverse = b;} public slots: void toggleTime () {m_timemode_reverse = !m_timemode_reverse;} private: bool m_timemode_reverse; }; #endif promoe-0.1.1/src/avahi.prf000066400000000000000000000001721134030477200154030ustar00rootroot00000000000000SOURCES += ServerBrowser.cpp HEADERS += ServerBrowser.h PKGCONFIG += avahi-client avahi-qt4 DEFINES += HAVE_SERVERBROWSER promoe-0.1.1/src/basewindow.cpp000066400000000000000000000161331134030477200164540ustar00rootroot00000000000000/** * This file is a part of Promoe, an XMMS2 Client * * Copyright (C) 2005-2008 XMMS2 Team * * 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 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that 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. */ #include "basewindow.h" #include "mainwindow.h" #include #include #include #include #include #include #include #include #include BaseWindow::BaseWindow (QWidget *parent) : QMainWindow (parent) { } // Qt Event Handlers void BaseWindow::hideEvent (QHideEvent *event) { if (event->spontaneous ()) { event->ignore (); return; } if ((objectName ().isEmpty ()) || (objectName () == "MainWindow")) { event->ignore (); return; } QSettings s; s.setValue (objectName ()+"/visible", false); emit visibilityChanged (false); } void BaseWindow::showEvent (QShowEvent *event) { if (objectName ().isEmpty ()) { event->ignore (); return; } QSettings s; s.setValue (objectName ()+"/visible", true); mw ()->attachWidgets (); emit visibilityChanged (true); } void BaseWindow::moveEvent (QMoveEvent *event) { if (objectName ().isEmpty ()) { event->ignore (); return; } QSettings s; s.setValue (objectName ()+"/pos", pos ()); } void BaseWindow::mousePressEvent (QMouseEvent *event) { if (event->button () == Qt::LeftButton) { m_diff = event->pos (); } } void BaseWindow::mouseReleaseEvent (QMouseEvent *event) { if (event->button () == Qt::LeftButton) { m_diff = QPoint (0, 0); mw ()->attachWidgets (); } } void BaseWindow::mouseMoveEvent (QMouseEvent *event) { // Only move, if the left button is pressed if ((event->buttons () & Qt::LeftButton) && !m_diff.isNull ()) { move (snapWindow (event->globalPos() - m_diff)); } } // Helper classes vor snapping windows MainWindow * BaseWindow::mw () { //MainWindow is the only BaseWindow without a *parent if (parent ()) { return qobject_cast(parent ()); } else { return qobject_cast(this); } } bool BaseWindow::touches (QWidget *widget) { if (this == widget) { return true; } qint32 left = x (); qint32 right = left + width (); qint32 top = y (); qint32 bottom = top + height (); qint32 w_left = widget->x (); qint32 w_right = w_left + widget->width (); qint32 w_top = widget->y (); qint32 w_bottom = w_top + widget->height (); if (( (top <= w_bottom) && (bottom >= w_top) && ((left == w_right || right == w_left)) ) || ( (left <= w_right) && (right >= w_left) && ((top == w_bottom) || (bottom == w_top) ) )) { return true; } return false; } QPoint BaseWindow::snapWindow(QPoint pos, AttachedWindowMap attached) { //TODO: make snapdistance configurable qint32 snapdistance = 10; QWidgetList widgets = qApp->topLevelWidgets (); BaseWindow *b; widgets.removeAt (widgets.indexOf (this)); // ignore attached widgets // attached Widgets touch this window, and would create a strange movement if (!attached.isEmpty ()) { foreach (b, attached.keys ()) { int i = widgets.indexOf (b); if (i >= 0) { widgets.removeAt (i); } } } bool vSnapped = false; bool hSnapped = false; attached.insert (this, QPoint (0,0)); BaseWindow *ref; // equalizerwindow and playlistwindow have only process this method once // the ugly part comes into play, because mainwindow also snaps to // windows it's subwindows get near. // We iterate over the moved window and all it's attached windows. // if a attached window can snap to a window, we use the offset of // this windows position to the mainwindow to calculate the position // we have to move the mainwindow to. // // As soon as we have a horizontal an vertical postition where the // windows can snap to, we stop further processing // (vSnapped and hSnapped are used to keep track of that) foreach (ref, attached.keys ()) { qint32 left = pos.x () + attached[ref].x (); qint32 right = left + ref->width (); qint32 top = pos.y () + attached[ref].y (); qint32 bottom = top + ref->height (); QWidget *w; // snap to left or right edge foreach (w, widgets) { if (!w->isVisible ()) { continue; } qint32 w_left = w->x (); qint32 w_right = w_left + w->width (); qint32 w_top = w->y (); qint32 w_bottom = w_top + w->height (); // test if we are anywhere near this widget if ((w_top > bottom + snapdistance) || (w_bottom < top - snapdistance) || (w_left > right + snapdistance) || (w_right < left - snapdistance)) { continue; } // test if this widget can snap left or right to another widget // and if it can, test if the tops or bottoms can also snap if ((qAbs (w_left - right) < snapdistance)) { if (!vSnapped) { pos.setX (w_left - ref->width () - attached[ref].x ()); vSnapped = true; } if (hSnapped) { break; } if (qAbs (w_bottom - bottom) < snapdistance) { pos.setY (w_bottom - ref->height () - attached[ref].y ()); hSnapped = true; break; } else if (qAbs (w_top - top) < snapdistance) { pos.setY (w_top - attached[ref].y ()); hSnapped = true; break; } } else if ((qAbs (left - w_right) < snapdistance)) { if (!vSnapped) { pos.setX (w_right - attached[ref].x ()); vSnapped = true; } if (hSnapped) { break; } if (qAbs (w_bottom - bottom) < snapdistance) { pos.setY (w_bottom - ref->height () - attached[ref].y ()); hSnapped = true; break; } else if (qAbs (w_top - top) < snapdistance) { pos.setY (w_top - attached[ref].y ()); hSnapped = true; break; } } // test if this widget can snap to top or bottom of another widget // and if it can, test if the left or right edges also can if ((qAbs (top - w_bottom) < snapdistance)) { if (!hSnapped) { pos.setY (w_bottom - attached[ref].y ()); hSnapped = true; } if (vSnapped) { break; } if (qAbs (w_left - left) < snapdistance) { pos.setX (w_left - attached[ref].x ()); vSnapped = true; break; } else if (qAbs (w_right - right) < snapdistance) { pos.setX (w_right - ref->width () - attached[ref].x ()); vSnapped = true; break; } } else if ((qAbs (w_top - bottom) < snapdistance)) { if (!hSnapped) { pos.setY (w_top - ref->height () - attached[ref].y ()); hSnapped = true; } if (vSnapped) { break; } if (qAbs (w_left - left) < snapdistance) { pos.setX (w_left - attached[ref].x ()); vSnapped = true; break; } else if (qAbs (w_right - right) < snapdistance) { pos.setX (w_right - ref->width () - attached[ref].x ()); vSnapped = true; break; } } } // end foreach (w, widgets) if (hSnapped && vSnapped) { break; } } // end foreach (ref, attached) return pos; } promoe-0.1.1/src/basewindow.h000066400000000000000000000027011134030477200161150ustar00rootroot00000000000000/** * This file is a part of Promoe, an XMMS2 Client * * Copyright (C) 2005-2008 XMMS2 Team * * 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 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that 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. */ #ifndef __BASEWINDOW_H__ #define __BASEWINDOW_H__ #include #include #include class QPoint; class QHideEvent; class QShowEvent; class QMoveEvent; class QMouseEvent; class MainWindow; class BaseWindow; typedef QMap AttachedWindowMap; class BaseWindow : public QMainWindow { Q_OBJECT signals: void visibilityChanged (bool visible); public: BaseWindow (QWidget *parent); bool touches (QWidget *); MainWindow * mw (); protected: void hideEvent (QHideEvent *event); void showEvent (QShowEvent *event); void moveEvent (QMoveEvent *event); void mousePressEvent (QMouseEvent *event); void mouseReleaseEvent (QMouseEvent *event); void mouseMoveEvent (QMouseEvent *event); QPoint snapWindow (QPoint pos, AttachedWindowMap attached = AttachedWindowMap()); QPoint m_diff; }; #endif promoe-0.1.1/src/dialogs/000077500000000000000000000000001134030477200152245ustar00rootroot00000000000000promoe-0.1.1/src/dialogs/dialogs.pri000066400000000000000000000004261134030477200173640ustar00rootroot00000000000000HEADERS += entryinfo.h \ playlistchooser.h \ urlopen.h SOURCES += entryinfo.cpp \ playlistchooser.cpp \ urlopen.cpp FORMS += entryinfo.ui \ playlistchooser.ui \ urlopen.ui INCLUDEPATH += $$PWD DEPENDPATH += $$PWD promoe-0.1.1/src/dialogs/entryinfo.cpp000066400000000000000000000043061134030477200177500ustar00rootroot00000000000000/** * This file is a part of Promoe, an XMMS2 client * * Copyright (C) 2005-2008 XMMS2 Team * * 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 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that 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. */ #include "xclientcache.h" #include "entryinfo.h" #include #include #include EntryInfo::EntryInfo (QWidget *parent, XClientCache *cache, uint32_t id) : QDialog (parent) { setupUi (this); setAttribute (Qt::WA_DeleteOnClose); m_cache = cache; m_id = id; connect (cache, SIGNAL (entryChanged (uint32_t)), this, SLOT (mlib_entry_changed (uint32_t))); connect (cache, SIGNAL (entryRemoved (uint32_t)), this, SLOT (mlib_entry_removed (uint32_t))); getInfo (); } void EntryInfo::getInfo () { QHash tmp = m_cache->get_info (m_id); //FIXME "url" value ist wrong. tight be an error in clientcache filenameEdit->setText (tmp.value ("url").toString ()); titleEdit->setText (tmp.value ("title").toString ()); artistEdit->setText (tmp.value ("artist").toString ()); albumEdit->setText (tmp.value ("album").toString ()); // commentEdit->setText (); yearEdit->setText (tmp.value ("date").toString ()); trackEdit->setText (tmp.value ("tracknr").toString ()); genreEdit->setText (tmp.value ("genre").toString ()); } void EntryInfo::setId (uint32_t id) { m_id = id; getInfo (); } void EntryInfo::mlib_entry_changed (uint32_t id) { if (id == m_id) { // the metadata for the current entry changed, // so we update the dialog to display the current values // TODO: think of a good way to handle changed values as soon as // we allow editing of metadata getInfo (); } } void EntryInfo::mlib_entry_removed (uint32_t id) { // if the mlib no longer contains our item, we have to remove it if (id == m_id) { close (); } } promoe-0.1.1/src/dialogs/entryinfo.h000066400000000000000000000021451134030477200174140ustar00rootroot00000000000000/** * This file is a part of Promoe, an XMMS2 client * * Copyright (C) 2005-2008 XMMS2 Team * * 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 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that 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. */ #ifndef __ENTRYINFO_H__ #define __ENTRYINFO_H__ #include "ui_entryinfo.h" #include #include class XClientCache; class EntryInfo : public QDialog, private Ui::EntryInfo { Q_OBJECT public: EntryInfo (QWidget *parent, XClientCache *cache, uint32_t id = 0); public slots: void setId (uint32_t id); private slots: void mlib_entry_changed (uint32_t id); void mlib_entry_removed (uint32_t id); private: void getInfo (); uint32_t m_id; XClientCache *m_cache; }; #endif promoe-0.1.1/src/dialogs/entryinfo.ui000066400000000000000000000140241134030477200176010ustar00rootroot00000000000000 EntryInfo 0 0 426 357 Dialog Filename: true 0 0 ID Tag: Title: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter true Artist: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter true Album: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter true Comment: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter true Year: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 0 0 80 16777215 true Track Number: true Genre: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter true Qt::Horizontal QDialogButtonBox::Close buttonBox accepted() EntryInfo accept() 248 254 157 274 buttonBox rejected() EntryInfo reject() 316 260 286 274 promoe-0.1.1/src/dialogs/playlistchooser.cpp000066400000000000000000000144021134030477200211550ustar00rootroot00000000000000/** * This file is a part of Promoe, an XMMS2 client * * Copyright (C) 2005-2008 XMMS2 Team * * 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 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that 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. */ // Needed for XMMS_COLLECTION_CHANGED_* defines #include #include #include #include #include #include "playlistchooser.h" #include "xcollection.h" PlaylistChooser::PlaylistChooser (QWidget *parent, XCollection *coll) : QDialog (parent) { setupUi (this); setAttribute (Qt::WA_DeleteOnClose); m_collection = coll; // the createButton will be enabled as soon as textEdit contains a name // that is not equal to an existing Playlist createButton->setEnabled (false); // selectButton will be enabled when exactly one item is selected selectButton->setEnabled (false); // fill the List with Playlistnames. // Sort out playlists that start with '_' QRegExp regex = QRegExp ("^[^_]"); QStringList lists = coll->list ("Playlists").filter (regex); listWidget->setSortingEnabled (true); listWidget->addItems (lists); connect (coll, SIGNAL (collectionModified (QString, QString, int, QString)), this, SLOT (handle_playlists_modified (QString, QString, int, QString))); // display active Playlist in bold Font QString activePls = coll->activePlaylist (); handle_active_pls_changed (activePls, ""); connect (coll, SIGNAL (activePlaylistChanged (QString, QString)), this, SLOT (handle_active_pls_changed (QString, QString))); } void PlaylistChooser::handle_playlists_modified (QString name, QString ns, int type, QString newname) { if (ns != "Playlists") { return; } switch (type) { case XMMS_COLLECTION_CHANGED_ADD: if (!name.startsWith("_")) { listWidget->addItem(name); } // if we created the playlist, make is the active playlist if (name == textEdit->text ()) { m_collection->setActivePlaylist (name); } break; case XMMS_COLLECTION_CHANGED_REMOVE: { QList list = listWidget->findItems (name, Qt::MatchExactly); if (!list.empty ()) { // we should only have one exatly matching String QListWidgetItem* item = list.first (); int idx = listWidget->row (item); item = listWidget->takeItem (idx); delete item; } } break; case XMMS_COLLECTION_CHANGED_RENAME: { // remove the old entry QList list = listWidget->findItems (name, Qt::MatchExactly); if (!list.empty ()) { // we should only have one exatly matching String QListWidgetItem* item = list.first (); int idx = listWidget->row (item); item = listWidget->takeItem (idx); delete item; } // and add the new one if (!newname.startsWith("_")) { listWidget->addItem(newname); } } break; default: break; } } void PlaylistChooser::handle_active_pls_changed (QString newActive, QString oldActive) { QListWidgetItem *item; QFont font; QList list; // newActive and oldActive can match at most once each // paint former active Playlist no longer in bold list = listWidget->findItems (oldActive, Qt::MatchExactly); if (!list.empty ()) { item = list.first (); font = item->font (); font.setBold (false); item->setFont (font); } // paint new active Playlist in bold list = listWidget->findItems (newActive, Qt::MatchExactly); if (!list.empty ()) { item = list.first (); font = item->font (); font.setBold (true); item->setFont (font); } // update the activestate of the selectButton on_listWidget_itemSelectionChanged (); } bool PlaylistChooser::playlistExists (QString name) { // Use the information from m_collection, as listWidger // doesn't contain hidden Playlists return m_collection->list ("Playlists").contains (name); } void PlaylistChooser::on_removeButton_clicked () { QList list = listWidget->selectedItems (); if (list.empty ()) return; // nothing to do // TODO: if we change the selectionmodel to multiselection, // change this tp remove more than one item QListWidgetItem* item = list.first (); QString name = item->text (); m_collection->remove (name, "Playlists"); } void PlaylistChooser::on_createButton_clicked () { QString name = textEdit->text (); // only create new playlist, if it doesn't already exist if (playlistExists (name)) return; m_collection->addIdlist (name); } void PlaylistChooser::on_selectButton_clicked () { QList list = listWidget->selectedItems (); if (list.size () == 1) { QListWidgetItem * item = list.first (); m_collection->setActivePlaylist (item->text ()); } } void PlaylistChooser::on_listWidget_itemDoubleClicked (QListWidgetItem* item) { QString name = item->text (); m_collection->setActivePlaylist (name); } void PlaylistChooser::on_listWidget_itemSelectionChanged () { QList list = listWidget->selectedItems (); // enable selectButton, if one item is selected and does not represent // the currently active playlist selectButton->setEnabled ((list.size () == 1) && (list.first ()->text () != m_collection->activePlaylist ())); // enable removeButton if more than one item is selected // or if the selected item is not the actice Playlist removeButton->setEnabled ((list.size () > 1) || ( (list.size () == 1) && (list.first ()->text () != m_collection->activePlaylist ()))); } void PlaylistChooser::on_textEdit_textChanged () { // Enable createButton only, if no playlist with that name exists // and the textEdit is not empty createButton->setEnabled ((!playlistExists (textEdit->text ()) && (textEdit->text () != ""))); } promoe-0.1.1/src/dialogs/playlistchooser.h000066400000000000000000000026551134030477200206310ustar00rootroot00000000000000/** * This file is a part of Promoe, an XMMS2 client * * Copyright (C) 2005-2008 XMMS2 Team * * 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 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that 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. */ #ifndef __PLAYLISTCHOOSER_H__ #define __PLAYLISTCHOOSER_H__ #include "ui_playlistchooser.h" #include class QListWidgetItem; class XCollection; class PlaylistChooser : public QDialog, private Ui::PlaylistChooser { Q_OBJECT public: PlaylistChooser (QWidget *parent, XCollection *coll); private slots: // XCollection change handlers void handle_playlists_modified (QString, QString, int, QString); void handle_active_pls_changed (QString, QString); // autoconnect Slots void on_removeButton_clicked (); void on_createButton_clicked (); void on_selectButton_clicked (); void on_listWidget_itemDoubleClicked (QListWidgetItem* item); void on_listWidget_itemSelectionChanged (); void on_textEdit_textChanged (); private: bool playlistExists (QString name); XCollection* m_collection; }; #endif promoe-0.1.1/src/dialogs/playlistchooser.ui000066400000000000000000000061151134030477200210120ustar00rootroot00000000000000 PlaylistChooser 0 0 266 302 Playlists Create Qt::ScrollBarAsNeeded Qt::ScrollBarAlwaysOff Remove Qt::Horizontal 40 20 <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Set the currently selected playlist as active playlist</p></body></html> Select Close closeButton clicked() PlaylistChooser close() 217 279 129 124 listWidget currentTextChanged(QString) textEdit setText(QString) 129 150 87 21 promoe-0.1.1/src/dialogs/urlopen.cpp000066400000000000000000000017601134030477200174200ustar00rootroot00000000000000/** * This file is a part of Promoe, an XMMS2 client * * Copyright (C) 2005-2008 XMMS2 Team * * 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 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that 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. */ #include #include "urlopen.h" #include "xcollection.h" UrlOpen::UrlOpen (QWidget *parent, XCollection *coll) : QDialog (parent) { setupUi (this); setAttribute (Qt::WA_DeleteOnClose); m_collection = coll; } void UrlOpen::on_openButton_clicked () { QUrl url(urlEdit->text ()); if (url.isValid ()) { bool b = m_collection->playlistAddUrl (url); if (b) { close (); } } } promoe-0.1.1/src/dialogs/urlopen.h000066400000000000000000000017141134030477200170640ustar00rootroot00000000000000/** * This file is a part of Promoe, an XMMS2 client * * Copyright (C) 2005-2008 XMMS2 Team * * 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 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that 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. */ #ifndef __URLOPEN_H__ #define __URLOPEN_H__ #include "ui_urlopen.h" #include class XCollection; class UrlOpen : public QDialog, private Ui::UrlOpen { Q_OBJECT public: UrlOpen (QWidget *parent, XCollection *coll); private slots: // autoconnect slots void on_openButton_clicked (); private: XCollection *m_collection; }; #endif promoe-0.1.1/src/dialogs/urlopen.ui000066400000000000000000000037461134030477200172610ustar00rootroot00000000000000 UrlOpen 0 0 328 81 0 0 Open Url Qt::Horizontal 40 20 Open Close urlEdit returnPressed() openButton click() 203 25 207 53 closeButton clicked() UrlOpen close() 261 60 56 57 promoe-0.1.1/src/equalizer/000077500000000000000000000000001134030477200156035ustar00rootroot00000000000000promoe-0.1.1/src/equalizer/equalizer.pri000066400000000000000000000002471134030477200203230ustar00rootroot00000000000000HEADERS += equalizerwindow.h \ equalizerwidget.h SOURCES += equalizerwindow.cpp \ equalizerwidget.cpp INCLUDEPATH += $$PWD DEPENDPATH += $$PWD promoe-0.1.1/src/equalizer/equalizerwidget.cpp000066400000000000000000000201261134030477200215150ustar00rootroot00000000000000/** * This file is a part of Promoe, an XMMS2 Client. * * Copyright (C) 2005-2008 XMMS2 Team * * 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; version 2 of the License. * * This program is distributed in the hope that 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. */ #include "xclient.h" #include "xconfig.h" #include "equalizerwidget.h" #include "application.h" #include "mainwindow.h" #include "pixmapbutton.h" #include "pixmapslider.h" #include "Skin.h" #include #include EqualizerSlider::EqualizerSlider (QWidget *parent, int id) : PixmapSlider (parent) { m_id = id; connect ( this, SIGNAL (sliderMoved (int)), this, SLOT (on_self_slider_moved (int)) ); setMinimum (-20); setMaximum (20); setSliderOffset (QPoint (1, 0)); setInvertedAppearance (true); setOrientation (Qt::Vertical); } void EqualizerSlider::on_self_slider_moved (int value) { emit numberedSliderMoved (value, m_id); } /* * EqualizerWidget */ EqualizerWidget::EqualizerWidget (QWidget *parent) : QWidget (parent) { Skin *skin = Skin::getInstance (); const XClient *client = App->client (); m_xconfig = client->xconfig (); connect (skin, SIGNAL(skinChanged(Skin *)), this, SLOT(setPixmaps(Skin *))); m_closebtn = new PixmapButton (this); m_closebtn->resize (skin->getSize (Skin::BUTTON_EQ_CLOSE)); m_closebtn->move (skin->getPos (Skin::BUTTON_EQ_CLOSE)); connect (m_closebtn, SIGNAL (clicked ()), parent, SLOT (hide ())); // TODO implement shade mode m_shadebtn = new PixmapButton (this); m_shadebtn->resize (skin->getSize (Skin::BUTTON_EQ_SHADE)); m_shadebtn->move (skin->getPos (Skin::BUTTON_EQ_SHADE)); m_shadebtn->setEnabled (false); m_enable = new PixmapButton (this); m_enable->setCheckable (true); m_enable->resize (skin->getSize (Skin::BUTTON_EQ_ACTIVE)); m_enable->move (skin->getPos (Skin::BUTTON_EQ_ACTIVE)); // must use signal clicked here, as this button also becomes unchecked if // use_legacy is deactivated connect (m_enable, SIGNAL (clicked (bool)), this, SLOT (setEqualizerEnabled (bool))); m_auto = new PixmapButton (this); m_auto->setCheckable (true); m_auto->resize (skin->getSize (Skin::BUTTON_EQ_AUTO)); m_auto->move (skin->getPos (Skin::BUTTON_EQ_AUTO)); m_auto->setEnabled(false); // FIXME: needs to be implemented connect (m_auto, SIGNAL(clicked()), parent, SLOT(setEnabled())); m_preset = new PixmapButton (this); m_preset->resize (skin->getSize (Skin::BUTTON_EQ_PRESET)); m_preset->move (skin->getPos (Skin::BUTTON_EQ_PRESET)); m_preset->setEnabled(false); // FIXME: needs to be implemented connect(m_preset, SIGNAL(clicked()), parent, SLOT(setEnabled())); m_preamp = new EqualizerSlider(this, -1); m_preamp->resize (skin->getSize (Skin::SLIDER_EQUALIZER_BGS)); m_preamp->move(21, 38); connect (m_preamp, SIGNAL (sliderMoved (int)), this, SLOT (updateServerPreamp (int))); for (int i=0; i < 10; i++) { m_bands[i] = new EqualizerSlider(this, i); m_bands[i]->resize (skin->getSize (Skin::SLIDER_EQUALIZER_BGS)); m_bands[i]->move(78+i*18, 38); connect (m_bands[i], SIGNAL (numberedSliderMoved (int, int)), this, SLOT (updateServerBands (int, int))); } connect (m_xconfig, SIGNAL (configChanged (QString, QString)), this, SLOT (serverConfigValueChanged (QString, QString))); // we request the config values manually if we already are connected connect (m_xconfig, SIGNAL (configLoaded ()), this, SLOT (loadServerConfig ())); if (m_xconfig->isReady()) { loadServerConfig (); } } EqualizerWidget::~EqualizerWidget (void) { } void EqualizerWidget::setPixmaps (Skin *skin) { m_pixmap = skin->getItem(Skin::EQ_WIN_BG); m_graph = skin->getItem(Skin::EQ_WIN_GRAPH_BG); setMinimumSize (m_pixmap.size ()); setMaximumSize (m_pixmap.size ()); /* Updade Buttons */ m_closebtn->setIcon (skin->getIcon (Skin::BUTTON_EQ_CLOSE)); m_shadebtn->setIcon (skin->getIcon (Skin::BUTTON_EQ_SHADE)); m_enable->setIcon (skin->getIcon (Skin::BUTTON_EQ_ACTIVE)); m_auto->setIcon (skin->getIcon (Skin::BUTTON_EQ_AUTO)); m_preset->setIcon (skin->getIcon (Skin::BUTTON_EQ_PRESET)); /* Update Sliders */ QPixmap normal = skin->getItem (Skin::EQ_WIN_BAR_BTN_0); QPixmap pressed = skin->getItem (Skin::EQ_WIN_BAR_BTN_1); QPixmapList bgslist = skin->getBackgrounds (Skin::SLIDER_EQUALIZER_BGS); m_preamp->setSliders (normal, pressed); m_preamp->setBackground (bgslist); for (int i = 0; i < 10; i++) { m_bands[i]->setSliders (normal, pressed); m_bands[i]->setBackground (bgslist); } update(); } void EqualizerWidget::paintEvent (QPaintEvent *event) { if (m_pixmap.isNull ()) { return; } QPainter(paint); QRect r; paint.begin(this); paint.drawPixmap(rect(), m_pixmap, m_pixmap.rect()); // r.setRect(86, 17, 113, 19); if (m_graph.height () > 0 ) { r.setRect(86, 17, m_graph.width (), m_graph.height ()); paint.drawPixmap(r, m_graph, m_graph.rect()); } paint.end(); } bool EqualizerWidget::haveEqualizerEffect() { // FIXME: Disable Widget if doesn't get enabled // TODO: Test if server has equalizer effect plugin // TODO: Add 'don't bother me again' checkbox if (!(m_xconfig->values_get (QRegExp ("effect\\.order\\.\\d+")). contains ("equalizer"))) { int button = QMessageBox::information (this, "Equalizer not enabled", "You need to enable the equalizer plugin on\n" \ "the server or the equalizer will not work\n\n" \ "Should promoe enable the equalizer plugin?", "Enable", "Ignore"); if (button == 0) { // Add 'equalizer' to first empty 'effect.order.' entry, // xmms2d takes care that there alway is at least one empty entry int i = 0; QString key = "effect.order.%1"; while (m_xconfig->has_key (key.arg (i))) { if (m_xconfig->value_get (key.arg (i)).isEmpty ()) { m_xconfig->value_set (key.arg (i), "equalizer"); break; } i++; } return true; } else { return false; } } return true; } /* * These methods handle server configuration updates and * update the serverconfiguraten if we change something */ void EqualizerWidget::loadServerConfig () { QString key; QString value; // set enabled checkbox key = QString ("equalizer.enabled"); value = m_xconfig->value_get (key); serverConfigValueChanged (key, value); // set preamp key = QString ("equalizer.preamp"); value = m_xconfig->value_get (key); serverConfigValueChanged (key, value); // Set band-sliders for (int i=0; i < 10; i++) { key = QString ("equalizer.legacy%1").arg(i); value = m_xconfig->value_get (key); serverConfigValueChanged (key, value); } } void EqualizerWidget::serverConfigValueChanged (QString key, QString value) { // FIXME: also test on use_legacy if (key.startsWith ("equalizer.enabled")) { if (value != "0") { m_enable->setChecked (true); } else { m_enable->setChecked (false); } } if (key == "equalizer.preamp") { // FIXME: value can be of type float m_preamp->setValue (value.toInt ()); } if (key.startsWith ("equalizer.legacy")) { int i = key.right (1).toInt (); // FIXME: value can be float m_bands[i]->setValue (value.toInt ()); } } void EqualizerWidget::setEqualizerEnabled (bool enabled) { if (enabled && haveEqualizerEffect()) { m_xconfig->value_set ("equalizer.enabled", "1"); m_xconfig->value_set ("equalizer.use_legacy", "1"); } else { m_enable->setChecked (false); // uncheck the button again if equalizer // effect is not enabled m_xconfig->value_set ("equalizer.enabled", "0"); } } void EqualizerWidget::updateServerPreamp (int value) { m_xconfig->value_set ("equalizer.preamp", QString::number (value)); } void EqualizerWidget::updateServerBands (int value, int id) { QString key = QString ("equalizer.legacy%1").arg (id); m_xconfig->value_set (key, QString::number (value)); } promoe-0.1.1/src/equalizer/equalizerwidget.h000066400000000000000000000034071134030477200211650ustar00rootroot00000000000000/** * This file is a part of Promoe, an XMMS2 Client. * * Copyright (C) 2005-2008 XMMS2 Team * * 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; version 2 of the License. * * This program is distributed in the hope that 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. */ #ifndef __EQUALIZERWIDGET_H__ #define __EQUALIZERWIDGET_H__ #include class QString; class QVariant; class QPixmap; class QPaintEvent; #include "pixmapslider.h" class XConfig; class Skin; class PixmapButton; //#include class EqualizerSlider : public PixmapSlider { Q_OBJECT public: EqualizerSlider (QWidget*, int); signals: void numberedSliderMoved (int value, int id); protected slots: void on_self_slider_moved (int value); private: int m_id; }; class EqualizerWidget : public QWidget { Q_OBJECT public: EqualizerWidget(QWidget *parent); ~EqualizerWidget(); void paintEvent (QPaintEvent *event); public slots: void setPixmaps(Skin *skin); protected slots: void loadServerConfig (); void serverConfigValueChanged (QString key, QString value); void setEqualizerEnabled (bool enabled); void updateServerPreamp (int value); void updateServerBands (int value, int id); private: bool haveEqualizerEffect(); XConfig *m_xconfig; QPixmap m_pixmap; QPixmap m_graph; PixmapButton *m_closebtn; PixmapButton *m_shadebtn; PixmapButton *m_enable; PixmapButton *m_auto; PixmapButton *m_preset; PixmapSlider *m_preamp; EqualizerSlider *m_bands[10]; }; #endif promoe-0.1.1/src/equalizer/equalizerwindow.cpp000066400000000000000000000021461134030477200215430ustar00rootroot00000000000000/** * This file is a part of Promoe, an XMMS2 Client. * * Copyright (C) 2005-2008 XMMS2 Team * * 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; version 2 of the License. * * This program is distributed in the hope that 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. */ #include "equalizerwindow.h" #include "QWidget" #include #include "mainwindow.h" #include "equalizerwidget.h" EqualizerWindow::EqualizerWindow (QWidget *parent) : BaseWindow (parent) { setObjectName ("equalizer"); m_mw = dynamic_cast(parent); setWindowFlags (Qt::Dialog | Qt::FramelessWindowHint); setAttribute (Qt::WA_DeleteOnClose); m_equalizer = new EqualizerWidget (this); m_equalizer->show(); setCentralWidget (m_equalizer); setFixedSize (275, 116); } void EqualizerWindow::setEnabled (void) { qDebug ("test"); } promoe-0.1.1/src/equalizer/equalizerwindow.h000066400000000000000000000017141134030477200212100ustar00rootroot00000000000000/** * This file is a part of Promoe, an XMMS2 Client. * * Copyright (C) 2005-2008 XMMS2 Team * * 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; version 2 of the License. * * This program is distributed in the hope that 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. */ #ifndef __EQUALIZERWINDOW_H__ #define __EQUALIZERWINDOW_H__ #include "basewindow.h" class QWidget; class MainWindow; class EqualizerWidget; class EqualizerWindow : public BaseWindow { Q_OBJECT public: EqualizerWindow(QWidget *parent); ~EqualizerWindow() {} public slots: void setEnabled (void); private: MainWindow *m_mw; EqualizerWidget *m_equalizer; }; #endif // __EQUALIZERWINDOW_H__ promoe-0.1.1/src/mainwindow/000077500000000000000000000000001134030477200157565ustar00rootroot00000000000000promoe-0.1.1/src/mainwindow/clutterbar.cpp000066400000000000000000000037031134030477200206340ustar00rootroot00000000000000/** * This file is a part of Promoe, an XMMS2 Client. * * Copyright (C) 2005-2008 XMMS2 Team * * 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; version 2 of the License. * * This program is distributed in the hope that 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. */ #include "clutterbar.h" #include "Skin.h" #include #include ClutterBar::ClutterBar (QWidget *parent) : QWidget (parent) { Skin *skin = Skin::getInstance(); connect (skin, SIGNAL (skinChanged (Skin *)), this, SLOT (setPixmaps(Skin *))); } ClutterBar::~ClutterBar () { } void ClutterBar::setPixmaps(Skin *skin) { m_clutter_on = skin->getItem(Skin::CLUTTER_ON); m_clutter_off = skin->getItem(Skin::CLUTTER_OFF); m_clutter_o = skin->getItem(Skin::CLUTTER_O); m_clutter_a = skin->getItem(Skin::CLUTTER_A); m_clutter_i = skin->getItem(Skin::CLUTTER_I); m_clutter_d = skin->getItem(Skin::CLUTTER_D); m_clutter_v = skin->getItem(Skin::CLUTTER_V); m_pixmap = m_clutter_on; setFixedSize (m_clutter_on.size ()); update(); } void ClutterBar::mousePressEvent (QMouseEvent *event) { int y = event->pos().y(); if (y > 2 && y < 11) { m_pixmap = m_clutter_o; } else if (y > 10 && y < 19) { m_pixmap = m_clutter_a; } else if (y > 18 && y < 27) { m_pixmap = m_clutter_i; } else if (y > 26 && y < 35) { m_pixmap = m_clutter_d; } else if (y > 34 && y < 43) { m_pixmap = m_clutter_v; } update(); } void ClutterBar::mouseReleaseEvent (QMouseEvent *event) { m_pixmap = m_clutter_on; update(); } void ClutterBar::paintEvent (QPaintEvent *event) { if (m_pixmap.isNull ()) { return; } QPainter p (this); p.drawPixmap (rect (), m_pixmap, m_pixmap.rect ()); } promoe-0.1.1/src/mainwindow/clutterbar.h000066400000000000000000000022611134030477200202770ustar00rootroot00000000000000/** * This file is a part of Promoe, an XMMS2 Client. * * Copyright (C) 2005-2008 XMMS2 Team * * 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; version 2 of the License. * * This program is distributed in the hope that 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. */ #ifndef __CLUTTERBAR_H__ #define __CLUTTERBAR_H__ #include "QWidget" class QMouseEvent; class QPaintEvent; class Skin; class ClutterBar : public QWidget { Q_OBJECT public: ClutterBar (QWidget *parent); ~ClutterBar (); public slots: void setPixmaps(Skin *skin); protected: void paintEvent (QPaintEvent *event); void mousePressEvent (QMouseEvent *event); void mouseReleaseEvent (QMouseEvent *event); QPixmap m_clutter_off; QPixmap m_clutter_on; QPixmap m_clutter_o; QPixmap m_clutter_a; QPixmap m_clutter_i; QPixmap m_clutter_d; QPixmap m_clutter_v; bool enabled; QPixmap m_pixmap; }; #endif promoe-0.1.1/src/mainwindow/maindisplay.cpp000066400000000000000000000257411134030477200210050ustar00rootroot00000000000000/** * This file is a part of Promoe, an XMMS2 Client. * * Copyright (C) 2005-2008 XMMS2 Team * * 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; version 2 of the License. * * This program is distributed in the hope that 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. */ #include "xclient.h" #include "xclientcache.h" #include "xplayback.h" #include "xconfig.h" #include "application.h" #include "maindisplay.h" #include "mainwindow.h" #include "pixmapbutton.h" #include "pixmapslider.h" #include "titlebar.h" #include "textscroller.h" #include "timedisplay.h" #include "Skin.h" #include "pixmapnumberdisplay.h" #include "stereomono.h" #include "posbar.h" #include "playstatus.h" #include "playlistwindow.h" #include "equalizerwindow.h" #include "clutterbar.h" #include #include #include MainDisplay::MainDisplay (MainWindow *parent) : SkinDisplay(parent) { const XClient *client = App->client (); m_xconfig = client->xconfig (); Skin* skin = Skin::getInstance (); connect (skin, SIGNAL (skinChanged (Skin *)), this, SLOT (setPixmaps(Skin *))); m_tbar = new TitleBar(this, false); m_tbar->move(0, 0); m_tbar->resize(275, 14); m_mw = parent; SetupPushButtons (client); SetupToggleButtons (); m_text = new TextScroller (this, 154, 12, "main"); m_text->move (111, 24); m_time = new TimeDisplay(this); m_time->move (36, 26); connect (m_time, SIGNAL(clicked()), App, SLOT(toggleTime())); connect (this, SIGNAL (displayTime (int)), m_time, SLOT (setTime (int))); m_kbps = new PixmapNumberDisplay (this); m_kbps->resize (15, 6); m_kbps->move (111, 43); m_kbps->setDigits (3); m_kbps->setValue (0); m_khz = new PixmapNumberDisplay (this); m_khz->resize (10, 6); m_khz->move (156, 43); m_khz->setDigits (2); m_khz->setValue (0); m_stereo = new StereoMono (this); m_stereo->move (212, 41); m_stereo->setStereoMono (0, 0); m_clutterbar = new ClutterBar (this); m_clutterbar->move (10, 22); m_posbar = new PosBar (this, Skin::POSBAR, Skin::POSBAR_BTN_0, Skin::POSBAR_BTN_1); m_posbar->move (skin->getPos (Skin::SLIDER_POSBAR_BGS)); connect (m_posbar, SIGNAL (sliderMoved (int)), client->xplayback (), SLOT (seekMs (int))); m_playstatus = new PlayStatus (this); m_playstatus->move (24, 28); m_vslider = new PixmapSlider(this); m_vslider->setMinimum (0); m_vslider->setMaximum (100); m_vslider->setSliderOffset (QPoint (0, 1)); m_vslider->resize (skin->getSize (Skin::SLIDER_VOLUMEBAR_BGS)); m_vslider->move (skin->getPos (Skin::SLIDER_VOLUMEBAR_BGS)); connect (client->xplayback (), SIGNAL (volumeChanged (int)), m_vslider, SLOT (setValue (int))); connect (m_vslider, SIGNAL (sliderMoved (int)), client->xplayback (), SLOT (setVolume (int))); m_bslider = new PixmapSlider (this); m_bslider->setMinimum (-MAX_BALANCE); m_bslider->setMaximum (MAX_BALANCE); m_bslider->setSliderOffset (QPoint (0, 1)); m_bslider->resize (skin->getSize (Skin::SLIDER_BALANCEBAR_BGS)); m_bslider->move (skin->getPos (Skin::SLIDER_BALANCEBAR_BGS)); connect (client->xplayback (), SIGNAL (balanceChanged (int)), m_bslider, SLOT (setValue (int))); connect (m_bslider, SIGNAL (sliderMoved (int)), client->xplayback (), SLOT (setBalance (int))); connect (client->cache (), SIGNAL (activeEntryChanged (QVariantHash)), this, SLOT (setMediainfo (const QVariantHash))); connect (client->xplayback (), SIGNAL(playbackStatusChanged(Xmms::Playback::Status)), this, SLOT(setStatus(Xmms::Playback::Status))); connect (client->cache () , SIGNAL (playtime (uint32_t)), this, SLOT (setPlaytime (uint32_t))); setupServerConfig (); } void MainDisplay::paintEvent (QPaintEvent *event) { QPainter p(this); p.eraseRect (rect ()); } void MainDisplay::setPixmaps (Skin *skin) { QPalette palette = QPalette(); QBrush brush = QBrush(skin->getItem(Skin::MAIN_WINDOW)); palette.setBrush(QPalette::Background, brush); setPalette(palette); setFixedSize(QSize(275, 116)); /* update buttons*/ m_prev->setIcon (skin->getIcon (Skin::BUTTON_MW_PREV)); m_play->setIcon (skin->getIcon (Skin::BUTTON_MW_PLAY)); m_pause->setIcon (skin->getIcon (Skin::BUTTON_MW_PAUSE)); m_stop->setIcon (skin->getIcon (Skin::BUTTON_MW_STOP)); m_next->setIcon (skin->getIcon (Skin::BUTTON_MW_NEXT)); m_eject->setIcon (skin->getIcon (Skin::BUTTON_MW_EJECT)); m_eq->setIcon (skin->getIcon (Skin::BUTTON_MW_EQ)); m_pls->setIcon (skin->getIcon (Skin::BUTTON_MW_PLS)); m_shuffle->setIcon (skin->getIcon (Skin::BUTTON_MW_SHUFFLE)); m_repeat->setIcon (skin->getIcon (Skin::BUTTON_MW_REPEAT)); /* update Sliders */ m_vslider->setBackground (skin->getBackgrounds (Skin::SLIDER_VOLUMEBAR_BGS)); m_vslider->setSliders (skin->getItem (Skin::VOLBAR_BTN_0), skin->getItem (Skin::VOLBAR_BTN_1)); m_bslider->setBackground (skin->getBackgrounds (Skin::SLIDER_BALANCEBAR_BGS)); m_bslider->setSliders (skin->getItem (Skin::BALANCE_BTN_0), skin->getItem (Skin::BALANCE_BTN_1)); /* update some other widgets */ m_time->setPixmaps (skin->getNumbers ()); m_kbps->setPixmaps (skin->getSmallNumbers ()); m_khz->setPixmaps (skin->getSmallNumbers ()); } void MainDisplay::setStatus (Xmms::Playback::Status status) { m_playstatus->setStatus (status); if (status == Xmms::Playback::STOPPED) { //m_time->setTime(0); m_time->hide (); m_kbps->hide (); m_khz->hide (); m_posbar->setValue (0); m_posbar->hide (); m_stereo->setStereoMono (false, false); //FIXME: workaround, fix by hiding timedisplay in playlist emit displayTime (0); } else if (status == Xmms::Playback::PLAYING) { m_time->show (); m_kbps->show (); m_khz->show (); // m_posbar will be shown when fetching metadata // m_stereo is set there too } } void MainDisplay::setPlaytime (uint32_t time) { int32_t showtime; if (App->isTimemodeReverse()) { uint maxtime = m_posbar->maximum (); showtime = (time/1000 - maxtime/1000); } else { showtime = time/1000; } emit displayTime (showtime); // update slider m_posbar->setValue (time); } void MainDisplay::setMediainfo (const QVariantHash info) { QString n; if (info.contains ("title")) { if (info.contains ("artist")) { n = info["artist"].toString () + " - "; } if (info.contains ("album")) { n += info["album"].toString () + " - "; } n += info["title"].toString (); } else if (info.contains ("channel")) { n = info["channel"].toString () + " - " + info["title"].toString (); } else { n = info["url"].toString (); n = n.section ("/", -1); } m_text->setText (n); m_kbps->setValue (info.value ("bitrate", 0).toInt ()/1000); m_khz->setValue (info.value ("samplerate", 0).toInt ()/1000); if (info.contains ("channels") && info["channels"].toInt () > 1) { m_stereo->setStereoMono (1, 0); } else { m_stereo->setStereoMono (0, 1); } if (info.contains ("duration")) { m_posbar->setMaximum (info["duration"].toInt ()); m_posbar->show (); } else { m_posbar->setMaximum (0); m_posbar->hide (); } } void MainDisplay::SetupToggleButtons (void) { QSettings s; Skin *skin = Skin::getInstance (); m_eq = new PixmapButton (this); m_eq->setCheckable (true); m_eq->resize (skin->getSize (Skin::BUTTON_MW_EQ)); m_eq->move (skin->getPos (Skin::BUTTON_MW_EQ)); m_eq->setChecked (m_mw->getEQ ()->isVisible ()); connect (m_eq, SIGNAL (clicked (bool)), m_mw->getEQ (), SLOT (setVisible (bool))); connect (m_mw->getEQ (), SIGNAL (visibilityChanged (bool)), m_eq, SLOT (setChecked (bool))); m_pls = new PixmapButton (this); m_pls->setCheckable (true); m_pls->resize (skin->getSize (Skin::BUTTON_MW_PLS)); m_pls->move (skin->getPos (Skin::BUTTON_MW_PLS)); m_pls->setChecked (m_mw->getPL ()->isVisible ()); connect (m_pls, SIGNAL (clicked (bool)), m_mw->getPL (), SLOT (setVisible (bool))); connect (m_mw->getPL (), SIGNAL (visibilityChanged (bool)), m_pls, SLOT (setChecked (bool))); // FIXME: Shuffle not yet implemented // Shuffled play should be done serverside through a service client m_shuffle = new PixmapButton (this); m_shuffle->setCheckable (true); m_shuffle->resize (skin->getSize (Skin::BUTTON_MW_SHUFFLE)); m_shuffle->move (skin->getPos (Skin::BUTTON_MW_SHUFFLE)); m_shuffle->setEnabled(false); m_repeat = new PixmapButton (this); m_repeat->setCheckable (true); m_repeat->resize (skin->getSize (Skin::BUTTON_MW_REPEAT)); m_repeat->move (skin->getPos (Skin::BUTTON_MW_REPEAT)); connect (m_repeat, SIGNAL (clicked (bool)), this, SLOT (setRepeatAllEnabled (bool))); } void MainDisplay::SetupPushButtons (const XClient* client) { Skin *skin = Skin::getInstance (); /* Normal buttons */ m_prev = new PixmapButton (this); m_prev->resize (skin->getSize (Skin::BUTTON_MW_PREV)); m_prev->move (skin->getPos (Skin::BUTTON_MW_PREV)); connect (m_prev, SIGNAL(clicked()), client->xplayback (), SLOT(prev ())); m_play = new PixmapButton (this); m_play->resize (skin->getSize (Skin::BUTTON_MW_PLAY)); m_play->move (skin->getPos (Skin::BUTTON_MW_PLAY)); connect (m_play, SIGNAL(clicked()), client->xplayback (), SLOT(play ())); m_pause = new PixmapButton (this); m_pause->resize (skin->getSize (Skin::BUTTON_MW_PAUSE)); m_pause->move (skin->getPos (Skin::BUTTON_MW_PAUSE)); connect (m_pause, SIGNAL(clicked()), client->xplayback (), SLOT(toggle_pause ())); m_stop = new PixmapButton (this); m_stop->resize (skin->getSize (Skin::BUTTON_MW_STOP)); m_stop->move (skin->getPos (Skin::BUTTON_MW_STOP)); connect (m_stop, SIGNAL(clicked()), client->xplayback (), SLOT(stop ())); m_next = new PixmapButton (this); m_next->resize (skin->getSize (Skin::BUTTON_MW_NEXT)); m_next->move (skin->getPos (Skin::BUTTON_MW_NEXT)); connect (m_next, SIGNAL(clicked()), client->xplayback (), SLOT(next ())); m_eject = new PixmapButton (this); m_eject->resize (skin->getSize (Skin::BUTTON_MW_EJECT)); m_eject->move (skin->getPos (Skin::BUTTON_MW_EJECT)); connect (m_eject, SIGNAL(clicked()), this, SLOT(fileOpen())); } /* * Methods for interaction with the server configuration */ void MainDisplay::setupServerConfig () { connect (m_xconfig, SIGNAL (configChanged (QString, QString)), this, SLOT (serverConfigChanged (QString, QString))); if (m_xconfig->isReady ()) { QString key; QString value; // set repeat button key = QString ("playlist.repeat_all"); value = m_xconfig->value_get (key); serverConfigChanged (key, value); } } void MainDisplay::serverConfigChanged (QString key, QString value) { if (key == "playlist.repeat_all") { if (value != "0") { m_repeat->setChecked (true); } else { m_repeat->setChecked (false); } } } void MainDisplay::setRepeatAllEnabled (bool enabled) { if (enabled) { m_xconfig->value_set ("playlist.repeat_all", "1"); } else { m_xconfig->value_set ("playlist.repeat_all", "0"); } } promoe-0.1.1/src/mainwindow/maindisplay.h000066400000000000000000000046551134030477200204530ustar00rootroot00000000000000/** * This file is a part of Promoe, an XMMS2 Client. * * Copyright (C) 2005-2008 XMMS2 Team * * 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; version 2 of the License. * * This program is distributed in the hope that 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. */ #ifndef __MAINDISPLAY_H__ #define __MAINDISPLAY_H__ class MainDisplay; #include #include #include #include #include #include #include #include #include #include "skindisplay.h" typedef QHash QVariantHash; class QPaintEvent; class PixmapButton; class PixmapNumberDisplay; class PixmapSlider; class TextScroller; class TimeDisplay; class StereoMono; class PosBar; class Slider; class PlayStatus; class MainWindow; class ClutterBar; class XConfig; class XClient; class MainDisplay : public SkinDisplay { Q_OBJECT public: MainDisplay (MainWindow *parent); ~MainDisplay () {} TextScroller *m_text; TimeDisplay *m_time; StereoMono *m_stereo; PosBar *m_posbar; PixmapSlider *m_vslider; PixmapSlider *m_bslider; PlayStatus *m_playstatus; MainWindow *getMW(void) { return m_mw; } signals: //used to set time in timedisplays void displayTime (int time); public slots: void paintEvent (QPaintEvent *event); void setPixmaps(Skin *skin); void setStatus (Xmms::Playback::Status status); void setPlaytime (uint32_t time); // void setMediainfo (const Xmms::PropDict &); void setMediainfo (const QVariantHash); protected slots: void serverConfigChanged (QString key, QString value); void setRepeatAllEnabled (bool enabled); protected: void SetupPushButtons (const XClient *); void SetupToggleButtons (void); PixmapButton *m_prev; PixmapButton *m_play; PixmapButton *m_pause; PixmapButton *m_stop; PixmapButton *m_next; PixmapButton *m_eject; PixmapButton *m_pls; PixmapButton *m_eq; PixmapButton *m_shuffle; PixmapButton *m_repeat; PixmapNumberDisplay *m_kbps; PixmapNumberDisplay *m_khz; MainWindow *m_mw; ClutterBar *m_clutterbar; private: void setupServerConfig (); XConfig *m_xconfig; }; #endif promoe-0.1.1/src/mainwindow/mainwindow.cpp000066400000000000000000000115321134030477200206400ustar00rootroot00000000000000/** * This file is a part of Promoe, an XMMS2 Client. * * Copyright (C) 2005-2008 XMMS2 Team * * 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; version 2 of the License. * * This program is distributed in the hope that 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. */ // TODO: Try to get includes right without this #include #include "mainwindow.h" #ifdef HAVE_SERVERBROWSER #include "ServerBrowser.h" #endif #include "application.h" #include "playlistwindow.h" #include "maindisplay.h" #include "shadeddisplay.h" #include "equalizerwindow.h" #include "Skin.h" #include #include #include #include #include MainWindow::MainWindow (QWidget *parent) : BaseWindow (parent) { QSettings s; setWindowTitle (App->applicationName ()); setWindowFlags(Qt::FramelessWindowHint); setMaximumSize (275, 116); #ifndef _WIN32 setWindowIcon (QIcon (":icon.png")); #endif if (!s.contains ("mainwindow/shaded")) setShaded (true); else setShaded (!isShaded ()); if (!s.contains ("mainwindow/pos")) s.setValue ("mainwindow/pos", QPoint (100, 100)); move (s.value("mainwindow/pos").toPoint ()); /* * initialize EqualizerWindow */ m_equalizer = new EqualizerWindow (this); if (!s.contains ("equalizer/pos")) { s.setValue ("equalizer/pos", QPoint (pos ().x (), pos ().y ()+size ().height ())); } m_equalizer->move (s.value ("equalizer/pos").toPoint ()); /* * initialtize PlaylistWindow */ m_playlistwin = new PlaylistWindow (this); if (!s.contains ("playlist/pos")) { s.setValue ("playlist/pos", QPoint (pos ().x (), pos ().y ()+size ().height ())); } m_playlistwin->move (s.value ("playlist/pos").toPoint ()); // FIXME: this should be done in PlaylistWindow. // But promoe segfaults if done so /* * The MainDisplay is the mainwindow non-shaded mode */ m_display = new MainDisplay (this); setCentralWidget (m_display); m_display->show (); //connect for timedisplay in playlistwindow connect (m_display, SIGNAL (displayTime (int)), m_playlistwin, SIGNAL (setDisplayTime (int))); /* * MainDisplay's shaded mode */ m_shaded = new ShadedDisplay (this); m_shaded->hide (); switchDisplay (); attachWidgets (); } MainWindow::~MainWindow () { delete Skin::getInstance (); } void MainWindow::switchDisplay () { QSettings s; if (isShaded ()) { m_shaded->hide (); m_display->show (); resize (275, 116); setShaded (false); } else { m_display->hide (); m_shaded->show (); resize (275, 14); setShaded (true); } update (); } void MainWindow::raisePL (void) { m_playlistwin->raise (); } void MainWindow::mouseMoveEvent (QMouseEvent *event) { if ((event->buttons () & Qt::LeftButton) && !m_diff.isNull ()) { // QWidgetList attached; // QWidget *w; // foreach (w, m_attachedWidgets.keys ()) { // attached.append (w); // } move (snapWindow (event->globalPos() - m_diff, m_attachedWidgets)); } } void MainWindow::moveEvent (QMoveEvent *event) { QSettings s; s.setValue ("mainwindow/pos", pos ()); // move all connected windows to their new position // at the moment connected windows can be m_playlistwin and m_equalizer if (!m_attachedWidgets.isEmpty ()) { QMap::const_iterator i = m_attachedWidgets.constBegin (); while (i != m_attachedWidgets.constEnd ()) { i.key()->move (pos () + i.value ()); ++i; } } } void MainWindow::attachWidgets () { m_attachedWidgets.clear (); QList widgets; QWidget *w; foreach (w, qApp->topLevelWidgets ()) { if (w == this) { continue; } if ((w->inherits ("BaseWindow")) && (w->isVisible ())) { widgets.append (qobject_cast (w)); } } // attach widgets that directly touch MainWindow BaseWindow *b; foreach (b, widgets) { if (b->touches (this)) { m_attachedWidgets[b] = b->pos ()- pos (); } } // now attach the windows, that indirectly touch mainwindow through an // attached window // widgets isn't modified, even if it might be more efficent, because // that might produce some ugly, hard to trace bugs (modifying the // base of an iterater while it is in use) if (!m_attachedWidgets.isEmpty ()) { bool found = false; BaseWindow *att; do { found = false; foreach (att, m_attachedWidgets.keys ()) { foreach (b, widgets) { if (m_attachedWidgets.contains (b)) { continue; } if (att->touches (b)) { m_attachedWidgets[b] = b->pos ()- pos (); found = true; } } } } while (found); } } promoe-0.1.1/src/mainwindow/mainwindow.h000066400000000000000000000031351134030477200203050ustar00rootroot00000000000000/** * This file is a part of Promoe, an XMMS2 Client. * * Copyright (C) 2005-2008 XMMS2 Team * * 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; version 2 of the License. * * This program is distributed in the hope that 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. */ #ifndef __MAINWINDOW_H__ #define __MAINWINDOW_H__ #include "basewindow.h" #include class QWidget; class QMouseEvent; class MainDisplay; class ShadedDisplay; class PlaylistWindow; class EqualizerWindow; class MainWindow : public BaseWindow { Q_OBJECT public: MainWindow (QWidget *parent); ~MainWindow (void); MainDisplay *getMD () { return m_display; } ShadedDisplay *getSD () { return m_shaded; } PlaylistWindow *getPL () { return m_playlistwin; } EqualizerWindow *getEQ () { return m_equalizer; } void raisePL (void); void moveEvent (QMoveEvent *event); void attachWidgets (); public slots: void switchDisplay (); void mouseMoveEvent (QMouseEvent *event); private: bool isShaded (void) { QSettings s; return s.value("MainWindow/shaded").toBool(); } void setShaded (bool b) { QSettings s; return s.setValue("MainWindow/shaded", b); } MainDisplay *m_display; ShadedDisplay *m_shaded; EqualizerWindow *m_equalizer; PlaylistWindow *m_playlistwin; QMap m_attachedWidgets; }; #endif promoe-0.1.1/src/mainwindow/mainwindow.pri000066400000000000000000000007311134030477200206470ustar00rootroot00000000000000HEADERS += clutterbar.h \ mainwindow.h \ maindisplay.h \ playstatus.h \ posbar.h \ shadeddisplay.h \ skindisplay.h \ stereomono.h \ textscroller.h \ titlebar.h SOURCES += clutterbar.cpp \ mainwindow.cpp \ maindisplay.cpp \ playstatus.cpp \ posbar.cpp \ shadeddisplay.cpp \ skindisplay.cpp \ stereomono.cpp \ textscroller.cpp \ titlebar.cpp INCLUDEPATH += $$PWD DEPENDPATH += $$PWD promoe-0.1.1/src/mainwindow/playstatus.cpp000066400000000000000000000032771134030477200207040ustar00rootroot00000000000000/** * This file is a part of Promoe, an XMMS2 Client. * * Copyright (C) 2005-2008 XMMS2 Team * * 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; version 2 of the License. * * This program is distributed in the hope that 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. */ #include "playstatus.h" #include "Skin.h" #include PlayStatus::PlayStatus (QWidget *parent) : QWidget (parent) { Skin* skin = Skin::getInstance (); connect (skin, SIGNAL (skinChanged (Skin *)), this, SLOT (setPixmaps (Skin *))); setFixedSize(11, 9); m_status = Xmms::Playback::STOPPED; } void PlayStatus::setPixmaps (Skin *skin) { m_pixmap_play = skin->getItem (Skin::PIC_PLAY); m_pixmap_pause = skin->getItem (Skin::PIC_PAUSE); m_pixmap_stop = skin->getItem (Skin::PIC_STOP); setFixedSize(11, m_pixmap_play.height ()); update (); } void PlayStatus::setStatus (Xmms::Playback::Status status) { if (m_status == status) return; m_status = status; update (); } void PlayStatus::paintEvent (QPaintEvent *event) { QPixmap pixmap; using Xmms::Playback; switch (m_status) { case Playback::STOPPED: pixmap = m_pixmap_stop; break; case Playback::PLAYING: pixmap = m_pixmap_play; break; case Playback::PAUSED: pixmap = m_pixmap_pause; break; default: qWarning ("Unhandled playback status in PlayStatus"); break; } QPainter p; p.begin (this); p.drawPixmap (rect (), pixmap); p.end (); } promoe-0.1.1/src/mainwindow/playstatus.h000066400000000000000000000021221134030477200203350ustar00rootroot00000000000000/** * This file is a part of Promoe, an XMMS2 Client. * * Copyright (C) 2005-2008 XMMS2 Team * * 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; version 2 of the License. * * This program is distributed in the hope that 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. */ #ifndef __PLAYSTATUS_H__ #define __PLAYSTATUS_H__ #include #include class QPaintEvent; class Skin; class PlayStatus : public QWidget { Q_OBJECT public: PlayStatus (QWidget *parent); ~PlayStatus () { } public slots: void setPixmaps (Skin *skin); void setStatus (Xmms::Playback::Status status); protected slots: void paintEvent (QPaintEvent *event); private: Xmms::Playback::Status m_status; QPixmap m_pixmap_stop; QPixmap m_pixmap_play; QPixmap m_pixmap_pause; }; #endif promoe-0.1.1/src/mainwindow/posbar.cpp000066400000000000000000000025741134030477200177600ustar00rootroot00000000000000/** * This file is a part of Promoe, an XMMS2 Client. * * Copyright (C) 2005-2008 XMMS2 Team * * 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; version 2 of the License. * * This program is distributed in the hope that 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. */ #include "posbar.h" #include "Skin.h" #include PosBar::PosBar (QWidget *parent, uint bg, uint bnormal, uint bpressed) : PixmapSlider (parent) { Skin *skin = Skin::getInstance (); m_slider_normal = bnormal; m_slider_pressed = bpressed; m_bg = bg; connect (skin, SIGNAL (skinChanged (Skin *)), this, SLOT (setPixmaps (Skin *))); setFixedSize (248, 10); setMinimum (0); setMaximum (0); hide (); } void PosBar::setPixmaps (Skin *skin) { QPixmap pixmap = skin->getItem (m_bg); setBackground (pixmap); setFixedSize (248, pixmap.height ()); if ( !skin->getItem(m_slider_normal).isNull() && !skin->getItem(m_slider_pressed).isNull()) { setSliders (skin->getItem(m_slider_normal), skin->getItem(m_slider_pressed)); } else { setSliders (QPixmap (), QPixmap ()); } update (); } promoe-0.1.1/src/mainwindow/posbar.h000066400000000000000000000016321134030477200174170ustar00rootroot00000000000000/** * This file is a part of Promoe, an XMMS2 Client. * * Copyright (C) 2005-2008 XMMS2 Team * * 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; version 2 of the License. * * This program is distributed in the hope that 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. */ #ifndef __SLIDER_H__ #define __SLIDER_H__ #include "pixmapslider.h" class Skin; class PosBar : public PixmapSlider { Q_OBJECT public: PosBar (QWidget *parent, uint bg, uint bnormal, uint bpressed); ~PosBar () { } public slots: void setPixmaps (Skin *skin); private: uint m_slider_normal; uint m_slider_pressed; uint m_bg; }; #endif promoe-0.1.1/src/mainwindow/shadeddisplay.cpp000066400000000000000000000071031134030477200213010ustar00rootroot00000000000000/** * This file is a part of Promoe, an XMMS2 Client. * * Copyright (C) 2005-2008 XMMS2 Team * * 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; version 2 of the License. * * This program is distributed in the hope that 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. */ #include "xclient.h" #include "xclientcache.h" #include "xplayback.h" #include "application.h" #include "shadeddisplay.h" #include "titlebar.h" #include "pixmapbutton.h" #include "timedisplay.h" #include "textscroller.h" #include "Skin.h" #include "mainwindow.h" ShadedDisplay::ShadedDisplay (QWidget *parent) : SkinDisplay (parent) { Skin *skin = Skin::getInstance (); connect (skin, SIGNAL (skinChanged (Skin *)), this, SLOT (setPixmaps(Skin *))); const XClient *client = App->client (); setFixedSize (275, 14); m_mw = qobject_cast(parent); m_tbar = new TitleBar(this, true); m_tbar->move (0, 0); m_time = new SmallTimeDisplay (this); m_time->move (130, 4); connect (m_time, SIGNAL(clicked()), App, SLOT(toggleTime())); m_title = new TextScroller (this, 39, 7, "shaded"); m_title->move (79, 4); m_prev = new PixmapButton (this); m_prev->move(169, 4); m_prev->resize (8, 7); connect (m_prev, SIGNAL(clicked()), client->xplayback (), SLOT(prev ())); m_play = new PixmapButton (this); m_play->move(177, 4); m_play->resize (10, 7); connect (m_play, SIGNAL(clicked()), client->xplayback (), SLOT(play ())); m_pause = new PixmapButton (this); m_pause->move(187, 4); m_pause->resize (10, 7); connect (m_pause, SIGNAL(clicked()), client->xplayback (), SLOT(toggle_pause ())); m_stop = new PixmapButton (this); m_stop->move(197, 4); m_stop->resize (9, 7); connect (m_stop, SIGNAL(clicked()), client->xplayback (), SLOT(stop ())); m_next = new PixmapButton (this); m_next->move(206, 4); m_next->resize (8, 7); connect (m_next, SIGNAL(clicked()), client->xplayback (), SLOT(next ())); m_eject = new PixmapButton (this); m_eject->move(216, 4); m_eject->resize (9, 7); connect (m_eject, SIGNAL(clicked()), this, SLOT(fileOpen())); connect (client->xplayback (), SIGNAL(playbackStatusChanged(Xmms::Playback::Status)), this, SLOT(setStatus(Xmms::Playback::Status))); connect (client->cache (), SIGNAL (playtime (uint32_t)), this, SLOT ( setPlaytime(uint32_t))); connect (client->cache (), SIGNAL (activeEntryChanged (QVariantHash)), this, SLOT (setMediainfo (QVariantHash))); } void ShadedDisplay::setPixmaps (Skin *skin) { m_time->setPixmaps (skin->getSmallNumbers ()); } void ShadedDisplay::setMediainfo (QVariantHash info) { QString n; if (info.contains ("artist") && info.contains ("album") && info.contains ("title")) { n = info["artist"].toString () + " - " + info["album"].toString () + " - " + info["title"].toString (); } else { n = info["url"].toString (); } if (info.contains ("duration")) { m_duration = info["duration"].toInt (); } else { m_duration = 0; } m_title->setText (n); } void ShadedDisplay::setStatus (Xmms::Playback::Status status) { if (status == Xmms::Playback::STOPPED) { m_time->setTime (0); } } void ShadedDisplay::setPlaytime (uint32_t time) { int32_t showtime; if (App->isTimemodeReverse()) { showtime = (time/1000 - m_duration/1000); } else { showtime = time/1000; } m_time->setTime (showtime); } promoe-0.1.1/src/mainwindow/shadeddisplay.h000066400000000000000000000030041134030477200207420ustar00rootroot00000000000000/** * This file is a part of Promoe, an XMMS2 Client. * * Copyright (C) 2005-2008 XMMS2 Team * * 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; version 2 of the License. * * This program is distributed in the hope that 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. */ #ifndef __SHADEDDISPLAY_H__ #define __SHADEDDISPLAY_H__ class ShadedDisplay; #include #include "skindisplay.h" #include #include typedef QHash QVariantHash; class MainWindow; class Skin; class PixmapButton; class SmallTimeDisplay; class SmallNumberDisplay; class TextScroller; class ShadedDisplay : public SkinDisplay { Q_OBJECT public: ShadedDisplay (QWidget *parent); ~ShadedDisplay () { } SmallNumberDisplay *m_number; SmallNumberDisplay *m_number2; TextScroller *m_title; private: int32_t m_duration; SmallTimeDisplay *m_time; PixmapButton *m_prev; PixmapButton *m_play; PixmapButton *m_pause; PixmapButton *m_stop; PixmapButton *m_next; PixmapButton *m_eject; MainWindow *m_mw; public slots: void setStatus (Xmms::Playback::Status status); void setPlaytime (uint32_t time); void setMediainfo (QVariantHash info); void setPixmaps (Skin *skin); }; #endif promoe-0.1.1/src/mainwindow/skindisplay.cpp000066400000000000000000000025521134030477200210200ustar00rootroot00000000000000/** * This file is a part of Promoe, an XMMS2 Client. * * Copyright (C) 2005-2008 XMMS2 Team * * 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; version 2 of the License. * * This program is distributed in the hope that 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. */ #include "xclient.h" #include "xcollection.h" #include "application.h" #include "mainwindow.h" #include "skindisplay.h" #include "Skin.h" #include "titlebar.h" #include "FileDialog.h" SkinDisplay::SkinDisplay (QWidget *parent) : QWidget(parent) { } void SkinDisplay::enterEvent (QEvent *event) { dynamic_cast(m_tbar)->setActive(true); } void SkinDisplay::leaveEvent (QEvent *event) { dynamic_cast(m_tbar)->setActive(false); } void SkinDisplay::fileOpen (void) { FileDialog fd (this, "main_addfiles"); QStringList files; files = fd.getFiles (); const XClient *client = App->client (); // if (files.count() > 0) { // xmmsh.xcollection ()->playlistClear (); // } for (int i = 0; i < files.count(); i++) { client->xcollection ()->playlistAddUrl ("file://" + files.value(i)); } } promoe-0.1.1/src/mainwindow/skindisplay.h000066400000000000000000000016171134030477200204660ustar00rootroot00000000000000/** * This file is a part of Promoe, an XMMS2 Client. * * Copyright (C) 2005-2008 XMMS2 Team * * 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; version 2 of the License. * * This program is distributed in the hope that 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. */ #ifndef __SKINDISPLAY_H__ #define __SKINDISPLAY_H__ #include class QEvent; class Skin; class SkinDisplay : public QWidget { Q_OBJECT public: SkinDisplay (QWidget *parent); public slots: void fileOpen (void); protected: void enterEvent (QEvent *event); void leaveEvent (QEvent *event); QWidget *m_tbar; }; #endif promoe-0.1.1/src/mainwindow/stereomono.cpp000066400000000000000000000030451134030477200206560ustar00rootroot00000000000000/** * This file is a part of Promoe, an XMMS2 Client. * * Copyright (C) 2005-2008 XMMS2 Team * * 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; version 2 of the License. * * This program is distributed in the hope that 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. */ #include "stereomono.h" #include "Skin.h" #include StereoMono::StereoMono (QWidget *parent) : QWidget (parent), m_stereo(0), m_mono(0) { setFixedSize (56, 12); Skin *skin = Skin::getInstance(); connect (skin, SIGNAL (skinChanged (Skin *)), this, SLOT (setPixmaps (Skin *))); } void StereoMono::setPixmaps (Skin *skin) { m_pixmap_stereo_on = skin->getItem (Skin::STEREO_1); m_pixmap_stereo_off = skin->getItem (Skin::STEREO_0); m_pixmap_mono_on = skin->getItem (Skin::MONO_1); m_pixmap_mono_off = skin->getItem (Skin::MONO_0); update (); } void StereoMono::paintEvent (QPaintEvent *event) { QPainter p (this); p.drawPixmap (0, 0, m_mono ? m_pixmap_mono_on : m_pixmap_mono_off); p.drawPixmap (27, 0, m_stereo ? m_pixmap_stereo_on : m_pixmap_stereo_off); } void StereoMono::setStereoMono (bool stereo, bool mono) { // if nothing changes, just return if ((m_stereo == stereo) && (m_mono == mono)) return; m_stereo = stereo; m_mono = mono; update (); } promoe-0.1.1/src/mainwindow/stereomono.h000066400000000000000000000021041134030477200203160ustar00rootroot00000000000000/** * This file is a part of Promoe, an XMMS2 Client. * * Copyright (C) 2005-2008 XMMS2 Team * * 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; version 2 of the License. * * This program is distributed in the hope that 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. */ #ifndef __STEREOMONO_H__ #define __STEREOMONO_H__ #include class QPaintEvent; class Skin; class StereoMono : public QWidget { Q_OBJECT public: StereoMono (QWidget *parent); ~StereoMono () { } void setStereoMono (bool, bool); public slots: void setPixmaps (Skin *skin); protected slots: void paintEvent (QPaintEvent *event); private: bool m_stereo; bool m_mono; QPixmap m_pixmap_stereo_on; QPixmap m_pixmap_stereo_off; QPixmap m_pixmap_mono_on; QPixmap m_pixmap_mono_off; }; #endif promoe-0.1.1/src/mainwindow/textscroller.cpp000066400000000000000000000142471134030477200212240ustar00rootroot00000000000000/** * This file is a part of Promoe, an XMMS2 Client. * * Copyright (C) 2005-2008 XMMS2 Team * * 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; version 2 of the License. * * This program is distributed in the hope that 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. */ #include "skindisplay.h" #include "textscroller.h" #include "Skin.h" #include #include #include #include #include #include #include #include #include TextScroller::TextScroller (QWidget *parent, uint w, uint h, const QString &name) : QWidget (parent) { Skin *skin = Skin::getInstance (); connect (skin, SIGNAL (skinChanged (Skin *)), this, SLOT (setPixmaps(Skin *))); QSettings s; s.beginGroup ("display_" + name); if (!s.contains("scroll")) s.setValue("scroll", true); if (!s.contains("fontsize")) s.setValue("fontsize", 8); if (!s.contains("ttf")) s.setValue("ttf", true); m_name = name; m_x_off = 0; m_drag_off = 0; m_fontsize = s.value ("fontsize").toInt (); m_ttf = s.value ("ttf").toBool (); m_text = "Promoe " PROMOE_VERSION; m_scroll = s.value ("scroll").toBool (); m_dragtext = false; s.endGroup (); setFixedSize(w, h); m_timer = new QTimer (this); m_timer->setInterval (40); connect (m_timer, SIGNAL (timeout()), this, SLOT (addOffset ())); connect (App, SIGNAL (settingsChanged ()), this, SLOT (settingsChanged ())); } void TextScroller::settingsChanged (void) { QSettings s; s.beginGroup ("display_" + m_name); m_fontsize = s.value ("fontsize").toInt (); m_ttf = s.value ("ttf").toBool (); if (m_scroll != s.value ("scroll").toBool ()) { m_x_off = 0; } m_scroll = s.value ("scroll").toBool (); s.endGroup (); drawText (); update (); } void TextScroller::setPixmaps (Skin *skin) { QPalette pal = palette (); QBrush b = QBrush (skin->getItem (Skin::TEXTBG)); pal.setBrush (QPalette::Window, b); setPalette (pal); drawText (); update(); } void TextScroller::setText (QString text) { m_text = text; drawText (); } void TextScroller::addOffset () { if (m_x_off < m_pixmap.width()) { m_x_off ++; } else { m_x_off = 0; } update (); } void TextScroller::drawText () { if (m_ttf) { drawQtFont (m_text); } else { drawBitmapFont (m_text); } updateScrolling (); if (m_pixmap.width () <= width ()) m_dragtext = false; // take care that the text doesn't jump after resetting it's offset // if we were still dragging it on a song change if (m_dragtext) m_drag_off -= m_x_off; m_x_off = 0; update (); } void TextScroller::drawBitmapFont (QString text) { Skin *skin = Skin::getInstance (); int w = text.length() * 5; QString temp = text.toLower (); if (w > width ()) { temp += QString (" *** "); m_pixmap = QPixmap (w + 7*5, 6); } else { m_pixmap = QPixmap (width (), 6); } QByteArray temp2 = temp.toLatin1(); const char *t = temp2.data(); QPainter (paint); paint.begin (&m_pixmap); paint.drawPixmap (m_pixmap.rect (), skin->getItem (Skin::TEXTBG)); for (uint i = 0; i < strlen (t); i++) { QPixmap p = skin->getLetter (t[i]); if (p.isNull ()) { p = skin->getLetter(' '); } paint.drawPixmap (QRect ((i * 5), 0, 5, 6), p, p.rect()); } paint.end(); } void TextScroller::drawQtFont (QString text) { Skin *skin = Skin::getInstance (); QFont font(skin->getPLeditValue ("font")); font.setPixelSize (m_fontsize); QFontMetrics fM(font); QRect rect = fM.boundingRect (text); QString (temp) = text; if (rect.width() > width ()) { temp += QString (" *** "); QRect rect = fM.boundingRect (temp); m_pixmap = QPixmap (rect.width(), height ()); } else { m_pixmap = QPixmap (size ()); } QPainter paint; paint.begin (&m_pixmap); paint.drawPixmap (m_pixmap.rect (), skin->getItem (Skin::TEXTBG), skin->getItem (Skin::TEXTBG).rect ()); paint.setFont (font); QColor c; c.setNamedColor (skin->getPLeditValue ("normal")); paint.setPen (c); paint.drawText (m_pixmap.rect (), Qt::AlignLeft | Qt::AlignVCenter, temp); paint.end (); } void TextScroller::paintEvent (QPaintEvent *event) { if (m_pixmap.isNull ()) { return; } // A pixmap font is only 6 pixels high and should be centered vertically // for a QFont h_offset is 0 int h_offset = (height () - m_pixmap.height ()) /2; int left_width = qMin (m_pixmap.width() - m_x_off, width ()); QPainter (paint); paint.begin (this); paint.drawPixmap (QPoint (0, h_offset), m_pixmap, QRect (m_x_off, 0, left_width, m_pixmap.height ())); if (left_width < width ()) { paint.drawPixmap (left_width, h_offset, m_pixmap); } paint.end (); } inline void TextScroller::updateScrolling () { if (m_scroll && !m_dragtext && (m_pixmap.width () > width ())) { m_timer->start (); } else { m_timer->stop (); } } void TextScroller::mousePressEvent (QMouseEvent *event) { if (event->button () != Qt::LeftButton) { event->ignore (); return; } if (m_pixmap.width () <= width ()) { // don't use event->ignore here! return; } // calculate the offset relative to m_pixmap // if the offset would be saved relative to the widget another // helpervariable would become necessary to save m_x_off // m_drag_off can be bigger than the width of m_pixmap but that is no // problem as we use the remainder operator in the calculation results m_drag_off = m_x_off + event->x(); m_dragtext = true; updateScrolling (); } void TextScroller::mouseReleaseEvent (QMouseEvent *event) { if (event->button () != Qt::LeftButton) { event->ignore (); return; } m_drag_off = 0; m_dragtext = false; updateScrolling (); } void TextScroller::mouseMoveEvent (QMouseEvent *event) { if (!m_dragtext) { event->ignore (); return; } m_x_off = ( m_drag_off - event->x()) % m_pixmap.width (); // make sure we have a positive value if (m_x_off < 0) m_x_off += m_pixmap.width (); update (); } promoe-0.1.1/src/mainwindow/textscroller.h000066400000000000000000000030301134030477200206550ustar00rootroot00000000000000/** * This file is a part of Promoe, an XMMS2 Client. * * Copyright (C) 2005-2008 XMMS2 Team * * 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; version 2 of the License. * * This program is distributed in the hope that 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. */ #ifndef __TEXTBOX_H__ #define __TEXTBOX_H__ #include class QMouseEvent; class QPixmap; class QTimer; class Skin; class TextScroller : public QWidget { Q_OBJECT public: TextScroller (QWidget *parent, uint, uint, const QString &); ~TextScroller () {} void setText(QString text); void setFontSize (int i) { m_fontsize = i; } void setTTF (bool b) { m_ttf = b; } public slots: void addOffset (); void setPixmaps(Skin *skin); void settingsChanged (void); protected: void paintEvent (QPaintEvent *event); void mousePressEvent (QMouseEvent * event); void mouseReleaseEvent (QMouseEvent * event); void mouseMoveEvent (QMouseEvent * event); private: int m_x_off; int m_fontsize; int m_drag_off; bool m_ttf; bool m_scroll; bool m_dragtext; QTimer *m_timer; QString m_text; QString m_name; QPixmap m_pixmap; void drawText (); void drawBitmapFont (QString text); void drawQtFont (QString text); void updateScrolling (); }; #endif promoe-0.1.1/src/mainwindow/titlebar.cpp000066400000000000000000000120571134030477200202750ustar00rootroot00000000000000/** * This file is a part of Promoe, an XMMS2 Client. * * Copyright (C) 2005-2008 XMMS2 Team * * 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; version 2 of the License. * * This program is distributed in the hope that 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. */ #include "mainwindow.h" #include "titlebar.h" #include "skindisplay.h" #include "SkinChooser.h" // #include "MedialibWindow.h" #include "settingsdialog.h" #include "pixmapbutton.h" #include "BrowseDialog.h" #include "Skin.h" #include #include TitleBar::TitleBar (QWidget *parent, bool shaded) : QWidget (parent) { MainWindow *mw = dynamic_cast(window ()); m_shaded = shaded; Skin *skin = Skin::getInstance (); setFixedSize (275, 14); m_menubtn = new PixmapButton (this); m_menubtn->resize (skin->getSize (Skin::BUTTON_MW_MENU)); m_menubtn->move (skin->getPos (Skin::BUTTON_MW_MENU)); connect (m_menubtn, SIGNAL (clicked ()), this, SLOT (showMenu ())); m_minimize = new PixmapButton (this); m_minimize->resize (skin->getSize (Skin::BUTTON_MW_MINIMIZE)); m_minimize->move (skin->getPos (Skin::BUTTON_MW_MINIMIZE)); connect (m_minimize, SIGNAL (clicked ()), mw, SLOT (showMinimized ())); if (shaded) { m_shadebtn = new PixmapButton (this); m_shadebtn->resize (skin->getSize (Skin::BUTTON_MW_SHADED_UNSHADE)); m_shadebtn->move (skin->getPos (Skin::BUTTON_MW_SHADED_UNSHADE)); } else { m_shadebtn = new PixmapButton (this); m_shadebtn->resize (skin->getSize (Skin::BUTTON_MW_SHADE)); m_shadebtn->move (skin->getPos (Skin::BUTTON_MW_SHADE)); } connect (m_shadebtn, SIGNAL (clicked()), mw, SLOT (switchDisplay ())); m_closebtn = new PixmapButton (this); m_closebtn->resize (skin->getSize (Skin::BUTTON_MW_CLOSE)); m_closebtn->move (skin->getPos (Skin::BUTTON_MW_CLOSE)); connect (m_closebtn, SIGNAL (clicked()), qApp, SLOT (quit ())); m_pixmap = QPixmap(0,0); connect (skin, SIGNAL (skinChanged (Skin *)), this, SLOT (setPixmaps(Skin *))); } void TitleBar::showMenu (void) { QMenu qm(this); QAction *a; a = new QAction (tr ("Medialib browser"), this); // a->setShortcut (tr ("Alt+M")); connect (a, SIGNAL (triggered ()), this, SLOT (showMlib ())); a->setEnabled(false); // FIXME: disabled for now, as Mlib-browser doesn't work qm.addAction (a); a = new QAction (tr ("Server-side browser"), this); // a->setShortcut (tr ("Alt+S")); connect (a, SIGNAL (triggered ()), this, SLOT (showServerB ())); qm.addAction (a); qm.addSeparator (); a = new QAction (tr ("Theme settings"), this); // a->setShortcut (tr ("Alt+T")); connect (a, SIGNAL (triggered ()), this, SLOT (showTheme ())); qm.addAction (a); a = new QAction (tr ("Application settings"), this); // a->setShortcut (tr ("Alt+A")); connect (a, SIGNAL (triggered ()), this, SLOT (showSettings ())); qm.addAction (a); a = new QAction (tr ("Server settings"), this); // a->setShortcut (tr ("Alt+S")); a->setEnabled(false); // FIXME: disabled for now, not yet implemented qm.addAction (a); qm.addSeparator (); a = new QAction (tr ("Quit"), this); // a->setShortcut (tr ("Ctrl+Q")); connect (a, SIGNAL (triggered ()), qApp, SLOT (quit ())); qm.addAction (a); qm.exec(QPoint (window()->pos().x()+6, window()->pos().y()+3)); } void TitleBar::showMlib () { /* MedialibWindow *mw = new MedialibWindow (window ()); mw->show (); */ } void TitleBar::showServerB () { BrowseDialog *bd = new BrowseDialog (window ()); bd->show (); } void TitleBar::showSettings () { SettingsDialog *sw = new SettingsDialog (window ()); sw->show (); } void TitleBar::showTheme () { SkinChooser *sk = new SkinChooser (window()); sk->show(); } void TitleBar::setPixmaps (Skin *skin) { if (m_shaded) { m_pixmap_active = skin->getItem (Skin::STATUSBAR_0); m_pixmap_inactive = skin->getItem (Skin::STATUSBAR_1); } else { m_pixmap_active = skin->getItem (Skin::TITLEBAR_0); m_pixmap_inactive = skin->getItem (Skin::TITLEBAR_1); } if (underMouse()) { m_pixmap = m_pixmap_active; } else { m_pixmap = m_pixmap_inactive; } m_menubtn->setIcon (skin->getIcon (Skin::BUTTON_MW_MENU)); m_minimize->setIcon (skin->getIcon (Skin::BUTTON_MW_MINIMIZE)); if (m_shaded) { m_shadebtn->setIcon (skin->getIcon (Skin::BUTTON_MW_SHADED_UNSHADE)); } else { m_shadebtn->setIcon (skin->getIcon (Skin::BUTTON_MW_SHADE)); } m_closebtn->setIcon (skin->getIcon (Skin::BUTTON_MW_CLOSE)); update (); } TitleBar::~TitleBar () { } void TitleBar::setActive (bool active) { if (active) { m_pixmap = m_pixmap_active; update (); } else { m_pixmap = m_pixmap_inactive; update (); } } void TitleBar::paintEvent (QPaintEvent *event) { QPainter p; p.begin (this); p.drawPixmap (rect (), m_pixmap); p.end (); } void TitleBar::mouseDoubleClickEvent (QMouseEvent *event) { MainWindow *mw = dynamic_cast(window ()); mw->switchDisplay (); } promoe-0.1.1/src/mainwindow/titlebar.h000066400000000000000000000025131134030477200177360ustar00rootroot00000000000000/** * This file is a part of Promoe, an XMMS2 Client. * * Copyright (C) 2005-2008 XMMS2 Team * * 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; version 2 of the License. * * This program is distributed in the hope that 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. */ #ifndef __TITLEBAR_H__ #define __TITLEBAR_H__ #include "QWidget" class QPaintEvent; class PixmapButton; class Skin; class TitleBar : public QWidget { Q_OBJECT public: TitleBar (QWidget *parent, bool shaded); ~TitleBar (); void setActive (bool active); public slots: void setPixmaps (Skin *skin); void showMenu (void); void showServerB (void); void showTheme (void); void showMlib (void); void showSettings (void); protected slots: void paintEvent (QPaintEvent *event); protected: void mouseDoubleClickEvent (QMouseEvent *event); private: QPixmap m_pixmap_active; QPixmap m_pixmap_inactive; PixmapButton *m_shadebtn; PixmapButton *m_menubtn; PixmapButton *m_closebtn; PixmapButton *m_minimize; bool m_shaded; QPixmap m_pixmap; }; #endif promoe-0.1.1/src/playlist/000077500000000000000000000000001134030477200154435ustar00rootroot00000000000000promoe-0.1.1/src/playlist/playlist.pri000066400000000000000000000005451134030477200200240ustar00rootroot00000000000000HEADERS += playlistwindow.h \ playlistwidget.h \ playlistcontrols.h \ playlistmenu.h \ playlistshade.h \ playlistview.h SOURCES += playlistwindow.cpp \ playlistwidget.cpp \ playlistcontrols.cpp \ playlistmenu.cpp \ playlistshade.cpp \ playlistview.cpp INCLUDEPATH += $$PWD DEPENDPATH += $$PWD promoe-0.1.1/src/playlist/playlistcontrols.cpp000066400000000000000000000064221134030477200216000ustar00rootroot00000000000000/** * This file is a part of Promoe, an XMMS2 Client. * * Copyright (C) 2005-2008 XMMS2 Team * * 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; version 2 of the License. * * This program is distributed in the hope that 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. */ #include "playlistcontrols.h" #include "pixmapbutton.h" #include "timedisplay.h" #include QString secondsToString (uint32_t seconds) { int h, m, s; s = seconds % 60; seconds /= 60; m = seconds % 60; h = seconds / 60; QString ret = QString ("%1%2:%3") .arg (h ? QString ("%1:").arg(h) : "") .arg (m, h > 0 ? 2 : 1, 10, QLatin1Char('0')) .arg (s, 2, 10, QLatin1Char('0')); return ret; } PlaylistControls::PlaylistControls (QWidget *parent) : QWidget (parent) { setFixedSize (100, 38); /* * Buttons */ PixmapButton *button; //prev button button = new PixmapButton (this); button->resize (9, 8); button->move (6, 23); connect (button, SIGNAL (clicked ()), this, SIGNAL (prev ())); //play button button = new PixmapButton (this); button->resize (9, 8); button->move (15, 23); connect (button, SIGNAL (clicked ()), this, SIGNAL (play ())); //pause button button = new PixmapButton (this); button->resize (9, 8); button->move (24, 23); connect (button, SIGNAL (clicked ()), this, SIGNAL (pause ())); //stop button button = new PixmapButton (this); button->resize (9, 8); button->move (33, 23); connect (button, SIGNAL (clicked ()), this, SIGNAL (stop ())); //next button button = new PixmapButton (this); button->resize (9, 8); button->move (42, 23); connect (button, SIGNAL (clicked ()), this, SIGNAL (next ())); //eject button button = new PixmapButton (this); button->resize (9, 8); button->move (52, 23); connect (button, SIGNAL (clicked ()), this, SIGNAL (eject ())); m_timedisplay = new SmallTimeDisplay (this); m_timedisplay->move (68, 23); connect (m_timedisplay, SIGNAL (clicked ()), this, SIGNAL (toggleTime ())); connect (this, SIGNAL (setDisplayTime (int)), m_timedisplay, SLOT (setTime (int))); m_selection_playtime = 0; m_playlist_playtime = 0; is_playlist_playtime_exact = true; } void PlaylistControls::paintEvent (QPaintEvent *event) { if (m_font.isEmpty ()) return; int x = 8, y = 10; QString time = QString ("%1/%2%3") .arg (secondsToString (m_selection_playtime)) .arg (secondsToString (m_playlist_playtime)) .arg (is_playlist_playtime_exact ? "" : "+"); QPainter paint; paint.begin (this); foreach (QChar c, time) { paint.drawPixmap (x, y, m_font[c.toAscii()]); x += 5; } paint.end (); } void PlaylistControls::setNumbers (const PixmapMap &p) { m_timedisplay->setPixmaps (p); } void PlaylistControls::setPixmapFont (const PixmapMap &p) { m_font = p; update (); } void PlaylistControls::setSelectionPlaytime (uint32_t playtime) { m_selection_playtime = playtime; update (); } void PlaylistControls::setPlaylistPlaytime (uint32_t playtime, bool isExact) { m_playlist_playtime = playtime; is_playlist_playtime_exact = isExact; update (); } promoe-0.1.1/src/playlist/playlistcontrols.h000066400000000000000000000030131134030477200212360ustar00rootroot00000000000000/** * This file is a part of Promoe, an XMMS2 Client. * * Copyright (C) 2005-2008 XMMS2 Team * * 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; version 2 of the License. * * This program is distributed in the hope that 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. */ #ifndef __PLAYLISTCONTROLS_H__ #define __PLAYLISTCONTROLS_H__ #include #include #include class SmallTimeDisplay; class QPaintEvent; class QPixmap; typedef QMap PixmapMap; class PlaylistControls : public QWidget { Q_OBJECT public: PlaylistControls (QWidget *parent); void setNumbers (const PixmapMap &p); void setPixmapFont (const PixmapMap &p); public slots: void setSelectionPlaytime (uint32_t); void setPlaylistPlaytime (uint32_t, bool isExact); signals: // emitted when buttons are clicked void prev (); void play (); void pause (); void stop (); void next (); void eject (); void toggleTime (); //connected to internal timedisplay void setDisplayTime (int); private slots: void paintEvent (QPaintEvent *event); private: uint32_t m_playlist_playtime; bool is_playlist_playtime_exact; uint32_t m_selection_playtime; PixmapMap m_font; SmallTimeDisplay *m_timedisplay; }; #endif promoe-0.1.1/src/playlist/playlistmenu.cpp000066400000000000000000000075551134030477200207110ustar00rootroot00000000000000/** * This file is a part of Promoe, an XMMS2 Client. * * Copyright (C) 2005-2008 XMMS2 Team * * 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; version 2 of the License. * * This program is distributed in the hope that 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. */ #include "playlistmenu.h" #include "Skin.h" #include #include #include #include PlaylistMenuBar::PlaylistMenuBar (QWidget *parent, uint id) : QWidget (parent) { m_id = id; Skin *skin = Skin::getInstance (); m_pixmap = QPixmap (0,0); connect (skin, SIGNAL (skinChanged (Skin *)), this, SLOT (setPixmaps (Skin *))); } void PlaylistMenuBar::paintEvent (QPaintEvent *event) { QPainter p; p.begin (this); p.drawPixmap (rect (), m_pixmap, m_pixmap.rect ()); p.end (); } PlaylistMenuButton::PlaylistMenuButton (PlaylistMenu *menu, uint pix1, uint pix2) : QWidget (menu) { m_pixid1 = pix1; m_pixid2 = pix2; menu->addButton (this); m_menu = menu; setFixedSize (22, 18); } PlaylistMenuButton::~PlaylistMenuButton () { m_menu->rmButton (this); } void PlaylistMenuButton::paintEvent (QPaintEvent *event) { QPainter p; p.begin (this); p.drawPixmap (rect (), m_pixmap, m_pixmap.rect ()); p.end (); } void PlaylistMenuButton::setPixmaps (Skin *skin) { m_pixmap1 = skin->getPls (m_pixid1); m_pixmap2 = skin->getPls (m_pixid2); m_pixmap = m_pixmap1; } /* * PlaylistMenu */ PlaylistMenu::PlaylistMenu (QWidget *parent, uint pix, uint decoration) : QWidget (parent) { setFixedSize (25, 18); m_expanded = new QWidget (parent); m_expanded->hide (); m_decbar = new PlaylistMenuBar (m_expanded, decoration); m_decbar->move (0, 0); m_pixid = pix; Skin *skin = Skin::getInstance (); m_pixmap = QPixmap (0,0); connect (skin, SIGNAL (skinChanged (Skin *)), this, SLOT (setPixmaps (Skin *))); } void PlaylistMenu::paintEvent (QPaintEvent *event) { QPainter p; p.begin (this); p.drawPixmap (rect (), m_pixmap, m_pixmap.rect ()); p.end (); } void PlaylistMenu::addButton (PlaylistMenuButton *b) { int i = m_items.count (); /* black magic, don't try this at home kids */ b->setParent (m_expanded); b->move (3, i * 18); m_items.append (b); i = m_items.count (); m_decbar->resize (3, i * 18); m_expanded->resize (25, i * 18); } void PlaylistMenu::rmButton (PlaylistMenuButton *b) { m_items.removeAll (b); } void PlaylistMenu::mousePressEvent (QMouseEvent *event) { PlaylistMenuButton *b = m_items.last (); b->setOver (); QWidget *w = dynamic_cast(parent ()); m_expanded->move (pos ().x (), w->height() - m_expanded->height() - 12); m_expanded->show (); } void PlaylistMenu::mouseMoveEvent (QMouseEvent *event) { int my_y = event->y() + (m_items.count () - 1) * 18; for (int i = 0; i < m_items.count (); i ++) { PlaylistMenuButton *b = m_items.value (i); if (my_y > b->pos().y() && my_y < b->pos().y() + 18) { b->setOver (); } else { b->setNoOver (); } } m_expanded->update (); } void PlaylistMenu::mouseReleaseEvent (QMouseEvent *event) { int my_y = event->y() + (m_items.count () - 1) * 18; for (int i = 0; i < m_items.count (); i ++) { PlaylistMenuButton *b = m_items.value (i); if (my_y > b->pos().y() && my_y < b->pos().y() + 18) { b->clicked (); } } m_expanded->hide (); dynamic_cast(parent ())->update (); } void PlaylistMenu::setPixmaps (Skin *skin) { for (int i = 0; i < m_items.count (); i++) { PlaylistMenuButton *b = m_items.value (i); if (b) { b->setPixmaps (skin); } } m_pixmap = skin->getPls (m_pixid); m_dpixmap = skin->getPls (m_dec); update (); } promoe-0.1.1/src/playlist/playlistmenu.h000066400000000000000000000041371134030477200203470ustar00rootroot00000000000000/** * This file is a part of Promoe, an XMMS2 Client. * * Copyright (C) 2005-2008 XMMS2 Team * * 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; version 2 of the License. * * This program is distributed in the hope that 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. */ #ifndef __PLAYLISTMENU_H__ #define __PLAYLISTMENU_H__ #include #include "Skin.h" class PlaylistMenu; class PlaylistMenuBar : public QWidget { Q_OBJECT public: PlaylistMenuBar (QWidget *parent, uint id); public slots: void setPixmaps (Skin *skin) { m_pixmap = skin->getPls (m_id); } protected slots: void paintEvent (QPaintEvent *event); private: uint m_id; QPixmap m_pixmap; }; class PlaylistMenuButton : public QWidget { Q_OBJECT public: PlaylistMenuButton (PlaylistMenu *, uint pix1, uint pix2); ~PlaylistMenuButton (); void paintEvent (QPaintEvent *event); void setPixmaps (Skin *skin); void setOver (void) { m_pixmap = m_pixmap2; } void setNoOver (void) { m_pixmap = m_pixmap1; } void clicked (void) { emit activated (); } signals: void activated (void); private: uint m_pixid1; uint m_pixid2; PlaylistMenu *m_menu; QPixmap m_pixmap1; QPixmap m_pixmap2; QPixmap m_pixmap; }; class PlaylistMenu : public QWidget { Q_OBJECT public: PlaylistMenu (QWidget *, uint, uint); ~PlaylistMenu () {} void addButton (PlaylistMenuButton *b); void rmButton (PlaylistMenuButton *b); void mousePressEvent (QMouseEvent *event); void mouseReleaseEvent (QMouseEvent *event); void mouseMoveEvent (QMouseEvent *); public slots: void setPixmaps (Skin *skin); protected slots: void paintEvent (QPaintEvent *event); private: uint m_pixid; uint m_dec; QPixmap m_dpixmap; QList m_items; QWidget *m_expanded; PlaylistMenuBar *m_decbar; QPixmap m_pixmap; }; #endif promoe-0.1.1/src/playlist/playlistshade.cpp000066400000000000000000000103211134030477200210120ustar00rootroot00000000000000/** * This file is a part of Promoe, an XMMS2 Client. * * Copyright (C) 2005-2008 XMMS2 Team * * 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; version 2 of the License. * * This program is distributed in the hope that 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. */ #include "xclient.h" #include "xclientcache.h" #include "application.h" #include "playlistshade.h" #include "playlistwindow.h" #include "pixmapbutton.h" #include "Skin.h" #include #include #include PlaylistShade::PlaylistShade (PlaylistWindow *parent) : QWidget (parent) { QSettings s; const XClient *client = App->client (); if (!s.contains ("playlist/shadedsize")) s.setValue ("playlist/shadedsize", 8); Skin *skin = Skin::getInstance (); connect (skin, SIGNAL (skinChanged (Skin *)), this, SLOT (setPixmaps(Skin *))); m_closebtn = new PixmapButton (this); m_closebtn->resize (skin->getSize (Skin::BUTTON_PLS_CLOSE)); connect (m_closebtn, SIGNAL (clicked ()), parent, SLOT (hide ())); m_unshadebtn = new PixmapButton (this); m_unshadebtn->resize (skin->getSize (Skin::BUTTON_PLS_SHADED_UNSHADE)); connect (m_unshadebtn, SIGNAL (clicked ()), parent, SLOT (switchDisplay ())); connect (client->cache (), SIGNAL (activeEntryChanged (QVariantHash)), this, SLOT (setMediainfo (QVariantHash))); connect (App, SIGNAL(settingsChanged ()), this, SLOT(settingsChanged ())); m_text = "Promoe " PROMOE_VERSION " - A very neat XMMS2 client"; setMinimumSize (275, 14); } void PlaylistShade::settingsChanged () { QSettings s; m_font.setPixelSize (s.value ("playlist/shadedsize").toInt ()); update (); } void PlaylistShade::setMediainfo (QVariantHash info) { QString n; if (info.contains ("artist") && info.contains ("album") && info.contains ("title")) { n = info["artist"].toString () + " - " + info["album"].toString () + " - " + info["title"].toString (); } else { n = info["url"].toString (); } m_text = (n); update (); } void PlaylistShade::resizeEvent (QResizeEvent *event) { Skin *skin = Skin::getInstance (); QPoint p = skin->getPos (Skin::BUTTON_PLS_CLOSE); m_closebtn->move (p.x () + width (), p.y()); p = skin->getPos (Skin::BUTTON_PLS_SHADED_UNSHADE); m_unshadebtn->move (p.x () + width (), p.y()); } void PlaylistShade::setPixmaps (Skin *skin) { QSettings s; m_closebtn->setIcon (skin->getIcon (Skin::BUTTON_PLS_CLOSE)); m_unshadebtn->setIcon (skin->getIcon (Skin::BUTTON_PLS_SHADED_UNSHADE)); m_pixmap_le = skin->getPls (Skin::PLS_WS_LE_0); m_pixmap_re_0 = skin->getPls (Skin::PLS_WS_RE_0); m_pixmap_re_1 = skin->getPls (Skin::PLS_WS_RE_1); m_pixmap_mid = skin->getPls (Skin::PLS_WS_MID_0); m_pixmap_re = m_pixmap_re_0; m_font = QFont (skin->getPLeditValue ("font")); m_font.setPixelSize (s.value ("playlist/shadedsize").toInt ()); m_color.setNamedColor (skin->getPLeditValue ("normal")); update (); } void PlaylistShade::setActive (bool b) { if (b) { m_pixmap_re = m_pixmap_re_0; } else { m_pixmap_re = m_pixmap_re_1; } update (); } void PlaylistShade::mouseDoubleClickEvent (QMouseEvent *event) { PlaylistWindow *pw = dynamic_cast(window ()); pw->switchDisplay (); } void PlaylistShade::paintEvent (QPaintEvent *event) { QRect r; QPainter p; p.begin (this); r.setRect (0, 0, m_pixmap_le.size().width(), m_pixmap_le.size().height()); p.drawPixmap (r, m_pixmap_le, m_pixmap_le.rect()); int s = size().width() - m_pixmap_le.size().width() - m_pixmap_re.size().width(); r.setRect (m_pixmap_le.size().width(), 0, s, m_pixmap_mid.size().height()); p.drawPixmap (r, m_pixmap_mid, m_pixmap_mid.rect ()); r.setRect (size().width() - m_pixmap_re.size().width(), 0, m_pixmap_re.size().width(), m_pixmap_re.size().height()); p.drawPixmap (r, m_pixmap_re, m_pixmap_re.rect ()); /* Text */ p.setFont (m_font); p.setPen (m_color); p.drawText (QRect (5, 4, size().width()-25, 7), Qt::AlignLeft | Qt::AlignVCenter, m_text); p.end (); } promoe-0.1.1/src/playlist/playlistshade.h000066400000000000000000000026761134030477200204750ustar00rootroot00000000000000/** * This file is a part of Promoe, an XMMS2 Client. * * Copyright (C) 2005-2008 XMMS2 Team * * 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; version 2 of the License. * * This program is distributed in the hope that 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. */ #ifndef __PLAYLISTSHADE_H__ #define __PLAYLISTSHADE_H__ #include #include #include typedef QHash QVariantHash; class Skin; class QResizeEvent; class PixmapButton; class PlaylistWindow; class PlaylistShade : public QWidget { Q_OBJECT public: PlaylistShade (PlaylistWindow *parent); ~PlaylistShade () {} void paintEvent (QPaintEvent *event); void mouseDoubleClickEvent (QMouseEvent *event); void setActive (bool); public slots: void setPixmaps (Skin *skin); void setMediainfo (QVariantHash); void settingsChanged (); void resizeEvent (QResizeEvent *); private: PixmapButton *m_closebtn; PixmapButton *m_unshadebtn; QPixmap m_pixmap_le; QPixmap m_pixmap_re; QPixmap m_pixmap_mid; QPixmap m_pixmap_re_0; QPixmap m_pixmap_re_1; QFont m_font; QColor m_color; QString m_text; // QFontMetrics m_fm; }; #endif promoe-0.1.1/src/playlist/playlistview.cpp000066400000000000000000000217341134030477200207120ustar00rootroot00000000000000/** * This file is a part of Promoe, an XMMS2 Client. * * Copyright (C) 2005-2008 XMMS2 Team * * 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; version 2 of the License. * * This program is distributed in the hope that 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. */ #include "xclient.h" #include "xplayback.h" #include "application.h" #include "playlistview.h" #include "playlistmodel.h" #include "playlistwidget.h" #include "Skin.h" #include "entryinfo.h" #include #include #include #include #include #include #include #include /* * PlaylistDelegate */ PlaylistDelegate::PlaylistDelegate (QObject *parent) : QAbstractItemDelegate (parent) { } void PlaylistDelegate::paint( QPainter *painter, const QStyleOptionViewItem& option, const QModelIndex &index ) const { painter->save (); /* Set background color */ if ( option.state & QStyle::State_Selected ) { qDrawPlainRect (painter, option.rect, QColor("#FFFFFF"), 0, &option.palette.brush (QPalette::Highlight)); } /* Set forground color */ if ( index.data (PlaylistModel::CurrentEntryRole).toBool () ) { painter->setPen (option.palette.brush (QPalette::BrightText).color ()); } else { painter->setPen (option.palette.brush (QPalette::Text).color ()); } /* generate string */ //TODO Add album and playtime QVariant tmp; QModelIndex m; QRect r = option.rect; QString s; // Get playtime and if it exists, draw it m = index.sibling (index.row (), 2); tmp = m.data (); if (tmp.isValid ()) { int seconds = tmp.toInt () / 1000; s = QString ("%1:%2").arg (seconds / 60, 2) .arg (seconds % 60, 2, 10, QLatin1Char ('0')); painter->drawText (r, Qt::AlignVCenter | Qt::AlignRight, s); // now adjust der paintrectangle for the remaining text r.setWidth (r.width () - option.fontMetrics.width (s)); } // now build String for Artis Title and Position s = QString ("%1. ").arg (index.row () + 1); tmp = index.data (); if (tmp.isValid ()) s.append (tmp.toString ()).append (" - "); m = index.sibling (index.row (), 1); tmp = m.data (); if (tmp.isValid ()) s.append (tmp.toString ()); s = option.fontMetrics.elidedText(s, Qt::ElideRight, r.width()); painter->drawText (r, Qt::AlignVCenter, s); painter->restore (); } QSize PlaylistDelegate::sizeHint ( const QStyleOptionViewItem &option, const QModelIndex &index ) const { /* For QListModel, width must be > 0, but is otherwise */ return QSize (1, option.font.pixelSize () +3); } /* * PlaylistView */ PlaylistView::PlaylistView (QWidget *parent) : QListView (parent) { QSettings s; Skin *skin = Skin::getInstance (); if (!s.contains ("playlist/fontsize")) s.setValue ("playlist/fontsize", 10); // Background is painted by PlaylistWidget setAttribute (Qt::WA_NoBackground); setFrameStyle(QFrame::NoFrame); setFocusPolicy (Qt::StrongFocus); setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); setSelectionMode (QAbstractItemView::ExtendedSelection); setUniformItemSizes(true); setDragEnabled(true); setAcceptDrops(true); // TODO make sure delegate gets deleted setItemDelegate (new PlaylistDelegate (this)); connect (skin, SIGNAL (skinChanged (Skin *)), this, SLOT (setPixmaps(Skin *))); m_font = NULL; m_fontmetrics = NULL; const XClient *client = App->client (); connect (App, SIGNAL (settingsChanged ()), this, SLOT (settingsChanged ())); connect (client->xplayback (), SIGNAL(playbackStatusChanged(Xmms::Playback::Status)), this, SLOT(handleStatus(Xmms::Playback::Status))); } void PlaylistView::selectionChanged (const QItemSelection &selected, const QItemSelection &deselected) { /* selectedIndexes () is used here because selected only contains newly * seleted indexes and will give a wrong result if pressing CONTROL to * modify a selection */ uint32_t playtime = qobject_cast (model ())->getPlaytimeForSelection (selectedIndexes ()); emit selectionPlaytimeChanged (playtime); QListView::selectionChanged (selected, deselected); } void PlaylistView::invertSelection () { QItemSelection selection = QItemSelection (model ()->index (0, 0), model ()->index (model ()->rowCount ()-1, 0)); selectionModel ()->select (selection, QItemSelectionModel::Toggle | QItemSelectionModel::Columns); selectionModel()->setCurrentIndex(model ()->index (0, 0), QItemSelectionModel::NoUpdate); } void PlaylistView::cropSelected () { invertSelection (); removeSelected (); selectAll (); } void PlaylistView::removeSelected () { qobject_cast (model ())->removeRows (selectedIndexes ()); } void PlaylistView::setModel (PlaylistModel *plmodel) { if (model ()) disconnect (model (), 0, this, SLOT (currentPosChanged (QModelIndex))); QListView::setModel (plmodel); setModelColumn(0); updateGeometry(); connect (plmodel, SIGNAL (currentPosChanged (QModelIndex)), this, SLOT (currentPosChanged (QModelIndex))); } void PlaylistView::currentPosChanged (QModelIndex index) { QSettings s; if (s.value ("playlist/scrolltocurrent", true).toBool ()) { scrollTo (index); } } void PlaylistView::contextMenuEvent (QContextMenuEvent *e) { QMenu qm(this); QAction *a; a = new QAction (tr ("Show file info"), this); a->setShortcut (tr ("Ctrl+Enter")); connect (a, SIGNAL (triggered ()), this, SLOT (showEntryInfo ())); qm.addAction (a); qm.addSeparator (); a = new QAction (tr ("Add file"), this); a->setShortcut (tr ("Ctrl+F")); connect (a, SIGNAL (triggered ()), qobject_cast (parent ()), SLOT (menuAddFile ())); qm.addAction (a); a = new QAction (tr ("Remove selected"), this); connect (a, SIGNAL (triggered ()), this, SLOT (removeSelected ())); qm.addAction (a); qm.addSeparator (); a= new QAction (tr ("Choose Playlist"), this); connect (a, SIGNAL (triggered ()), qobject_cast(parent ()), SLOT (openPlaylistChooser ())); qm.addAction (a); a = new QAction (tr ("Medialib browser"), this); // connect (a, SIGNAL (triggered ()), this, SLOT (showMlib ())); a->setEnabled(false); //FIXME: Disabled for now qm.addAction (a); e->accept (); qm.exec (e->globalPos ()); } void PlaylistView::handleStatus (const Xmms::Playback::Status st) { m_status = st; } void PlaylistView::settingsChanged () { QSettings s; m_font->setPixelSize (s.value ("playlist/fontsize").toInt ()); if (m_fontmetrics) { delete m_fontmetrics; } m_fontmetrics = new QFontMetrics (*m_font); update (); // Scroll to current pos, if enabled currentPosChanged (qobject_cast(model())->currentPos ()); } void PlaylistView::setPixmaps (Skin *skin) { QSettings s; QPalette pal; QColor c; c.setNamedColor (skin->getPLeditValue ("normalbg")); QBrush b (c); pal.setBrush (QPalette::Window, b); setPalette (pal); if (m_font) { delete m_font; } m_font = new QFont (skin->getPLeditValue ("font")); m_font->setPixelSize (s.value ("playlist/fontsize").toInt ()); if (m_fontmetrics) { delete m_fontmetrics; } m_fontmetrics = new QFontMetrics (*m_font); m_color_active.setNamedColor (skin->getPLeditValue ("current")); m_color_selected.setNamedColor (skin->getPLeditValue ("selectedbg")); m_color_normal.setNamedColor (skin->getPLeditValue ("normal")); m_color_normal_bg.setNamedColor (skin->getPLeditValue ("normalbg")); // remove later, in here for testing setFont(*m_font); pal.setColor (QPalette::Text, m_color_normal); pal.setColor (QPalette::BrightText, m_color_active); pal.setColor (QPalette::Base, m_color_normal_bg); pal.setColor (QPalette::Highlight, m_color_selected); setPalette (pal); update (); } void PlaylistView::mouseDoubleClickEvent (QMouseEvent *event) { QModelIndex index = indexAt(event->pos()); if (!index.isValid()) { return; } const XClient *client = App->client (); client->xplayback ()->setPos (index.row()); if (m_status == XMMS_PLAYBACK_STATUS_STOP || m_status == XMMS_PLAYBACK_STATUS_PAUSE) { client->xplayback ()->play (); } } void PlaylistView::showEntryInfo (void) { const XClient *client = App->client (); QModelIndex current = selectionModel ()->currentIndex (); if (current.isValid ()) { uint32_t id = model ()->data (current, PlaylistModel::MedialibIdRole) .toUInt (); // If no infodialog exists, create one, else set the selected Item as // displayed item if (!m_entry_info) { m_entry_info = new EntryInfo (this, client->cache (), id); } else { m_entry_info->raise (); m_entry_info->setId (id); } m_entry_info->show (); } } promoe-0.1.1/src/playlist/playlistview.h000066400000000000000000000044301134030477200203510ustar00rootroot00000000000000/** * This file is a part of Promoe, an XMMS2 Client. * * Copyright (C) 2005-2008 XMMS2 Team * * 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; version 2 of the License. * * This program is distributed in the hope that 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. */ #ifndef __PLAYLISTVIEW_H__ #define __PLAYLISTVIEW_H__ //include "Playlist.h" #include #include "entryinfo.h" class Skin; class PlaylistModel; #include #include #include #include class QWidget; class QModelIndex; class PlaylistDelegate : public QAbstractItemDelegate { Q_OBJECT public: PlaylistDelegate (QObject *parent = NULL); ~PlaylistDelegate () { } void paint( QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index ) const; QSize sizeHint ( const QStyleOptionViewItem &option, const QModelIndex &index ) const; }; class PlaylistView : public QListView { Q_OBJECT public: PlaylistView (QWidget *parent); ~PlaylistView () {} void setModel (QAbstractItemModel *model) {qWarning ("Trying to set wrong model in PlaylistView"); return;}; void setModel (PlaylistModel *model); signals: void selectionPlaytimeChanged (uint32_t playtime); public slots: void contextMenuEvent (QContextMenuEvent *e); void handleStatus (const Xmms::Playback::Status st); void invertSelection (void); void cropSelected (void); void removeSelected (void); void showEntryInfo (void); void settingsChanged (void); void setPixmaps (Skin *skin); void currentPosChanged (QModelIndex); protected: void mouseDoubleClickEvent (QMouseEvent *event); protected slots: void selectionChanged (const QItemSelection &, const QItemSelection &); private: Xmms::Playback::Status m_status; QFont *m_font; QFontMetrics *m_fontmetrics; QColor m_color_active; QColor m_color_selected; QColor m_color_normal; QColor m_color_normal_bg; QPointer m_entry_info; }; #endif promoe-0.1.1/src/playlist/playlistwidget.cpp000066400000000000000000000416221134030477200212210ustar00rootroot00000000000000/** * This file is a part of Promoe, an XMMS2 Client. * * Copyright (C) 2005-2008 XMMS2 Team * * 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; version 2 of the License. * * This program is distributed in the hope that 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. */ #include "xclient.h" #include "playlistmodel.h" #include "xcollection.h" #include "xplayback.h" #include "application.h" #include "mainwindow.h" #include "BrowseDialog.h" #include "playlistwindow.h" #include "playlistwidget.h" #include "playlistview.h" #include "playlistcontrols.h" #include "pixmapbutton.h" #include "playlistshade.h" #include "playlistmenu.h" #include "FileDialog.h" #include "playlistchooser.h" #include "urlopen.h" #include #include #include #include #include #include #include #include #include /* * * PlaylistScrollBar * */ PlaylistScrollBar::PlaylistScrollBar (QWidget *parent) : QScrollBar (Qt::Vertical, parent) { Skin *skin = Skin::getInstance (); setContextMenuPolicy(Qt::NoContextMenu); m_pixmap = QPixmap (0, 0); m_slider = QPixmap (0, 0); m_slider_down = QPixmap (0, 0); connect (skin, SIGNAL (skinChanged (Skin *)), this, SLOT (setPixmaps(Skin *))); } void PlaylistScrollBar::mouseMoveEvent (QMouseEvent *event) { if (!isSliderDown ()) return; int tmp = sliderValueFromPosition(event->y () - m_sliderOffset); if (tmp == value()) return; setValue(tmp); //TODO only repaint necessary range update (); } void PlaylistScrollBar::mousePressEvent (QMouseEvent *event) { if (event->button() == Qt::RightButton) { event->ignore(); return; } if (maximum () == minimum ()) return; int sliderBase = sliderPositionFromValue(); if (event->y () < sliderBase) { triggerAction (QAbstractSlider::SliderPageStepSub); } else if (event->y () > sliderBase + m_slider.height ()) { triggerAction (QAbstractSlider::SliderPageStepAdd); } else { m_sliderOffset = event->y () - sliderBase; setSliderDown (true); } //TODO only repaint necessary range update (); } void PlaylistScrollBar::mouseReleaseEvent (QMouseEvent *event) { if (event->button() == Qt::RightButton) { event->ignore(); return; } if (isSliderDown ()) { setValue(sliderValueFromPosition(event->y () - m_sliderOffset)); setSliderDown (false); } //TODO only repaint necessary range update (); } void PlaylistScrollBar::paintEvent (QPaintEvent *event) { if (m_pixmap.isNull ()) { return; } QPainter (paint); paint.begin (this); /* draw background */ paint.drawPixmap (event->rect (), m_pixmap, m_pixmap.rect ()); /* draw slider */ QPixmap *slider = isSliderDown () ? &m_slider_down : &m_slider ; QRect rect (slider->rect ()); rect.moveTop (sliderPositionFromValue ()); paint.drawPixmap (rect , *slider, slider->rect ()); paint.end (); } void PlaylistScrollBar::setPixmaps (Skin *skin) { m_pixmap = skin->getPls (Skin::PLS_RFILL2_0); m_slider = skin->getPls (Skin::PLS_SCROLL_0); m_slider_down = skin->getPls (Skin::PLS_SCROLL_1); update (); } int PlaylistScrollBar::sliderPositionFromValue () { return QStyle::sliderPositionFromValue (minimum (), maximum (), sliderPosition (), height () - m_slider.height (), false); } int PlaylistScrollBar::sliderValueFromPosition (int position) { return QStyle::sliderValueFromPosition (minimum (), maximum (), position, height () - m_slider.height (), false); } /* * PlaylistWidget */ PlaylistWidget::PlaylistWidget (PlaylistWindow *parent) : QWidget (parent) { Skin *skin = Skin::getInstance (); connect (skin, SIGNAL (skinChanged (Skin *)), this, SLOT (setPixmaps(Skin *))); setActive (underMouse ()); m_closebtn = new PixmapButton (this); m_closebtn->resize (skin->getSize (Skin::BUTTON_PLS_CLOSE)); connect (m_closebtn, SIGNAL (clicked ()), parent, SLOT (hide ())); m_shadebtn = new PixmapButton (this); m_shadebtn->resize (skin->getSize (Skin::BUTTON_PLS_SHADE)); connect (m_shadebtn, SIGNAL (clicked ()), parent, SLOT (switchDisplay ())); m_view = new PlaylistView (this); m_view->move (10, 20); // m_view->resize (size().width()-30, size().height()-20-38); // TODO: creation of Playlistmodel should be done elsewhere m_view->setModel (App->client ()->active_playlist ()); /* * This is a hack to make PlaylistScrollBar work with PlaylistView. * It is necessery because of limitations and at least one Bug in the * QT library (as of Version 4.3) * TODO: This might break in a future Qt version. Try to find a better solution */ m_scrollBar = new PlaylistScrollBar (this); m_view->setVerticalScrollBar (m_scrollBar); m_scrollBar->setParent(this); m_scrollBar->show(); /* Workarounds for another QT bug (at least in my opinion) */ connect (m_scrollBar, SIGNAL(actionTriggered (int)), m_view, SLOT(verticalScrollbarAction (int))); connect (m_scrollBar, SIGNAL(valueChanged (int)), m_view, SLOT(verticalScrollbarValueChanged (int))); m_sizegrip = new PlaylistSizeGrip(this); m_sizegrip->resize (20, 20); addButtons (); const XClient *client = App->client (); m_controls = new PlaylistControls (this); // connect buttons connect (m_controls, SIGNAL (prev ()), client->xplayback (), SLOT (prev ())); connect (m_controls, SIGNAL (play ()), client->xplayback (), SLOT (play ())); connect (m_controls, SIGNAL (pause ()), client->xplayback (), SLOT (pause ())); connect (m_controls, SIGNAL (stop ()), client->xplayback (), SLOT (stop ())); connect (m_controls, SIGNAL (next ()), client->xplayback (), SLOT (next ())); // TODO: eject connect (m_controls, SIGNAL (toggleTime ()), App, SLOT (toggleTime())); connect (parent, SIGNAL (setDisplayTime (int)), m_controls, SIGNAL (setDisplayTime (int))); connect (App->client ()->active_playlist (), SIGNAL (totalPlaytime(uint32_t, bool)), m_controls, SLOT (setPlaylistPlaytime (uint32_t, bool))); connect (m_view, SIGNAL (selectionPlaytimeChanged(uint32_t)), m_controls, SLOT (setSelectionPlaytime (uint32_t))); setMinimumSize (275, 116); // resize (275, 300); } void PlaylistWidget::addButtons () { PlaylistMenuButton *b; /* Add menu */ m_add = new PlaylistMenu (this, Skin::PLS_ADD, Skin::PLS_ADD_DEC); b = new PlaylistMenuButton (m_add, Skin::PLS_ADD_URL_0, Skin::PLS_ADD_URL_1); connect (b, SIGNAL(activated ()), this, SLOT (menuAddUrl ())); b = new PlaylistMenuButton (m_add, Skin::PLS_ADD_DIR_0, Skin::PLS_ADD_DIR_1); connect (b, SIGNAL(activated ()), this, SLOT (menuAddDir ())); b = new PlaylistMenuButton (m_add, Skin::PLS_ADD_FIL_0, Skin::PLS_ADD_FIL_1); connect (b, SIGNAL(activated ()), this, SLOT (menuAddFile ())); /* Del menu */ m_del = new PlaylistMenu (this, Skin::PLS_DEL, Skin::PLS_DEL_DEC); b = new PlaylistMenuButton (m_del, Skin::PLS_MSC_BTN_0, Skin::PLS_MSC_BTN_1); b = new PlaylistMenuButton (m_del, Skin::PLS_DEL_ALL_0, Skin::PLS_DEL_ALL_1); connect (b, SIGNAL (activated ()), App->client ()->xcollection (), SLOT (playlistClear ())); b = new PlaylistMenuButton (m_del, Skin::PLS_DEL_CRP_0, Skin::PLS_DEL_CRP_1); connect (b, SIGNAL (activated ()), m_view, SLOT (cropSelected ())); b = new PlaylistMenuButton (m_del, Skin::PLS_DEL_FIL_0, Skin::PLS_DEL_FIL_1); connect (b, SIGNAL (activated ()), m_view, SLOT (removeSelected ())); /* Selection menu */ m_sel = new PlaylistMenu (this, Skin::PLS_SEL, Skin::PLS_SEL_DEC); b = new PlaylistMenuButton (m_sel, Skin::PLS_SEL_INV_0, Skin::PLS_SEL_INV_1); connect (b, SIGNAL (activated ()), m_view, SLOT (invertSelection ())); b = new PlaylistMenuButton (m_sel, Skin::PLS_SEL_NIL_0, Skin::PLS_SEL_NIL_1); connect (b, SIGNAL (activated ()), m_view, SLOT (clearSelection ())); b = new PlaylistMenuButton (m_sel, Skin::PLS_SEL_ALL_0, Skin::PLS_SEL_ALL_1); connect (b, SIGNAL (activated ()), m_view, SLOT (selectAll ())); /* misc menu */ m_msc = new PlaylistMenu (this, Skin::PLS_MSC, Skin::PLS_MSC_DEC); b = new PlaylistMenuButton (m_msc, Skin::PLS_MSC_SRT_0, Skin::PLS_MSC_SRT_1); b = new PlaylistMenuButton (m_msc, Skin::PLS_MSC_INF_0, Skin::PLS_MSC_INF_1); connect (b, SIGNAL (activated ()), m_view, SLOT (showEntryInfo ())); b = new PlaylistMenuButton (m_msc, Skin::PLS_MSC_OPT_0, Skin::PLS_MSC_OPT_1); /* playlist menu */ m_lst = new PlaylistMenu (this, Skin::PLS_LST, Skin::PLS_LST_DEC); b = new PlaylistMenuButton (m_lst, Skin::PLS_LST_NEW_0, Skin::PLS_LST_NEW_1); connect (b, SIGNAL (activated ()), this, SLOT(openPlaylistChooser ())); b = new PlaylistMenuButton (m_lst, Skin::PLS_LST_SAV_0, Skin::PLS_LST_SAV_1); b = new PlaylistMenuButton (m_lst, Skin::PLS_LST_OPN_0, Skin::PLS_LST_OPN_1); connect (b, SIGNAL (activated ()), this, SLOT (menuAddPls ())); } void PlaylistWidget::menuAddUrl () { const XClient *client = App->client (); UrlOpen *tmp = new UrlOpen (this, client->xcollection ()); tmp->show (); } void PlaylistWidget::diveDir (const QString &dir) { QDir d (dir); d.setFilter (QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot); QFileInfoList list = d.entryInfoList(); for (int i = 0; i < list.size(); ++i) { QFileInfo fileInfo = list.at(i); if (fileInfo.isDir ()) { diveDir (fileInfo.filePath ()); } else { QString fname = fileInfo.filePath(); App->client ()->xcollection ()->playlistAddUrl ("file://" + fname); } } } void PlaylistWidget::menuAddDir () { /* QString dir; dir = QFileDialog::getExistingDirectory (this, "Select files to play", QDir::homePath ()); diveDir (dir); */ FileDialog fd (this, "playlist_add_dir"); QString dir = fd.getDirectory (); if (!dir.isNull ()) diveDir (dir); } void PlaylistWidget::menuAddFile () { QSettings s; QStringList files; if (s.value ("playlist/useremote").toBool () == true) { BrowseDialog bd (window ()); files = bd.getFiles (); for (int i = 0; i < files.count(); i++) { App->client ()->xcollection ()->playlistAddUrl (files.value (i)); } } else { FileDialog fd (this, "playlist_add_files"); files = fd.getFiles (); for (int i = 0; i < files.count(); i++) { App->client ()->xcollection ()->playlistAddUrl ("file://" + files.value(i)); } } } void PlaylistWidget::menuAddPls () { QStringList files; FileDialog fd (this, "add_Playlist"); files = fd.getFiles (); if (files.count () > 0) { App->client ()->xcollection ()->playlistClear (); QString file = files[0]; App->client ()->xcollection ()->addPlsFile (QUrl (file)); } } void PlaylistWidget::resizeEvent (QResizeEvent *event) { Skin *skin = Skin::getInstance (); QPoint p = skin->getPos (Skin::BUTTON_PLS_CLOSE); m_closebtn->move (p.x () + width (), p.y()); p = skin->getPos (Skin::BUTTON_PLS_SHADE); m_shadebtn->move (p.x () + width (), p.y()); m_view->resize (size().width()-30, size().height()-20-38); /* since the sizes has changed we need to move the scrollbar */ // m_scrollBar->move (size().width()-m_rfill3.width()-m_rfill2.width(), // m_corner2.height()); // m_scrollBar->resize (m_rfill2.width(), // size().height()-m_corner2.height()-m_corner4.height()); // Hardcoded values to avoid missing scrollBar if Playlist was visible // on startup m_scrollBar->move (size ().width ()-8-7, 20); m_scrollBar->resize (8, size ().height ()-20-38); /* place the sizegrip in the lower right corner */ m_sizegrip->move( size().width() - m_sizegrip->width(), size().height() - m_sizegrip->height() ); /* move menus */ m_add->move (11, height() - m_add->height() - 12); m_del->move (40, height() - m_del->height() - 12); m_sel->move (69, height() - m_sel->height() - 12); m_msc->move (98, height() - m_msc->height() - 12); m_lst->move (width()-22-25, height() - m_lst->height() - 12); m_controls->move (width ()-150, height()-38); } void PlaylistWidget::setPixmaps (Skin *skin) { m_closebtn->setIcon (skin->getIcon (Skin::BUTTON_PLS_CLOSE)); m_shadebtn->setIcon (skin->getIcon (Skin::BUTTON_PLS_SHADE)); m_controls->setNumbers (skin->getSmallNumbers ()); m_controls->setPixmapFont (skin->getPixmapFont ()); setActive (m_active); update (); } void PlaylistWidget::setActive (bool active) { Skin *skin = Skin::getInstance (); m_active = active; m_corner3 = skin->getPls (Skin::PLS_LCBAR); m_corner4 = skin->getPls (Skin::PLS_RCBAR); if (active) { m_corner1 = skin->getPls (Skin::PLS_CORNER_UL_0); m_corner2 = skin->getPls (Skin::PLS_CORNER_UR_0); m_titlebar = skin->getPls (Skin::PLS_TBAR_0); m_tfill = skin->getPls (Skin::PLS_TFILL_0); m_bfill = skin->getPls (Skin::PLS_BFILL_0); m_lfill = skin->getPls (Skin::PLS_LFILL_0); m_rfill = skin->getPls (Skin::PLS_RFILL_0); m_rfill2 = skin->getPls (Skin::PLS_RFILL2_0); m_rfill3 = skin->getPls (Skin::PLS_RFILL3_0); } else { m_corner1 = skin->getPls (Skin::PLS_CORNER_UL_1); m_corner2 = skin->getPls (Skin::PLS_CORNER_UR_1); m_titlebar = skin->getPls (Skin::PLS_TBAR_1); m_tfill = skin->getPls (Skin::PLS_TFILL_1); m_bfill = skin->getPls (Skin::PLS_BFILL_1); m_lfill = skin->getPls (Skin::PLS_LFILL_1); m_rfill = skin->getPls (Skin::PLS_RFILL_1); m_rfill2 = skin->getPls (Skin::PLS_RFILL2_1); m_rfill3 = skin->getPls (Skin::PLS_RFILL3_1); } update (); } void PlaylistWidget::mouseDoubleClickEvent (QMouseEvent *event) { PlaylistWindow *pw = dynamic_cast(window ()); if (event->pos().y() < 14) { pw->switchDisplay (); } } void PlaylistWidget::paintEvent (QPaintEvent *event) { QPainter paint; QRect r; paint.begin (this); /* drawing the upper left corner */ r.setRect (0, 0, m_corner1.width(), m_corner1.height()); paint.drawPixmap (r, m_corner1, m_corner1.rect ()); /* drawing the upper right corner */ r.setRect (width()-m_corner2.width(), 0, m_corner2.width(), m_corner2.height()); paint.drawPixmap (r, m_corner2, m_corner2.rect()); /* Drawing the lower left corner */ r.setRect (0, size().height()-m_corner3.height(), m_corner3.width(), m_corner3.height()); paint.drawPixmap (r, m_corner3, m_corner3.rect()); /* drawing the lower right corner */ r.setRect (size().width()-m_corner4.width(), size().height()-m_corner4.height(), m_corner4.width(), m_corner4.height()); paint.drawPixmap (r, m_corner4, m_corner4.rect()); /* calculate middle of the bar */ int midx = (size().width()/2) - (m_titlebar.width()/2); /* Add the titlebar */ r.setRect (midx, 0, m_titlebar.width(), m_titlebar.height()); paint.drawPixmap (r, m_titlebar, m_titlebar.rect()); /* left fill */ r.setRect (m_corner1.width(), 0, midx - m_corner1.width(), m_tfill.height()); paint.drawPixmap (r, m_tfill, m_tfill.rect()); /* Calculate middle pixel to the right side of the titlebar */ int midx2 = midx + m_titlebar.width(); /* right fill */ r.setRect (midx2, 0, width()-midx2-m_corner2.width(), m_tfill.height()); paint.drawPixmap (r, m_tfill, m_tfill.rect()); /* calculate the size of the bottom side */ int bsize = m_corner3.width()+m_corner4.width(); /* if the width is bigger than bottom size we need to pad with * a bit of generic bottom */ if (size().width() > bsize) { /* calculate padding width */ int pad_to = size().width() - bsize; /* Draw the bottom filling */ r.setRect (m_corner3.width(), size().height()-m_bfill.height(), pad_to, m_bfill.height()); paint.drawPixmap (r, m_bfill, m_bfill.rect()); } /* The slider bar consists of three elements L|S|R (left, slider, right) * here we paint L and R and let the slider take care of the rest. */ r.setRect (0, m_corner1.height(), m_lfill.width(), size().height()-m_corner3.height()-m_corner1.height()); paint.drawPixmap (r,m_lfill, m_lfill.rect()); r.setRect (size().width()-m_rfill3.width(), m_corner2.height(), m_rfill3.width(), size().height()-m_corner2.height()-m_corner3.height()); paint.drawPixmap (r, m_rfill3, m_rfill3.rect()); /* figure out where to place the last padding */ int x = size().width(); x -= m_rfill3.width(); /* minus R */ x -= m_rfill2.width(); /* minus slider */ x -= m_rfill.width(); /* minus L */ r.setRect (x, m_corner2.height(), m_rfill.width(), size().height()-m_corner2.height()-m_corner3.height()); paint.drawPixmap (r, m_rfill, m_rfill.rect()); paint.end (); } void PlaylistWidget::openPlaylistChooser () { const XClient *client = App->client (); PlaylistChooser *tmp = new PlaylistChooser (this, client->xcollection ()); tmp->show (); } promoe-0.1.1/src/playlist/playlistwidget.h000066400000000000000000000052531134030477200206660ustar00rootroot00000000000000/** * This file is a part of Promoe, an XMMS2 Client. * * Copyright (C) 2005-2008 XMMS2 Team * * 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; version 2 of the License. * * This program is distributed in the hope that 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. */ #ifndef __PLAYLISTWIDGET_H__ #define __PLAYLISTWIDGET_H__ #include #include #include class PlaylistWidget; class PlaylistWindow; class PlaylistScroller; class PlaylistControls; class Skin; class PlaylistView; class PlaylistMenu; class PixmapButton; class PlaylistSizeGrip : public QSizeGrip { Q_OBJECT public: PlaylistSizeGrip (QWidget *parent) : QSizeGrip (parent) {} ~PlaylistSizeGrip () {} public slots: void paintEvent (QPaintEvent *event) {} }; class PlaylistScrollBar : public QScrollBar { Q_OBJECT public: PlaylistScrollBar (QWidget *parent = NULL); ~PlaylistScrollBar () {} public slots: void mouseMoveEvent (QMouseEvent *event); void mousePressEvent (QMouseEvent *event); void mouseReleaseEvent (QMouseEvent *event); void paintEvent (QPaintEvent *event); void setPixmaps (Skin *skin); private: int sliderPositionFromValue (); int sliderValueFromPosition (int position); int m_sliderOffset; QPixmap m_pixmap; QPixmap m_slider; QPixmap m_slider_down; }; class PlaylistWidget : public QWidget { Q_OBJECT public: PlaylistWidget (PlaylistWindow *parent); ~PlaylistWidget () {} void setActive (bool); void switchDisplay (void); public slots: void setPixmaps (Skin *skin); void menuAddUrl (); void menuAddDir (); void menuAddFile (); void menuAddPls (); protected slots: void openPlaylistChooser (); private: void resizeEvent (QResizeEvent *event); void paintEvent (QPaintEvent *event); void mouseDoubleClickEvent (QMouseEvent *event); void addButtons (void); void diveDir (const QString &); PixmapButton *m_closebtn; PixmapButton *m_shadebtn; QPixmap m_corner1; QPixmap m_corner2; QPixmap m_corner3; QPixmap m_corner4; QPixmap m_titlebar; QPixmap m_tfill; QPixmap m_bfill; QPixmap m_lfill; QPixmap m_rfill; QPixmap m_rfill2; QPixmap m_rfill3; bool m_active; PlaylistView *m_view; QScrollBar *m_scrollBar; PlaylistSizeGrip *m_sizegrip; PlaylistControls *m_controls; PlaylistMenu *m_add; PlaylistMenu *m_del; PlaylistMenu *m_sel; PlaylistMenu *m_msc; PlaylistMenu *m_lst; }; #endif promoe-0.1.1/src/playlist/playlistwindow.cpp000066400000000000000000000046201134030477200212420ustar00rootroot00000000000000/** * This file is a part of Promoe, an XMMS2 Client. * * Copyright (C) 2005-2008 XMMS2 Team * * 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; version 2 of the License. * * This program is distributed in the hope that 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. */ #include "playlistwindow.h" #include #include #include #include "playlistwidget.h" #include "playlistshade.h" #include "mainwindow.h" PlaylistWindow::PlaylistWindow (QWidget *parent) : BaseWindow (parent) { setObjectName ("playlist"); // Name of the config group #ifndef _WIN32 setWindowIcon (QIcon (":icon.png")); #endif QSettings s; setWindowFlags (Qt::Dialog | Qt::FramelessWindowHint); setAttribute (Qt::WA_DeleteOnClose); s.beginGroup (objectName ()); if (!s.contains ("size")) { s.setValue ("size", QSize (275, 350)); } resize (s.value ("size").toSize ()); m_playlist = new PlaylistWidget (this); setCentralWidget (m_playlist); m_shaded = new PlaylistShade (this); if (!s.contains ("shaded")) s.setValue ("shaded", false); else s.setValue ("shaded", !s.value("shaded").toBool ()); switchDisplay (); s.endGroup (); // FIXME: flickering //setSizeIncrement (25, 29); } void PlaylistWindow::switchDisplay (void) { QSettings s; s.beginGroup ("playlist"); if (!s.value("shaded").toBool ()) { m_shaded->hide (); m_playlist->show (); s.setValue ("shaded", true); m_playlist->resize (s.value("size").toSize ()); resize (s.value("size").toSize ()); } else { m_playlist->hide (); m_shaded->show (); s.setValue ("shaded", false); m_shaded->resize (s.value("size").toSize ().width(), 14); resize (s.value("size").toSize ().width(), 14); } s.endGroup (); update (); } void PlaylistWindow::resizeEvent (QResizeEvent *event) { QSettings s; if (s.value("playlist/shaded").toBool ()) { s.setValue ("playlist/size", size ()); } mw ()->attachWidgets (); } void PlaylistWindow::enterEvent (QEvent *event) { m_playlist->setActive (true); m_shaded->setActive (true); } void PlaylistWindow::leaveEvent (QEvent *event) { m_playlist->setActive (false); m_shaded->setActive (false); } promoe-0.1.1/src/playlist/playlistwindow.h000066400000000000000000000024501134030477200207060ustar00rootroot00000000000000/** * This file is a part of Promoe, an XMMS2 Client. * * Copyright (C) 2005-2008 XMMS2 Team * * 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; version 2 of the License. * * This program is distributed in the hope that 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. */ #ifndef __PLAYLISTWINDOW_H__ #define __PLAYLISTWINDOW_H__ // Qt classes #include "basewindow.h" class QEvent; class QResizeEvent; class QPoint; // our own classes class MainWindow; class PlaylistWidget; class PlaylistShade; class PlaylistWindow : public BaseWindow { Q_OBJECT public: PlaylistWindow (QWidget *parent); ~PlaylistWindow () {} void setActive (bool); signals: // setTime is used to set playtime in playlistcontrols void setDisplayTime (int seconds); public slots: void switchDisplay (void); protected: void enterEvent (QEvent *event); void leaveEvent (QEvent *event); void resizeEvent (QResizeEvent *event); private: PlaylistWidget *m_playlist; PlaylistShade *m_shaded; }; #endif // __PLAYLISTWINDOW_H__ promoe-0.1.1/src/settingsdialog.cpp000066400000000000000000000316631134030477200173370ustar00rootroot00000000000000/** * This file is a part of Promoe, an XMMS2 Client. * * Copyright (C) 2005-2008 XMMS2 Team * * 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; version 2 of the License. * * This program is distributed in the hope that 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. */ // #include "mainwindow.h" #include "settingsdialog.h" #include #include #include #include #include #include #include #include #include SettingsDialog::SettingsDialog (QWidget *parent) : QDialog (parent) { #ifndef _WIN32 setWindowIcon (QIcon (":icon.png")); #endif setWindowTitle ("Promoe - Settings window"); setWindowModality (Qt::ApplicationModal); setAttribute (Qt::WA_DeleteOnClose); resize (400, 500); connect (this, SIGNAL (settingsChanged (void)), App, SIGNAL (settingsChanged (void))); QVBoxLayout *vbox = new QVBoxLayout (this); setLayout(vbox); QTabWidget *tab = new QTabWidget (this); vbox->addWidget (tab); QDialogButtonBox *buttonbox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel); connect (buttonbox, SIGNAL (accepted()), this, SLOT (okButton ())); connect (buttonbox, SIGNAL (rejected()), this, SLOT (close ())); vbox->addWidget (buttonbox); m_mainwindow = new SettingsTabMain (NULL); m_playlistwin = new SettingsTabPlaylist (NULL); /* m_medialib = new SettingsTabMedialib (NULL); */ tab->addTab (m_mainwindow, tr ("Main Window")); tab->addTab (m_playlistwin, tr ("Playlist Window")); /* tab->addTab (m_medialib, tr ("Medialib")); */ } void SettingsDialog::okButton (void) { bool changed = false; changed |= m_mainwindow->saveSettings (); changed |= m_playlistwin->saveSettings (); if (changed) emit settingsChanged (); close (); } /* SettingsTabMedialib::SettingsTabMedialib (QWidget *parent) : QWidget (parent) { QSettings s; if (!s.contains ("medialib_artist/size")) { s.setValue ("medialib_artist/size", tr ("Large")); } if (!s.contains ("medialib_album/size")) { s.setValue ("medialib_album/size", tr ("Large")); } if (!s.contains ("medialib_song/size")) { s.setValue ("medialib_song/size", tr ("Large")); } s.beginGroup("medialib"); QWidget *dummy = new QWidget (this); QVBoxLayout *vbox = new QVBoxLayout (dummy); QWidget *c = new QWidget (dummy); QHBoxLayout *h = new QHBoxLayout (c); vbox->addWidget (c, 1); m_selected = new QComboBox (c); m_selected->addItem (tr ("Artists")); m_selected->addItem (tr ("Albums")); m_selected->addItem (tr ("Songs")); m_selected->setEditable (false); QString curr = s.value ("selected").toString (); for (int i = 0; i < m_selected->count(); i++) { if (m_selected->itemText (i) == curr) { m_selected->setCurrentIndex (i); break; } } h->addWidget (m_selected); QLabel *l = new QLabel (tr ("Selected tab on startup"), c); h->addWidget (l, 1); s.endGroup (); c = new QWidget (dummy); h = new QHBoxLayout (c); vbox->addWidget (c, 1); s.beginGroup ("medialib_artist"); l = new QLabel (tr ("Artist view"), c); QFrame *f = new QFrame (c); f->setFrameStyle (QFrame::HLine | QFrame::Raised); h->addWidget (l); h->addWidget (f, 1); c = new QWidget (dummy); h = new QHBoxLayout (c); vbox->addWidget (c, 1); m_artistsize = new QComboBox (c); m_artistsize->addItem (tr ("None")); m_artistsize->addItem (tr ("Small")); m_artistsize->addItem (tr ("Large")); m_artistsize->setEditable (false); curr = s.value ("size").toString (); for (int i = 0; i < m_artistsize->count(); i++) { if (m_artistsize->itemText (i) == curr) { m_artistsize->setCurrentIndex (i); break; } } h->addWidget (m_artistsize); l = new QLabel (tr ("Size of media art icon"), c); h->addWidget (l, 1); s.endGroup (); c = new QWidget (dummy); h = new QHBoxLayout (c); vbox->addWidget (c, 1); s.beginGroup ("medialib_album"); l = new QLabel (tr ("Album view"), c); f = new QFrame (c); f->setFrameStyle (QFrame::HLine | QFrame::Raised); h->addWidget (l); h->addWidget (f, 1); c = new QWidget (dummy); h = new QHBoxLayout (c); vbox->addWidget (c, 1); m_albumsize = new QComboBox (c); m_albumsize->addItem (tr ("None")); m_albumsize->addItem (tr ("Small")); m_albumsize->addItem (tr ("Large")); m_albumsize->setEditable (false); curr = s.value ("size").toString (); for (int i = 0; i < m_artistsize->count(); i++) { if (m_albumsize->itemText (i) == curr) { m_albumsize->setCurrentIndex (i); break; } } h->addWidget (m_albumsize); l = new QLabel (tr ("Size of media art icon"), c); h->addWidget (l, 1); s.endGroup (); c = new QWidget (dummy); h = new QHBoxLayout (c); vbox->addWidget (c, 1); s.beginGroup ("medialib_song"); l = new QLabel (tr ("Song view"), c); f = new QFrame (c); f->setFrameStyle (QFrame::HLine | QFrame::Raised); h->addWidget (l); h->addWidget (f, 1); c = new QWidget (dummy); h = new QHBoxLayout (c); vbox->addWidget (c, 1); m_songsize = new QComboBox (c); m_songsize->addItem (tr ("None")); m_songsize->addItem (tr ("Small")); m_songsize->addItem (tr ("Large")); m_songsize->setEditable (false); curr = s.value ("size").toString (); for (int i = 0; i < m_artistsize->count(); i++) { if (m_songsize->itemText (i) == curr) { m_songsize->setCurrentIndex (i); break; } } h->addWidget (m_songsize); l = new QLabel (tr ("Size of media art icon"), c); h->addWidget (l, 1); s.endGroup (); } void SettingsTabMedialib::saveSettings () { QSettings s; s.setValue ("medialib/selected", m_selected->currentText ()); s.setValue ("medialib_artist/size", m_artistsize->currentText ()); s.setValue ("medialib_album/size", m_albumsize->currentText ()); s.setValue ("medialib_song/size", m_songsize->currentText ()); } */ SettingsTabPlaylist::SettingsTabPlaylist (QWidget *parent) : QWidget (parent) { QSettings s; s.beginGroup("playlist"); QWidget *dummy = new QWidget (this); QVBoxLayout *vbox = new QVBoxLayout (dummy); QWidget *c = new QWidget (dummy); QHBoxLayout *h = new QHBoxLayout (c); vbox->addWidget (c, 1); m_fontsize = new QSpinBox (c); m_fontsize->setSizePolicy (QSizePolicy (QSizePolicy::Fixed, QSizePolicy::Fixed)); m_fontsize->setMinimum (6); m_fontsize->setMaximum (20); m_fontsize->setValue (s.value("fontsize").toInt ()); h->addWidget (m_fontsize); QLabel *l = new QLabel (tr ("Playlist fontsize"), c); h->addWidget (l, 1); c = new QWidget (dummy); h = new QHBoxLayout (c); vbox->addWidget (c, 1); m_shadesize = new QSpinBox (c); m_shadesize->setSizePolicy (QSizePolicy (QSizePolicy::Fixed, QSizePolicy::Fixed)); m_shadesize->setMinimum (6); m_shadesize->setMaximum (20); m_shadesize->setValue (s.value("shadedsize").toInt ()); h->addWidget (m_shadesize); l = new QLabel (tr ("Playlist shaded mode fontsize"), c); h->addWidget (l, 1); QFrame *f = new QFrame (dummy); f->setFrameStyle (QFrame::HLine | QFrame::Raised); vbox->addWidget (f); c = new QWidget (dummy); h = new QHBoxLayout (c); vbox->addWidget (c, 1); m_remote_fs = new QCheckBox (c); if (!s.contains ("useremote")) s.setValue ("useremote", false); m_remote_fs->setCheckState (s.value ("useremote").toBool () ? Qt::Checked : Qt::Unchecked); h->addWidget (m_remote_fs); l = new QLabel (tr ("Use remote filebrowsing"), c); h->addWidget (l, 1); c = new QWidget (dummy); h = new QHBoxLayout (c); vbox->addWidget (c, 1); m_scroll_view = new QCheckBox (c); if (!s.contains ("scrolltocurrent")) s.setValue ("scrolltocurrent", true); m_scroll_view->setCheckState (s.value ("scrolltocurrent").toBool () ? Qt::Checked : Qt::Unchecked); h->addWidget (m_scroll_view); l = new QLabel (tr ("Scroll playlist to current entry"), c); h->addWidget (l, 1); s.endGroup (); } bool SettingsTabPlaylist::saveSettings (void) { QSettings s; s.setValue ("playlist/fontsize", m_fontsize->value ()); s.setValue ("playlist/shadedsize", m_shadesize->value ()); s.setValue ("playlist/useremote", m_remote_fs->checkState () == Qt::Checked); s.setValue ("playlist/scrolltocurrent", m_scroll_view->checkState () == Qt::Checked); //TODO: Check if we really changed something return true; } SettingsTabMain::SettingsTabMain (QWidget *parent) : QWidget (parent) { QSettings s; QWidget *dummy = new QWidget (this); QVBoxLayout *vbox = new QVBoxLayout (dummy); QWidget *c = new QWidget (dummy); QHBoxLayout *h = new QHBoxLayout (c); vbox->addWidget (c, 1); m_quitonclose = new QCheckBox (tr ("Quit XMMS2D when closing Promoe"), c); if (!s.contains ("promoe/quitonclose")) s.setValue ("promoe/quitonclose", false); m_quitonclose->setCheckState (s.value ("promoe/quitonclose").toBool () ? Qt::Checked : Qt::Unchecked); //m_quitonclose->setEnabled (false); // FIXME: disabled for now, not working h->addWidget (m_quitonclose); c = new QWidget (dummy); h = new QHBoxLayout (c); vbox->addWidget (c, 1); QLabel *l = new QLabel (tr ("Unshaded view"), c); QFrame *f = new QFrame (c); f->setFrameStyle (QFrame::HLine | QFrame::Raised); h->addWidget (l); h->addWidget (f, 1); c = new QWidget (dummy); h = new QHBoxLayout (c); vbox->addWidget (c, 1); s.beginGroup ("display_main"); m_mainscroll = new QCheckBox (tr ("Scroll titlebar"), c); if (s.value("scroll").toBool ()) m_mainscroll->setCheckState (Qt::Checked); else m_mainscroll->setCheckState (Qt::Unchecked); h->addWidget (m_mainscroll); m_mainsize = new QSpinBox (c); m_mainsize->setSizePolicy (QSizePolicy (QSizePolicy::Fixed, QSizePolicy::Fixed)); m_mainsize->setMinimum (6); m_mainsize->setMaximum (20); m_mainsize->setValue (s.value("fontsize").toInt ()); h->addWidget (m_mainsize); l = new QLabel (tr ("Titlebar fontsize"), c); l->setSizePolicy (QSizePolicy (QSizePolicy::Fixed, QSizePolicy::Fixed)); h->addWidget (l); c = new QWidget (dummy); h = new QHBoxLayout (c); vbox->addWidget (c, 1); m_mainttf = new QCheckBox (tr ("Draw text with TrueType fonts"), c); m_mainttf->setCheckState (s.value ("ttf").toBool () ? Qt::Checked : Qt::Unchecked); h->addWidget (m_mainttf); s.endGroup (); c = new QWidget (dummy); h = new QHBoxLayout (c); vbox->addWidget (c, 1); l = new QLabel (tr ("Shaded view"), c); f = new QFrame (c); f->setFrameStyle (QFrame::HLine | QFrame::Raised); h->addWidget (l); h->addWidget (f, 1); c = new QWidget (dummy); h = new QHBoxLayout (c); vbox->addWidget (c, 1); s.beginGroup ("display_shaded"); m_shadescroll = new QCheckBox (tr ("Scroll titlebar"), c); if (s.value("scroll").toBool ()) m_shadescroll->setCheckState (Qt::Checked); else m_shadescroll->setCheckState (Qt::Unchecked); h->addWidget (m_shadescroll); m_shadesize = new QSpinBox (c); m_shadesize->setSizePolicy (QSizePolicy (QSizePolicy::Fixed, QSizePolicy::Fixed)); m_shadesize->setMinimum (6); m_shadesize->setMaximum (20); m_shadesize->setValue (s.value("fontsize").toInt ()); h->addWidget (m_shadesize); l = new QLabel (tr ("Titlebar fontsize"), c); l->setSizePolicy (QSizePolicy (QSizePolicy::Fixed, QSizePolicy::Fixed)); h->addWidget (l); c = new QWidget (dummy); h = new QHBoxLayout (c); vbox->addWidget (c, 1); m_shadettf = new QCheckBox (tr ("Draw text with TrueType fonts"), c); m_shadettf->setCheckState (s.value ("ttf").toBool () ? Qt::Checked : Qt::Unchecked); h->addWidget (m_shadettf); /* QFrame *f = new QFrame (dummy); f->setFrameStyle (QFrame::HLine | QFrame::Raised); vbox->addWidget (f, 1); c = new QWidget (this); h = new QHBoxLayout (c); vbox->addWidget (c); m_mainttf = new QCheckBox (tr ("Draw main title with TrueType fonts"), this); m_mainttf->setCheckState (s.value ("mainttf").toBool () ? Qt::Checked : Qt::Unchecked); h->addWidget (m_mainttf); c = new QWidget (this); h = new QHBoxLayout (c); vbox->addWidget (c); m_shadettf = new QCheckBox (tr ("Draw shaded title with TrueType fonts"), this); m_shadettf->setCheckState (s.value ("shadettf").toBool () ? Qt::Checked : Qt::Unchecked); h->addWidget (m_shadettf); f = new QFrame (this); f->setFrameStyle (QFrame::HLine | QFrame::Raised); vbox->addWidget (f, 1); c = new QWidget (this); h = new QHBoxLayout (c); vbox->addWidget (c); s.endGroup (); */ } bool SettingsTabMain::saveSettings (void) { QSettings s; s.setValue ("promoe/quitonclose", m_quitonclose->checkState () == Qt::Checked); s.beginGroup ("display_main"); s.setValue ("scroll", m_mainscroll->checkState () == Qt::Checked); s.setValue ("fontsize", m_mainsize->value ()); s.setValue ("ttf", m_mainttf->checkState () == Qt::Checked); s.endGroup (); s.beginGroup ("display_shaded"); s.setValue ("scroll", m_shadescroll->checkState () == Qt::Checked); s.setValue ("fontsize", m_shadesize->value ()); s.setValue ("ttf", m_shadettf->checkState () == Qt::Checked); s.endGroup (); //TODO: Check if we really changed something return true; } promoe-0.1.1/src/settingsdialog.h000066400000000000000000000036751134030477200170060ustar00rootroot00000000000000/** * This file is a part of Promoe, an XMMS2 Client. * * Copyright (C) 2005-2008 XMMS2 Team * * 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; version 2 of the License. * * This program is distributed in the hope that 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. */ #ifndef __SETTINGSWINDOW_H__ #define __SETTINGSWINDOW_H__ #include #include #include class QCheckBox; class QSpinBox; class QComboBox; class SettingsTabMedialib : public QWidget { Q_OBJECT public: SettingsTabMedialib (QWidget *parent); ~SettingsTabMedialib () {} bool saveSettings (void); private: QComboBox *m_selected; QComboBox *m_artistsize; QComboBox *m_albumsize; QComboBox *m_songsize; }; class SettingsTabPlaylist : public QWidget { Q_OBJECT public: SettingsTabPlaylist (QWidget *parent); ~SettingsTabPlaylist () {} bool saveSettings (void); private: QSpinBox *m_fontsize; QSpinBox *m_shadesize; QCheckBox *m_remote_fs; QCheckBox *m_scroll_view; }; class SettingsTabMain : public QWidget { Q_OBJECT public: SettingsTabMain (QWidget *parent); ~SettingsTabMain () {} bool saveSettings (void); private: QCheckBox *m_quitonclose; QSpinBox *m_mainsize; QCheckBox *m_mainttf; QCheckBox *m_mainscroll; QSpinBox *m_shadesize; QCheckBox *m_shadettf; QCheckBox *m_shadescroll; }; class SettingsDialog : public QDialog { Q_OBJECT signals: void settingsChanged (void); public: SettingsDialog (QWidget *parent); ~SettingsDialog () {} public slots: void okButton (void); private: SettingsTabMain *m_mainwindow; SettingsTabPlaylist *m_playlistwin; SettingsTabMedialib *m_medialib; }; #endif promoe-0.1.1/src/src.pri000066400000000000000000000013211134030477200151020ustar00rootroot00000000000000include($$PWD/widgets/widgets.pri) include($$PWD/mainwindow/mainwindow.pri) include($$PWD/playlist/playlist.pri) include($$PWD/equalizer/equalizer.pri) include($$PWD/dialogs/dialogs.pri) HEADERS += application.h \ Skin.h \ timedisplay.h \ SkinChooser.h \ settingsdialog.h \ basewindow.h \ FileDialog.h \ BrowseModel.h \ BrowseDialog.h SOURCES += application.cpp \ timedisplay.cpp \ Skin.cpp \ SkinChooser.cpp \ settingsdialog.cpp \ basewindow.cpp \ FileDialog.cpp \ BrowseModel.cpp \ BrowseDialog.cpp INCLUDEPATH += $$PWD DEPENDPATH += $$PWD promoe-0.1.1/src/src.pro000066400000000000000000000012431134030477200151130ustar00rootroot00000000000000TEMPLATE = app include (../config.pri) PKGCONFIG += xmms2-client-cpp load (../features/pkgconfig.prf) !xmms2-client-cpp:error (Please install the xmms2 c++ client library) COMPONENTS+=../lib/liblib.a LIBS += $$COMPONENTS PRE_TARGETDEPS = $$COMPONENTS MOC_DIR = .moc OBJECTS_DIR = .obj UI_DIR = .ui include(src.pri) TARGET = promoe DESTDIR = $$PWD/.. ;RESOURCES += ../data/promoe.qrc RESOURCES += ../data/Almond-blue.qrc ;macx:RC_FILE = ../promoe.icns QT += network ;macx:QTPLUGIN += qjpeg QMAKE_LFLAGS += -L$$[QT_INSTALL_PLUGINS]/imageformats QMAKE_CXXFLAGS += -g ;CONFIG += debug warn_on QMAKE_CXXFLAGS_WARN_ON += -Wno-unused-parameter ;CONFIG += avahi promoe-0.1.1/src/timedisplay.cpp000066400000000000000000000054121134030477200166340ustar00rootroot00000000000000/** * This file is a part of Promoe, an XMMS2 Client. * * Copyright (C) 2005-2008 XMMS2 Team * * 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; version 2 of the License. * * This program is distributed in the hope that 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. */ #include "timedisplay.h" #include #include #include TimeDisplay::TimeDisplay (QWidget *parent) : AbstractTimeDisplay (parent) { setFixedSize (63, 13); m_d1_x_pos = 12; m_d2_x_pos = 24; m_d3_x_pos = 42; m_d4_x_pos = 54; } SmallTimeDisplay::SmallTimeDisplay (QWidget *parent) : AbstractTimeDisplay (parent) { setFixedSize (28, 6); m_d1_x_pos = 5; m_d2_x_pos = 10; m_d3_x_pos = 18; m_d4_x_pos = 23; } AbstractTimeDisplay::AbstractTimeDisplay (QWidget *parent) : QWidget (parent), m_time(0), m_d1_x_pos(0), m_d2_x_pos(0), m_d3_x_pos(0), m_d4_x_pos(0) { } /* * This method takes the playtime in seconds */ void AbstractTimeDisplay::setTime (int time) { // Hack to make display hours and minutes instead of minutes and seconds // if time (or reversetime) is 100 Minutes or longer if ((time >= 6000) || (time <= -6000)) { time /= 60; } if (m_time == time) return; m_time = time; update (); } void AbstractTimeDisplay::setPixmaps (const PixmapMap &p) { if (p.size () < 11) { // This shouldn't happen, if it does then there is a bug in Skin.cpp qDebug ("TimeDisplay: PixmapMap has not enough elements"); return; } m_pixmaps = p; } void AbstractTimeDisplay::mouseReleaseEvent (QMouseEvent *event) { emit clicked(); } void AbstractTimeDisplay::paintEvent (QPaintEvent *event) { QPainter paint; paint.begin (this); if (m_time < 0) { // draw minus paint.drawPixmap (0, 0, m_pixmaps[11]); } else { // draw blank paint.drawPixmap (0, 0, m_pixmaps[10]); } uint showtime = abs(m_time); if (showtime < 6000) { // draw minutes uint min = showtime / 60; paint.drawPixmap (m_d1_x_pos, 0, m_pixmaps[min/10]); paint.drawPixmap (m_d2_x_pos, 0, m_pixmaps[min%10]); // draw seconds uint sec = showtime % 60; paint.drawPixmap (m_d3_x_pos, 0, m_pixmaps[sec/10]); paint.drawPixmap (m_d4_x_pos, 0, m_pixmaps[sec%10]); } else { // Just give up and draw '-' if min-variable would become 100 or bigger paint.drawPixmap (m_d1_x_pos, 0, m_pixmaps[11]); paint.drawPixmap (m_d2_x_pos, 0, m_pixmaps[11]); paint.drawPixmap (m_d3_x_pos, 0, m_pixmaps[11]); paint.drawPixmap (m_d4_x_pos, 0, m_pixmaps[11]); } paint.end (); } promoe-0.1.1/src/timedisplay.h000066400000000000000000000031001134030477200162710ustar00rootroot00000000000000/** * This file is a part of Promoe, an XMMS2 Client. * * Copyright (C) 2005-2008 XMMS2 Team * * 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; version 2 of the License. * * This program is distributed in the hope that 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. */ #ifndef __TIMEDISPLAY_H__ #define __TIMEDISPLAY_H__ #include #include class QMouseEvent; class QPaintEvent; class QPixmap; typedef QMap PixmapMap; // This class is not really abstract, but named so anyway class AbstractTimeDisplay : public QWidget { Q_OBJECT public: AbstractTimeDisplay (QWidget *parent); ~AbstractTimeDisplay () {}; public slots: void setPixmaps (const PixmapMap &p); void setTime (int); signals: void clicked(void); protected: void mousePressEvent (QMouseEvent *event) {}; void mouseReleaseEvent (QMouseEvent *event); void paintEvent (QPaintEvent *event); // positions for the digits, numbered from left to right int m_d1_x_pos; int m_d2_x_pos; int m_d3_x_pos; int m_d4_x_pos; int m_time; PixmapMap m_pixmaps; }; class TimeDisplay : public AbstractTimeDisplay { Q_OBJECT public: TimeDisplay (QWidget *parent); }; class SmallTimeDisplay : public AbstractTimeDisplay { Q_OBJECT public: SmallTimeDisplay (QWidget *parent); }; #endif promoe-0.1.1/src/widgets/000077500000000000000000000000001134030477200152505ustar00rootroot00000000000000promoe-0.1.1/src/widgets/pixmapbutton.cpp000066400000000000000000000017751134030477200205200ustar00rootroot00000000000000/** * This file is a part of Promoe, an XMMS2 Client * * Copyright (C) 2008-2009 XMMS2 Team * * 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 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that 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. */ #include "pixmapbutton.h" #include #include #include #include void PixmapButton::paintEvent( QPaintEvent * event ) { QPixmap pixmap = icon().pixmap (size(), isDown() ? QIcon::Active : QIcon::Normal, isChecked() ? QIcon::On : QIcon::Off); QPainter p; p.begin(this); p.drawPixmap( rect(), pixmap, pixmap.rect() ); p.end(); } promoe-0.1.1/src/widgets/pixmapbutton.h000066400000000000000000000022111134030477200201470ustar00rootroot00000000000000/** * This file is a part of Promoe, an XMMS2 CLient * * Copyright (C) 2008-2009 XMMS2 Team * * 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 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that 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. */ #ifndef __PIXMAPBUTTON_H__ #define __PIXMAPBUTTON_H__ #include class QPaintEvent; class QWidget; /* * QIcon::Normal for normal apperance * QIcon::Active for pressed state * * QIcon::Off for uncecked state * QIcon::On for checked state * * only QIcon::Normal QIcon::Off combination is necessary */ class PixmapButton : public QAbstractButton { Q_OBJECT public: PixmapButton (QWidget *parent) : QAbstractButton (parent) {} ~PixmapButton () {}; protected: void paintEvent ( QPaintEvent * event ); }; #endif promoe-0.1.1/src/widgets/pixmapnumberdisplay.cpp000066400000000000000000000032261134030477200220540ustar00rootroot00000000000000/** * This file is a part of Promoe, an XMMS2 Client. * * Copyright (C) 2005-2008 XMMS2 Team * * 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 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that 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. */ #include "pixmapnumberdisplay.h" #include "math.h" #include PixmapNumberDisplay::PixmapNumberDisplay (QWidget *parent) : QWidget (parent) { m_value = 0; m_digits = 2; } void PixmapNumberDisplay::setPixmaps (PixmapMap numbers) { m_numbers = numbers; update (); } void PixmapNumberDisplay::setValue (int value) { if (m_value == value) return; m_value = value; update (); } void PixmapNumberDisplay::setDigits (unsigned int digits) { if (m_digits == digits) return; m_digits = digits; update (); } int PixmapNumberDisplay::getDigitAtPos (unsigned int position) { if (m_value == 0) { if (position == 1) return 0; else return -1; } if ( m_value / (unsigned int) pow (10, position - 1) == 0) return -1; return (unsigned int) (m_value / pow (10, position - 1)) % 10; } void PixmapNumberDisplay::paintEvent (QPaintEvent *event) { QPainter paint; paint.begin (this); for (unsigned int i = 0; i < m_digits; i++) { paint.drawPixmap (i*5, 0, m_numbers[getDigitAtPos (m_digits - i)]); } paint.end (); } promoe-0.1.1/src/widgets/pixmapnumberdisplay.h000066400000000000000000000022731134030477200215220ustar00rootroot00000000000000/** * This file is a part of Promoe, an XMMS2 Client. * * Copyright (C) 2005-2008 XMMS2 Team * * 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 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that 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. */ #ifndef __PIXMAPNUMBERDISPLAY_H__ #define __PIXMAPNUMBERDISPLAY_H__ #include #include class QPaintEvent; class Skin; typedef QMap PixmapMap; class PixmapNumberDisplay : public QWidget { Q_OBJECT; public: PixmapNumberDisplay (QWidget *parent); ~PixmapNumberDisplay () { }; void setValue (int value); void setDigits (unsigned int digits); void setPixmaps (PixmapMap numbers); private: int m_value; unsigned int m_digits; PixmapMap m_numbers; int getDigitAtPos (unsigned int position); void paintEvent (QPaintEvent *event); }; #endif promoe-0.1.1/src/widgets/pixmapslider.cpp000066400000000000000000000100051134030477200204510ustar00rootroot00000000000000/** * This file is a part of Promoe, an XMMS2 Client * * Copyright (C) 2008-2009 XMMS2 Team * * 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 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that 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. */ #include "pixmapslider.h" #include #include #include #include #include PixmapSlider::PixmapSlider (QWidget *parent) : QAbstractSlider (parent) { setSliderDown (false); m_slider_offset = QPoint (); } void PixmapSlider::setBackground (const QPixmap &pixmap) { QPixmapList list; list.append (pixmap); setBackground (list); } void PixmapSlider::setBackground (const QPixmapList &list) { m_backgrounds = list; m_background_index = -1; } void PixmapSlider::setSliders (QPixmap normal, QPixmap pressed) { m_normal = normal; m_pressed = pressed; } void PixmapSlider::mouseMoveEvent (QMouseEvent *event) { if (!isSliderDown ()) { event->ignore (); return; } int val = sliderMovePosition (event); if (val == value ()) { return; } QAbstractSlider::setValue (val); } void PixmapSlider::mousePressEvent (QMouseEvent *event) { if (event->button () != Qt::LeftButton) { event->ignore (); return; } setSliderDown (true); int val = sliderMovePosition (event); if (val == value ()) { return; } QAbstractSlider::setValue (val); update (); } void PixmapSlider::mouseReleaseEvent (QMouseEvent *event) { if (event->button () != Qt::LeftButton) { event->ignore (); return; } int val = sliderMovePosition (event); QAbstractSlider::setValue (val); setSliderDown (false); update (); } int PixmapSlider::sliderMovePosition (QMouseEvent *event) { if (orientation () == Qt::Vertical) { return sliderValueFromPosition (event->y() - m_pressed.height () /2); } else { return sliderValueFromPosition (event->x() - m_pressed.width () /2); } } void PixmapSlider::setValue (int val) { if (isSliderDown ()){ return; } QAbstractSlider::setValue (val); } void PixmapSlider::paintEvent (QPaintEvent *event) { QPainter p; p.begin (this); // draw background if (!m_backgrounds.isEmpty ()) { int bg_idx = backgroundIndex (); QPixmap bg = m_backgrounds[bg_idx]; m_background_index = bg_idx; p.drawPixmap (0, 0, bg.width(), bg.height(), bg); } // draw slider QPixmap *slider = isSliderDown () ? &m_pressed : &m_normal; QRect rect (slider->rect ()); if (orientation () == Qt::Vertical) { rect.moveTop (sliderPositionFromValue () + m_slider_offset.y ()); rect.moveLeft (m_slider_offset.x ()); } else { rect.moveLeft (sliderPositionFromValue () + m_slider_offset.x ()); rect.moveTop (m_slider_offset.y ()); } p.drawPixmap (rect , *slider, slider->rect ()); p.end (); } int PixmapSlider::sliderPositionFromValue () { int span; if (orientation () == Qt::Vertical) { span = height () - m_normal.height (); } else { span = width () - m_normal.width (); } return QStyle::sliderPositionFromValue (minimum (), maximum (), sliderPosition (), span, invertedAppearance ()); } int PixmapSlider::sliderValueFromPosition (int pos) { int span; if (orientation () == Qt::Vertical) { span = height () - m_normal.height (); } else { span = width () - m_normal.width (); } return QStyle::sliderValueFromPosition (minimum (), maximum (), pos, span, invertedAppearance ()); } int PixmapSlider::backgroundIndex () { if (m_backgrounds.isEmpty ()) { return -1; } return QStyle::sliderPositionFromValue (minimum (), maximum (), sliderPosition (), m_backgrounds.size () - 1, false); } promoe-0.1.1/src/widgets/pixmapslider.h000066400000000000000000000035001134030477200201200ustar00rootroot00000000000000/** * This file is a part of Promoe, an XMMS2 CLient * * Copyright (C) 2008 XMMS2 Team * * 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 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that 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. */ #ifndef __PIXMAPSLIDER_H__ #define __PIXMAPSLIDER_H__ #include #include #include class QWidget; class QPixmap; class QPaintEvent; class QMouseEvent; typedef QList QPixmapList; class PixmapSlider : public QAbstractSlider { Q_OBJECT public: PixmapSlider (QWidget *parent); ~PixmapSlider () {} void setValue (int val); void setBackground (const QPixmap &); void setBackground (const QPixmapList &); QPixmapList backgrounds () const { return m_backgrounds; } void setSliders (QPixmap normal, QPixmap pressed = QPixmap ()); QPixmap normalSlider () const { return m_normal; } QPixmap pressedSlider () const { return m_pressed; } void setSliderOffset (QPoint offset) { m_slider_offset = offset; } protected slots: void paintEvent (QPaintEvent *event); void mouseMoveEvent (QMouseEvent *); void mousePressEvent (QMouseEvent *); void mouseReleaseEvent (QMouseEvent *); protected: int sliderMovePosition (QMouseEvent *); int sliderPositionFromValue (); int sliderValueFromPosition (int pos); int backgroundIndex (); private: QPixmapList m_backgrounds; QPixmap m_normal; QPixmap m_pressed; QPoint m_slider_offset; int m_background_index; }; #endif promoe-0.1.1/src/widgets/widgets.pri000066400000000000000000000003431134030477200174320ustar00rootroot00000000000000HEADERS += pixmapbutton.h \ pixmapnumberdisplay.h \ pixmapslider.h SOURCES += pixmapbutton.cpp \ pixmapnumberdisplay.cpp \ pixmapslider.cpp INCLUDEPATH += $$PWD DEPENDPATH += $$PWD