From d1123a0ede12eb1126eb5eb932d9177de67d46c5 Mon Sep 17 00:00:00 2001 From: Thierry Lorthiois Date: Thu, 2 Oct 2008 18:47:02 +0000 Subject: [PATCH] New import --- AUTHORS | 9 + COPYING | 340 ++++++++++++++++++ ChangeLog | 252 +++++++++++++ README | 18 + doc/man/tint2.1 | 50 +++ doc/tint2-0.7.odt | Bin 0 -> 147062 bytes doc/tint2-0.7.pdf | Bin 0 -> 212424 bytes src/Makefile | 36 ++ src/clock/clock.c | 126 +++++++ src/clock/clock.h | 39 ++ src/config.c | 751 +++++++++++++++++++++++++++++++++++++++ src/config.h | 24 ++ src/panel.c | 249 +++++++++++++ src/panel.h | 85 +++++ src/server.c | 216 +++++++++++ src/server.h | 102 ++++++ src/systray/Makefile | 71 ++++ src/systray/README | 75 ++++ src/systray/docker.c | 346 ++++++++++++++++++ src/systray/docker.h | 31 ++ src/systray/icons.c | 122 +++++++ src/systray/icons.h | 13 + src/systray/kde.c | 76 ++++ src/systray/kde.h | 12 + src/systray/net.c | 119 +++++++ src/systray/net.h | 15 + src/systray/tint_merge.h | 21 ++ src/systray/version.h | 1 + src/systray/version.h.in | 1 + src/systray/xproperty.c | 64 ++++ src/systray/xproperty.h | 13 + src/taskbar/task.c | 287 +++++++++++++++ src/taskbar/task.h | 67 ++++ src/taskbar/taskbar.c | 143 ++++++++ src/taskbar/taskbar.h | 39 ++ src/tint.c | 441 +++++++++++++++++++++++ src/tint2 | Bin 0 -> 52672 bytes src/util/area.c | 182 ++++++++++ src/util/area.h | 140 ++++++++ src/util/common.h | 41 +++ src/util/window.c | 264 ++++++++++++++ src/util/window.h | 46 +++ tintrc03 | 75 ++++ tintrc04 | 79 ++++ tintrc05 | 74 ++++ tintrc06 | 76 ++++ 46 files changed, 5231 insertions(+) create mode 100644 AUTHORS create mode 100644 COPYING create mode 100644 ChangeLog create mode 100644 README create mode 100644 doc/man/tint2.1 create mode 100644 doc/tint2-0.7.odt create mode 100644 doc/tint2-0.7.pdf create mode 100644 src/Makefile create mode 100644 src/clock/clock.c create mode 100644 src/clock/clock.h create mode 100644 src/config.c create mode 100644 src/config.h create mode 100644 src/panel.c create mode 100644 src/panel.h create mode 100644 src/server.c create mode 100644 src/server.h create mode 100644 src/systray/Makefile create mode 100644 src/systray/README create mode 100644 src/systray/docker.c create mode 100644 src/systray/docker.h create mode 100644 src/systray/icons.c create mode 100644 src/systray/icons.h create mode 100644 src/systray/kde.c create mode 100644 src/systray/kde.h create mode 100644 src/systray/net.c create mode 100644 src/systray/net.h create mode 100644 src/systray/tint_merge.h create mode 100644 src/systray/version.h create mode 100644 src/systray/version.h.in create mode 100644 src/systray/xproperty.c create mode 100644 src/systray/xproperty.h create mode 100644 src/taskbar/task.c create mode 100644 src/taskbar/task.h create mode 100644 src/taskbar/taskbar.c create mode 100644 src/taskbar/taskbar.h create mode 100644 src/tint.c create mode 100755 src/tint2 create mode 100644 src/util/area.c create mode 100644 src/util/area.h create mode 100644 src/util/common.h create mode 100644 src/util/window.c create mode 100644 src/util/window.h create mode 100644 tintrc03 create mode 100644 tintrc04 create mode 100644 tintrc05 create mode 100644 tintrc06 diff --git a/AUTHORS b/AUTHORS new file mode 100644 index 0000000..2a12de2 --- /dev/null +++ b/AUTHORS @@ -0,0 +1,9 @@ +Developed by: + Thierry Lorthiois , project maintainer + PÃ¥l Staurland , tint2 is based on ttm originally written by PÃ¥l Staurland + + +Contributors: + Daniel Moerner , man page + + diff --git a/COPYING b/COPYING new file mode 100644 index 0000000..d60c31a --- /dev/null +++ b/COPYING @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 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) + + 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 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) year 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. diff --git a/ChangeLog b/ChangeLog new file mode 100644 index 0000000..ffde567 --- /dev/null +++ b/ChangeLog @@ -0,0 +1,252 @@ + + +2008-09-30 +- change tintrc format + background and border can use linear gradiant +- update documentation + +2008-09-24 +- change tintrc format + user can define a list of background and border at the beginning of tintrc + and each object (panel, taskbar, task, clock, systray) get a background number. + the background number 0 is reserved by tint2 for full transparency. + user's background start with number 1, 2, ... + +2008-09-22 +- better control on icon opacity + icon opacity use the same value as text opacity + +2008-09-21 +- new parameter task_text = 0 or 1 + so you can show task's icon without text +- remove task_icon_size parameter because icon_size is calculate with task->padding_y + +2008-09-19 +- improve clock drawing on 2 lines +- new design : object oriented + clock inherit Area (with draw_background) +- rename parameter 'panel_mode' in 'taskbar_mode' + +2008-09-17 +- change name from tint to tint2 because debian has already a package named tint +- new design : object oriented + tasks inherit Area + taskbars inherit Area + +2008-09-16 +- new design : object oriented + remove task_margin parameter, replaced by taskbar_padding + fixed segfault with new layout + +2008-09-04 +- new design : object oriented + all objects inherit from Area : panel, taskbar, task, clock + +2008-09-02 licence changed to GPL V2 +> Hi PÃ¥l, +> Since latest release (tint-0.6), I try to merge a systray in tint. +> The code I would like to merge is under GPL V2 licence. +> So are you agree to change the licence of tint to GPL V2 ? +PÃ¥l Staurland answer : + Yeah no problem::) + +2008-08-17 patch from i...@noctus.net +- fixed bug : "Task button titles do not update" + +2008-08-12 +- code cleanup : Taskbar use GSLIST from glib + +2008-08-07 +- add 1 space between task title and icon + +2008-07-25 +- fixed bug when (task_rounded > panel_height/2) + + +---------------------------------------------------------------- +2008-07-20 thil7 +released tint-0.6 + +2008-07-19 +- backward compatibility : save new config file + +2008-07-18 +- bug fixed with multi-monitor : memory leak, move task on the same monitor + +2008-07-12 +- multi_monitor : added window_get_monitor(win) + +2008-07-05 +- multi_monitor : changed taskbar allocation when add/remove a monitor +- update documentation + +2008-07-04 +- changed in config file, panel_show_all_desktop + replaced by panel_mode = single_desktop / multi_desktop / multi_monitor +- with panel_mode = multi_monitor, tint show one taskbar by monitor + +2008-07-02 +- add xinerama dependency +- read monitors configuration +- tint will run in 'sleep_mode' + if you specify 'panel_monitor' on an unplug monitor +- tint 'wake up' when the monitor is detected or resolution changed + +2008-06-30 patch from goo...@dougbarton.us +- tint wait for window manager on startup + +2008-06-29 +- specify monitor with parameter 'panel_monitor' +- panel_position is relative to your monitor + panel_monitor = 1 + panel_position = bottom center + +2008-06-24 +- fixed bug : show tint on all desktop with fluxbox + +2008-06-23 +- task_width = 0 to get full taskbar width +- added documentation in /doc + +2008-06-16 +- renamed parameter panel_margin to panel_padding +- added parameter panel_margin = vertical_margin horizontal_margin + +2008-06-15 +- fixed bug : icon position changed when clock adjust width +- removed boolean parameter panel_background and task_background + replaced with opacity (alpha) = 0 +- removed task_active_border_width parameter + identical to task_border_width +- fixed bug : draw task below panel border + +2008-06-11 +- removed the need of desktop margin. + tint specify margin to window magager (_NET_WM_STRUT) + +2008-06-10 +- fixed bug : time/date vertical and horizontal center + +2008-06-10 patch from benjaminfranzke +- fixed bug : draw icon on 64bit system. + +2008-06-08 +- fixed bug : in draw border and fill background + +2008-06-04 +- allow config file on the command line : tint -c ./tintrc2 +- allow 2 value in config file : key = value1 value2 +- panel_margin can get 2 values : vertical_margin horizontal_margin + panel_margin = 8 4 + +2008-05-30 +- put panel below other window +- set locale LANG + +2008-05-28 +- clock_width adjust automatically +- configure : time2_format see 'man strftime' + +2008-05-27 +- configure : time1_format see 'man strftime' +- cleanup code : refresh_pos() + +2008-05-26 +- catch time event in main loop +- draw clock fixed format %H:%M + +2008-05-24 +- removed boolean parameter task_icon + task_icon_size = 0 replace task_icon = 0 +- all colors parameters can get 2 values : color and opacity (alpha) + font_color = #ffffff 70 + +2008-05-23 +- cpu optimisation : limit call to visual_refresh() + +2008-05-22 +- configure clock : clock_font, clock_font_color + + +---------------------------------------------------------------- +2008-05-20 thil7 +released tint-0.5 + +2008-05-19 +- improve usability in mode 'show_all_desktop' + -> don't switch desktop when close a task of another desktop + -> allow to drag and drop task between desktop +- change panel_position : you can now specify top or bottom. + values : bottom left, bottom right, bottom center, top left, top right, top center + keep compatibility with old tintrc files +- change Makefile : + add $PREFIX and $DESTDIR + install default config file in /etc/xdg/tint/tintrc +- on startup, tint copy $XDG_CONFIG_DIR/tint/tintrc in ~/.config/tint/tintrc + so each user can customize tintrc +- fixed : name of task in fluxbox +- improve focus detection (TransientForHint) +- cleanup code : send_event + + +---------------------------------------------------------------- +2008-05-14 thil7 +released tint-0.4 + +2008-05-12 +- boolean option 'show_all_desktop' + 0 : tint panel show one taskbar (from current desktop) + 1 : tint panel show all taskbars (from all desktops) + - clic on a task switch to the desktop + - clic on a taskbar (if empty) switch to the desktop +- add layout for taskbar : panel -> taskbar -> task +- cleanup code : state 'active' in Task replaced by task_active in Panel +- hide some window : _NET_WM_WINDOW_TYPE_DIALOG, _NET_WM_STATE_MODAL +- change project to 'MIT licence' + because PÃ¥l Staurland put 'MIT licence' in all file source + + +---------------------------------------------------------------- +2008-05-10 thil7 +released tint-0.3 + +2008-05-10 +- manage events : 'send to desktop' and 'send to all desktop' +- bug solved : 'close' action now send _NET_CLOSE_WINDOW + so openoffice ask 'save document...' if needed +- cpu optimisation : + -> don't redraw panel background on all events. just when desktop change. + -> don't remove/add all tasks when switch between desktop. remove 'task_new_desktop()'. +- small bug on _NET_WM_STATE_SKIP_TASKBAR corrected +- memory leak on g_build_filename + + +---------------------------------------------------------------- +2008-05-09 thil7 +released tint-0.2 + +2008-05-08 +- panel : add rounded and border (color and alpha) +- remove option 'panel_tasks_centered' +- user can configure mouse event on task + (none, toggle, iconify, shade, close, toggle_iconify) + +2008-05-07 +- cpu optimisation : resize_tasks only when add/remove task, + compute pos_y at startup + +2008-05-04 +- task width adjust when too many task + +2008-05-01 +- task : add rounded and border (color and alpha) +- panel position (left, right, center) thank to ak47izatool +- cleanup code : vertical position (icon and text), + better refresh after delete task, memory leak *font +- panel : changed panel_margin and task_margin + +2008-04-22 +- fork ttm projet from p://code.google.com/p/ttm/ (by PÃ¥l Staurland staura@gmail.com) + while the projet is no longer in developpement, have not changed the name of 'tint'. + + diff --git a/README b/README new file mode 100644 index 0000000..a250d34 --- /dev/null +++ b/README @@ -0,0 +1,18 @@ +DEPENDENCIES: +cairo, pango, glib, imlib2 + +--------------------------------------------------------- +INSTALL: + +cd to "src" and type "make" +as root type "make install" + +execute "tint2" +or "tint2 -c path_to_config_file" + +documentation is in /doc + +check http://code.google.com/p/tint2/ +for latest release, documentation and sample config file. + + diff --git a/doc/man/tint2.1 b/doc/man/tint2.1 new file mode 100644 index 0000000..ce4646b --- /dev/null +++ b/doc/man/tint2.1 @@ -0,0 +1,50 @@ +.\" Hey, EMACS: -*- nroff -*- +.\" First parameter, NAME, should be all caps +.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection +.\" other parameters are allowed: see man(7), man(1) +.TH TINT 1 "2008-09-05" +.\" Please adjust this date whenever revising the manpage. +.\" +.\" Some roff macros, for reference: +.\" .nh disable hyphenation +.\" .hy enable hyphenation +.\" .ad l left justify +.\" .ad b justify to both left and right margins +.\" .nf disable filling +.\" .fi enable filling +.\" .br insert line break +.\" .sp insert n+1 empty lines +.\" for manpage-specific macros, see man(7) +.SH NAME +tint \- lightweight taskbar +.SH SYNOPSIS +.B tint +.br +.B tint +.RI -c +.IR /path/to/config/file +.SH DESCRIPTION +This manual page documents briefly the +.B tint +command. +.PP +.\" TeX users may be more comfortable with the \fB\fP and +.\" \fI\fP escape sequences to invode bold face and italics, +.\" respectively. +\fBtint\fP is a simple panel/taskbar intentionally made for openbox3, but +should also work with other window managers. It's based on ttm code. The goal is to keep a clean and unintrusive look with code lightweight and +compliance with freedesktop specifications. +.PP +On the first startup tint creates a config file in $HOME/.config/tint/tintrc. +See the /usr/share/tint2/doc directory for more information. +.SH OPTIONS +.TP +.B \-c config-file +Specify which configuration file to use instead of the default. +.SH AUTHOR +tint was written by Thierry Lorthiois . It is based on +ttm, originally written by PÃ¥l Staurland +.PP +This manual page was written by Daniel Moerner , +for the Debian project (but may be used by others). It was adopted from the +tint docs. diff --git a/doc/tint2-0.7.odt b/doc/tint2-0.7.odt new file mode 100644 index 0000000000000000000000000000000000000000..6a99fbbf6da581cb8188c50ac20be052a4913bb4 GIT binary patch literal 147062 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 E0O$7SN&o-= literal 0 HcmV?d00001 diff --git a/doc/tint2-0.7.pdf b/doc/tint2-0.7.pdf new file mode 100644 index 0000000000000000000000000000000000000000..873effd49cd5f5ba4c611e919cf2c264fac85fcf GIT binary patch literal 212424 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 z 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 %lK{%B?P^GcxFThbP!tN6uZ{#HC zn%z;gf$n9XV&R{3IJi$Ky_tZ?Coet5nHp;PG25M9h;X=r;(bpO=wq%?r31xN!!h9< zlN@R;7)#LJ2~83cE`gzM6@Ou3!3k+2ToklJ7RHJ0eg~nGBWS4iUIwST&{xXz61B0D zooJAhw+-oL4VOU_$ITF1z0WK{(8aw>NLncEm2MfqA+Bm0xD87RyPDL$bXfY<8XYn= zb@vm<-n$a@#g5tyZidFVa$&t^2FEnT@R+Hs*K)641bEdE;KvX-+;5DUiZK(nkt~@+ zp&M&)rdc@fF$aY#+=E|6H+m?F&1ee^r(t#x1&R~-8Fc%PkbLYWZ3L3TrKI-YX*Xth zdWoQGc^*$5;%R+s>Tf`){@+c7G`J7sVT_EQbs)33T{5ET%emXHumO+?3$Zup&JFaP;FECdeHcA@AmEAq}N5!H<%P3uG9&9}l_!lj!hH8wQO zKPL(Y*Ub#xM84*Abvx(jh4nTt$tfFagj`ryh>8?g~~Y?mpea! z8?nrq(HxuIc#J2=tmLK{&LYB;t2!h0>n(!TlZraYbg*{K4H zznfU`Dw@5UB3sA|BY;e4h@-20GSr+TCbIv?1@!%%GW?D6AhaU*ZqBmJr2Q7eFb~yi zpN&c)VV=YJ@WcDN?IA}<9}dZP>ZtKITs-MW?Zi?sC+@q6fJyv5zx1^hNI<^5^r}`^;cYD62P9c$x8CEnAoLu!SRNDigTOSRaMinn}H;}(@^F{*1?%eWgTlr zsM&T?uheuhz9)0>65OQ(@+K8-IB>w8bPmCjth-|!Pj8we;)ar2JJd0?lJeA&6U4tG z&`OOF=4U}%4Ro<7)bwR4#Qt`GMSOA^R5WVg{FYqo2K_JKP2R9l5LWezQVg%I>&&#` zM<8sR{*_t}sCV3lpZ_%Jd^*P<1ob4{8lurEuWt!(Ft40h@pVI|>RH2H{BT5Z!h@(d zj_$oT&Enggx!6nH!pOzrQ3k|U6Q44Bogir5pe5gtGtou75S>hkG%C=o$o z!M?KSz4JY?0VWn2e-aBrrbv;vCsR?rtEvSbV>FwtX0k@>r<>#hy_Xi0# zxu_kDh$tCOZKU1R*RP~Za*@8Ur*fpXYl>3a-%*=(@W3~aOdTVe&Ao>3BuH|m+U%$b zrr;Shods~N24&6}dz%wW;zN_qQuZpzI(z826=nBVKWRsiSGru8ocDdO_l&o~&mQ8+ zi_NYbnzK%QuJp37DZKpWCXpYt2SL~(uN>&NfP$nkvLUm#of># z=5*f@Ec4skNa5)^uVFLgoliGu54o8?CB>==zaM$&%nUI zDRdT`k+FHzArv86?iTR&kH%VJOvUQ>_o(6KGpxt4{&IeUb1m;bwaL}X$iloU6hIgI zX>u-(p|u*M9=6VJJ^?8_;D3&>zLlQ1@)Z@DLNANrC3Wb{MbttXyf}<>iu#uCZgIeW}S4o3VA|b zb4(3Y))lIxnkhD)3X1B@(LI_(Wp~m7^Pd%qLH)8RF$pL~Qd+-it^kRQLup))s4#ZUz#5r@5vTchoQdCt13q)R^UT z@!LALD|y8FDjO!Pehw%5`~&CinlQgLF-~LSU3aaHWOBzLtNYD|SgKh4F~u#_xxlyDlI! z{tm{xCI1_84pw*K-(+nJ-sR@`ydO{b)<_q>Qyo1ezhd!e()gauF8e(wg$H>kr3rj< zjO|xm8EA#lUO~g#@{Ha412!qeqgNLrB!RJs(?z$`J*Ubh+?!OX5#jR7I6$g{H#Ayt z;egQal`CU19Z@>dD3LU4wvG+N)@P!QWVKwY`o=uj{TQ!-eX3qmYve{@N~|jmx}R}o z@e&0R0xdcak$c4Oiu5|CbvP1?fBF;8p;Kyxst!^RhJ1Buc_8^T>A-X~uH(Cwm5T$D za0%P9)4x{|*~B$?%jInUQ_kg%&v2Er|kwb{tX^2Tog2D|j8%)mXQS^AZ;(QkJL`nlkwOmc=y;-vgUtbyUH# z|HLbW=EGrbJrgWt8N}x#^*(bZ2w1#w$TFvytu(C7oM;rf+ij^@L7MaLpF4 z=I|(2dJ@tLWBe8{9X7Xs(6W4qW2bdm`GqcT{3JACAb0NNF97)C#Y(~IF_oJB(6clH#oC|KaF3*yZTx3xfyWS)%Kh8yvzIOcW8pK>JC(#|Pm^YD1D?`7 zzHaGtr^J{J$DR2cu_6?lGUr?^Z)*z5FP>9#0ZdgV$jRT_e{R?l%P19h2>swaf4kH6 zb7QAE1@qG1+hKDk@LeKb?5T+9DC|Wb=Pw|H^7zjk&3!n^_U&)NmvHOW$3H1H;Sw0n z1O2FLkf*uE+b7DB@gb!@VUb3cPsA_bHfnzXGVmCpDzI=ou+`c#&cMp4%w8CBkH(`1PvQq{W7 z>r0?a$uQ%)=lXJIshP7)^bZ#tP6awX5&`n0Y_KbFo6i9*a>MQ>4b;ubi{zda(}VM+ z8CjWHB6j=GPS_LhFTko4vi%HmvhhrePF6Nk?*#SEGWJ5_zbN@cq0JSU$2+F4fUSu& zgfpq{NuC+mj8nyPss92T)S2q2Xae9tShe&zP|mL`oD5yxX4Y1qYEa(`KzQaFGcYRH zofhpmZ>j~5oF(G#)C7wgBO`+o$m3_KJ~>9}V_w^LaoL+6Ps`gy7`-y8f5oqSZ)UH7 zf*BXKuL9n@jE;s!GoN!+7SRZMO`fxKX|`hUf%vIWx!m|{(X<3r&}6MFF@PDZ(D@r| zd#T=r4iZV6IKAnxG3rg91>&i*f*$S86@ISll=N^su>r- zo&0){fp-Q6BuDpV)sBD~YgIv!#fBWGoGU*ashJqxDYJqcXWz)z9lT<&1NSmlZ9(MNS$_c{!(ZmFDT#-^6R zr#4}|IC<8V7cuISIuoTs=g%TKF?y_D(A2R7tJ;$-PGj*nL=zf<`<1KsIkcv=>ZwFB zx|bGHN{q*x`#VFN<377;)8Mzbg%qz|uCE=0BMP9FS6zvkR(=Zee83GS<_ybVK^ zX8&aPdAtjT%lwYWLOH4U#4qBL*5=94cwG@Q@q+4pw&hGS=V)}p)@1vYQH)LWr_L6) z&=Ybx%A=8`c#DW?LuYQ|+#?Rjsb8N?9Ht|)!xMx82%UxY~v)#d$eiIsrSR5NcE z*E-hlwC&HD>f>ENcG|-yhS$vbhB&q`BI5F0!%ht?jw0-8J?*a?a=IE-T1o=)=%Bot zV*Jn7v9C>?9ST2KWVZTEv^{jQd?0aD>Cc-sQT0_r<7mk82x0PhuVL?uU_Y!{LL{7? z$Nal0-F=J3P}Jvg`iovqU6z}uUmtxu|JGPiL&9%52E9%4=Ijm46;?P_bUs0KivtAX zOyu4hdZP|*`trs_BqI9C@#AHL$lY^s<}CD2?iCMB090!L@|@-282rfbRg<>4*~sO|s;04OMcXw#t0Tgf@51LJgZCYR$JGK`Be) z-zA=%S9TvQ)p=FxezM4e}`w{;M`Y7{*Lbd5WDVe3DjzV;G>mkJ8GqS0QjmmJc-ge}6;fE~I3#U-957B=sIIJ^aTbKiuwh z{z&pCHIv69VDe8P^y_s<$xy%I#o851*lgx+k%|1Lex<^zkdm+c>hRt!^Y_3cx63p< z^L`zy?^h0w(kg!ew$K-xE4xQ&o%3x5mD5K_52MNFb!f@yBimEI&fzx8okuz!?CO!c zqy#zv2P90)KS`@>{q9$+3ixR2yVhq$&=}n!|Mt&pI=s|y;YY$Y3~y;u(&x_>(08}w zRlYXUBolAp^Nj9q;3On$Bm@8=oSOsy0LS#?mVfwNx314J;JR?63T7%auWQ|N6pf(_ zwW=rigWi$YCcTW8oA)_qcRL#vt^OGH%+K-@$~))XZC$q|WzZMiK}rdxbc{Q^_Fv-k zDX;2qi()x4?4GfJabV29Eod5MB%DF!OX3w-_9LgiT)%LaaJ3Yxzx7P=ZAz*VK}QY{ z=tTLmskoXlIZ2()Y%jTN-IdhDdeQoApEqN}U-*L(U%i$H3bqH896hP5(DR`Tma1h3 zX&nbqnccgbboFMaUps}CpymC>m0xz9vj-OU%$ADB!^N!Fnd65)QpqVC5@uS@oTSS& zj2E9tR=uS9!3q`xzt#_Dd z&4Z+JJZ#Y=#ZFr!f8Gy<6|596igG6LNX%+@RAN!he(Npae8$IWK9t3pi*U)R(KVHN zZWs8*OEU9R>o)-37I}m7QdN<*1sxt;FnIw!tXpxu@zn-^<-qeb8E zDR4m#u8#_4+V38KutV=9q$EAZfGa!mbH2Bs=*)C@Ad6GwBc1!t`Yhjmwyf^sPBX?z z;GpX~AV1TNHz&{f2uu!feHKi*;{E z^#TRnK0)Nv@8cliDURH!OjKWEvEtTdntE{>RF)ZILuRl?XSTV%vA>jmnDrS+^Z31= zB17r5bkQ;lNIKz3wiTQGw({n9h8v4xYIR`NedF8HghOz0jpSJcC1?|kk}&939)!j^ zs|}VrwE%%EPF)ei_`)QxEPfJnNIiX>>07V#dPE=oipixk>JNGF>8fZ?Fh*Jz8M5N)6BYU}u11gF`-UB$VAoCjQE+r6} zi#og+4VSbH6`yXIJ$Ah7fPF7Ul6Nz&9Gw5&LZuF-j9ENa%IHhq(ah zxj~W~-$is7V;}e7_9qrm{;Di-GWd%nn&@&nIP9+eF96QCSx;eY)q+Qd*Wu(6xv{G8 zvdU{4_5_X-Zl@J3KJb)1XHyo~i-A@ly;nPdV|t5A?7 zO!oB9k$!t;(Ff!6uUAgn0Y8QPbO4?@#A0735=s39Jbm*aN9$3GKGqB<@y3W2opb4z z?$K=TRuZ~y)5>O`o8w!8I5&tm8CNKUmk!sb+gC4Z+z2G&-Y7UDc_N91#M*HdPYuCs7WIF+6p`8xgE%&%tt1=X; zaPkWsY7@G-A`|}wpIN;j?9G1l5D($xzkt+yEb&BtbMk`4@?`R z9-PN}f`WP)Cn&WP&InPl_qMcd6Ucx0J#5JR2{Vq%zc2zs7|LTA8x}vPQT1{+bU>W7KGF|4Ro)j8fGDu5@I3zFSD&8)Ll<3dnUK0J;Pi&5ft_kx8#Mpw=j7lbx=8L_RU;Br$ zy$j7+*O5UwVmpNCS)ocev~Hqo{z`1?Hm09Q_r8gWOMl&A#}D7EU{e%==7CkmyNyJ+}B-@j7ZVp4$U_3>W81`e)707`WW{7-e#=CSo1w_tvM?D}H%KFXp$qR4R2l-cfX`-2iljIyj!>MpCstkS#o(wc;9RdI$1@h@O) zz0sy@9Y{Za*9(G&YHZNq;tCFsfbhg=^Jz8t}N+H zHUOP&jNAojS)yE>h*(8as7p&Ee;?jV>_3S+Vg|s*G#U^CtB;WNG9Zk`;e-Zmp^b#_ z=QS`%8S5mpJlv6&!R+aqL|=pC_4HISM`zRL`TPupvIf>299Em$L4=So1t5{&BDX-@ z_VTu1NI3^~iWN7O_=juJ{n_-Q6K2E0y8PGp1|MUinsB}mVLLsH`NKCqD z-cG{?$rKGi)#@Y%ch_J_?FE;_{_tnxGs!}3@n5s|!oUA;iQ&Mbwu%$h+tr<=XT9K- z|Iq9!9?QH7>!1B*a{ov)be47`HvP={%3N@zInERrp^3G z{U`RZ4d<%$;jo9WhI7HXem}Y+?g|z@_K$87+yTI2s$IiWYGQu)$MgLs0gMCOWfkj% zDV!)w><3ZXUVRpyqe~UEwxON0{A)=n^R?j*P-!9&u2v@EQ!d}HUNuE5iL#5?lyXe@ zRFPT;EMO&5OLwEro3#>j(tX@_e+H6lO7pNgEfLO4CNAYSsOHNZ#ofb7-~o9m0M)b zpY2v1PIoP@$e^@~0ky6;&IIURTtoDD9)*T;?p5{HQjHxS^)2pS`vsV2DI0};UkP5a z8l^4n`v;T6|38={GSdICB;hbgAniY#q;>i(jMoc}lbpYd_#aFXeuxZk@(}343;thJ zXlgo)NOVr19HKlj7{gPUkuu?H)F7B-1HLkdr3SUFMsOdeXZ|7!3pAxI^F|APts`J zFg&Og@J|V78E{V#wF~baW%f6&Uuf=xZ=Zv6->1!El*7*qepXIk zQ95)cFe9TJGPO0j9KDl&7lqU38xc`Yi7pRMKR`cHZU37SI0*ntv0ubiPF(mI_vDT} zjPfsld3y8uC%u@e(Ky!5Zl0$3u#FA;oaUCP^@+v!FyiAhhk^O>(-h78pz@gGiFcAT z()=MIk4k-#dm{KtX$9wP!@#_PU3A`Y%zbdPybGAQE|1(ClMn&h7(wVka%kEY6F@(e z`3DH-O)r`34FwGXXdzLG8?mok{Fg33P zczjHYN;t?7lITlDUSaba2A=M79@DFK8BnB&I6e<7E{2{41s9{$bibhe`$$m#XDEz< z-7~?BFdlDzDXGaH|JAd%{}-v*_T%%=MjfBCpx`8gP*r&h=llXo|K9`e2Qv1syKBy@ zT44zyVEuyuv}-uMHWyFhH%PE*j$-iUp2c=?0|w7)75?=x7``@H=jxuOWPfA5WW2Vk zB)02`N5^OC%YS9@JO*dN%L%bMmYLpgdHw}R$Y6X{p#GlwxWl-+L_JESO!!s~^$}Yn`YS0dqyhOzVPuFc zKE1YzXTE~CXhT=73uAuo&{-Rs_BL5`2C6quDn|}R z`Aa@<5u^&|z<9Up?Gl#TgFvitlD$MEg3#42k$&fC+ZcG*5HRgkapdrC^gN7(R2=RE zmMr~U%@!bd;ZmJNc{;v;J~9N`C`f^AdnR!NNE>lI2*$T*=VkJviZt z5+i2hT0kQ)!Tuj92ac3IDIkK_kI*T~)^v76<9ucT$H}3?z*EBWWMq84-a;vAH)P1> zouFvyI8D3qj_?KV>+J`K31-i&%_=Ce<3WPyzVLTS51uzLa;`UKEC^p>T02h7h0 zyC^Kw8zpRkBtub0qoXkM(VBL;w1{lVYF-Y`Lt&h_vP>7$c}~uEPqUge60AtuL>@Jl7$uNz z3L@Ua^iy<|J($F;A`(utJ7D)_-qsgc()5xVf3KcGnkl5A+_{N!*1Tap(4q-WvG1!#Rbx(;IY!Hl8|7Nzs z?^#wb)1xvv`Aw}4LexCvK$%(?n>Q3OZdxYumitVJDi5-8lE=Y{1Yx`30^Lg6Oti5k zG#Rg>P0m@5aGv|-sLsiwG&gM5iI;uSF(~&;dx~H6DOk6GTnU5|SXVU(fd&Syu)rK# zQbP)$u(|%eHwEe}@)RhlZq@iZZtM71!Rnbuo7xS=&b0SBelIfX-2Gh4Bio!Yv#HkD zp~gBp>&Q1OEY9)-{agh)L8Cb}urfzlNwZf^LbL}Mb(YtFLA02AIDqER50%rjyo;sKTBd7X_U~l?R3SM@O4b9&vigOn)U)Ns7sDxD& zom#odQ8_loH=MMZQDZde_s^9l#yS}A)s3<$U8210P2HJ=M}0x7I!zxYb1jH4N~6iW zn##$myv1_7c2`9Li9znlB17%Ng{v-sLL&2Y=x&a@#;-Ck(j4@&Skx^LH{f(KHa*1= zSOuNnd^0;ENuPO^PE~IDg^iP#XUEn^Ww9bS{Z5j4Zd{PTz(S zmdc>7Pwaa&3ssBAzWV$3m&F8s_yXfswIQSU_)J5Vu}RKef@#gxYc|O^iQvdpEqg)C zNZHGD%L`Fe?bU)E=MGE80K^le<=ow3Yl<#IVX0Bd+Rb5z`zL)=SdLb;c`l}2Ru70o zP**!^Lsbo*C@7hEMQ>CqkC1>M7N0a0X-miReLMQLD`BK!dZ%1>hQ>d@4ZIEJ=Ehk# zsbcfK_9ARj6<(yj1g#1eZ+C~DQM4ta)9)7L{`~fDlD@X@hR3%Eb<}U|5BM;PdPCiH zN8LR--$-}ki{Gu1L;Ytu!A(zhLYw^ZY8CxGVRJ01*fciva}WF*@?GXv&Pg?j7nW81 z6Ahyc;9GP8MZcJZ;!$pDZZ^!l+hUTh-_ zj;Fpc8#=D2J`&#j;i++U?XObi(oeJM?g>tE5uNJV6@n->L|El^HG3$yhXd{70=4(D zF?Q8GiIJ;%Q!+!7CqidwXNPc#i8n~%VD);~QY%=Q~)Vsb4i`kzDb~Y){Z|Q{&C<^<2Y?duhWX9i+1ZZu0T8Yw>emj;- zt{i){+Tg91xuYaH8u%lb-X=~5Bm2!33A&!ykXW;qXNE8a2xNkOH(kDmBOed$_jSt+ zq?Zk#n$wBzHc=upEYMT3Y00Yk&16rs>s>KU?0F?U>}YBRYWBe3Hy>M|v*$EcQ~+se5vPs5hZK1bt9{{HW4Nh?bm?Ey>2)RURZ(0A!8 zCo{$W`;{_aY3KL*nxSzeFXrOH|2kAv8`F|pj~~uFDk1+5qz2nCA6Wehm>uaN0m-cW z1?2Ss|D*cAkI4T=N%O$e&(cZ87(8@&ReAQEFYu49%fRN>S_Z{)+t>xHhP^0zdPeIRAj%UFbyW@6u zM8X#;@sDuoWnM9xGF%*)(`Ry!U~v+`IrGw}Z7Z`YFL+ZW7dL8eH=i>~KCaH+&=YqD z-jsw)bxK@pyWtV=T;Y)S-&j%GWu3sc>0jI?fL$6-6KYNhtTxADk2@c{>F&=V%PQOb z3K=K6vlGiwI|K;Iex237{7$<>cDuGng}@_*thYlkF5mL!s<`PyNn^CGo?ftd`r0VA zEx;B}UtUrQ;em&uK8~ZeZQuU|DAfbC%KUgXr4m@~&qva4Vyf_~Dm!z~R0Avd@wuB72>aYugE2)+bAV)VzRq^7Q>a4D~ju8hqu zNt>-|8qGf4-2ip`!y~_gt6#PUTIC6Ls(2{jBM}=Ap)p0EJTUz~y3TIZuo};+m7Om- zR*|<-VOVp2!jON{G!E?rJyVM`4)$&hppJwMAT148MfypFp)CDp9@+^TK#TtUO!D~z zW?9oX6a-JeN<;9$DKE-cP%}+ci5|q8U&U?Be-}7#4IlpSmsGq^Y>9r*T^|YGmARBl z0~3%?@gNJ1%s>=U@h*0<2e#>v-R0?8{S(Zx@53jr_k0?%hAoVj<`%_684xhyAL>Ns zO5$Rpv*NTFhvnrJS$4o9BctU&mlUsIPz;C{Oh7Q^#V7|f;Tb{(Ys$e|xDn7bj-)NjT>e&zo6)t2@)L)!Df-G$Ka)Q@G}mjB zy#GKjv-?i7N>Y_^pJyb4HlkkNnsSm4KK|&cnkF9=kmGC+P^9A>!w)C0-__7mYvz6^ zH!(+r%h_B^{XKXK7-eh%?gY)G2}g0sx(;fX*%B^HFelbkMP zmce2&<&hytTGzT1!ai1;!0rlox9HhYIw6likE{ z1;?YFQuQW|==d?F*D+RjYR!p!;|~I_uy-bBW6;&>mCni2n7ahr$Oc&5(9;iTRDdX` zjjJfw19>$P6e&RF9GW$Ia@KBLy`yr;gD!}yM|0Vbh#VYbX*&_r+)oOR@pN9@ar@+r z5iO|oq`LH3@>r1#M70TUbmmSg#(_1Tev$fDbt-O5hwkiD039aHSc!d3RAJOU}%zF!AzC!oF@9gF}G6IDE9^P$WX*^guuqlnhFnriVxNj|EPsP0&(_ z$@}ETMlj`|BEYYNC})by(w45g zlPNa!gqCKXKz};^m;uabwtiZ2+u8WDxOK`b58-k_r&#jlhCLEPKXQ>h^UoHFad9zY zW7UVdT{BBSIb?1iv5Ea|4I#WRdtqWG0y@%Vyi)(z=+;Rc?7US>gI^LZ zLV@m#57huO-oqX(vgS>5j7F!-88^Mwt^hFc(1yew_33g1 z{C?E*giw3nFW{6Dg{!NrX3|Fn<1NvPiaJ~gJe*1qw`}D&i*gGsshAX%Hzjm88iRLG zCUl`)Eyxh2;I1K1StSRUln34|nA}adVQ@|G20dcHuUIlmm-J*46jBJOg`6F=E9<^>rg{OQdD=_jj+h?DP>}j+9qpY{1|uxu9C?3s5_W=RtN?mItLY;nk^& zPe>{=zU6BwP@Kc9Z<8X9qF*ULG*kV)^0@$SIUxuy4B{kVd?}dh^;z*LgEeUdKYbsy zoq%SCR9;RPR6$bfkzTa_1!Azex_`% zN5dzjqmBrMF&;9}H3gYXCsArIrIX@8TzJe*m6v! zwRb_Ex$`ID*KB2F7>|w!68SOlal8B<^svB|k;B&ysi?hs=fmb3feYQqJ|ty(#@c|) zNOEgWm&749c)ej@cbnox?BQ^>j3g?A&`(6rZp?M$F*!;2v@(ED4zY3=QXZW45wV$b4_?pTuB;|NhqPlI}~d&~+1AR-_kBO)UH|GmfmIgcZ}(rL?@ zVMFt~yqEC#cXYT!hbwTHTwrOb8Zy!l*08wVE~#E1mW^_r1Xjj2dY@6*{5-lOx+{PA z23DjbTBIocTuc*#{ZY)UQpdly3gS&59Zqqa89fCxq0#`%l=lm8Er_cuNKy}n;6?^h zN-KO}eTh?)mI#HCikK3(>PgKSoR)+ROM7M*45Wk6H7O6X3ZesP6Wj`o z>S`)pS#|W$rDg2w_Ym30QiTcGzGpy#gn`K;0(L*GFR3Qo`@YPtIx=zCbkKJpNTt`0 zQB}CJX-9VN;M3bwb#@%Awg_|L7}&1Nz%Mn9)&!CCBBnUF3R>jCY{>Mc4XSR|{jCm~ z+L|$TMJN1;J=&^Y^SSbd=42RMbt7a53}>5Ze#iX<%*m$EoS`%P1&GDVjL>|SdjZP8 zWNQBcMmb29b)NYPy5Co|B&I~@7NGOQ>4Ej&gWybLfNVGr zgCf>fuwn@3g^bidJOp5kf#-*2y$V57sFHUwCebA69xVFB9b?=vj#PxC(~1}gjx#vybrhupbL?c*~lXN z5(Wlba=7E!C=q(pbtisRA%cp-RJ@2OBCV)z*{ z{{m=-$@CT?9|7p429mRUXm4YPfW8%j*F?D6s6=Ra15kh@nE_-^0{94+qc8grMXDz` z2dUjD9j8Mo9fMCFkgeKS0mXSG$4F0kUudbaNRK4pCB<6DP=U}XkDrsX@s2z2pjbP2 z;t6GQ3Xq*hw|=@Ibt_WL2m>l)$r;px`PDPMx$DYtkM}kRR}}A$B>Q7LR1g(F6OgjG z<0}NZIoqiU47-UH3|5N|OVkwlh`)i1=dg%QuXHBcK$PfQ7o31Q_yu%%b+8jw*|DU* zAy26rg)Yv!=7)kJjgpP~@$U5^H9`r3c~fs_Fnw4o1ASX4<5is6t7xJLcUK(FpOXSF z7r><+q3DL^FFea=swZc|#gD~)1F6GKW=6Wao9Nv<*E?QcBD4zMn)InR&jM7P^1WAV zbPzGya!Et_1WRa1yEH~Y5%0OO7WRT-BVzKQlUnWC5KS2GM<&_Ga!6?{JJue`n-MU{ zAp8r0E>9d0N*T@zt;_=g61Kl&t*blU9#WO|HUNSdt4>Mvk@tvq+&a!f;Z3(aLW%;X zV|xe-V-H9&Ym>`!oN4o$Otlp>`Bh*bVRII-CR5`)0iR2=ua(QHSJvoIRJ7w@M2^jQ zSO1Eq3>|1vYq?$$8NYhyS6uqfVv>wtLE#M{d%wJ(kw%-AY5h?)H&a*x&qt_Ra;ivE zPM(+~F|R zH?~Mc_xKV|T#TJ`5Qg_g!9j!kP0XCq*EqQ#*=BoddI~_z$LwB``t!MMVv2m@3AOhH z{!?w1cO9}u%^cS)S9=z_AXN=lC#VRDnYB^6+vl1OGaHR#7WHhw8^=l~qs2jVOpO*A zJj#l@#}N%5SSMCZ*2X3Xw5WG_Oc}&l=1~g@*;jm#wFGb5#e{a(2)hzge$Ix2GIR?P zdW^La1AKbET;ZT!d@lOh4r5W`h3nLxK5euW*3p{eTmmU0qN&lb~FEm3=yRj<;C$(Q#$ zw~GZylPrTcU{e57tykGpi+RtTt$0_9i;RhTPo;%b*D1hF>iv#V{BGUy<})r9$kW{3 z%8l^LLN@2-Y%=YFs^ZOYZ8uqqx_;(3_xbl&p#V{}b#d_5dtin+1(OD%psTWGu2rmS8AU>vwf<`mg_jk zy9_p0@F4z?^eJPZhe-X0w!4`6#?mk11y`hJ-oJnt85rb+)SP)<9`;xy%?gCK5mrDV z*?wA{2LKgV95eC(aX68Nf+rG{jFj3|ClBxfIF?%|i&mCAl6iQKCKr=oPHr(_mW0O9 zdLx(tO@;+yVT91u3D7qD7zH{{DE56(bYi1BK^!YWMwZV*I0e}mrp_Su@Q939phxNn z;}BfBZM()y?YU$TN!E>wttymi8dA9Z5M!C%%@yM^c*AYDDa3se!!jD;w4f zY_aME_hLA>&YJY>MR4bk*u*H`$>QP# z1G{+jCBalEx?fOW2q6&~M84Fh+jMB^#R|0@qVRr|Di($(Fk?I6ON9!rKX~;W$fab# zdmLYEUq(_tq|#HFI2GBE+EcMoNJ|tR6yW$Qi+HHR6Xy#eru!IMGRPjIB4jz#rlq`Jb) zy{IIHu8dxI{d8$1OFG28Al|J9o+>7iulh+y=m6_o%Kuras|0^|w7#;`eS{s?F0a=( zblDV4q&PeY2|mhi+g4}5b1K-4b7s)?|CbKW(q@^d<9Mxs40B4PsQ;^)wC?vi_w4^n zq$vxX|1;g*xfuMHm2ESAwMVPIPL_0-#jF42G!f_md#iQ@mQJXv|Ge00&WDD_wRs1( zL`z22eeTr$>N)nNWgE|-vV>LR^ka3)Kg+m3?^2Nn^k=&G2Mh5L<>ct2+Pyvn+B$A&9Ok0xPoY zkR90rh9*}+P#M((oZ%ycFo*234(Hl-KFcDN{srvpFe#&{OX$AP@~xh-BR?eJGb|go z=rDPCpDp1icnuTmJ(@=5v#>0xCE;cz$bzejYqCq-vPiHhp_aN|=w7u9>4~c;c2BbN zwTKxII8|pP{a|-gv5sa_Ty>jVlx-9p_vIpH+)`I$-sNlOwig!sQMllr1gx|N;6}9^ zo<(KJ#)g|vbiLc%^Na?r6J*KVEfsR4vLD20*soB25P6&1&s3Iw&p^)Xl|8f>U?U9U z^TyYbk$i@`w4%UsZ8>?hod8S1~dy6NY3I*EEIC<+ru>B?Q z_7LW5Cr)|CixicunkZYgC}RCWV!h_niS@kl1gLHOM+=-AanxCk)U*njFnlxQjpg0w z)igyeiq*25I+CFqBA~62tm8t$j!&w+CG>-~xbt+}w}!!GVtL2fu&_)8@?YPWsjfz= zxKY+PH?J5R%o?Mn;uEKtGpjOp*=iCwJfo`uPqgYcrVTBV4zF{ks32}k-vxcxgrWnI zxAt#VlRr%b7LM(ydP|wGMtT~8My9@ZsWIjvmygUjHv=eBtHhe0(eYiokO-XI%-kFk z0^|`tY$`nQGzXe;E_7slX;?Tfg_K&)i(~DeU#O_Z!Vup96`BuZcRVFyFA;d+&^=@$ z(Fr_^xzXQh@M?xSC<+aWJOCiLQKhHmlhJY=`|Q*zX$!H|KXv`k3@*YOK-42b& zIho$+EF%5qc79pjQk+NR!fK;ePDHqogKo_WrAW?PwbSuZX%<^ zyxdfM|3+$WTI9X>ImbIhz5b&DGjL_TI|@SjdEi*xVZk6{|R&^(8VVt#ycYR27QCx3~}lxDwTso715uK~elz7b%3hB%s$P zj3(=cR6FpVx9kU4q!!*R`ckRbAj`7~N~V+m_@GjIOx~NjOx?fNVKU1DgskugOwTm! z;YfctU}5dgcy|{=zeQkT;bwDiAN(^-c{obr@=aL&GtI~U4w2a$K)bLS!e8(6iDs^# ze~7=NRvVpvB7up?xXk}1f!P>agvb5ydyp{?LwiEo%cD7^iFi4Fpt&fCx}Dt#@A+rl z3GWC)`>nEFFFFC`?!7nXent(W_q#OBw)UKkFjso=|N5U>v zR27T8)E!TQP%BV7=8e-%#ljzzin5;?rB??2wZ2qn3O8qHZ&Uf^j>NI~4tam!F7XLE zoJXx)zsHSu28c)b%P>*EhYXz0gLHGRb@=#x#1hP<)yl`w{iv8|&a84_oi>G!IBLbE zYHeq%;q~N)glT-_4XQm;u-(Irsujnh_gHM*Lo7L3wl%}wRyZ~&QXT+nhC8wIbk#mPU0x^AahfS+AbSkE+lez^E~?eZ{F*{i)D&eR&@cQW>V; zd14UM`r$@V;r+P5jq02MoQh*h10Wwsi&CPfVhniUeAHV@M*d$BKn^d-XFYdpAa z1@OH0myFFF!HrEDfDWRrf5eQKgOVP@a3Qtf0CC*YrL#-GkuS|4O@$Lah1YcqZ2I;1 z+xN<{ZpSM};wdVNP;uRfBG-}?-MA-C=OYsKTib~kFiqX6ADl`^az+z%8?a*(TBZ|< zz9fTiqp+lmbQSroGNFp$NV4Nq-LTaU+t|nbml3k`m(d5Bv+anN_y=l|W0=h1UjU)| zs5|gfe3m=swH4!{_--ccYY7kJoX=}OsqsNyiL%$gaDYSz!htdkFYY!gNkIs_E&sV1 z4!kNK)6NnPkvn|1u#gffKR$twDiB$t4lMgollO~7*VjU!W(1EfhH8n_7dMIwH)_TY z3C|QaB35^*`~h77sjMz2xt|`Maat|hQ}B#fdc~w4^?pYjFB?tX3NV#2{+9H*4t`fi z#=w<*0hL1OxNXx&5?bR3_B)bzU4Loi*YL}0JqN#IN>BL?#iOWgYyD|>;))P(vy8uD zMx|NdWAr0h(bBD+@*ZDd{i?l|e9?tU9$!BomA=phQ1#Q%401Y@t@{2e<%&$jwjFN= zRWb!qEAyTT$!1KM6dQic^B|>=1BHJAqx4##Y4}b@9Jmn!6?{N2p!SsQ-LD7? zeQ`y9U%vn6d1jtF_uM(>owpDdbA3>vrdK*lz#Ge!y=N+lGISG8Yp%EL8`jIiQ^E6J z+TUVDPdXnG{b6!8__}HzHW(`gf*=^(b}~PWLnsDXy&)vtmlY~7DYD0w)uf6Wd8&m6 zuldu*7u7UJzF?W8LmalrTGt%4(rxE?UAOOzW!9S4`0CaGJGEwkArvVdkCDhD7Wc=66!dl%KKA?z1 zsLKFa|Q&qz!vJ>t$wkE zeV!@rEy(r=K!@B=o_$11^tHf}SK^12p*Yrg?(?ud@-V}(cm^xMxXN^ZfbIr)zLEQk z-MwA5f~ehu()Y2H`+1`_tav$XA+P&d=mx`ka|7)hDF z@maL$YxWYbHNzy6Dyu(?@X9*B?Z2_gD~#tEtjh=6izp-E^A7G`0J%Sa^ZQ5#HN?oA zaIJ2xfPONZUf6dieEPFdbueJT0^TFGE}>XI!~*ufrbQ3z0AkCBwhgwP7oH79-I278{tp1zinC}7 zRK-E??kBAASN$pK3Av!M%&`A{)C{(N30^g#y9Q)-vhpEVolumd%8rn<+9+c00AGF< z`k*8_IIdv5z7VNzU!nR9`21hf^g-yx@j>V5A4Un+c>#h?I~eA!%8PfKI`Bt~YRMfv zt6AiK;c@%RAIj3$q2O%OIJ`4+Iij5T*D}HadoOWwq`3rB7$MIx+AWbS(w~Mq1)Tl@ zfFFC!3hI_2FZEc4?BabtJN3S-7^FkU-Yb02;itAj7UTXLG>5aR?lLw^B~9-Gp^SNNL!b>7 zWOLTP#TLpCHoDNC7pS7d=ns|8ivoYV9|#t~gN=aorz1d@Z`Ek57c{-cata^z9;3Ru zN^B#2ETfPsU%+cEF02_rObxzT4X5Ggz%`Y%zUGbJ?F#O>5lSM77M1s^p8h85&OF7x zh%Hti^0DhToj08o#0M{|6J9zxDysFLRh7M+4w~5VN2G3OY`BTZ!HSMrsgp(v8OM7B zS%SUWT&&;esRndY)KROk-+-oJM#lk^H5!K^A55i|hHWZQ^KSFTuG3_g;TIN;xRo{p8fW1XX5^&t2fn z(-g{2K8m)#ix(87kvG16%W40b#M{_{F3{1K{_=Wh{hluc0a7&jj zmGeF}RlS#3?N4ypZjjDwShH~gH*+e4GvDa+Tq8~2AUrBGq3&x*!Pr^54Gjs+|B`3e zNc(07`ktI(tJ$L^%c81zOxRk$ydn};^#Eg1Bh*}}pAKS=o+l3$E19UWCCF;UJzZ0k zW6352Y<$j~EIW*r%s0W4g#KosDhzXmvxl(|t@gNp5Nh9AMta#BZM;4}`9Z8&b1G>G z@SA)H75S>3M|UBjae>LhtWbnP`q;y$2#V0<9-SLY5@z3qTLzm#>H93aO(U>YW<=tLK1i=S>JHc4gWI`hBc6}kUc_a;PJ=UMuv56Lbf7hh zq1cVlm=D{09Rh_ZqQ+%D78faG!~v1PcUpqb^#x|C2tc^I5|H_7oBE{=P`Hetrr5`I)T zO~%3{_ByO~A>=neAGaoAzMskYYKp1feP#;Vd-3@6UVTLP2H6MEXX97v;6-X^Ta(B- zd@BbJVw5$;W;s$ljczHaxFaC~QOBrIN66|FegRH1)A);yyj+E338c6~egSL%J~lIH zD=DZ1JCd^dT$@9Zc_A!J{sXJvI_r<;xDEK-lrv{qt9A)nO#KJb6pCZ*tX}Yhd8H(q zkvnnxXbH9i&h9T_D+k1)T1>trc*zY7PD9nM{1n3ehQbHARR)!lrUJ-+X9Med`x-yI z3bpyVQhY}9$ZsK%#or?2s3c`y!L~B;vu8rpabo8Uh|B(`Dq1O8Q|Mo4`A2!kwKjqM zcKP%~5meDSYPN>L3P9{-z6zQ>Bfo&k&2 zF4#4d|P1qb1&*uM?08a6#dt@4t3ArR(v#$q5u-b2^w=Efi9a41%4 zYr%qK2ZEb46Q0a)gh=h%5imT!vr&B?ewSLV@sQ*61p&OV*ZpbKqU_2yXJU$INwTt9 z-%$C2QOT=Jt_Lv)W7AGSflP5{+#{_x!@~QA3Ln8DbtT!y=Nq{ZFBh0i=J&#cH0{4m)Fpy7;D7>!w7-LKxt;0J?hxZq0UrH8Y%9`8UR{vY2z= zo2{2F=TwEW>g?3{OTeutp>$)H4K!MZ?BT6)K0qU?|R3hyQNzcxUllQ}f z34I6Z-8^HYpD+bsA~1laD@t5O@IfTz3ml6=M#v_lPYtHSu0jTY$1Odpj$5t()G70^ zIJpg-@19YeBuL}+vv*wu7O6fqQ8yE&Yn|q^BSP~d5>z(RT17?JoW|YGEOXUaC&+i= zsx??t*m*;%Y7BubcXSPw~X3*szs4%hUf}7ol#Wo;r1goC1SfA#9uyoDF zGt1)bX2P>@*Uy5V3KlYKe#1z!D(Xl0lFh&;h}7>vmj$0p{g240oK4L3iri}lh&}y& z>&VRm)+Msqtp!(g#n$lO0$pmCGf44K(SuTCnR8Ydq2$O6{r%-hNOF1eSImpZyuJ;vLjFNmUvplr!|2C zuK;Geb#SP@5knApQ4oH^yZ1!gZmc-2f|3eL8?otoLP8;m=6TS-JFv6b{{g-eHhcMp zo3{y7lyDCA4{?`FnHG)9^S|9IvhT{aw z@vv_+<0&sJg`PSrHMYU|tFFP>pmTickkkmIi~?qptx&29h;;ln3%@x~51a|9H4+#a z7_PyBAo@V15h&7?lATCvR_e|cZ9*x5_<0TSiAV<~rLgVr+0-BL%z_tN;}8hrM8BJL}GZh zLR(b@m`har2D}OhSWm}e1tV|P0eGv%G_Jd7sW!g*-! zTO$~RDdr&XblE7A9G?7Aq|&*jGx{0wq7t_aOnY8hk)Moi6pJUWL7<6er{|nQ#V;to z!3JOdf!>;H3i`ZDWnXv4Ws|~N7ayR>Kjm4rLFo-krFhuTIu4>hsJvk&;XmS0M%iUy zAaq(;2w7dnh~98giOZ${^AtS z2!bJVO+#cLwt(%L8gJsh!x>%NVP)@1uv3-JyD=ovEB1arp1^yI)%fm9cdaNWE1dAK z9L}*1{U|DaShTz4m=A{KZjd+j>{3g_=@lRX>( zGiP#(S_9JDPOJP!x=Kah(k9#=f@FHOP8{oo%SLDC!$>3c8Kr|WWWUV{s7>lwb@p!Q69Q%q25K=sUK4C zav2=_%r2@5#t=@B+vrtIS#=@(YXy@lal8z^EE&J?8ItV56`m*~l@602iMThQh%%m! zF1{$rZarV17Qey*O%a*wB%xYt`<3n*3;2vEt&6o)76CKed?*v2+j@6N#SoWS<{&NqN zH1wer_)g)Wd%s^eZ8-3Q!7F}N*PNP^g-5ite88lv;!>}`o`{?3158>!BY~H~4e2e? z=z{*H_<-iD0h^hLc8@NWd>at71q@==ZU(m>6t?3!0wIIXY;Ri(SUWfpmQ zZYeC2QZ%#)fZ&xXZ-D2{oZA6y4ONYSiz4m#smNcEMn}RE_g4r|LJidsw-aK%3Z@uB zy@Rj~!A+Y)nWVZOcZF8d0yG%*x#gf3_wGA;bu~Q|EW6(gbi06S_%6Q8A4C+?;H$UVM`3Y4S*&H)a8%akq6@Exeut8K+!3Li} zq?azB3YChI)FF1_!=*{qOks%2_>5)Uz~1d6brXb2G?!jTSO7 zk6SPw{l}>QbObQiY9Um{!V$MA+2m5z2U^IwS7*|sDX=FDpP2eCdz*424{!T_S;^gF z^&EWG3nvDHXfIgUp?BU;k694ioI}vVjbvGZKhl0YG~i(>Gzf=Qdi78LzBw=jhYvm= zjI`VSucy?f_Gw^1I* zt3jTj0OADc>wC?zS3qtVymkLU_G>U$z4utn7EqVo62jgngV7jbm|by(988aE3t)mB zQT=GjvBW!7XJ3AZS5y(^jV~Mqfky#zyqJ97K4~Ry+F$MscxT-PbS3+gi;vV&K!)+h zqOC)+1uk0!#^?OSdulqw^Xr79bYbJVX&T{#LBv>*{$$HeXbkAm1{h1AE<{$smc@>n zk#4v9{I40iUliEaF^GSr`ND1i{|gLmkJ^yfj_U9fW%NO9l6K?lUKP%Lox4GJDH1T; zO!9l?T~{gGKp4q>$aI{0!Zgvt*)3we;e!G_FiyC+JU!`=NxOtC6VNw+Hu2StiA;i{ z=>uLCT5`-;1t$sIgu&@fJ=az?_Y|<_7y_!J%$oiUY%X$)=OH(}-D6_Ua_Hg{X_IAQ zLwGCBe-3Q@2yrbgc{LoO8_PtGEk)6IW&mx4l1{$L23^bsY8i;O!SQ@yiU0f&+Og&P zel>#5{^h|2x>~XZUXE%_39|U#g zDM=c)pfv+xLFd)mWyT zcpaSF9fJj(o$H2$RH%`~n>r3S1(2vKQU2@l&W0v);*Y;E;T-%kzj$y&b~SXu&u5LJ zKInx=M^Yg_!8F)TKumzyTgvFhD+hrs&jF&@1O#_unrY4LLo8XA!fpMmK?K8Rmo6rO z81HfKzq-QEDJTHOa(6eZnI}4e+fC#l)FyZ9PJyM6%$nW4 z0=WN95${{Q$o?NJ%m`h-;1jKI-JA!Hx`|Nvqtx*;jO5co>R;thJuM_^Nn|*KCp(%d zm2XmC<1CH}+)VOF63KL~i{e}|qTv8wbbr}6!)^AI2EmS9)t6$7K04zpG1e4wQp{uGQ&UQs#17I}aC1Y?3gFp8ruW|amtY5!VFw6@1@?Fo)@K=KfRkvy zN@Fk1jI!g}8rY)R$>DC9u%WpHBhqo6R{)?pv&>=k>^x?#|BCJ;5|t*L;zDQD-bUx% z8nF))fff+wD_so_GnZfnONI^lt+cvE-1hLgKa;C$;)^A$sE2i)Q1l_vX<15AUhmGH zQvDY)vW|_ob9hr=CKmdSTLal7I@}O1Eax`m7t%?X;uQ1pd77(0$cRQX)HF6avP`#t z91F!{GL?(axKfR(G%%Waf;d=0W+Gy@6elEnKu>nUPW_Z_bWq!4ok!|w_K{#vg*qs9 z##is^y$m0r|39mW)Ajklm)_Z3mW*W3dK!(OcIG(Z9j*}||HXn(k3bzOPUzEJQ{R4q z@*@ptRmmg-XQ-8R0&abm{DvELFuD)4Q?2+W6yqw5>G}3ba!43?*zC#y92FImw&$K= zG&`br^qPJY_B>E@LmzR&upYwe@%?JILuRGCNvK?c3;F}m|3XKT_@E_%RMhN_+d;Pe0LcZ&z$_LM!?YYTPirU zqKxqPJ;M%~_DuQc4Z z#NVvMhrGTmLNosd5bml2KIG3Gpo}a8xzT2x;c>a1+Y_lSfU)@*L{FdMToKju8i*z# zK*Zf5b5kG}Rfm%=QRz5)4^A+PhO*V6NP=XBg)B+XlE@+@LgrW5nhK48GS!nh>V=3$ zhPVbwo8tmDWKxZqDX>s6T7@4QPD)B2?(FkNGg|7$T%$V9v}F6QoB>W%q`3epE*1!y zi*(NgLVwoc9EGL3oN)x4cxN{l|0V}r$|X>q!%$H#fdzhLGTV8W-ls#SSbcjq8bz+h z8mA?&dZ^4-Y~q2L(9T!(D0m!4^YwF-w}$X{8*liYUzTtezhTmfN%EB|7 zRqO9H2v_R~v4;7wjaf&soi-$Qts7D`V~eRTjE8?hHv9cj-rJNBG7lR(P=k)bKqT$w zQ{VT4n?K|Zi{!Twhgy4L=I3vNAXAU_ypAg>$#0dcC|pZeXYcaka4ywke)(X)akTYw z{JhKhyjyFvuSaM%>2(=B<>Kb0E*~Yz@N~=^CESeWF*@cy*deV+@uRzW>$r zk>vT?( zmBHbg-WcGXGnB4>s^Q%GK*yG4;Sey{~A+M9cYg_8<=| zKXnTz1|T*~iGl;Yi~>)0>Pipr@N^#|>Ri0k5x7qOQm_?EhU_%GP^1x6uK+_g^}lcN zu{8nn{|W*I3|*T3kM|9TQJKekX5Tjp3^ibl70u)Ix|v6c?{@^3oAuQ>T{V?7XQ|N< zFK)a-hZ1glhLE4#67{pya(PW*Jc~^lSkTLy`7BTUl&s1)C5jSh)cI7MNuXG@IVPJoH{!rBKzl8=Z2{(1NL(g%{$ZcOmUUYhf%QA-Y ztEhC=gK0PrBXo{@u#f_JGIstK>>0rm=}*qxam^q!Zu893&-FQTa z_zr+Mb{$Y0XJzoBpOJE-rx>E@_S^)hwmNH33h1s*4Ajw-yWN4TBw-vIvhTkKNei_AHOZ?Er zwReuGiyfj;jLFUI%R~&x9p)4OiBdh|T@ z4vcfZzMIiaz3TyI8SR>R-zyr*>I`BEmnBXX-ezL(g? zo5=`D*n6AZkpf;hprc(gJ3+TH<4zwzz`}IFIa_)GT9a;*hnxyxpJ7zu&%(Zm!gRFT zC|V@XNENotjF61J^!R`8#5rW$pl(e#w_&laZ1L6U#Jx}T?S-*|HNu9Iv7pvlD*K8G z5yPg^zsYv3__a>AOLWZqM}LvIxzH2tvdwvrH?xK}X#3x~pH$$})3?B%Op-#^)h7T%(%3OW=bydc4vDYp^?L5hHxuMz8M!ae}y|o5GF1L5CK>Gk9-jf&;|5dWBVj zhDnQ;kNX4=9# zDzk@cX9AqqXVPwSOy1{cqnVI6IdOf=FzVLiZe!q6DJzh9+?(@3Wow|^ojg^Ou4**f zeEuuH{kC{=nB=-fh>N=^2+I+mnhdxHaIwdiMFL~R%q7f)4P>u#u()jE+H5$t8Ei@= zQ(`U3AibqsWs_X{*Z&w5r3Kic@EJDpYKzo=8NxH;p||1(RU&&a-Y@}m>DRQ}@4wYH zM;|z}RGS|;c-XFltZeYO9g^t`wjMreo4?A1J*j&8+bipi{JVgF`D4(4X+2KRL{zIX zYpL@&yf@6&K)?>RPY`t>$S|F>|6bPw*KLCP12t3liunvF(|pe|xzeyVIVX8@E!d2S z>o6@JsH8dfqe}=Mn)JY0S^{t<7;r$=>MYnuaw7yvZO-VagiZZTaG4cTM3&D7;T;?k zvU{%?@Ol*ES*w5WMqVJ76*vQ3?)wG+Lc-QZgSLpY{;OlQ3bCz0w9B}XZNxe7*VT*E z3%kbcUn_4i5_WS^X3P+qttXivQ%sO`kfVP{n#VO>S!L5EaPn9Uly6Kf&SOvs4;a1$ zfD7@$R(e8!XumO1L`L((Ad`aztQ(Ya$cxdI|}w6 zu`Czvz?2Uy`KfrRFW^-fFUK{h4NA1cSOVGz3gcuQhr%5^Jvc_Mb}DK0zq46iN2wGD z5@$z!1;FflrZY*x+zXIMCC$Rsi7Prs6PXI*+DWZRq)sV%ms( zsJJg>T@&na98!D^1Yb)yC7x@E{#jX#Z~Q>A;_<6$OpvfpyK!L>Qrhuv7jeAnJ8kE5r9fgRvA6A zal902a-ujhhhWXQ$}@pU999Dwz}5#~8R%oo7=q?IYU)=*{r4?4hgxG-F6Nbz2RQ>_ zM_!cuF`!yO`AmEwAL-<76a?82k8|5;c9bpUq9*t3Y|AqV1;GPp$;(nZ%lD$}3@xY5 z(XJ`|2y44OtL@XXa%A)GudW%Pn34bF9;>-S0zBx5MpcG-d^nU=B13g0MIJ20TY#8l zZh$;ho8BVV_4G{kbN@H=PMXw>FV_J9C(YhoaP?|tH5#FwB-;qzwjB`qiT{LJvyfLQoh4p3fp5t<992{1F9ESI-_zxD+ zQ(ivMbBAmvE1u;?U<_>#UK@Jr$WaSQN?fS5JIEAWwlTvDE=#@oN*}=g4Nh3_7-Me_ zcJAMxbD)?caxl2$bd9=TK?mqCO!T>$)tZ7t5*7bdILeQlIoVfp*V;6D&}$uj-eRMj zF=}qx^m%x4G`Sv*3%GBy?LP~&Mnd~r8|h;FqusndvBtu1QW&Yv%kU=zY~Yi_JXt$1 z8l@b$@s9%0CeL=g@_K7q4`nr-u5*jF3CagOWO_El2=@uf8i++U6K2M&~Dc`LxN z$sz)C{bCtp67ww-1WGU1dTo_kaXw;|R%$SdLUC5``j+ANx$_B)VV8yytun|&cn$tA zY5nUTzD**W2Soo*pi%IlV*gx^aBqpQ_5utTj=TE>g45c|B%*x)qWN$r+2vuMfSE@& zwujQa@PTt(9sv;t3*LN%?)7ZN6`o+Tf}^$lw7&r=L9@&6z32x|h*z=M-faTnp^pcs zMXzKBg0d$Ks-mCwB8<)Z-wx|f)u&|$AkPV5mv%|JHV*|tm@Yrrq7d_4boCC ztmZyTkUsS`JAFmRRtk(coosqtZkmzQ`$RN2Lv59HD zMeT$xI6FkKeR5GSSg`91E$R}P?tI$+5Nd+=UWAz zD8<(&)LG)a;_l9QBAL5v{Mc7LI0+!%(5M)1;&X+Qxa(4M*ZEVSYX{QlLp`a~hD}rxOxJoH|RTCUW5mEO&>o~d$JfAF&g6ztt4=kdOr zHrza<#A>_DXzHi&CP|#^a?%e+mW?PPSW8Xp3jlFaOLDFeqIJJDZU~eiv&Ka+89ROo zFXRixEQcKo$m zl5zf-mLvOYMD6Q8;%O8@-%n`jKkX^+52{EANro*n_TeXSi?H;nuuQKGwv3`g?P^&q z0h^8+OA_$YdOKVW2Q=~GK<8FFsT!>Q_8kA*;%ZVvlbQhk*2bB_FdWObv?{?gNZZQ_ zi}SVzq)e=1y!y*}$wN;r$d&q!{!;8n0wJuggW6Zlxml`-zFDaADqwi`(1X7~znLBZ z3&O!3=U~zXfWPTmCnM_;b5L}UZ*wDO?5}M917OEust-?<-j)1lKNGl}V|^A*sk-fE zSg7P${b32VA;j=OC=x zv4F;JVl?0>xl-8QVh}DSKi$+F=uOy9!`oD2<0<>aifJIqy>rkIZHnilYS`J2=94P1?6)2@;XRu2bqn8(g=|)|)U}gj|1j=foG1p=t(!+P-vx%r~W1&Ym19s+6sB$0kF+qh8eB}2()dP3n)}M zr;#24pWh;fA}xVM`?oTa_xR1=TIcFtQ7@&1Ys2<^O8BCrR@-ypU!H(E(5Qc=vMr5oRvhT+FXpF22x`u*pxae!$H?^cx zpvDoF3q$%mQC{Y{5(q&snvg_2CyTqNNKO}&31n2UbSLs)q1BcTd?liRpaGrxPnsHm zSf8i8z4Xaw9Y~$ocuTT-9>c6M+bg^gW7cZhc6T~=gDl?u+0dk4*M?J&_PyDozZUXK z|2-i_^*5R@{DuA|i@BGOyysPQHaViS{F63LoFI_xHVUgM?qiGf$e}^w@N-Zh8W*I~ zJ7EX*kmx&L0tw}W1!RJTv)+ysf#f~rg=rqd)`#DP%;J1U_E}y(5o7R4r8+GP+uXys z+s$z%^F?*`Y{+)N!i!?JU)6#XzD_$!DU4slAAV(D_X!dNdW3Ms3p_bbQTFpMCuE{2 zZgziFw7)Sm*)QEHVVVF}`W91KGl(KZP){E~G`}yB9T0$DarcBc=)U%4pB<58pE#~r z27$||HkS;U?^ps3Vohneb6~_5!ziq92)#3L@B{>_!5zQt@(Z63(=t}GxZPw|;zj_Y zTxuf7?ZXE}XIR+nOs!oco9;tkyiFMOj{JbExQGS_34#VC*KmqJ&DH2>0F)!Ese^}|Rx3*{X`u^>d z`olFxL4#%QN$YD zXy?x|is9o6yO6N|K>GK4o)^DyF#tJqw*I+9YR_0KLG>_X1H;tQ=ctW8$!KtBu}b{B z$Odv=F%p}XB2nyBY^25%$Ue5Ovd(_`xQANZqfQ(&1#N}R^6mimHHty-Wt-e$gr?RF z@4uDT>!RMC^Ep$fDMDqJ_0r{gQgRK54W9w=NqVzLaz9kZBjT#@9woB(&&Bk#gXKhP4 zgN)R+7%6+Xw~z$29i?`$CfU?NTEwrS7c>-`oQ5s%4ahr0`(e%glJ!>;vXzd-p1|U1 z+LrMO7XT+1w`s6Q!wUXJ$}Tno^&%i#`D60MGR=ut^r?slemQ9VFV6ka7kkf8zB>Yn zt&V>DWErTi6yY!Jq9?z`VrZa(V111rODLt*qLt(#WN2bn*@doUmc+iWZU%YqQ|ZFwi#=4kdFb5Rs)u5~v;+_%$k`kgfB!6v3VTaD zgEJ9Bb29}cmy*K}{;DLa;@vRHvA7t~Q!Fa^0PenOrbt}|ww}84fO3TEi7W`6MH_Xl z|FhUmHXD@13@Yzi;KXomqWfQ3A7VAni(WMg>ap;o%zWz*r1ozzZ-O!Rx}nHjR;fB%VyLzEkz&_ zZc(OyAYmRm7f5<3Djcr03X;BGW^Rf|C@ZVH=@ur8 z=J3SVXsDX7-C9gnof%NJJwbw#wyTg81m~VDb?V9C zhG;r1r9fV>qy8_p;Va;|S5!bgV3(rbbGmmI$aIbdvw2)-wPt+Xa24alX?p3cPF%Av z>bNo`!1&LgCPM)C=E9Z~*3ja%JroB=PcWMrKfWKEpbZML z(2mJIvRk1&S?;oFMy?`Ay<7tE!9=*L_teY=-u4?Xbo;t@yAFdqwRZ!M7Sr0>PA#y$ zsJi#OK$y_7np%YICqS7Nhi&^e;;NWYt>@XI2*=1Lva#Po7hGTc(V6Z+0r&%AmLb z2`){^@w3K$)cKEPE6J0znqu}hgzOfCQ3GeqQ~z#Tt~;NWzQUlsj}q0k?}A@Tq-*ph zo=o;`9))?nATx#kOj&b9dQy_V=RGqg}w(q{9xRx;9H0uo;xCfHbI9EioYr8fE4q!)i%|#vBJ;d$wQ^n z9$nP-G~4a7XI*z)_h;UUyQku_1a?G!7khN0lY@zJgF06jj6G-f-Zxeqj{8yDZ{msNY zcqnT#dkbOkPR=XUB=3aowp;@!rOE>OrfJ8@g_0O)?3NdXhaiU$-cD0=i^Q$>ozIcW z>mA<%I=_jzYsfX@`%9BoH^=m3{mlkW=g^#M8k9=y^8id~1C{m7w7OHUcZ_gIl_G(T zQ7+PF@wtBW<^KcF4%x$#t;m@z#p&_)zEe8%(%k)H*^Aq8s`D+Te1Acw`aO#0+Q^-f z4cc{)E^h%l{0EjkSNH}B7>%%%BPB)z5pOXc;ey-Fqc(0Pr`GWq;{=Q}o)lLP^bC@A z?6n?JIOL!Z<2dh@88Bc`*jnO4`c6)NN5lBen98drBNa|kv*q@#Fu3fRC4_ElM@sV~ z$L{b3k{>wWcU4jpQ{KqV!H^`yNIpU|j zQ%$>$9$!THhnO{lc01q2maeDr^A5e*^gL$y4DdM;;&qiN7*KybG*t5Q=quS>3XI|u zfxYY=&2G8J{9B0f47Z#%fF5RoQ-J$733G(b z|J9j!B(?3=(a7&MJ70URNFw|eYH!ca{MT5M+_kC3Eps?4Bs`(cQzp>s19}xi$8%zl zb*0V#U7|Naj!ygn-T~N&5854mA~o%Bp*y$nZbD8ngZ{8mLsc(2eF2U{ftZ&x1ijr7 zoLl5u3<7%D(^?5NtdC$a8Z1DO@HA_6^yK}hZ9k!NAIG<9`J68c0)A-JxkC(S>2a;Q z^$&~z!{c8FNS-~$^h^LIuX^_x!p|cr8b1jH^^*Y2MUb^1*8@xjkxy#pX~+w(;6~`N zyX4sZi?+s9REfsz&PDVJ$+ULmMj1yPp4mWf54Sy@AeT5Ft{Ay-mU}}u@un2atOFCK zGHj`R>a`%9x}GMtP>Ev+BV~I~g_@)g3GUm$J{i!#@r0vjlevcv%VuiT1R?;nDok$5 zHx5b;eU`+uA=tpV*O()OZ&=70jhxf?e(8uXA>N3%{5l7IQr zoEWRmj+Q|9*OrV4b4C#Plf!i+%6zFKpX>5>BvWt&l7ZuWUUp)d6n5@nE(Ft*L>KF) zfaFv+PcKBv)=ABL%_{l40O7?q`OOYZU)SfqwqL7lf4&V+c)K_?L2bLNcN?Ga&*PPg z#Phpdb+p}Zd|Gf%!wqCAvyXHf7qO#6DG+E6(|hkJI(tBx)%++4BN&$?0vG{WQNDg>IX!4&on1Xf}(N zWr2o?`<=}}l56ti{#HjvbFL{nGQ`OhADqu$5{NS5k0}uAP8I`(w=0mFj|uRU_+_2n zFUwE_a`D=cWyJpn6t{*@)& z`|R5PStW?D^I1`Yy1taYF{X72UqzJ6LO=%b`XiCxO+@; zi#l><`!7;cp)eZ_9Z2i3B_z(b8pV+>Q$|;b?^b(=OUS6qM|1x5%Ed--OO0w8int|F z{48%bl~{j+8x=!ETT+p>?EtyM(}N-%BY*d2XvWn9m}!#hAcemUN4S1LLU}2Le%SFs zZ?OLQiTA%cvL8((*RNhaWc3)iIVuWkSuqA%lPspSab#K zh4kB9h45Zya{s%SAXIc;aB46G%_Q%l-oPElRnH_cssg#lqaWVn?4>!NY0sIEor{cm zfj=JF#Dc_^$K$&#$696n)U6*GN30~A<>D{`C~f0^a$mdds-Lyw?#pl8A}8Gf$VUfZ zBYHw*iMesWB7~LzXtWO)IZzW;lmPOeIkEc{1!vpI?4Ygp0Cz zGEwcUc?8X*zLLG7r^aTw(uX?>b#>n`B(v8SOxe;{KM@dR{H1{)WLIJ|d(rJRXr^{x zbQu!9`ZMk3;HIyjuU>xh2(?8|a+>fhS_dyACXvquX`Lf;KULP&=&DiVIVrP!uI?~jb_w!Ov=rA9&J+WJia{!1lHAaRc z88d4)MUV_O-7ZSlr%a(H!q~Ktf_8k)br9#^z0E`(Vbrm6=u4Wpp?MstQq4S1XHtA=LNW1KX-Nduoa16L* zO{c6auZ}UyM}q&bJYKc`3K_j?AL3caa$|6O)}BDBg8ROMWm9>P-Ue|ng+i;pyr!nF z&p-PHV<#2hh6tMiIZ!-*^Kv2JVeYsASRbNF?Ny|IXS^K~*1-uz=L03+EUSwbmyE)) zM$s&;#~mHkyf`$bBPlLc6W^tyRtsTYDKRF+bopB+NVGi~k$J4x39boZ3hzVcA(Kt) zu6tKFU(mHiq4U?zRrjAeOf5arr%#_PhCXxp>C=xz z4D1kQgN&GEvkYeD1pdMumMfxt+N4ihHA}nUGL<%_Mn?EW=9^vEimG(0Y-`wz58OeE ze=D5`ji!_KWo|=U@W+U_Pj+b3Lr1l=k8Y!zfC|G%5Nl&p1Q0>mi+IR}K^>h?a1SSe z4sj>+%N&`*p+c@46LCxzX7(Jrb~>NdsEWHn(NYOvwl+TfFasdm1_QHNM@6U@&%%=Z zRmTmf-$Zzy?=py_{)P2Yc#Z$tijiWvcsVO%ZW@4Xd?$&B0G*9SB&};CVxv5@jHiK0 z3e4>VR4is~BENRsclwgKheD}Pc5APB+ci78rz8!juX^aBhCIBY#Oz0qwX|{Ax+TAo zjs7nb#nx0tajthy+d2G>hnU6j-V*FM(7=6soQMmwNXrZDh(O3zD`?GeAmd!LCPMx? zdXPj~xs+QDAoM|Y>LU{V=;sm}+efs;EBm5nEch5D;Ps?YSv8POOnf5mOd43p8Ek-0 zCd(`B7R_!&pX~Yt(fNCax4jJ;_Q%QuEUx$-ES69p68%t)KcjyUy%IR;bu)dHw`S4~ z3Kn>i)RNa3MY$mnB$JoPm5h>%#8FC%31fmVS1qF&Pk%fkPF(JhHkbFON6u?2> zK#CwI#~>zh1PW%v4$vWUDlce6b}^Hs1rt-LZ(KUblf__gnz7=e%sW!TI<}D|SatA| zCW+5cwT;oe&1I37GU1>BsZ?sG&X~hFbD`qQD~4JZ_sAr5No+trc)!T31M= z1S~H+)Q&NM41Y@xMe*=;(Zci0z);aWi5cP@A%0%Wrv|I73IDdr{%OvZL1 z(?#SBR>x~i4q2=K+9i9TpuHY*bikqnG(J1G6Gy4G<>#j!AWuT4XF+FcAVPQvi5^2Q zma$eK5b@3Gn?Yg8$*q9pA*XY8MoEjpM?%R2TQzvLR-YL`W7@$02?2sMk4yxV35{xj z(IVdsvy3-zFo1)czF`&~D6+bs$;s5rB(&Y}DhGhJ-_ut8VJDM@uO|i5lc}&;Q4Mw{ zdU~r0p>y2>tTor-mRE{C4&k&`)qY8SP!ROe$&*j}xUj54*nR;q=6!D_=829{5c6eJ zT6pSXmdfi-*cE({F1gIIywmp7ax?O+1Iscq3;8726p4}I=_1Q9FzJ&0^*ZZW%rKukSw?Mr7ox zb`;R##XNzklElWuBjJPI$T!LoM#-XIlSogYqVqxnEtMM;Y|x1KIb(A47+G!M6|-0W7$O{bY3T}@OPgf!X(ASj8BuXk8xJOV+7-BOfMW> z$91{|lkgMRoPqX=*Ej{VD41BK&eLEA?7e%@L z*tA;KOkL7W==}pK>#82%G9p`;g5f6vn679AW_VGJ0`l#^3HDT#ph!nud4gmh265v| z{(`6}DU2KuntsENS7z-`LhFQ2sUsZ@O~0p|Ke49AtCWbxca>wJv%FVBC|Z{!k3Y0? zD#a<&fZ_Q-na22XNKf974Uoa+7!^L_JfuRtMG&U<;cWN#50aX_I)(s z)4|!ZZ7*sfO|wdo$*3QQR^GE_gwjQ=7Z3I?pIA}@<*L=R`o zQb%&NPDyB#TkQ795fSyI5-XNC``bm*hFMI$ve!F$;mZV*{ltuFZ{wiGAQ5@QloA z)Uo>1A{`m!WLC?_!Yuib3v*hT6~?`>7?-V*lnjw0de*Sx-zI1_!P8%@Ny2+8iOA7a zmcVFRmPs-h)7rt&E{b&b?9IGla zsT^RE#b#n=X+vV5tp;a5CRwVIEkiv2;RY*%m(V!-GFW;nNEw8p-Yh zqTLAg(>p0!kNKO)kU3%#?zGi0s)$(Mspme2+$b1pHM2*uiIETyy}3!JBCNJES#BjyTn%qYO1N)?ukv%V!& z9?E5qxggRX#yQdlt35u`|0mZFEv; zexn_m%us8pdvBsvj&%{K>S99-hQF&t+qV`EN+zQvXNN{i5rmsWr!~h`q1*Cz+YKYX zYKoFBCzGSJOQPFvG}7P0Ct%K!Wv;!Y3qy2Tb1HX-FJ8OBejUhZ?NjnDf~G^=)_$na z)L;oDZW+peZ*t;I#p=oIVxGT^hSNY($0Mf02VriAq9d1ZByv|%CgX0m6uZ{okqDn6 zJ14XG27euzsea?ya)VBs0-tA14Faa<#8&zm$p@tOleosf+FErSBe(fAs1Tw@vW98i zp;twWz4k?JL5@WPp*jg7=jj;{auFlX)fd@H2q&Aok4{G(x(`x%KpbkL44C8zlq)h4 zv02ET3*>DNeZX_u#;%6~=hQsk0nnf#Dx(2@DnH??z+__`jI0a|0$_+UvBhHvAlz>8 zR3yR`#_T|(V9&#ZsgQKl69NPAU^V=YbKAs67Zk0Q=0PaA0^u4}@w_vsL{krMBCsmp zI~QS>JG!8l;Lng*RVG9eXdkOX`;*qw@bN`K^VW#u%%bbgjy0ZpMfTTR^rkUIM+t0a z6TAM%+s$9i)};x}69HTpV(u6{ zUzd%mTV-hd;+a)y*^go6tC$4ORu+k^k&(1shM@@ciC0eh=CpS-5=Fr*>YD=W2GH>I zzLQ)_MqR4QcTuLTSY}qz(v)+Gh#b!o6Ir*$&Ilopx8Cf!$XVapqhYG+ka2V9!N$bPdc9$Ny6hS%LJ0&o1tw9T*qTYq2`YY z2O8WNQqWj{3-9D#2c(^&z!reUk4=@2-VFlF^OiMVg80M_1Z8 z-*P7B%(bILi|d7#uz;Yigr8+))>s+gadJ&){}HawYQ zMtY$NWt$>O8S$W4j2;)5gSrCxi4w<;7Cy@Eu6V7MOdt~3vEkJuz%*+RtxOJ$cCDMv zVJAjDHl+YlEqLtI^8Vl^6d{iW4%$;C{q*3q%Kc`ZA%2c*z!01$Thqi$-6nuCg_O7T zHYe8}D_=GkK&D7bjpq`D()5A=*064i9~=ILu?#u&6g$w}PRZTAiT#?)mu@Z2*~F$! zt{x{@0wbTotK6W)s$Gt~0KPx@^pI{;?fU7Amcq~#IXRg=@6o7OVtrDd+foT-%v!~u z&;{oS06wxl`*<6>El8%grVu3wCEGL-Y1imG z_r7NnR((v8Z1G=(-xvwOA8uEku3Z^8xBKD58@009&+>sP?$DAV_R|M!sb2D@49UBn zw?C&gc1P&&qAd@9UMy{2&*A_Eckc`RQEo)6Q2oFA^PYKdN^J&OJl$SQ9c+93@E>tf zU-Qi(SkG;YE4Y|sKlPxk_1gZ?&yWl4{6&XH@cjJOHf1P8H<+@|HMEWPY_dZsD^zaa zh$JAe!TeC(JB_;Q_8njMSA4 zzON7Ic}dXSK9g{VGi1&kDA$;G%u`O?Sa;yW%g+rjm%F|_TR-Hv=Iy9uXbwK1VA0$Y zlok0&RT8Ic89HgJ-w!~}Jj-IyK~8~TQVSrz zK3xU9qsvu?m2$^bsKG3#u&SU1CTTJ|Qp*B~b zDWfp6^Y$sS^OmyWhfmA8hDq;IbL2^MTeSy+TF3k2fGd*wdl@xLHd68K$$V#zQz|l> zk0EnkC*xg{dOlh8h2yp|b)4~o)|H|1ZJ&7Fdc*y| z+P9F|L!KK2ZA@1wt~Rmi4t4&r^^h6roBXu|mU1H3F^}xd6r_u?9M$h!G6A4J@(zckn{!koOJm^v%0f;Ei zO4h#LdO2C=KN9Nz`!PJs&_1Wzdhw3>t+NBfMY|q}zigMiQ zPazB6+^S?%37ikl+$>)GM&9-OW2Nz-UuCCByLT0DdA_~%}tyat3rf60l8*N6D zp->EK&OWI0#?xa&%k%7q6O`q>bwyr8#e9gRvwn-A!v~DdiQMBg9B0me7M}E@vzs9k zq1$`~>|3+ovpWY@9}6`sD<@#5I1i3?7R-L!-r%G-A$6JNvzscFf!gOrmFCXUO?8g! zG7@Bfk{RF7KZP6T(o*PXhs6*RVixlkG&rnGtlL+5YM0^@YIJPL%f^{0tQ1UlQex_x zgYim~hgtcrar|V_{bZ}QhY0jK(Ae=C1HwI<2+)ayB){fvdEf4uaRg8idND7sIt9(L z67896YnKsLu_~ME2`9<6XHU!!5^*OCokWsnAJArk!4+lX3CzBHI;GYa_7EA&%aVq032PBK_2`zifx%VjG8qdd zr1E3UEUKE|efmmekl=PC0Xmhlg0}TS=C99K%=@oClbd*rFbm4?Fw3MY!wrZ`h)#0d zoy+CKKPe^4Z>Y3wt|7|oOlnD3wMSNG`(FOkAXsCQCb#`OsKH1QVa$#~%eK#J8ySTy zz%ZY;%&2>%*5(rP*=YM~{0RX?(0CE5%IL{LNgdfQ86Nm-` zA|nGaP*G9P;LCfkFflMOv2pN0*f@ANn3y195FP;`5fKp6K4KR$jB0PxTN0tiz`2=o9%JOm^>1UM5ECEQNne|T5{@B;~ehzvwU zK|q7ok|6-#1X2HxwEn3CARrnB?wt0QcSyrxuRQk?YL zuWOy}b;#5NZp@z;kL^Cq$}8ka$31Vw@u>bd_T}i2@PPpqU3@J18=xC}$h1rPsRZ?z zI2Bhus8piUcob)D=c}9>{E2)z^{^TWt~d&QUzz_r<&$YPkJ|Ki?#tNITD1{v38bbU z5%o*`u3UiuYvB-Y;wKNHij`)zpQ$bzpXTe`Y8YW2(q8wfVyO< zy-!{X^aycMt3A3DNxveB`;>mwE@Ja8*LV4LSMTTbI)ss{{}Z1{61smxJOdb=!9SBe zEUHIs0e4QAR>F%bYXGbNi{>XO(@3^?ZCUCcXF_g_(vnfyg*I% zIVsO7(vS`+$-L>5Dc>7f4Qu2d16}9LZ@XDq5GjO~#%kXV`@dlBauK?|&CKm}^S$|Y zO#F?Fv0nY7k^G6F?^mRXKw~^Z<|Z@JF6*WxlO~z;8rq-a@t67pd(~YpugOsHKVpgy z%BqG8`Ga2k$rJOxy$0<$voL$oElNl**lV&Dr6`I+jve=LMoS&&VX-O76bNP`+|&vF zr$pM8MMpRABx?UgUMuT@ZUqCagz7>9BSYufZVmlc1fc%G9A$4h60F^F3z3wi5wDX? zkra4I`@D`VZscNO@nmc zg^G1m;^DmCOMgf^B{539HnYzPwXA8aAsFC%l-!whc0l=K=U4)EQoIaHGk5iA%9GVVKr= zAiX(a!bT)UpMcp(*P?JDOZ1wLX0*p<-)Kl$7T0)>fC_mdyF!ygp@KOlrdNgErF`OR zUd^+2733hBrZ2=?a|#3q!{jRz^hw5|k*gds^T+QJ?A`n^nXOC_T#=>Omi<;)0bpJ( zXjdAo{VH3Z;gWfAL5u{(Y}PEeBXPg_SkhX%6W_;QdxdrLoht+QYZb+Sufq$R+LT{` z*^cqq&dDk&yV^r{M$ypE{{B&VviZ6R{=WflF^8y?==_CW%2SV;8Vgx@E{;j9e3=g` z0p3pN@sy+==Rg@8L=ID1HDh`zUO*D{2I4>0ym+bO3l=p zHjdfbanZcEpuE7mh>6u2j$=?5s(=05em^^BT;;%5upL_~no3L^dGEB^Kucmzlwd_FoEWNlhmtH1vJ;VwlAVb?r0 z89J{#;w74|ZqLXifN7qSq{u*)G~%g*&zY46O-Rz_8zxQXQ)Fy4bRdyU6lJz)U?G@Z zYRiJCMK8S0yxgu&(=NU_H@5r!`Px+bk!4nch)Dbe+v>FNZhy1%h&^MtLR zBz~@2GOk9`QQOI`a|#bkHk!_@nhx`a&C2QFYa4n#T*sTRk8tyu{+JIyfjhwe*pGmS z2e+Ppjt`kuhMr&GpD*x-lpG<$fqKdVX0<|EAA=#zLS;V==ek-c=ZSWsP#ic}CB_%t zfxe52g?vcz5+o;?vtXtyfJO%^W~kC=PiwHOG*L8js4&qSH+yrDWR%p4yIwpq4xDP| z;3D=k;llpVrE?Z16Ha^ z9uv!>C2Q&?+H|eFgts((s`f5fKFy85IQx{Od3CXK2R5 zr{fcV&LR`g^UI{A3u=26gJ>Cets-EuIzCZN{Xjxp>vKkF@8<1)hHMlm#A_zd&~u!I zIK;6RDZsQ|N*bmR(dVkaJVP?iw~RTq`!DrMj*yf(bDH(&M)1z@#|%qxfN3A7b^a3n zK#9o|1{Z(uhVkAE>+++Al|mD!4;E9 z&uX7D>vI~s>VrGnrgk>l?!Ogt?3GVXf3j(>5!MgJ+VA3iA%AxBfsoPq0xi#5(WHv^ z!rS*du7YS<+lYJp`{|r7O6<5d<(GyQ4(fIY_osfWCVZ52B`S+cxr<+N=U;M!ao0ag z!v!JRLa4+AmAfC`g!d2=``+~s?WnFYYL-2;x%E$`OI?0md1qYz=_}`w!;dVdLq}Wh z`+BvO+X*3qw2aObtr+@N`hZGE&mv!d;QGvJu`4?tP{3pr*J8PiW^(j#cO#G`+|_Xq}=_^eidv zv8l8V(#bel{VsAf9DUzhzS-v9!Fu@w{S8=}#dzVBQSj}|ogGt9+3FN6etoq@)O54> z<06)-7g{`I`0Wd+6(os4|0p!acY~V#t8K~EMR@9UZq?O~&#NU6kQT9AGBaGVr@)DF z`o?^GrvkrNt$ATNC!a4Adw&B`SZ|7!*SzCe&PzTHr_TfmIAeXs*U6-6AfJa|iIW!x z@2k4&8%Ex9xv8u2Z1=oHdrRAd()I2Yf?L>@djj)nfwM+-*DmT z8BFV)4x3!vm+8zNQ5J=tsxqMSX<+gqbYj~c2$bDbzQ)yIstH0F9DlbvQhFr>@AJ$% zqjKq54+v`nzqAwU)VDyZk7;`?lb5LXCfT#MnBwNQ5}LNTC7R55*n?)0pg#bAR}eqyN!L}RgZ$^CL~4X#f<8e z(#QGT1j~55e3cr1tJ2H+Pc9FO>`hmSg;&1;{@2w86-c3J4kUUiyz(R~O~Vqi;!l{q z=cY}(`pD`;#ArEO%Q;;0{q95k?(%aG>h=V`9)vi+Tw z>dH$RzX^F+JE81;QTGq4ZnRD9)B_~9NbyXNC&{tk#& zVwh~i3Ql^fRD8U#JzCk@`RU<8iIAK@lRF)+m%Kl<&h2IRC$)Iq7O6$~q*HAn;$Kzm z9T^83)AI(X3>-+Q1}D#D^r#X`jgymI4aHg48dL2 z_1nHH=7UEG-Es4F0l4MkXEf^i>)bgt9ie|$!+eL$W&f%sf>(2R)6o9UDt!zRb^Qgn zcqLri^Uf8nZ5Xbt8LsV*I6GXM-XBh|Gx5@xDE~F3O~Kxl~=9C^){& zsjD-)broaQ=P^M<7ll;Let@fyIZ2&U1JQlp)BjNJ{KW^W0Co)PVJUNlEabTj8&vxl z_Es5w&(|pDu4-|Wsu60wGPtYE7|l#{s=3lDJ8NyLlqLIB|XMbGPX4vK)z!kYSN{~ebRr07aCRDD%_hwJEUsT6*p6hWt2?QP~KKJy*H z2rp!D#G0+oy&^MgOoD9d7b2_Ps!i#PqV09_n}gT41*{OzecRDSl_L|7zezWgAtqG8 zm*O?nUI4d)1jt+5)F?`};81MXhEjUtyq?PvU?Y;XdjzY=7InczTNS z6T<}&{Nf3BU5nHXDiq+KJM4zwsQ(haq8}CKdv-Ft3Iigd_2moQ15PZ?@;D(#(bXUo z>O!r=f!=AVf3fLnZ*pQ3g*`EW*=T62s3(*a35%t8g zcHo;%S`^R`D!y^EK6fA9Z3tyjF8z$vZX{6EZCsAg%nW7v4Any z5}4#DoB=Lgb$h%?E_3sy37AK-_Lbk$%)3`3I-WF?P$&~T#6$ev?n*g`cv4KX;P}<5 z-3Xgo#?ei2Ct>~`Kik~M^Wgi1#bve^N3_A4ZuZJu(PSAwqbde-zT;;ef9}L?OftS& z&CaF#aEQIFwx?g?;S2JKZ_bUaxR&Jw1;t==>Qg~aOU+eOks)-g_b z3}(B3U;)3>|lt<4~32n*j{Z zOXZ|K;&xVMx15nl>7LO&;dZwDD)d6S?cIv|5jw1djYKi)+R?b%X26s8fZrE7aexfK zeyzSbW?Kf$3WYP5nl-={Gh#!@f2d05=*N*kvL6(2)n5n;|kbi~?Q5bqI zF3rQY-Rd0FJIhl@QcC=w<#+)(UuFOCoZ$=74qemskly{QL&SObjHb1aaFg1q83N-AudX_?m>L) zrj|o=?C-?ETDzW&Nz_r&t4v~ft=BPu$@q38(H^UoHsXMCzLNYMr?NR%Hj@H(&K8JL zdWFRZg~h#oNdUFiWmbNZonbwg^*m9i(Fq^FNK$dC&q~j<+-hpm3PsD31ex7Ur{ZwMCRGJTAU0BH5Y6rM>a5kJ@EQ32lD^a#h3KGouO*#|sl zs~|O<#%078*t{kx2zVay$mO*_WN1D!M%x3Ws8TegdKs}cbabL~p$}95^NKfoUDgfWVxMnQ212f5ptk4t zPgDi@R1Tpuf0_JeLh_Hr{|0Gr*9bQmZgJD>Unc*F&OpwAiG%)$`z33VB8z)kO(@ju z{+#D&m-p@VUeTj%1tg>+6QkagcwfjZh@24CrIsl?=t`d9`#NT!oRlT{y`Q-qx3x*P zZ=*}U_x~Abl-RFSL2>YSfgByxUt2ndOIVtV|3f*9S^+K3(2!EV8NZShP)kGV?3p@X>F9(fE9nu$| z%J5IyD@swFwmw3lBpA!E+tiY?JyddFt-8t*m@0Zq-c`o9@=3w%1c^kzxa!myibj!s zDt*qgzMuFVSvSi5tY7gD{b{F~I}~4N42)h`u+VMsU`7LVbajK6E)>6=*0IOBfxZF_ zJ;x1-YIb6b(=w^iG$Y>V6diXstk4I(es)G1ov{a!g-RFY!0`1^!m%b|j0uUcp>enG zQ}L8OJJhA}Cf1idelaEU_)xTn#^8%2G;(=Yx&qKeJPP<0fqR1IRvYY0O22@ZAmyR9 z1?UPf@i!Fcd+Gzb^tEDaVWE7H9ul8dwXs@^FnGj_+jEt*n0tzFa271xNz#SEq>sio zpj(#|?*`;gGTwfPww3b@m(EWzh-MaraFY*H@|R=fu}Y8W38-TgJMoh_y^rW;lw0`P zSF4PUCBMhWUxlM{iHMu1CEEP1L7JY09qjq+kgc{FM__iuGXa$|mA#AjtQg%PjU$5T zp_EZYr=_RCgj?OaUBU{py&S=Sje!{-tx){PorQTnUc zikeFpJ)AGUkLfGr^=4|VAnSg9U&7=t^h}$_Vnml{O9fN%*iQ|7SyySVckqvhp(;NJzCZF2f=KVVn)>9h z0Gkl^zW8{fW7{8Nep<$$0}3>pQ0ab?T(^X?18Vr+-G3xK9Ey?vB zpS==*B9t7+O6W0&LHy4Ax1Oq0WargZT`naQ2Kk=idMmj~d!E@y}w5`y$1?h>nhNY-h>- z6jx|H-rt91w!Y~vd-{}DpqHD=+**Q7K3P!sbk(JdDuwv6TuSh6c@1wqNF5{e_YdUS zA!ih#5_I61iE)K6dHuq(%gBPL-kev~9H7TypmPX>duswZ9<@gWI?8GgKqsUV22uvE z^u!ZvjjNVBBtNww49ef7UDYZ3lG0rrH1{tN60{(k`MiSP=D{{IWu6Gr&>{{rj*;AjjA zD&qeMu=i_*;em!gLi5n3Fo4M8`?p%*UKUl|JV%X*uk~jhM@3)P%cyAf5`6M~Lrxf| zb(_t|nipGN<4kwYyqu8Ul|7;Sx&hEtJGj_fS*z-bFm64;5(j!Er$TFfxF`!-&Ktfy z?6Fa-7oTr^NtzF1Pe#f#r#mwaiud1SlE9=_XRC1H4`M1eyJ3!OQAD+_V_tk+br@Wz z5D;x-#SG^hbgHXo8)TdcNU4%wkv&eyK#7jQMrt*wMYJ`7tqvDdtX&vC!74{>OKHq@ zS%sIa1uPUl zmR!EoSG!9^_FsKPo#>c4i|Y9pOD3Fj=N;89ExoUu+Fa6d?}fQHr>X8u`bBFF z2WWbV2gE>$yq&&9k&JLq`PC4Ti8tdiXg^mi4#_ms3M-*KHrlp7hNx)eqzqtQBY0<0 zb>Bg}g$U9`LB|CJ&=&egG16m(s*(%|dT4$^3NwAZQ9@!|bqA}qRdvhxB4Hp#WFndV z8l-ycLf?=?-%CGBi;R*NK2N75<6SDrA{+F~h5Wq-<$q5fs*2>@>=c_nXYy{AP5C$A zGYvrFlw$cHOn-?0uECg^y*flee{jJ!&?NFfQUT|At0U_olMfkzbT6FknrzSnQ|#mo zGOXL5`NZ=3Rl#R`Z~t2<2WUq0I5mvdnd}CNJz8#ni~&=uj=QNxetwo75=h>zDsB6BwOpB1k(TczD`i8YNDLw(8~sqb}* zGlk>c#d+!nZ#+sOf%w(ZY!5R(g4!O*;gj@4VSW9@v}q?DFjXC+p|cUqBqT6CR|e3e3$`@WA$&i9~O=G+eBxgs8UX? zHyE{fDYfgM&8)-e5U%1@Dk=R|T>+OyV*!k1OiOwM&B6LvX~c*K*W?8#lJKl1;s*e4y4=)>u5@n(tb9W#0Lj>?6Mw?dR! zWe^oAhlLo?3c}MzNfOAj6xkEk8;E4;yJqKs?V7Y#aI7!11bF>x5%X~GuAEVMW$Fo^ zIDV$R_1h7ibB?z7qRaQEav)|4$8vV8+Z*G45EqDe;8}Eax%VUwi>^t)>&mZ?7qy)H zVYOo9+-1H&KSVf(hV~{D+CW_KYZrj;=@qPAzv|v>>gZx3@+%xkyi`0?AZTbEh`%y{ zg{oRvnFg?akjuXYsjGR{Bih)^K4G4|(c3L1xtY#|R!|?5MwN8bRrb4TPB`0Z-WS9q zNajf>M)G(W+QEkkIyiQQ0H3b>PgM3Nl0-zpC-@VZ(ei5lCzwPSkz_4bbt^$a!kcq} zuD!r;`=q=`MV<`b{8z%h1qp%3RG(bCI^9G_=Zigj;xY3mF^bqSxAtT1FM(ps`SEPz zAG5QJ7mPpfhC+8fpgCr+$L|)mBfT0h=FA>SQv>a#88fDhyN9sXW{t$THLbZEB~|i; zkt(5;hLHfjepebORQkoE+Vf|0`v>lWqm}=LWpJ46KX4zv3_Y*F-)8?8?kiD%NrOv@ zwLiPUtiao(N~VWk4HMzyQdjP&5+??C<~eG7diXA?Lo<$Y7rc8XN%S3xY2bS?PN(Nn zkc~XY+WhEg{=v7@aWTmh@s6z~i1wMx9NN7WQwDZ|B5p6kroq$vE=Bn94t z(wmD|6yC%O-eec**z}PeUj4Vm6fxqzt8dj5{%1KrnTE}=Tl%lNe-woNQNaFe5b9W; z!*&@;%o^&e#}->ypV%srd1VfJUsimIz0XDB=)vY#y+P{&Z>Q01Yr;_u*V47Y1h4)G zuW4EvH{qUv8|NQ!*_%*%a&lkLGv3_2?4XI~ea8~8`FMz9@NRE$v$03BF|59uFF2E$ za^o{e)naknRqJsw$s)Y`ndaZ~Gk2Xxv(s0Hw6$xQ0^ZjOJ*(}x?ic2TpH1pNed988 zxX!9+xtq{md91H=v^I?@qkzLYJ!y6?P!0>b?0D`QLpBS}^49iJSJY#Y-9xO@naO$r7 zBHTl!MJT(3g+n{3seWqM@KUF<;q-aRtRmekFGMlMt8w%3x-PVN=t1z^=IL2?#?>Pn z=;LXo8Qtu^ZD?V}Kc|>=Bef`YyLl^2Jd^t_gCnQoMOT5F_G1oFj`W+_N9*II4+jZ@ zkd|kI29hU(i@uz~2;WFdmLS)?)%Hno4JZd;k0l{5I(wR*3Wt4lap+o4UrZj2=&mGg zXuEuaZ*?3@AnQT2;UWbApQ=DsIX2tH3>5_7^g(+lHQ9dD-G$!%s2K0{-P=Cbg**^N zG;Yml+2z-7yRaS(zSP-m(MqqXdpmnp);xXJoR`F<#KCR1v9a03<|kKA-1YO}MOZ?+ zd;Rs?+GEKR+6So)xfYKYW9;!{A&BrZ1_lw6Pk}!d7hrVP*hLO4y@%JuSq|wh`!w;M zo|i0yS?n#s6DMmjY&8_2b-3fLPY{hNgW%0Y@KuE;Dmg?MfG{xS_XUF?_r`+~DX<05 z*s?Kr_gx!#jjJFFbPViz#ZS5?>>2ECUo&^mdjG?q{?m%kD~CtZjZP0ult(5=p zRqmSr(RzY0&$sH0iR0r@Wb<2-wT&ui+v!XLLEL2gX85)pwqu@SX)EE~xG%ew)sem0 zF=KDkUy{|ehh{BWeM)z3{5sZVS0D|YE-KzS=%gA?*bKkm6k^88$NG?8A+t+-o%tAzJ4$gCEto{gOQrzd{f8f$pDlYc9nS%Fek!}+WC4Hk>*tHBfV zm71{6s|9gREm@kW?$3ok)?CXZ{Q61YX^P3o6?S0G%jjdB#ern&@+W1YXWK(r|a*(W&Q?)?6_(B zxxJ};IyKZksTcBMhjLBSF5PqAXW1%#GR#W8w7byKSG>_Z%QZi_FzuOGq&Ul0JAeEQ zfRE`ce<6U#095#F=ijrl{~&$9_eBgNCM7)}bgXPY7l)0fw*=>MP^H zm|`3tJeXrSi*KCm?F&X9y%QS7rPHrQnTcufc{2@03Hv=knQ5}fSm-+`Gd{lo(Pw6T zEM%0nuNoP#9r46EkBpC+G%d?`jQx(EmG^@MP&)bSURT1n73?gm`|z^>HP{-(U19s9 z#Gc^ehe^p7%l(M1g4f(=KZ3uZNe*6zvr@jgiIcvMI=PPzy7M49xlf3|DQM#H@P+iq zgb!pbdVU8nVMcGe%xU|Q>rA;ckh}#4T4fLDZfBu`(%3D#WrQfq>#HrwKy3pxXPVRZ z*)X4X7n+3~yoa}tn!2xIzX45>QeIq=y)8W-R+jFEfB9_+yC1#R*3=pO@sKB=XKW53 zdNcNu{tE(ZB?Tlf<)utT zSrmuhA85BBp(Zr>n8p%Hp^ZP{>b)~u8LBpZS5v4XF$%EB{LE)`o7pkP&KbET1YQa) zaUrMeHnAMRZWG*0^zfRz)!-qBOL9On-bDGSH$pzgJ>1I_Vu?!vVaI*yX6UpysJN!j53>6 zC%+Y$iv?mt849m<2K=D!5}kqAy<9Z;@rF+^#?wHqz(uRG6Ss1cvr}*9W4^=-T9{!t zLLsl320N7sQ;!JV=X__;IKr(Xzp@|gWOGiJ5wSlHpVTE^%#yPP65FnnqlG7Gg5uVq$e-h9E9B*c)@GqbJ+t=L!lG=>#cQZr zF3fO9VF$3M@?Tgp96~otmHZbmOJxp{?ILMy@yay7;Pt5(jO4UjuH0&D3$wMXEuxrM ze*l->V#f+IQDvK+xrpSHri*gj)Lx+oVz-(}l4+)bsuQ~~bPw`4L`o2v4$TW-LZu)q zPeuLp!4f_21kUtn{fK)~%{mUbPYFli&V7RK8~T_RA4=0Wb}eO1a~?L;u=fa|Ie5&f zZK(^um{cr!pOnk~N%E%+b8%97_ia$*gk1xsaI-O+tz97seBlgdaZpuYYu$or?L>aw z!ZRpM`VHtefaQeZN7$!d9xF|!x;KKaqHauYKUlv=zmX)qld@ijnh#p}up-A-WD}gL zs3JEUH`f=lrz*5DXj~H|TZ!QPL-t9?o-9rtAZ8Ht1UgxLPjT~Bo#NK6Cqf(1@1=)v zf62IbxoQRi=K}V{VOC>Vk>hvQ+$T9&AtfCqw*|4F0|VOj+n5Gb%paHGyw8;C79xCJ z1GD($GEgQ?u}QSXJ-#>W)wfa^dKf;pvRhX>__Wlo*m7_M&LQ(G=Cn#Yn#`)GsWf}dqqjrV z{UBZ^JE>nW^s1S}RtR;9o0o$T5g$}vzg6kx^2P}z)v^7*sC(xqNw&UCv}_w)wr#u1 zw(Y7eqs!>BZQHhOcG>Dem(9M}ea?Bm_nZ69%)M*PKeIAcX6%T_%pE%-HhvFwS{kIJ zY(pc4Eo7$f++fENR;+DQ4$xDUUP4a)dU?+O0R|LzPfOh*yF%VA1i#aONZDq-ri{2Cs}@g>0{+3w zGfB<{Fwu_(h2;8v$SmQm~UG!jF`I$$=uIv=>&^{K8A%gj7SLb8x>3gpn{u!p@Q?jQNc|8Xofwfl`Jn# zAuo#ekd?NiQTu# zGkZw^AGxeA{`;IHssIA44gd9}-r9Q;9R(R%Uxj|Bo-$~uY1K}Ps+wo}>&UmkRbKwj zxH|_sF|8Nl287j^S@mI16&MZloPKkiSy|H1{GL;04( zwRjqu-YxF>)|8&UdJ{}l(|++V(zwo@m}p?Y5H`_zv^7CMk;|KuL(tNLnH!EB=rhuu z7LX_T2zqIQ=fvY|-d1{R7;DfPH4l6B@R%IF!tzjhSh+TNx0Nx~?nOFL@*1vDMe!@X% zi#CrJTv(3MUZ#y0AmgPSHWVI6bglFWxYNHo^t62X0kX9s%-#}VoNKThFV<{ThlHVc z*Tf4mY}6eyczL`o@%yyYQ-RB~O_9P>{-<3vJ8Y>%bT5Sp)*^{~)Ls^=QeJhy)QA8B zV2>XTU}SOuP^G=piRB1>@V_BKY>3f;w=D(i+*S149kAlc2Y@^{LQt?}Q3a|@1zq6WY9umbt{T|<<$!6J-g;}4p1VeSoq6?T}@*4C=zx= z_j_ zC3bpJYAtaHr)TQG%N&!YtOcO>Bm#KVUy;e-45)x(W~iKiob)I^33UgIX=32sQPxF$ zf`T+Jmm3f;Ym0aw4BRNZx0y8!BwNoj0>av*=xAsVoLfo! zg`9VRBH)INS#It$Fi_}#kZqW{Z9r9lHdkKIT`9T7x}m^+)(X|} z`QD2-j&p)g+d+vjkSl~fPh37~puh$ms~aDSqw7I>fMltm&{eh-ape@m8h*U1Bf6WF zludC5<1grn-aau5>hJH`mzIwGY0wHdm;$tHdf4j81ON+;5{8PDGRdd`$9f@@&Kah$ zlhK;h1&M(QNx~S0!OgR4(8Ia-?S-gsO_r%@@PHwP$xf4mo`S< z&-+*+B@Ak@ycQW&1uAJT68ei3p%qXh$kKc*}>1LH^UNSFtJ1 zx%0i5=Qd3&SiPw0vipH2l{Ys(5<9I!ZdUx(((qfFm6OjoI%#-<@bJOASa7|O%oQO% zcjpXsQamH{#I3NLGQL4v$0H-nHBQ#mC{!5@bwY+_7*0{0uZ*+aH11tfUKk5v>=Jqt zd=mRmHU8;0Q1Z@|m)X^cIN7tI(|iYZqiY9Q%dIXA!n23sZDZuJW+>z4)xL}k<47*_6UG>18-weGVp9PLB)6)s|-2j?ui%0}LE`aG*HPnzbwYVgw zzHCp`Wmvtaz?osmuaa%z_sW9EIoZ34gG(9fG+4&TOD<(dF1jnDcpyAoM7Il!do0e6*0Fu)aYH2I2R!7PIZHJHcaJ5!!L^cV}3!%dGo!+_7?rntxxG&M{aJc@E(DI7Z6%Xu32dchF}TSKl>BlE`nsp zUBTbqo5&z5R>FBfrk~nf6{;n-upaL0$Wp~s?=Ce^FFp>XGErUbN({Ud!q*<>_Dv_M zR-Uoak}+JK1huB8{03DhLyf|{bWyZ;COr_ZT7h#L`lB^HLVNcfdM3D{O3uX>o*ob4 z<~_=B!Lal|f4Iqk^^`N<>en}Z$C}o+c z(UOXIKOkFQG^gMjr>MCe`tp1(&^U~k290JvPT(SOE5apc%VkJk^zW}AZ}E3>nJyqrA(CX(@8k&rrd_O2gSafbhx%g!kR0QI-ijWri7hu%?Q$G z-~$jv7i?RxgjXYpI1oN6W&#PNO!Ghgda=Cy2$6@Hy4{wY58Bws&&v&tbqSvK&V_BD zw>*j9HMLD`dWW?(eK`0JGVMS0@E@5r3p?|_WZKNk|5aiC?`7I-jQ_>vVEI45=3wVw zV*kI3&A|rT|G#5%094u#kiek7W!kuZ2$6rs3IApof`EcSfJ6Q>X8cR2{X8`i_iZ78 zbwW5f)Nj!na=iFaljxwhe1;-sb%%*tlkybJuHW^G2a&^W* z(ABs!+WTbi``JNRNsu=YAK#Yfu38DMh!rM-mPB!y-p^H*$d*NGmuTo0172x{atJzdANB3|&IKZFJaWHa7-F)AoUVc&6=VcaIdyeIv|2iGfr7%dx zhxxUa`%|8dQsJ#aIZ8L&$q*!ZukI!H0We5kb*t^7^n~gs^P+sBjLLhF*1JXB@9>5P z=TYI!jCej016#ML?rY}wkF851N5M|QZFxGgfDNp_H-K2?>dZ3K!7|i=ydp8f z&W76x*IR#2utHBmDAB|yP)O8D61S_8b>X&}E>T>e7yN8iS}~)5PbU?@w4Ez;aIfoK ze(`Ms-1n|D}yqdB~ZCr&gwe_w0F;xU)ittx4dxaMY|UtLhQwJiH!Dq%jaVsl+eZ|aE>LYHNc z$F<_a=&UGIHTTAE;E*hDmsQ0GL^~_|E?cPT{K99ZOI?1Fl;%7>u1gIHIhuS)d-gDN z$Pu*d?~+7knN3i}G>C2*_t99uvm6hSTsb$W*Y$iD{lxNzjRfR&coH|f|Qq;0+I7Nq@ZBRqEyjaP_Gr&?F+ z85o1{gA=bsh&5#pVR(Zr_{H*@93(oo^z|0DE3J-JpFwz+{3g)J=AAy#b(s@VLhgP%KFCg zWTMF8@zpL{(T`fpa4xDBUX(m*VEeB+8UDPfo_491Uv;Tr zyX#ea_pDJpt)=<%0odAGyfzAjW{x3p#_doOup-$E+efNhfHNH4NUf!a^KuR2ZipFb zO;iF}MlzvW6|l=WLRGB=peOgQMZQ=}qgQv%N~4ru+@vS6=l1YcKWS+6uRpJxSyvjr z`08ID+6nQ5zlX`Sw3pg9nwe_{&n+7(^&W^w8`Z?=d`;JyB9hb$=O|vyBUwo|TLo(h zq5+TJl#87~CmHf@RxP#u4ngz=YieU#g32%tIleNwejOb1T%QJ46JRF4tD1C0emu6h z&$0Fk=%sO$a=>EPVosnM6Y$)U{w7fTrds_&Yya)FfsCREii*YrhD0Pp$RhaXf&C+% zKF-9blnn~mH`y^6nj>{YoQjG)xKt7~Gi6Cly7^&k(;wM~0B~x*i59=b zZ2xv@fHaCCGT_WmiG;wB2#Fd0oZBCw#g%gDB7p`;dGbzl`$=ky_<7VmZX1WA-N7aY z`GxE{ZZU_9UApW5-cdsPpsMkg0d-4^1__AW;Zv;3HazLDMQd)Ru{?Mb`S>i&!nJf| zdsemiRl4}!3vHS%j0#Q;S-tk3g;p{zFE6(n!bn?L=^VzP0=91_Ea^ZkEr(39@7i0W zNg7JE&uXXXi&iV04n{SsI(S9E5MV>y7mZe09SnL{Oi0@=vSfYh8h5Vypvs|lw4#nu zWg}p!ceoD4=v7d1KzuFDpS=5F6W@-FG;`p1TaqzEi*JS?YWV}d=ZE4SI(O>b$ z&l$%QHmaY)pU`2t+e=z>40uY5IiKtA(xK~H5d581UxWO8@K*es+qb*q@VrLE!oRaZ zJm=Ea!Sq`|`!ARjtWHg2KSAfF8@% z3-3FJKww9)Tk!E)jZ5$?cmH!1|D`EQ2@l)vRNvdCKBB!f-2&I-lRfg33#EG_1sD(wl>fPYBA*T^BqtXWBeJaSl3jc3po^6{}y&vrJ+g9D&~S}pYia6^Pd9lm>=aM zN6pI7!5UzaSzV(VQ5$D!7_YKNr{tDEoTFhIZH`J)9jJ{a7lSf0@+0p==I)#MVWk^% z`utY27nNY&hBaFhqK`0ZYjQbA74hKSosfJ zl*H_`a{Q`rF)mQ`jGSu9-8pjzk2v=YM!v#{HPX+ z9bw)KM=N*NAia6K9TV{KEyh{rOoHE|dSU&hXu_pzMqLQDKj|M!aw6zE7pqg06Rf9xLKjziMWw8{u(iKC#suDLU8svj!=n z$4sK3Qd;x^w0i@$0bM>xg4aBwz2^8-x}(C+efk^8 zoUaV%mXBg`56w96>5)!$`(L}q0aNL2j)7f`8+y%OJbO@Om{D+A_n+Dy`ZlXKOGTvr z>`J-LuUD=AIC#`ae=Qr+^s#neM233M@$IL;GBcv+4)|ZNIQ|38Lq);nI+p1nbfKXs zmrNVQqyw-pn@lv2%K$$9Ea$r+_(saI z=ygi}VXutf2b;P>NN{uc&gyRM&IUdFlwDyop`#~Dqfuq7*o7;EhQl3zV{weW5>rf5 zMunB=bwUYD229T`(lN1o4<$QCpF#WYd;c8#&v*ac z`%m(ppQ;WA=)CtLipQUfPQv>_iYGt-vg$lQIwLga)u=T$qL8LzU>@BcQ8M9ORQA0Y zKoyZqh6Cur2LKXmH>8$__0|6I2c4ueyo})^?WI<)j48V(6U=iaHf70ntnT}iqSGYf zNDsZ%tbyrp@~Cqr7ES7>k^n0e{7Zp_!&me4n);rcmJ9~RB6QvFe4Q!bNVId{)^Xzi8pR*HxX8)Py4DUcW;e@p&wb~Yvd4Wwo0NTG0F^!EKLTz5 zx$v)E_}}ym!@4UZ2miUaYsS1j!oON{fKQkJ5wa$dT!cH(91iO3 zX(4{;z#t)?aQh028q%FjTWZPBSZNl(gOW#~fprhaB1i?XnZ6K+j7zW5ibr$gNAltc zD^W;z*ea+vEYCJ0v5G)y3h(*In0zT`b(EXK`Mz$pQ*9^+zN=}o?SyK-HkDEMVCNhJ zek#g$i?lQ97fh+S0slhj7h0KqmXl1c=QxSk?X6NDtT3uDLeY0$KY>KU)EeIY^&C#b ztbeU}EA_26qpuwRi{!_q7WiU6SEnbq5KyszaA;?UZPt~w|ZH%_fCKk z$=#M^$Ly&dULvwyf?m0W2d_i(OB)W9hb`UG#?Bj^;hYNDneTi{Skd`Z9vRqROMr_0VlZUD)+!L%BOb#d*0jiP8l8(Y zkOG$n1cgtmE}=(`fvOV&jm{GV5OH_q1n@P?lu!)<9dHt_hB!Jabk(Pj2?e2~MGy`- zKUS}SDY3Arq`wN9oHcix2m|)=+7)u7v33hUjCGKNi%nIBt^(xO5_nZ zKc05w5ry}d_ zQr-8c_*L)kaSnqC>3{u3XmdGDR=(aX*3Iv zp<@VEi*+^!vD_=ngV*4Z$BCSu_5}#}m{JrPDm(Vn2;Lw_6hM*SkIOQvlSuhobMvR; z1>O!g-#-NHsuyegVG3zdPd1FAUq%GQjJ?5YhhJ-z1&^_Cn!DI%kgnFg;fJnYL{_ZC z;Zjf0@TsHHD$x;bsDaCTF>HmGY-$m{ovVM$SHJv`Zr~QpbkbBs43ko?V=kXyF&xLF zttsyz>u1*d6x3my{3(KUwasEtwPOF(<3s#>y~S>`!}WYU2d0v|1xSBtN)Q{4WL`1A z1L)EJouTbV&QD&a&Uc;*pR`8-nb({W@0o?}A1B*R_wsEoB^xk}ldOo|8dF+YofB;? zh;b09;Zg}3yp!(*P4cB_o9zQ~dWPdnPGR4gVx|+hOgGq;bP|lqjFy|Q&*nl|5N^~g zf(&dDCXLAymae@fBYtR-!zY?Jhqmj2@PiqUVz3^)EyC5SqrODgL3<)zV`Nk8A;zCG zOuMH1;E}%BEP9@ve+#iZd?9;ASQxmQL0sS!5Us&nQ%^YO6_B~szky6T2kn1I+WjhZ zomJ#MJ>O|=;cjlJ=hj%mv!jEznp+zRKWPhBluv ztwOsqm1jgehJ}TmSWI%3vJye`myh48%*KwVD2M@l#{^C;+o|72TbinWfl|@d*S!?8 zSEM#Vd=pn3EY`skHxWlM8E%k^``qupM7j}4Ungb^jg7LjXKj$N#)Z{-8u7qZTz?~2 z_LR<`HZM#(OAky1u}Kt7xiu*4_{wCzXi?pGT>J}&KZq_NROlp3J(1)D!-3}15b?E4 zf6x;bm{yuwk282Dg)m-0226U#IZ)P)Sr(Hy-!|u;7};OEimwLJ^A-Wn^u1c=gvG3V*Q_ek1+=4Dx=n6#mGquNePkDf}MaA+08w zZmxjtK2ujeliIZ9->p zFenJ*KP3Nuh!y^X4sm&PjDiY%yI0q9{{+JXkchg&zWCMbmbz(m^7qXPR7L%a5a$wU z^wHVr>k|*_=X7Z z_2Z9xksyKVwytM-M@@NRFv=r|dhwP=Mpjq~?TU@#<@j=9eT6F{bWBT?TGAEEVCllV z;wA@WX{ljbys>~zbXH{hGef~8-O=<7%hY_0Zt)cQP4Yh#u0w&(XH}*hz{yroRcMk7tw9?hUCobS}1a zA^5=kcuLd3cANjA=#SJiNL^dq!XHxuav5;^BrZ~9N+v5`@E9nOW#G-og*E4^!miu) z`{2SB*CF4bR=D-Dt|Acg4bOAg%IlPn#8$+<>l<(aW6*Im^1mFi?!n|-Fmz+6$ZFV0 zZhN<(&6zvF+|KoeV#&tV# zjvtI|0ttU+D>cjM$(0_6nd5$DtjD$<+_(ff83DGc9BXP01lzQjC44L#BuY<}%9ni| z5I|aOo&aB6Yh#^ai=t zcO4KCgU{=Jy+0CzuSgkpnEM0)ZKYicgQStD(1gpx;|pT-y}@ist5bQeV3%;<@^Ki8 z&{+fy7#S*P1DNEqX*m*nd7q>*P%d&98XS-brAl{S;7Sz6cz0|Q$by0;!Ie~Wrd&P# z(RP)E5AAokT2yx;QJs!s>cGqA=Z_G{)^$2-wKAdCps=XaZZuF;>4$V)CaDkUTfM) zs_^%q%eB;TXhcW*5IWa6*}>Oq&-hAESh+sY@w`>pqeM`XQZdb&by2$#BqQ2P&=3{H zLgv;LU1=X?HgasHA~mWSaLtyyUqUm4_Ev>}mfS*dxtSmR(-(%x7r7W47j%IN4-e5b z*_7a5Kg6Fh5RD?hQnPhSZ}>&3RTqw|4L>ybTSq5>}eZ_pMl5TL2~Z`c(e@CgPE3IPeIzj1&2d;oU-Q+WfB z5P$>mZ{+KrR{Jkx>(0+7_$C(!$EDb?WFaSqNV}m}GeT^Qg{){84c=nPaZ1f3-KC_v z%*tgtzJrfSunS9>_MWmLAqmohIKD@Y+hDC}a21?0+#wCfL}jxAME$nep$bP%vn;I; zI<`@A?MhjV=8nO1AOT)(gEt$eWp=3(9|!-sV8X~7Ue*g!-kEOS8zQZSxN56mJK*?> z?LJ^0r_F&ZY3Bt3QqQ66EuNloCw!hceYFx!w=!RGYJ0hrNMVSincN@{w4}H59LMz^ zO$fE;<}mHLaM4+mC*DGQ)Z$Wuj7Mu~f=Hx6M+rbEK&3$B#Hc}|Wkj;fCRBPfrF%c+p@NAW?!}MebIXu6hXQNy5s_K!gGNxJSvG0&QGk1E6c;6<0(~BMDaLT zjF82ck!x5e3kSm*o}N}<=^UOufKxN9>{lW*M9$8fN|jcjVO%n-9MCinJ9BB))Q0e? z_AuqsO=(vGnBke)CfU08+?0R{Hbaqc0hdjBdbE8wyOa|N!6P@QKrx_-F+$!UdW;#IIA~@%e$SM(I(_!ifc&*dSS1i!4>ZQ3>G%K@e7-y?;f>@D&sl)8* zNC!L6ll8Zz!0c+pg?wAbnj52TcFR)Hg;0!yR~UpSG~y_?6`9bob8nciP1ryCRKE3< z{8deD)zmh5?bSB0X?XL8GRtMY!|ynuTh3>l4x z2>{0tD%H&)p&L5H2?_~|C@TBs{T1W=-2nvt`E?z-{gRWWm8j@ohZj-QIjEGCVPy19 z7ZBsJ-aqgpDm0b-?4t*nk0T}XHZynJF)e@Lbew@6V>VX;?f{ci!{!DWk>26wLvM8f z#7ciuL+Ie79?O}4zY$B2lD`1cjcLuF<$ zH1f{}V`Nouh(kgnbW(B*h_9Rb$Git1pnR^@FRLzvji|SZnfSC{sc87%O_bWDHC%Ur zlc6R>I_t-4!IdbIF{mQi9t51mhH01r=&?pR4cnqS!0x`AO6Gw+Vh+5FKly5k-5nOS z)nW3KqiM###zG`|x#|_s8(82>B-T~A?=6r2?D}j0=OtZ#Pd~BP!Jyl-Gx;&}uvJ#Tex;Xk{tLd5C$IjF%J+cR|O8|5mI(u}3Aoh;iwM>0aF66&f| zgDR)t{OFldJ|5CUlXO{F8i+}^*0N@gS}2q`e4IumU4mGG2;)TYJ$|M0T~p>S+tzoV zciBTL?pnIS0*)_Jud3Rz%v)MVVnii4v|K-!d%E{kP0}Vb5jPYQUv!5s=-;~0zL2Kg zNPdh5tZhku9kchKyCmy6Xz7eIC67fgIm!*Q)RJ}3fUIh2ZeChj*S5B`1*{h3&O~f| zYyZmQt(1eQ^@De0(I7G4PP&?8z5!tNs;V{9VKUBVPU!UsOaA0uaUtNI zM@+ql9&K+8+!I|KR5@ppX3U#N%n-?@K2yH9&MQAs3;nW8KL(TZRI;zI`D2aQDqd`H=XS$4w?M5A{ zKAY**Yo7%yl-&A{H~BVcfqCAgc#8;`t5a?HBDwt9PnQB#-njxNIDiPX_c-FInnYT1 zG#<6?b?Xt64C@({xyrydR-CDN4~ldrNJE+#%^!XWu8#(OEHcPW{PWGael?vEn)+ql zU9Dj{)K)4qU3x^(gCMRG+cRoFg6pof-t(tv)dS?O{x1|-RcHi3rc`IFKZ%pHtq#3S zgRb23UHL2F{Gs(J4d|O}L2Gd$kFX<)^MR+#aB3$>$}Puj4ET*CYm-mQ%fJ3SLlLud z*LUK@I`uxm%f%Q#Xw!S07;CxKXQW`$V2y~xq|wTZcbWR2wqCCk0%L?T?p7mv@~eIT z{&9_K!^?T9qUWnUo=tc!lWqmGN*yYU>vg=iPjJCkkm`cBwnGDHh9wxfsO^@E8>y~y zX*}o}744GK9i~7AxEzX&+MY74=~(O@HKDU;#g3Yc0d(-3Cu?R>;^H+4@}xu#Jt^G{ zOK>JGwH>B3b`H6G)9U9SHExNosY(6SDy0qyNQ{ECfpqmD%gEZQ|H#DHQeG|sCfQVJ)|(a zs5D1~XO|p}pzcu(o`TYP2rd$Q941X~nls?u$-WyfB^P&x?xm*sl;XZuFO` z)~Gj&l3Cp9sl|uyJ8f7~?TgJO0C)C3h+lYbU?`ygO)OC4-99|;gwOBQM@oA^N1hOH zZ0V~@|H*Isp~QH4F=AtDDvIzWC;S@0+F z^QXQ?1|kw-QbaP0o7=r2bns`a`%853Cn&SynR;qSoW%0klixOKcG=`HdX!hfL|_qN>=-X$3DMFgaL-*4VvwIp4CV@*=tLZ`YqhUPBz0RxI?8y_ z&eiTq5n-^OzQjb%D=-sruhQFaAWSG@(dOOe4kDLx>De-UX6&E`Xir7RC^$L5hn+t} zA8U9%2z&Y_C`2CtwH@QOrwLjE&k(G`^;5 z%%h8n%2(Zxp=-|G4g%%iBew8_Df)&fI4Stj?n`{e)btK!g2bZn<8nll9F7}og)~US zJq{xk2esUNq%J|2)99EzD;@uSTEH*Xe;bS!~fCZaetNzmz~LFuS;7?tQkctro7dhd_L{68_Yzi<_Rm!1Q_Ne>Xv z>AU*(dJpMMU=4=?%l-x;CU)hl?#WNb2RX5!$C-V=WI|e6TF9n#bE~d-x3KD(>4JSR zUqcf|j_c>ug28I0gd@mRhI#-nUJrrj05pYaPkVbPhCEl|$Cyw37v$n;nf*er6^&V* z8V!->UqJ2Gq0D#_(Lfz6?*&4-O)_*Kki;gI78kR3bOA9}4I`TxKL^lW5#q*SGwf*c zws+7!H=k$3&RC0A^;6BY{VXtlKmpv%B%09@Y%UnuWnc`Uefpo; z{YAp>()t&enyW~VRR+sx#Knee2j-hcTlDEs@rvjPCF-cT4kMDH{dcUbP>zpkchaZF zKI`&Thi}24LWsn&I-|Gdshqb5iQBso3&Q19)aOc`S!VMhw<%2kSu(*(!HUsc-5^A; zd`>r4*qL>R(5to-1hO=SpHl{!qO8nXYc6lx0R#000y85lXN}^Tfgzf8Vqy#^t?H~- z;cRN|C@=T2$8^tNcnMqcm;%C0W<(Ga!XIdI{k-}8t9PxWFc_xvc4WhPnw8Vf=jaE~ z%$N9AdZIPM9t?2Swo{(r6fbY1>XFw-Az!P_{6gyeD*aZzw1wN%3aeo#`~ASYXB+RR*(m4<2bcKt@nw%d&6;A&+Gm+(Afv4m7N1R?_W{=f6t9~MXi%*N=%*Qiay~V-v>DEPo&gQ=-Qp#Azfapg0%TcIV~;uVg|V-+i%{?d z6H+!=u%?RlHX)4tjVjST0>0~%$xSvinav(wM9jlhzXKV*R*Ln`dp3IJ1r=MHc5HKJOhv_ea8# z@JL{5jAN9LMosGb;vmY66BqR%qYWRvaSAtf#i5x!u~*rsRilSp#56O6U7s?aQ+2Ni zGF6dg?TDo_jE2Ty2^{Nbh<<8|ziTo75H%|E-Du9N+TtkbTy3`ujn~zEC-Mtj@6bkK zQn3>z#`GC*EnQJIgRESM{~j9KJl{U&yStK!z?V3-l!!-z9$i3lPJgyOH<^N3DVG2- z$@0+33UGXk-WTp#!*%jrcBmLX3h*Dp9{A=(k$}()j~%*lM4mO?!zBlE&dp=b#K36WpSlnkO$QQ`(%4 zI;dv#YU_r1{;KEOL9$(i3KDn#`K~Rp<~$t*+pk^`3+3gqMtwM?w~GmdXrB52Xp z93=Sc{oDuZH@CI48e#^D~`>drb zzXPfNNx}8^Y->z}%*thw&S(0=X^1231c$MlAl4wrb+!pzkvn# zLBp_+ii8G{l7o`Mq>oLKrtzA6OOxy`pp>#bD=1O}?=$Bb&9kC8TwAh=fu!NHs<7qj zKdG~-Qh&*EvOc|cx2%yh{qbRa&R2s(Nz8xYW&-~t7CN@N z4Rm?0G;qBYyC(rX^6corcz$~?LiFvyxF8Td4$s4EcUR)B<-?Jj#Hpmgr^ZqQ(o(KMY-b5-r`*AjvHxT;gvhHy3JJJ>s7vlDoF zuk@VG%K71jMP^6bI(;YYouhz|e4aq>N7RPh6ohQm6E3IbR1_2eG(*AiY}T=)VGbib z?-<)an^|Mb_6XaTXC2UA%q=n6)E~lc;N1RlUu=(=o+7Word=H+T9xiF?=Y*eE-Y;VpfD5!WzJn}S5M z{CCa8DeEANcMb5Ak+(C~@;3|x9R6Q($L)7ou3u*}HXd6`T4`6>(q6O8a%RJ}3Q!8v zQyXn%*4Afj10cF$GTQ8RkvuUBCWg%Wz@;12t?Fm(E~L)oI>B69@-XL!5W;4t3H)X) z&GI&TiDv9$tUYoqbX5oq zou1nHbw$f*%=4^#^Hv|=4RT+k0oa)jfyOd5mi8K=`Gm0c>^twNcKVga;1THiO^%Gj z#LUbzCu)pK(~@<8yikV23cLh%YFoct1%?)*7&W3giYGq-jZ1v}Gyx}CvtY$4uGn~_ z4bHSZ-iI0X{Jg|nVKLh0&udpfz7Cf?zGlL6L75j-@NZyo_ss+V7EFjTr~rn4r5} z_AgW2&pN-(ZuF|d&uWq$p*DTLel||B#5kfP*i*WC^KvdJ07qkhA;vJw!Q?_P4K0>I zWxDb#NVOcF-mAiBO&^++QO-hkN|qTsA!xi9-$?Jv<8}I`80Zm2mOwK@GnHvOPRW?V z?P0Z{l%Z~&_fv1$?wCULd#>?4hZscpBgri+SMlRd(~W#-^OQAKEsYe56bD#qN2f}h zx*Ic(OLAlJ0+u_2>)6i679HQP$Kc(sh$qhyay9$v-!qX-0`=c$H)EvGIu>#cTkT3f>_&7rEfwLGSb#N@7+=y4~T z2M3d=qlZn7B<$X+&EJ<1^hdgI_CaoFZnEPaC?I~FM6p#=KMzbFxBL?E@i6|i9es~* zL-91-6McEP`t(s_$9vfEQ5+@NhUuRLZ-G(nY+?<#IKgO>2EIl z^pN(i$8G+zC&vDSAqUI$PdQt2Q#WVJzfu^QvArrhZt!*qub5HkoF`c~;~Ws7HD>WP z_=Ix}Qi{H+L6{4#*_ceFf^Q-4i|nJdzCb<2%Xe|)45;c@X4a4)B^IGvC4j&AB?kpI zRoK<|zPYvNU2bhR7M_J!A0QsOf$$CJ^d(p$LaUG3Pu6%mN|10Y(Z=dC(0?r0+wVSg z%k~-VSmGX2P&fF;{8G=tFWSqw(6TTZml7tSrfU~nUV@BeH0tpQUxpheQw9sl7 zpOO}TNf7dtxf_x3Wk$86mX_6xt+=tMHqsMYKyUp%md+A5ni-mtNGWB)096nboSEKH z+FwsZK&o@roTal(Uf@u~a;GqdwET#}`Tbi?$Rqx|gZx!Y)`x?w_SQ{O%=zJuxAQ#E z?2C7|q~<}VZx3{}+d8Z#E41jCQ|X!-u{AVlL`Mfl2VreU*{hluEEaMp#%On<_DE23 z>x1+4^G0C|)W{Q3G)GrS4ZB+O$w^5|Nt2^vNKomz#S~(ih-!PfrrNe`g&S&0oFwwf z$rZ~cSjP*Q8#3|Q(X5Asm8=5@-41UB`}>-?Sg=vd4--b0j-T0RO9GPxVSO3a3pbdv z@R-c~0bHi3PV5Zu28*TCCbKL}dvdeDRf}oHjL9^!hE*lLnfkbh5|Z@HWLi1$a?AK+ zO6N|T)py;l4>OM$a-CW)hi&@LI$!hChE1hA-DZ@WQeV@$SA@K38J?~@#(`av{ zi=;noxBa@aek=cO?Z}}0@r0keSbc^cG2+6sVuX<%sK!ODFz20ljWEF1-Ys*nRo{)> z!Q4TEq;8R_JZL;;LCJ&-Bc`k-4lb+4+AL@!os46!Phshmwq21m1DL@x3@FeqWzkQ6 zR7uc7m{ZaG?U>5v$F!_(hs&7U^PTzu^mCT=(xbyrOwRx|+>K9U$2zFn^e$UdI`7n# zf=Jif$n$rC&bIv?uZ*6%z6o^QyvY8@X6pjO*a9@iejY+d;F=eG1cqCxI!*%j>3v7@ zUhusriZ97%&wsh0^rBCph?J*vwz6BXg z<^aor%#mbK*^^h(4zb&mH?B?P`WYu{U11-wNd@Tw_DdG+it|8^cZ~*9W%_ZjH{|{thRAEIjy&rs-eQA#iQ+L zx!bCjkS3s;SP6|!bLCRchMTRA50*w*n~vte?fFI1qVpZAlSY5!e1ray=9Cx1`^wUe z&26<}7SeVbm;c4^i*NcDlYwdnHjoMac(M?5(J@0YH#qRpA^Q<)Tg4X=*^6-Yq z%=_d0=8E1B@{#|Cuy+8mCD@`w+qP}nwr$(CZQHhO+qQAr)@}1Pe!n;K|4jUth^bQ% zyAr!HGHPYiIXl;0=fw38;G7TJ>dl4#QFfZaAXD*A{=$zFsH+5D!VZvCi`oNXQ z2I5H)m#QH`O$VVt1DI=pr5)cs^#SBu9U)KkSJjL@bC1K*N2fOGG?~1dGFrJcyUctG zA|=3X+LAb#;#;dMZ{=`=7eDp(;Ph8-8BKJ~^Xh1Kt{$(??&pG>-WFoP zsq&P$6YUJ*zL&lREvfT9s#*PKtvnd_LbG}arDp$~%6n^1jf?>--&_aXl< zvLCM5$2xRl1MDR;7>>h=Ii_cl00sTxsV5CWbX3%JL_vkdVU64AZ{}k8%3_}rgP15H zB^!zrr-}u;C4Hmn0+)#P(X|P^jq>I6+hQ>bWXakle}6jad=8lzY_gUDjws+4044(r z3M>k|1Tg8=-)lQ-cR6>v3a1sWtm4wT9Eyce9mEt|z>gEoP0<{qN~?3BN@L;L-8PE5 zt5{&g@z%NZKJp)>Z{?@2n`mD9F*Z>gzOzMO9m4Y1K2X+w@vP}|ni?u*tZF-sN6z)> zsgCchuF>?g)f0?rf84K@`RV1J8s!6FA-%>9Rv^7{CA6(##X{8m0>kID=!uGuTe*TD z;H9k$mCAwB$Fvs<^nk$!78At;kR}-dI^*%1DOOEBO|)PGwF>$OdMf-j(K>|6;)Jnr z)3M)WawriL>p^oqq-vx4qi#p^{9@oAix1Ui@xJljX)MTH($95#z;Ay2#JNMsZShNW$3-C3A`H>2RSC1Yt>SX;_t!|YvtX)y<}*Sanftw`&ODiLSUs~aoV zQ7!7pizx}C$BP!fxaj=Hy0#p?l%-|nYzRCO3hF!Eh!K^jM;^e-TBHXqXcPdAAy{AC zoB`uivqNw6=S=JCxxh6O2ICA*Wkb7}|O0!9O&bm^bRQ2lu+ZT}v)GEMcBGltA=I!`~i z%GntXpZ6_s&d1dtiBO@F93M!p58Yb8bNc&zsFE%7o@9VaX#xc7q*lZAJ(<-p zeZ90t=W?!N$!CG+P{y~h4=D9WYF6h9=ubrb%I!e+lUNaH7Z0KM%%VyGlwn+%61Td0 zq#>hL2zFw$HHw-Q)^lvhA_Ik&>(>XsCh0W+XafJhd$T5l0D%L4vj6ZXoKxwaS*Cei zvOPBqKe630{lWApd578ZJ+3dBbz**jGam%t_rre`K%ls8Daf;H`qFIXBCJcTquJ(S z&ErzOS%0N0WFix^X$+h3PO_UF{a$Q*S##x08g~^d70czSFcVybR0L}@Z$HglAggkC zpzg;CrQSH`nrSAxYobdzQqm4joutvm_D)l(WVgvaKg+I87~dCUZ(r8kzO47T`L}z` zZ-c&Gf6l{bt@Saqm_EYqELq-tb@c88o`m0T9-QhPmbS3Ly1V#dJhHa0(;YyQT+a7* z=84&skI!~Ls|Vf9_0m1x^A#K8WMBNap6rZ$rr0}G^vZpsRatbMp1^hgH6$^u@Z+m| zuJq#^n65g0O{xsXEUXj)-gBzJ*!%6h1AXZO6p=G4rZMT2F0ue zE0};p2>at>o!51$U?*4Hb-Ean6MKnO{LV>ysTJ@%e5nPJfqbbIe9h^vw9aKRJ*&PB zrjp*RqHCVAelm8Sq42XbzS@d;qK9`j7-XiySI>vCiv;=fJYE82U#i0F|1DH$9^FEO z5IsiptJ$P$1?5#ua<-7LB3D?X)XjexAM@d>dK^<6eWBQH?&3j!a-FQ^@iFhzFv!2J z$xh_?k9UyIU*$pMQ;C2gRNN~JNN*Ay>jfmpF#}GXp^J#+I9co9pbXJ}s?CM(-_>WL z1p!KmRTUbIq5;JO4^)z06FUkBo-u)wKMh)4b=}M0_ql{B3k%ZyhqrJdpTFt?zV_q* z#kk68NLEQy#UB0hTey&Ms_K&GggPlJoGs+5c*g z(F{sp#ma5`TcDc$2r|gx4FPuq=(vD!fq6Fyv}E2s8YRqFFmPcWh6N1()t!W%K^A~X z%^v=G@;Wva954rH#51tlLK8m*=*?z^luc^D47q2~Vgma1_Lbbvu1USdZ6lfV+(hTzOzVPd|iNezNE ze5^=7=3&58gi-`W6-W#5A^`c(M(JTcDpo@{q?`8gg$CuU)xrpr=U`j_E`XYF!AV0SS^rRxfZWP=L%sX#mm+-0I8336V19=Jy z>IY0A))J4vp7Zb)D)J`_+!Kun3_%7JVq_3jT`N_GB;ytEBo}?<6%sBTskegJ2&8x{ z9m9YQ(i1H?P#or~*-*BTUf(_g6jFs&K9vvW(IU_~{6Rm5RSb6!%x;x z#D)FcDR{%ed=P;kJ$@7i_7xlx%SWnqi14Zyhn6UM63NLwSCK*?1q6~Y%qzS=tS~?H zA!!8k9xS9)A{d>8L?u5g|LIE}ToO&8O4=gD!}Gi2^bf(sf)@2roJ@-l#xBM67qDTm zv6V43$TVZs^ZG=PM7e_42)Hz1L6KlM-NOlvNaQ(S2uUwDpOD9=XaY9tB9JV8@-|ZH zCx^oL8f3{;sF(I?m&bzqPzg(}K^n^;I_RvyDz(ImP-s>p_ADXH;w4Z!3^0s$UswhY z62t)$4(YlacdlYlN@xfW{ZXJdwMv!N+T1!!t+lhVWRR|tYkN}{2e-6E$69M?ZRa$or!4LJ zxD{5GCT0nmV{PdwJu7RS^(SCuXDY6$B1;DsWfM!?`-`f>wa&uI&dGgqa*E6ydLQI; zi?n>@)W)5CwcggPP1@Fads~ZJC!iQ`p^c@r#s-|Kj+G7p2w}Co&9#-Cwa#h#AOV~0 zW@P8DjYF+tTYZ~!Kn<#hT{?yYsskhk$vT%;hjD6ir>558@n47b?i_21U+S%~^c5Dm z=4Mx0>EMN(m2IM0hXBf1lv(-^c7)R2wT+f>I#!N#POM4}2O?BiM6wEaAvl&UZJnEW zv+kvZ^D6ry=y_x1j_R#hLV@>!2(xi}Uu)^G>#EiUKnDjTw`Tv;s6+sO+*^5`dN#IxCgrm5$W@X*jEBzF-vL)5s66h@4B2K!j;;0kf`)jT44qm*++>b z0t4+_Vg?y6f@E6;iW-SF;qY8*!&>G`_1SwRp$xtQC^EG@kG+#0ZS5lOhUn)yeO0<=UHj zJ$w=rxd<+Sz6h3Rf={ArfG0A45wuErWs+I+n9V2?lx3qiPJWV7>QN`skI{>yaC=+v zA}s>BCcjLb5WP;7Xj1=mQYW(X9Rz)nI=1Oea{2B>lDtS&8fLH64f2AMJTz*R7O_n) zkzb)pWO3W{J{q;llwct7Jxq(#SxJkmpiOo;pheEyVv3&3fe|&t9`rd89F~admaTxWUu|$A zB7B#q;0>gnvh#j$8O~gMcLglrgr|Z|UeOh}M6rMsz$_S0=HszHGhVy_Pz}h@4i^g$ zf^NVIlbxS?#}G*}fE2RFFz^Jh3osz*zz4Fzd%dZ`g9{^#!T|-?1MjA_nw-7g`9rg? zBpR$gUJ^6p8{w!2+(aiJy>vIyI3sPqi9V|rCb?)V)5^4J4b!3&UUhJ!d>{_k2emKc z5F1eTd2JJN(E{c0b}%!AV&jNAe&bWdzG%K;=V#{4e}^Gt3?NPG>v%2B$U2lv3$Q#d z2ez-7agS@XHkyW~QEGKFBSB~|3H_7s z7}Xbz|G2!({VTYbhtL+)h1#ncE&-+;I^vp;l zxO(Zf`ZuZ-#VRVE^4rGTCp6MWNhq~|D+_B~@k9JhrX2$8MCSJEVhMqp>zTyE94OH)L!7z+;EN|p_8M>N~ zHHiv|hm3MTM&vy{@P}$wo|4Q}$bE>$%12;uT5i1ao)OY$X5DMwGKN>xBEeaqp?dKe zbWRKdO_bbt2K+;FEwVBT)6BaPY1A~L#Itnh24cC8ca+P8cjmfsBdf$Dfg-0ZUlh(; zXwE84kR(hq5**ZBVAZPYd7jo)#~G^qAVho|LtnC9T8d@tiP1+7<#2Ify2(u;bs=A9 zaomp*mb+U?76u?B{Xp5^@a4)BRdmwE5!w^e7XOH&z)5SoXt~zu3^0Z;4Ks;NVpdcV zHYXD@2moKXm@o?rJ3h5!Ovzc`k~4Dh+As$>EqmElb}>vzn&+&+JVKRIvh|Cho9uD? zeS>I>3b8f^PqnCuMKa?Tqwo^LfdEF)hGi5se1rMwR%yWC5+C&)`f z6s94EapbRr5E1@S$`*A-QEXpJSCvB4nF9PH-l+Q#OW7s)hr4N%v!n`S65gpH8<#)a z(uK_GxJ%EbsyBS2b6~THb5es`$cZNWG__>UeXhk2@zFg~tJm8q&zZT>2xTl|rO$Pb z?QfhEB+&fc%3AuKiPS8sd?g(Z?Y0m_Pke0%53EcvBmdUS6OIZoCk%e6 zm#2o!QSKdb|Gz|GOgyoK|&G+67y zSw=RZ)|hml;@qD~e{>~`I!N8*Z`FW(p!bW+bt{q=9RSVzi(yX>J?UFO9RC2An6MXKc6YLD0+=Ic7 zoV*RgWp9o}z8k+E^DR#_Ebu`ti*1$RBVQJ#E^Y`KRHRk%Wh3XQ;~k}XmeF6aOL+tn zo1A1>Vyq=`w5eRnoa2@V5+Y8XA7xpcDc}}}rwg!`x~BNv7%{0;cdgx5`P93QJVm)# zW5%pBtp}>2TP@F#alcSf;I1|QBrjE<*;nzuQg%se@r$WQQ)_zDEq3Z-J20HYX;6EfUjs3}_=p`>#QE#v6dpt^$GsB-JCmQK3dfDKr9d#j zc}LYb4eB~Oz3Xfg*^{f+soXtg!k)F|zNPGBYeimQav%oA%>zo;S=~cR$x8iRm%P<2 z`x=Jp&#mV5?y;VI&6o10wg8n5@4C(hP+y(2NA`eUivb`N+7cuR=&||=^sTK7mI6^ zfa^l~P-px_7J;dlxFu3r{ULMRy#J+3qj{fxi6??&Hn{9f4_~h*LZ%xYiSO7Wfs@{2 z!IRu>_K>pE8e%w4KjftgGTKAuY-$Pfsnqe$e5%r^)FkBaPp&g*lA0lZeB+Co6-mG45?Szc zvGlYYJ8#w{GFPZe`TGL9rbIU6b2DRq+?3CpK=+suDU-=ey6wt8Ns0X2p-g_tl+BzN z&tQ_w-%5#Oz^wtUQD?G4wdFo|H)rQ2THgA6%)(7%HWObuW8)?=&&4G*7s&suN6cFyr+W<#aw2rZYH9<|^&XK*oQFB;zyhYu4Qu2``cHnPYYDz(CI0zo@TtbM=UZb{ZTx11@xIvE82@*>i6Cb2Fn{NZqRYGUWB4HH z7jFFE&g8cov^OzY|I;StqdV4LJ6!*M*Uum8PkiK0Jw*O+?}*t?b>yFVPtEk*8sq;g zo%}|P`Lh(_fB$%MNN@7_c=I-jZilX)avv=oik^3iq~C$t-yrPqt#1}R?|yKGJJdfj z#-DuO2>F>44Es27t{X_1F@g_XdJ?ChLGn20ujGs|HL*3^4 z+`TEJ+m=In(*tgUpE%98Y_*;%Z29PJlh4?CdzAirmhUmRgRA!RX#Ks2{=W!z^yBT5 zZ)*5`rOPzCL`U_rBl=%bxo@kGpQ##!Z>d~9kLl1O+17XI?ph=C==-_srcvCqZ)MoA zhq9S(V#K?EB5o6JV3_*(!R_V;^phUhG3`?x(s;W$@#9YS6#JOD1H=xPnFEXg@u-Is zIz`)#B4gQRM-4H;OmI^k83yCW2{GW{GKU2*;4&TqgdhT}fslXT$v>hU@O3`O9B#pi zH@K1inO;Bg(SDd*-)vHN<&W*+3eA5wHJTIub%emfbk|oWb(?1l(o4++L5 z?HP=y4~(@|JE}f#YK`d@_^i|UV>xy;eb0qipW3KBhRbA^ey_@8XHAQ~?RK>0^v7t- z+T;(-(JE7)6A-)XzN%Nx6k&}EE{giphARU53VIYQaz`J+I(G;vU(XOBN4s%&OgepY z^z`*x6r@jQO!`!Z+*oTm*60?NPi9Q|%Km6{M8^gr<&h`|y%R(_9m!#-SWm(}7A8Fc z&0)}uho5U9$6k2#L0uPu`lQD$NZb4@`c3t{&PH~2JbmCaX|{ur|lhx}M4C&#!Ik~7VQ)zBtDaxbs&@)EEC&A#(AWKn=$X8S9n4002V$Pph(SdP%%KZL2M)B;{Yl@urr7=9N>xJ zU&%T5$Mw$6{AK))9ti#Ge$DeA0I)zZ-Two7=f9+!|L}A;8CV$qKRHk4|G%84n7y5g zh^e!&lcj@;y%YU^igJdwru0IB|2e2dOsx#nT$K&&oN0yZZA|2iY%CpJO`+(;Yz)nv z3D`J(uYNs*gzP=EX&D*V*a&EuIXDQI7#Nrd7#W!ubm=8s3~elpe|0`=On=)Lpy&mi zjZN)b2soL3eg8A?e+slr%&buK!iEkKrk3UwF8_6fqE~h?wN)eF`1SeE7-E(-rc4C? zWgjX1=1rQ~nfzyRP|VE#2Rafn{cmp<)8FaX7`m8>m>S!gnEtO^OOG7gq6LY~Jm6tAeuV9tM-q z%KI&y53Axkp&i|t|3HZ`=0U5e>I@*9^Su83iBA}*bFCKA{AY@*^$l_x4VpK~QL1`e zV$jwLvYt)dpcE06F00JQaH&s=yyAp;{2L)=fmI@ml11f+?%5_j8!&e{;P?@F$9k7J8+(Vfbnv5+a26^1a>r!4(f_s4 z;wD@C^TmX(^y1ccfBk6A9!_-{xb+;KFmczw{C)trHLs)Q+5Zt`!Tg_4_P=pV|0@ss zpGQTn>}urV>0nB);^b=j-&!FE!GpY+>j`@cYzd4FBgf({DlD(!|BW zS(}Z4fq;dbgMgWZiGZDv@z-+vTGn4AvJyX>vHo^o zg<|`)|8Zd9WF}x^`E}%ECD8pJ2>V~lfZ)H&Lg7ll|K%EI009oB8PFjpUZ>?cg2dwJv8tzM^@6}7l5 zzw@($m*JtPPr7%^f#3&j1M?%zq9IrbGsIfXKZ(J`^#7db(3;2dSgM} z9lJT*x@=7>bd9hz-pUNF8hK7CL_Na-P^x=geupVk&%Dmie#jlr6dMBcZTr;aMX64q zT)G=_2EY%&Ctoy7fqxtJm4dE{zBTR!Sl16kT7Tq}0=_T=K}ytuO^T~{k7I^;j3OJZ zA>R6$VC@bs=FO z>!l|nbPr^;t4~^nYF1`y*|K>gPO?g}PQIG8Agc_oI=5}Gsi$5Uoh28mw!15&X*<22jq(3Jtve|SG zk%62olaGyDW_j6OE!!BYt_YEGhDt_G`cjcCqLvHoN7_spjV|64@OJJvji_{{+RBv0 zmI8J$oxwGms*;hE6I${l38|CYcFUh688fx}Kb+0bn?PoB*EyP_lQ>Q4{3|}Mul{B# z`piv=A9urR#=)F@#?@^<`}{S~{jSW(ci~rl6SO`~A5U|rxy~GGOw{L`pWNDW(9LIJ zTHEypvT+Aj{!h~~NP!YOK42zhV%|ECT!57v&05xLR!%f!%;R~GR@<#M+t%~HDYIs6 zv%lfnE~w5Ys$8s0$6CW+x8|<9<4k38J?44fQ}|T2mX4*>9^yDT@T*#w<tNMwH;?{QOXCWel?}Vx zQaykq3AsUc`O2y8vv$rav2WiIJzt(2O)gY?#;jd$yC>4RFG=}$Eny+ZF1%|)%Dc2s zD;?z-*0QdUEs+IJTy<_&;X|jzk&HwG0ZKMR4PH~c@X=gKSDGJv=O5;V|*jg|1wte4yy{+->o7jE}AG_q)Y+e5T z+BoE?(4V0A1OSWRb`iKFU-B8^j_4-GpAkQ3HGkHh{$uq0pPRuSvmdXY zS#M(?YysV^SVnD*#TS#w^d}>!UJlt3vs<$4svbd zzOMskxh5{I-UK(Nlh8ZyeeN#i-UP>mUaosgB*gF$e_dPHkB$F3Sw~KpB5K#*oun?Z zuz-@DPBAe-j^zP%@l=xl;NBfOI~nG^3*+`7Q$&$xteT;YqQ-?RFTNR;avk93RZG=M zW@>C?I|jDu#LK*#mJ1Z9dSjqKwpMNwzL|HyU}395s#SKg5;+Xbd|*aalvXTyz_?i| zmo2A#s(HF7z$kZG=CL^Li)>iVP%*2@!0+m(<$LK`xn5c;tDD_M=qkJwx5B;TGCCQZ ztV{X#I1I(!$ykgy79{x=65Iv+2^Mi7w62eO> zquwZ@NDAd_cG6gC>`8^G3>Pb=GTpf~Tg+zKztQw8o-kS)lceE#XIqW;7S&tN?%z9o z2)nr7k6eNA>#frUZ81CUlN+DwZ#JH~WldylE+{Ctvva-&Nw@3cT^ibLeZHU~{vlt8 z4}HO_t}2yYt>WW8D^@JlnPWi=513E>@`J>}0Jp%Hv6=wT2oOn%6+y@0tVOFDXrSt7 zGmHuEF@lpz88f*)@TBIcA~U}$(_EiyR{ZMkIW>XO9h||6133Wg!Iqgj&DLnQTYGWv zl~sGqTT?KORi~m_<#wU%0Nt z>OhI;jAmwLS=ch{W@d4W!2NWlh(6s%zPToJ;$j!@{(O!vF0S$KyxX9g#B2|?ty*+> z0k{qa1tG}_>1w96awxWH>l(Il+Bs03b|`Fw#AcpxgW0BY)gSCi($GW2N1;o$Ohom3TP_;VFA<$C~lyIyVjj-*S?p3 zv17T5+0lGy?znfYHE z<#US&7ZrpWU2g;+plvrZlf@)xNYI>>B?%oK`==OT_b`D1TAH>8E_ zgF{s({aNpS3SRW?coEKP1^+u|neyd{T~QS5k8s?u-YOssT8PA8FWK1O6GaNkSLq`a zRk{+?sz#QO6vAfBeu1>StfZWjT!Yptw*d4SgNPY>QD$uHnUj{s8t&5a&64!7?2_`v zF0sFo`94k%8JjHN!|1?~nx@*t!nV4V%ay~EGbZer8CzMYH(XJfIY-;LC2gi@Zuo~$ zw98wfRIBZfTr(W+y-td?#s2aOTCDD5%RLUS0hOdf>ea57vy>#;c5jjp^2_vozE@v2#HfUcyD{e|<92?xBojJLtJJvxCi2_|$1TEoXMwW*J8-#kT#JK-em7m@hU5Z%n0vSl{a* zm7z?L_?;<{-uc?b@gYRIo77eIa!AFPO8h#PM5fAic`}(?60TR|1t(p+5RGRk4|`@O zADT7lMc}V)r?zwZvCvG?tS^lYtpUd9r6#A-Nl^0qP`;h+o`?NK&qHl6^=&S5z0=c~ zwEoW92y}2@DgOnYmxY%{$RxfY{9g0?j>1p(xBbq##`+t6%-)gj&s*`5w(zrTE^e`W zRfvTRz&{CLd3iMKqQXIk`;7*#q>cTznGFZ4hYbcfmBkH*4vJt*bo9JV=payTMxFo# zIvDudh+$%xg9(Kb`?dIZ_<9~LuXrj)m%V3SsepvXEjKHBqACZ?Br8R+S~p;=yj-gV zZJ3R;S`H`^#v8vcv@fhLA>NIEoE`#u#_(XaEPoqt8*LkCTODkAZik$2j3SlkoQgQj zS!w(=`fHx%*U_IE?F~mUtX-$&<{#h3)4Xt<(B`u5S9ymVvKWG!0- zTQujO!a(KCSr%``n6x6yx`$_Optz2p6*sXrVopyy0ayszVpUjLvUxOo;D;1#BQ4eE zELchz#NbI-Njj1VtrE{>CIhd6=?JG06?fXo@SgS3awbsBCG7ehFQdX2;W5j4KDwzM z{=NOqXPrWyr*mET_yE4NL2q|RyxeF7#C2%c#^ldVet=gfk&xN4HKP#7A0TSx1gANm z@XBRPn3>16m5j@C7&&OJv101en}r^3Yfjn=X3-g;ERtZxWGXhEU@0clBwF%8*EH%g zW?CJ&Jij3r!96}%d0KP^tE_~JL+H~NBBeh(&IK0Mh>V74rtz)tXiP`a$tg%YbQl^P z>3TGYda2*1o-I>qedX_!ug)^lde}T~^}*~ko_*ds#-4|lwZW_HC~I{cmT#5(jyGp! zQuq@7Ia%+-XEEsh$99@u-_m=A4@0f7-!J5(dpF%u=Is71N4eb@)`Dp_zdufXKY>|x zXdm6vv6^YdZ$iR_V$)TK_7p7{n$?hh#dZxSXlSJbG-grC4lKz8d#AW&7qi-@)@*d? zFruK!4a)@`2$X@?qa~fO%4QBjDRT%p4cjheDvikp7%XPZ6>Uy7Cj0ZguYSlBmxX4{ zY49BGk&aO|En`UZ+sK*GTp{*onkzspc zqExkSIz@;%MTkr4i#wd8T0m2BfEqhN`e|6OB|}Ud*I5}7UQq=_XQpykC`fM@5tT1rAi5aQtYw`OMj?bqvltY5O{?-To)HDN8=wpw3f>-h~i_Tg8!-g$Z7t;+7&t**VP z8dkeI5q!iycAU_Z{vR{-1~%<91m?CLql=|rwT;{r)N#@PcW8Ts0s}~ zYGW4+Z_fB!P6-%htyc7r)ZfMeRNo|fgdwv78|oB6H3*%Vsw3g+ZsGA#_xM|k)?1Fb ze%`M5=e*p>J|3?4<5aP`+U9+2GZXO>x@xyn(Ap`BHkx@xxk(gN908FPsORU$i< z4WS&_pk+;Jk*r1(=Z*=%B5@j$;|X#jF%h$d#ZJy<1As`e(F1Y()VlosyA$Ggh8frO zF1BH{mJxJGsyIF*@aA(}y zxch$Z)UCTQ`)B^|&}%imDO?l$5#}*WmaS>iAPq)0oYk?a%t7)sQJIL>YX*zgaVdI9 z`djbt`0#TK)d)$7G1yqD!`=k*7B{1htqI6nu3 zbI$&kPof^Q^TCP%Q`5;rKsXqhs$&9j0i2+!?+hOmhFnkCzxI7l5_+U^gBzQP!)JMZ zS^od*eOL6u_pOPO0M?w;l|J8#qf961twFGGc*r>285~(7Guxy&x9Cm~%3GwR_b2{s zXsh>braYWbyAFcHF<-jDO=8 z?csbq8-s6(0?W61vZbW=I;q}c^Fw?AE$&HfX10GXm6NbK&gS` zYS!{b(J-+=KEXx)eC~Yt8TLaLk}Q)wCDJVTd0JN=nL-*?&1(M%AV0X%#Vqgvnpwy@ z1vkR&^o7D0&5frfhEd|Qfa%oWvxn(45wEu}Ms*^{uR4Y`!C8*l7&j|wj`|2>8h8f9 z)JCAWcAm-@c}bIBZOp8s%?}C#Qw|ygRdb%&7>tx0mC6_mGl?pNQEWLWD}@pK$k24A zc%|fPN+Z-M$*(4cbt3KQc1j~$Dp@SmF{qfOQv?%RVV?CWr4f=;|1pk+dI3H}6o5Z(qC`VW!vgeUFfi!B zfI!9aIx2+gKd2AiM5(Tr1aS&HmkzTE)@y+9Al8I%ZVukc`A!^J&xm=Geq z`VCa5r$|%6y#gUA6mZnt0Gb{TmLP;-I24(g0kDVXvV$DAh?Joi;5z`yapQRHUw7ZSP;*^Liju9un`9V z$}sRQHP5bM6EFw$)Cq8 z+6LY0dne>!rx&pS7lQx+UOjqKoitpB1$hVytP59=kRXZc=r8WC%1m9R`k}HTLcF;E zBrK%{b~cS>5Y z;9imH%B_f`o+EllyaVb*(7}0g*gQJ}7;lFD0t96r?=e<5R1g{hMfL5`2&$@tYHRDA zqh%jbuTxE9P>o%ZHWoGZb#(O<=(eV^cQ(#Z)YUtx&(wd2YAk4~o!g_HQ;jrrt2LB$ z)&HVUYhhtgXJv(ah&6g?3fsDZ&Zw@_*6Awh>9&jLfc(3>+%d9!Zn9zra9v-ng{ruW zA_KC~6g@hm@}SXH(bc}ObA?J>{mT^qIl>xcY9y>#-0gKAwbdlnXeeqd?5hkqKmp$1 zy6T!58&GPb3CaK%fVR%w!lp)F>BMcAj7^ps)ZJLqW2C8R9IFgs@I2sDERl`^kP0AN zV?makT{UH8Ju15Tm(1N*bd#wmO~PDK_p1r2u*pwU*E6%bt4~fx1+XTCwyHM45?Bpw zJx!I~IqJl8dMXXUtw>^mDKj^N1Ek4NQdC#eShH5y#;QU?M;44={BkU6)UFH31U{*v z^q8)$-nvSo4~Wb_7bR3#LsL~y5dhfqZqG;x)3hIMgVf>AbL?M6B{em6RgTf7u}iX| z#Hleag7ov|z9g*ys04CFy<8#sMa0bR1ug^B%~}QxJw-KWfNTg%2ErI^=rz^GzGd_n zgl)APZMayLn5o8P$yzlyAcG<4k3q*1POgv^kUY`mIGi0L$m|m1avU$qH-M`!8Io|l z+X8qZgN%?Q0SSl%1EynmW%+QF4fF)(JdBqoAf^q`o`||2jf;y=+XF_Xan2M3*|5O` z{5F`-Pecf^B69#U;cr+eEI3NbC?|q34gw9MLBTTqV`y+f>34A7-eJ%NHW4Sx(vdy* zR;~OYE>wN<5*95gkr6wnKiClv3X7-_K?2lu^g3L+cA5W9Rs@4|z$4X_z#$vCBzlIp zBsv=4l!AQ7Ls8;RVgYOxv?Mz;YDx6`YDq>`rSAW7*XacLzzH5sQ>BBH>LB$ibdtmnr{`h!UnfbP z!$;_Mm>~77BuOerk=;*8lNlOKlITfJlE`Q=Mdp{AApJ3&olaXrZkn#DtKdR1%JEOU zl!#ChKSZyL3wgVg=qb9C$Y|k0>X&d8iE+&-jzQ%c5{1UUcShkGD*d%gQ22ppd`H&d z^K=$Oi_dggED)d$)Ey>gRSpyW!Tk&Hh$g;*4dfaXA&t=4Ru+s<1q4`Pgva7L72u)? z5oN`4Dd4Y0Dj@4L7_I|Qzp*D)M3gXji1!5WXF~EBwPHUFeSl)773lN`tZ{?Ti)8q} zd>hOVdwLp_I$&#^#u_^TmIw~Dp}b!WSqle&y!r6PoH1)deP%2G)Le$O;lKaRfr~el z2%+$Czzt!|1yF~-7TLfLu)+JZBf=qzB89O^eYHMVb4z4BLantb^A0iW9I&JY^G7FC zYV0QN?`%Iw7#);gnu5q8exe4*8?9)lgJ*IsmLU8Z8KOSQI_{P_#!d{?f|uzDG(QS7n;7sI}avT~pi14HN9-n@!0J zD21EX&oJ^sS%M-^ny%rQZ2E~- z@3;C{))glwSHQ+;xP&gEG<9Q&38~`yriT!o!|1SD|DnS9I%4!bW$!yIaVL&wX)H<} zOj;Lx5WD@U7HO*p@Pt2dVDS(O(yVrD84Dck4F9o5oh3G%WKe^}0(m&y-ei0esF zE~@+Iuyl=|sA4L!gn3mwPqbl=GAi;N%pX%ql@>T4G&8`jE}kee;LVG8%7|qvFS^t3 zob^kvppUg67dfs8A4$R3xsdUgB`W%7X7Kt*Nj_$W74WuIvFjw!l&NA+#n7dR*m;81c2_O?B$u9~0;}y*w;LTw-q{*1Kn( zp2sj$mOm{(&@Xvw6fTO>UKqI{#kwYs+R@K~e5u^tKV->N3FRCgx_XrMVU;N|XH^^T zqCJx+aX!VZ;t`sTdqfCYEwT@|w-+&T;v-cfjTK$0V^-45sfHgCBa-5~#Y$E|sVeY1 zSHR^#J;Sl=TU}AZnRN?J(dEbLCZ8MKMZkGI>~mys1uYGX?0%9w2_?w(t=hafQlhI>n-J zB_amO7|?-5SzRD!>H@xkX{?K!Xo`8JRn`{ss0?{$rb9^u)<9+!jXKx^{4p6tDwvin z6=3L0O_i$>ACl+Xk#AUAP-QZGj!K*404o(pER_LI^nb)SC7bf6)ge0BgJrg>%4Q0{ z55;cHB}D-$)Gk=k5PYXDcB&}HKwESbi4w_cHAY*b%TBy$%zEh3NNj~sZu8zGvpOp2&Ulbu>Hei+ zQ?RLunX>0W7nP@`d}E+DflZ~{jyf_$TlUK>+NI#Jk6!1AP*GRXt1YOSs;tWz^C?Mw zxn~N!M=?T2j|QMd`L4w)vg!3H@<-Km=WGxTM;+qT4?0=Nw?c)=8ZRZNL!<{#kJmv> zSm!?FAY(>vA2GZ8tYTD)9bL(p>(s>7gB(-zgw)++H_)+B=cgU#pmJZ0tlK5$HWZf| zcc#Uw^)_A#$L&01QuJLuFMa6L0S+6hN(QV21~yKaMD)d;JQXZ)L&k8QA!i`A2 zB$%2uNfqw-6js?2JfS%$MsU5G0|9?0;#~@qUE=`}Z zPF0<RYyxVApRe_67DF3j*a5YtW5H z+w)rF1+z0>y!X@0U3hlH?KZ+rcUZW^FG|`Y`RE621=lXwx8F^@9Ao3+(-=OM^9-iW z=SOJ$)de-k1`RmKp9R^~)7?r|VAl%36_~(8U6}@H@`)bMdb_xC_#w`C_pOlq4dsC? zTs}kSO>m*K{8~)pG2)v|HY9yD#Lcin(g*q#s`t?n0Lyj*`}>6!?CZqdveo?nVj1I`+m0!n(}%CcWcD2*R3SAG&|~7K4zZqbm}}3kKHua0!<6<^&qDsTNeqEvoqSumEMM74;S@QAJetf2I($Lbk=oDjd1k(a>4DTR>zSWLN_tA zwsoH+pq8g5V7FS|GSQA=jsBw5#+u%adhtFokd`YlbG1v9b2tt8CG-`zuKkPkZuX2cyg+&nJ0<9;*2y!9~yj?p8YORJ)ZHisNbeq%wP2=0XdY4{R4(}^`udaY_I^{jla7d5bQ)82wKw}kkd4~92R@`7cOqZQ<+9P z_MI+i0PLu~&WQV%o@Cke5bLjUTU5Fj9IILVt2JEgK;f!vS`2zW0GRBu7L|A~eIv{K zpd{liX^qF2RYomFaWU(Q1GSWRKhxj50SZf6nEory^dGYFAK;gkhLM)#U-U2Y zzv$n8$4~#oasCTu7W_{*^Z$S{{~)52^o&fnv`maY;y)TD=Ko)m`DfSv2g>|!S*-sj zP|EVJlaVmAGIlV*rDyz~QRc~iP-dTN4#B9+Tt8qjWeB{+1`*7s{94Xmk`loTfRGP8 z>(ouF#FsJ;gSGqBwtabQ%1!D0%FHL|Mzc;!EGa?l^SD(u=N7n$G?`h;NS=<{5xghn z=Z0yy)fVgqs(-p(J58O!S1>1S0)ufqY(X`Qt@Z9@7rZpLhi{?WYU)G$I8Z>|zrQv3(f7pB8+@t17=N zGNco^eqJHlUa8WOAEdApy6{y%9$*bmkC4_2Y|&@O;G{Z_fK^4tL}PN}W~We(fILga zOk);np;Q%W5gqTa((Ppk8$3yi{|xzqMepd2H~EZDq^G!x>>1YoJ#@53zaYL)M!&-B zR(oR2?DPHAT)Y|}CWx1X6{2$W{8F-m)@CI72d zWc}A=`uCpuZ;deT%ic3$+jLZ5%H8auD;W9F_{wx{) ztwzVpjLYsHX!JA1)yt9?vgbcc3k9ODR)5PJ0av-QR1qW!iHCSMaTRG*b)<*tZ2PIHg18#w~5Ni zWHi#{RS z=JWHxO|r7MXphbtd8(O!P=OC42<6k*hd(yUJ^)1^QiJ zc9z!8Lc@bkuexAs)bp+AL0nS&Iy;sX*L)|Zca=W~rrq)d+*s;rMAkKb_IuNt1*$O* z;l>T=Qb_%V-bM*v@|jN@su`zJ;Bn@TjmuZr{xjzi%>k_wh%JwDPRf` zv&~O@1|TOk@{&cJ;4Xyv0QP3kgWTJfI}r4i>kCnP=-r0cRqQWPmaj9DtABm&{$J3> zJ=hpnEMjlM)Puj=Va&O(Bcyd0p19?<$J&63i|oGf zVc5XhPa0&)7G&E5byDRM(bz+*Q8k4*Npei^F+TnF!qP@u&PRTLX^r0y-x?%;b@3wM zMy^z3O&41N;V_wGL1rs zJ1^4_R{<(@y7<>Yj6O=*|CWch9<@MdM7(asg2jx-eb#Fs+CsqG7d~DYlkfvc$ZD4x zICXh1xTQN!-T+Zd24(Uco!BeDIM6LWc8yEW15jfwq#=Peo<*=l0q?F9kT-Pb za*dKo-|gSZ%ZI_Q5xcj&)9_Q?B^7hM3dSZs;Y%*~*{|9g(s9xvzU% zK%0ix^eUfra#!GRmdVG_vlC4R?`{3->^iOslczWq7YHpBwba*V>)LGYo3?EX&2Mec zEihdO`k(~a_q(g-3A-k`eWL6Dm+nj&kc&D}0O~WXyHlT^AT<$awN<< z80X=>&B#CY$EzAcp19{MoKWq`F+9k?p&f$Yu<(f~m{Kb$gYw~z8cJqL=FdtgQ0S|C z?B;?pyXTx{&7el5xMhxB3jOor2GqeG!lDtdEc|v^=m}Dso2k?mI*w;@H?o(y--w$# z_ob}Pn<}ZTuTA#GpWHUG`#ZMIk4I=zm?1Q6VCd0V;=SY~7)+!IB*Q{OrxG7#X*+-z z_ZB-kXKUFWViLI%R?IZ#+12KT1x#dY1C|PA*Y@w+)YsN~bdD>VE-cDS$6v`&D95y^ zRKM&(?I5J`YE!-pphuT#rcG_%W#Lb@S()X+7KG8|97*NExCUtym=(~=aLi`LMTQ_W ztV^4_q-D}LCud1ooE@%H3|Lv2@JeOP7MRh|Bbm~kSfmmJIBEY7(8AHz#?Zh^;foOB z6pD+9W5;?p-^Cpij>3{O6KYGrWcnIygkzPal#OCz`sdg7Q~B-2*X8kQ1J#2*i1nAU znD_9=V7u1X96v0U8(X2yHtmmZOL}|$%vn_(nsZFEWqUrrc9*d9M6ay3JBxt1sol!KMRz5&DnfnZo@v1=L$G1q#`2c!_KD8RQ@rX9>^8O(vme>bD zL`om*kcuDVh;o1R=N#{d#xk?SvUOO@Lcm(4d5)Jf1QX|=mj2!z*Dw<7m)Kqf8U?`` zcT#TA@;ob4wh+gbklf5nSh$J?kVHHogOPN8g12mwp@+|BfZ>-B0WEyp?rttncHM!+~$8EMj~ivSS!Cn~#R@ofwFW%B!f?Y0BW1 z&R?B#BHb({57$E9g#QdS!JZbmH~?3r#4N!mkDw#h+0NzX*D_%Vt(-1<%EFs^P(ohOO8lsC&^!zZubHg5u#!51q- zya1jIA}gsBQzG!bO(nN_1){A5Shp$*TxLs*3%0~)rVJ6KslsB=Bg_Z8ss?S2Pk@=R zlqEH4#cjf8UbVHb3U2_2kbUmBeQfPzV?hE)yeX{GI6K9nXe%m zwR`XsT~m~}UTb!bhv2;YkQ@z-TGK2Ii5)?N86Zq{-E7HL<801Tv()jjbK;=o zTGWT=k8DtLP?85k@n0o_1`Hx>vAC6~%;%Iz^ZU=DMElRC;#Vnd;DpXFSxjEpodMX| z-i9{~O-v#)3OYAZ-d(z<>M!v_d5_(n!+qI&bVY-@$A)kaYO=x+y>cP5dJ)VON6vp{W$Z;3&RLyJX=N5c-2Z$|w_^G5ehpHBVtMaGlw72OS9I-ORJJ$(2nHrg2= z#Mr*JMKH#8=TOWPYTU&+g!D>iZ){yq+mCKP_c=@Kb(KDpCTm>#g%6%jOSS==Nmw5> zz*pVKQY3493i=3N%vhAc4k~}YkZ|7v8<|PyfU3vTFT{yj7VseeZGRJ7>Bc4)SKZmr z^OLtwL23s~|B4!W5(7}XnD%pP6z4Wg7sRDL^8|5QU^yTm)1D3G9_2r2M-hk=D><7) zd&CW+gxHBKxX^Paz?HKV)W5*_GK9N5AzDPidR z^(bf|zD zPO`A%K3NQ@YL3E;aV3IlvrJ*^s7rnv_HTre6kuU~O(3!Y1y%Q&uABi8;iJ;4cL*aH z!OEb8LUBM$=b_2$PyAn1e^G#u&DE>dZ_Y({0U_lxyOTJZsLKX0o*!$yp6(&S3)CmQvISm;&+AEhS2L13=2j&)+ZK zj9}ZHq;EFiz2krkaB;xwJcgs&>Aqw5gIgH7(OUPcT(>(BT6$|jxrU_!H*A5bGzfO{ zLBp6K0W|0|Tm={Ph9X<&z&#`%tE7t08o6wTt%duEy&guX9vqw`vpnR8yLN+>%fSj62gAuYCrx zGoox>bp-_Rc#L-Ov|yvM4Q37Ky<<>nl|l9JQ@=VZ!O`r9deFxG+A!^Kjgfc;KLcIlQs~*icRD1uctcZRrAb;cHw+mW^fKDzWD@+%$Lm zT6OTG#^UZ;J#-rm60UZx{t$}`$}uWaDu_U}5^eD5hRzId4snuM#6;N%2Ws04k5C8x z^__={U51KNs`jV$_lF|r^=SE%8#%N32*ZyrHgKx}A9{!o$U-X>Um`h2BvSk4!q0>@ z0=r;@F(;YdT5G^?ePI8I=9plWz#w+bz$#f-f|zV4_;JZst5QKaCpDMI!$c`;b+K!N z0L!hOLOHdhaIW#D3R+!?y|^E^p;zalO|d~j1$RA9F-tK+wLm$`D02T04lTJsrdw%> zuol2!#K+V$ z{q%l>d?N|*$F**WEW~e!EDR7JdWW?f_oh|N2G|bKaxN6`NRU!c)a|Uic)g;Ga~f=7 z^nFrfn`6bgdyuD@(fK~30QxAd#UQu3DWQDF$kcPgLzlH#?WNX6gYF_ zG_>GUGVW!IPrJ5y$h3seFlf<$s9ViNM5BCFg2~h=J{ug2(b~kT{54L4So<#d^#<)( zF1ONQH#As<)gwgwqe7qBdHOI)KUl!s9f@n%woo4yW&4&()BYE?gfVI{vrfhf4S&Ma z5-Os{hy=`In6)HZ8M}cODMy(y>Kyt|2vd4SvP68D_p2#;H8I)YZ$Zn|n94Vb%lWzE zAPXeDT|M?@*=F7EIfHyrX7YHB#(dZQC@hRL=LWJd#pSGZ>ut4)WddDi*6_!cRXeU15dch z9TT;yfvTAJ{cX=zV}613oR5yU6F;CJH<+;?=zaq;LxG-R_@u+J`yoXTh{ocaogE(L%z*~E>#9@+_)uBqb+#+58i_O3o_GGCg&AK zFKPbj>IE|4p}Ex}+U}EV;26g@3AAI8&~B0kfL)Z(4pMFW^#1bL7r|!AVZvubTqHcB z=a&yaO@QOfj_DL`K{)S^s7sHb;Yluky=Z2;c&D)Xd;Fk{v8F{0(~v0Vo-VSCfcs7v>I{iESJiZo6K8O=zG8FX{8^Ul zgZuoz+B|vj`&$OONa{JI97qkpvKLjpLY1OQVaFCAls8^xZ2@4ioMPAucOY-SPb3MXY7u1Ivo5Uci;fve60Cngy-Xfu;W z#&Rkyzz~rQe%LBa4IHMMIu^Cn`?65M6!5`?BY&Xa@=bDBc&K|FWEI+|pu;9P~5glj~h_a_BY zN2_4BB3wq)_<@J&>{s}j%-C#n{_SPI$P*H9VSF}o_l4z7I8D2WA8OxLwb?!`&DL|@ z!qOc}+-!HA9zGA6*i7K|*1sBw|D@;gyqv;flpQmcc*@0n=evRB#6HEORPjZ%Ch7?C zg5YprtF`-uP%$H4cSb1D{Q%GNI}_=bP*uS$Z8gaD?uW3B8UHVtlus95UZ|Pq6-#>J zvNkzqeMEi_tbmr)cI-qKEy!amIqFlUu5O0Z?7UPmMUnd(&kqjC%!fbS8g3EWL)LQ~ z_?#4+{?514_v{SP;*@d)0xkeF@mv`!z`;}+*%EFLp>14lt1Q6A@w|P%CV4cQxHeOy zg`iy9Y~6}&(I5G&&{F~3D@<#K$rdH&QP4VvKwLs^Z991HDYmLsjXw%+f%YBs(NRT* z2mA91^TkoFm9Bc*r^$j7`;Bj<6W8il&`9nLe}1ZTgsCUiZm>|Pw4ziOGNA^>9HEUs zfNuP1q0$(1-1Rx{Bdvn^R%*F=Ro`jzM$NetCT{ET#QrYnGlH1 z_sBJvX+no~)T077yiRCo2uMtPVVroCAp(Q1?nMGmQ~Z*~Z;x>VVxNU18%$iaDy4jM zk*!gx#{%IuV!h;{SmXR}L1G@m^C)TK&$ajQ=c23Ters1c7YDV4ue3lqyr zCMc*$s7Wd4t;BVZc0*#DKyE!IA58Q2MeKmAeuWS;yCv~8T*le?IK>HzVRu1yY4{nf zM*GyW&x>7thi8UOO)pj12vdAlIgCjz#xW}v{F6bB4MXroQ-r!OP?fa}&WkEG8QmQ~ z*`gH-2;*F$bM9hb#Mhm{wRWGJDbBuiKYvL&vh0Hj1T0j1Re2RK9n`mFiR#gBCU^d; zo@hCS<-(o?QH|9D#oM0f{L6Kk}Ps94Zubkww! zS4lhrF?J$2q>ZZ<5M>UPf(dfzvUPMl#$IQekVHd)D<2HyPa~(n>dtGN z?@!U^h|YLoPVeK^?X368_Ny*;ZjHJMURSW^{kKQq)b_2wen)=N`><y zJ-;jD#$^U*)G$T1wG9R;`cTE66K^0!!r!l(x35BgJ{D^O?X@q*vCc=H=8^SHF7mV4 z!Tz8hICwsRu^s?eBobmBs7CQ9a8@ruu~BLk64A!tQ1xyI9cg_rh>iC*!#IXqq9d;t z3g|DTIc6N}T%_TaqAZIOn7i=?z|I(mDsJFc@z%?zjZrRBBx4`>xmJ+yviJ?`BgPe6 zR$}-B!-cSB3bU&-!#=T(-|!cpaZ6n=cVB^;di?fc{eL z4rxGAf_-mx5f;ep5XZnx(vfYzC@T-olKwk`PzTFoxq4;Z($aypbEMDM`}aJ>Ap6&| zZCy1%hFSc3nJ3FH9K(mJDEoG_B{Q%$6rV0+OPi-IxOX0{JO~Bx+Ua}z;@wQZ9Gb|e zT$*)e{ESbLyfRE;8z-u8@#8r>{m7$?40#(f>tibvt7W&A_twV@BGewK2!Y%wT#la? zOsXw$6u69YOrzkC1QhE&Lof9|Q_LS0!-ohvSm~`{Pt-hV`eoOWfjwR*OU77keP~sU zb^-cQapjwVQE{4nNjd}ivUMH8&KC@**WeXZhy!3sn@tf+<=@!5k*JHQ;?D=2Ewmb4 zLNn%*Z!++?m*t6%K%z}dn$qSmt`(rHa_oT;^IMhF{e~JKr2FFmscS@Ug>T1?a1(DZ zY9C{Lwa;;@SRfm|PlFr2FtFN9^`D!M?4tOSi3?k>wC=#UcvCVP7QB;fhD_lFhdR%2 zMwq&Sv20saLh)yF$|sR>E0`>Lm;{*4>{-s>6?`R2KnVJzU%T&qFt=`pxs&NQa-jRo zRkOd{Bwf`-&R-4*BqO6a?5{STxzAQ0+JLL~i~B#|?bxtd3j&YT0u0d?^5%y^Vu1&B zI0LDS$`~h{-OM%E-GVV~HIwFS~t+yxNhnk`~ z-He#kF_yHrhpi3F`2o|;B*5WgYiE7b{05UocCeC=`_Eb&W6j~AZQDj_PI5%xF%V+G z>-JI@wVm9SuuK%t`=ODZwI)`QKNrRIJOg^1_&Td3xExI_a55OsD*{{U9Q3E(h zZagWjH&yyEFClSg-7K*m<-T9P{(%}hj81?#gs19*1Bs5$4bFDE8;K>!W}Be2kUS~$ z$o1ed47z(Y&i?!DkJATrN`_E*rAtL7+o8D%L>~2OY=R<$X`M?8$=0_6(DAu;oxo|n zT*kOt-y-3X%yGEwjy8)dwb5q|GLi4n_GmVK(t!a}R#06J=&YD)eYY?*P7xK0;r$C& zA7m2)2N;l}rQ@(O-U1in=m?*U>qyC>_@2>sYS~FWTHT^VP&1lfa+Yuo&bFTu_F{W{ zy#l#vcrpU4nd27tgY$NPu|mG9!%6ZL{yYHxFu@Lfs~FdY{`ObKYTiqNP@(88Ez)K% zP98@~?{t%Yw(Uqr5^H`<0;JR7I6^^ZegiL<0}Og?$OZDBMz6 zl=;74jVuwAZI5~e;T>FFnJq)N4t6#MfAF7bMzrdP;#Tw>^yol9dx?BEW28Da?a&jT zb0wOGQF;rh)wo(04i{ER?SGU?|$Ep*gui2Q| z4=P)!ao8L5uX~RwrMcNo57oABO|y0Sqeb;3*88u$V^dz-z9S;dudTg|ydtada+d*A zzaGB?r{!3mNwsaD^PnjhMof`$1k)vipz)dDKtv~qDV)X3unp08^U!uZh6Iy@O$#x@ zGy1KdLazr6p=+S`(9x5tRaWb2UHge=pF-(A`ald%hO>8>zi$An+QIKHfwN11v;WAp z(ksZ^vrve%@!xH<*w&nt@Xfa``X6&d!EF3*Kl{3tWBnEh0|^|c=vezbHc-& zwXLP5_xq8O>Eef<;@)rN+Mf=mUaVJ>jmF%c4;O39wdGc?cWf^7-J38^4|MKBER*PF z($GR~7&rxjI@7w!Z5PN1XcqP>tdbu*>Px?@*i$N8^~cAM$OYB~4OhUtWr94OXubCP zKt9mNwUOT>u)_@@I*%rJl|;C{#K?H)@$tyPYAH>1nknXlG80AA+yL@4=Oy&9{$N}b zoz9E1@%kYNQD*;U_kPoBPLJk$j#PQhq|Sj(Rn)YfT$xBEbpew2;X-p5MT&dXqzKu# zP=jp?UC5LTeg*VW_T0A!79?d?tL9ktmA4cI3AYZ92yqEWf;t5A>xptWE3^&}kwN3w zuXd|0+CG=j`;`(zTy(CXP|GI0UZZ60Z{oTmwvD4r2b)(!CY9VEM|KX@t&R9@qc8W6 zA;O0e^_ay8Ml?0-U!nEPQMyt54$LTeep}%OP*%a0SzF-fxzW&>J&XNive7Nw$EGG% zRHQKoF=l#r->y}i@ioRd-TC=s-^{Jb2e3_GRBw0c{Z;WHm?Zrm&D~-+-W#Ab;iL|r z9t=+HKRld6XZ#J$X*PEw%f^GQAukfMsv8*^6#)(lAPnvIU`>Z!Qn&y%*;gnd8)Tzk z>FBmn^Q8MwPYJ{{e=1duea_m+Yu#|ayJVBjDFk(HLlL^Tzmg-N7NLLrg8MWTW@ybN z;MxsL5>++;p-5SOqjNZ_$D!fcQD>NRcU3_`p2%#Y8hS@pRfbER_*o!oyK5O{USIc3 zYe>8$wjI6OH|c`W2(@WX%=;0P>pNw$A79idSC7OU`gAvmcW#o(I1w^;nPd}|{{e*s zz0j>C#;p?-61wwosL0K9@-zeR3k0upukY?$q&0#Pm9krg_Fej!e46xmSBRtZR=RJ3 z-g&zaQ{JmMLosU8@tIwJc+V1*1I8M|ACT3N?1G!oq-1{L8vfb7eFmy#DLz(2+`cSV zU9z@(WWp@$l7wExK}(mMjk0g(s-K-&Tghi@t-G=Ma)WxnpZiRvZvJSS`ewQp*rFb{ zG#v!#V6M_nb=$N2k9UT|b;)iR+f%1xrqRV!6fZzpy>F2Zd?sikCWdGbZq^op;&auh zlxACzNPPmup{t`jSb9`*>$h3AItza+wo%GHX^k-aTkJP0J=NNG4%+f#4w_ID$t4C~ zdZh>bT1-pTIct4O2#q|qWC~|h^I<2`%7ml$)CC89#-XJ7^zj6RFWBV7DDHl5%0a_H z=%~R^WVH9A#!rBCw~5iw@SD_D=YH{hcI$Qix7?O8)x?*FY5(BbaTJrK)ys(`=3R2x zHq`nyDuc~whn=*9%62{2^cNoIrLt?j@@I*gtb|Foa+c@42X$GyKE<(|doequ0m>G& zjC+1;$H=W(80Z9%FGdh%Ib?@3t&YKOnSd?3!;Z0qX>OED?aybmSncy|b7MLTY6l_n ziiRbr@VHj=HpzKN{3V;%51z>FtxGetV#cZqt3zO?da|Ij?NqK9j0&{z$XNwjq_n~e zp#ip8-~Pc_7VQkb;xKFtA}U1XJ+J|z4%LmK=9)7UPOd!)A_vv*xi}DFNn`Zw#Ku7UM!E!!fpNp>Lx#c;&c?YSms`s=v}}E#G#q z)oF3IH?#zzG}|LD%(ICyRy`)$-RZld4u=eP>LqvTb1kglt3x6BBmY(iuJtzOEcVh; zCOP(+!!yRl*7DB&rJ|Y}X(Emh1sr)rc>Bn2qld79a;N-A4EZq=gt}3-Q3}8i@LqgLF8xX4pUtizw;FE}?f#Sj*aAZ9f+j;FxPJ!7Ep`Rlr}$BpgSYRKGihG9rU!#@vRIRwOzni7jtoyh{+rIhON!H-oUIl z3y2gxr4Y-zuiGs|J#ZRFAWImv%lF_ZgR?Qt1PomhIkz2Hw0k;du>Np!N;^MiEXbTQ zJZtoU+AO+Wp?z%vV-@9Ip&cPrO>a^eM96JhYKXyDno$IsPMLfqqt9 z&VO`4Sf;R;wV1VD7qm~H{-serlFYdh+^=d|E`SFIE zix_|PYj4oLI*e~lACN=0c$!qXtjMqe1vmV-%e(ic$EeXU=IOuM9p|D(<(s0))Myh1 zw!aP*gtahs50;!f7%v4bKf~?_4maLR-{y#c$T_Ut(&iw04|90e z7$x1hk9Ez=* zOi<^j9RcIwDbw0R@w~O#R!aiFO)^(@v_d`xn{^Bb$Q6E90I`NQNK!Jyja?Z#M`kNc z5ly9y0A5b?)pXzP)NsP8Ke!nhN2xMk;KbPyLrO6m0{$GdN?e;H7Wg zz92L#r^j|*qsB$eu<_+<^)@HF`S?s@^abi}g~HT@`Af+~D2j)DdCh02p?7&kmkR6q z30|S&>D-Vaw^~rRHe2MiDJr+DtK@3}l=}O_6HfJNttJ{f-nX@Nr=z1sZx{^gi$BU0 zt6IZeFQ#$eUA=NM={J45-BrSRXO${BGWF0aHP*mBGPUX2I^BId=%MvkwSdEC+Z#u# zP{X62CS6^ai3Ba6g3(!`p7d$qvcc~r*r^%wH?_5$YHqtTA%jQ}dgIjj7qnBe%2W7n zyjoKM^-qXsUSE+MX;*Hx#Z-Dju_*g9 z&vlP3%LhsgG+IYU1}VokH8m5AcTePH=fhpaPpy`9jtlC)LgQY=4{I6ILttL@0_6s2 z#taY7>T6Xvba(}+&%!%CKo)XXePN)S zO#ID11RbcqX*;6x)^jeku9p8sM(BSw&vDT>QDaeag^0Ztue7-DuC;Gup0Ff`Ztalo zcyPD;is|;8R~h}O(76{$;u-&=H{)-553}D)Ry0ki zZmCNtQfaRCk*%{G^B;8}s#kR%Lu9Jq6~UF+D;rHsIS)C4yzYKp7!Qe^Q(cQ+f%z-8 z3@>&gpLo}SRuG)%Z-Luk`gjH)44AhSW;+E+$5?zs9`oBlf&06eO4v}FFDV;LKEjcxeqz8pTnpi>=j@7Fs4|dU;2QTreFHlQTHFifRK(GyWGgJ zo4fZo=CT?2quv$5{Fv<@!$SjjQTAW@2xXY)hulp$JGtba!%78MZ!aR&lYMJts)>$v z*LMc21e~1mS*Q9gB8CX5YMK_RTOzTV^SZFaaeM<>hE`Nk>6Xu8*Z$)}EHF#eM4R zjr5KZKve+evnSSG)p4ibG^Yp{)+^mXU$e6`r`bQKMr4OTu_U0Xpj@Zo_vgeuP z#|v&puc{Cey$lM~W+m?oaSM#>B1dtGOKgi2kMBd?bCaO2OHB#ZDXn89tp{yt$?NpX zitf=Dl`XMhgh;Mt$4aj$Z{;3#g~dxi_LF6fivB00|9Is3e>`%>h^*`wE%krAXW%(Zp3X=c?k41>9zg***^Q^c^xT#WY<<3h>AKT8yIU^$4A%V-& zRJD(DIYc-?3w%z6BhD)D#nWnzq0`OIb+oG+-0e^kDYN zB~F=yAv5VG)ydyEbihtDK`Pz`yLHXRFk>on!>ZyH7HdO~l>PKK8Gej%d0kED#1A#T zR@E2xMI&8rsr8(Pjtzlh%Db6BQ$iqQ&r0p(C74}!aSDJ38uXp_91?(w;iy2FQZkp7 zK=dyQN@j^^RIoDDqg`Ul8LV>>(c0!cpaP-g!5Ld-H{oioRn1HG;r18?G%}rlS^0{vEQJa zmXfhwO7KfH0e5!+vhNq_c<(zKt+Fwf(SmIqu6jU7qk=3k<tWz#4 zw}1Y2t|g;AQh?|lE#tbzL|>e+SP-Fdg_*?uL+%^JSas*FQO`pY(r;ERp!tYnUxqEu z+XsluX;1c7UjP1J76D59KomhZSz?rQD*m2iRB#YM{9gDlGH&0FxYt!9jDx7#;9_8u zi0y z75y3+1z{bun?2ae3yr_?8TyN>o}$gthH5mL9s|brD>oJ)ya?$y8cjV8&|fTvR*;Nz z3N4Wtuh_*S?Dqh%-^d`{c^sq$AT(=r0!$VIQ*jQ@)FgGPf?P&2z3)@u8k#(dEngOc z+ulK+EGy9~0@UFK#~&h+W?bn*XaO|Un0RhHLF`0&JmcR;Bs370MPc)WFrhH0@yaR6 z8S*js(qv;8snW1K(XWH91mY^vGn^)QKDF$2dbm>X@4^R@Z_>ySp!$rRU>~^dP z_aj2J!T03Yh!DcX*;G^GxJju6r%0!=1t{s-T<~keFIjCF?tMmcq|G|`xVsmG8ZM2l zeY6}Jw0mS-SwVPg;0=M$3$Q(V+wYJQ+|ABPtl$0BB_k;!%UbCJT`SXodjf|Q_;<=I zFa9L`Navc)N>(e)dyB?x!_wST-+o;OC5lLPUb$kA_;96(bu`8$6UVKF+AAJ7#;MRXtM6 zO8~Zt1G0%L+sV9EKfajhB$lNer`FRTy)Df(M%cHXl*o`w>kVvf zu|fRNETa(pZR=@$@?cqe0qgHihy*se4FV>r$s+O<#Uj#%2KE~7!J2;nRe{$0t3=aB z@Qq7F6h?>WlpBa#v<&OZR7F${=*eA|=oD-~Ob$gUuA4w9&TYr<+9$D~x?k+Bd00%2 zxnhCS!@Y+{Wg1WPL&iq*uAk`Dy_cvItleV!g`c0ebdB8GdW7&ZCr0#+pZK+%pZHX0 zgwPvhgm4p{ZuA@6AWqCqj3gpmWOWMdJ#!{@f#~&_S6J>B*621Emgwee?8i^hLEM4R z8^=K)vr#z50TAcZ+&B6I_7~1+`p=TmCwjm~TKeMV89-7qr#s#kloY8;uDjMQk*WJE ztE_=+1Q$xqoXmXg!}KC(3=KWBqXd*vps@sUk}t6YX0(KvOnCGr(|2w+5kiv6GXUPSA(=H82fN$d9cKF1so+_1e9#?Mit1@2ym0^grwhv zdg4lN*{Xm(RQ47?Sj%Peo>AF)Q*Dgp0YH;Foe}8eA{zAZ#M2xS$s&NvJaZdf;fZa> z16<5Md41a(`$0O;OY5Zy#FWFrf-;^R$;3rx;>2nJ&<%WL&nSG}T%j4;2nW_=H2jEP z+bj}CXgFaGwWaRQn?hZzqD^Jct>*BBD5K1{kPK{&!trKKBF5p#UG5t;*MsBS435sG znA4&W70X#wV|u45-)Gmb_?r^kUH|Z5<>e-kJ(5Q3iY%6St`<}B=^M7my&uRIHnl<> zzK}Il{?g&6Vnnf+)8u}#IdXd8n)M@M_okwGX?-bI(VIQw{`h!>_T}GayQSu9@21e1*Qo#)qVOH5z?49)=Tx-r^66c=1dYgGNV;W zZbl@G&At)*0HhLOmvusy4d(sW4)Tk5n&PMl#TTes0sUDFjjh(XEa zZX#LpqeL+2W(9xrF`au^Q&OAZADjrOS9Df6wnGVhGy$W8MHd-U<=4iw`L}HfM;?2! zX2wix&Ec1`yEdxOBYMw?PbGTbyj(xSOSA5PEGzo9Rgz4CKu>wei6HF5h^#dd9qu3b z=tnB0POcqObGog@;jsgF_!K<1GgZ!sVQTI;=%&4FGN{!Q@ZwDO6b^J3wkJ^STw(1M zYtB1M>ga`DhByWD^8=$I#+lmQ8>qY6DjCVUC3mu?^I^2LemGkb{A}XH=wOx~sM1ok-uHn<={r!n<)`O!L{D@=o*rrtzyaIi@^YU_K1DWHzhBJoOvdUv^ z1)55EdmiPFRhD()bO5{Y3yza?i6*)WjLZ0yvZyL}p}b(K;%$0DL7RF}!aHK&b-6!G zN-|Q=)gmjjRz2f}Uzup|Jc>O|EcfBJ8hD%7fkzSX}bSc4aF{Z%vPwiM{aJ+y@^ zaFRw13h0A3qNdXR$YSb7#}5`957fYF4i?yHV@D%EX7N7tp*9kx(mqRoFH`r=`2<3I z;|46n!}@;&bI&{iY03fyVX%Zd?GmSre%mksOojP=seCVD=44Kv$bQMA za^(#NdT}XEBGI2I2q(}Lvcj{F=@>US(s`ipc8f}6vq~5xuJaN1o3vDo#SOE_Q0Ce( zz;}h~Sgq;*zESLJ;4vn zDL*4xkN%J*QlhPp5WsA+(w_V}hRqnY|6p7{jZCML#25QM$J@&|{4DxaVky>3vz$S( zTiG)&C*4Vy?nhK-9jto)!IjwWuq+R0R!kc4O+~5zb@0M1>@=^M{0Q~A1brjlXGGN+ zs8m#=GNIpTmr_aMI5c8{+>P*&A$|2wQ-w*hdYz5H&U#+D&4UT@=9#{cI|n(jIq#RB z!j1I8nz2v{-5C4;?Xb9!2zIWiOF1JtgMG!7<2RTad+ex( zQ=_?L_3g4$2j`QkgAt1QyFA-5WQCw+gM!AXo{8_&QF|a$w^v}C)f(DT&7)SPAs2hq zJplrlc4s%WW%qT^rcKV5eLeJn`Wi0ocx4Q~^XD?1`|``PoT5ZOqIA*Q=~7-#SA{r< z0+5-eSQ?L0cTShs~N>%wR?nGN&Ij$>L>!!MtT=WE|lH76A@eS`> zO!IcBzUslT{CZhAdEv7)jPPr|OdS49RkO{}abH_rGp>ub-HsXh%UC&;@JOFIKh@ha zQS=SAicXYSA+_zP?R$(Y{=vCi;;y@5jPMgkk@z)R$uKSjM$Gq&WvH_360_y2x*SWi zx#6|D+=*~gfj#cqvXS7_++0|b@u$HqMc%;7gtrBrv(?!l4VJ34Wv!}SM7DGH<~zmi z`IS5ht`%=vU8kQm$++a2f9yhwSY9EJlADqbnI+|OxV5e)s%OtGM`V$whuAK~v|Ag$ z84Kw?)PO8GXIGfH?T5VTE55EiRT;20_q55I7hFHn_^Q@Mx8X;X(GJEV52}gpPy#h% zN4|;Us3i`jF-8vs{#S8t0T$KQEsUd-G}20U*D%Zw(%mWD-JODnlyrwQh=_nlNQjgm z2ndKE-5?Uu9TMLe(BD<`z3+SP|9igwJPhZYb@n-X?X_3zy=SkrwvXU>TNY7kE8|YA zscXHGd_9s*Vnok)f_&5D*cj#$(6_gaWLnyZJH3~@{BU>=RMMQ*nT{Bue4ob(G0X>| zZ%=z{pGj_KiB46;O|#Qk#>7rD&ewc8t%>MN{cIY<716oOIiEQ#eq)1S9(r?r81*Pg z)UPnskYRp6(q&t`(n*z){z>Qft@+oYQ+n3;Q;{@|2nmqj`j@f8c-uvy1}YuB_}dkt z2C5w@!6Ygj#>~6}j~Pf*rB@=Pf;58by_`Ze=WcG#sh-XB;sghBWej(U(4W5&cM+x( znv~vWo<|H`RqNP69bKX8P3_3C#0?g3*j{x=-?XC|wWqH0U)I;`R17{5r|e}gdlY4- z+3{H^HK>5ALyd0xX?mq_N^+E0x@fhaF?Kc6JPQ2iw%6mbHU+Y2yPITK)ak7AoMCs0 zViky^TIho9!0{GD1NCusT8=o7UAh&8`M6@U$#+sg?x@~gYv{AH)bq3XCu8LFsJ51| zRf=crVe^#1FT6SKYURZut98OtEWq=c?J+f!jVWp@%iw~+wKCLJMVxUjD&xQ7SD4h^ z)yj?is!<_NDTiMnPWf>~NT*)wFiwKbem?r)^UWGCxn!H)#!|nv>2GMUX zai;I8`Xo*GBn>dM7RTBIcZbm)Fql=&{`7f65OpGYI}pR zPIes>dkeKzjPf%+$i9e1zE1X;teLFSV-DKDL?$y(_Z{ApM4k>ByPI^u@h1GW_w{0( z>O{kL&7O#&(rX2Y2FsVlUJs6Z#QX&x#5PS8iAHs#B1t(d`u=t&QE=px^fn}31@%_v z9qd)Z2I; zC%Dm}pMI2XSB9n&($CMRvXm(nk0Vnm-tY;?D6>Z+Lb-(+#+9HI%QYlv1`Vr~eIgQM z1q}nmOMfzYDoXV-ep3$ziQX6$#XSN0lX|FVfU&X@kuw9Z>zX2XBqvaTQX_USO^ziZ zY*axWmGgE0VxB1ar*UlgUDP-h@d9jCx6e%Cru0wJH=W{;v7E52Xi;ZpGFGI@f+>P$ zG*%6cu-Csom?b~<XhcK_Gt*>~P@*|7(sq z@Si#AxIxf=m!oc=Cpw)24{=67soCWX(ZdaHW65wT^KEMLK638Q$P_bXv2^}7wCC5l zYTNDe*>Fg^_j)XG6YMd^#fB9}W6DcojAeW6ha+c)rrY_R7C2egwaScD?%|cL)-`H~ z#rL?z#Ej#;e6&8no+7jF+US`Mq!+JrI95B1H=Ay!i?sKY$@a64-r3s{M9-eR{f4n8 zVUWqb#e03H>UQJZ;n>j^i(*{U4h8KycfJ}ne>c5RI8sHOzn<0p!RxXtDXxvl5!%I#FYW*w4K#FOYV96zb17RKF_GL%!qW3*GU`$2vp zQhOX%ex+w{nA`QT8>UR-4(r#)FBP!1M0gO?k4 z2M-Vsh6AVsMu0zKWL#*f-(qB3NdE6JGXBgO2>$n31GzzO)DtyL%fZ82{s#Odg4ae_Zp<_6yIzE6|mOV`C0=lA*PD@7jE5KH7$g;My) z6?{He==G_l2r>}6(O$`dC3_rJcYbY6h@zFd@_39->0aNRphJ|hX9Xpu=EZ&0dpJw) zd_{fg#+N_TR{DWO3tt)gQIRsF)Kz{mL_1Yk%WUpSX*>VoyyO^oc8uv5;TrbciCNV8 zbB^KUa{WZgvveBabBiT8{f~;C{g%-YxzmB4-12&fZ?H*@D^XT@k!KzpO*TeAAqQgT z_k$|2nu$Ul`8~-k%)KAI86a8wIYOlmmMAbREb7&JdYT{E0;N;6NAv8K9&91k%x%5K zUlV%}vhP-jxR-$5+WZ+cZ?^^+nj`qwF(gTIXLt_jaBaSZ5_4gA6Zsm#qxL)tw_BBV zCy;uqHIeMM>&08FEq2D7`aRexT85}it=VV^wVhU!)169-o|~FG{6-Sc=?{ic_htoB zeG-~t4BMKTOGVKb&0mN6F_K!rX9d3MLvny;YnOSQ!5?a1wA=fZcvF4$?(AJR1k&cJ zvI^vq8SxX_6GXOFv@Oh$J=$X&OX1QW=H~Xz0^zNDyL8$Np;qv3@Y{tQ$@y-$JqTzN zzDAbwL^qgvf@t=}G41ho} zoh6%ZY#DtVNRMRc4`!!CKB7AtKEdEX>%W#jtOV+i_hQdw4x;vgSKf+yhF==wzN?Ms zb^O}UrS4(-;wR*{ghq?WPQ|Y=mf-72H?D=>d_&;4m|ofAi#nDw`j%b1{kh$z^a+tz zDb|E`g(bQko?Y5fk?aJfiB=(b+7P=Iv>Bw-G2S$yO3dCq1NaOI5K4)tGskyS$riK^ z@WpOv;L7M;S}eFVk{Ui5Xgv<;JY9l?8@bQ=+qyndD<~=joQO--kPSkX6VX?>1%rz+*>g?lHCn*lJ9eEd$tRFU^fG{<-mfx3(mQ@Rgqp}%gqe#f zI$Znsv0saEatLknaL$WT(!h~J*OKsX=mW9SO0bf9!y)RyQYWH;@5Y*b=V)!rwCgr$ zqqVN<7fuNcIi>sEP6T8El+~=;XM4y&evr23 zG$)DH)aUWG!q4puQBvF!i9JU5_dNFYL-l>a?9Z2<(;_isqL1<2tM6qwKYe_((Qbl6 zNBB_Rs^@(#3rfOZwuCmnn+g$hjJhok@e1mf&@^;?PbFObu zPbh8TjU}h@y^kdk=2Q{z39}y_dD)U=rzR!X${>d+u%yPSg`zoi28B@w3Q}(F=a;a$ zW^y^Lx^8Q_G#$Je>=H!1m#pFO@o;>n9a(4UYe82wA$}D5Ej8@?-l^S@kNTsdBX^8j z5<4Y=k@Sy~v)7hn3S1PfIZn~t@i$Q^5Ex}xk~e#WxG`Wa`GifjciG#Fqn(I&j!NFr zp)|PB^O``M+L48~9^BdgTHeW-&`cD*dN;WCbN+HFm&>Be4v0AaeK%Vn^A6K; zk-Xu0Pk&G9f!u+mAe%te(TiQXXH`5640$Y*St{8E>3#82iO%-NW0Cy*j$I@1jf|#J z_Z&lNZ@$Pb#7Tsbj=#MbnKPadkCF#!4+M$y=%5`2w7Tm0rs(_TewSR0+sJBI`L?!U zg!}Q{O1ltBJy>Y7fP#h!{;bGG@u+^Bf9EB?_g-L0RH?(!;QGK3HzMLleA+(r=`kZ= z-b4TJ{%lEIUOQonP0zN5wPT%JnN1X1L^3X{jpmYVB!vl~?}>WEQ^gYA9(fD!l?l@y zP>3cbUvOdh3o<_bf*#u_v+=ofu-Ko4(rC8}nmO_`EMeMmcRoOW@;ZlUU+}*AEB`$A zbZ#%|F`I!^yjm^R{%?qZ&Bo#3TunkX!*I#wX8U+;tA*@#N>UNX$KCDWrjJEXY^!YD z^{A@@R{P5W$k89YL8$$jUu6AS%TIr*%(UIs(RS{Pudx0Y@Aimz8b^`eG0I)Zr$BVY z0J_mHtdb3q5gj`!p0}}^%@f z!`O5-%2Ne}$Kz!*uOpZ-vPSUeRRX;4=XEydO?4l9murrA;(g`&T0ILymAuEo-N)jm z@@n|0)|s;K41@S+;_cyCX?Xn9g;dGnBUmG7aj|WYpwV<6u%x_BTD~K&k9@T4} zHJs$0pueOjCL6Cm;yiAX_S0SuTr~F;j1FA%rHvLuty*KtX$!ftUyo-SnKeu$lcxY~ zpeOx6hurV^EWl;X%&F!@_0Pu9JXHUihla5#fJ8N$0>`F-q^g_;W$FY(53(PqOi(N< zJSAh~+Q|aFWynQB0M$M0LBW0!U&V#N;J_67s)@%8ZreF6EZjpst%5Gt{FAaQoGhKT zKWZDcunBFF=fDe}rCfIm&v9b1CTTx4KRoug!D!@xBjon)*fPCmG&M;RDKa&zbB)?44IYjbeHwbdKeOP{hr2g@iyqa3-i+wI_ zmFqDe)R>2rsGlvKs-Tvn%FEwum62A)V-1D(!8n-o9knbT?y#K~+s5@```E&FN59ct zLhXA@_r&2)@k=J=l<(p1XK^y%xYzNH+W2)eJv|wZgLbITeV%9I_9^V&Nqmpydp%l7 z9v5MXj)v-s{j=v;kH35EBBWU1$EpxIwlPY^KSjVV(`=dWn&G%xYQAkmDzT$xmPRP3 zn;5*ttJmVawMdH{5Q!pcA}T6sLhwPhLzYE^7KJv9tB=H3qveG-ZjS+Yd!~&06^BFA zXRBJ9^?lr?c@VSZWPiiq8nYjb;ln)Vsk_Kd;U_4H&E!4xMH8<)4DhoAEbOLrHS70i zJ|hp<+(xKM!_0rOvf9Sjsb{0A<9od4nqeg z+i1x4OP=)YlBOKhN_oW`HtEcG5HBxXYyRe~Q>G+&6Q&X~kSdN^e0+kMYP=e~4*h%n z7tx1^Lx@{d%MQi-jf|56q1xTI0uy+Q?#{B3(zjaRa7eBnFbiZQ>CSWO;eTu^ubI+# zHFoxF;&|X`7aJuPK}{7~Vrg>IoueYB`TUv_tW;gx5{OlJ2LRHO{3{=Ip2yG6zIL}T3OT3kdCanjTE1Gfrm=$D?I%ky+e>8`ZPm)1 zJXrG2(^`mXP5$1ZPwr>)YPLQsA-THpUgMkB&ds!oUuVr^j@x#I8KCebGh%Z7Shp?X z^Lp;#DWMB*d6-PSY>IiI1Oz6C0-J^$@A>VNvdHF^7jt}7{We~G!%@-54^xCbP?GH!2$m9`IP3%8xB9i5T#Tc}r<6X7wKG3=HlYfZqE>TlK0-1(H|QLqBl=Yc?14>$6}m@i9#ll%)a z9!H$s*_IEwXzSS4Cx;drwzvH^J}_t78U%D5E6w!NvSMLs&9l$P`D*IT;znnjbQvmTtuAIKu&=q*@+BUl*v;ZRcYh-MZE;);OkssPW~cAS z7hA!-rHqq$%Ty_Hh&aBdTO}z02cN4%K;-SR!m|2XN?k-5oHXo0ZQ+*As_O*^h#D`^ z5j0A4xGgmgh_w=%eDi#UNp#$Nk2jwwU7u9#A$=vumeE1smc4NcAMt6ngNRE@vwK$WvXhOSog z(d(}*NpDtOuLP&N34L8BSRd3T*4_%`+EcDCJH9#n2%34~Uz}Y0wYHLj)C*@CEz+*p zv2(Y(0b$-2fvh{+7Z;KzCfQ{%8|%=p1ve!-Hxt`3nqVoZprBU4$E=x(Pma+=h_&Fv zq*Z2u!?=lD$oO!!k@7)U8#I8wM%nwj=1ZFIuY=E5$NMV~G)=B6nSXi9tUkBfHP0O2 zn-VZ--RJc@qjs^6^^Rb6Yu*lG=F#Safpb{}{)ltBHhZjAkmtzW>}?&qG&8h$saH#fM0TO#)-`C4C!VzTQOOQ19WL?YdCzQCo>pS# zEw~dE?GtgI>|`_E!kkwC&1NL^#JU)EL~I3mOt{X6`Yv|npByLD#IM1-Z)bn)Ex*-! zZHf%8*41AKL!riUYpk*^-luZGJ-Ke~UL`;J1nv^SyJNTbU?L@qNlVaxs8)&ZRPjqj*pA?*%KpbX34MCTfDcR@-~3dBeBX zK?i1&DQ~6-N|Y3-sz>IZ21TksbWF*)$;W#;@(RC=$&wx5_xzjof<@)S&Y z5aalkY_%Or27E3e;EHZmB!cM^5Zih)T8S#?6$*tS)n<^y7@KyP}CX!#6R}o>-8uM~lVwTD9Co3vZk|O%4im5iRh$ zrB5fRS)9eSEPsstv8d;h`BKRokpmJmy?C~$^6s3(1l1Zgv}uY@Rh+<47_4xg=M0u_An_+3oo*)$PlqNn&nxg8JzE)`W^RH< zevLIhJ@s9pE55C#CnBZN>40_P+qd=gZI9AUAGe-Y?5E#qxnmYG4_58T{Z6(X)d)l^ zvfJ3`R4(rOw9ncmrvyBM*7w2A^yC_B2NVxJpasdz+!6iqUEN2Ar;(iFWjlF% zrZx8X8p{VMGv%GWymw;t_M04q3m->r>^X5JCWr3UV)R?XwVWg;)Pd)!L+54a`g}i7 z-I0`0R%(0e-5*3h)+KMwMaXkE* zUA46o2c{0Jp7fr?HDTjzdlie`UYM?rUJJcV=r9$yi6BC4g{Xh08dW3eF25{M{;m9A zcubm-u(YtT&i9>k$SyOyW|$k;Bx#V3B}beGrnBv7D;UGX8w*1sZ<^YjVz!LeRe*Rd zp<6dU_ihPRq;Cu!gg1rWd%qdEWxjs*UGaNOc}Lf5rv$Oa@F*?DcFP$W=>t>FfOoD2 zZLba*XX{=Iip-}getTW2C_mvdY*^6UW8{s$YSLYG{sJd3CGFWMsrk}KcCf+f;mYc! zVcxv;a^}(t^ z8kMm=n0uetwS!$c37<=81rmHC$dNLhq&wrSR9*_&ShI?t!`h#UcEI+F(Fqo?Lb=(O z-h#|gjl4h5O!z*?fu<#mcJn@5qwUhYwG_K)8%mkxo*|_GSAFS4qpcxqu*5PzNP-VHx*BDwd3=pQUkb6#+?cI?@t2fFJHLayDwDzxV? z+pQcUplCV)q7ufUG~`#icLbd2+DnOGYzf(nW4j7LitVY>u)n_^gXBFQi5aLy+$z8C ze{<&^#dC&z*QzL$`n#&*B>md-MfL$SD~LAfkM?P8bcMr)iU+EZ@^yy`?MXjWtgDWz zScUJ|SJ{^-gh7E9+GO)d*{7?V43OH42e_#jvh5se91Ga5iCDYIWvK%R{S0gj7<+aR z;6<9oM^oAFdQ{;_=aZ7ElIr8few(;f^PqP8E=5+gJJsaajNVl3!1y3tk6U%Nv1zSO zp{q#EK>zxxjVm%u!8EJ)8yZ7T*GB~sF5di^Sua1O-Lup*dRFrezb{Gh8@tnYcrwQn zbv+J;c#u@Vdr21iJ&$WQMP>>Gh;|hiS=^crx7P#wYsRPN9QKaKClK}5XIQEu#r}95HZ9u@o5~7!N(VTUfe^TWGfupSWA>WUH{6&NJ%1ZG#UPu zsxQ=ph`($x5w9O9pDkKoMe2^e(BcanYa$CJVK-Tkrq5s3-HuaariNyf#mk4*Hg*vn zW8S$|IJxEt{}R&l3QemQdFmnS2oerF@1mSY>HMk=>l6(vbn!3lz%9gQJoK+=`-0&6q-(r?a(NwuO?t{3-2k_s?cr~0 zaHe_aRbF*^WFMrA!WkfNJeIFKYtx-`v~E%xeY)|cUPM_;_*TBoRxqn@YQpukkI|Ur zqb0H!9dPWf3?G^Qn zXUG_E-`r}67Q>gG2lAZ?YkEHV%&scV=K1#XP+NzUnlC;?1(}WxEZaNa1_UViT0Z&Lzl=_br*G+&_z*p8 zsS9c&2mzi1`X3DXJqhfpiBNA%xZ_Zq#u9ZrtpfK-#vQUkkLcx zz?Zv;8EY+u&YVAaD{(CIn*Y-JZ7N(FcjFZgnMr-Nq#2GvDr&{qO*dgnwcyrM*IA5Z zTFD=KlZKe|HQI%-xRUHx`>0&o z_V!E^GSzuYtBd-tnI;XI-`(kAE@pn3T2}hznMhGlhUO@oFtN>u2EKZJUe@*W#plfF z7?b^}Nq3VlBDUMKlQ0J1a6^j|Wb?=R--LXqIJ%qfuDW*eW-RRt(`7{Pi3hBk5>FH`mkE z{vsx83v;piVwrhvWcqUXYAX6%y_6q|QVsPD#+0?ySbN;ynDe=cNl@+I%4*-W{#x%_ zSnpPZ{-aSY-s%YTm`CC$5f0d7 zGOft_vNkj3s!}pkan7(gDhGwX6vmOzaK69NzpN)WzVQqbCy7t`n9e$w@6q7QGgX|+14G0WuY$ei>(PZF2Fn$|6$VZ!`gVne&d|01c?sf6bK zI~^GkRYKoD9hp07B{Z2nB{Y%)vT^JDPcPH@)iI@rSLww!-mRsqZd!?#S>2YM zeq)By^f_KeU5;)!Jw<+QGhXJHjy8b@Nbh$)GhW7yL7&4>5rekQZ68_`-O8~z{frMs zY%p%uzKEK$f-k;N#hoTvi&O>xKY7pBs)7XM@{0_P+2uwh-&zfhal;Ib=|IiSt$NqQ zW)+aT=b-@(Mch<#8cHv2!Ot?!62%ga?LzZiYZT><#Hf=NGw+D-wW8go#%BJbI2+wu^IUY@QaT9B(H@le(mr$j+j@4{==g_*#X2Aw4A%)d^2&%lN2xDR%&O5 zF?^EWjUzI*xxVFd#*tnrLgSOl2!VsoJ2>?c>4MP2D6S)NrH&$D^kVx zaR|z9X4V3^d*FuQS7=5y5LXo;P!dIfKpeR6`m!na5bfoRMM91uc>k_021cZ@_FNgU z{a}wM0r&xpYRx!t=~bi`>#9~Vk>hkEO!RWC}3bYZ5$3f0njy3ic&QLpDl74-^#_bX%z@gdZT zn>OZ|@R?SFB;mp+rT`gTE+-@HsUIn z*VR=y-M0T--B69g>za*n6=#eMq9T%5T;=l?bP!X>xEh+S)SB``vH)RC=1S)3Rg0|R z5d)2&Bs0#Qz6Q2^Vk5Vzw`2t$vODT?5Lqe{L{KVHV|{gU2XpWBFNxfKM`ZOPcNe+Y z4}YbA=p87RT5y4z?d_))k4Mj)IWYsehtiB89TxZ`bJ`s9#Zwd46WzHO!sRtMh^;JD z=%33zONf$i!JBIqYGuN=sY^xQp{^7g&y>#&f7up#1IK^z$a04IL2R!mfd~zf_7*Z? zwN%nK<+be0mDqVaoBM$Tq-JixC2ZY&sB|$OU0blXLo^7g>eMkOZxZRRDmc%-GGq$N zFMAT)tTq(1JN&^V6lYZQwvF*?{YaA-*=4+iObjM>MgJx9ILa4+9a?zFZAOP72)OvP zlt|_~+8FYWzlFz2j>py)8KJf*)4w8X^AO_+>7w6c_eND=EFuYF?e27QTgO9hif6^lnHC)i#v!Wgh;2geC3E2ZSbK|*Ql6PeldW3FHpure zcgMjdDOGoHg+0)%jDl+1EKOjp2M3a$#!8MwIuw)Ny|6?GtL^(L|53k){`-tdMM{E% z`oT=JbOST^k!0&lf&5Gfudq`j_1lx(@gL3TbG4wVs~+X@pW1fG7)#@xGD%9asXm$> z(1f@7%37EaRL?puQ|Yoq^g`g|TXZh={q83z&2R>N)kwh#qaEjB@*6bNBV7q<2=lpXC_Sb9c16iP-}n z!CHX}Tw17+d|qlJ5k^5R$y(X_3oXYs{t^d#pF~66UHkOyVa07LwUHg8N>o46Z+vg^ z&?Ohdva6Y~OGNQ~2g`~d9$`*OS*tME`)_d!<*MHWMN)oP5Glo+>D925yXHX~D7D;c zxp&iEv)GL(zS#6rVI+eY>ML}HA`<~VK5{=>V|{@HOU5tSxz%Y~9B2#p1|*T!C2&zC z%r|w>UN48E<`h4ad1zvzthvA?pz8Nw)GyqfO*dazBhMza`kgYWx;B%W@)0{xt6uM6 zX@Hc;3G}Tr{AUHmw^+>>ql$=u!pj7y;03NT*;Eo6qL5TO(j=-R%fXzsK?$q;$j*pw zQK|+XIg&tO12G*kH*}tQNLFAvV~Zhv>20RD+omxbNJ3iH=;9<^-Y)yzHkHX1@tMg% zxPrO_;LNZk&Fw>JE6+--R zS#WQ?m47}%ij!Y^y_dWd|AU0FmaP7=+2Hjy0wR$#%a6))*7RcJT?eSi_%BG+nQ=cD z*1SoMHso9dle{_S)kp3R<-4&3QvHg}_(14$jgo+z_v0XI0qvZYy}VDgEG)Q8*S;E* zxIP|wHzbv-Ao9);|2g^?6@w?Ic7$|oULKDGL8+*x-uans!N&2>zRHp2xPJTi zY(22`=0@OC@tHG$3C=MEC+}}-3{@fjq44nhoy?sUmH|M zrbDKfGa0{U9eK#`W-}+XJ{Vhz4-J`Oi}J18dN;uqW*PSqkFxoERhKSqbYyw38|y(A z%^C7EDD0g>YK!G0`F66*NlJ};KbA)qjbD^5-Lg-eIZi4%0o(v@q>jW`KF9gHNzyRt zZzt34o-|n=o;0W9>(Q-TQ>4Kg{*C8#)LXU_q?s7&2R@#7;V&#dG89Z7hEC7Cr{7Lq zsH@+)*)$l{yKGtQ=<$VGa^f&!Z3ATQYuxKdu3Hgg>jHga`B1wW6dw ztMnPIp=e`AT*#9_4o4G#F}e}|yuKa|3nNpc-8*y6;OKzIlx4R9md}--F?nU7E=G|b zvAxEPBcrijSn|8CmPquiDtKCXOz2Z2zBj@6B4^~7RYDa>9UWz~FS)N)+*ybg%98L9 z_o&5RUU5FbFZE=n7x^&bS8m!rXznw6)$v&Mzm=t) zR4V#$=WNZBpm#Xl%;6_U8Yj=P>rpnRE91mGCD9&LbP|`gqd3mT4r9H)QQ96C$T`pb z*pD@;{ZThAQwfE@9^D#+-_|8&2vvYe3<0g5( zR9S<>PBf7B8KGLx;`dH=GNqe-oWXYv>?$_(IK4fxCA=W1tK+sf``R5-0(~t8xTClV zS=Y>ZJIre2v#R3@OgehaE9B_-%`2!M-bod|_oWjTZZXWSg4D12Afes(^b6xtWWReF z2>|h|Fuld;u)5|cQ|~Y&WQUoh%U3&aqUxGgv`JTw9Q9BRNYwHr-TgtYX&_uGc! zI2UHBHKaS3tkZn0M0em|g||K_x31si_t5!p|K=30 z7Oi@UHjY29la#})U2j|M@TgGU0hxD#Ov!;OLDzns9#ktq2kn}tOPydyAU1P3b%)H} zOVzWa7E11{0v(l_xb*OCQ>W^&CRE7)@jPC}ciN=tF(%wSoe%e`P^Du|7Gii2+qsP_ zo=3T{kF=M%A8j zr(b4pf+zQb?83+L8?IkEGGy~O+C`b7%shk&ALG-jYjwWhnOma&YA%^OA^suK%%V`? z@u-sQHH*Ti5zEI2b@CQ^MtByFI}jy7_tQiklPNvB)uB$9N|n&*Jnx$-A5M!4Ecb^& zR6&%A3^H`Iy*s$#fgF_4@>*Rn?9l}8+vB!88hO$pneQnR(I-&(8}3ptM$#dco7tV= z8QTeU){F(6Fq%b1WGqs7gKpW=)}jzlLNn*3Tay(f%>&`yN6ONV62u3ii)sjUg5%`* z+1ujKZ zGVZpac4ot|rQ`&a3r|zwzKVDpY0-=)C*Qjx$;J8dD+Y(@5`AAA4XRc|IK7Ikcb~90 ze`!jXBArgE6@tpA4sq--qs1dXQN5r*{S5TJE(#+w5u^Z5)8VR`8P0Ql!KG=1w+DwZ zV&{aaHNvrf+X($nYDi#fE*Go-%!dFK{GXpyqP70C(cE~gs8(Z+p*JRi%`NFmi4CK;V7 zHXmfla1h5UCCH(cN$ncxJEs?%vE%#D*FuomkcUo`&5P_H=^EEZx&2`+sfq{U-DhcY zqe3(m=R6`74}urtSIK7uI(o9d*`3kP_mKB8j|x#)JWv2iO^g_R@uvN5JE2+rAky~{kAjPPrwV9iht1blCoz4X?4TKlS3<(8MKrgoCb5nq! z01V(+E?|>7>15-9V_7nS$tHLwpK_RfoPK)T7lY?uEdrQ`*(|F&Ho*mVDo^Usf* zsKC4aO-f0?rw0t=Rdsc9F*mkH^~zXNle5KD!8=>902N~CsLk1`(dFCJ$s`Qm1+fJM zd`d&M=XiqW4obaaL}qM3g&{ir+GY8D@LUnUh`5u=g!}BXT|zg?GXza4Hk;G^A!?p6cJRbIq4B2VVvimH+`08%h`<^PN;_`H*Tjmr?1Cdz}fT%>?OF|Xw|QHqo=`EckZ#0 zMR|(yOc5Mn}yz@d1ip!IQkl_eCocJzabuSnw>NGg8NH)aGSw zUG(t2@4M{*d|f5Hv=DteUGsK5s12){>!TLzB=lihp6WE&r}1J*r3I$Z+2Xfl&OqW4 zl}0CE%d5n}Pbnuh zo19>jR4UI>X>8EmU7f$>!_{&I=Q|l|{1;Ka;6Ip&;fDT~wE-Mn{^8UA)=5qB(%L9F znLDU?+nYGr{oT+2!p6!4IGJ#A03ycA`7d46pu9k`SeP@Mxq}-8D~JOyCSt};(&pBd zR&KE8{%&P1r0Q1>HSRw>)IcE4e`jT4MU+}8u!A>F!g<%pAe9;EbQV2y0!z1xh5TD8 z<3}FKFXx_5F={B>5#ILN2!t-#9*n4T90%vEaK0nz;9_$&f5b6^Cq0Pd>vW`S?)geV z7H!;7?tN_@CnT!BbdEI@$|G>dGo!uC?=vrqn=w_|u;iz(jBEK6J;_FQljnng5=3D9 zmU}K+CL#a)8dZnkjJ@2AXG_O*;SpphW~3GQD0kKFvVv=Li(^lOHYh^+?rSBRvC633 zQmbfRR$MbZt-MwPl1l*j6qX5*-FVPM-&Uz+e*cIV2>%Gkqr6UOtZuya_N?4Rd=Il0j5035_g z0sLK-0Rf4Lf0hRf!w)DA#YGZfpmKI)7e`Yyb2nXfWpPP%b#pH_;04B(=3Kh>1iV;{UERgl!PN=&R#R_wF*QKiJgiO4Ri#AP zWhmTS+|30A*~I`V0hPK^T(s~PQeNem|2>BPJAAH=Ca;b{{$Jw*`1S$p@C$)Be^ERa zdh`D|Mi=b=D@MNzxc~pb=z?>9!3gw!k4FFS`Go*dfG(u({{y>UB_7~E`Hx77Il2RK z$O!_hh>I(rL@w%Lmp2B^fmswxq5RUui@QH$`SL*yc6DnvJM%k|5|WY}9Drrx-~#4% zup^k4g99SL!2#t0zF^=SfJ4MCzp(oku%Bgs`!E;;7#Bl<6A17wi1;N8_B`ww3h3R7 zd$4P6KotS@)J^wNacODm03N1nfa@p-$_7Z2{!jgK(Na}*MLyI33z-921-LW+ zl(UQ1|69UeqIEffxJ2u!?t#Dn|7j=uAlRR10cgS)8m1-y!a~9S3QaI451wLm_sj2^Alz$-#mpyVRHkVDk7(D$dpfJFH z+9LqfVNJbIEih#c>w$}={nGVL?;7Zmz|)`J(Kw)hO}NloKWqaGt^X3IUr~aYS8i^eznRxd z9=mG9F2?phQ2J+x=8DRGb+C{6U!#4X4Y1)pH*B~M8}G8^{Z!mmhNjIG$!+)doPoy^(gtsQLHMIBwt%v~;~8UVFb zfw_||Cxi=VE|h~4uz6e{Fu=i3PA)bmFa`NJixDw(vvzapYMK6Z9f zM>BIaOGigbJ99QuM|*ZBb~iVBc18fDU$Odyw=YQZA7aG|0WblW2}_dg|Gi7DDiLu1{e(d=K{v5u;C7v z7cf}=0ZOiJ#_lf0!j>=$VU)Up53sKJ4?|zzBWCPoZ0BeRjO;9ddE({75tSXbLUY*_ zmqS5{3lVp4x3iSD|S2s-Tg!chGjeZd4DW-VY!09F=e z9e(I8F5vuP3127y3;d@^%@=s7s(VFdg6Gm4jsxdkc^ z4F!Y>)c)f`0paEbmX9qcE?^))^#HOBn2&^A8v&FUfnU^tnw=i(CJ_x-pdsj7YJA|{{sfZ zsQC>B;0yxd!~6#01cAAMI5JmYK0d;_ZxHG@O zIDvsO=M`Ky!5~i9q7Lly&-;M+5iF$4?=TQ2j0t~*0d;T#i;KU(IJtokJXfFP27_UX zM87=?*qp2QfjBuhul5@N;{tv^`2AT9US1$(&u=hJpbqHOdI9orT&Wk(o)DPg{S_Ag z#shHU6&OI6D>Mau6ad5K5WhVO7*60vkw0L(SNjOc&Bbw*R#0vz=xV)CKpw9?%gf0N ziwyKzy#Va0EO7FIIAIgV-^+oZu!XDNVO*S7WdUGk5D=^Aw{ifCi{lCn02t8VKg#jK zCNRI&0RpC_SLp)4c>nB6z@}cIAD|EZkT(GK2R{Qa?yGbLV1U-TiVGB={vR+N*jm!> zIP-A)Df>XksXxnc{n<7iz~KGyK7c#^fbm|{S0D~vKm%Sa$IEq<$ANNx$`J=IgyWBX z_Fz?B)X4J98J1v#UBfx&dPiz}^9?w=xbEj=*5! z$AvhBF2x;g5hw>#OpH@Pl9Q8%SBwiR2{eUMQWPvI$_?Cu2%`S`BCyesxTC3{ ztGhh~I}lJ0U>*n;FSjH&&^$?it$6{}z$M8mA_C$Sg~ALYV4_{zE=&v1G9bDZDlM&q Ik|gT?0aB|t7XSbN literal 0 HcmV?d00001 diff --git a/src/Makefile b/src/Makefile new file mode 100644 index 0000000..3eecbbb --- /dev/null +++ b/src/Makefile @@ -0,0 +1,36 @@ +#CFLAGS="-O2" +FLAGS=-Wall -g `pkg-config --cflags --libs cairo pangocairo x11 xinerama imlib2 glib-2.0` +PROGNAME=tint2 +FILES=tint.c server.c panel.c config.c taskbar/task.c taskbar/taskbar.c clock/clock.c systray/docker.c systray/icons.c systray/kde.c systray/net.c systray/xproperty.c util/window.c util/area.c + +ifndef DESTDIR + ifndef PREFIX + BINDIR=/usr/bin + XDG_CONFIG_DIR=/etc/xdg + else + BINDIR=$(PREFIX)/bin + XDG_CONFIG_DIR=/etc/xdg + endif +else + BINDIR=$(DESTDIR)/usr/bin + XDG_CONFIG_DIR=$(DESTDIR)/etc/xdg +endif + + +$(PROGNAME): $(FILES) $(SYSTRAYOBJ) + $(CC) $(CFLAGS) $(FLAGS) -I. -Iutil -Iclock -Itaskbar -Isystray -o $(PROGNAME) $(FILES) + strip $(PROGNAME) + +install: + mkdir -p $(BINDIR) + mkdir -p $(XDG_CONFIG_DIR)/tint2 + install $(PROGNAME) $(BINDIR) + cp -f ../tintrc06 $(XDG_CONFIG_DIR)/tint2/tint2rc + cp -f ../doc/man/tint2.1 /usr/man/man1 + +uninstall: + rm -f $(BINDIR)/$(PROGNAME) + +clean: + rm -f $(PROGNAME) + diff --git a/src/clock/clock.c b/src/clock/clock.c new file mode 100644 index 0000000..f91e969 --- /dev/null +++ b/src/clock/clock.c @@ -0,0 +1,126 @@ +/************************************************************************** +* +* Tint2 : clock +* +* Copyright (C) 2008 thierry lorthiois (lorthiois@bbsoft.fr) +* +* This program is free software; you can redistribute it and/or +* modify it under the terms of the GNU General Public License version 2 +* as published by the Free Software Foundation. +* +* This program is distributed in the hope that 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. +**************************************************************************/ + +#include +#include +#include +#include +#include + +#include "window.h" +#include "server.h" +#include "area.h" +#include "clock.h" + + +void init_clock(Clock *clock, int panel_height) +{ + char buf_time[40]; + char buf_date[40]; + int time_height, time_height_ink, date_height, date_height_ink; + + if (!clock->time1_format) return; + + if (strchr(clock->time1_format, 'S') == NULL) clock->time_precision = 60; + else clock->time_precision = 1; + + gettimeofday(&clock->clock, 0); + clock->clock.tv_sec -= clock->clock.tv_sec % clock->time_precision; + + strftime(buf_time, sizeof(buf_time), clock->time1_format, localtime(&clock->clock.tv_sec)); + if (clock->time2_format) + strftime(buf_date, sizeof(buf_date), clock->time2_format, localtime(&clock->clock.tv_sec)); + + get_text_size(clock->time1_font_desc, &time_height_ink, &time_height, panel_height, buf_time, strlen(buf_time)); + clock->time1_posy = (clock->area.height - time_height) / 2; + + if (clock->time2_format) { + get_text_size(clock->time2_font_desc, &date_height_ink, &date_height, panel_height, buf_date, strlen(buf_date)); + + clock->time1_posy -= ((date_height_ink + 2) / 2); + clock->time2_posy = clock->time1_posy + time_height + 2 - (time_height - time_height_ink)/2 - (date_height - date_height_ink)/2; + } +} + + +int draw_foreground_clock (void *obj, cairo_t *c) +{ + Clock *clock = obj; + PangoLayout *layout; + char buf_time[40]; + char buf_date[40]; + int time_width, date_width, new_width; + + time_width = date_width = 0; + strftime(buf_time, sizeof(buf_time), clock->time1_format, localtime(&clock->clock.tv_sec)); + if (clock->time2_format) + strftime(buf_date, sizeof(buf_date), clock->time2_format, localtime(&clock->clock.tv_sec)); + + layout = pango_cairo_create_layout (c); + + // check width + pango_layout_set_font_description (layout, clock->time1_font_desc); + pango_layout_set_indent(layout, 0); + pango_layout_set_text (layout, buf_time, strlen(buf_time)); + pango_layout_get_pixel_size (layout, &time_width, NULL); + if (clock->time2_format) { + pango_layout_set_font_description (layout, clock->time2_font_desc); + pango_layout_set_indent(layout, 0); + pango_layout_set_text (layout, buf_date, strlen(buf_date)); + pango_layout_get_pixel_size (layout, &date_width, NULL); + } + if (time_width > date_width) new_width = time_width; + else new_width = date_width; + new_width += (2*clock->area.paddingx) + (2*clock->area.border.width); + + if (new_width > clock->area.width || (new_width != clock->area.width && date_width > time_width)) { + printf("clock_width %d, new_width %d\n", clock->area.width, new_width); + clock->area.width = new_width; + + g_object_unref (layout); + return 1; + } + + // draw layout + pango_layout_set_font_description (layout, clock->time1_font_desc); + pango_layout_set_width (layout, clock->area.width * PANGO_SCALE); + pango_layout_set_alignment (layout, PANGO_ALIGN_CENTER); + pango_layout_set_text (layout, buf_time, strlen(buf_time)); + + cairo_set_source_rgba (c, clock->font.color[0], clock->font.color[1], clock->font.color[2], clock->font.alpha); + + pango_cairo_update_layout (c, layout); + cairo_move_to (c, 0, clock->time1_posy); + pango_cairo_show_layout (c, layout); + + if (clock->time2_format) { + pango_layout_set_font_description (layout, clock->time2_font_desc); + pango_layout_set_indent(layout, 0); + pango_layout_set_text (layout, buf_date, strlen(buf_date)); + pango_layout_set_width (layout, clock->area.width * PANGO_SCALE); + + pango_cairo_update_layout (c, layout); + cairo_move_to (c, 0, clock->time2_posy); + pango_cairo_show_layout (c, layout); + } + + g_object_unref (layout); + return 0; +} + diff --git a/src/clock/clock.h b/src/clock/clock.h new file mode 100644 index 0000000..0d3e9e1 --- /dev/null +++ b/src/clock/clock.h @@ -0,0 +1,39 @@ +/************************************************************************** +* clock : +* - draw clock, adjust width +* +**************************************************************************/ + +#ifndef CLOCK_H +#define CLOCK_H + +#include +#include "common.h" +#include "area.h" + + +typedef struct Clock { + // -------------------------------------------------- + // always start with area + Area area; + + config_color font; + PangoFontDescription *time1_font_desc; + PangoFontDescription *time2_font_desc; + int time1_posy; + int time2_posy; + char *time1_format; + char *time2_format; + + struct timeval clock; + int time_precision; +} Clock; + + +// initialize clock : y position, precision, ... +void init_clock(Clock *clock, int panel_height); + +int draw_foreground_clock (void *obj, cairo_t *c); + + +#endif diff --git a/src/config.c b/src/config.c new file mode 100644 index 0000000..c38cfec --- /dev/null +++ b/src/config.c @@ -0,0 +1,751 @@ +/************************************************************************** +* +* Tint2 : read/write config file +* +* Copyright (C) 2007 PÃ¥l Staurland (staura@gmail.com) +* Modified (C) 2008 thierry lorthiois (lorthiois@bbsoft.fr) +* +* This program is free software; you can redistribute it and/or +* modify it under the terms of the GNU General Public License version 2 +* as published by the Free Software Foundation. +* +* This program is distributed in the hope that 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. +**************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "common.h" +#include "server.h" +#include "task.h" +#include "taskbar.h" +#include "clock.h" +#include "panel.h" +#include "config.h" +#include "window.h" + + +void cleanup_taskbar() +{ + Task *tsk; + Taskbar *tskbar; + GSList *l0; + for (l0 = panel.area.list; l0 ; l0 = l0->next) { + tskbar = l0->data; + GSList *l1; + for (l1 = tskbar->area.list; l1 ; l1 = l1->next) { + tsk = l1->data; + remove_task (tsk); + } + g_slist_free(tskbar->area.list); + } + g_slist_free(panel.area.list); + panel.area.list = 0; +} + + +void cleanup () +{ + if (panel.old_task_font) free(panel.old_task_font); + if (g_task.font_desc) pango_font_description_free(g_task.font_desc); + if (panel.clock.time1_font_desc) pango_font_description_free(panel.clock.time1_font_desc); + if (panel.clock.time2_font_desc) pango_font_description_free(panel.clock.time2_font_desc); + cleanup_taskbar(); + if (panel.clock.time1_format) g_free(panel.clock.time1_format); + if (panel.clock.time2_format) g_free(panel.clock.time2_format); + if (server.monitor) free(server.monitor); + XCloseDisplay(server.dsp); +} + + +void copy_file(const char *pathSrc, const char *pathDest) +{ + FILE *fileSrc, *fileDest; + char line[100]; + int nb; + + fileSrc = fopen(pathSrc, "rb"); + if (fileSrc == NULL) return; + + fileDest = fopen(pathDest, "wb"); + if (fileDest == NULL) return; + + while ((nb = fread(line, 1, 100, fileSrc)) > 0) fwrite(line, 1, nb, fileDest); + + fclose (fileDest); + fclose (fileSrc); +} + + +void extract_values (const char *value, char **value1, char **value2) +{ + char *b; + + if (*value1) free (*value1); + if (*value2) free (*value2); + + if ((b = strchr (value, ' '))) { + b[0] = '\0'; + b++; + *value2 = strdup (b); + g_strstrip(*value2); + } + else *value2 = 0; + + *value1 = strdup (value); + g_strstrip(*value1); +} + + +int hex_char_to_int (char c) +{ + int r; + + if (c >= '0' && c <= '9') r = c - '0'; + else if (c >= 'a' && c <= 'f') r = c - 'a' + 10; + else if (c >= 'A' && c <= 'F') r = c - 'A' + 10; + else r = 0; + + return r; +} + + +int hex_to_rgb (char *hex, int *r, int *g, int *b) +{ + int len; + + if (hex == NULL || hex[0] != '#') return (0); + + len = strlen (hex); + if (len == 3 + 1) { + *r = hex_char_to_int (hex[1]); + *g = hex_char_to_int (hex[2]); + *b = hex_char_to_int (hex[3]); + } + else if (len == 6 + 1) { + *r = hex_char_to_int (hex[1]) * 16 + hex_char_to_int (hex[2]); + *g = hex_char_to_int (hex[3]) * 16 + hex_char_to_int (hex[4]); + *b = hex_char_to_int (hex[5]) * 16 + hex_char_to_int (hex[6]); + } + else if (len == 12 + 1) { + *r = hex_char_to_int (hex[1]) * 16 + hex_char_to_int (hex[2]); + *g = hex_char_to_int (hex[5]) * 16 + hex_char_to_int (hex[6]); + *b = hex_char_to_int (hex[9]) * 16 + hex_char_to_int (hex[10]); + } + else return 0; + + return 1; +} + + +void get_color (char *hex, double *rgb) +{ + int r, g, b; + hex_to_rgb (hex, &r, &g, &b); + + rgb[0] = (r / 255.0); + rgb[1] = (g / 255.0); + rgb[2] = (b / 255.0); +} + + +void get_action (char *event, int *action) +{ + if (strcmp (event, "none") == 0) + *action = NONE; + else if (strcmp (event, "close") == 0) + *action = CLOSE; + else if (strcmp (event, "toggle") == 0) + *action = TOGGLE; + else if (strcmp (event, "iconify") == 0) + *action = ICONIFY; + else if (strcmp (event, "shade") == 0) + *action = SHADE; + else if (strcmp (event, "toggle_iconify") == 0) + *action = TOGGLE_ICONIFY; +} + + +void add_entry (char *key, char *value) +{ + char *value1=0, *value2=0; + + /* Background and border */ + if (strcmp (key, "rounded") == 0) { + // 'rounded' is the first parameter => alloc a new background + Area *back = calloc(1, sizeof(Area)); + back->border.rounded = atoi (value); + list_back = g_slist_append(list_back, back); + } + else if (strcmp (key, "border_width") == 0) { + Area *back = g_slist_last(list_back)->data; + back->border.width = atoi (value); + } + else if (strcmp (key, "background_color") == 0) { + Area *back = g_slist_last(list_back)->data; + extract_values(value, &value1, &value2); + get_color (value1, back->back.color); + if (value2) back->back.alpha = (atoi (value2) / 100.0); + else back->back.alpha = 0.5; + } + else if (strcmp (key, "border_color") == 0) { + Area *back = g_slist_last(list_back)->data; + extract_values(value, &value1, &value2); + get_color (value1, back->border.color); + if (value2) back->border.alpha = (atoi (value2) / 100.0); + else back->border.alpha = 0.5; + } + + /* Panel */ + else if (strcmp (key, "panel_monitor") == 0) { + panel.monitor = atoi (value); + if (panel.monitor > 0) panel.monitor -= 1; + } + else if (strcmp (key, "panel_size") == 0) { + extract_values(value, &value1, &value2); + panel.area.width = atoi (value1); + if (value2) panel.area.height = atoi (value2); + } + else if (strcmp (key, "panel_margin") == 0) { + extract_values(value, &value1, &value2); + panel.marginx = atoi (value1); + if (value2) panel.marginy = atoi (value2); + } + else if (strcmp (key, "panel_padding") == 0) { + extract_values(value, &value1, &value2); + panel.area.paddingx = atoi (value1); + if (value2) panel.area.paddingy = atoi (value2); + } + else if (strcmp (key, "panel_position") == 0) { + extract_values(value, &value1, &value2); + if (strcmp (value1, "top") == 0) panel.position = TOP; + else panel.position = BOTTOM; + + if (!value2) panel.position = CENTER; + else { + if (strcmp (value2, "left") == 0) panel.position |= LEFT; + else { + if (strcmp (value2, "right") == 0) panel.position |= RIGHT; + else panel.position |= CENTER; + } + } + } + else if (strcmp (key, "font_shadow") == 0) + g_task.font_shadow = atoi (value); + else if (strcmp (key, "panel_background_id") == 0) { + int id = atoi (value); + Area *back = g_slist_nth_data(list_back, id); + memcpy(&panel.area.back, &back->back, sizeof(Color)); + memcpy(&panel.area.border, &back->border, sizeof(Border)); + } + + /* Clock */ + else if (strcmp (key, "time1_format") == 0) { + if (panel.clock.time1_format) g_free(panel.clock.time1_format); + if (strlen(value) > 0) panel.clock.time1_format = strdup (value); + else panel.clock.time1_format = 0; + } + else if (strcmp (key, "time2_format") == 0) { + if (panel.clock.time2_format) g_free(panel.clock.time2_format); + if (strlen(value) > 0) panel.clock.time2_format = strdup (value); + else panel.clock.time2_format = 0; + } + else if (strcmp (key, "time1_font") == 0) { + if (panel.clock.time1_font_desc) pango_font_description_free(panel.clock.time1_font_desc); + panel.clock.time1_font_desc = pango_font_description_from_string (value); + } + else if (strcmp (key, "time2_font") == 0) { + if (panel.clock.time2_font_desc) pango_font_description_free(panel.clock.time2_font_desc); + panel.clock.time2_font_desc = pango_font_description_from_string (value); + } + else if (strcmp (key, "clock_font_color") == 0) { + extract_values(value, &value1, &value2); + get_color (value1, panel.clock.font.color); + if (value2) panel.clock.font.alpha = (atoi (value2) / 100.0); + else panel.clock.font.alpha = 0.1; + } + else if (strcmp (key, "clock_padding") == 0) { + extract_values(value, &value1, &value2); + panel.clock.area.paddingx = atoi (value1); + if (value2) panel.clock.area.paddingy = atoi (value2); + } + else if (strcmp (key, "clock_background_id") == 0) { + int id = atoi (value); + Area *back = g_slist_nth_data(list_back, id); + memcpy(&panel.clock.area.back, &back->back, sizeof(Color)); + memcpy(&panel.clock.area.border, &back->border, sizeof(Border)); + } + + /* Taskbar */ + else if (strcmp (key, "taskbar_mode") == 0) { + if (strcmp (value, "multi_desktop") == 0) panel.mode = MULTI_DESKTOP; + else if (strcmp (value, "multi_monitor") == 0) panel.mode = MULTI_MONITOR; + else panel.mode = SINGLE_DESKTOP; + } + else if (strcmp (key, "taskbar_padding") == 0) { + extract_values(value, &value1, &value2); + g_taskbar.paddingx = atoi (value1); + if (value2) g_taskbar.paddingy = atoi (value2); + } + else if (strcmp (key, "taskbar_background_id") == 0) { + int id = atoi (value); + Area *back = g_slist_nth_data(list_back, id); + memcpy(&g_taskbar.back, &back->back, sizeof(Color)); + memcpy(&g_taskbar.border, &back->border, sizeof(Border)); + } + + /* Task */ + else if (strcmp (key, "task_text") == 0) + g_task.text = atoi (value); + else if (strcmp (key, "task_icon") == 0) + g_task.icon = atoi (value); + else if (strcmp (key, "task_centered") == 0) + g_task.centered = atoi (value); + else if (strcmp (key, "task_width") == 0) + g_task.maximum_width = atoi (value); + else if (strcmp (key, "task_padding") == 0) { + extract_values(value, &value1, &value2); + g_task.area.paddingx = atoi (value1); + g_task.area_active.paddingx = atoi (value1); + if (value2) { + g_task.area.paddingy = atoi (value2); + g_task.area_active.paddingy = atoi (value2); + } + } + else if (strcmp (key, "task_font") == 0) { + if (g_task.font_desc) pango_font_description_free(g_task.font_desc); + g_task.font_desc = pango_font_description_from_string (value); + } + else if (strcmp (key, "task_font_color") == 0) { + extract_values(value, &value1, &value2); + get_color (value1, g_task.font.color); + if (value2) g_task.font.alpha = (atoi (value2) / 100.0); + else g_task.font.alpha = 0.1; + } + else if (strcmp (key, "task_active_font_color") == 0) { + extract_values(value, &value1, &value2); + get_color (value1, g_task.font_active.color); + if (value2) g_task.font_active.alpha = (atoi (value2) / 100.0); + else g_task.font_active.alpha = 0.1; + } + else if (strcmp (key, "task_background_id") == 0) { + int id = atoi (value); + Area *back = g_slist_nth_data(list_back, id); + memcpy(&g_task.area.back, &back->back, sizeof(Color)); + memcpy(&g_task.area.border, &back->border, sizeof(Border)); + } + else if (strcmp (key, "task_active_background_id") == 0) { + int id = atoi (value); + Area *back = g_slist_nth_data(list_back, id); + memcpy(&g_task.area_active.back, &back->back, sizeof(Color)); + memcpy(&g_task.area_active.border, &back->border, sizeof(Border)); + } + + /* Mouse actions */ + else if (strcmp (key, "mouse_middle") == 0) + get_action (value, &panel.mouse_middle); + else if (strcmp (key, "mouse_right") == 0) + get_action (value, &panel.mouse_right); + else if (strcmp (key, "mouse_scroll_up") == 0) + get_action (value, &panel.mouse_scroll_up); + else if (strcmp (key, "mouse_scroll_down") == 0) + get_action (value, &panel.mouse_scroll_down); + + + /* Read old config for backward compatibility */ + else if (strcmp (key, "font") == 0) { + panel.old_config_file = 1; + if (g_task.font_desc) pango_font_description_free(g_task.font_desc); + g_task.font_desc = pango_font_description_from_string (value); + if (panel.old_task_font) free(panel.old_task_font); + panel.old_task_font = strdup (value); + } + else if (strcmp (key, "font_color") == 0) + get_color (value, g_task.font.color); + else if (strcmp (key, "font_alpha") == 0) + g_task.font.alpha = (atoi (value) / 100.0); + else if (strcmp (key, "font_active_color") == 0) + get_color (value, g_task.font_active.color); + else if (strcmp (key, "font_active_alpha") == 0) + g_task.font_active.alpha = (atoi (value) / 100.0); + else if (strcmp (key, "panel_show_all_desktop") == 0) { + if (atoi (value) == 0) panel.mode = SINGLE_DESKTOP; + else panel.mode = MULTI_DESKTOP; + } + else if (strcmp (key, "panel_width") == 0) + panel.area.width = atoi (value); + else if (strcmp (key, "panel_height") == 0) + panel.area.height = atoi (value); + else if (strcmp (key, "panel_background") == 0) + panel.old_panel_background = atoi (value); + else if (strcmp (key, "panel_background_alpha") == 0) + panel.area.back.alpha = (atoi (value) / 100.0); + else if (strcmp (key, "panel_border_alpha") == 0) + panel.area.border.alpha = (atoi (value) / 100.0); + else if (strcmp (key, "task_icon") == 0) + panel.old_task_icon = atoi (value); + else if (strcmp (key, "task_background") == 0) + panel.old_task_background = atoi (value); + else if (strcmp (key, "task_background_alpha") == 0) + g_task.area.back.alpha = (atoi (value) / 100.0); + else if (strcmp (key, "task_active_background_alpha") == 0) + g_task.area_active.back.alpha = (atoi (value) / 100.0); + else if (strcmp (key, "task_border_alpha") == 0) + g_task.area.border.alpha = (atoi (value) / 100.0); + else if (strcmp (key, "task_active_border_alpha") == 0) + g_task.area_active.border.alpha = (atoi (value) / 100.0); + // disabled parameters + else if (strcmp (key, "task_active_border_width") == 0) ; + else if (strcmp (key, "task_active_rounded") == 0) ; + + else + fprintf(stderr, "Invalid option: \"%s\", correct your config file\n", key); + + if (value1) free (value1); + if (value2) free (value2); +} + + +int parse_line (const char *line) +{ + char *a, *b, *key, *value; + + /* Skip useless lines */ + if ((line[0] == '#') || (line[0] == '\n')) return 0; + if (!(a = strchr (line, '='))) return 0; + + /* overwrite '=' with '\0' */ + a[0] = '\0'; + key = strdup (line); + a++; + + /* overwrite '\n' with '\0' if '\n' present */ + if ((b = strchr (a, '\n'))) b[0] = '\0'; + + value = strdup (a); + + g_strstrip(key); + g_strstrip(value); + + add_entry (key, value); + + free (key); + free (value); + return 1; +} + + +void config_taskbar() +{ + int i, j; + + if (g_task.area.border.rounded > g_task.area.height/2) { + g_task.area.border.rounded = g_task.area.height/2; + g_task.area_active.border.rounded = g_task.area.border.rounded; + } + + for (i=0 ; i < 15 ; i++) { + server.nb_desktop = server_get_number_of_desktop (); + if (server.nb_desktop > 0) break; + sleep(1); + } + if (server.nb_desktop == 0) { + server.nb_desktop = 1; + fprintf(stderr, "tint2 warning : cannot found number of desktop.\n"); + } + + cleanup_taskbar(); + + panel.nb_desktop = server.nb_desktop; + if (panel.mode == MULTI_MONITOR) panel.nb_monitor = server.nb_monitor; + else panel.nb_monitor = 1; + + // TODO: mémoriser le pointeur sur la première + // malgré l'apparant désordre, les taskbars sont ordonnées + Taskbar *new_tskbar; + for (i=0 ; i < panel.nb_desktop ; i++) { + for (j=0 ; j < panel.nb_monitor ; j++) { + new_tskbar = calloc(1, sizeof(Taskbar)); + memcpy(&new_tskbar->area, &g_taskbar, sizeof(Area)); + new_tskbar->desktop = i; + new_tskbar->monitor = j; + + panel.area.list = g_slist_append(panel.area.list, new_tskbar); + } + } + /* + comment faire pour parcourir les barres de taches ? on ne peut pas se baser sur l'ordre des éléments !! + a t'on besoin de parcourir les barres de taches ?? OUI !! bof ?? + => resize_taskbar() dans panel.c => + => task_refresh_tasklist () dans taskbar.c + => Task *task_get_task (Window win) dans taskbar.c + => event_button_press (int x, int y) dans tint.c => area->event_button_press() est conseillé !! + cela enlève aussi l'organisation des barres de taches en tableau à 2 dimensions + il est possible de mémoriser un pointeur sur la première barre de taches +*/ + + //printf("tasbar (desktop x monitor) : (%d x %d)\n", panel.nb_desktop, panel.nb_monitor); + resize_taskbar(); + task_refresh_tasklist (); + panel.refresh = 1; +} + + +void config_finish () +{ + int height_ink, height; + + if (panel.old_config_file) save_config(); + + // get monitor's configuration + get_monitors(); + + if (panel.monitor > (server.nb_monitor-1)) { + panel.sleep_mode = 1; + printf("tint2 sleep and wait monitor %d.\n", panel.monitor+1); + } + else { + panel.sleep_mode = 0; + //printf("tint2 wake up on monitor %d\n", panel.monitor+1); + if (!server.monitor[panel.monitor].width || !server.monitor[panel.monitor].height) + fprintf(stderr, "tint2 error : invalid monitor size.\n"); + } + + if (!panel.area.width) panel.area.width = server.monitor[panel.monitor].width; + + // taskbar + g_taskbar.posy = panel.area.border.width + panel.area.paddingy; + g_taskbar.height = panel.area.height - (2 * g_taskbar.posy); + g_taskbar.redraw = 1; + + // task + g_task.area.posy = g_taskbar.posy + g_taskbar.border.width + g_taskbar.paddingy; + g_task.area_active.posy = g_task.area.posy; + g_task.area.height = panel.area.height - (2 * g_task.area.posy); + g_task.area_active.height = g_task.area.height; + g_task.area.redraw = 1; + + if (!g_task.maximum_width) + g_task.maximum_width = server.monitor[panel.monitor].width; + + if (panel.area.border.rounded > panel.area.height/2) + panel.area.border.rounded = panel.area.height/2; + + // clock + panel.clock.area.posy = panel.area.border.width + panel.area.paddingy; + panel.clock.area.height = panel.area.height - (2 * panel.clock.area.posy); + panel.clock.area.redraw = 1; + init_clock(&panel.clock, panel.area.height); + + // compute vertical position : text and icon + get_text_size(g_task.font_desc, &height_ink, &height, panel.area.height, "TAjpg", 5); + g_task.text_posy = (g_task.area.height - height) / 2.0; + + // add task_icon_size + g_task.text_posx = g_task.area.paddingx + g_task.area.border.width; + if (g_task.icon) { + g_task.icon_size1 = g_task.area.height - (2 * g_task.area.paddingy); + g_task.text_posx += g_task.icon_size1; + g_task.icon_posy = (g_task.area.height - g_task.icon_size1) / 2; + } + + config_taskbar(); + + // cleanup background list + GSList *l0; + for (l0 = list_back; l0 ; l0 = l0->next) { + free(l0->data); + } + g_slist_free(list_back); +} + + +int config_read () +{ + const gchar * const * system_dirs; + char *path1, *path2, *dir; + gint i; + + // check tint2rc file according to XDG specification + path1 = g_build_filename (g_get_user_config_dir(), "tint2", "tint2rc", NULL); + if (!g_file_test (path1, G_FILE_TEST_EXISTS)) { + + path2 = 0; + system_dirs = g_get_system_config_dirs(); + for (i = 0; system_dirs[i]; i++) { + path2 = g_build_filename(system_dirs[i], "tint2", "tint2rc", NULL); + + if (g_file_test(path2, G_FILE_TEST_EXISTS)) break; + g_free (path2); + path2 = 0; + } + + if (path2) { + // copy file in user directory (path1) + dir = g_build_filename (g_get_user_config_dir(), "tint2", NULL); + if (!g_file_test (dir, G_FILE_TEST_IS_DIR)) g_mkdir(dir, 0777); + g_free(dir); + + copy_file(path2, path1); + g_free(path2); + } + } + + i = config_read_file (path1); + g_free(path1); + return i; +} + + +int config_read_file (const char *path) +{ + FILE *fp; + char line[80]; + + if ((fp = fopen(path, "r")) == NULL) return 0; + + while (fgets(line, sizeof(line), fp) != NULL) + parse_line (line); + + fclose (fp); + return 1; +} + + +void save_config () +{ + fprintf(stderr, "tint2 warning : convert user's config file\n"); + panel.area.paddingx = panel.area.paddingy = panel.marginx; + panel.marginx = panel.marginy = 0; + + if (panel.old_task_icon == 0) g_task.icon_size1 = 0; + if (panel.old_panel_background == 0) panel.area.back.alpha = 0; + if (panel.old_task_background == 0) { + g_task.area.back.alpha = 0; + g_task.area_active.back.alpha = 0; + } + g_task.area.border.rounded = g_task.area.border.rounded / 2; + g_task.area_active.border.rounded = g_task.area.border.rounded; + panel.area.border.rounded = panel.area.border.rounded / 2; + + char *path; + FILE *fp; + + path = g_build_filename (g_get_user_config_dir(), "tint2", "tint2rc", NULL); + fp = fopen(path, "w"); + g_free(path); + if (fp == NULL) return; + + fputs("#---------------------------------------------\n", fp); + fputs("# TINT CONFIG FILE\n", fp); + fputs("#---------------------------------------------\n\n", fp); + fputs("#---------------------------------------------\n", fp); + fputs("# PANEL\n", fp); + fputs("#---------------------------------------------\n", fp); + if (panel.mode == SINGLE_DESKTOP) fputs("panel_mode = single_desktop\n", fp); + else fputs("panel_mode = multi_desktop\n", fp); + fputs("panel_monitor = 1\n", fp); + if (panel.position & BOTTOM) fputs("panel_position = bottom", fp); + else fputs("panel_position = top", fp); + if (panel.position & LEFT) fputs(" left\n", fp); + else if (panel.position & RIGHT) fputs(" right\n", fp); + else fputs(" center\n", fp); + fprintf(fp, "panel_size = %d %d\n", panel.area.width, panel.area.height); + fprintf(fp, "panel_margin = %d %d\n", panel.marginx, panel.marginy); + fprintf(fp, "panel_padding = %d %d\n", panel.area.paddingx, panel.area.paddingy); + fprintf(fp, "font_shadow = %d\n", g_task.font_shadow); + + fputs("\n#---------------------------------------------\n", fp); + fputs("# PANEL BACKGROUND AND BORDER\n", fp); + fputs("#---------------------------------------------\n", fp); + fprintf(fp, "panel_rounded = %d\n", panel.area.border.rounded); + fprintf(fp, "panel_border_width = %d\n", panel.area.border.width); + fprintf(fp, "panel_background_color = #%02x%02x%02x %d\n", (int)(panel.area.back.color[0]*255), (int)(panel.area.back.color[1]*255), (int)(panel.area.back.color[2]*255), (int)(panel.area.back.alpha*100)); + fprintf(fp, "panel_border_color = #%02x%02x%02x %d\n", (int)(panel.area.border.color[0]*255), (int)(panel.area.border.color[1]*255), (int)(panel.area.border.color[2]*255), (int)(panel.area.border.alpha*100)); + + fputs("\n#---------------------------------------------\n", fp); + fputs("# TASKS\n", fp); + fputs("#---------------------------------------------\n", fp); + fprintf(fp, "task_centered = %d\n", g_task.centered); + fprintf(fp, "task_width = %d\n", g_task.maximum_width); + fprintf(fp, "task_padding = %d\n", g_task.area.paddingx); + fprintf(fp, "task_icon = %d\n", g_task.icon); + fprintf(fp, "task_font = %s\n", panel.old_task_font); + fprintf(fp, "task_font_color = #%02x%02x%02x %d\n", (int)(g_task.font.color[0]*255), (int)(g_task.font.color[1]*255), (int)(g_task.font.color[2]*255), (int)(g_task.font.alpha*100)); + fprintf(fp, "task_active_font_color = #%02x%02x%02x %d\n", (int)(g_task.font_active.color[0]*255), (int)(g_task.font_active.color[1]*255), (int)(g_task.font_active.color[2]*255), (int)(g_task.font_active.alpha*100)); + + fputs("\n#---------------------------------------------\n", fp); + fputs("# TASK BACKGROUND AND BORDER\n", fp); + fputs("#---------------------------------------------\n", fp); + fprintf(fp, "task_rounded = %d\n", g_task.area.border.rounded); + fprintf(fp, "task_background_color = #%02x%02x%02x %d\n", (int)(g_task.area.back.color[0]*255), (int)(g_task.area.back.color[1]*255), (int)(g_task.area.back.color[2]*255), (int)(g_task.area.back.alpha*100)); + fprintf(fp, "task_active_background_color = #%02x%02x%02x %d\n", (int)(g_task.area_active.back.color[0]*255), (int)(g_task.area_active.back.color[1]*255), (int)(g_task.area_active.back.color[2]*255), (int)(g_task.area_active.back.alpha*100)); + fprintf(fp, "task_border_width = %d\n", g_task.area.border.width); + fprintf(fp, "task_border_color = #%02x%02x%02x %d\n", (int)(g_task.area.border.color[0]*255), (int)(g_task.area.border.color[1]*255), (int)(g_task.area.border.color[2]*255), (int)(g_task.area.border.alpha*100)); + fprintf(fp, "task_active_border_color = #%02x%02x%02x %d\n", (int)(g_task.area_active.border.color[0]*255), (int)(g_task.area_active.border.color[1]*255), (int)(g_task.area_active.border.color[2]*255), (int)(g_task.area_active.border.alpha*100)); + + fputs("\n#---------------------------------------------\n", fp); + fputs("# CLOCK\n", fp); + fputs("#---------------------------------------------\n", fp); + fputs("#time1_format = %H:%M\n", fp); + fputs("time1_font = sans bold 8\n", fp); + fputs("#time2_format = %A %d %B\n", fp); + fputs("time2_font = sans 6\n", fp); + fputs("clock_font_color = #ffffff 75\n", fp); + + fputs("\n#---------------------------------------------\n", fp); + fputs("# MOUSE ACTION ON TASK\n", fp); + fputs("#---------------------------------------------\n", fp); + if (panel.mouse_middle == NONE) fputs("mouse_middle = none\n", fp); + else if (panel.mouse_middle == CLOSE) fputs("mouse_middle = close\n", fp); + else if (panel.mouse_middle == TOGGLE) fputs("mouse_middle = toggle\n", fp); + else if (panel.mouse_middle == ICONIFY) fputs("mouse_middle = iconify\n", fp); + else if (panel.mouse_middle == SHADE) fputs("mouse_middle = shade\n", fp); + else fputs("mouse_middle = toggle_iconify\n", fp); + + if (panel.mouse_right == NONE) fputs("mouse_right = none\n", fp); + else if (panel.mouse_right == CLOSE) fputs("mouse_right = close\n", fp); + else if (panel.mouse_right == TOGGLE) fputs("mouse_right = toggle\n", fp); + else if (panel.mouse_right == ICONIFY) fputs("mouse_right = iconify\n", fp); + else if (panel.mouse_right == SHADE) fputs("mouse_right = shade\n", fp); + else fputs("mouse_right = toggle_iconify\n", fp); + + if (panel.mouse_scroll_up == NONE) fputs("mouse_scroll_up = none\n", fp); + else if (panel.mouse_scroll_up == CLOSE) fputs("mouse_scroll_up = close\n", fp); + else if (panel.mouse_scroll_up == TOGGLE) fputs("mouse_scroll_up = toggle\n", fp); + else if (panel.mouse_scroll_up == ICONIFY) fputs("mouse_scroll_up = iconify\n", fp); + else if (panel.mouse_scroll_up == SHADE) fputs("mouse_scroll_up = shade\n", fp); + else fputs("mouse_scroll_up = toggle_iconify\n", fp); + + if (panel.mouse_scroll_down == NONE) fputs("mouse_scroll_down = none\n", fp); + else if (panel.mouse_scroll_down == CLOSE) fputs("mouse_scroll_down = close\n", fp); + else if (panel.mouse_scroll_down == TOGGLE) fputs("mouse_scroll_down = toggle\n", fp); + else if (panel.mouse_scroll_down == ICONIFY) fputs("mouse_scroll_down = iconify\n", fp); + else if (panel.mouse_scroll_down == SHADE) fputs("mouse_scroll_down = shade\n", fp); + else fputs("mouse_scroll_down = toggle_iconify\n", fp); + + fputs("\n\n", fp); + fclose (fp); + + panel.old_config_file = 0; +} + diff --git a/src/config.h b/src/config.h new file mode 100644 index 0000000..1fcd1ed --- /dev/null +++ b/src/config.h @@ -0,0 +1,24 @@ +/************************************************************************** +* config : +* - parse config file in Panel struct. +* +* Check COPYING file for Copyright +* +**************************************************************************/ + +#ifndef CONFIG_H +#define CONFIG_H + + +GSList *list_back; + + +int config_read_file (const char *path); +int config_read (); +void config_taskbar(); +void config_finish (); +void cleanup_taskbar(); +void cleanup (); +void save_config (); + +#endif diff --git a/src/panel.c b/src/panel.c new file mode 100644 index 0000000..2e1c228 --- /dev/null +++ b/src/panel.c @@ -0,0 +1,249 @@ +/************************************************************************** +* +* Copyright (C) 2008 PÃ¥l Staurland (staura@gmail.com) +* Modified (C) 2008 thierry lorthiois (lorthiois@bbsoft.fr) +* +* This program is free software; you can redistribute it and/or +* modify it under the terms of the GNU General Public License version 2 +* as published by the Free Software Foundation. +* +* This program is distributed in the hope that 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. +**************************************************************************/ + +#include +#include +#include +#include +#include +#include + +#include "server.h" +#include "window.h" +#include "task.h" +#include "panel.h" + + +void visual_refresh () +{ + server_refresh_root_pixmap (); + + draw (&panel.area); + refresh (&panel.area); + +/* +pour version 0.7 +gestion du systray + positionnement et taille fixe du systray (objet systray) + détection des notifications (détection des icones, ajout a la liste) + ajouter la transparence des icones + gérer le redimentionnement des éléments + => voir si lon peut faire abstraction sur le positionnement des objets ? + sachant que certains objets (task, taskbar) on une taille définit par l'extérieur + et d'autres objets (clock, systray) on une taille définit par l'intérieur + +gestion du layout + voir le positionnement des taskbar, task et systray + définir panel_layout dans la configuration + comment gérer le multi panel avec des layouts différents + +vérifier le niveau d'abstraction du code + utiliser la fonction draw(obj) récurrente sur Taskbar, Task, Systray, Clock + est ce compatible avec l'affichage de la tache active et les changement de taille -> redessine le panel + +correction de bugs : + memory, segfault + background + remettre en place single_desktop avec nouveau layout + remettre en place multi_monitor avec nouveau layout + vérifier le changement de configuration + +pour version 0.8 +gestion du thème + voir la gestion du dégradé sur le bord et le fond (inkscape) + faut-il trois coordonnées de padding x, y, x inter-objects + +gestion du zoom + définir le zoom du panel + +*/ + + if (panel.clock.time1_format) { + if (panel.clock.area.redraw) + panel.refresh = 1; + if (draw (&panel.clock.area)) { + panel.clock.area.redraw = 1; + draw (&panel.clock.area); + resize_clock(); + resize_taskbar(); + redraw(&panel.area); + } + refresh (&panel.clock.area); + } + + // TODO: ne pas afficher les taskbar invisibles + //if (panel.mode != MULTI_DESKTOP && desktop != server.desktop) continue; + Task *tsk; + Taskbar *tskbar; + GSList *l0; + for (l0 = panel.area.list; l0 ; l0 = l0->next) { + tskbar = l0->data; + draw (&tskbar->area); + refresh (&tskbar->area); + + GSList *l1; + for (l1 = tskbar->area.list; l1 ; l1 = l1->next) { + tsk = l1->data; + draw(&tsk->area); + + if (tsk == panel.task_active) refresh (&tsk->area_active); + else refresh (&tsk->area); + } + } + + XCopyArea (server.dsp, server.pmap, window.main_win, server.gc, 0, 0, panel.area.width, panel.area.height, 0, 0); + XFlush(server.dsp); + panel.refresh = 0; +} + + +void set_panel_properties (Window win) +{ + XStoreName (server.dsp, win, "tint2"); + + // TODO: check if the name is really needed for a panel/taskbar ? + gsize len; + gchar *name = g_locale_to_utf8("tint2", -1, NULL, &len, NULL); + if (name != NULL) { + XChangeProperty(server.dsp, win, server.atom._NET_WM_NAME, server.atom.UTF8_STRING, 8, PropModeReplace, (unsigned char *) name, (int) len); + g_free(name); + } + + // Dock + long val = server.atom._NET_WM_WINDOW_TYPE_DOCK; + XChangeProperty (server.dsp, win, server.atom._NET_WM_WINDOW_TYPE, XA_ATOM, 32, PropModeReplace, (unsigned char *) &val, 1); + + // Reserved space + long struts [12] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; + if (panel.position & TOP) { + struts[2] = panel.area.height + panel.marginy; + struts[8] = server.posx; + struts[9] = server.posx + panel.area.width; + } + else { + struts[3] = panel.area.height + panel.marginy; + struts[10] = server.posx; + struts[11] = server.posx + panel.area.width; + } + XChangeProperty (server.dsp, win, server.atom._NET_WM_STRUT_PARTIAL, XA_CARDINAL, 32, PropModeReplace, (unsigned char *) &struts, 12); + // Old specification + XChangeProperty (server.dsp, win, server.atom._NET_WM_STRUT, XA_CARDINAL, 32, PropModeReplace, (unsigned char *) &struts, 4); + + // Sticky and below other window + val = 0xFFFFFFFF; + XChangeProperty (server.dsp, win, server.atom._NET_WM_DESKTOP, XA_CARDINAL, 32, PropModeReplace, (unsigned char *) &val, 1); + Atom state[4]; + state[0] = server.atom._NET_WM_STATE_SKIP_PAGER; + state[1] = server.atom._NET_WM_STATE_SKIP_TASKBAR; + state[2] = server.atom._NET_WM_STATE_STICKY; + state[3] = server.atom._NET_WM_STATE_BELOW; + XChangeProperty (server.dsp, win, server.atom._NET_WM_STATE, XA_ATOM, 32, PropModeReplace, (unsigned char *) state, 4); + + // Fixed position + XSizeHints size_hints; + size_hints.flags = PPosition; + XChangeProperty (server.dsp, win, XA_WM_NORMAL_HINTS, XA_WM_SIZE_HINTS, 32, PropModeReplace, (unsigned char *) &size_hints, sizeof (XSizeHints) / 4); + + // Unfocusable + XWMHints wmhints; + wmhints.flags = InputHint; + wmhints.input = False; + XChangeProperty (server.dsp, win, XA_WM_HINTS, XA_WM_HINTS, 32, PropModeReplace, (unsigned char *) &wmhints, sizeof (XWMHints) / 4); +} + + +void window_draw_panel () +{ + Window win; + + /* panel position determined here */ + if (panel.position & LEFT) server.posx = server.monitor[panel.monitor].x + panel.marginx; + else { + if (panel.position & RIGHT) server.posx = server.monitor[panel.monitor].x + server.monitor[panel.monitor].width - panel.area.width - panel.marginx; + else server.posx = server.monitor[panel.monitor].x + ((server.monitor[panel.monitor].width - panel.area.width) / 2); + } + if (panel.position & TOP) server.posy = server.monitor[panel.monitor].y + panel.marginy; + else server.posy = server.monitor[panel.monitor].y + server.monitor[panel.monitor].height - panel.area.height - panel.marginy; + + /* Catch some events */ + XSetWindowAttributes att = { ParentRelative, 0L, 0, 0L, 0, 0, Always, 0L, 0L, False, ExposureMask|ButtonPressMask|ButtonReleaseMask, NoEventMask, False, 0, 0 }; + + /* XCreateWindow(display, parent, x, y, w, h, border, depth, class, visual, mask, attrib) */ + if (window.main_win) XDestroyWindow(server.dsp, window.main_win); + win = XCreateWindow (server.dsp, server.root_win, server.posx, server.posy, panel.area.width, panel.area.height, 0, server.depth, InputOutput, CopyFromParent, CWEventMask, &att); + + set_panel_properties (win); + window.main_win = win; + + // replaced : server.gc = DefaultGC (server.dsp, 0); + if (server.gc) XFree(server.gc); + XGCValues gcValues; + server.gc = XCreateGC(server.dsp, win, (unsigned long) 0, &gcValues); + + XMapWindow (server.dsp, win); + XFlush (server.dsp); +} + + +void resize_clock() +{ + panel.clock.area.posx = panel.area.width - panel.clock.area.width - panel.area.paddingx - panel.area.border.width; +} + + +// initialise taskbar posx and width +void resize_taskbar() +{ + int taskbar_width, modulo_width, taskbar_on_screen; + + if (panel.mode == MULTI_DESKTOP) taskbar_on_screen = panel.nb_desktop; + else taskbar_on_screen = panel.nb_monitor; + + taskbar_width = panel.area.width - (2 * panel.area.paddingx) - (2 * panel.area.border.width); + if (panel.clock.time1_format) + taskbar_width -= (panel.clock.area.width + panel.area.paddingx); + taskbar_width = (taskbar_width - ((taskbar_on_screen-1) * panel.area.paddingx)) / taskbar_on_screen; + + if (taskbar_on_screen > 1) + modulo_width = (taskbar_width - ((taskbar_on_screen-1) * panel.area.paddingx)) % taskbar_on_screen; + else + modulo_width = 0; + + int posx, modulo, i; + Taskbar *tskbar; + GSList *l0; + for (i = 0, l0 = panel.area.list; l0 ; i++, l0 = l0->next) { + if ((i % taskbar_on_screen) == 0) { + posx = panel.area.border.width + panel.area.paddingx; + modulo = modulo_width; + } + else posx += taskbar_width + panel.area.paddingx; + + tskbar = l0->data; + tskbar->area.posx = posx; + tskbar->area.width = taskbar_width; + if (modulo) { + tskbar->area.width++; + modulo--; + } + + resize_tasks(tskbar); + } +} + + diff --git a/src/panel.h b/src/panel.h new file mode 100644 index 0000000..1acd611 --- /dev/null +++ b/src/panel.h @@ -0,0 +1,85 @@ +/************************************************************************** +* panel : +* - draw panel and all objects according to panel_layout +* +* Check COPYING file for Copyright +* +**************************************************************************/ + +#ifndef PANEL_H +#define PANEL_H + +#include +#include + +#include "common.h" +#include "clock.h" +#include "task.h" +#include "taskbar.h" + + +//panel mode +enum { SINGLE_DESKTOP=0, MULTI_DESKTOP, MULTI_MONITOR }; + +//panel alignment +enum { LEFT=0x01, RIGHT=0x02, CENTER=0X04, TOP=0X08, BOTTOM=0x10 }; + + +typedef struct { + // -------------------------------------------------- + // always start with area + Area area; + + // -------------------------------------------------- + // backward compatibility + int old_config_file; + int old_task_icon; + int old_panel_background; + int old_task_background; + char *old_task_font; + + // -------------------------------------------------- + // panel + int signal_pending; + int sleep_mode; + int refresh; + int monitor; + int position; + int marginx, marginy; + + // -------------------------------------------------- + // taskbar point to the first taskbar in panel.area.list. number of tasbar == nb_desktop x nb_monitor. + //Taskbar *taskbar; + int mode; + int nb_desktop; + int nb_monitor; + Task *task_active; + Task *task_drag; + + // -------------------------------------------------- + // clock + Clock clock; + + // -------------------------------------------------- + // systray + + // -------------------------------------------------- + // mouse events + int mouse_middle; + int mouse_right; + int mouse_scroll_up; + int mouse_scroll_down; +} Panel; + + +Panel panel; + + +void visual_refresh (); +void set_panel_properties (Window win); +void window_draw_panel (); +void resize_clock(); +void resize_taskbar(); + + +#endif diff --git a/src/server.c b/src/server.c new file mode 100644 index 0000000..cdfa969 --- /dev/null +++ b/src/server.c @@ -0,0 +1,216 @@ +/************************************************************************** +* +* Tint2 panel +* +* Copyright (C) 2007 PÃ¥l Staurland (staura@gmail.com) +* Modified (C) 2008 thierry lorthiois (lorthiois@bbsoft.fr) +* +* This program is free software; you can redistribute it and/or +* modify it under the terms of the GNU General Public License version 2 +* as published by the Free Software Foundation. +* +* This program is distributed in the hope that 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. +**************************************************************************/ + +#include +#include + +#include "server.h" +#include "panel.h" +#include "task.h" +#include "window.h" + +void server_catch_error (Display *d, XErrorEvent *ev){} + + +void server_init_atoms () +{ + server.atom._XROOTPMAP_ID = XInternAtom (server.dsp, "_XROOTPMAP_ID", False); + server.atom._NET_CURRENT_DESKTOP = XInternAtom (server.dsp, "_NET_CURRENT_DESKTOP", False); + server.atom._NET_NUMBER_OF_DESKTOPS = XInternAtom (server.dsp, "_NET_NUMBER_OF_DESKTOPS", False); + server.atom._NET_DESKTOP_GEOMETRY = XInternAtom (server.dsp, "_NET_DESKTOP_GEOMETRY", False); + server.atom._NET_DESKTOP_VIEWPORT = XInternAtom (server.dsp, "_NET_DESKTOP_VIEWPORT", False); + server.atom._NET_ACTIVE_WINDOW = XInternAtom (server.dsp, "_NET_ACTIVE_WINDOW", False); + server.atom._NET_WM_WINDOW_TYPE = XInternAtom (server.dsp, "_NET_WM_WINDOW_TYPE", False); + server.atom._NET_WM_STATE_SKIP_PAGER = XInternAtom (server.dsp, "_NET_WM_STATE_SKIP_PAGER", False); + server.atom._NET_WM_STATE_SKIP_TASKBAR = XInternAtom (server.dsp, "_NET_WM_STATE_SKIP_TASKBAR", False); + server.atom._NET_WM_STATE_STICKY = XInternAtom (server.dsp, "_NET_WM_STATE_STICKY", False); + server.atom._NET_WM_WINDOW_TYPE_DOCK = XInternAtom (server.dsp, "_NET_WM_WINDOW_TYPE_DOCK", False); + server.atom._NET_WM_WINDOW_TYPE_DESKTOP = XInternAtom (server.dsp, "_NET_WM_WINDOW_TYPE_DESKTOP", False); + server.atom._NET_WM_WINDOW_TYPE_TOOLBAR = XInternAtom (server.dsp, "_NET_WM_WINDOW_TYPE_TOOLBAR", False); + server.atom._NET_WM_WINDOW_TYPE_MENU = XInternAtom (server.dsp, "_NET_WM_WINDOW_TYPE_MENU", False); + server.atom._NET_WM_WINDOW_TYPE_SPLASH = XInternAtom (server.dsp, "_NET_WM_WINDOW_TYPE_SPLASH", False); + server.atom._NET_WM_WINDOW_TYPE_DIALOG = XInternAtom (server.dsp, "_NET_WM_WINDOW_TYPE_DIALOG", False); + server.atom._NET_WM_WINDOW_TYPE_NORMAL = XInternAtom (server.dsp, "_NET_WM_WINDOW_TYPE_NORMAL", False); + server.atom._NET_WM_DESKTOP = XInternAtom (server.dsp, "_NET_WM_DESKTOP", False); + server.atom.WM_STATE = XInternAtom (server.dsp, "WM_STATE", False); + server.atom._NET_WM_STATE = XInternAtom (server.dsp, "_NET_WM_STATE", False); + server.atom._NET_WM_STATE_SHADED = XInternAtom (server.dsp, "_NET_WM_STATE_SHADED", False); + server.atom._NET_WM_STATE_BELOW = XInternAtom (server.dsp, "_NET_WM_STATE_BELOW", False); + server.atom._NET_WM_STATE_MODAL = XInternAtom (server.dsp, "_NET_WM_STATE_MODAL", False); + server.atom._NET_CLIENT_LIST = XInternAtom (server.dsp, "_NET_CLIENT_LIST", False); + server.atom._NET_WM_VISIBLE_NAME = XInternAtom (server.dsp, "_NET_WM_VISIBLE_NAME", False); + server.atom._NET_WM_NAME = XInternAtom (server.dsp, "_NET_WM_NAME", False); + server.atom._NET_WM_STRUT = XInternAtom (server.dsp, "_NET_WM_STRUT", False); + server.atom._NET_WM_ICON = XInternAtom (server.dsp, "_NET_WM_ICON", False); + server.atom._NET_CLOSE_WINDOW = XInternAtom (server.dsp, "_NET_CLOSE_WINDOW", False); + server.atom.UTF8_STRING = XInternAtom (server.dsp, "UTF8_STRING", False); + server.atom._NET_SUPPORTING_WM_CHECK = XInternAtom (server.dsp, "_NET_SUPPORTING_WM_CHECK", False); + server.atom._NET_SUPPORTING_WM_CHECK = XInternAtom (server.dsp, "_NET_WM_NAME", False); + server.atom._WIN_LAYER = XInternAtom (server.dsp, "_WIN_LAYER", False); + server.atom._NET_WM_STRUT_PARTIAL = XInternAtom (server.dsp, "_NET_WM_STRUT_PARTIAL", False); + server.atom.WM_NAME = XInternAtom(server.dsp, "WM_NAME", False); +} + + +void send_event32 (Window win, Atom at, long data1, long data2) +{ + XEvent event; + + event.xclient.type = ClientMessage; + event.xclient.serial = 0; + event.xclient.send_event = True; + event.xclient.display = server.dsp; + event.xclient.window = win; + event.xclient.message_type = at; + + event.xclient.format = 32; + event.xclient.data.l[0] = data1; + event.xclient.data.l[1] = data2; + event.xclient.data.l[2] = 0; + event.xclient.data.l[3] = 0; + event.xclient.data.l[4] = 0; + + XSendEvent(server.dsp, server.root_win, False, SubstructureRedirectMask|SubstructureNotifyMask, &event); +} + + +int get_property32 (Window win, Atom at, Atom type) +{ + Atom type_ret; + int format_ret = 0, data = 0; + unsigned long nitems_ret = 0; + unsigned long bafter_ret = 0; + unsigned char *prop_value = 0; + int result; + + if (!win) return 0; + + result = XGetWindowProperty(server.dsp, win, at, 0, 0x7fffffff, False, type, &type_ret, &format_ret, &nitems_ret, &bafter_ret, &prop_value); + + if (result == Success && prop_value) { + data = ((gulong*)prop_value)[0]; + XFree (prop_value); + } + return data; +} + + +void *server_get_property (Window win, Atom at, Atom type, int *num_results) +{ + Atom type_ret; + int format_ret = 0; + unsigned long nitems_ret = 0; + unsigned long bafter_ret = 0; + unsigned char *prop_value; + int result; + + if (!win) return 0; + + result = XGetWindowProperty(server.dsp, win, at, 0, 0x7fffffff, False, type, &type_ret, &format_ret, &nitems_ret, &bafter_ret, &prop_value); + + /* Send back resultcount */ + if (num_results) *num_results = nitems_ret; + + if (result == Success && prop_value) return prop_value; + else return 0; +} + + +Pixmap get_root_pixmap () +{ + // conky capture correctement le fond d'écran en xlib !! + Pixmap root_pixmap; + unsigned long *res; + + res = server_get_property (server.root_win, server.atom._XROOTPMAP_ID, XA_PIXMAP, 0); + if (res) { + root_pixmap = *((Drawable*) res); + XFree(res); + return root_pixmap; + } + else { + printf("get_root_pixmap incorrect\n"); + // try _XSETROOT_ID + } + + return 0; +} + + + + +Pixmap server_create_pixmap (int width, int height) +{ + return XCreatePixmap (server.dsp, server.root_win, width, height, server.depth); +} + + +void server_refresh_root_pixmap () +{ + if (!server.root_pmap) { + Pixmap wall = get_root_pixmap(); + + server.root_pmap = server_create_pixmap (panel.area.width, panel.area.height); + + XCopyArea (server.dsp, wall, server.root_pmap, server.gc, server.posx, server.posy, panel.area.width, panel.area.height, 0, 0); + + panel.area.redraw = 1; + } + + if (server.pmap) XFreePixmap (server.dsp, server.pmap); + server.pmap = server_create_pixmap (panel.area.width, panel.area.height); + + XCopyArea (server.dsp, server.root_pmap, server.pmap, server.gc, 0, 0, panel.area.width, panel.area.height, 0, 0); +} + + +void get_monitors() +{ + if (server.monitor) free(server.monitor); + server.nb_monitor = 0; + server.monitor = 0; + + if (XineramaIsActive(server.dsp)) { + XineramaScreenInfo *info = XineramaQueryScreens(server.dsp, &server.nb_monitor); + + if (info) { + int i; + + server.monitor = calloc(server.nb_monitor, sizeof(Monitor)); + for (i = 0; i < server.nb_monitor; i++) { + server.monitor[i].x = info[i].x_org; + server.monitor[i].y = info[i].y_org; + server.monitor[i].width = info[i].width; + server.monitor[i].height = info[i].height; + } + XFree(info); + } + } + + if (!server.nb_monitor) { + server.nb_monitor = 1; + server.monitor = calloc(server.nb_monitor, sizeof(Monitor)); + server.monitor[0].x = server.monitor[0].y = 0; + server.monitor[0].width = DisplayWidth (server.dsp, server.screen); + server.monitor[0].height = DisplayHeight (server.dsp, server.screen); + } +} + + diff --git a/src/server.h b/src/server.h new file mode 100644 index 0000000..6bb4060 --- /dev/null +++ b/src/server.h @@ -0,0 +1,102 @@ +/************************************************************************** +* server : +* - +* +* Check COPYING file for Copyright +* +**************************************************************************/ + +#ifndef SERVER_H +#define SERVER_H + +#include +#include +#include +#include + + +typedef struct Global_atom +{ + Atom _XROOTPMAP_ID; + Atom _NET_CURRENT_DESKTOP; + Atom _NET_NUMBER_OF_DESKTOPS; + Atom _NET_DESKTOP_GEOMETRY; + Atom _NET_DESKTOP_VIEWPORT; + Atom _NET_ACTIVE_WINDOW; + Atom _NET_WM_WINDOW_TYPE; + Atom _NET_WM_STATE_SKIP_PAGER; + Atom _NET_WM_STATE_SKIP_TASKBAR; + Atom _NET_WM_STATE_STICKY; + Atom _NET_WM_WINDOW_TYPE_DOCK; + Atom _NET_WM_WINDOW_TYPE_DESKTOP; + Atom _NET_WM_WINDOW_TYPE_TOOLBAR; + Atom _NET_WM_WINDOW_TYPE_MENU; + Atom _NET_WM_WINDOW_TYPE_SPLASH; + Atom _NET_WM_WINDOW_TYPE_DIALOG; + Atom _NET_WM_WINDOW_TYPE_NORMAL; + Atom _NET_WM_DESKTOP; + Atom WM_STATE; + Atom _NET_WM_STATE; + Atom _NET_WM_STATE_SHADED; + Atom _NET_WM_STATE_BELOW; + Atom _NET_WM_STATE_MODAL; + Atom _NET_CLIENT_LIST; + Atom _NET_WM_NAME; + Atom _NET_WM_VISIBLE_NAME; + Atom _NET_WM_STRUT; + Atom _NET_WM_ICON; + Atom _NET_CLOSE_WINDOW; + Atom UTF8_STRING; + Atom _NET_SUPPORTING_WM_CHECK; + Atom _WIN_LAYER; + Atom _NET_WM_STRUT_PARTIAL; + Atom WM_NAME; +} Global_atom; + + + +typedef struct Monitor +{ + int x; + int y; + int width; + int height; +} Monitor; + + +typedef struct +{ + Display *dsp; + Window root_win; + int desktop; + int screen; + int depth; + int nb_desktop; + Monitor *monitor; + int nb_monitor; + int got_root_win; + Visual *visual; + int posx, posy; + Pixmap pmap; + Pixmap root_pmap; + GC gc; + Global_atom atom; +} Server_global; + + +Server_global server; + + +void send_event32 (Window win, Atom at, long data1, long data2); +int get_property32 (Window win, Atom at, Atom type); +void *server_get_property (Window win, Atom at, Atom type, int *num_results); +Atom server_get_atom (char *atom_name); +void server_refresh_root_pixmap (); +void server_refresh_main_pixmap (); +void server_catch_error (Display *d, XErrorEvent *ev); +void server_init_atoms (); +Pixmap server_create_pixmap (int width, int height); +void get_monitors(); + + +#endif diff --git a/src/systray/Makefile b/src/systray/Makefile new file mode 100644 index 0000000..03a2270 --- /dev/null +++ b/src/systray/Makefile @@ -0,0 +1,71 @@ +#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-# +# # +# Change these values to customize your installation and build process # +# # +#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-# + +# Change this PREFIX to where you want docker to be installed +PREFIX=/usr/local +# Change this XLIBPATH to point to your X11 development package's installation +XLIBPATH=/usr/X11R6/lib + +# Sets some flags for stricter compiling +CFLAGS=-pedantic -Wall -W -O + +#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-# +# # +# Leave the rest of the Makefile alone if you want it to build! # +# # +#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-# + +PACKAGE=docker +VERSION=1.5 + +target=docker +sources=docker.c kde.c icons.c xproperty.c net.c +headers=docker.h kde.h icons.h xproperty.h net.h version.h +extra=README COPYING version.h.in + +all: $(target) $(sources) $(headers) + @echo Build Successful + +$(target): $(sources:.c=.o) + $(CC) $(CFLAGS) -L$(XLIBPATH) -lX11 \ + `pkg-config --libs glib-2.0` $^ -o $@ + +%.o: %.c + $(CC) -c $(CFLAGS) `pkg-config --cflags glib-2.0` $< + +version.h: version.h.in Makefile + sed -e "s/@VERSION@/$(VERSION)/" version.h.in > $@ + +install: all + install $(target) $(PREFIX)/bin/$(target) + +uninstall: + rm -f $(PREFIX)/$(target) + +clean: + rm -rf .dist + rm -f core *.o .\#* *\~ $(target) + +distclean: clean + rm -f version.h + rm -f $(PACKAGE)-*.tar.gz + +dist: Makefile $(sources) $(headers) $(extra) + mkdir -p .dist/$(PACKAGE)-$(VERSION) && \ + cp $^ .dist/$(PACKAGE)-$(VERSION) && \ + tar -c -z -C .dist -f \ + $(PACKAGE)-$(VERSION).tar.gz $(PACKAGE)-$(VERSION) && \ + rm -rf .dist + +love: $(sources) + touch $^ + +# local dependancies +docker.o: docker.c version.h kde.h icons.h docker.h net.h +icons.o: icons.c icons.h docker.h +kde.o: kde.c kde.h docker.h xproperty.h +net.o: net.c net.h docker.h icons.h +xproperty.o: xproperty.c xproperty.h docker.h diff --git a/src/systray/README b/src/systray/README new file mode 100644 index 0000000..c851765 --- /dev/null +++ b/src/systray/README @@ -0,0 +1,75 @@ +Docker - Docking System Tray + +Copyright (C) 2003 Ben Jansens + + +What is Docker? + +Docker is a docking application (WindowMaker dock app) which acts as a system +tray for KDE3 and GNOME2. It can be used to replace the panel in either +environment, allowing you to have a system tray without running the KDE/GNOME +panel. + + +What window managers can I use Docker with? + +I wrote and designed Docker to work with Openbox 2, but it should work fine in +any window manager that supports WindowMaker dock apps. + + +Why don't my KDE3 system tray icons show up? + +Docker requires a KDE3 compliant window manager to handle KDE3 system tray +icons, and since it is a docking application, the window manager needs to also +support WindowMaker Dock Apps. The only window manager that meets these +requirements to my knowledge is: + - Openbox 2 (http://icculus.org/openbox) +If you know of any other window managers that support the KDE3 hints for the +system tray and docking apps (i.e. that docker works in), please let me know so +I can add them to this list, and test docker out in them! + + +Why don't my GNOME2 system tray icons show up? + +I don't know! Email me and let me know what application isn't working. (Don't +you dare email me about a GNOME1 application! :) + + +Who wrote Docker? + +Me, of course. That is, Ben Jansens. I can be reached at . I am +the founder and currently the project head of sorts for the Openbox project. + + +=============================== +|| INSTALLATION INSTRUCTIONS || +=============================== + +To install this application, simply do the following: + +% make +(as root) +# make install + +You can change a couple of things in the Makefile if you want to: +PREFIX defines where the program will be installed to. +XLIBPATH defines where your libX11.so is located. If it is not on the standard + /usr/X11R6/lib path, then you will have to change this. + +================== +|| LICENSE INFO || +================== + +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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA diff --git a/src/systray/docker.c b/src/systray/docker.c new file mode 100644 index 0000000..091c62e --- /dev/null +++ b/src/systray/docker.c @@ -0,0 +1,346 @@ +#include "version.h" +#include "kde.h" +#include "icons.h" +#include "docker.h" +#include "net.h" + +#include +#include +#include +#include +#include +#include + +int argc; +char **argv; + +Window win = None, hint_win = None, root = None; +gboolean wmaker = FALSE; /* WindowMakerMode!!! wheeee */ +Display *display = NULL; +GSList *icons = NULL; +int width = 0, height = 0; +int border = 1; /* blank area around icons. must be > 0 */ +gboolean horizontal = TRUE; /* layout direction */ +int icon_size = 24; /* width and height of systray icons */ + +//static char *display_string = NULL; +/* excluding the border. sum of all child apps */ +static gboolean exit_app = FALSE; + +/* +void parse_cmd_line() +{ + int i; + gboolean help = FALSE; + + for (i = 1; i < argc; i++) { + if (0 == strcasecmp(argv[i], "-display")) { + ++i; + if (i < argc) { + display_string = argv[i]; + } else { + g_printerr("-display requires a parameter\n"); + help = TRUE; + } + } else if (0 == strcasecmp(argv[i], "-wmaker")) { + wmaker = TRUE; + } else if (0 == strcasecmp(argv[i], "-vertical")) { + horizontal = FALSE; + } else if (0 == strcasecmp(argv[i], "-border")) { + ++i; + + if (i < argc) { + int b = atoi(argv[i]); + if (b > 0) { + border = b; + } else { + g_printerr("-border must be a value greater than 0\n"); + help = TRUE; + } + } else { + g_printerr("-border requires a parameter\n"); + help = TRUE; + } + } else if (0 == strcasecmp(argv[i], "-iconsize")) { + ++i; + if (i < argc) { + int s = atoi(argv[i]); + if (s > 0) { + icon_size = s; + } else { + g_printerr("-iconsize must be a value greater than 0\n"); + help = TRUE; + } + } else { + g_printerr("-iconsize requires a parameter\n"); + help = TRUE; + } + } else { + if (argv[i][0] == '-') + help = TRUE; + } + + + if (help) { + + g_print("%s - version %s\n", argv[0], VERSION); + g_print("Copyright 2003, Ben Jansens \n\n"); + g_print("Usage: %s [OPTIONS]\n\n", argv[0]); + g_print("Options:\n"); + g_print(" -help Show this help.\n"); + g_print(" -display DISLPAY The X display to connect to.\n"); + g_print(" -border The width of the border to put around the\n" + " system tray icons. Defaults to 1.\n"); + g_print(" -vertical Line up the icons vertically. Defaults to\n" + " horizontally.\n"); + g_print(" -wmaker WindowMaker mode. This makes docker a\n" + " fixed size (64x64) to appear nicely in\n" + " in WindowMaker.\n" + " Note: In this mode, you have a fixed\n" + " number of icons that docker can hold.\n"); + g_print(" -iconsize SIZE The size (width and height) to display\n" + " icons as in the system tray. Defaults to\n" + " 24.\n"); + exit(1); + } + } +} +*/ + +void create_hint_win() +{ + XWMHints hints; + XClassHint classhints; + + hint_win = XCreateSimpleWindow(display, root, 0, 0, 1, 1, 0, 0, 0); + assert(hint_win); + + hints.flags = StateHint | WindowGroupHint | IconWindowHint; + hints.initial_state = WithdrawnState; + hints.window_group = hint_win; + hints.icon_window = win; + + classhints.res_name = "docker"; + classhints.res_class = "Docker"; + + XSetWMProperties(display, hint_win, NULL, NULL, argv, argc, + NULL, &hints, &classhints); + + XMapWindow(display, hint_win); +} + + +void create_main_window() +{ + XWMHints hints; + XTextProperty text; + char *name = "Docker"; + + /* the border must be > 0 if not in wmaker mode */ + assert(wmaker || border > 0); + + if (!wmaker) + win = XCreateSimpleWindow(display, root, 0, 0, + border * 2, border * 2, 0, 0, 0); + else + win = XCreateSimpleWindow(display, root, 0, 0, + 64, 64, 0, 0, 0); + + assert(win); + + XStringListToTextProperty(&name, 1, &text); + XSetWMName(display, win, &text); + + hints.flags = StateHint; + hints.initial_state = WithdrawnState; + XSetWMHints(display, win, &hints); + + create_hint_win(); + + XSync(display, False); + XSetWindowBackgroundPixmap(display, win, ParentRelative); + XClearWindow(display, win); +} + + +void reposition_icons() +{ + int x = border + ((width % icon_size) / 2), + y = border + ((height % icon_size) / 2); + GSList *it; + + for (it = icons; it != NULL; it = g_slist_next(it)) { + TrayWindow *traywin = it->data; + traywin->x = x; + traywin->y = y; + XMoveWindow(display, traywin->id, x, y); + XSync(display, False); + if (wmaker) { + x += icon_size; + if (x + icon_size > width) { + x = border; + y += icon_size; + } + } else if (horizontal) + x += icon_size; + else + y += icon_size; + } +} + + +void fix_geometry() +{ + GSList *it; + + /* in wmaker mode we're a fixed size */ + if (wmaker) return; + + /* find the proper width and height */ + width = horizontal ? 0 : icon_size; + height = horizontal ? icon_size : 0; + for (it = icons; it != NULL; it = g_slist_next(it)) { + if (horizontal) + width += icon_size; + else + height += icon_size; + } + + XResizeWindow(display, win, width + border * 2, height + border * 2); +} + + +void event_loop() +{ + XEvent e; + Window cover; + GSList *it; + + while (!exit_app) { + while (XPending(display)) { + XNextEvent(display, &e); + + switch (e.type) + { + case PropertyNotify: + /* systray window list has changed? */ + if (e.xproperty.atom == kde_systray_prop) { + XSelectInput(display, win, NoEventMask); + kde_update_icons(); + XSelectInput(display, win, StructureNotifyMask); + + while (XCheckTypedEvent(display, PropertyNotify, &e)); + } + + break; + + case ConfigureNotify: + if (e.xany.window != win) { + /* find the icon it pertains to and beat it into submission */ + GSList *it; + + for (it = icons; it != NULL; it = g_slist_next(it)) { + TrayWindow *traywin = it->data; + if (traywin->id == e.xany.window) { + XMoveResizeWindow(display, traywin->id, traywin->x, traywin->y, + icon_size, icon_size); + break; + } + } + break; + } + + /* briefly cover the entire containing window, which causes it and + all of the icons to refresh their windows. finally, they update + themselves when the background of the main window's parent changes. + */ + cover = XCreateSimpleWindow(display, win, 0, 0, + border * 2 + width, border * 2 + height, + 0, 0, 0); + XMapWindow(display, cover); + XDestroyWindow(display, cover); + + break; + + case ReparentNotify: + if (e.xany.window == win) /* reparented to us */ + break; + case UnmapNotify: + case DestroyNotify: + for (it = icons; it; it = g_slist_next(it)) { + if (((TrayWindow*)it->data)->id == e.xany.window) { + icon_remove(it); + break; + } + } + break; + + case ClientMessage: + if (e.xclient.message_type == net_opcode_atom && + e.xclient.format == 32 && + e.xclient.window == net_sel_win) + net_message(&e.xclient); + + default: + break; + } + } + usleep(500000); + } + + /* remove/unparent all the icons */ + while (icons) { + /* do the remove here explicitly, cuz the event handler isn't going to + happen anymore. */ + icon_remove(icons); + } +} + +/* +int main(int c, char **v) +{ + struct sigaction act; + + argc = c; argv = v; + + act.sa_handler = signal_handler; + act.sa_flags = 0; + sigaction(SIGSEGV, &act, NULL); + sigaction(SIGPIPE, &act, NULL); + sigaction(SIGFPE, &act, NULL); + sigaction(SIGTERM, &act, NULL); + sigaction(SIGINT, &act, NULL); + sigaction(SIGHUP, &act, NULL); + + parse_cmd_line(argc, argv); + + display = XOpenDisplay(display_string); + if (!display) { + g_printerr("Unable to open Display %s. Exiting.\n", + DisplayString(display_string)); + } + + root = RootWindow(display, DefaultScreen(display)); + assert(root); + + if (wmaker) + width = height = 64 - border * 2; + + create_main_window(); + + // set up to find KDE systray icons, and get any that already exist + kde_init(); + + net_init(); + + // we want to get ConfigureNotify events, and assume our parent's background + // has changed when we do, so we need to refresh ourself to match + XSelectInput(display, win, StructureNotifyMask); + + event_loop(); + + XCloseDisplay(display); + + return 0; +} +*/ diff --git a/src/systray/docker.h b/src/systray/docker.h new file mode 100644 index 0000000..f60376e --- /dev/null +++ b/src/systray/docker.h @@ -0,0 +1,31 @@ +#ifndef __docker_h +#define __docker_h + +#include +#include + +extern Display *display; +extern Window root, win; +extern GSList *icons; +extern int width, height; +extern int border; +extern gboolean horizontal; +extern int icon_size; +extern gboolean wmaker; + +typedef enum { + KDE = 1, /* kde specific */ + NET /* follows the standard (freedesktop.org) */ +} TrayWindowType; + +typedef struct +{ + TrayWindowType type; + Window id; + int x, y; +} TrayWindow; + +void reposition_icons(); +void fix_geometry(); + +#endif /* __docker_h */ diff --git a/src/systray/icons.c b/src/systray/icons.c new file mode 100644 index 0000000..5c5b240 --- /dev/null +++ b/src/systray/icons.c @@ -0,0 +1,122 @@ +#include "icons.h" +#include "net.h" +#include +#include + +gboolean error; +int window_error_handler(Display *d, XErrorEvent *e) +{ + d=d;e=e; + if (e->error_code == BadWindow) { + error = TRUE; + } else { + g_printerr("X ERROR NOT BAD WINDOW!\n"); + abort(); + } + return 0; +} + + +gboolean icon_swallow(TrayWindow *traywin) +{ + XErrorHandler old; + + error = FALSE; + old = XSetErrorHandler(window_error_handler); + XReparentWindow(display, traywin->id, win, 0, 0); + XSync(display, False); + XSetErrorHandler(old); + + return !error; +} + + +/* + The traywin must have its id and type set. +*/ +gboolean icon_add(Window id, TrayWindowType type) +{ + TrayWindow *traywin; + + assert(id); + assert(type); + + if (wmaker) { + /* do we have room in our window for another icon? */ + unsigned int max = (width / icon_size) * (height / icon_size); + if (g_slist_length(icons) >= max) + return FALSE; /* no room, sorry! REJECTED! */ + } + + traywin = g_new0(TrayWindow, 1); + traywin->type = type; + traywin->id = id; + + if (!icon_swallow(traywin)) { + g_free(traywin); + return FALSE; + } + + /* find the positon for the systray app window */ + if (!wmaker) { + traywin->x = border + (horizontal ? width : 0); + traywin->y = border + (horizontal ? 0 : height); + } else { + int count = g_slist_length(icons); + traywin->x = border + ((width % icon_size) / 2) + + (count % (width / icon_size)) * icon_size; + traywin->y = border + ((height % icon_size) / 2) + + (count / (height / icon_size)) * icon_size; + } + + /* add the new icon to the list */ + icons = g_slist_append(icons, traywin); + + /* watch for the icon trying to resize itself! BAD ICON! BAD! */ + XSelectInput(display, traywin->id, StructureNotifyMask); + + /* position and size the icon window */ + XMoveResizeWindow(display, traywin->id, + traywin->x, traywin->y, icon_size, icon_size); + + /* resize our window so that the new window can fit in it */ + fix_geometry(); + + /* flush before clearing, otherwise the clear isn't effective. */ + XFlush(display); + /* make sure the new child will get the right stuff in its background + for ParentRelative. */ + XClearWindow(display, win); + + /* show the window */ + XMapRaised(display, traywin->id); + + return TRUE; +} + + +void icon_remove(GSList *node) +{ + XErrorHandler old; + TrayWindow *traywin = node->data; + Window traywin_id = traywin->id; + + if (traywin->type == NET) + net_icon_remove(traywin); + + XSelectInput(display, traywin->id, NoEventMask); + + /* remove it from our list */ + g_free(node->data); + icons = g_slist_remove_link(icons, node); + + /* reparent it to root */ + error = FALSE; + old = XSetErrorHandler(window_error_handler); + XReparentWindow(display, traywin_id, root, 0, 0); + XSync(display, False); + XSetErrorHandler(old); + + reposition_icons(); + fix_geometry(); +} diff --git a/src/systray/icons.h b/src/systray/icons.h new file mode 100644 index 0000000..1d2a09c --- /dev/null +++ b/src/systray/icons.h @@ -0,0 +1,13 @@ +#ifndef __icons_h +#define __icons_h + +#include +#include +#include "docker.h" + +extern gboolean error; + +gboolean icon_add(Window id, TrayWindowType type); +void icon_remove(GSList *node); + +#endif /* __icons_h */ diff --git a/src/systray/kde.c b/src/systray/kde.c new file mode 100644 index 0000000..32e1848 --- /dev/null +++ b/src/systray/kde.c @@ -0,0 +1,76 @@ +#include "kde.h" +#include "icons.h" +#include "docker.h" +#include "xproperty.h" +#include +#include + +Atom kde_systray_prop = None; + +void kde_init() +{ + kde_systray_prop = XInternAtom(display, + "_KDE_NET_SYSTEM_TRAY_WINDOWS", False); + assert(kde_systray_prop); + + XSelectInput(display, root, PropertyChangeMask); + kde_update_icons(); +} + +void kde_update_icons() +{ + gulong count = (unsigned) -1; /* grab as many as possible */ + Window *ids; + unsigned int i; + GSList *it, *next; + gboolean removed = FALSE; /* were any removed? */ + + if (! xprop_get32(root, kde_systray_prop, XA_WINDOW, sizeof(Window)*8, + &count, &ids)) + return; + + /* add new windows to our list */ + for (i = 0; i < count; ++i) { + for (it = icons; it != NULL; it = g_slist_next(it)) { + TrayWindow *traywin = it->data; + if (traywin->id == ids[i]) + break; + } + if (!it) + icon_add(ids[i], KDE); + } + + /* remove windows from our list that no longer exist in the property */ + for (it = icons; it != NULL;) { + TrayWindow *traywin = it->data; + gboolean exists; + + if (traywin->type != KDE) { + /* don't go removing non-kde windows */ + exists = TRUE; + } else { + exists = FALSE; + for (i = 0; i < count; ++i) { + if (traywin->id == ids[i]) { + exists = TRUE; + break; + } + } + } + + next = g_slist_next(it); + if (!exists) { + icon_remove(it); + removed =TRUE; + } + it = next; + } + + if (removed) { + /* at least one tray app was removed, so reorganize 'em all and resize*/ + reposition_icons(); + fix_geometry(); + } + + XFree(ids); +} diff --git a/src/systray/kde.h b/src/systray/kde.h new file mode 100644 index 0000000..cb85d3d --- /dev/null +++ b/src/systray/kde.h @@ -0,0 +1,12 @@ +#ifndef __kde_h +#define __kde_h + +#include +#include + +extern Atom kde_systray_prop; + +void kde_update_icons(); +void kde_init(); + +#endif /* __kde_h */ diff --git a/src/systray/net.c b/src/systray/net.c new file mode 100644 index 0000000..9f0c94a --- /dev/null +++ b/src/systray/net.c @@ -0,0 +1,119 @@ +#include "net.h" +#include "docker.h" +#include "icons.h" +#include + +Atom net_opcode_atom; +Window net_sel_win; + +static Atom net_sel_atom; +static Atom net_manager_atom; +static Atom net_message_data_atom; + +/* defined in the systray spec */ +#define SYSTEM_TRAY_REQUEST_DOCK 0 +#define SYSTEM_TRAY_BEGIN_MESSAGE 1 +#define SYSTEM_TRAY_CANCEL_MESSAGE 2 + +static void net_create_selection_window() +{ + net_sel_win = XCreateSimpleWindow(display, root, -1, -1, 1, 1, 0, 0, 0); + assert(net_sel_win); +} + + +static void net_destroy_selection_window() +{ + XDestroyWindow(display, net_sel_win); + net_sel_win = None; +} + + +void net_init() +{ + char *name; + XEvent m; + + name = g_strdup_printf("_NET_SYSTEM_TRAY_S%d", DefaultScreen(display)); + net_sel_atom = XInternAtom(display, name, False); + assert(net_sel_atom); + net_opcode_atom = XInternAtom(display, "_NET_SYSTEM_TRAY_OPCODE", False); + assert(net_opcode_atom); + net_manager_atom = XInternAtom(display, "MANAGER", False); + assert(net_manager_atom); + net_message_data_atom = XInternAtom(display, "_NET_SYSTEM_TRAY_MESSAGE_DATA", + False); + assert(net_message_data_atom); + + net_create_selection_window(); + + XSetSelectionOwner(display, net_sel_atom, net_sel_win, CurrentTime); + if (XGetSelectionOwner(display, net_sel_atom) != net_sel_win) + return; /* we don't get the selection */ + + m.type = ClientMessage; + m.xclient.message_type = net_manager_atom; + m.xclient.format = 32; + m.xclient.data.l[0] = CurrentTime; + m.xclient.data.l[1] = net_sel_atom; + m.xclient.data.l[2] = net_sel_win; + m.xclient.data.l[3] = 0; + m.xclient.data.l[4] = 0; + XSendEvent(display, root, False, StructureNotifyMask, &m); +} + + +void net_destroy() +{ + net_destroy_selection_window(); +} + + +void net_message(XClientMessageEvent *e) +{ + unsigned long opcode; + Window id; + + assert(e); + + opcode = e->data.l[1]; + + switch (opcode) + { + case SYSTEM_TRAY_REQUEST_DOCK: /* dock a new icon */ + id = e->data.l[2]; + if (id && icon_add(id, NET)) + XSelectInput(display, id, StructureNotifyMask); + break; + + case SYSTEM_TRAY_BEGIN_MESSAGE: + g_printerr("Message From Dockapp\n"); + id = e->window; + break; + + case SYSTEM_TRAY_CANCEL_MESSAGE: + g_printerr("Message Cancelled\n"); + id = e->window; + break; + + default: + if (opcode == net_message_data_atom) { + g_printerr("Text For Message From Dockapp:\n%s\n", e->data.b); + id = e->window; + break; + } + + /* unknown message type. not in the spec. */ + g_printerr("Warning: Received unknown client message to System Tray " + "selection window.\n"); + break; + } +} + + +void net_icon_remove(TrayWindow *traywin) +{ + assert(traywin); + + XSelectInput(display, traywin->id, NoEventMask); +} diff --git a/src/systray/net.h b/src/systray/net.h new file mode 100644 index 0000000..9d350ea --- /dev/null +++ b/src/systray/net.h @@ -0,0 +1,15 @@ +#ifndef __net_h +#define __net_h + +#include +#include +#include "docker.h" + +extern Window net_sel_win; +extern Atom net_opcode_atom; + +void net_init(); +void net_message(XClientMessageEvent *e); +void net_icon_remove(TrayWindow *traywin); + +#endif /* __net_h */ diff --git a/src/systray/tint_merge.h b/src/systray/tint_merge.h new file mode 100644 index 0000000..475ebac --- /dev/null +++ b/src/systray/tint_merge.h @@ -0,0 +1,21 @@ +/************************************************************************** +* Copyright (C) 2008 thierry lorthiois (lorthiois@bbsoft.fr) +* +* Merge 'docker' with 'tint2'. +* The goal is to keep unchanged docker code, but without data duplication. +* +**************************************************************************/ + +#ifndef TINT_MERGE_H +#define TINT_MERGE_H + +#define display server.dsp +#define root server.root_win + +/* delete main(), parse_cmd_line() and display_string from docker.c + * include "tint_merge.h" in docker.h + */ + + +#endif + diff --git a/src/systray/version.h b/src/systray/version.h new file mode 100644 index 0000000..0b62be9 --- /dev/null +++ b/src/systray/version.h @@ -0,0 +1 @@ +#define VERSION "1.5" diff --git a/src/systray/version.h.in b/src/systray/version.h.in new file mode 100644 index 0000000..a44b122 --- /dev/null +++ b/src/systray/version.h.in @@ -0,0 +1 @@ +#define VERSION "@VERSION@" diff --git a/src/systray/xproperty.c b/src/systray/xproperty.c new file mode 100644 index 0000000..855379c --- /dev/null +++ b/src/systray/xproperty.c @@ -0,0 +1,64 @@ +#include "xproperty.h" +#include "docker.h" + +gboolean xprop_get8(Window window, Atom atom, Atom type, int size, + gulong *count, guchar **value) +{ + Atom ret_type; + int ret_size; + unsigned long ret_bytes; + int result; + unsigned long nelements = *count; + unsigned long maxread = nelements; + + *value = NULL; + + /* try get the first element */ + result = XGetWindowProperty(display, window, atom, 0l, 1l, False, + AnyPropertyType, &ret_type, &ret_size, + &nelements, &ret_bytes, value); + if (! (result == Success && ret_type == type && + ret_size == size && nelements > 0)) { + if (*value) XFree(*value); + *value = NULL; + nelements = 0; + } else { + /* we didn't the whole property's value, more to get */ + if (! (ret_bytes == 0 || maxread <= nelements)) { + int remain; + + /* get the entire property since it is larger than one element long */ + XFree(*value); + /* + the number of longs that need to be retreived to get the property's + entire value. The last + 1 is the first long that we retrieved above. + */ + remain = (ret_bytes - 1)/sizeof(long) + 1 + 1; + /* dont get more than the max */ + if (remain > size/8 * (signed)maxread) + remain = size/8 * (signed)maxread; + result = XGetWindowProperty(display, window, atom, 0l, remain, + False, type, &ret_type, &ret_size, + &nelements, &ret_bytes, value); + /* + If the property has changed type/size, or has grown since our first + read of it, then stop here and try again. If it shrank, then this will + still work. + */ + if (!(result == Success && ret_type == type && + ret_size == size && ret_bytes == 0)) { + if (*value) XFree(*value); + xprop_get8(window, atom, type, size, count, value); + } + } + } + + *count = nelements; + return *value != NULL; +} + +gboolean xprop_get32(Window window, Atom atom, Atom type, int size, + gulong *count, gulong **value) +{ + return xprop_get8(window, atom, type, size, count, (guchar**)value); +} diff --git a/src/systray/xproperty.h b/src/systray/xproperty.h new file mode 100644 index 0000000..81bc69a --- /dev/null +++ b/src/systray/xproperty.h @@ -0,0 +1,13 @@ +#ifndef __xproperty_h +#define __xproperty_h + +#include +#include + +/* if the func returns TRUE, the returned value must be XFree()'d */ +gboolean xprop_get8(Window window, Atom atom, Atom type, int size, + gulong *count, guchar **value); +gboolean xprop_get32(Window window, Atom atom, Atom type, int size, + gulong *count, gulong **value); + +#endif /* __xproperty_h */ diff --git a/src/taskbar/task.c b/src/taskbar/task.c new file mode 100644 index 0000000..f0b9924 --- /dev/null +++ b/src/taskbar/task.c @@ -0,0 +1,287 @@ +/************************************************************************** +* +* Tint2 : task +* +* Copyright (C) 2007 PÃ¥l Staurland (staura@gmail.com) +* Modified (C) 2008 thierry lorthiois (lorthiois@bbsoft.fr) +* +* This program is free software; you can redistribute it and/or +* modify it under the terms of the GNU General Public License version 2 +* as published by the Free Software Foundation. +* +* This program is distributed in the hope that 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. +**************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "window.h" +#include "task.h" +#include "server.h" +#include "panel.h" + + + +void add_task (Window win) +{ + Task *new_tsk; + int desktop, monitor; + + if (!win || window_is_hidden (win) || win == window.main_win) return; + + new_tsk = malloc(sizeof(Task)); + new_tsk->win = win; + new_tsk->title = 0; + new_tsk->icon_data = 0; + + get_icon(new_tsk); + get_title(new_tsk); + memcpy(&new_tsk->area, &g_task.area, sizeof(Area)); + memcpy(&new_tsk->area_active, &g_task.area_active, sizeof(Area)); + desktop = window_get_desktop (new_tsk->win); + monitor = window_get_monitor (new_tsk->win); + + //if (panel.mode == MULTI_MONITOR) monitor = window_get_monitor (new_tsk->win); + //else monitor = 0; + //printf("task %s : desktop %d, monitor %d\n", new_tsk->title, desktop, monitor); + + XSelectInput (server.dsp, new_tsk->win, PropertyChangeMask|StructureNotifyMask); + + if (desktop == 0xFFFFFFFF) { + if (new_tsk->title) XFree (new_tsk->title); + if (new_tsk->icon_data) XFree (new_tsk->icon_data); + free(new_tsk); + fprintf(stderr, "task on all desktop : ignored\n"); + return; + } + + Taskbar *tskbar; + tskbar = g_slist_nth_data(panel.area.list, index(desktop, monitor)); + new_tsk->area.parent = tskbar; + tskbar->area.list = g_slist_append(tskbar->area.list, new_tsk); + + if (resize_tasks (tskbar)) + redraw (&tskbar->area); +} + + +void remove_task (Task *tsk) +{ + if (!tsk) return; + + Taskbar *tskbar; + tskbar = (Taskbar*)tsk->area.parent; + tskbar->area.list = g_slist_remove(tskbar->area.list, tsk); + resize_tasks (tskbar); + redraw (&tskbar->area); + + if (tsk->title) XFree (tsk->title); + if (tsk->icon_data) XFree (tsk->icon_data); + XFreePixmap (server.dsp, tsk->area.pmap); + XFreePixmap (server.dsp, tsk->area_active.pmap); + free(tsk); +} + + +void get_title(Task *tsk) +{ + if (!g_task.text) return; + + char *title, *name; + + if (tsk->title) free(tsk->title); + + name = server_get_property (tsk->win, server.atom._NET_WM_VISIBLE_NAME, server.atom.UTF8_STRING, 0); + if (!name || !strlen(name)) { + name = server_get_property (tsk->win, server.atom._NET_WM_NAME, server.atom.UTF8_STRING, 0); + if (!name || !strlen(name)) { + name = server_get_property (tsk->win, server.atom.WM_NAME, XA_STRING, 0); + if (!name || !strlen(name)) { + name = malloc(10); + strcpy(name, "Untitled"); + } + } + } + + // add space before title + title = malloc(strlen(name)+1); + if (g_task.icon) strcpy(title, " "); + else title[0] = 0; + strcat(title, name); + + if (name) XFree (name); + tsk->title = title; +} + + +void get_icon (Task *tsk) +{ + if (!g_task.icon) return; + + long *data; + int num; + + data = server_get_property (tsk->win, server.atom._NET_WM_ICON, XA_CARDINAL, &num); + if (!data) return; + + int w, h; + long *tmp_data; + tmp_data = get_best_icon (data, get_icon_count (data, num), num, &w, &h, g_task.icon_size1); + + tsk->icon_width = w; + tsk->icon_height = h; + tsk->icon_data = malloc (w * h * sizeof (long)); + memcpy (tsk->icon_data, tmp_data, w * h * sizeof (long)); + + XFree (data); +} + + +void draw_task_icon (Task *tsk, int text_width, int active) +{ + if (tsk->icon_data == 0) get_icon (tsk); + if (tsk->icon_data == 0) return; + + Pixmap *pmap; + + if (active) pmap = &tsk->area_active.pmap; + else pmap = &tsk->area.pmap; + + /* Find pos */ + int pos_x; + if (g_task.centered) { + if (g_task.text) + pos_x = (tsk->area.width - text_width - g_task.icon_size1) / 2; + else + pos_x = (tsk->area.width - g_task.icon_size1) / 2; + } + else pos_x = g_task.area.paddingx + g_task.area.border.width; + + /* Render */ + Imlib_Image icon; + Imlib_Color_Modifier cmod; + DATA8 red[256], green[256], blue[256], alpha[256]; + + // TODO: cpu improvement : compute only when icon changed + DATA32 *data; + /* do we have 64bit? => long = 8bit */ + if (sizeof(long) != 4) { + int length = tsk->icon_width * tsk->icon_height; + data = malloc(sizeof(DATA32) * length); + int i; + for (i = 0; i < length; ++i) + data[i] = tsk->icon_data[i]; + } + else data = (DATA32 *) tsk->icon_data; + + icon = imlib_create_image_using_data (tsk->icon_width, tsk->icon_height, data); + imlib_context_set_image (icon); + imlib_context_set_drawable (*pmap); + + cmod = imlib_create_color_modifier (); + imlib_context_set_color_modifier (cmod); + imlib_image_set_has_alpha (1); + imlib_get_color_modifier_tables (red, green, blue, alpha); + + int i, opacity; + if (active) opacity = 255*g_task.font_active.alpha; + else opacity = 255*g_task.font.alpha; + for(i = 127; i < 256; i++) alpha[i] = opacity; + + imlib_set_color_modifier_tables (red, green, blue, alpha); + + //imlib_render_image_on_drawable (pos_x, pos_y); + imlib_render_image_on_drawable_at_size (pos_x, g_task.icon_posy, g_task.icon_size1, g_task.icon_size1); + + imlib_free_color_modifier (); + imlib_free_image (); + if (sizeof(long) != 4) free(data); +} + + +void draw_task_title (cairo_t *c, Task *tsk, int active) +{ + PangoLayout *layout; + config_color *config_text; + int width, height; + + if (g_task.text) { + /* Layout */ + layout = pango_cairo_create_layout (c); + pango_layout_set_font_description (layout, g_task.font_desc); + pango_layout_set_text (layout, tsk->title, -1); + + /* Drawing width and Cut text */ + pango_layout_set_width (layout, ((Taskbar*)tsk->area.parent)->text_width * PANGO_SCALE); + pango_layout_set_ellipsize (layout, PANGO_ELLIPSIZE_END); + + /* Center text */ + if (g_task.centered) pango_layout_set_alignment (layout, PANGO_ALIGN_CENTER); + else pango_layout_set_alignment (layout, PANGO_ALIGN_LEFT); + + pango_layout_get_pixel_size (layout, &width, &height); + + if (active) config_text = &g_task.font_active; + else config_text = &g_task.font; + + cairo_set_source_rgba (c, config_text->color[0], config_text->color[1], config_text->color[2], config_text->alpha); + + pango_cairo_update_layout (c, layout); + cairo_move_to (c, g_task.text_posx, g_task.text_posy); + pango_cairo_show_layout (c, layout); + + if (g_task.font_shadow) { + cairo_set_source_rgba (c, 0.0, 0.0, 0.0, 0.5); + pango_cairo_update_layout (c, layout); + cairo_move_to (c, g_task.text_posx + 1, g_task.text_posy + 1); + pango_cairo_show_layout (c, layout); + } + g_object_unref (layout); + } + + if (g_task.icon) { + // icon use same opacity as text + draw_task_icon (tsk, width, active); + } +} + + +int draw_foreground_task (void *obj, cairo_t *c) +{ + Task *tsk = obj; + cairo_surface_t *cs; + cairo_t *ca; + + draw_task_title (c, tsk, 0); + + // draw active pmap + if (tsk->area_active.pmap) XFreePixmap (server.dsp, tsk->area_active.pmap); + tsk->area_active.pmap = server_create_pixmap (tsk->area.width, tsk->area.height); + + // add layer of root pixmap + XCopyArea (server.dsp, server.pmap, tsk->area_active.pmap, server.gc, tsk->area.posx, tsk->area.posy, tsk->area.width, tsk->area.height, 0, 0); + + cs = cairo_xlib_surface_create (server.dsp, tsk->area_active.pmap, server.visual, tsk->area.width, tsk->area.height); + ca = cairo_create (cs); + + // redraw task + draw_background (&tsk->area_active, ca); + draw_task_title (ca, tsk, 1); + + cairo_destroy (ca); + cairo_surface_destroy (cs); + return 0; +} + diff --git a/src/taskbar/task.h b/src/taskbar/task.h new file mode 100644 index 0000000..bab6c74 --- /dev/null +++ b/src/taskbar/task.h @@ -0,0 +1,67 @@ +/************************************************************************** +* task : +* - +* +**************************************************************************/ + +#ifndef TASK_H +#define TASK_H + +#include +#include +#include "common.h" + + +// -------------------------------------------------- +// global task parameter +typedef struct { + Area area; + Area area_active; + + int text; + int icon; + int icon_size1; + int centered; + int maximum_width; + int font_shadow; + // icon position + int icon_posy; + // starting position for text ~ task_padding + task_border + icon_size + double text_posx, text_posy; + PangoFontDescription *font_desc; + config_color font; + config_color font_active; +} Global_task; + + + +// -------------------------------------------------- +// task parameter +typedef struct { + // -------------------------------------------------- + // always start with area + Area area; + Area area_active; + + // TODO: group task with list of windows here + Window win; + long *icon_data; + int icon_width; + int icon_height; + char *title; +} Task; + + +Global_task g_task; + + +void add_task (Window win); +void remove_task (Task *tsk); + +int draw_foreground_task (void *obj, cairo_t *c); + +void get_icon (Task *tsk); +void get_title(Task *tsk); + +#endif + diff --git a/src/taskbar/taskbar.c b/src/taskbar/taskbar.c new file mode 100644 index 0000000..05ba366 --- /dev/null +++ b/src/taskbar/taskbar.c @@ -0,0 +1,143 @@ +/************************************************************************** +* +* Tint2 : taskbar +* +* Copyright (C) 2008 thierry lorthiois (lorthiois@bbsoft.fr) +* +* This program is free software; you can redistribute it and/or +* modify it under the terms of the GNU General Public License version 2 +* as published by the Free Software Foundation. +* +* This program is distributed in the hope that 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. +**************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "taskbar.h" +#include "server.h" +#include "window.h" +#include "panel.h" + + + +Task *task_get_task (Window win) +{ + Taskbar *tskbar; + Task *tsk; + GSList *l0; + + for (l0 = panel.area.list; l0 ; l0 = l0->next) { + tskbar = l0->data; + GSList *l1; + for (l1 = tskbar->area.list; l1 ; l1 = l1->next) { + tsk = l1->data; + if (win == tsk->win) return tsk; + } + } + + // nb = panel.nb_desktop * panel.nb_monitor; + //printf("task_get_task return 0\n"); + return 0; +} + + +void task_refresh_tasklist () +{ + Window *win, active_win; + int num_results, i, j; + + win = server_get_property (server.root_win, server.atom._NET_CLIENT_LIST, XA_WINDOW, &num_results); + + if (!win) return; + + /* Remove any old and set active win */ + active_win = window_get_active (); + + Task *tsk; + Taskbar *tskbar; + GSList *l0; + for (l0 = panel.area.list; l0 ; l0 = l0->next) { + tskbar = l0->data; + GSList *l1; + for (l1 = tskbar->area.list; l1 ; l1 = l1->next) { + tsk = l1->data; + + if (tsk->win == active_win) panel.task_active = tsk; + + for (j = 0; j < num_results; j++) { + if (tsk->win == win[j]) break; + } + if (tsk->win != win[j]) remove_task (tsk); + } + } + + /* Add any new */ + for (i = 0; i < num_results; i++) { + if (!task_get_task (win[i])) add_task (win[i]); + } + + XFree (win); +} + + +int resize_tasks (Taskbar *taskbar) +{ + int ret, task_count, pixel_width, modulo_width=0; + int x, taskbar_width; + Task *tsk; + GSList *l; + + // new task width for 'desktop' + task_count = g_slist_length(taskbar->area.list); + if (!task_count) pixel_width = g_task.maximum_width; + else { + taskbar_width = taskbar->area.width - (2 * g_taskbar.border.width) - ((task_count+1) * g_taskbar.paddingx); + + pixel_width = taskbar_width / task_count; + if (pixel_width > g_task.maximum_width) pixel_width = g_task.maximum_width; + else modulo_width = taskbar_width % task_count; + } + + if ((taskbar->task_width == pixel_width) && (taskbar->task_modulo == modulo_width)) { + ret = 0; + } + else { + ret = 1; + taskbar->task_width = pixel_width; + taskbar->task_modulo = modulo_width; + taskbar->text_width = pixel_width - g_task.text_posx - g_task.area.border.width - g_task.area.paddingx; + } + + // change pos_x and width for all tasks + x = taskbar->area.posx + taskbar->area.border.width + taskbar->area.paddingx; + for (l = taskbar->area.list; l ; l = l->next) { + tsk = l->data; + tsk->area.posx = x; + tsk->area_active.posx = x; + tsk->area.width = pixel_width; + tsk->area_active.width = pixel_width; + if (modulo_width) { + tsk->area.width++; + tsk->area_active.width++; + modulo_width--; + } + + x += tsk->area.width + g_taskbar.paddingx; + } + return ret; +} + + diff --git a/src/taskbar/taskbar.h b/src/taskbar/taskbar.h new file mode 100644 index 0000000..3b3560d --- /dev/null +++ b/src/taskbar/taskbar.h @@ -0,0 +1,39 @@ + +#ifndef TASKBAR_H +#define TASKBAR_H + +#include "task.h" + + +// -------------------------------------------------- +// taskbar parameter +typedef struct { + // -------------------------------------------------- + // always start with area + Area area; + + int desktop; + int monitor; + + // task parameters + int task_width; + int task_modulo; + int text_width; +} Taskbar; + + +// -------------------------------------------------- +// global taskbar parameter +Area g_taskbar; + + +Task *task_get_task (Window win); +void task_refresh_tasklist (); + +// return 1 if task_width changed +int resize_tasks (Taskbar *tskbar); + +//void add_taskbar(Area *a); + +#endif + diff --git a/src/tint.c b/src/tint.c new file mode 100644 index 0000000..42581ff --- /dev/null +++ b/src/tint.c @@ -0,0 +1,441 @@ +/************************************************************************** +* +* Tint2 panel +* +* Copyright (C) 2007 PÃ¥l Staurland (staura@gmail.com) +* Modified (C) 2008 thierry lorthiois (lorthiois@bbsoft.fr) +* +* This program is free software; you can redistribute it and/or +* modify it under the terms of the GNU General Public License version 2 +* as published by the Free Software Foundation. +* +* This program is distributed in the hope that 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. +**************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "server.h" +#include "window.h" +#include "config.h" +#include "task.h" +#include "taskbar.h" +#include "panel.h" +#include "docker.h" +#include "net.h" +#include "kde.h" + + +void signal_handler(int sig) +{ + // signal handler is light as it should be + panel.signal_pending = sig; +} + + +void init () +{ + // Set signal handler + signal(SIGUSR1, signal_handler); + signal(SIGINT, signal_handler); + signal(SIGTERM, signal_handler); + + // set global data + memset(&panel, 0, sizeof(Panel)); + memset(&server, 0, sizeof(Server_global)); + memset(&g_task, 0, sizeof(Global_task)); + memset(&g_taskbar, 0, sizeof(Area)); + panel.clock.area.draw_foreground = draw_foreground_clock; + g_task.area.draw_foreground = draw_foreground_task; + window.main_win = 0; + + // append full transparency background + //Area *back = calloc(1, sizeof(Area)); + list_back = g_slist_append(0, calloc(1, sizeof(Area))); + + server.dsp = XOpenDisplay (NULL); + if (!server.dsp) { + fprintf(stderr, "Could not open display.\n"); + exit(0); + } + server_init_atoms (); + server.screen = DefaultScreen (server.dsp); + server.root_win = RootWindow (server.dsp, server.screen); + server.depth = DefaultDepth (server.dsp, server.screen); + server.visual = DefaultVisual (server.dsp, server.screen); + server.desktop = server_get_current_desktop (); + + XSetErrorHandler ((XErrorHandler) server_catch_error); + + // init systray + display = server.dsp; + root = RootWindow(display, DefaultScreen(display)); + //create_main_window(); + //kde_init(); + //net_init(); + //printf("ici 4\n"); + + imlib_context_set_display (server.dsp); + imlib_context_set_visual (server.visual); + imlib_context_set_colormap (DefaultColormap (server.dsp, server.screen)); + + /* Catch events */ + XSelectInput (server.dsp, server.root_win, PropertyChangeMask|StructureNotifyMask); + + setlocale(LC_ALL, ""); +} + + +void window_action (Task *tsk, int action) +{ + switch (action) { + case CLOSE: + set_close (tsk->win); + break; + case TOGGLE: + set_active(tsk->win); + break; + case ICONIFY: + XIconifyWindow (server.dsp, tsk->win, server.screen); + break; + case TOGGLE_ICONIFY: + if (tsk == panel.task_active) XIconifyWindow (server.dsp, tsk->win, server.screen); + else set_active (tsk->win); + break; + case SHADE: + window_toggle_shade (tsk->win); + break; + } +} + + +void event_button_press (int x, int y) +{ + if (panel.mode == SINGLE_DESKTOP) { + // drag and drop disabled + XLowerWindow (server.dsp, window.main_win); + return; + } + + Taskbar *tskbar; + GSList *l0; + for (l0 = panel.area.list; l0 ; l0 = l0->next) { + tskbar = l0->data; + if (x >= tskbar->area.posx && x <= (tskbar->area.posx + tskbar->area.width)) + break; + } + + if (l0) { + Task *tsk; + for (l0 = tskbar->area.list; l0 ; l0 = l0->next) { + tsk = l0->data; + if (x >= tsk->area.posx && x <= (tsk->area.posx + tsk->area.width)) { + panel.task_drag = tsk; + break; + } + } + } + + XLowerWindow (server.dsp, window.main_win); +} + + +void event_button_release (int button, int x, int y) +{ + int action = TOGGLE_ICONIFY; + + switch (button) { + case 2: + action = panel.mouse_middle; + break; + case 3: + action = panel.mouse_right; + break; + case 4: + action = panel.mouse_scroll_up; + break; + case 5: + action = panel.mouse_scroll_down; + break; + } + + // TODO: ne pas afficher les taskbar invisibles + //if (panel.mode != MULTI_DESKTOP && desktop != server.desktop) continue; + + // search taskbar + Taskbar *tskbar; + GSList *l0; + for (l0 = panel.area.list; l0 ; l0 = l0->next) { + tskbar = l0->data; + if (x >= tskbar->area.posx && x <= (tskbar->area.posx + tskbar->area.width)) + goto suite; + } + + // TODO: check better solution to keep window below + XLowerWindow (server.dsp, window.main_win); + panel.task_drag = 0; + return; + +suite: + // drag and drop task + if (panel.task_drag) { + if (tskbar != panel.task_drag->area.parent && action == TOGGLE_ICONIFY) { + windows_set_desktop(panel.task_drag->win, tskbar->desktop); + if (tskbar->desktop == server.desktop) + set_active(panel.task_drag->win); + panel.task_drag = 0; + return; + } + else panel.task_drag = 0; + } + + // switch desktop + if (panel.mode == MULTI_DESKTOP) + if (tskbar->desktop != server.desktop && action != CLOSE) + set_desktop (tskbar->desktop); + + // action on task + Task *tsk; + GSList *l; + for (l = tskbar->area.list ; l ; l = l->next) { + tsk = l->data; + if (x >= tsk->area.posx && x <= (tsk->area.posx + tsk->area.width)) { + window_action (tsk, action); + break; + } + } + + // to keep window below + XLowerWindow (server.dsp, window.main_win); +} + + +void event_property_notify (Window win, Atom at) +{ + + if (win == server.root_win) { + if (!server.got_root_win) { + XSelectInput (server.dsp, server.root_win, PropertyChangeMask|StructureNotifyMask); + server.got_root_win = 1; + } + + /* Change number of desktops */ + else if (at == server.atom._NET_NUMBER_OF_DESKTOPS) { + config_taskbar(); + redraw(&panel.area); + panel.refresh = 1; + } + /* Change desktop */ + else if (at == server.atom._NET_CURRENT_DESKTOP) { + server.desktop = server_get_current_desktop (); + if (panel.mode != MULTI_DESKTOP) panel.refresh = 1; + } + /* Window list */ + else if (at == server.atom._NET_CLIENT_LIST) { + task_refresh_tasklist (); + panel.refresh = 1; + } + /* Active */ + else if (at == server.atom._NET_ACTIVE_WINDOW) { + Window w1 = window_get_active (); + Task *t = task_get_task(w1); + if (t) panel.task_active = t; + else { + Window w2; + if (XGetTransientForHint(server.dsp, w1, &w2) != 0) + if (w2) panel.task_active = task_get_task(w2); + } + panel.refresh = 1; + } + /* Wallpaper changed */ + else if (at == server.atom._XROOTPMAP_ID) { + XFreePixmap (server.dsp, server.root_pmap); + server.root_pmap = 0; + redraw(&panel.area); + panel.clock.area.redraw = 1; + panel.refresh = 1; + } + } + else { + Task *tsk; + tsk = task_get_task (win); + if (!tsk) return; + //printf("atom root_win = %s, %s\n", XGetAtomName(server.dsp, at), tsk->title); + + /* Window title changed */ + if (at == server.atom._NET_WM_VISIBLE_NAME || at == server.atom._NET_WM_NAME || at == server.atom.WM_NAME) { + get_title(tsk); + tsk->area.redraw = 1; + panel.refresh = 1; + } + /* Iconic state */ + else if (at == server.atom.WM_STATE) { + if (window_is_iconified (win)) + if (panel.task_active == tsk) panel.task_active = 0; + } + /* Window icon changed */ + else if (at == server.atom._NET_WM_ICON) { + if (tsk->icon_data != 0) XFree (tsk->icon_data); + tsk->area.redraw = 1; + tsk->icon_data = 0; + panel.refresh = 1; + } + /* Window desktop changed */ + else if (at == server.atom._NET_WM_DESKTOP) { + add_task (tsk->win); + remove_task (tsk); + panel.refresh = 1; + } + + if (!server.got_root_win) server.root_win = RootWindow (server.dsp, server.screen); + } +} + + +void event_configure_notify (Window win) +{ + Task *tsk; + + tsk = task_get_task (win); + if (!tsk) return; + +/* TODO ??? voir ancien code !! + Taskbar *tskbar; + tskbar = tsk->area.parent; + int new_monitor = window_get_monitor (win); + int desktop = tskbar->desktop; + + // task on the same monitor + if (tsk->id_taskbar == index(desktop, new_monitor)) return; + + add_task (tsk->win); + remove_task (tsk); + panel.refresh = 1; + */ +} + + +void event_timer() +{ + struct timeval stv; + + if (!panel.clock.time1_format) return; + + if (gettimeofday(&stv, 0)) return; + + if (abs(stv.tv_sec - panel.clock.clock.tv_sec) < panel.clock.time_precision) return; + + // update clock + panel.clock.clock.tv_sec = stv.tv_sec; + panel.clock.clock.tv_sec -= panel.clock.clock.tv_sec % panel.clock.time_precision; + panel.clock.area.redraw = 1; + panel.refresh = 1; +} + + +int main (int argc, char *argv[]) +{ + XEvent e; + fd_set fd; + int x11_fd, i, c; + struct timeval tv; + + c = getopt (argc, argv, "c:"); + init (); + +load_config: + if (server.root_pmap) XFreePixmap (server.dsp, server.root_pmap); + server.root_pmap = 0; + // read tint2rc config + i = 0; + if (c != -1) + i = config_read_file (optarg); + if (!i) + i = config_read (); + if (!i) { + fprintf(stderr, "usage: tint2 [-c] \n"); + cleanup(); + exit(1); + } + config_finish (); + + window_draw_panel (); + + x11_fd = ConnectionNumber (server.dsp); + XSync (server.dsp, False); + + while (1) { + // thanks to AngryLlama for the timer + // Create a File Description Set containing x11_fd + FD_ZERO (&fd); + FD_SET (x11_fd, &fd); + + tv.tv_usec = 500000; + tv.tv_sec = 0; + + // Wait for X Event or a Timer + if (select(x11_fd+1, &fd, 0, 0, &tv)) { + while (XPending (server.dsp)) { + XNextEvent(server.dsp, &e); + + switch (e.type) { + case ButtonPress: + if (e.xbutton.button == 1) event_button_press (e.xbutton.x, e.xbutton.y); + break; + + case ButtonRelease: + event_button_release (e.xbutton.button, e.xbutton.x, e.xbutton.y); + break; + + case Expose: + XCopyArea (server.dsp, server.pmap, window.main_win, server.gc, 0, 0, panel.area.width, panel.area.height, 0, 0); + break; + + case PropertyNotify: + event_property_notify (e.xproperty.window, e.xproperty.atom); + break; + + case ConfigureNotify: + if (e.xconfigure.window == server.root_win) + goto load_config; + else + if (panel.mode == MULTI_MONITOR) + event_configure_notify (e.xconfigure.window); + break; + } + } + } + else event_timer(); + + switch (panel.signal_pending) { + case SIGUSR1: + goto load_config; + case SIGINT: + case SIGTERM: + cleanup (); + return 0; + } + + if (panel.refresh && !panel.sleep_mode) { + visual_refresh (); + //printf(" *** visual_refresh\n"); + } + } +} + + diff --git a/src/tint2 b/src/tint2 new file mode 100755 index 0000000000000000000000000000000000000000..08a61162a17f9f8f00d58bc8f1fcc52c3187da7a GIT binary patch literal 52672 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∨>NQKPyCvJKZ+4rm-mBC`88@D+w9OZ$ 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 literal 0 HcmV?d00001 diff --git a/src/util/area.c b/src/util/area.c new file mode 100644 index 0000000..2f44cf5 --- /dev/null +++ b/src/util/area.c @@ -0,0 +1,182 @@ +/************************************************************************** +* +* Tint2 : area +* +* Copyright (C) 2008 thierry lorthiois (lorthiois@bbsoft.fr) +* +* This program is free software; you can redistribute it and/or +* modify it under the terms of the GNU General Public License version 2 +* as published by the Free Software Foundation. +* +* This program is distributed in the hope that 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. +**************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include + +#include "window.h" +#include "server.h" +#include "area.h" + + + +void redraw (Area *a) +{ + a->redraw = 1; + + GSList *l; + for (l = a->list ; l ; l = l->next) + redraw(l->data); +} + + +int draw (Area *a) +{ + if (!a->redraw) return 0; + + cairo_surface_t *cs; + cairo_t *c; + int ret = 0; + + if (a->pmap) XFreePixmap (server.dsp, a->pmap); + a->pmap = server_create_pixmap (a->width, a->height); + + // add layer of root pixmap + XCopyArea (server.dsp, server.pmap, a->pmap, server.gc, a->posx, a->posy, a->width, a->height, 0, 0); + + cs = cairo_xlib_surface_create (server.dsp, a->pmap, server.visual, a->width, a->height); + c = cairo_create (cs); + + draw_background (a, c); + + if (a->draw_foreground) { + ret = a->draw_foreground(a, c); + } + else { + // parcours de la liste des sous objets + } + + cairo_destroy (c); + cairo_surface_destroy (cs); + a->redraw = 0; + + return ret; +} + + +void draw_background (Area *a, cairo_t *c) +{ + if (a->back.alpha > 0.0) { + //printf(" draw_background %d %d\n", a->width, a->height); + draw_rect(c, a->border.width, a->border.width, a->width-(2.0 * a->border.width), a->height-(2.0*a->border.width), a->border.rounded - a->border.width/1.571); + /* + double x0, y0, x1, y1; + x0 = 0; + y0 = 100; + x1 = 100; + y1 = 0; + + cairo_pattern_t *linpat; + cairo_matrix_t matrix; + linpat = cairo_pattern_create_linear (x0, y0, x1, y1); + + cairo_pattern_add_color_stop_rgba (linpat, 0, a->back.color[0], a->back.color[1], a->back.color[2], a->back.alpha); + cairo_pattern_add_color_stop_rgba (linpat, 1, a->back.color[0], a->back.color[1], a->back.color[2], 0); + //cairo_matrix_init_scale (&matrix, a->height, a->width); + //cairo_pattern_set_matrix (linpat, &matrix); + cairo_set_source (c, linpat); + */ + cairo_set_source_rgba(c, a->back.color[0], a->back.color[1], a->back.color[2], a->back.alpha); + + cairo_fill(c); + //cairo_pattern_destroy (linpat); + } + + if (a->border.width > 0 && a->border.alpha > 0.0) { + cairo_set_line_width (c, a->border.width); + + // draw border inside (x, y, width, height) + draw_rect(c, a->border.width/2.0, a->border.width/2.0, a->width - a->border.width, a->height - a->border.width, a->border.rounded); + /* + // convert : radian = degre * M_PI/180 + // définir le dégradé dans un carré de (0,0) (100,100) + // ensuite ce dégradé est extrapolé selon le ratio width/height + // dans repère (0, 0) (100, 100) + double X0, Y0, X1, Y1, degre; + // x = X * (a->width / 100), y = Y * (a->height / 100) + double x0, y0, x1, y1; + X0 = 0; + Y0 = 100; + X1 = 100; + Y1 = 0; + degre = 45; + // et ensuite faire la changement d'unité du repère + // car ce qui doit resté inchangée est les traits et pas la direction + + // il faut d'abord appliquer une rotation de 90° (et -180° si l'angle est supérieur à 180°) + // ceci peut être appliqué une fois pour toute au départ + // ensuite calculer l'angle dans le nouveau repère + // puis faire une rotation de 90° + x0 = X0 * ((double)a->width / 100); + x1 = X1 * ((double)a->width / 100); + y0 = Y0 * ((double)a->height / 100); + y1 = Y1 * ((double)a->height / 100); + + x0 = X0 * ((double)a->height / 100); + x1 = X1 * ((double)a->height / 100); + y0 = Y0 * ((double)a->width / 100); + y1 = Y1 * ((double)a->width / 100); + printf("repère (%d, %d) points (%lf, %lf) (%lf, %lf)\n", a->width, a->height, x0, y0, x1, y1); + + cairo_pattern_t *linpat; + linpat = cairo_pattern_create_linear (x0, y0, x1, y1); + cairo_pattern_add_color_stop_rgba (linpat, 0, a->border.color[0], a->border.color[1], a->border.color[2], a->border.alpha); + cairo_pattern_add_color_stop_rgba (linpat, 1, a->border.color[0], a->border.color[1], a->border.color[2], 0); + cairo_set_source (c, linpat); + */ + cairo_set_source_rgba (c, a->border.color[0], a->border.color[1], a->border.color[2], a->border.alpha); + + cairo_stroke (c); + //cairo_pattern_destroy (linpat); + } +} + + +void refresh (Area *a) +{ + XCopyArea (server.dsp, a->pmap, server.pmap, server.gc, 0, 0, a->width, a->height, a->posx, a->posy); +} + + +void remove_area (Area *a) +{ + Area *parent; + + parent = (Area*)a->parent; + parent->list = g_slist_remove(parent->list, a); + redraw (parent); + +} + + +void add_area (Area *a) +{ + Area *parent; + + parent = (Area*)a->parent; + parent->list = g_slist_remove(parent->list, a); + redraw (parent); + +} + diff --git a/src/util/area.h b/src/util/area.h new file mode 100644 index 0000000..2ad26aa --- /dev/null +++ b/src/util/area.h @@ -0,0 +1,140 @@ +/************************************************************************** +* base class for all objects (panel, taskbar, task, systray, clock, ...). +* each object 'inherit' Area and implement draw_foreground if needed. +* +* Area is at the begining of each object so &object == &area. +* +* une zone comprend : +* - fond : couleur / opacité +* - contenu +* - largeur / hauteur +* - paddingx / paddingy +* - pixmap mémorisant l'affichage (évite de redessiner l'objet à chaque rafraichissement) +* - une liste de sous objets +* +* un objet comprend les actions: +* 1) redraw(obj) +* force l'indicateur 'redraw' sur l'objet +* parcoure la liste des sous objets => redraw(obj) +* 2) draw(obj) +* dessine le background, dessine le contenu dans pmap +* parcoure la liste des sous objets => draw(obj) +* le pmap de l'objet se base sur le pmap de l'objet parent (cumul des couches) +* 3) draw_background(obj) +* dessine le fond dans pmap +* 4) draw_foreground(obj) = 0 : fonction virtuelle à redéfinir +* dessine le contenu dans pmap +* si l'objet n'a pas de contenu, la fonction est nulle +* 5) resize_width(obj, width) = 0 : fonction virtuelle à redéfinir +* recalcule la largeur de l'objet (car la hauteur est fixe) +* - taille systray calculée à partir de la liste des icones +* - taille clock calculée à partir de l'heure +* - taille d'une tache calculée à partir de la taskbar (ajout, suppression, taille) +* - taille d'une taskbar calculée à partir de la taille du panel et des autres objets +* 6) voir refresh(obj) +* +* Implémentation : +* - tous les éléments du panel possèdent 1 objet en début de structure +* panel, taskbar, systray, task, ... +* - l'objet est en fait une zone (area). +* l'imbrication des sous objet doit permettre de gérer le layout. +* - on a une relation 1<->1 entre un objet et une zone graphique +* les taskbar affichent toutes les taches. +* donc on utilise la liste des objets pour gérer la liste des taches. +* - les taches ont 2 objets : l'un pour la tache inactive et l'autre pour la tache active +* draw(obj) est appellé sur le premier objet automatiquement +* et draw_foreground(obj) lance l'affichage du 2 ieme objet +* ainsi la taskbar gère bien une liste d'objets mais draw(obj) dessine les 2 objets +* - les fonctions de refresh et de draw sont totalement dissociées +* +* ---------------------------------------------------- +* A évaluer : +* 1. voir comment définir et gérer le panel_layout avec les objets +* => peut on s'affranchir des données spécifiques à chaque objet ? +* => comment gérer l'affichage du layout ? +* => comment configurer le layout ? +* => voir le cumul des couches et l'imbrication entre objet et parent ? +* 2. voir la fonction de refresh des objets ?? +* surtout le refresh des taches qui est différent pour la tache active +* +* 3. tester l'implémentation et évaluer les autres abstractions possibles ? +* +* 4. comment gérer le groupage des taches +* 5. la clock est le contenu du panel. mais elle ne tiens pas compte du padding vertical ? +* c'est ok pour la clock. voir l'impact sur paddingx ? +* +* voir resize_taskbar(), resize_clock() et resize_tasks() +* voir les taches actives et inactives ?? une seule tache est active ! +* variable widthChanged ou bien emission d'un signal ??? +* +* 6) config(obj) configure un objet (définie les positions verticales) +* +**************************************************************************/ + +#ifndef AREA_H +#define AREA_H + +#include +#include + +#include "common.h" + + + +typedef struct +{ + double color[3]; + double alpha; + int width; + int rounded; +} Border; + + +typedef struct +{ + double color[3]; + double alpha; +} Color; + + +typedef struct { + // need redraw Pixmap + int redraw; + + int paddingx, paddingy; + int width, height; + Pixmap pmap; + + Color back; + Border border; + + // absolute coordinate in panel + int posx, posy; + // parent Area + void *parent; + + // pointer to function + // draw_foreground : return 1 if width changed, return O otherwise + int (*draw_foreground)(void *obj, cairo_t *c); + void (*add_child)(void *obj); + int (*remove_child)(void *obj); + + // list of child + GSList *list; +} Area; + + +// redraw an area and childs +void redraw (Area *a); + +// draw background and foreground +// return 1 if width changed, return O otherwise +int draw (Area *a); +void draw_background (Area *a, cairo_t *c); + +void refresh (Area *a); +void remove_area (Area *a); +void add_area (Area *a); + +#endif + diff --git a/src/util/common.h b/src/util/common.h new file mode 100644 index 0000000..313a3b7 --- /dev/null +++ b/src/util/common.h @@ -0,0 +1,41 @@ +/************************************************************************** +* Common declarations +* +**************************************************************************/ + +#ifndef COMMON_H +#define COMMON_H + + +#define WM_CLASS_TINT "panel" + +#include "area.h" + +// taskbar table : convert 2 dimension in 1 dimension +#define index(i, j) ((i * panel.nb_monitor) + j) + +// mouse actions +enum { NONE=0, CLOSE, TOGGLE, ICONIFY, SHADE, TOGGLE_ICONIFY }; + + + +typedef struct config_border +{ + double color[3]; + double alpha; + int width; + int rounded; +} config_border; + + +typedef struct config_color +{ + double color[3]; + double alpha; +} config_color; + + + + +#endif + diff --git a/src/util/window.c b/src/util/window.c new file mode 100644 index 0000000..ebbdce0 --- /dev/null +++ b/src/util/window.c @@ -0,0 +1,264 @@ +/************************************************************************** +* +* Tint2 : common windows function +* +* Copyright (C) 2007 PÃ¥l Staurland (staura@gmail.com) +* Modified (C) 2008 thierry lorthiois (lorthiois@bbsoft.fr) +* +* This program is free software; you can redistribute it and/or +* modify it under the terms of the GNU General Public License version 2 +* as published by the Free Software Foundation. +* +* This program is distributed in the hope that 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. +**************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include + +#include "common.h" +#include "window.h" +#include "server.h" + + + +void set_active (Window win) +{ + send_event32 (win, server.atom._NET_ACTIVE_WINDOW, 2, 0); +} + + +void set_desktop (int desktop) +{ + send_event32 (server.root_win, server.atom._NET_CURRENT_DESKTOP, desktop, 0); +} + + +void windows_set_desktop (Window win, int desktop) +{ + send_event32 (win, server.atom._NET_WM_DESKTOP, desktop, 2); +} + + +void set_close (Window win) +{ + send_event32 (win, server.atom._NET_CLOSE_WINDOW, 0, 2); +} + + +void window_toggle_shade (Window win) +{ + send_event32 (win, server.atom._NET_WM_STATE, 2, 0); +} + + +int window_is_hidden (Window win) +{ + Window window; + Atom *at; + int count, i; + + if (XGetTransientForHint(server.dsp, win, &window) != 0) { + if (window) { + return 1; + } + } + + at = server_get_property (win, server.atom._NET_WM_STATE, XA_ATOM, &count); + for (i = 0; i < count; i++) { + if (at[i] == server.atom._NET_WM_STATE_SKIP_PAGER || at[i] == server.atom._NET_WM_STATE_SKIP_TASKBAR) { + XFree(at); + return 1; + } + } + XFree(at); + + at = server_get_property (win, server.atom._NET_WM_WINDOW_TYPE, XA_ATOM, &count); + for (i = 0; i < count; i++) { + if (at[i] == server.atom._NET_WM_WINDOW_TYPE_DOCK || at[i] == server.atom._NET_WM_WINDOW_TYPE_DESKTOP || at[i] == server.atom._NET_WM_WINDOW_TYPE_TOOLBAR || at[i] == server.atom._NET_WM_WINDOW_TYPE_MENU || at[i] == server.atom._NET_WM_WINDOW_TYPE_SPLASH) { + XFree(at); + return 1; + } + } + + // specification + // Windows with neither _NET_WM_WINDOW_TYPE nor WM_TRANSIENT_FOR set + // MUST be taken as top-level window. + XFree(at); + return 0; +} + + +int window_get_desktop (Window win) +{ + return get_property32(win, server.atom._NET_WM_DESKTOP, XA_CARDINAL); +} + + +int window_get_monitor (Window win) +{ + int i, x, y; + Window src; + + XTranslateCoordinates(server.dsp, win, server.root_win, 0, 0, &x, &y, &src); + for (i = 0; i < server.nb_monitor; i++) { + if (x >= server.monitor[i].x && x <= (server.monitor[i].x + server.monitor[i].width)) + if (y >= server.monitor[i].y && y <= (server.monitor[i].y + server.monitor[i].height)) + break; + } + + //printf("window %lx : ecran %d, (%d, %d)\n", win, i, x, y); + if (i == server.nb_monitor) return 0; + else return i; +} + + +int window_is_iconified (Window win) +{ + return (IconicState == get_property32(win, server.atom.WM_STATE, server.atom.WM_STATE)); +} + + +int server_get_number_of_desktop () +{ + return get_property32(server.root_win, server.atom._NET_NUMBER_OF_DESKTOPS, XA_CARDINAL); +} + + +int server_get_current_desktop () +{ + return get_property32(server.root_win, server.atom._NET_CURRENT_DESKTOP, XA_CARDINAL); +} + + +Window window_get_active () +{ + return get_property32(server.root_win, server.atom._NET_ACTIVE_WINDOW, XA_WINDOW); +} + + +int window_is_active (Window win) +{ + return (win == get_property32(server.root_win, server.atom._NET_ACTIVE_WINDOW, XA_WINDOW)); +} + + +int get_icon_count (long *data, int num) +{ + int count, pos, w, h; + + count = 0; + pos = 0; + while (pos < num) { + w = data[pos++]; + h = data[pos++]; + pos += w * h; + if (pos > num || w * h == 0) break; + count++; + } + + return count; +} + + +long *get_best_icon (long *data, int icon_count, int num, int *iw, int *ih, int best_icon_size) +{ + int width[icon_count], height[icon_count], pos, i, w, h; + long *icon_data[icon_count]; + + /* List up icons */ + pos = 0; + i = icon_count; + while (i--) { + w = data[pos++]; + h = data[pos++]; + if (pos + w * h > num) break; + + width[i] = w; + height[i] = h; + icon_data[i] = &data[pos]; + + pos += w * h; + } + + /* Try to find exact size */ + int icon_num = -1; + for (i = 0; i < icon_count; i++) { + if (width[i] == best_icon_size) { + icon_num = i; + break; + } + } + + /* Take the biggest or whatever */ + if (icon_num < 0) { + int highest = 0; + for (i = 0; i < icon_count; i++) { + if (width[i] > highest) { + icon_num = i; + highest = width[i]; + } + } + } + + *iw = width[icon_num]; + *ih = height[icon_num]; + return icon_data[icon_num]; +} + + +void draw_rect(cairo_t *c, double x, double y, double w, double h, double r) +{ + if (r > 0.0) { + double c1 = 0.55228475 * r; + + cairo_move_to(c, x+r, y); + cairo_rel_line_to(c, w-2*r, 0); + cairo_rel_curve_to(c, c1, 0.0, r, c1, r, r); + cairo_rel_line_to(c, 0, h-2*r); + cairo_rel_curve_to(c, 0.0, c1, c1-r, r, -r, r); + cairo_rel_line_to (c, -w +2*r, 0); + cairo_rel_curve_to (c, -c1, 0, -r, -c1, -r, -r); + cairo_rel_line_to (c, 0, -h + 2 * r); + cairo_rel_curve_to (c, 0, -c1, r - c1, -r, r, -r); + } + else + cairo_rectangle(c, x, y, w, h); +} + + +void get_text_size(PangoFontDescription *font, int *height_ink, int *height, int panel_height, char *text, int len) +{ + PangoRectangle rect_ink, rect; + + Pixmap pmap = server_create_pixmap (panel_height, panel_height); + cairo_surface_t *cs = cairo_xlib_surface_create (server.dsp, pmap, server.visual, panel_height, panel_height); + cairo_t *c = cairo_create (cs); + + PangoLayout *layout = pango_cairo_create_layout (c); + pango_layout_set_font_description (layout, font); + pango_layout_set_text (layout, text, len); + + pango_layout_get_pixel_extents(layout, &rect_ink, &rect); + *height_ink = rect_ink.height; + *height = rect.height; + //printf("dimension : %d - %d\n", rect_ink.height, rect.height); + + g_object_unref (layout); + cairo_destroy (c); + cairo_surface_destroy (cs); + XFreePixmap (server.dsp, pmap); +} + + + diff --git a/src/util/window.h b/src/util/window.h new file mode 100644 index 0000000..fd596c0 --- /dev/null +++ b/src/util/window.h @@ -0,0 +1,46 @@ +/************************************************************************** +* window : +* - +* +* Check COPYING file for Copyright +* +**************************************************************************/ + +#ifndef WINDOW_H +#define WINDOW_H + +#include +#include +#include + + +typedef struct window_global +{ + Window main_win; +} window_global; + +window_global window; + +void set_active (Window win); +void set_desktop (int desktop); +void set_close (Window win); +int server_get_current_desktop (); +int server_get_number_of_desktop (); +int window_is_iconified (Window win); +int window_is_hidden (Window win); +int window_is_active (Window win); +int get_icon_count (long *data, int num); +long *get_best_icon (long *data, int icon_count, int num, int *iw, int *ih, int best_icon_size); +void window_toggle_shade (Window win); +int window_get_desktop (Window win); +void windows_set_desktop (Window win, int desktop); +int window_get_monitor (Window win); +Window window_get_active (); + +// draw rounded rectangle +void draw_rect(cairo_t *c, double x, double y, double w, double h, double r); + +void get_text_size(PangoFontDescription *font, int *height_ink, int *height, int panel_height, char *text, int len); + + +#endif diff --git a/tintrc03 b/tintrc03 new file mode 100644 index 0000000..914dfd1 --- /dev/null +++ b/tintrc03 @@ -0,0 +1,75 @@ +#--------------------------------------------- +# TINT CONFIG FILE +#--------------------------------------------- + +#--------------------------------------------- +# BACKGROUND AND BORDER +#--------------------------------------------- +rounded = 1 +border_width = 1 +background_color = #282828 100 +border_color = #000000 100 + +rounded = 1 +border_width = 1 +background_color = #282828 100 +#background_color = #3b3b3b 100 +border_color = #cccccc 100 + +#--------------------------------------------- +# PANEL +#--------------------------------------------- +panel_monitor = 1 +panel_position = bottom right +panel_size = 0 27 +panel_margin = 0 0 +panel_padding = 3 2 +font_shadow = 0 +panel_background_id = 1 + +#--------------------------------------------- +# TASKBAR +#--------------------------------------------- +taskbar_mode = multi_desktop +taskbar_padding = 4 0 +taskbar_background_id = 0 + +#--------------------------------------------- +# TASKS +#--------------------------------------------- +task_icon = 1 +task_text = 1 +task_width = 200 +task_centered = 1 +task_padding = 1 3 +task_font = sans 8 +task_font_color = #ffffff 40 +task_active_font_color = #ffffff 100 +task_background_id = 0 +task_active_background_id = 2 + +#--------------------------------------------- +# SYSTRAY +#--------------------------------------------- +#systray_padding = 9 3 +#systray_background_id = 0 + +#--------------------------------------------- +# CLOCK +#--------------------------------------------- +time1_format = %H:%M:%S +time1_font = sans 7 +time2_format = %A %d %B +time2_font = sans 7 +clock_font_color = #ffffff 100 +clock_padding = 0 0 +clock_background_id = 0 + +#--------------------------------------------- +# MOUSE ACTION ON TASK +#--------------------------------------------- +mouse_middle = none +mouse_right = close +mouse_scroll_up = toggle +mouse_scroll_down = iconify + diff --git a/tintrc04 b/tintrc04 new file mode 100644 index 0000000..fd930d4 --- /dev/null +++ b/tintrc04 @@ -0,0 +1,79 @@ +#--------------------------------------------- +# TINT CONFIG FILE +#--------------------------------------------- + +#--------------------------------------------- +# BACKGROUND AND BORDER +#--------------------------------------------- +rounded = 5 +border_width = 1 +background_color = #ffffff 40 +border_color = #ffffff 70 + +rounded = 4 +border_width = 0 +background_color = #ffffff 0 +border_color = #d1d1d1 0 + +rounded = 4 +border_width = 0 +background_color = #ffffff 30 +border_color = #d1d1d1 14 + +#--------------------------------------------- +# PANEL +#--------------------------------------------- +panel_monitor = 1 +panel_position = bottom center +panel_size = 1000 25 +panel_margin = 0 0 +panel_padding = 6 0 +font_shadow = 0 +panel_background_id = 1 + +#--------------------------------------------- +# TASKBAR +#--------------------------------------------- +taskbar_mode = multi_desktop +taskbar_padding = 2 3 +taskbar_background_id = 0 + +#--------------------------------------------- +# TASKS +#--------------------------------------------- +task_icon = 1 +task_text = 1 +task_width = 150 +task_centered = 1 +task_padding = 3 2 +task_font = myriad pro 8 +task_font_color = #000000 70 +task_active_font_color = #000000 100 +task_background_id = 2 +task_active_background_id = 3 + +#--------------------------------------------- +# SYSTRAY +#--------------------------------------------- +#systray_padding = 9 3 +#systray_background_id = 0 + +#--------------------------------------------- +# CLOCK +#--------------------------------------------- +time1_format = %H:%M +time1_font = sans bold 12 +#time2_format = %A %d %B +#time2_font = sans bold 10 +clock_font_color = #000000 70 +clock_padding = 6 0 +clock_background_id = 0 + +#--------------------------------------------- +# MOUSE ACTION ON TASK +#--------------------------------------------- +mouse_middle = none +mouse_right = close +mouse_scroll_up = toggle +mouse_scroll_down = iconify + diff --git a/tintrc05 b/tintrc05 new file mode 100644 index 0000000..5c7378b --- /dev/null +++ b/tintrc05 @@ -0,0 +1,74 @@ +#--------------------------------------------- +# TINT CONFIG FILE +#--------------------------------------------- + +#--------------------------------------------- +# BACKGROUND AND BORDER +#--------------------------------------------- +rounded = 3 +border_width = 1 +background_color = #3c3020 90 +border_color = #3c3020 90 + +rounded = 3 +border_width = 1 +background_color = #3c3020 90 +border_color = #ffffff 30 + +#--------------------------------------------- +# PANEL +#--------------------------------------------- +panel_monitor = 1 +panel_position = bottom center +panel_size = 900 30 +panel_margin = 0 0 +panel_padding = 10 2 +font_shadow = 0 +panel_background_id = 0 + +#--------------------------------------------- +# TASKBAR +#--------------------------------------------- +taskbar_mode = single_desktop +taskbar_padding = 9 0 +taskbar_background_id = 0 + +#--------------------------------------------- +# TASKS +#--------------------------------------------- +task_icon = 0 +task_text = 1 +task_width = 190 +task_centered = 1 +task_padding = 2 0 +task_font = sans 8.4 +task_font_color = #ececec 50 +task_active_font_color = #ffffff 90 +task_background_id = 1 +task_active_background_id = 2 + +#--------------------------------------------- +# SYSTRAY +#--------------------------------------------- +#systray_padding = 9 3 +#systray_background_id = 0 + +#--------------------------------------------- +# CLOCK +#--------------------------------------------- +time1_format = %H:%M +time1_font = sans bold 8 +time2_format = %A %d %B +time2_font = sans 7 +clock_font_color = #ececec 50 +clock_padding = 4 0 +clock_background_id = 1 + +#--------------------------------------------- +# MOUSE ACTION ON TASK +#--------------------------------------------- +mouse_middle = none +mouse_right = close +mouse_scroll_up = toggle +mouse_scroll_down = iconify + diff --git a/tintrc06 b/tintrc06 new file mode 100644 index 0000000..741bb8b --- /dev/null +++ b/tintrc06 @@ -0,0 +1,76 @@ +#--------------------------------------------- +# TINT CONFIG FILE +#--------------------------------------------- + +#--------------------------------------------- +# BACKGROUND AND BORDER +#--------------------------------------------- +rounded = 10 +border_width = 1 +background_color = #000000 45 +border_color = #ffffff 0 + +rounded = 7 +border_width = 1 +background_color = #ffffff 0 +border_color = #ffffff 70 + + +#--------------------------------------------- +# PANEL +#--------------------------------------------- +panel_monitor = 1 +panel_position = bottom left +panel_size = 1010 30 +panel_margin = 0 0 +panel_padding = 11 2 +font_shadow = 0 +panel_background_id = 0 + +#--------------------------------------------- +# TASKBAR +#--------------------------------------------- +taskbar_mode = multi_desktop +taskbar_padding = 3 3 +taskbar_background_id = 1 + +#--------------------------------------------- +# TASKS +#--------------------------------------------- +task_icon = 0 +task_text = 1 +task_width = 160 +task_centered = 1 +task_padding = 2 2 +task_font = sans bold 8 +task_font_color = #ffffff 60 +task_active_font_color = #ffffff 95 +task_background_id = 0 +task_active_background_id = 2 + +#--------------------------------------------- +# SYSTRAY +#--------------------------------------------- +#systray_padding = 9 3 +#systray_icon_opacity = 50 +#systray_background_id = 1 + +#--------------------------------------------- +# CLOCK +#--------------------------------------------- +time1_format = %A %d %H:%M +time1_font = sans bold 8 +#time2_format = %A %d %B +time2_font = sans 7 +clock_font_color = #ffffff 59 +clock_padding = 6 0 +clock_background_id = 1 + +#--------------------------------------------- +# MOUSE ACTION ON TASK +#--------------------------------------------- +mouse_middle = none +mouse_right = close +mouse_scroll_up = toggle +mouse_scroll_down = iconify + -- 2.45.2