webmagick-2.02.orig/0040755000175000017500000000000007417462334014167 5ustar arafunearafunewebmagick-2.02.orig/Makefile.in0100644000175000017500000002766507413200206016231 0ustar arafunearafune# Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. # # Top Makefile for WebMagick # # Copyright Bob Friesenhahn, 1999 # SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ sbindir = @sbindir@ libexecdir = @libexecdir@ datadir = @datadir@ sysconfdir = @sysconfdir@ sharedstatedir = @sharedstatedir@ localstatedir = @localstatedir@ libdir = @libdir@ infodir = @infodir@ mandir = @mandir@ includedir = @includedir@ oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = . ACLOCAL = @ACLOCAL@ AUTOCONF = @AUTOCONF@ AUTOMAKE = @AUTOMAKE@ AUTOHEADER = @AUTOHEADER@ INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = @INSTALL_DATA@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : DEFAULTFONT = @DEFAULTFONT@ HTIMAGE = @HTIMAGE@ ICONPATH = @ICONPATH@ MAKEINFO = @MAKEINFO@ MAPTYPE = @MAPTYPE@ PACKAGE = @PACKAGE@ PERL = @PERL@ PREFIXPATH = @PREFIXPATH@ RGBDB = @RGBDB@ ROOTPATH = @ROOTPATH@ VERSION = @VERSION@ XLSFONTS = @XLSFONTS@ AUTOMAKE_OPTIONS = 1.2 # Subdirectories under Automake control SUBDIRS = doc icons utils # Binary scripts bin_SCRIPTS = webmagick # Directory in which to install WebMagick icons & html files ICON_INSTALL_DIR = @ROOTPATH@/@ICONPATH@ ICON_INSTALL_FILES = webmagick.js ETC_INSTALL_DIR = ${exec_prefix}/etc # Additional files to distribute EXTRA_DIST = INSTALL.generic MANIFEST TODO webmagick.in webmagick.js webmagick.lsm webmagick.lsm.in webmagickrc.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_CLEAN_FILES = webmagick webmagickrc SCRIPTS = $(bin_SCRIPTS) DIST_COMMON = README AUTHORS COPYING ChangeLog INSTALL Makefile.am \ Makefile.in NEWS TODO aclocal.m4 configure configure.in install-sh \ missing mkinstalldirs webmagick.in webmagickrc.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) TAR = gtar GZIP_ENV = --best all: all-redirect .SUFFIXES: $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status cd $(top_builddir) \ && CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status $(ACLOCAL_M4): configure.in cd $(srcdir) && $(ACLOCAL) config.status: $(srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(srcdir)/configure: $(srcdir)/configure.in $(ACLOCAL_M4) $(CONFIGURE_DEPENDENCIES) cd $(srcdir) && $(AUTOCONF) webmagick: $(top_builddir)/config.status webmagick.in cd $(top_builddir) && CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status webmagickrc: $(top_builddir)/config.status webmagickrc.in cd $(top_builddir) && CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status install-binSCRIPTS: $(bin_SCRIPTS) @$(NORMAL_INSTALL) $(mkinstalldirs) $(DESTDIR)$(bindir) @list='$(bin_SCRIPTS)'; for p in $$list; do \ if test -f $$p; then \ echo " $(INSTALL_SCRIPT) $$p $(DESTDIR)$(bindir)/`echo $$p|sed '$(transform)'`"; \ $(INSTALL_SCRIPT) $$p $(DESTDIR)$(bindir)/`echo $$p|sed '$(transform)'`; \ else if test -f $(srcdir)/$$p; then \ echo " $(INSTALL_SCRIPT) $(srcdir)/$$p $(DESTDIR)$(bindir)/`echo $$p|sed '$(transform)'`"; \ $(INSTALL_SCRIPT) $(srcdir)/$$p $(DESTDIR)$(bindir)/`echo $$p|sed '$(transform)'`; \ else :; fi; fi; \ done uninstall-binSCRIPTS: @$(NORMAL_UNINSTALL) list='$(bin_SCRIPTS)'; for p in $$list; do \ rm -f $(DESTDIR)$(bindir)/`echo $$p|sed '$(transform)'`; \ done # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. @SET_MAKE@ all-recursive install-data-recursive install-exec-recursive \ installdirs-recursive install-recursive uninstall-recursive \ check-recursive installcheck-recursive info-recursive dvi-recursive: @set fnord $(MAKEFLAGS); amf=$$2; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" mostlyclean-recursive clean-recursive distclean-recursive \ maintainer-clean-recursive: @set fnord $(MAKEFLAGS); amf=$$2; \ dot_seen=no; \ rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \ rev="$$subdir $$rev"; \ test "$$subdir" = "." && dot_seen=yes; \ done; \ test "$$dot_seen" = "no" && rev=". $$rev"; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done tags: TAGS ID: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ here=`pwd` && cd $(srcdir) \ && mkid -f$$here/ID $$unique $(LISP) TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) tags=; \ here=`pwd`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) mostlyclean-tags: clean-tags: distclean-tags: -rm -f TAGS ID maintainer-clean-tags: distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist -rm -rf $(distdir) GZIP=$(GZIP_ENV) $(TAR) zxf $(distdir).tar.gz mkdir $(distdir)/=build mkdir $(distdir)/=inst dc_install_base=`cd $(distdir)/=inst && pwd`; \ cd $(distdir)/=build \ && ../configure --srcdir=.. --prefix=$$dc_install_base \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) dist -rm -rf $(distdir) @banner="$(distdir).tar.gz is ready for distribution"; \ dashes=`echo "$$banner" | sed s/./=/g`; \ echo "$$dashes"; \ echo "$$banner"; \ echo "$$dashes" dist: distdir -chmod -R a+r $(distdir) GZIP=$(GZIP_ENV) $(TAR) chozf $(distdir).tar.gz $(distdir) -rm -rf $(distdir) dist-all: distdir -chmod -R a+r $(distdir) GZIP=$(GZIP_ENV) $(TAR) chozf $(distdir).tar.gz $(distdir) -rm -rf $(distdir) distdir: $(DISTFILES) -rm -rf $(distdir) mkdir $(distdir) -chmod 777 $(distdir) @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done for subdir in $(SUBDIRS); do \ if test "$$subdir" = .; then :; else \ test -d $(distdir)/$$subdir \ || mkdir $(distdir)/$$subdir \ || exit 1; \ chmod 777 $(distdir)/$$subdir; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir=../$(distdir) distdir=../$(distdir)/$$subdir distdir) \ || exit 1; \ fi; \ done $(MAKE) $(AM_MAKEFLAGS) top_distdir="$(top_distdir)" distdir="$(distdir)" dist-hook info-am: info: info-recursive dvi-am: dvi: dvi-recursive check-am: all-am check: check-recursive installcheck-am: installcheck: installcheck-recursive install-exec-am: install-binSCRIPTS install-exec: install-exec-recursive install-data-am: install-data-local install-data: install-data-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-recursive uninstall-am: uninstall-binSCRIPTS uninstall: uninstall-recursive all-am: Makefile $(SCRIPTS) all-redirect: all-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: installdirs-recursive installdirs-am: $(mkinstalldirs) $(DESTDIR)$(bindir) mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-tags mostlyclean-generic mostlyclean: mostlyclean-recursive clean-am: clean-tags clean-generic mostlyclean-am clean: clean-recursive distclean-am: distclean-tags distclean-generic clean-am distclean: distclean-recursive -rm -f config.status maintainer-clean-am: maintainer-clean-tags maintainer-clean-generic \ distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-recursive -rm -f config.status .PHONY: uninstall-binSCRIPTS install-binSCRIPTS install-data-recursive \ uninstall-data-recursive install-exec-recursive \ uninstall-exec-recursive installdirs-recursive uninstalldirs-recursive \ all-recursive check-recursive installcheck-recursive info-recursive \ dvi-recursive mostlyclean-recursive distclean-recursive clean-recursive \ maintainer-clean-recursive tags tags-recursive mostlyclean-tags \ distclean-tags clean-tags maintainer-clean-tags distdir info-am info \ dvi-am dvi check check-am installcheck-am installcheck install-exec-am \ install-exec install-data-local install-data-am install-data install-am \ install uninstall-am uninstall all-redirect all-am all installdirs-am \ installdirs mostlyclean-generic distclean-generic clean-generic \ maintainer-clean-generic clean mostlyclean distclean maintainer-clean install-data-local: $(mkinstalldirs) $(ICON_INSTALL_DIR) for file in $(ICON_INSTALL_FILES) ; \ do \ $(INSTALL_SCRIPT) $$file $(ICON_INSTALL_DIR) ; \ done $(INSTALL_DATA) webmagickrc $(ETC_INSTALL_DIR)/webmagickrc # Generate webmagick.lsm from webmagick.lsm.in at dist time. webmagick.lsm : webmagick.lsm.in configure.in date=`date +"%Y-%m-%d" | tr '[a-z]' '[A-Z]'`; \ sed -e "s/%VERSION%/@VERSION@/g" < webmagick.lsm.in | \ sed -e "s/%DATE%/$$date/g" > webmagick.lsm dist-hook: webmagick.lsm # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: webmagick-2.02.orig/README0100644000175000017500000000343107306317441015040 0ustar arafunearafune$Id: README,v 1.8 2001/06/03 02:21:21 clindell Exp $ WebMagick provides a means of easily putting image collections on the Web. It recurses through directory trees, building HTML pages and imagemap (GIF or JPEG) files to allow the user to navigate through collections of thumbnail images (somewhat similar to 'xv') and select the images to view with a mouse click. WebMagick is highly configurable. Its goal is to provide lots of options while doing a nice job out of the box. Configuration may be done from the command line, or via .webmagickrc files which effect the overall installation, or images in a directory tree. WebMagick is optimized to use the features of modern Web browsers, however support is provided for older browsers as well. Read the INSTALL file to get started with installation of webmagick. Read the manual page or any form of documentation in the doc directory for the details on how to use webmagick. A key installation requirement is that you must first install the ImageMagick image manipulation toolset. If you are operating a site that my mother wouldn't approve of, please set the $opt_anonymous option to 1 or use the --anonymous option. This removes WebMagick copyright info from all generated pages. In particular, it removes my email address so I don't get email from confused users regarding stuff I would rather not hear about. :-) WebMagick is written by Bob Friesenhahn (bfriesen@simple.dallas.tx.us). I would be happy to hear about your trials and tribulations with webmagick. The current maintainer of WebMagick is Chris Lindell (clindell@users.sourceforge.net) and the new WebMagick homepage is http://webmagick.sourceforge.net. Anyone wishing to help with WebMagick development should also visit the project page at http://sourceforge.net/projects/webmagick/. webmagick-2.02.orig/AUTHORS0100644000175000017500000000023007306015573015223 0ustar arafunearafuneThe maintainer of WebMagick is Chris Lindell . WebMagick was written by Bob Friesenhahn . webmagick-2.02.orig/COPYING0100644000175000017500000004311007074150335015210 0ustar arafunearafune 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. webmagick-2.02.orig/ChangeLog0100644000175000017500000003471507413200003015723 0ustar arafunearafune2001-12-28 Chris Lindell 1) Release 2.02 2) Added documentation for all of Andrey's additions 2001-12-05 Andrey A. Chernov 1) evaluateRcFiles() called twice at the start which cause command line options overwrite, remove second instance 2) Add $currentDate assignment after evaluateRcFiles() in dodir() too, since $opt_msg_date_format can be changed there 3) print()/exit() are not safe to call from signal handlers (according to perlipc/perlfaq8), so replace them with syswrite() and POSIX:_exit(); move signal handlers assignment before evaluating Rc files in case signal happens while processing 4) For --noframes generate index.html, 2index.htmll .. NNindex.html as thumbnails pages now 2001-12-04 Chris Lindell 1) Release 2.02pre3 2) Use @sysconfdir@ from configure 3) Fixed possible bug in webmagick.in escapejs - some strings were not being closed correctly 2001-11-29 Andrey A. Chernov Style change, make pichtml page look&feel as thumbnails page: move picture title before navbar, move navbar close to the picture (it also saves vertical space) 2001-11-27 Andrey A. Chernov 1) Implement $opt_metacharset to specify HTML documents character set in case HTTPD can't provide it. 2) Add other META tags into pichtml code 3) Implement 'pichtmlputtitle' to control title appearance above picture (default on), implement 'pichtmltitlestart'/'pichtmltitleend' to control HTML tags before/after the picture title 2001-11-25 Andrey A. Chernov 1) Turn off Javascript by default (was on). Javscript code still working, but largely outdated, so better variant is not show it to first time user 2) Implement 'frames' option, useful in its --noframes form for single directory images collection. Currently it works for perl-generated pages only, not for Javascript-generated ones 3) Store more variables in 'pageStatus' to detect more cases when HTMLs needs to be regenerated 4) Conditionalize some code needed for Javascript only 5) Using server-side maps is not recommended by HTML 4.0 and IE hides status bar picture URL for them, so implement it now as an option 'serversidemap' (default off) 6) Better explain boolean options in the help, indicating Getopt::Long --no* feature; following this style, rename $opt_nodate I introduce in the past to $opt_date (default on) to avoid things like --nonodate; format every help option into single line since help2man not understand multi-line option description 7) Don't put $indexbar pages list inside , it can be really big 8) Remove
from $opt_tables code since not always desired; proper centering way is via $opt_header and $opt_footer 9) Assing
to default $opt_header/$opt_pichtmltop and
to default $opt_footer/$opt_pichtmlbottom since it is what needed in most cases 10) Put pichtmlnav code inside
, add missing TARGET=thumbview there 11) Move 'help' (ReadMe) icon from the thumbnails pages to the directory frame since it is common part of each page and not needed to be loaded repeatedly. 12) Add TARGET=_top to WebMagick project link; put only address inside
tags; don't print empty when date disabled and anonymous 13) Test string variables against '', not as integer !$var to not confuse with '0' value 14) Cosmetique, sort variables alphabetically in some cases; properly indent source code lines; put HTML parameters into quotes; don't put large amount of spaces into generated pages just due to perl source code indent reason. 2001-11-24 Andrey A. Chernov 1) Localize date and sorting 2) Add messages customization options block 3) Skip .shtml/.shtm/.sht too 4) Don't use hardcoded [\000-\177] range while reading rc variables, it miss upper half of code table, replace it with (.|\n) 5) For pichtml, while printing image name, do it in

...

, it aligned together with image otherwise. This is temp. solution until pichtml pic title options will be implemented. 6) Remove some \n from pichtml code to save vertical space 7) Mostly cosmetic, "HREF = " -> "HREF=", "TARGET = " -> "TARGET=" (some HTML analyzers dislike spaces here) 2001-08-20 Chris Lindell 1) Added $opt_pichtmlnav, which adds navigation links to per-image HTML files 2) Added image label to per-image HTML 3) Added CSS to per-image HTML 2001-08-15 Andrey A. Chernov 1) In some situations (like using $helphtml in .webmagickrc) escapeurl() not expanded but placed as is like HREF="escapeurl(README.html)" Fix it to make sure it always expanded. 2) Allow .png in IMG SRC, it supported by all major browsers nowdays. 2001-08-08 Chris Lindell 1) New PerlMagick (from ImageMagick 5.3.6) rename Get() attributes:base_rows -> base-rows base_columns -> base-columns 2) New PerlMagick does strange things for colorspace 'YUV', colors 256 options for writting GIF montages - whole picture fade in background. Better way is just remove this options - they are not neccessary for writing GIFs, all handled automatically. 3) 'Prev' arrow for very first page is not useful if README is not present since it just reload the same frameset. I convert it to 'Up' arrow in that particular case. 4) blue_c.gif now correctly included in distribution 5) compatible with Win32 ActiveState Perl 2001-07-13 Chris Lindell 1) added $opt_allowconfig for user configuration 2) fixed js bug with framestyle 4 2001-06-28 Chris Lindell 1) Can now handle rc and status files over 100k 2) Get real size of symlinks 3) Handle new ImageMagick Ping return value 4) Smaller .index.js files for faster downloads 5) Fixed table bug when image isn't thumbnailed 6) Fixed a problem finding relative paths to icons when we are outside of the document root. 2001-06-03 Chris Lindell 1) added --tables option for using HTML tables instead of montages. Much faster processing and navigation. 2) added version check for status file so we can redo thumbs and html for new options 3) Solve incompatibilities with NS6 2001-05-28 Chris Lindell 1) disabled new lockfile idea because if fails to gt removed if the program has an error 2) corrected the installation of webmagickrc 3) Using fig2dev to create the documentation jpgs because my installation of gs wants to create them using big pages 4) rpm now requires Magick.so (PerlMagick) 2001-05-09 Chris Lindell 1) More special character handling for directory and file names (' ', ''', '#", etc). 2) Fix bug with "background=undefined" in JavaScript if no background image is set 3) Display image name in status bar when mouse is over image map 4) Implement and document stylesheet option 5) Implement lockfile to keep 2 processes from competing 2000-01-17 Andrey A. Chernov * webmagick.in: Fixes list. 1) Add nodate option to supress "Page updated ..." line in generated htmls. Can save lot of processing time since with this option htmls not regenerated just because date changed. 2) Add iconbase option to specify absolute icons path. It helps when final gallery subdirectories location is different than original one, so relative path can't be used. 3) Fix bug with " >" (space-separated gt) appearse in generated htmls. 4) Fix bug with missing closing
tags. 1999-11-21 Bob Friesenhahn * webmagick.in: Incorporated patches from Andrey A. Chernov 1) Add dirhtmlext option to specify directory extension other than .html 2) Add jpegquality option (jpegquality) to specify it for JPEG imagemaps. Can greately reduce map size. 3) finddepth->find change. Some directories can be missed otherwise. It very depends of enabled/disabled directories order while walking in the tree. 4) Don't even attempt to write to non-writeable directory. 5) Add missing forcejpeg and new options to usage help. 1999-10-17 Bob Friesenhahn * webmagick.in: Updated primary FTP site and Web site URLs. 1998-12-19 Bob Friesenhahn * webmagick.in: Incorporated patches from Andrey A. Chernov to perfom the following: 1) Add possibility to force jpeg thumbnails instead of gif ones 2) Add possibility to add index pages footer (not header only) 3) Move /etc/webmagickrc to @prefix@/etc/webmagickrc 4) Add possibility to specify index pages extention (i.e. .shtml instead of .html, needed for SSI) 5) Write progressive JPEGs for jpeg thumbnails 6) Add possibility to write per-picture HTML pages instead of linking images directly; optional top/bottom code, target and non-default extention tuned too. Per-picture SSI-ed HTMLs used mainly for banner advertisment and helps a lot to keep site free for users. 7) Don't write *.js files when JavaScript turned off 1998-03-23 Bob Friesenhahn * webmagick.js: framesLoaded() was sometimes being executed before it was defined by the frameset onLoad handler. This is a race condition that should never happend but did on fast machines and Netscape 4. * webmagick.in (doMontage): ImageMagick changed the way it sets the montage text label color. The new syntax is Set(pen=>$opt_thumbforeground). The old way (foreground) has been left in place to support older ImageMagick's. (dodir): Added support for .sgi which seems to be an extension used for SGI-format OpenGL texture files. 1998-01-11 Bob Friesenhahn * webmagick.in: Fixed nasty bug which caused opt_skip to not work. This bug could cause damage to user files. 1997-12-15 Bob Friesenhahn * webmagick.in (handleMagickError): Now supports three levels of errors: process fatal, image fatal, warning only. The subroutine return code may be used to distinguish between the last two. 1997-11-25 Bob Friesenhahn * webmagick.in (doMontage): Compute imagemap information directly rather than retrieving it from an external *_map.shtml file. One less file type to deal with and possibly faster. Sat Nov 1 10:12:23 1997 Bob Friesenhahn * webmagick.in (abs_path_to_rel): Eliminated $opt_abolute and $opt_relative options. WebMagick now tryies to make all URLs relative. If a URL can not be made relative then it will be represented as an absolute URL. (dodir): Now uses the order of directories and images specified by .dirindex and .imgindex (respectively) to control the sort order of the displayed directories and images. Directories and files not occuring in the index are sorted in alphabetic order. Tue Oct 14 00:17:32 1997 Bob Friesenhahn * webmagick.in (doMontage): Fixed bug that caused label to always be supplied if listing occured in the .imgindex file regardless of whether $opt_thumblabel was set to 'false' or not. Sun Oct 12 18:16:07 1997 Bob Friesenhahn * webmagick.in (compareHash): Added programmed handling of Image::Magick related errors by routing all error status through handleMagickError() rather than warn(). Sun Oct 5 15:31:13 1997 Bob Friesenhahn * webmagick.in (dodir): Writes run information to ".index.pl". Also saves same information in ".index.js" in JavaScript form. A new JavaScript interface has been added which uses the .index.js file as input. These changes should be considered substantial since much of the WebMagick core code had to be re-written. Tue Sep 9 00:37:24 1997 Bob Friesenhahn * webmagick.in (html_imgsize): Uses new PerlMagick "Ping" method to determine image sizes if available. The Ping method is much faster since it does not read the entire image. Wed Aug 27 23:48:36 1997 Bob Friesenhahn * webmagick.in: Now uses a single ".index.stat" file rather than a file per page to save run information. Now also passes "use strict 'vars'". Mon Aug 25 08:30:01 1997 Bob Friesenhahn * webmagick.in: Removed PERL4 style '&' prefix from subroutine invokations in favor of "new" C style". Now uses (and passes) -w flag plus "use strict 'refs'" and "use strict 'subs'". Removed some bugs in the process. Sun Aug 3 14:07:11 1997 Bob Friesenhahn * webmagick.in (dodir): Status represented by $stat_havereadme and $stat_numpages has now been moved into $stat_htmlparams in the .index*.stat output. Fri Jul 25 19:07:09 1997 Bob Friesenhahn * webmagick.in (writeindexes): If $icon_url{'ball'} is undefined, then no ball icon is displayed beside directory items. This is now the default since more space is left available for the directory name or title and it looks at least as good. Wed Jul 16 08:02:13 1997 Bob Friesenhahn * Makefile.in: Removed typo from AWK code ($ prefix on variables) so that generating webmagickrc.in works on other than the original AWK. Thu Jul 3 13:54:39 1997 Bob Friesenhahn * Added size hint information which is used by the JPEG library (and possibly some other formats) to return an image close to the desired size rather than the full size image. This results in a considerable speed-up when creating thumbnail images for JPEGs. * Added $opt_readfailhook to support executing code if reading an image fails. A typical action would be to unlink the image (presuming the image is corrupted). * webmagick.in (dodir): Re-named $opt_thumbbordercolor to $opt_thumbframebgcolor and $opt_thumbmattecolor to $opt_thumbframecolor to better reflect what these options do. Added backward compatability code so the old options continue to work. * Created ChangeLog file. Let's keep track of edits from now on. webmagick-2.02.orig/INSTALL0100644000175000017500000001513507306313122015205 0ustar arafunearafune$Id: INSTALL,v 1.22 2001/06/03 01:43:46 clindell Exp $ Note: This package comes with formal documentation. Peruse this INSTALL file first to do the basic install and then read or print out the documentation in the 'doc' subdirectory. WebMagick requires the ImageMagick (at least version 3.8.4) and PerlMagick (at least version 1.12) packages as well as a recent version of PERL 5. You will likely find that certain versions of PerlMagick are required for certain versions of ImageMagick. I don't know of a useful way to find this out. The easiest solution is to grab both packages off the distribution site at the same time. As of ImageMagick 4.0.0, PerlMagick is included with ImageMagick so incompatability should no longer be an issue. Obtain PERL version 5 from the Perl Language Home Page at "http://www.perl.com/perl/index.html". Install PERL according to its installation instructions. Obtain ImageMagick (which includes PerlMagick) from "http://www.imagemagick.org/". Install ImageMagick according to the instructions in its README file. Consider using the 'configure' configuration method with the --enable-lzw flag to enable LZW compression for GIF files (otherwise GIF files will be huge!). Before using this flag however, review your relationship with Unisys (which holds the patent on LZW compression). PerlMagick may be installed automatically with ImageMagick through use of the --enable-perl option to ImageMagick's 'configure' or manually via 'make install' in ImageMagick's PerlMagick subdirectory. I personally configure ImageMagick/PerlMagick via the command: "./configure --enable-lzw --enable-perl --disable-static" which enables LZW compression, enables automatic build/install of PerlMagick at 'make install' time, and skips building static libraries (to decrease compile time). Read about PerlMagick at the PerlMagick web page at "http://www.imagemagick.org/www/perl.html". Execute WebMagick's configure script specifying a --prefix option for a GNU-style directory heriarchy you would like to install in (e.g. "./configure --prefix=/opt/tools"). This will generate a base copy of WebMagick that has been edited to reflect the location of your PERL interpreter and the X11 RGB database. The configure script will ask you questions to provide definitions of $opt_prefixpath, $opt_rootpath, $opt_iconpath, $opt_htimage, and $opt_maptype in the 'webmagick' script and the sample webmagickrc file. Read the manual page to learn the details. A few examples are provided below. The script also provides examples of what the options should look like. Then "make install". This will install WebMagick, sample icons, the WebMagick JavaScript interface, and TexInfo documentation. The WebMagick icons must be installed in a directory somewhere under the same server "root" as the images you want to catalogue. This root does not neccessarily have to be the actual server root. The "root" may be established via a server path mapping (rather than symlink) that offsets onto another filesystem. In order for JavaScript mode to operate correctly, the file 'webmagick.js' must be installed in the location specified by $opt_iconpath and the server must be updated to associate MIME type "application/x-javascript" with the extension ".js". This file contains the various JavaScript routines that define WebMagick's JavaScript interface. See the formal documentation for more on JavaScript. Protect My Reputation! ====================== If you are operating a site that my mother wouldn't approve of, please set the $opt_anonymous option to 1 or use the --anonymous option. This removes WebMagick copyright info from all generated pages. In particular, it removes my email address so I don't get email from confused users regarding material I would rather not hear about. :-) Path Configuration ================== The following .webmagickrc file path variables will configure WebMagick for a Web server root of "/html" and WebMagick icon path "/html/Images/WebMagick". $opt_prefixpath = ''; # Path or URL to prepend to root URL # Not used if local relative paths used $opt_rootpath = '/html'; # Directory Path to top of html tree # Needed to determine relative paths to images $opt_iconpath = 'Images/WebMagick'; # Relative path under rootpath / prefixpath Or, if your images and icons are under your personal HTML directory (e.g. http://www.bogus.com/~bfriesen/) which is physically "/home/bfriesen/public_html" and the WebMagick icons are in "/home/bfriesen/public_html/icons/WebMagick", you can use the configuration: $opt_prefixpath = '~bfriesen'; $opt_rootpath = '/home/bfriesen/public_html'; $opt_iconpath = 'icons/WebMagick'; Server Side Imagemaps ===================== If you are using a recent NCSA or Apache server that supports server-side imagemaps using relative URLs, then you can use values similar to the following: # Server-side imagemap settings $opt_htimage=''; # Base URL to server-side imagemap CGI # On some systems this is /cgi-bin/imagemap # Set to '' to use a ".map" URL with # relative URLs (latest NCSA & Apache) $opt_maptype='ncsa'; # Maptype must be "cern" or "ncsa". If # you are using Apache, specify "ncsa". In order for server-side imagemaps (used by older browsers) to work properly, some configuration may be required. Options should be set similar to the following (CERN configuration shown): # Server-side imagemap settings $opt_htimage='/cgi-bin/htimage'; # Base URL to server-side imagemap CGI # On some systems this is /cgi-bin/imagemap # Set to '' to use a ".map" URL with # relative URLs (latest NCSA & Apache) $opt_maptype='cern'; # Maptype must be "cern" or "ncsa". If # you are using Apache, specify "ncsa". NOTES AND WARNINGS ================== Please be careful than when running WebMagick you are in the correct directory. If you are in the wrong directory (such as in the server's root), you can do serious damage because WebMagick will overwrite all your HTML index files. To ensure that WebMagick never generates HTML index files in a particular directory you can create a ".webmagickrc" file in that directory with the line: $opt_ignore = 1; # ignore this directory (though link it in) If no sub-directories are to be have WebMagick applied (if run with the option ``-recurse'') you can also add the line: $opt_prune = 1; # prune all sub-directories for recursive runs If you encounter any difficulties, have suggestions, or accolades, feel free to send WebMagick's author (Bob Friesenhahn, bfriesen@simple.dallas.tx.us) or current maintainer (Chris Lindell, clindell@users.sourceforge.net) an email. webmagick-2.02.orig/Makefile.am0100644000175000017500000000201507306015745016213 0ustar arafunearafune# # Top Makefile for WebMagick # # Copyright Bob Friesenhahn, 1999 # AUTOMAKE_OPTIONS = 1.2 # Subdirectories under Automake control SUBDIRS = doc icons utils # Binary scripts bin_SCRIPTS = webmagick # Directory in which to install WebMagick icons & html files ICON_INSTALL_DIR = @ROOTPATH@/@ICONPATH@ ICON_INSTALL_FILES = webmagick.js ETC_INSTALL_DIR = ${exec_prefix}/etc install-data-local: $(mkinstalldirs) $(ICON_INSTALL_DIR) for file in $(ICON_INSTALL_FILES) ; \ do \ $(INSTALL_SCRIPT) $$file $(ICON_INSTALL_DIR) ; \ done $(INSTALL_DATA) webmagickrc $(ETC_INSTALL_DIR)/webmagickrc # Additional files to distribute EXTRA_DIST = INSTALL.generic MANIFEST TODO webmagick.in \ webmagick.js webmagick.lsm webmagick.lsm.in webmagickrc.in # Generate webmagick.lsm from webmagick.lsm.in at dist time. webmagick.lsm : webmagick.lsm.in configure.in date=`date +"%Y-%m-%d" | tr '[a-z]' '[A-Z]'`; \ sed -e "s/%VERSION%/@VERSION@/g" < webmagick.lsm.in | \ sed -e "s/%DATE%/$$date/g" > webmagick.lsm dist-hook: webmagick.lsm webmagick-2.02.orig/NEWS0100644000175000017500000000035007306271244014654 0ustar arafunearafuneThis file records noteworthy changes. (1.57) * Now maintained by Chris Lindell at http://webmagick.sourceforge.net (1.46) * Makefiles are now based on Automake. * Updated ftp and web addresses to reflect current locations. webmagick-2.02.orig/TODO0100644000175000017500000000552407036366725014666 0ustar arafunearafune$Id: TODO,v 1.32 2000/01/10 14:33:57 bfriesen Exp $ Tasks on WebMagick's todo list ============================== NOTE: My inspiration for actively developing WebMagick has decreased significantly in the past year. My efforts will likely be constrained to bug-fixes. However, if you would like to develop some of these enhancements, I am interested in incorporating them in WebMagick. If you provide code to support a new feature, please provide documentation updates as well. Short Term: o Support using the image's comment to label the image thumbnail and page. o Check for a user-specified index file name (and use it) in the parent directory. Currently uses the hard-coded name "index.html". o Add the ability to set the pointsize of the label font. o Update the .imgindex format so that seperate thumbnail and HTML text image titles are supported. Long titles work well with HTML but have difficulties when applied to thumbnails. o Support gzipped image files (probably only works with Unix browsers). o Add info about all the cache files to the status file o Always generate cache files for images greater than the cache size o Make xv compatability an option that creates another set of thumbnails in the .xvpics directory so that web-compatable thumbnails are always available. o Add support for displaying a table grid of thumbnails rather than a montage o Provide support under JavaScript for selecting different framing/layouts. o Don't change directories (framesets) if there are no subdirectories in the target directory. This can support more efficient directory navigation for cases where there are a number of branch-end subdirectories. o Add a table mode which skips the montage and displays reduced thumbnails in an HTML table instead. o Provide for selecting the desired PERL interpreter via a configure option. o Support command line options to the configure script to avoid interactive configuration. o Support capability to read label text from image comment (if available). Since most current comments are garbage, this would be yet another option. Long Term: o Use a template to describe the HTML in the imagemap frame. o Use tables to emulate frames for browsers that support tables but not frames. Wish List: o Provide summary statistics for an entire run, not just individual directories when in verbose mode. Difficult since WebMagick forks per directory and final statistics are printed by the parent. o Support indexing images which are located in a different directory tree from where WebMagick places its index files. This is to support CD-ROMs and other read-only situations. o Support quasi-image files which contain the URLs of images to include in the index. This allows images to be located remotely and accessed via HTTP. webmagick-2.02.orig/aclocal.m40100644000175000017500000000672307413177421016030 0ustar arafunearafunednl aclocal.m4 generated automatically by aclocal 1.4 dnl Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl This program is distributed in the hope that it will be useful, dnl but WITHOUT ANY WARRANTY, to the extent permitted by law; without dnl even the implied warranty of MERCHANTABILITY or FITNESS FOR A dnl PARTICULAR PURPOSE. # Do all the work for Automake. This macro actually does too much -- # some checks are only needed if your package does certain things. # But this isn't really a big deal. # serial 1 dnl Usage: dnl AM_INIT_AUTOMAKE(package,version, [no-define]) AC_DEFUN(AM_INIT_AUTOMAKE, [AC_REQUIRE([AC_PROG_INSTALL]) PACKAGE=[$1] AC_SUBST(PACKAGE) VERSION=[$2] AC_SUBST(VERSION) dnl test to see if srcdir already configured if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi ifelse([$3],, AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])) AC_REQUIRE([AM_SANITY_CHECK]) AC_REQUIRE([AC_ARG_PROGRAM]) dnl FIXME This is truly gross. missing_dir=`cd $ac_aux_dir && pwd` AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir) AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir) AM_MISSING_PROG(AUTOMAKE, automake, $missing_dir) AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir) AM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir) AC_REQUIRE([AC_PROG_MAKE_SET])]) # # Check to make sure that the build environment is sane. # AC_DEFUN(AM_SANITY_CHECK, [AC_MSG_CHECKING([whether build environment is sane]) # Just in case sleep 1 echo timestamp > conftestfile # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt $srcdir/configure conftestfile 2> /dev/null` if test "[$]*" = "X"; then # -L didn't work. set X `ls -t $srcdir/configure conftestfile` fi if test "[$]*" != "X $srcdir/configure conftestfile" \ && test "[$]*" != "X conftestfile $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi test "[$]2" = conftestfile ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi rm -f conftest* AC_MSG_RESULT(yes)]) dnl AM_MISSING_PROG(NAME, PROGRAM, DIRECTORY) dnl The program must properly implement --version. AC_DEFUN(AM_MISSING_PROG, [AC_MSG_CHECKING(for working $2) # Run test in a subshell; some versions of sh will print an error if # an executable is not found, even if stderr is redirected. # Redirect stdin to placate older versions of autoconf. Sigh. if ($2 --version) < /dev/null > /dev/null 2>&1; then $1=$2 AC_MSG_RESULT(found) else $1="$3/missing $2" AC_MSG_RESULT(missing) fi AC_SUBST($1)]) webmagick-2.02.orig/configure0100755000175000017500000014150107413177426016076 0ustar arafunearafune#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated automatically using autoconf version 2.13 # Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc. # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. # Defaults: ac_help= ac_default_prefix=/usr/local # Any additions from configure.in: # Initialize some variables set by options. # The variables have the same names as the options, with # dashes changed to underlines. build=NONE cache_file=./config.cache exec_prefix=NONE host=NONE no_create= nonopt=NONE no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= target=NONE verbose= x_includes=NONE x_libraries=NONE bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datadir='${prefix}/share' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' libdir='${exec_prefix}/lib' includedir='${prefix}/include' oldincludedir='/usr/include' infodir='${prefix}/info' mandir='${prefix}/man' # Initialize some other variables. subdirs= MFLAGS= MAKEFLAGS= SHELL=${CONFIG_SHELL-/bin/sh} # Maximum number of lines to put in a shell here document. ac_max_here_lines=12 ac_prev= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval "$ac_prev=\$ac_option" ac_prev= continue fi case "$ac_option" in -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;; *) ac_optarg= ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case "$ac_option" in -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir="$ac_optarg" ;; -build | --build | --buil | --bui | --bu) ac_prev=build ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build="$ac_optarg" ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file="$ac_optarg" ;; -datadir | --datadir | --datadi | --datad | --data | --dat | --da) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ | --da=*) datadir="$ac_optarg" ;; -disable-* | --disable-*) ac_feature=`echo $ac_option|sed -e 's/-*disable-//'` # Reject names that are not valid shell variable names. if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } fi ac_feature=`echo $ac_feature| sed 's/-/_/g'` eval "enable_${ac_feature}=no" ;; -enable-* | --enable-*) ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'` # Reject names that are not valid shell variable names. if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } fi ac_feature=`echo $ac_feature| sed 's/-/_/g'` case "$ac_option" in *=*) ;; *) ac_optarg=yes ;; esac eval "enable_${ac_feature}='$ac_optarg'" ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix="$ac_optarg" ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he) # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat << EOF Usage: configure [options] [host] Options: [defaults in brackets after descriptions] Configuration: --cache-file=FILE cache test results in FILE --help print this message --no-create do not create output files --quiet, --silent do not print \`checking...' messages --version print the version of autoconf that created configure Directory and file names: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [same as prefix] --bindir=DIR user executables in DIR [EPREFIX/bin] --sbindir=DIR system admin executables in DIR [EPREFIX/sbin] --libexecdir=DIR program executables in DIR [EPREFIX/libexec] --datadir=DIR read-only architecture-independent data in DIR [PREFIX/share] --sysconfdir=DIR read-only single-machine data in DIR [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data in DIR [PREFIX/com] --localstatedir=DIR modifiable single-machine data in DIR [PREFIX/var] --libdir=DIR object code libraries in DIR [EPREFIX/lib] --includedir=DIR C header files in DIR [PREFIX/include] --oldincludedir=DIR C header files for non-gcc in DIR [/usr/include] --infodir=DIR info documentation in DIR [PREFIX/info] --mandir=DIR man documentation in DIR [PREFIX/man] --srcdir=DIR find the sources in DIR [configure dir or ..] --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names EOF cat << EOF Host type: --build=BUILD configure for building on BUILD [BUILD=HOST] --host=HOST configure for HOST [guessed] --target=TARGET configure for TARGET [TARGET=HOST] Features and packages: --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --x-includes=DIR X include files are in DIR --x-libraries=DIR X library files are in DIR EOF if test -n "$ac_help"; then echo "--enable and --with options recognized:$ac_help" fi exit 0 ;; -host | --host | --hos | --ho) ac_prev=host ;; -host=* | --host=* | --hos=* | --ho=*) host="$ac_optarg" ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir="$ac_optarg" ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir="$ac_optarg" ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir="$ac_optarg" ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir="$ac_optarg" ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst \ | --locals | --local | --loca | --loc | --lo) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* \ | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) localstatedir="$ac_optarg" ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir="$ac_optarg" ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir="$ac_optarg" ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix="$ac_optarg" ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix="$ac_optarg" ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix="$ac_optarg" ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name="$ac_optarg" ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir="$ac_optarg" ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir="$ac_optarg" ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site="$ac_optarg" ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir="$ac_optarg" ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir="$ac_optarg" ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target="$ac_optarg" ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers) echo "configure generated by autoconf version 2.13" exit 0 ;; -with-* | --with-*) ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'` # Reject names that are not valid shell variable names. if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } fi ac_package=`echo $ac_package| sed 's/-/_/g'` case "$ac_option" in *=*) ;; *) ac_optarg=yes ;; esac eval "with_${ac_package}='$ac_optarg'" ;; -without-* | --without-*) ac_package=`echo $ac_option|sed -e 's/-*without-//'` # Reject names that are not valid shell variable names. if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } fi ac_package=`echo $ac_package| sed 's/-/_/g'` eval "with_${ac_package}=no" ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes="$ac_optarg" ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries="$ac_optarg" ;; -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; } ;; *) if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then echo "configure: warning: $ac_option: invalid host type" 1>&2 fi if test "x$nonopt" != xNONE; then { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; } fi nonopt="$ac_option" ;; esac done if test -n "$ac_prev"; then { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; } fi trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 # File descriptor usage: # 0 standard input # 1 file creation # 2 errors and warnings # 3 some systems may open it to /dev/tty # 4 used on the Kubota Titan # 6 checking for... messages and results # 5 compiler messages saved in config.log if test "$silent" = yes; then exec 6>/dev/null else exec 6>&1 fi exec 5>./config.log echo "\ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. " 1>&5 # Strip out --no-create and --no-recursion so they do not pile up. # Also quote any args containing shell metacharacters. ac_configure_args= for ac_arg do case "$ac_arg" in -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c) ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;; *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*) ac_configure_args="$ac_configure_args '$ac_arg'" ;; *) ac_configure_args="$ac_configure_args $ac_arg" ;; esac done # NLS nuisances. # Only set these to C if already set. These must not be set unconditionally # because not all systems understand e.g. LANG=C (notably SCO). # Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'! # Non-C LC_CTYPE values break the ctype check. if test "${LANG+set}" = set; then LANG=C; export LANG; fi if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi if test "${LC_CTYPE+set}" = set; then LC_CTYPE=C; export LC_CTYPE; fi # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -rf conftest* confdefs.h # AIX cpp loses on an empty file, so make sure it contains at least a newline. echo > confdefs.h # A filename unique to this package, relative to the directory that # configure is in, which we can look for to find out if srcdir is correct. ac_unique_file=webmagick.in # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then its parent. ac_prog=$0 ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'` test "x$ac_confdir" = "x$ac_prog" && ac_confdir=. srcdir=$ac_confdir if test ! -r $srcdir/$ac_unique_file; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r $srcdir/$ac_unique_file; then if test "$ac_srcdir_defaulted" = yes; then { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; } else { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; } fi fi srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'` # Prefer explicitly selected file to automatically selected ones. if test -z "$CONFIG_SITE"; then if test "x$prefix" != xNONE; then CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" else CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi fi for ac_site_file in $CONFIG_SITE; do if test -r "$ac_site_file"; then echo "loading site script $ac_site_file" . "$ac_site_file" fi done if test -r "$cache_file"; then echo "loading cache $cache_file" . $cache_file else echo "creating cache $cache_file" > $cache_file fi ac_ext=c # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. ac_cpp='$CPP $CPPFLAGS' ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' cross_compiling=$ac_cv_prog_cc_cross ac_exeext= ac_objext=o if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu. if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then ac_n= ac_c=' ' ac_t=' ' else ac_n=-n ac_c= ac_t= fi else ac_n= ac_c='\c' ac_t= fi ac_aux_dir= for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do if test -f $ac_dir/install-sh; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f $ac_dir/install.sh; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break fi done if test -z "$ac_aux_dir"; then { echo "configure: error: can not find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." 1>&2; exit 1; } fi ac_config_guess=$ac_aux_dir/config.guess ac_config_sub=$ac_aux_dir/config.sub ac_configure=$ac_aux_dir/configure # This should be Cygnus configure. # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # ./install, which can be erroneously created by make from ./install.sh. echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 echo "configure:556: checking for a BSD compatible install" >&5 if test -z "$INSTALL"; then if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS=":" for ac_dir in $PATH; do # Account for people who put trailing slashes in PATH elements. case "$ac_dir/" in /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do if test -f $ac_dir/$ac_prog; then if test $ac_prog = install && grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : else ac_cv_path_install="$ac_dir/$ac_prog -c" break 2 fi fi done ;; esac done IFS="$ac_save_IFS" fi if test "${ac_cv_path_install+set}" = set; then INSTALL="$ac_cv_path_install" else # As a last resort, use the slow shell script. We don't cache a # path for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the path is relative. INSTALL="$ac_install_sh" fi fi echo "$ac_t""$INSTALL" 1>&6 # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' echo $ac_n "checking whether build environment is sane""... $ac_c" 1>&6 echo "configure:609: checking whether build environment is sane" >&5 # Just in case sleep 1 echo timestamp > conftestfile # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt $srcdir/configure conftestfile 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t $srcdir/configure conftestfile` fi if test "$*" != "X $srcdir/configure conftestfile" \ && test "$*" != "X conftestfile $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". { echo "configure: error: ls -t appears to fail. Make sure there is not a broken alias in your environment" 1>&2; exit 1; } fi test "$2" = conftestfile ) then # Ok. : else { echo "configure: error: newly created file is older than distributed files! Check your system clock" 1>&2; exit 1; } fi rm -f conftest* echo "$ac_t""yes" 1>&6 if test "$program_transform_name" = s,x,x,; then program_transform_name= else # Double any \ or $. echo might interpret backslashes. cat <<\EOF_SED > conftestsed s,\\,\\\\,g; s,\$,$$,g EOF_SED program_transform_name="`echo $program_transform_name|sed -f conftestsed`" rm -f conftestsed fi test "$program_prefix" != NONE && program_transform_name="s,^,${program_prefix},; $program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s,\$\$,${program_suffix},; $program_transform_name" # sed with no file args requires a program. test "$program_transform_name" = "" && program_transform_name="s,x,x," echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6 echo "configure:666: checking whether ${MAKE-make} sets \${MAKE}" >&5 set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftestmake <<\EOF all: @echo 'ac_maketemp="${MAKE}"' EOF # GNU make sometimes prints "make[1]: Entering...", which would confuse us. eval `${MAKE-make} -f conftestmake 2>/dev/null | grep temp=` if test -n "$ac_maketemp"; then eval ac_cv_prog_make_${ac_make}_set=yes else eval ac_cv_prog_make_${ac_make}_set=no fi rm -f conftestmake fi if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then echo "$ac_t""yes" 1>&6 SET_MAKE= else echo "$ac_t""no" 1>&6 SET_MAKE="MAKE=${MAKE-make}" fi PACKAGE=WebMagick VERSION=2.02 if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then { echo "configure: error: source directory already configured; run "make distclean" there first" 1>&2; exit 1; } fi missing_dir=`cd $ac_aux_dir && pwd` echo $ac_n "checking for working aclocal""... $ac_c" 1>&6 echo "configure:705: checking for working aclocal" >&5 # Run test in a subshell; some versions of sh will print an error if # an executable is not found, even if stderr is redirected. # Redirect stdin to placate older versions of autoconf. Sigh. if (aclocal --version) < /dev/null > /dev/null 2>&1; then ACLOCAL=aclocal echo "$ac_t""found" 1>&6 else ACLOCAL="$missing_dir/missing aclocal" echo "$ac_t""missing" 1>&6 fi echo $ac_n "checking for working autoconf""... $ac_c" 1>&6 echo "configure:718: checking for working autoconf" >&5 # Run test in a subshell; some versions of sh will print an error if # an executable is not found, even if stderr is redirected. # Redirect stdin to placate older versions of autoconf. Sigh. if (autoconf --version) < /dev/null > /dev/null 2>&1; then AUTOCONF=autoconf echo "$ac_t""found" 1>&6 else AUTOCONF="$missing_dir/missing autoconf" echo "$ac_t""missing" 1>&6 fi echo $ac_n "checking for working automake""... $ac_c" 1>&6 echo "configure:731: checking for working automake" >&5 # Run test in a subshell; some versions of sh will print an error if # an executable is not found, even if stderr is redirected. # Redirect stdin to placate older versions of autoconf. Sigh. if (automake --version) < /dev/null > /dev/null 2>&1; then AUTOMAKE=automake echo "$ac_t""found" 1>&6 else AUTOMAKE="$missing_dir/missing automake" echo "$ac_t""missing" 1>&6 fi echo $ac_n "checking for working autoheader""... $ac_c" 1>&6 echo "configure:744: checking for working autoheader" >&5 # Run test in a subshell; some versions of sh will print an error if # an executable is not found, even if stderr is redirected. # Redirect stdin to placate older versions of autoconf. Sigh. if (autoheader --version) < /dev/null > /dev/null 2>&1; then AUTOHEADER=autoheader echo "$ac_t""found" 1>&6 else AUTOHEADER="$missing_dir/missing autoheader" echo "$ac_t""missing" 1>&6 fi echo $ac_n "checking for working makeinfo""... $ac_c" 1>&6 echo "configure:757: checking for working makeinfo" >&5 # Run test in a subshell; some versions of sh will print an error if # an executable is not found, even if stderr is redirected. # Redirect stdin to placate older versions of autoconf. Sigh. if (makeinfo --version) < /dev/null > /dev/null 2>&1; then MAKEINFO=makeinfo echo "$ac_t""found" 1>&6 else MAKEINFO="$missing_dir/missing makeinfo" echo "$ac_t""missing" 1>&6 fi # Ensure that make can run correctly echo $ac_n "checking whether build environment is sane""... $ac_c" 1>&6 echo "configure:773: checking whether build environment is sane" >&5 # Just in case sleep 1 echo timestamp > conftestfile # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt $srcdir/configure conftestfile 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t $srcdir/configure conftestfile` fi if test "$*" != "X $srcdir/configure conftestfile" \ && test "$*" != "X conftestfile $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". { echo "configure: error: ls -t appears to fail. Make sure there is not a broken alias in your environment" 1>&2; exit 1; } fi test "$2" = conftestfile ) then # Ok. : else { echo "configure: error: newly created file is older than distributed files! Check your system clock" 1>&2; exit 1; } fi rm -f conftest* echo "$ac_t""yes" 1>&6 # Checks for programs. # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # ./install, which can be erroneously created by make from ./install.sh. echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 echo "configure:824: checking for a BSD compatible install" >&5 if test -z "$INSTALL"; then if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS=":" for ac_dir in $PATH; do # Account for people who put trailing slashes in PATH elements. case "$ac_dir/" in /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do if test -f $ac_dir/$ac_prog; then if test $ac_prog = install && grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : else ac_cv_path_install="$ac_dir/$ac_prog -c" break 2 fi fi done ;; esac done IFS="$ac_save_IFS" fi if test "${ac_cv_path_install+set}" = set; then INSTALL="$ac_cv_path_install" else # As a last resort, use the slow shell script. We don't cache a # path for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the path is relative. INSTALL="$ac_install_sh" fi fi echo "$ac_t""$INSTALL" 1>&6 # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' # Extract the first word of "perl", so it can be a program name with args. set dummy perl; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:879: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_PERL'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else case "$PERL" in /*) ac_cv_path_PERL="$PERL" # Let the user override the test with a path. ;; ?:/*) ac_cv_path_PERL="$PERL" # Let the user override the test with a dos path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_dummy="$PATH" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then ac_cv_path_PERL="$ac_dir/$ac_word" break fi done IFS="$ac_save_ifs" test -z "$ac_cv_path_PERL" && ac_cv_path_PERL="/usr/local/bin/perl " ;; esac fi PERL="$ac_cv_path_PERL" if test -n "$PERL"; then echo "$ac_t""$PERL" 1>&6 else echo "$ac_t""no" 1>&6 fi # # Find the X11 RGB database # if test "$with_x" != 'no' then echo $ac_n "checking for RGB database""... $ac_c" 1>&6 echo "configure:919: checking for RGB database" >&5 if eval "test \"`echo '$''{'webmagick_cv_x_rgbdb'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else # Look for the header file in a standard set of common directories. # Check X11 before X11Rn because it is often a symlink to the current # release. for ac_dir in \ /lib/usr/lib/X11 \ /usr/X11/lib \ /usr/X11R4/lib \ /usr/X11R5/lib \ /usr/X11R6/lib \ /usr/X386/lib \ /usr/XFree86/lib/X11 \ /usr/athena/lib \ /usr/lib \ /usr/lib/X11 \ /usr/lib/X11R4 \ /usr/lib/X11R5 \ /usr/lib/X11R6 \ /usr/local/X11/lib \ /usr/local/X11R4/lib \ /usr/local/X11R5/lib \ /usr/local/X11R6/lib \ /usr/local/lib \ /usr/local/lib/X11 \ /usr/local/lib/X11R4 \ /usr/local/lib/X11R5 \ /usr/local/lib/X11R6 \ /usr/local/x11r5/lib \ /usr/lpp/Xamples/lib \ /usr/openwin/lib \ /usr/openwin/share/lib \ /usr/unsupported/lib \ /usr/x386/lib \ ; \ do if test -f "$ac_dir/X11/rgb.txt" then webmagick_cv_x_rgbdb="$ac_dir/X11/rgb.txt" break elif test -f "$ac_dir/rgb.txt" then webmagick_cv_x_rgbdb="$ac_dir/rgb.txt" break fi done fi echo "$ac_t""$webmagick_cv_x_rgbdb" 1>&6 else webmagick_cv_x_rgbdb='/dev/null' fi RGBDB=$webmagick_cv_x_rgbdb # # Check for available fonts # if test "$with_x" != 'no' then # Extract the first word of "xlsfonts", so it can be a program name with args. set dummy xlsfonts; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:986: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_XLSFONTS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else case "$XLSFONTS" in /*) ac_cv_path_XLSFONTS="$XLSFONTS" # Let the user override the test with a path. ;; ?:/*) ac_cv_path_XLSFONTS="$XLSFONTS" # Let the user override the test with a dos path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_dummy="$PATH" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then ac_cv_path_XLSFONTS="$ac_dir/$ac_word" break fi done IFS="$ac_save_ifs" test -z "$ac_cv_path_XLSFONTS" && ac_cv_path_XLSFONTS="xlsfonts " ;; esac fi XLSFONTS="$ac_cv_path_XLSFONTS" if test -n "$XLSFONTS"; then echo "$ac_t""$XLSFONTS" 1>&6 else echo "$ac_t""no" 1>&6 fi if test "${XLSFONTS}X" != "X" then echo $ac_n "checking for default font""... $ac_c" 1>&6 echo "configure:1022: checking for default font" >&5 if eval "test \"`echo '$''{'webmagick_cv_defaultfont'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else font1='' font2='' font3='' font4='' font5='fixed' tmpfile="/tmp/configure$$" $XLSFONTS > $tmpfile exec < $tmpfile while read font do case "$font" in -*-lucida-medium-r-*-*-12-*-*-*-*-*-*-* ) font1='-*-lucida-medium-r-*-*-12-*-*-*-*-*-*-*' ;; -*-helvetica-medium-r-*-*-12-*-*-*-*-*-*-* ) font2='-*-helvetica-medium-r-*-*-12-*-*-*-*-*-*-*' ;; -*-helvetica-medium-r-*-*-11-*-*-*-*-*-*-* ) font3='-*-helvetica-medium-r-*-*-11-*-*-*-*-*-*-*' ;; -*-courier-medium-r-normal--12-*-*-*-*-*-*-* ) font4='-*-courier-medium-r-normal--12-*-*-*-*-*-*-*' ;; -*-times-medium-r-normal--12-*-*-*-*-*-*-* ) font5='-*-times-medium-r-normal--12-*-*-*-*-*-*-*' ;; esac done exec < /dev/tty rm $tmpfile fi if test -n "$font1" then webmagick_cv_defaultfont=$font1 elif test -n "$font2" then webmagick_cv_defaultfont=$font2 elif test -n "$font3" then webmagick_cv_defaultfont=$font3 elif test -n "$font4" then webmagick_cv_defaultfont=$font4 elif test -n "$font5" then webmagick_cv_defaultfont=$font5 else webmagick_cv_defaultfont='fixed' fi fi echo "$ac_t""$webmagick_cv_defaultfont" 1>&6 else webmagick_cv_defaultfont='courier'; fi DEFAULTFONT=$webmagick_cv_defaultfont # # Check for server root path # echo $ac_n "checking for server root path""... $ac_c" 1>&6 echo "configure:1095: checking for server root path" >&5 if eval "test \"`echo '$''{'webmagick_cv_rootpath'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else echo ' In order to map paths into URLs, WebMagick must know the path to your servers HTML files. For example, if your servers address is "http://yourdomain/" and this URL resolves to "/usr/local/share/htdocs" on the system, then the appropriate answer is "/usr/local/share/htdocs". What is the path to your servers root? ' read webmagick_cv_rootpath fi if test -d "$webmagick_cv_rootpath" then echo "$ac_t""$webmagick_cv_rootpath" 1>&6 else echo "$ac_t""$webmagick_cv_rootpath" 1>&6 echo "configure: warning: directory $webmagick_cv_rootpath does not exist!" 1>&2 fi ROOTPATH=$webmagick_cv_rootpath # # Check for WebMagick icon path # echo $ac_n "checking for WebMagick icon path""... $ac_c" 1>&6 echo "configure:1126: checking for WebMagick icon path" >&5 if eval "test \"`echo '$''{'webmagick_cv_iconpath'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else echo ' In order to find its navigation icons, WebMagick must know the remaining path (in addition to the servers root path) to the WebMagick icons. This should not contain any preceding or trailing "/". For example, if the server root path is "/usr/local/share/htdocs" and the icons are located in "/usr/local/share/htdocs/Images/webmagick" the appropriate answer would be "Images/webmagick". What is the remaining path to the WebMagick icons? ' read webmagick_cv_iconpath echo '' fi if test -d "$webmagick_cv_rootpath/$webmagick_cv_iconpath" then echo "$ac_t""$webmagick_cv_rootpath/$webmagick_cv_iconpath" 1>&6 else echo "$ac_t""$webmagick_cv_rootpath/$webmagick_cv_iconpath" 1>&6 echo "configure: warning: directory $webmagick_cv_rootpath/$webmagick_cv_iconpath does not exist!" 1>&2 fi ICONPATH=$webmagick_cv_iconpath # # Check for URL prefix # echo $ac_n "checking for URL prefix""... $ac_c" 1>&6 echo "configure:1160: checking for URL prefix" >&5 if eval "test \"`echo '$''{'webmagick_cv_prefixpath'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else echo ' Sometimes the URL to the top of the HTML files is an offset past the servers root. This is common for personal home directories which are addressed as "http://yourdomain/~username" in which case the appropriate answer would be "~username". What prefix URL is required (if any)? ' read webmagick_cv_prefixpath fi if test -z "$webmagick_cv_prefixpath" then echo "$ac_t""none" 1>&6 else echo "$ac_t""$webmagick_cv_prefixpath" 1>&6 fi PREFIXPATH=$webmagick_cv_prefixpath # # Check for imagemap program path # echo $ac_n "checking for imagemap program""... $ac_c" 1>&6 echo "configure:1190: checking for imagemap program" >&5 if eval "test \"`echo '$''{'webmagick_cv_htimage'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else echo ' This question concerns how your server handles server-side imagemap processing. Recent servers provide built in support for imagemaps. These include recent versions of NCSA, Apache, phttpd, and others. Older servers may require an external CGI program to handle imagemaps. CERN servers often name this program "htimage". NCSA names this program "imagemap". WebMagick requires the relative URL to this program if your server requires it. Typical answers will be "/cgi-bin/htimage" or "/cgi-bin/imagemap". If your server does not require an external program, just hit RETURN. What is the URL to the program you use to handle imagemaps (if any)?' read webmagick_cv_htimage echo '' fi if test -z "$webmagick_cv_htimage" then echo "$ac_t""none" 1>&6 else echo "$ac_t""$webmagick_cv_htimage" 1>&6 fi HTIMAGE=$webmagick_cv_htimage # # Check for server-side imagemap format # echo $ac_n "checking for server-side imagemap format""... $ac_c" 1>&6 echo "configure:1226: checking for server-side imagemap format" >&5 if eval "test \"`echo '$''{'webmagick_cv_maptype'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else echo ' There are two formats for imagemap files in common use, CERN and NCSA. NCSA & Apache use the NCSA format. CERN uses the CERN format. Phttpd can handle either format. Appropriate answers to this question are "cern" or "ncsa". What format ("cern" or "ncsa") does your server use for imagemaps?' read webmagick_cv_maptype webmagick_cv_maptype=`echo $webmagick_cv_maptype | tr 'A-Z' 'a-z'` fi echo "$ac_t""$webmagick_cv_maptype" 1>&6 MAPTYPE=$webmagick_cv_maptype trap '' 1 2 15 cat > confcache <<\EOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs. It is not useful on other systems. # If it contains results you don't want to keep, you may remove or edit it. # # By default, configure uses ./config.cache as the cache file, # creating it if it does not exist already. You can give configure # the --cache-file=FILE option to use a different cache file; that is # what configure does when it calls configure scripts in # subdirectories, so they share the cache. # Giving --cache-file=/dev/null disables caching, for debugging configure. # config.status only pays attention to the cache file if you give it the # --recheck option to rerun configure. # EOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, don't put newlines in cache variables' values. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. (set) 2>&1 | case `(ac_space=' '; set | grep ac_space) 2>&1` in *ac_space=\ *) # `set' does not quote correctly, so add quotes (double-quote substitution # turns \\\\ into \\, and sed turns \\ into \). sed -n \ -e "s/'/'\\\\''/g" \ -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p" ;; *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p' ;; esac >> confcache if cmp -s $cache_file confcache; then : else if test -w $cache_file; then echo "updating cache $cache_file" cat confcache > $cache_file else echo "not updating unwritable cache $cache_file" fi fi rm -f confcache trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' # Any assignment to VPATH causes Sun make to only execute # the first set of double-colon rules, so remove it if not needed. # If there is a colon in the path, we need to keep it. if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[^:]*$/d' fi trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15 # Transform confdefs.h into DEFS. # Protect against shell expansion while executing Makefile rules. # Protect against Makefile macro expansion. cat > conftest.defs <<\EOF s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%-D\1=\2%g s%[ `~#$^&*(){}\\|;'"<>?]%\\&%g s%\[%\\&%g s%\]%\\&%g s%\$%$$%g EOF DEFS=`sed -f conftest.defs confdefs.h | tr '\012' ' '` rm -f conftest.defs # Without the "./", some shells look in PATH for config.status. : ${CONFIG_STATUS=./config.status} echo creating $CONFIG_STATUS rm -f $CONFIG_STATUS cat > $CONFIG_STATUS </dev/null | sed 1q`: # # $0 $ac_configure_args # # Compiler output produced by configure, useful for debugging # configure, is in ./config.log if it exists. ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]" for ac_option do case "\$ac_option" in -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion" exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;; -version | --version | --versio | --versi | --vers | --ver | --ve | --v) echo "$CONFIG_STATUS generated by autoconf version 2.13" exit 0 ;; -help | --help | --hel | --he | --h) echo "\$ac_cs_usage"; exit 0 ;; *) echo "\$ac_cs_usage"; exit 1 ;; esac done ac_given_srcdir=$srcdir ac_given_INSTALL="$INSTALL" trap 'rm -fr `echo "Makefile doc/Makefile doc/fig/Makefile icons/Makefile utils/Makefile \ webmagick webmagickrc " | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15 EOF cat >> $CONFIG_STATUS < conftest.subs <<\\CEOF $ac_vpsub $extrasub s%@SHELL@%$SHELL%g s%@CFLAGS@%$CFLAGS%g s%@CPPFLAGS@%$CPPFLAGS%g s%@CXXFLAGS@%$CXXFLAGS%g s%@FFLAGS@%$FFLAGS%g s%@DEFS@%$DEFS%g s%@LDFLAGS@%$LDFLAGS%g s%@LIBS@%$LIBS%g s%@exec_prefix@%$exec_prefix%g s%@prefix@%$prefix%g s%@program_transform_name@%$program_transform_name%g s%@bindir@%$bindir%g s%@sbindir@%$sbindir%g s%@libexecdir@%$libexecdir%g s%@datadir@%$datadir%g s%@sysconfdir@%$sysconfdir%g s%@sharedstatedir@%$sharedstatedir%g s%@localstatedir@%$localstatedir%g s%@libdir@%$libdir%g s%@includedir@%$includedir%g s%@oldincludedir@%$oldincludedir%g s%@infodir@%$infodir%g s%@mandir@%$mandir%g s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g s%@INSTALL_SCRIPT@%$INSTALL_SCRIPT%g s%@INSTALL_DATA@%$INSTALL_DATA%g s%@PACKAGE@%$PACKAGE%g s%@VERSION@%$VERSION%g s%@ACLOCAL@%$ACLOCAL%g s%@AUTOCONF@%$AUTOCONF%g s%@AUTOMAKE@%$AUTOMAKE%g s%@AUTOHEADER@%$AUTOHEADER%g s%@MAKEINFO@%$MAKEINFO%g s%@SET_MAKE@%$SET_MAKE%g s%@PERL@%$PERL%g s%@RGBDB@%$RGBDB%g s%@XLSFONTS@%$XLSFONTS%g s%@DEFAULTFONT@%$DEFAULTFONT%g s%@ROOTPATH@%$ROOTPATH%g s%@ICONPATH@%$ICONPATH%g s%@PREFIXPATH@%$PREFIXPATH%g s%@HTIMAGE@%$HTIMAGE%g s%@MAPTYPE@%$MAPTYPE%g CEOF EOF cat >> $CONFIG_STATUS <<\EOF # Split the substitutions into bite-sized pieces for seds with # small command number limits, like on Digital OSF/1 and HP-UX. ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script. ac_file=1 # Number of current file. ac_beg=1 # First line for current file. ac_end=$ac_max_sed_cmds # Line after last line for current file. ac_more_lines=: ac_sed_cmds="" while $ac_more_lines; do if test $ac_beg -gt 1; then sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file else sed "${ac_end}q" conftest.subs > conftest.s$ac_file fi if test ! -s conftest.s$ac_file; then ac_more_lines=false rm -f conftest.s$ac_file else if test -z "$ac_sed_cmds"; then ac_sed_cmds="sed -f conftest.s$ac_file" else ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file" fi ac_file=`expr $ac_file + 1` ac_beg=$ac_end ac_end=`expr $ac_end + $ac_max_sed_cmds` fi done if test -z "$ac_sed_cmds"; then ac_sed_cmds=cat fi EOF cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". case "$ac_file" in *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'` ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; *) ac_file_in="${ac_file}.in" ;; esac # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories. # Remove last slash and all that follows it. Not all systems have dirname. ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'` if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then # The file is in a subdirectory. test ! -d "$ac_dir" && mkdir "$ac_dir" ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`" # A "../" for each directory in $ac_dir_suffix. ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'` else ac_dir_suffix= ac_dots= fi case "$ac_given_srcdir" in .) srcdir=. if test -z "$ac_dots"; then top_srcdir=. else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;; /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;; *) # Relative path. srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix" top_srcdir="$ac_dots$ac_given_srcdir" ;; esac case "$ac_given_INSTALL" in [/$]*) INSTALL="$ac_given_INSTALL" ;; *) INSTALL="$ac_dots$ac_given_INSTALL" ;; esac echo creating "$ac_file" rm -f "$ac_file" configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure." case "$ac_file" in *Makefile*) ac_comsub="1i\\ # $configure_input" ;; *) ac_comsub= ;; esac ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"` sed -e "$ac_comsub s%@configure_input@%$configure_input%g s%@srcdir@%$srcdir%g s%@top_srcdir@%$top_srcdir%g s%@INSTALL@%$INSTALL%g " $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file fi; done rm -f conftest.s* EOF cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF exit 0 EOF chmod +x $CONFIG_STATUS rm -fr confdefs* $ac_clean_files test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1 chmod 555 webmagick webmagick-2.02.orig/configure.in0100644000175000017500000001627307413177354016507 0ustar arafunearafune#!/bin/sh # # Configure Script for WebMagick # Copyright Bob Friesenhahn, 1997,1999 # # $Id: configure.in,v 1.24 2001/08/21 17:48:56 clindell Exp $ # dnl Process this file with autoconf to produce a configure script. AC_INIT(webmagick.in) AM_INIT_AUTOMAKE(WebMagick,2.02, ' ') # Ensure that make can run correctly AM_SANITY_CHECK # Checks for programs. AC_PROG_INSTALL AC_PATH_PROG(PERL, perl, /usr/local/bin/perl ) # # Find the X11 RGB database # if test "$with_x" != 'no' then AC_CACHE_CHECK(for RGB database,webmagick_cv_x_rgbdb, [# Look for the header file in a standard set of common directories. # Check X11 before X11Rn because it is often a symlink to the current # release. for ac_dir in \ /lib/usr/lib/X11 \ /usr/X11/lib \ /usr/X11R4/lib \ /usr/X11R5/lib \ /usr/X11R6/lib \ /usr/X386/lib \ /usr/XFree86/lib/X11 \ /usr/athena/lib \ /usr/lib \ /usr/lib/X11 \ /usr/lib/X11R4 \ /usr/lib/X11R5 \ /usr/lib/X11R6 \ /usr/local/X11/lib \ /usr/local/X11R4/lib \ /usr/local/X11R5/lib \ /usr/local/X11R6/lib \ /usr/local/lib \ /usr/local/lib/X11 \ /usr/local/lib/X11R4 \ /usr/local/lib/X11R5 \ /usr/local/lib/X11R6 \ /usr/local/x11r5/lib \ /usr/lpp/Xamples/lib \ /usr/openwin/lib \ /usr/openwin/share/lib \ /usr/unsupported/lib \ /usr/x386/lib \ ; \ do if test -f "$ac_dir/X11/rgb.txt" then webmagick_cv_x_rgbdb="$ac_dir/X11/rgb.txt" break elif test -f "$ac_dir/rgb.txt" then webmagick_cv_x_rgbdb="$ac_dir/rgb.txt" break fi done]) else webmagick_cv_x_rgbdb='/dev/null' fi RGBDB=$webmagick_cv_x_rgbdb AC_SUBST(RGBDB) # # Check for available fonts # if test "$with_x" != 'no' then AC_PATH_PROG(XLSFONTS, xlsfonts, xlsfonts ) if test "${XLSFONTS}X" != "X" then AC_CACHE_CHECK(for default font, webmagick_cv_defaultfont, [ font1='' font2='' font3='' font4='' font5='fixed' tmpfile="/tmp/configure$$" $XLSFONTS > $tmpfile exec < $tmpfile while read font do case "$font" in -*-lucida-medium-r-*-*-12-*-*-*-*-*-*-* ) font1='-*-lucida-medium-r-*-*-12-*-*-*-*-*-*-*' ;; -*-helvetica-medium-r-*-*-12-*-*-*-*-*-*-* ) font2='-*-helvetica-medium-r-*-*-12-*-*-*-*-*-*-*' ;; -*-helvetica-medium-r-*-*-11-*-*-*-*-*-*-* ) font3='-*-helvetica-medium-r-*-*-11-*-*-*-*-*-*-*' ;; -*-courier-medium-r-normal--12-*-*-*-*-*-*-* ) font4='-*-courier-medium-r-normal--12-*-*-*-*-*-*-*' ;; -*-times-medium-r-normal--12-*-*-*-*-*-*-* ) font5='-*-times-medium-r-normal--12-*-*-*-*-*-*-*' ;; esac done exec < /dev/tty rm $tmpfile fi if test -n "$font1" then webmagick_cv_defaultfont=$font1 elif test -n "$font2" then webmagick_cv_defaultfont=$font2 elif test -n "$font3" then webmagick_cv_defaultfont=$font3 elif test -n "$font4" then webmagick_cv_defaultfont=$font4 elif test -n "$font5" then webmagick_cv_defaultfont=$font5 else webmagick_cv_defaultfont='fixed' fi ]) else webmagick_cv_defaultfont='courier'; fi DEFAULTFONT=$webmagick_cv_defaultfont AC_SUBST(DEFAULTFONT) # # Check for server root path # AC_MSG_CHECKING(for server root path) AC_CACHE_VAL(webmagick_cv_rootpath, [ echo ' In order to map paths into URLs, WebMagick must know the path to your servers HTML files. For example, if your servers address is "http://yourdomain/" and this URL resolves to "/usr/local/share/htdocs" on the system, then the appropriate answer is "/usr/local/share/htdocs". What is the path to your servers root? ' read webmagick_cv_rootpath ]) if test -d "$webmagick_cv_rootpath" then AC_MSG_RESULT($webmagick_cv_rootpath) else AC_MSG_RESULT($webmagick_cv_rootpath) AC_MSG_WARN(directory $webmagick_cv_rootpath does not exist!) fi ROOTPATH=$webmagick_cv_rootpath AC_SUBST(ROOTPATH) # # Check for WebMagick icon path # AC_MSG_CHECKING(for WebMagick icon path) AC_CACHE_VAL(webmagick_cv_iconpath, [ echo ' In order to find its navigation icons, WebMagick must know the remaining path (in addition to the servers root path) to the WebMagick icons. This should not contain any preceding or trailing "/". For example, if the server root path is "/usr/local/share/htdocs" and the icons are located in "/usr/local/share/htdocs/Images/webmagick" the appropriate answer would be "Images/webmagick". What is the remaining path to the WebMagick icons? ' read webmagick_cv_iconpath echo '' ]) if test -d "$webmagick_cv_rootpath/$webmagick_cv_iconpath" then AC_MSG_RESULT($webmagick_cv_rootpath/$webmagick_cv_iconpath) else AC_MSG_RESULT($webmagick_cv_rootpath/$webmagick_cv_iconpath) AC_MSG_WARN(directory $webmagick_cv_rootpath/$webmagick_cv_iconpath does not exist!) fi ICONPATH=$webmagick_cv_iconpath AC_SUBST(ICONPATH) # # Check for URL prefix # AC_MSG_CHECKING(for URL prefix) AC_CACHE_VAL(webmagick_cv_prefixpath, [ echo ' Sometimes the URL to the top of the HTML files is an offset past the servers root. This is common for personal home directories which are addressed as "http://yourdomain/~username" in which case the appropriate answer would be "~username". What prefix URL is required (if any)? ' read webmagick_cv_prefixpath ]) if test -z "$webmagick_cv_prefixpath" then AC_MSG_RESULT(none) else AC_MSG_RESULT($webmagick_cv_prefixpath) fi PREFIXPATH=$webmagick_cv_prefixpath AC_SUBST(PREFIXPATH) # # Check for imagemap program path # AC_MSG_CHECKING(for imagemap program) AC_CACHE_VAL(webmagick_cv_htimage, [ echo ' This question concerns how your server handles server-side imagemap processing. Recent servers provide built in support for imagemaps. These include recent versions of NCSA, Apache, phttpd, and others. Older servers may require an external CGI program to handle imagemaps. CERN servers often name this program "htimage". NCSA names this program "imagemap". WebMagick requires the relative URL to this program if your server requires it. Typical answers will be "/cgi-bin/htimage" or "/cgi-bin/imagemap". If your server does not require an external program, just hit RETURN. What is the URL to the program you use to handle imagemaps (if any)?' read webmagick_cv_htimage echo '' ]) if test -z "$webmagick_cv_htimage" then AC_MSG_RESULT(none) else AC_MSG_RESULT($webmagick_cv_htimage) fi HTIMAGE=$webmagick_cv_htimage AC_SUBST(HTIMAGE) # # Check for server-side imagemap format # AC_MSG_CHECKING(for server-side imagemap format) AC_CACHE_VAL(webmagick_cv_maptype, [ echo ' There are two formats for imagemap files in common use, CERN and NCSA. NCSA & Apache use the NCSA format. CERN uses the CERN format. Phttpd can handle either format. Appropriate answers to this question are "cern" or "ncsa". What format ("cern" or "ncsa") does your server use for imagemaps?' read webmagick_cv_maptype dnl Lower case string webmagick_cv_maptype=`echo $webmagick_cv_maptype | tr '[A-Z]' '[a-z]'` ]) AC_MSG_RESULT($webmagick_cv_maptype) MAPTYPE=$webmagick_cv_maptype AC_SUBST(MAPTYPE) AC_OUTPUT(Makefile doc/Makefile doc/fig/Makefile icons/Makefile utils/Makefile \ webmagick webmagickrc ) chmod 555 webmagick webmagick-2.02.orig/install-sh0100755000175000017500000001124406260603313016157 0ustar arafunearafune#! /bin/sh # # install - install a program, script, or datafile # This comes from X11R5. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. # # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit="${DOITPROG-}" # put in absolute paths if you don't have them in your path; or use env. vars. mvprog="${MVPROG-mv}" cpprog="${CPPROG-cp}" chmodprog="${CHMODPROG-chmod}" chownprog="${CHOWNPROG-chown}" chgrpprog="${CHGRPPROG-chgrp}" stripprog="${STRIPPROG-strip}" rmprog="${RMPROG-rm}" mkdirprog="${MKDIRPROG-mkdir}" tranformbasename="" transform_arg="" instcmd="$mvprog" chmodcmd="$chmodprog 0755" chowncmd="" chgrpcmd="" stripcmd="" rmcmd="$rmprog -f" mvcmd="$mvprog" src="" dst="" dir_arg="" while [ x"$1" != x ]; do case $1 in -c) instcmd="$cpprog" shift continue;; -d) dir_arg=true shift continue;; -m) chmodcmd="$chmodprog $2" shift shift continue;; -o) chowncmd="$chownprog $2" shift shift continue;; -g) chgrpcmd="$chgrpprog $2" shift shift continue;; -s) stripcmd="$stripprog" shift continue;; -t=*) transformarg=`echo $1 | sed 's/-t=//'` shift continue;; -b=*) transformbasename=`echo $1 | sed 's/-b=//'` shift continue;; *) if [ x"$src" = x ] then src=$1 else # this colon is to work around a 386BSD /bin/sh bug : dst=$1 fi shift continue;; esac done if [ x"$src" = x ] then echo "install: no input file specified" exit 1 else true fi if [ x"$dir_arg" != x ]; then dst=$src src="" if [ -d $dst ]; then instcmd=: else instcmd=mkdir fi else # Waiting for this to be detected by the "$instcmd $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if [ -f $src -o -d $src ] then true else echo "install: $src does not exist" exit 1 fi if [ x"$dst" = x ] then echo "install: no destination specified" exit 1 else true fi # If destination is a directory, append the input filename; if your system # does not like double slashes in filenames, you may need to add some logic if [ -d $dst ] then dst="$dst"/`basename $src` else true fi fi ## this sed command emulates the dirname command dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` # Make sure that the destination directory exists. # this part is taken from Noah Friedman's mkinstalldirs script # Skip lots of stat calls in the usual case. if [ ! -d "$dstdir" ]; then defaultIFS=' ' IFS="${IFS-${defaultIFS}}" oIFS="${IFS}" # Some sh's can't handle IFS=/ for some reason. IFS='%' set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'` IFS="${oIFS}" pathcomp='' while [ $# -ne 0 ] ; do pathcomp="${pathcomp}${1}" shift if [ ! -d "${pathcomp}" ] ; then $mkdirprog "${pathcomp}" else true fi pathcomp="${pathcomp}/" done fi if [ x"$dir_arg" != x ] then $doit $instcmd $dst && if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi && if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi && if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi && if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi else # If we're going to rename the final executable, determine the name now. if [ x"$transformarg" = x ] then dstfile=`basename $dst` else dstfile=`basename $dst $transformbasename | sed $transformarg`$transformbasename fi # don't allow the sed command to completely eliminate the filename if [ x"$dstfile" = x ] then dstfile=`basename $dst` else true fi # Make a temp file name in the proper directory. dsttmp=$dstdir/#inst.$$# # Move or copy the file name to the temp name $doit $instcmd $src $dsttmp && trap "rm -f ${dsttmp}" 0 && # and set any options; do chmod last to preserve setuid bits # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $instcmd $src $dsttmp" command. if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi && if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi && if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi && if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi && # Now rename the file to the real destination. $doit $rmcmd -f $dstdir/$dstfile && $doit $mvcmd $dsttmp $dstdir/$dstfile fi && exit 0 webmagick-2.02.orig/missing0100755000175000017500000001421307306271260015555 0ustar arafunearafune#! /bin/sh # Common stub for a few missing GNU programs while installing. # Copyright (C) 1996, 1997 Free Software Foundation, Inc. # Franc,ois Pinard , 1996. # 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, or (at your option) # any later version. # This program is distributed in the hope that 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. if test $# -eq 0; then echo 1>&2 "Try \`$0 --help' for more information" exit 1 fi case "$1" in -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an error status if there is no known handling for PROGRAM. Options: -h, --help display this help and exit -v, --version output version information and exit Supported PROGRAM values: aclocal touch file \`aclocal.m4' autoconf touch file \`configure' autoheader touch file \`config.h.in' automake touch all \`Makefile.in' files bison create \`y.tab.[ch]', if possible, from existing .[ch] flex create \`lex.yy.c', if possible, from existing .c lex create \`lex.yy.c', if possible, from existing .c makeinfo touch the output file yacc create \`y.tab.[ch]', if possible, from existing .[ch]" ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing - GNU libit 0.0" ;; -*) echo 1>&2 "$0: Unknown \`$1' option" echo 1>&2 "Try \`$0 --help' for more information" exit 1 ;; aclocal) echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified \`acinclude.m4' or \`configure.in'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." touch aclocal.m4 ;; autoconf) echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified \`configure.in'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." touch configure ;; autoheader) echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified \`acconfig.h' or \`configure.in'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' configure.in` test -z "$files" && files="config.h" touch_files= for f in $files; do case "$f" in *:*) touch_files="$touch_files "`echo "$f" | sed -e 's/^[^:]*://' -e 's/:.*//'`;; *) touch_files="$touch_files $f.in";; esac done touch $touch_files ;; automake) echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified \`Makefile.am', \`acinclude.m4' or \`configure.in'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." find . -type f -name Makefile.am -print | sed 's/\.am$/.in/' | while read f; do touch "$f"; done ;; bison|yacc) echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified a \`.y' file. You may need the \`Bison' package in order for those modifications to take effect. You can get \`Bison' from any GNU archive site." rm -f y.tab.c y.tab.h if [ $# -ne 1 ]; then eval LASTARG="\${$#}" case "$LASTARG" in *.y) SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" y.tab.c fi SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" y.tab.h fi ;; esac fi if [ ! -f y.tab.h ]; then echo >y.tab.h fi if [ ! -f y.tab.c ]; then echo 'main() { return 0; }' >y.tab.c fi ;; lex|flex) echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified a \`.l' file. You may need the \`Flex' package in order for those modifications to take effect. You can get \`Flex' from any GNU archive site." rm -f lex.yy.c if [ $# -ne 1 ]; then eval LASTARG="\${$#}" case "$LASTARG" in *.l) SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" lex.yy.c fi ;; esac fi if [ ! -f lex.yy.c ]; then echo 'main() { return 0; }' >lex.yy.c fi ;; makeinfo) echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified a \`.texi' or \`.texinfo' file, or any other file indirectly affecting the aspect of the manual. The spurious call might also be the consequence of using a buggy \`make' (AIX, DU, IRIX). You might want to install the \`Texinfo' package or the \`GNU make' package. Grab either from any GNU archive site." file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` if test -z "$file"; then file=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $file` fi touch $file ;; *) echo 1>&2 "\ WARNING: \`$1' is needed, and you do not seem to have it handy on your system. You might have modified some files without having the proper tools for further handling them. Check the \`README' file, it often tells you about the needed prerequirements for installing this package. You may also peek at any GNU archive site, in case some other package would contain this missing \`$1' program." exit 1 ;; esac exit 0 webmagick-2.02.orig/mkinstalldirs0100755000175000017500000000132207306271260016761 0ustar arafunearafune#! /bin/sh # mkinstalldirs --- make directory hierarchy # Author: Noah Friedman # Created: 1993-05-16 # Public domain # $Id: mkinstalldirs,v 1.13 1999/01/05 03:18:55 bje Exp $ errstatus=0 for file do set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'` shift pathcomp= for d do pathcomp="$pathcomp$d" case "$pathcomp" in -* ) pathcomp=./$pathcomp ;; esac if test ! -d "$pathcomp"; then echo "mkdir $pathcomp" mkdir "$pathcomp" || lasterr=$? if test ! -d "$pathcomp"; then errstatus=$lasterr fi fi pathcomp="$pathcomp/" done done exit $errstatus # mkinstalldirs ends here webmagick-2.02.orig/webmagick.in0100755000175000017500000043427607413166136016465 0ustar arafunearafune#! @PERL@ # -*- Mode: Perl -*- # # $Id: webmagick.in,v 1.97 2001/12/05 13:52:39 ache Exp $ # # You are looking at the main PERL script for WebMagick, a package to # intelligently create HTML and JavaScript index files and imagemaps # corresponding to a directory tree of image files. # # Copyright Bob Friesenhahn (bfriesen@simple.dallas.tx.us) 1996, 1997, # 1998, 1999, 2000 # # This work may be used for any purpose, public or private, provided # that this work or derivations thereof are attributed to its author. # Full copyrights to this work are maintained by its author to ensure # that rights so bestowed are not abridged. # # NOTE: This program has a substantial manual. Considerable time has # been spent writing it so please at least skim through it before # asking questions. # # Requires the ImageMagick, PerlMagick, and PERL 5 packages. May # possibly execute correctly (but with reduced performance) with # package versions as old as: # ImageMagick -- 3.8.4 # PerlMagick -- 1.12 # PERL -- 5.003 # # But always tested by the author with recent versions. At the last # update of these notes (December 19, 1998) the latest versions tested # were: # ImageMagick -- 4.1.6 # PerlMagick -- 1.55 # PERL -- 5.004_04 # # While some effort is made to ensure that WebMagick will execute under # older package versions, the author does not use these versions so # he will only know to correct incompatabilities if they are brought # to his attention. # # The latest version of WebMagick is always available from the URL # "ftp://ftp.simplesystems.org/pub/WebMagick". Keep track of # the latest WebMagick developments by visiting the WebMagick web page # at "http://webmagick.sourceforge.net/". # # Obtain ImageMagick from "ftp://ftp.wizards.dupont.com/pub/ImageMagick" # or visit the ImageMagick web page at # "http://www.wizards.dupont.com/cristy/ImageMagick.html". # # Obtain PerlMagick from # "ftp://ftp.wizards.dupont.com/pub/ImageMagick/perl" or visit the # PerlMagick web page at # "http://www.wizards.dupont.com/cristy/www/perl.html". # # ImageMagick and PerlMagick are written by John Cristy (cristy@dupont.com). # WebMagick would not be possible without his wonderful software. The # author greatly appreciates Cristy's assistance with ironing out PerlMagick's # (or WebMagick's bugs) during the development of WebMagick. # # Suggestions, moral support, and patches were provided by Anthony # Thyssen (anthony@cit.gu.edu.au). His help is very much appreciated. # use locale; use POSIX qw(strftime _exit); use Cwd; # If your PERL barfs, you may need to comment one or more of the following # lines out: use strict 'refs'; # Be picky about references use strict 'subs'; # Be picky about subroutines use strict 'vars'; # Be picky about variable scope (explicit globals) # # Global variable declarations # my ( %RGBDB, # RGB color database @allFiles, # List of files in current directory @allImageFiles, # List of all source file names in directory @cacheFiles, # List of files in the image cache $currentDirectory, # Current directory (absolute) $doMontage, # Set to true if montage must be generated $doPageHtml, # Set to true if per-page HTML files must be generated %dirOrder, # Order directories are listed in dirindex file %dirTitles, # Directory name to title index %fileNames, # Hash of generated file names %frameTargets, # Frame targets @global_option_files, # List of rc files to source before all others $haveImages, # Set to true if there are images in directory $haveReadme, # Set to true if there is a README file in directory %htmlOpts, # Options that effect HTML output $htmlParams, # String form of HTML parameters %iconImageSizes, # Size of icons %iconImageUrls, # URLs for icons $icon_base_url, # URL to icon directory $icon_dir_path, # Path to icon directory %icon_paths, # Paths to icon files @imageThumbCoords, # Thumbnail imagemap coordinates $imageFrameLink, # URL to use as source for image frame %imageLabels, # Labels to use for images (if specified) %tableImageLabels, # labels to use in tables %imageOrder, # Order that images occur in imgindex file $inChild, # Set to true if this process is a child $currentDate, @montageImages, # List of per-page montage image names @montageImageSizes, # List of per-page montage image sizes $montageArguments, # PerlMagick Montage() arguments $montageParameters, # Montage() arguments plus others that effect montage output $netscapeColormap, # PerlMagick image object representing Netscape color cube $numPages, # Number of pages to represent current directory $opt_address, $opt_allowconfig, $opt_anonymous, $opt_cache, $opt_cachedir, $opt_cacheformat, $opt_cachegeom, $opt_cachemin, $opt_coloralink, $opt_colorback, $opt_colorfore, $opt_colorlink, $opt_colorvlink, $opt_columns, $opt_date, $opt_debug, $opt_dircoloralink, $opt_dircolorback, $opt_dircolorfore, $opt_dircolorlink, $opt_dircolorvlink, $opt_dirfmt, $opt_dirhtmlext, $opt_dirindexname, $opt_forcecache, $opt_forcegif, $opt_forcejpeg, $opt_forcehtml, $opt_forcemontage, $opt_frame_name_dirview, $opt_frame_name_imageview, $opt_frame_name_thumbview, $opt_frame_name_top, $opt_frameborder, $opt_framebordersize, $opt_frameddirfmt, %opt_framefmt, %opt_framefmt_frames, $opt_framemarginheight, $opt_framemarginwidth, $opt_frames, $opt_framestyle, $opt_htmlext, $opt_header, $opt_footer, $opt_help, $opt_htimage, $opt_iconbase, $opt_iconpath, %opt_icons, $opt_ignore, $opt_ignorefp, $opt_imgindexname, $opt_indexname, $opt_javascript, $opt_jpegquality, $opt_lockfile, $opt_mapnetscape, $opt_maptype, $opt_maxgif, $opt_metaauthor, $opt_metacharset, $opt_metaclassification, $opt_metadescription, $opt_metaexpires, $opt_metakeywords, $opt_msg_copyright, $opt_msg_date_format, $opt_msg_directories, $opt_msg_directory_navigator, $opt_msg_images, $opt_msg_index_of_directory, $opt_msg_index_of_files, $opt_msg_index_through, $opt_msg_next, $opt_msg_page_navigator, $opt_msg_page_updated_on, $opt_msg_prev, $opt_msg_produced_by, $opt_msg_readme, $opt_msg_up, $opt_pageindexname, $opt_prefixpath, $opt_prune, $opt_readfailhook, $opt_readme, $opt_readmevisible, $opt_recurse, $opt_rgbdb, $opt_rootpath, $opt_rows, $opt_serversidemap, $opt_skip, $opt_srcdir, $opt_stylesheet, # URL to a CSS to use $opt_tables, $opt_thumbbackground, $opt_thumbbordercolor, $opt_thumbborderwidth, $opt_thumbcompose, $opt_thumbfont, $opt_thumbforeground, $opt_thumbframe, $opt_thumbframebgcolor, $opt_thumbframecolor, $opt_thumbgeometry, $opt_thumbgravity, $opt_thumblabel, $opt_thumblabelwidth, $opt_thumbmattecolor, $opt_thumbposthook, $opt_thumbprehook, $opt_thumbshadow, $opt_thumbtexture, $opt_thumbtransparent, $opt_title, $opt_verbose, $opt_version, $opt_webmagickrc, # Per-directory WebMagick rc file name $opt_zoomfilter, $opt_pichtml, $opt_pichtmlbottom, $opt_pichtmlext, $opt_pichtmlnav, $opt_pichtmlputtitle, $opt_pichtmltarget, $opt_pichtmltitleend, $opt_pichtmltitlestart, $opt_pichtmltop, $pageStatusTime, # Time status file last modified $pageNumber, # Current page number $pathSep, # OS-specific path separator $perlVarsLoaded, # Set to one when directory status file sourced $perlVarsVersion, # version used for last file generation $prefix, # installation directory $requiredPerlVarsVersion, # version required. If less than this, regenerate %relativePathCache, # Relative path cache $sourceDirectory, # Directory to process %thumbImageSizes, # thumbnail image sizes @imageNames, # List of source file names for current page $startTime, # Clock time when program started %dirJsLink, # Link name to use when changing directories via JavaScript @dirNames, # List of directories under this directory $pageTitle, # Title for current page %webmagickInfo # WebMagick version information as a hash ); ########################################################################### # Internal Default Options ########################################################################### # #WebMagickRcTop -- Don't remove this line # # Copy the webmagickrc file to your home directory under the name # .webmagickrc. Any default definitions you want to override should be # uncommented in this file and modified. # # Navigation Icon Paths and URLs # Specify the path and file name for the navigation icons. # !!!MUST EDIT OR OVERRIDE!!! # $opt_rootpath = '@ROOTPATH@'; # Directory Path to top of html tree # Needed to determine relative paths to images $opt_prefixpath = '@PREFIXPATH@'; # Path or URL to prepend to root URL # Not used if local relative paths used $opt_iconpath = '@ICONPATH@'; # Relative path under rootpath / prefixpath $opt_iconbase = ''; # Global icons base URL, if not empty $prefix = '@prefix@'; # installation directory # # Server-side imagemap settings # !!!MAY NEED TO EDIT OR OVERRIDE!!! # $opt_htimage='@HTIMAGE@'; # Base URL to server-side imagemap CGI # On some systems this is /cgi-bin/imagemap # Set to '' to use a ".map" URL with relative # URLs (latest NCSA & Apache) $opt_maptype='@MAPTYPE@'; # Maptype must be 'cern' or 'ncsa'. If you are # using Apache, specify 'ncsa'. $opt_serversidemap = 0; # Enable server-side maps writting $perlVarsVersion = 0; # default this to 0 for it to be overidden by appropriate status files $requiredPerlVarsVersion = 2.2; # need this version to avoid regeneration of files # # RC files # # # Name of per-directory rc file $opt_webmagickrc = '.webmagickrc'; # global rc files @global_option_files = ("@sysconfdir@/webmagickrc", "$ENV{'HOME'}/${opt_webmagickrc}"); # # Lockfile to keep from doing same directory in two processes # $opt_lockfile = '.webmagick.lockfile'; # File naming $opt_indexname = 'index.html'; # Per-directory master index file $opt_readme = 'README.html';# Name of welcome page README file ('' = none) $opt_pageindexname = '.index'; # Base name of secondary index files $opt_dirindexname = '.dirindex'; # Subdirectory Title cross-reference # dirname Directory Title $opt_dirhtmlext = '.html'; # Use .shtml for SSI $opt_imgindexname = '.imgindex'; # Image name to label cross-reference file if ($^O eq "MSWin32") {$pathSep = "\\"; } else {$pathSep = "/"; } # # HTML color and background image related options # # X11 RBG color database (rgb.txt) location # Entries in this file have the form: # Red Green Blue Color-name # where color intensities are specified in decimal. # e.g. 250 240 230 linen $opt_rgbdb='@RGBDB@'; # # Page Frame & non-framed pages $opt_colorback = '#CCCCCC'; # Color -- Background $opt_colorfore = 'black'; # Color -- Foreground $opt_coloralink = '#FF0000'; # Color -- Active link $opt_colorlink = '#0000EE'; # Color -- Link $opt_colorvlink = '#551A8B'; # Color -- Visited link # # Directory frame (Leave options empty ('') to use page frame colors $opt_dircolorback = '#B2B2B2'; # Color -- Background $opt_dircolorfore = 'black'; # Color -- Foreground $opt_dircoloralink = ''; # Color -- Active link $opt_dircolorlink = ''; # Color -- Link $opt_dircolorvlink = ''; # Color -- Visited link $opt_stylesheet = ''; # no default stylesheet $opt_allowconfig = 0; # default to not allowing configuration # General options $opt_anonymous = 0; # Don't show address & copyright info on pages $opt_debug = 0; # Debug flag (default off) $opt_recurse = 0; # Recursivally apply webmagick (default off) $opt_prune = 0; # Do Not recurse into subdirectories (off) $opt_ignore = 0; # Do not webmagick this directory # but still recurse into sub-directories $opt_ignorefp = 1; # ignore _* special FrontPage directories (on) $opt_srcdir = '.'; # Source directory path (current directory) $opt_verbose = 0; # Verbose flag (default off) $opt_forcecache = 0; # Force update of cached thumbnails $opt_forcehtml = 0; # Force HTML files to be generated (default off) $opt_forcemontage = 0; # Force montage (default off) $opt_forcegif = 0; # Force GIF imagemaps (default off) $opt_forcejpeg = 0; # Force JPEG imagemaps (default off) $opt_jpegquality = 70; # Quality for JPEG imagemaps $opt_help = 0; # Display usage message $opt_version = 0; # Display version info $opt_htmlext = '.html'; # Use .shtml for SSI $opt_header = '
'; # Imagemap extra page header (HTML) $opt_footer = '
'; # Imagemap extra page footer (HTML) $opt_javascript = 0; # Enable JavaScript output $opt_readmevisible = 0; # Make README.html be first page. $opt_title = ''; # Page title (blank provides default title) $opt_tables = 0; # disable tables $opt_address = ''; # Additonal address info for bottom of # imagemap page $opt_date = 1; # Output updates date $opt_pichtml = 0; # Write separate HTML for each picture $opt_pichtmlbottom = '
'; $opt_pichtmlext = '.html'; # Use .shtml for SSI $opt_pichtmlnav = 0; # Write navigation into pic's HTML $opt_pichtmlputtitle = 1; # Write picture title above it $opt_pichtmltarget = ''; $opt_pichtmltitleend = '

'; # End tags for picture title $opt_pichtmltitlestart = '

'; # Start tags for picture title $opt_pichtmltop = '

'; # # ImageMagick Montage settings # $opt_maxgif = 30000; # Maximum GIF imagemap size before # trying JPEG $opt_columns = 6; # Max number of columns in montage grid $opt_rows = 4; # Max number of rows in montage grid $opt_mapnetscape = 0; # Map GIFs to Netscape 216-color cube $opt_thumbtexture = 'false'; # Texture to tile onto the image background $opt_thumbbackground = '#CCCCCC'; # Montage background color $opt_thumbborderwidth = 0; # Thumbnail border width (pixels) $opt_thumbframebgcolor = 'black'; # Inside of Frame color. Unused if no frame $opt_thumbframecolor = '#CCCCCC'; # Color -- Frame Color $opt_thumbtransparent = $opt_thumbbackground; # Color -- Image Transparency $opt_thumbcompose = 'Replace'; # Thumbnail image composition operation $opt_thumbfont = '@DEFAULTFONT@'; # Label font $opt_thumbforeground = 'black'; # Montage foreground color $opt_thumbframe = 'false'; # Geometry of frame around thumbnail # (default false) $opt_thumbgeometry = '106x80+2+2>'; # Size of thumbnail images (width x height) $opt_thumbgravity = 'Center'; # Direction thumbnail gravitates to # (default Center) $opt_thumblabel = '%f\n%wx%h\n%b'; # Default format for thumbnail text label $opt_thumblabelwidth = 13; # Label width past which truncation occurs $opt_thumbshadow = 'false'; # Enable decorative shadow under thumbnail # (default disabled) $opt_zoomfilter = 'Mitchell'; # Zoom (size reduction) filter # (Box/Triangle/Mitchell) # # Hooks to add code to key places in WebMagick # $opt_thumbprehook = ''; # PerlMagick commands to execute on original # prior reducing to thumbnail size $opt_thumbposthook = ''; # PerlMagick commands to execute on image # after reduction to thumbnail size $opt_readfailhook = ''; # PERL commands to execute if reading image # fails due to image corruption # # Caching related options # # Note: See below about sharing cache with 'xv' # If caching is turned on, the montage grid will continue to be # controlled by opt_thumbgeometry but the thumbnail size will be # controlled by opt_cachegeom $opt_cache = 1; # Cache thumbnails $opt_cachedir = '.cache'; # Subdirectory to cache thumbnails in $opt_cacheformat = 'JPEG'; # Format to use for thumbnails $opt_cachegeom = $opt_thumbgeometry; # Thumbnail geometry $opt_cachemin = 300*200; # Smallest image to cache in total pixels # (width * height). Images smaller than # this size will not be cached. # Uncomment these options to share cache with John Bradley's 'xv' # (Visual Schnauzer format) NOTE: The 'xv' thumbnail format only # supports 128 absolute colors so expect some montage thumbnail # degradation when using 'xv' thumbnails. # # # $opt_cacheformat = 'P7'; # 'xv's thumbnail format # $opt_cachegeom = '80x60'; # 'xv's default thumbnail geometry is 80x60 # $opt_cachedir = '.xvpics'; # 'xv's thumbnail cache directory # $opt_cachemin = 0; # Cache all thumbnails # # Uncomment remaining to obtain 'xv's Visual Schnauzer "look and feel" # # $opt_thumbgeometry = '92x72+2+2>'; # $opt_thumblabel = '%f'; # $opt_thumblabelwidth = 12; # $opt_thumbgravity = 'South'; # # Frame related options # $opt_frames = 1; # Use frames $opt_framemarginwidth = 1; # Pixels allocated to frame margin in horizontal direction $opt_framemarginheight = 1; # Pixels allocated to frame margin in vertical direction $opt_framebordersize = 3 ; # Pixels allocated to frame border $opt_frameborder = 'YES'; # Enable (YES) or disable (NO) decorative frame borders $opt_framestyle = 1; # Frame style to use (out of those available) # # Meta-tag defaults # $opt_metaauthor = ''; # Page author $opt_metacharset = ''; # Page character set $opt_metaclassification = ''; # Page classification $opt_metadescription = ''; # Page description $opt_metaexpires = ''; # Date page expires (e.g "Tue, 20 Aug 1996 14:25:27 GMT") $opt_metakeywords = 'WebMagick'; # Key words # # Messages customization defaults # $opt_msg_copyright = 'Copyright '; $opt_msg_date_format = '%B %e, %Y'; # See strftime(3) $opt_msg_directories = 'Directories'; $opt_msg_directory_navigator = 'Directory Navigator'; $opt_msg_images = 'Images'; $opt_msg_index_of_directory = 'Index of directory'; $opt_msg_index_of_files = 'Index of files '; $opt_msg_index_through = 'through'; $opt_msg_next = 'Next'; $opt_msg_page_navigator = 'Page Navigator'; $opt_msg_page_updated_on = 'Page updated on'; $opt_msg_prev = 'Prev'; $opt_msg_produced_by = 'Produced by'; $opt_msg_readme = 'ReadMe'; $opt_msg_up = 'Up'; # # Hash table of images used -- image size read internally by webmagick # # $opt_icons{'background'} = 'thumbs.jpg'; # Thumbnail frame background image # $opt_icons{'dirbackground'} = 'dir.jpg'; # Directory frame background image $opt_icons{'config'} = 'blue_c.gif'; # Configuration button $opt_icons{'prev'} = 'blue_prev.gif'; # Previous $opt_icons{'prev_gray'} = 'gray_prev.gif'; # Previous (grayed out) $opt_icons{'next'} = 'blue_next.gif'; # Next $opt_icons{'next_gray'} = 'gray_next.gif'; # Next (grayed out) $opt_icons{'up'} = 'blue_up.gif'; # Up $opt_icons{'help'} = 'blue_readme.gif'; # Help Readme File # $opt_icons{'help'} = 'blue_help.gif'; # Help Alternative (Question) # $opt_icons{'dir'} = 'blue_dir.gif'; # Directory List Icon (See below) # $opt_icons{'ball'} = 'blue_ball.gif'; # A ball matching other icons $opt_icons{'frame-style-1'} = 'frame-style-1.jpg'; $opt_icons{'frame-style-2'} = 'frame-style-2.jpg'; $opt_icons{'frame-style-3'} = 'frame-style-3.jpg'; $opt_icons{'frame-style-4'} = 'frame-style-4.jpg'; # # WebMagickRcBottom -- Don't remove this line # # Format Templates # # WARNING: This is for expert web and perl programmers only do not # modify unless you know what you are doing. To learn how frames work, # read the pages under the URL # http://home.netscape.com/assist/net_sites/frames.html # # Extra Images can be added to the above hash table and then used in # the following format options. For example the 'dir' icon above can # be uncommented then the following lines added below. WARNING: this # is only useful if $opt_indexname is something else. # # # # \"\" # Dir Listing
# # # Template for the Frame definition # This allows adding frames, changing geometry, etc. # # Frame Target Names $opt_frame_name_top="_top"; # Reload frames entirely #$opt_frame_name_self="_self"; # Link to this (same) frame #$opt_frame_name_parent="_parent"; # Link to parent frame $opt_frame_name_dirview="dirview"; # Directory nav frame $opt_frame_name_thumbview="thumbview"; # Imagemap (image selection) frame $opt_frame_name_imageview="imageview"; # Image viewing frame (three frames) # # Simple two frame screen with directories listed in the left # frame and imagemap/README displayed in the right frame. # # ------------- # | | | # | | | # | | | # | | | # | | | # | | | # ------------- $opt_framefmt{1}= ' '; $opt_framefmt_frames{1}=2; # Number of frames expressed by this frame format # Three frame screen with directories listed in top-left frame, # imagemap displayed in bottom-left frame, and README/Images # displayed in full-height right-hand frame. # ------------- # | | | # | | | # |--| | # | | | # | | | # | | | # ------------- $opt_framefmt{2}= ' '; $opt_framefmt_frames{2}=3; # Number of frames expressed by this frame format # Three frame screen with directories listed in left frame, # imagemap displayed in top-right frame, and README/Images # displayed in lower-right frame. # ------------- # | | | # | |----------| # | | | # | | | # | | | # | | | # ------------- $opt_framefmt{3}= ' '; $opt_framefmt_frames{3}=3; # Number of frames expressed by this frame format # Three frame screen with directories listed in lower-left frame, # imagemap displayed in top frame, and README/Images displayed in # lower-right frame. # ------------- # | | # |-- ----------| # | | | # | | | # | | | # | | | # ------------- $opt_framefmt{4}= ' '; $opt_framefmt_frames{4}=3; # Number of frames expressed by this frame format # # Template for the Directory Index Frame # $opt_frameddirfmt='

${uphtml} ${helphtml} ${nexthtml}

${dirhtml} '; # # Template for Non-Framed Top Index Page ($opt_indexname) # $opt_dirfmt='\n

${opt_msg_directory_navigator} ...

${uphtml} ${helphtml} ${dirhtml} ${pageindexhtml} '; # Save revision to variable $webmagickInfo{'version'} = '@VERSION@'; ########################################################################### # End of Internal Default Options ########################################################################### select(STDERR); $| = 1; # Make stderr unbuffered select(STDOUT); $| = 1; # Make stdout unbuffered umask( 022 ); # Sets default file mode 644 $startTime = time; # Save start time $inChild = 0; # Set signal handler to gracefully abort (hah!). Handle signal # induced exits properly. Only the parent prints a status message. sub sig_handler { my ($sig) = @_; if( ! $inChild ) { syswrite (STDERR, "\nCaught signal SIG", 18); syswrite (STDERR, "$sig", length("$sig")); syswrite (STDERR, " -- aborting ...\n", 17); } _exit(1); } $SIG{'HUP'} = \&sig_handler; $SIG{'INT'} = \&sig_handler; $SIG{'QUIT'} = \&sig_handler; # Allow global options files to override defaults set above (but not # command line options) my $goptfile; foreach $goptfile (@global_option_files) { sourceRcFile( $goptfile ) || die("Error sourcing ${goptfile}\n"); } # Eval per-directory rc files if they exist. Rc files are evaluated # for each directory starting from $opt_rootdir until the current # directory is reached. This supports "additive" behavior for a branch # in the tree. $currentDirectory=cwd(); # Get current (absolute) directory evaluateRcFiles(); # # We don't really like command line options but we'll support them anyway. :-) # use Getopt::Long; if ( ! GetOptions( 'address=s' => \$opt_address, 'anonymous!' => \$opt_anonymous, 'cache!' => \$opt_cache, 'cachedir=s' => \$opt_cachedir, 'cacheformat=s' => \$opt_cacheformat, 'cachegeom=s' => \$opt_cachegeom, 'cachemin=i' => \$opt_cachemin, 'coloralink=s' => \$opt_coloralink, 'colorback=s' => \$opt_colorback, 'colorfore=s' => \$opt_colorfore, 'colorlink=s' => \$opt_colorlink, 'colorvlink=s' => \$opt_colorvlink, 'allowconfig!' => \$opt_allowconfig, 'columns=i' => \$opt_columns, 'date!' => \$opt_date, 'debug!' => \$opt_debug, 'dircoloralink=s' => \$opt_dircoloralink, 'dircolorback=s' => \$opt_dircolorback, 'dircolorfore=s' => \$opt_dircolorfore, 'dircolorlink=s' => \$opt_dircolorlink, 'dircolorvlink=s' => \$opt_dircolorvlink, 'dirhtmlext=s' => \$opt_dirhtmlext, 'dirindexname=s' => \$opt_dirindexname, 'footer=s' => \$opt_footer, 'forcecache!' => \$opt_forcecache, 'forcegif!' => \$opt_forcegif, 'forcehtml!' => \$opt_forcehtml, 'forcejpeg!' => \$opt_forcejpeg, 'forcemontage!' => \$opt_forcemontage, 'framemarginwidth=i' => \$opt_framemarginwidth, 'framemarginheight=i' => \$opt_framemarginheight, 'framebordersize=i' => \$opt_framebordersize, 'frameborder=s' => \$opt_frameborder, 'frames!' => \$opt_frames, 'framestyle=i' => \$opt_framestyle, 'header=s' => \$opt_header, 'help!' => \$opt_help, 'htimage=s' => \$opt_htimage, 'htmlext=s' => \$opt_htmlext, 'iconbase=s' => \$opt_iconbase, 'iconpath=s' => \$opt_iconpath, 'ignorefp!' => \$opt_ignorefp, 'imgindexname=s' => \$opt_imgindexname, 'indexname=s' => \$opt_indexname, 'javascript!' => \$opt_javascript, 'jpegquality=i' => \$opt_jpegquality, 'mapnetscape!' => \$opt_mapnetscape, 'maptype=s' => \$opt_maptype, 'maxgif=i' => \$opt_maxgif, 'msg_copyright=s' => \$opt_msg_copyright, 'msg_date_format=s' => \$opt_msg_date_format, 'msg_directories=s' => \$opt_msg_directories, 'msg_directory_navigator=s' => \$opt_msg_directory_navigator, 'msg_images=s' => \$opt_msg_images, 'msg_index_of_directory=s' => \$opt_msg_index_of_directory, 'msg_index_of_files=s' => \$opt_msg_index_of_files, 'msg_index_through=s' => \$opt_msg_index_through, 'msg_next=s' => \$opt_msg_next, 'msg_page_navigator=s' => \$opt_msg_page_navigator, 'msg_page_updated_on=s' => \$opt_msg_page_updated_on, 'msg_prev=s' => \$opt_msg_prev, 'msg_produced_by=s' => \$opt_msg_produced_by, 'msg_readme=s' => \$opt_msg_readme, 'msg_up=s' => \$opt_msg_up, 'pageindexname=s' => \$opt_pageindexname, 'pichtml!' => \$opt_pichtml, 'pichtmlbottom=s' => \$opt_pichtmlbottom, 'pichtmlext=s' => \$opt_pichtmlext, 'pichtmlnav!' => \$opt_pichtmlnav, 'pichtmlputtitle!' => \$opt_pichtmlputtitle, 'pichtmltarget=s' => \$opt_pichtmltarget, 'pichtmltitleend=s' => \$opt_pichtmltitleend, 'pichtmltitlestart=s' => \$opt_pichtmltitlestart, 'pichtmltop=s' => \$opt_pichtmltop, 'prefixpath=s' => \$opt_prefixpath, 'readme=s' => \$opt_readme, 'readmevisible!' => \$opt_readmevisible, 'recurse!' => \$opt_recurse, 'rootpath=s' => \$opt_rootpath, 'rows=i' => \$opt_rows, 'serversidemap!' => \$opt_serversidemap, 'srcdir=s' => \$opt_srcdir, 'stylesheet=s' => \$opt_stylesheet, 'tables!' => \$opt_tables, 'thumbtexture=s' => \$opt_thumbtexture, 'thumbbackground=s' => \$opt_thumbbackground, 'thumbborderwidth=i' => \$opt_thumbborderwidth, 'thumbframebgcolor=s' => \$opt_thumbframebgcolor, 'thumbcompose=s' => \$opt_thumbcompose, 'thumbfont=s' => \$opt_thumbfont, 'thumbforeground=s' => \$opt_thumbforeground, 'thumbframe=s' => \$opt_thumbframe, 'thumbgeometry=s' => \$opt_thumbgeometry, 'thumbgravity=s' => \$opt_thumbgravity, 'thumblabel=s' => \$opt_thumblabel, 'thumblabelwidth=s' => \$opt_thumblabelwidth, 'thumbshadow=s' => \$opt_thumbshadow, 'thumbtransparent=s' => \$opt_thumbtransparent, 'title=s' => \$opt_title, 'verbose!' => \$opt_verbose, 'version!' => \$opt_version, 'zoomfilter=s' => \$opt_zoomfilter ) ) { help(); exit(0); } # # Print help message # if( $opt_help ) { help(); exit(0); } # # Print version message # if( $opt_version ) { version(); exit(0); } # # Check if source directory is valid # if ( ! -d "${opt_srcdir}" ) { print( STDERR "No ${opt_srcdir} directory\n" ); exit(1); } # # Open X11 RGB database # if ( -f $opt_rgbdb ) { open( RGBDB, "<$opt_rgbdb" ) || die("Unable to open RGB database $opt_rgbdb"); while( ) { m/^!/ && next; my ( $red, $green, $blue, $color ); chop; s/^[ \t]+//; # Remove any preceding spaces ($red, $green, $blue, $color) = split( /[ \t]+/, $_, 4); $RGBDB{"\L$color"} = sprintf("#%02X%02X%02X", $red, $green, $blue); } close( RGBDB ); } else { print( STDERR "Warning: X11 RGB database \'$opt_rgbdb\' not found\n" ); } # # Minimal 16-color named set as defined by HTML 3.2 # $RGBDB{'black'} = '#000000'; $RGBDB{'green'} = '#008000'; $RGBDB{'silver'} = '#C0C0C0'; $RGBDB{'lime'} = '#00FF00'; $RGBDB{'gray'} = '#808080'; $RGBDB{'olive'} = '#808000'; $RGBDB{'white'} = '#FFFFFF'; $RGBDB{'yellow'} = '#FFFF00'; $RGBDB{'maroon'} = '#800000'; $RGBDB{'navy'} = '#000080'; $RGBDB{'red'} = '#FF0000'; $RGBDB{'blue'} = '#0000FF'; $RGBDB{'purple'} = '#800080'; $RGBDB{'teal'} = '#008080'; $RGBDB{'fuchsia'} = '#FF00FF'; $RGBDB{'aqua'} = '#00FFFF'; $currentDate = strftime ($opt_msg_date_format, localtime); # # Translate paths to physical paths (avoid symlink problems) # $opt_srcdir = lets_get_physical( $opt_srcdir ); print( "Physical srcdir : $opt_srcdir\n" ) if $opt_debug; $opt_rootpath = lets_get_physical( $opt_rootpath ); print( "Physical rootpath : $opt_rootpath\n" ) if $opt_debug; $icon_dir_path = "${opt_rootpath}$pathSep${opt_iconpath}"; print( "Physical icondir : $icon_dir_path\n" ) if $opt_debug; # html_imgsize. Obtain image size and return HTML text (HEIGHT=foo # WIDTH=bar) representing size. sub html_imgsize { my ($file) = @_; use Image::Magick; my ( $image, $height, $width, @ping, $retval, $status ); $retval = ''; if( -f $file ) { $image = Image::Magick->new; # Try PerlMagick 1.15 Ping method first my $newfile = $file; $newfile =~ s/\\/\\\\/g; eval qq{\@ping = \$image->Ping("$newfile");}; if ( !$@ ) { if ( $ping[0] =~ /,/ ) { @ping = split (',',$ping[0]); } $width = $ping[0]; $height = $ping[1]; } else { # If Ping fails to eval, do things the hard way $status = $image->Read($file); if( "$status" ) { undef $image; return( $retval ); } ($width, $height) = $image->[0]->Get("columns", "rows"); } print( STDERR "Image \"$file\" has dimensions ", "${width}x${height}\n") if $opt_debug; $retval="HEIGHT=${height} WIDTH=${width}"; undef @$image; # Free up space undef $image; # Ditto } else { print( STDERR "html_imgsize: no such file \"$file\"\n" ); } return( $retval ); } if( $opt_recurse && $opt_frames ) { # Recurse depth-first under current directory, executing &wanted # for each directory ignoring hidden directories use File::Find; print( "Processing directory tree $opt_srcdir ...\n" ) if $opt_debug; find( \&wanted, $opt_srcdir ); } else { print( "Processing directory $opt_srcdir ...\n" ) if $opt_debug; $sourceDirectory = $opt_srcdir; dodir( $sourceDirectory ); } # # Print run times if running in verbose mode # if( $opt_verbose ) { my( $user, # CPU time in user code for this process $system, # CPU time in system code on behalf of this process $cuser, # CPU time in user code of child processes $csystem, # CPU time in system code on behalf of child processes $total_user, # Total user time (parent + children) $total_system, # Total system time (parent + children) $total_time # Total elapsed time (wall clock) ); my( $user_m, # User time in minutes $system_m, # System time in minutes $cuser_m, # Child process user time in minutes $csystem_m, # Child process system time in minutes $total_user_m, # Total user time in minutes $total_system_m,# Total system time in minutes $total_time_m # Total elapsed time (wall clock) in minutes ); ($user, $system, $cuser, $csystem) = times; $user_m = elapsedminutes( $user ); $system_m = elapsedminutes( $system ); $cuser_m = elapsedminutes( $cuser ); $csystem_m = elapsedminutes( $csystem ); $total_user = $user + $cuser; # Total user time $total_user_m = elapsedminutes( $total_user ); $total_system = $system + $csystem; # Total system time $total_system_m = elapsedminutes( $total_system ); $total_time = time - $startTime; # Total run time $total_time_m = elapsedminutes( $total_time ); print( STDERR "Run time statistics:\n" ); print( STDERR "Detailed times: ${user_m} user, ${system_m} system,", " ${cuser_m} child_user, ${csystem_m} child_system\n" ); print( STDERR "Summary times : ${total_time_m} total,", " ${total_user_m} user, ${total_system_m} system\n" ); } print( STDERR "Doing normal exit with code 0\n" ) if $opt_debug; exit(0); ##################### ##################### # Executed for each find operation # Want: # is directory # not hidden directory # # Variables: # $File::Find::dir current directory # $File::Find::name current directory + file name # $File::Find::prune set to true to prune tree sub wanted { my($dev,$ino,$mode,$nlink,$uid,$gid); ($dev,$ino,$mode,$nlink,$uid,$gid) = lstat($_); if ( -d _ && -w _ && !/^\..+/ ) { if( $_ ne '.' && get_rc_var('.', 'opt_prune', 0) ) { $File::Find::prune=1; # following funny logic is to avoid warnings about $prune print( STDERR "Pruning $File::Find::name\n" ) if $File::Find::prune==1; return; } #ignore special FrontPage directories (like /_vti_bin) # lowercase names only, so _90-95 or _Covers is OK if ( $opt_ignorefp && $File::Find::name =~ /\/_[a-z]/ ) { return; } forking_dodir($File::Find::name); } } # Execute dodir with the protection of a fork. This ensures that # current directory and global webmagick configuration values are # preserved between directories. sub forking_dodir { my $sourceDirectory = shift(@_); # Directory to process my $inChild; # Set to one of we are child my ($waitpid, # PID returned by wait $childstat, # Status returned from child $pid, # Child process PID $waitpid, # PID waited on $childstat # Child return status ); FORK: { if( $pid = fork ) { # parent here # child process pid is available in $pid $inChild=0; $waitpid=wait(); $childstat=$?; # If clean exit, then return 0 return 0 if ( $childstat == 0 ); syserror( $childstat ); # Print status from error return 1; } elsif ( defined $pid ) { # $pid is zero here if defined # child here # parent process pid is available with getppid $inChild=1; dodir( $sourceDirectory ); exit( 0 ); } elsif ( $! =~ /No more process/ ) { # EAGAIN, supposedly recoverable fork error sleep 5; redo FORK; } else { # weird fork error die( "Can't fork: $!\n$@\n" ); } } return(0); # Should never get here! } # # Generate index files for directory specified by $sourceDirectory # sub dodir { $sourceDirectory = shift(@_); my $maxfiles = 0; # Maximum number of index links per page $numPages = 0; # Number of index pages to be generated my $numimages = 0; # Number of images in directory my $numdirectories = 0; # Number of subdirectories in directory $pageNumber = 1; # Current index page number (1 to N) $haveReadme = 0; # Is there a readme file in this directory? my $doIndexHtml=0; # Set to true if HTML index files must be generated my $tmpstr; # Scratch string my @tmplst; # Scratch list # # Regular expression to match supported file extensions # my $includeRegex='(\.avs$)|(\.bie$)|(\.bmp$)|(\.cgm$)|(\.dcm$)|(\.dcx$)' . '|(\.dib$)|(\.dot$)|(\.dvi$)|(\.epdf$)|(\.epi$)|(\.eps$)' . '|(\.eps2$)|(\.epsf$)|(\.epsi$)|(\.ept$)|(\.fax$)|(\.fig$)' . '|(\.fits$)|(\.fpx$)|(\.g3$)|(\.gif$)|(\.gplt$)|(\.hdf$)' . '|(\.hpgl$)|(\.ico$)|(\.im1$)|(\.im24$)|(\.im8$)|(\.jbg$)' . '|(\.jbig$)|(\.jpeg$)|(\.jpg$)|(\.m2v$)|(\.man$)|(\.mif$)' . '|(\.miff$)|(\.mng$)|(\.mpeg$)|(\.mpg$)|(\.mtv$)|(\.p7$)' . '|(\.pbm$)|(\.pcd$)|(\.pcds$)|(\.pcx$)|(\.pdf$)|(\.pgm$)' . '|(\.pic$)|(\.pict$)|(\.pix$)|(\.png$)|(\.pnm$)|(\.pov$)' . '|(\.ppm$)|(\.ps$)|(\.psd$)|(\.rad$)|(\.rla$)|(\.rle$)' . '|(\.sgi$)|(\.sun$)|(\.tga$)|(\.tif$)|(\.tiff$)|(\.tim$)' . '|(\.ttf$)|(\.vicar$)|(\.viff$)|(\.wmf$)|(\.xbm$)|(\.xpm$)' . '|(\.xwd$)'; # # Regular expression for file and directory names we ignore # my $excludeRegex = ''; $excludeRegex .= "(^$opt_indexname)|" if ("$opt_indexname" ne ''); $excludeRegex .= "(\\.s?html\$)|(\\.s?htm\$)|(\\.sht\$)|(^\\.)"; # # Change current directory to $sourceDirectory # chdir( $sourceDirectory ) || die("Can't cd to $sourceDirectory\n$@\n"); # Get current (absolute) directory $currentDirectory=cwd(); # Eval per-directory rc files if they exist. Rc files are # evaluated for each directory starting from $opt_rootdir until # the current directory is reached. This supports "additive" # behavior for a branch in the tree. evaluateRcFiles(); # Decide if we want to process this directory or not based on the # value of $opt_ignore. If not, then just return. if( $opt_ignore ) { # Skip this directory print( STDERR "Skipping $sourceDirectory\n" ); return( 0 ); } else { print( STDERR "Processing $sourceDirectory\n" ); } # removed until I can find a way to do this # that doesn't leave lockfiles on unsuccessful dodir attempts #if (-e $opt_lockfile) #{ # # Skip this directory because it's currently being processed # print( STDERR "Skipping $sourceDirectory\n" ); # return( 0 ); #} else { # open (LOCKFILE, ">$opt_lockfile"); # close LOCKFILE; #} $currentDate = strftime ($opt_msg_date_format, localtime); # Translate paths to physical paths (avoid symlink problems) # Note: This duplicates code executed during initialization $opt_srcdir = lets_get_physical( $opt_srcdir ); $opt_rootpath = lets_get_physical( $opt_rootpath ); $icon_dir_path = "${opt_rootpath}${pathSep}${opt_iconpath}"; # # Set frame targets & frame naming # if( $opt_framefmt_frames{$opt_framestyle} == 2 ) { # Two frame style & naming $frameTargets{'default_dirview'}=$opt_frame_name_top; # Dir nav reloads entirely by default $frameTargets{'default_thumbview'}=$opt_frame_name_top; # Thumbnail nav reloads entirely by default $frameTargets{'dirview'}=$opt_frame_name_dirview; # Directory list displays in dirview frame $frameTargets{'readmeview'}=$opt_frame_name_imageview; # Readme displays in imagemap frame $frameTargets{'imageview'}=$opt_frame_name_imageview; # Images display in imagemap frame $frameTargets{'thumbview'}=$opt_frame_name_imageview; # Imagemap displays in imagemap frame } elsif ( $opt_framefmt_frames{$opt_framestyle} == 3 ) { # Three frame style & naming $frameTargets{'default_dirview'}=$opt_frame_name_top; # Dir nav reloads entirely by default $frameTargets{'default_thumbview'}=$opt_frame_name_top; # Thumbnail nav reloads entirely by default $frameTargets{'dirview'}=$opt_frame_name_dirview; # Directory list displays in dirview frame $frameTargets{'readmeview'}=$opt_frame_name_imageview; # Readme displays in imageview frame $frameTargets{'imageview'}=$opt_frame_name_imageview; # Images display in imageview frame $frameTargets{'thumbview'}=$opt_frame_name_thumbview; # Imagemap displays in imagemap frame } else { die("Unsupported number of frames: $opt_framefmt_frames{$opt_framestyle}\n" ); } # # Ensure that certain options have correct case # $opt_cacheformat = "\U${opt_cacheformat}"; # # Default directory frame colors to page colors if not set # if ($opt_frames) { $opt_dircolorback = $opt_colorback if ("$opt_dircolorback" eq ''); $opt_dircolorfore = $opt_colorfore if ("$opt_dircolorfore" eq ''); $opt_dircoloralink = $opt_coloralink if ("$opt_dircoloralink" eq ''); $opt_dircolorlink = $opt_colorlink if ("$opt_dircolorlink" eq ''); $opt_dircolorvlink = $opt_colorvlink if ("$opt_dircolorvlink" eq ''); } # # Convert all HTML colors to hex format # $opt_colorback = lookupRGBColor( $opt_colorback ); $opt_colorfore = lookupRGBColor( $opt_colorfore ); $opt_coloralink = lookupRGBColor( $opt_coloralink ); $opt_colorlink = lookupRGBColor( $opt_colorlink ); $opt_colorvlink = lookupRGBColor( $opt_colorvlink ); if ($opt_frames) { $opt_dircolorback = lookupRGBColor( $opt_dircolorback ); $opt_dircolorfore = lookupRGBColor( $opt_dircolorfore ); $opt_dircoloralink = lookupRGBColor( $opt_dircoloralink ); $opt_dircolorlink = lookupRGBColor( $opt_dircolorlink ); $opt_dircolorvlink = lookupRGBColor( $opt_dircolorvlink ); } # Calculate the maximum number of images per index page $maxfiles=$opt_columns*$opt_rows; # Convert renamed WebMagick options to new names for backward # compatability if( defined( $opt_thumbbordercolor ) ) { $opt_thumbframebgcolor = $opt_thumbbordercolor; } if( defined( $opt_thumbmattecolor ) ) { $opt_thumbframecolor = $opt_thumbmattecolor; } # # Ensure that maptype is lower case # $opt_maptype = "\L${opt_maptype}"; if ($opt_iconbase) { if ($opt_iconbase =~ !/^\//) { die("$0: Iconbase must start with '/', use prefixpath to make it non-root related\n"); } else { $icon_base_url = "${opt_prefixpath}${opt_iconbase}"; } } else { # # Compute URL to top of icon directory # # Attempt to convert to relative URL $icon_base_url = relative( $currentDirectory, $icon_dir_path); if ( $icon_base_url =~ m\(^/)|(:)\ ) { # If did not convert to relative URL then convert to absolute URL $icon_base_url = escapeurl( abs_path_to_url($icon_dir_path)); } } # # Source directory status file from last run # setFileNames(); # Set current file names $pageStatusTime = 0; if ( -f $fileNames{'pageStatus'} ) { sourceRcFile($fileNames{'pageStatus'}) ; # Obtain last modified date for status file $pageStatusTime=fmtime($fileNames{'pageStatus'}); } # Handle a directory name to title index file. Store alternative # names in %dirTitles. { my $pos = 0; my %tmp_dirTitles; undef( %tmp_dirTitles ); if ( $opt_frames && -f $opt_dirindexname ) { open( DIRINDEX, "<$opt_dirindexname" ); while( ) { chop; my($dirname, $dirtitle); ( $dirname, $dirtitle) = split( /[ \t]+/, $_, 2); if(defined($dirname) && defined($dirtitle)) { $tmp_dirTitles{$dirname} = escapehtml($dirtitle); $dirOrder{$dirname} = $pos; $pos++; } } close( DIRINDEX ); } if( !defined(%dirTitles) || ( compareHash(\%dirTitles,\%tmp_dirTitles) ) ) { %dirTitles = %tmp_dirTitles; print( STDERR "Directory titles have changed, must re-do HTML indexes\n" ) if $opt_debug; ++$doIndexHtml; } } # # Handle a image name to thumbnail label index file # Store alternative names in %imageLabels # { my $pos = 0; my %tmp_imageLabels; if ( -f $opt_imgindexname ) { open( IMGINDEX, "<$opt_imgindexname" ); while( ) { chop; my ( $imgname, $imgtitle); ( $imgname, $imgtitle) = split( /[ \t]+/, $_, 2); if(defined($imgname) && defined($imgtitle)) { $tmp_imageLabels{$imgname} = $imgtitle; $imageOrder{$imgname} = $pos; $pos++; } } close( IMGINDEX ); } # # This code is totally BOGUS since decision should be made on a per-page basis!! # if( !defined(%imageLabels) || ( compareHash(\%imageLabels,\%tmp_imageLabels) ) ) { %imageLabels = %tmp_imageLabels; print( STDERR "Image labels have changed, must re-do montages\n" ) if $opt_debug; $opt_forcemontage=1; } } # # Compute individual icon URLs. # { my %tmp_iconImageUrls; print( "Icon URLs:\n" ) if $opt_debug; my $icon; for $icon ( keys %opt_icons ) { if( $opt_icons{$icon} ) { # if defined $tmp_iconImageUrls{$icon} = "$icon_base_url" . '/' . $opt_icons{$icon}; printf( " \$tmp_iconImageUrls%-20s = \"%s\"\n", "{'$icon'}", $tmp_iconImageUrls{$icon} ) if $opt_debug; } } if( !defined(%iconImageUrls) || ( compareHash(\%iconImageUrls,\%tmp_iconImageUrls) ) ) { %iconImageUrls = %tmp_iconImageUrls; print( STDERR "Icon URLs have changed, must re-do all HTML\n" ) if $opt_debug; $opt_forcehtml = 1;; } } # # Get icon image sizes # getIconImageSizes(); # Read source file names (if any). Filter out any names matching # the exclude list. opendir( SRCDIR, ".") || die("$0: Failed to open directory $sourceDirectory\n$@\n"); @allFiles = grep(!/$excludeRegex/io,readdir( SRCDIR )); closedir( SRCDIR ); # # Build list of image files # @allImageFiles = sort( sortImages grep( /$includeRegex/io, @allFiles)); # Find subdirectory names (if any) ignoring hidden directories and # directories without index files. Directories should have index # files since our find goes from the bottom up and we should have # already processed the subdirectories. # # Only test files that are not in the allImageFiles list { my %tarray; my @dirfiles; my @tmp_dirNames = (); if ($opt_frames) { grep($tarray{$_}++, @allImageFiles); foreach $_ ( grep(! $tarray{$_},@allFiles) ) { #if( -f "${_}/${opt_indexname}" ) { # If directory & index file # exists then add to list if( -d "${_}" ) { # If directory exists unless ($opt_ignorefp && /^_[a-z]/) { # and we shouldn't ignore it push(@dirfiles, $_); # then add it to the list if ($opt_javascript) { # Check which index file to use for JavaScript if( -f "$_/$fileNames{'jsDirIndex'}" ) { $dirJsLink{"$_"} = $fileNames{'jsDirIndex'}; } elsif ( -f "$_/$opt_indexname" ){ $dirJsLink{"$_"} = $opt_indexname; } else { $dirJsLink{"$_"} = ''; } } } } } @tmp_dirNames = sort( sortDir @dirfiles); } if( "@dirNames" ne "@tmp_dirNames" ) { @dirNames = @tmp_dirNames; if ($opt_frames) { print( STDERR "Subdirectories have changed, must re-do HTML indexes\n" ) if $opt_debug; ++$doIndexHtml; } } if ($opt_javascript) { # Check which parent-directory index file to use for JavaScript if( -f "../$fileNames{'jsDirIndex'}" ) { $dirJsLink{".."} = $fileNames{'jsDirIndex'}; } elsif ( -f "../$opt_indexname" ){ $dirJsLink{".."} = $opt_indexname; } else { $dirJsLink{".."} = ''; } } } # # Determine the number of index pages to be generated, etc. # $numimages=scalar(@allImageFiles); # Number of images $numdirectories=scalar(@dirNames); # Number of subdirectories $numPages=int($numimages/$maxfiles); if ( $numimages%$maxfiles != 0 ) { ++$numPages; } # # Check for README file and set haveReadme flag if exists # if("${opt_readme}" ne '' && -f "${opt_readme}") { $haveReadme = 1; } # Set haveImages flag if there are images in directory. This # effects the way the directory listing appears. $haveImages = 0; if( $numimages > 0 ) { $haveImages = 1; } # # Determine page title # if( "$opt_title" ne '' ) { $pageTitle = $opt_title; } else { my $dirname=basename($sourceDirectory); $pageTitle = "${opt_msg_index_of_directory} \"$dirname\""; } # # Put the PerlMagick Montage options together # $montageArguments = ''; #"\n "; $montageArguments .= "background=>\'$opt_thumbbackground\',\n " if $opt_thumbbackground ne 'false'; $montageArguments .= "borderwidth=>\'$opt_thumbborderwidth\',\n "; $montageArguments .= "compose=>\'$opt_thumbcompose\',\n " if $opt_thumbcompose ne 'false'; $montageArguments .= "font=>\'$opt_thumbfont\',\n " if $opt_thumbfont ne 'false'; $montageArguments .= "foreground=>\'$opt_thumbforeground\',\n " if $opt_thumbforeground ne 'false'; $montageArguments .= "frame=>\'$opt_thumbframe\',\n " if $opt_thumbframe ne 'false'; $montageArguments .= "geometry=>\'${opt_thumbgeometry}\',\n " if $opt_thumbgeometry ne 'false'; $montageArguments .= "gravity=>\'$opt_thumbgravity\',\n " if $opt_thumbgravity ne 'false'; $montageArguments .= "shadow=>\'$opt_thumbshadow\',\n " if $opt_thumbshadow ne 'false'; $montageArguments .= "texture=>\'$opt_thumbtexture\',\n " if $opt_thumbtexture ne 'false'; $montageArguments .= "tile=>\'${opt_columns}x${opt_rows}\',\n "; $montageArguments .= "transparent=>\'$opt_thumbtransparent\'\n " if $opt_thumbtransparent ne 'false'; # Compute a conglomeration of all parameters that effect the # montage image to use for comparison with the parameters used in # the last run. { my $tmp_montageParameters = "$montageArguments"; $tmp_montageParameters .= "bordercolor=>\'$opt_thumbframebgcolor\',\n " if $opt_thumbframebgcolor ne 'false'; $tmp_montageParameters .= "mapnetscape=>\'$opt_mapnetscape\',\n "; $tmp_montageParameters .= "mattecolor=>\'$opt_thumbframecolor\',\n " if $opt_thumbframecolor ne 'false'; $tmp_montageParameters .= "label=>\'$opt_thumblabel\',\n " if $opt_thumblabel ne 'false'; $tmp_montageParameters .= "labelwidth=>\'$opt_thumblabelwidth\',\n "; $tmp_montageParameters .= "\Lzoomfilter=>\'$opt_zoomfilter\'"; if( !defined($montageParameters) || ($tmp_montageParameters ne $montageParameters)) { $montageParameters = $tmp_montageParameters; print( STDERR "Montage parameters have changed, must re-do montages\n" ) if $opt_debug; $opt_forcemontage=1; } } # # Store HTML options in associative array to make them easier to deal with # %htmlOpts = ( 'address' => $opt_address, 'anonymous' => $opt_anonymous, 'backgroundimg' => $opt_icons{'background'}, 'cachedir' => $opt_cachedir, 'coloralink' => $opt_coloralink, 'colorback' => $opt_colorback, 'colorfore' => $opt_colorfore, 'colorlink' => $opt_colorlink, 'colorvlink' => $opt_colorvlink, 'columns' => $opt_columns, 'config' => !$opt_javascript ? 0 : $opt_allowconfig, 'dateText' => !$opt_date ? "" : "${opt_msg_page_updated_on} $currentDate", 'dirbackgroundimg' => !$opt_frames ? "" : $opt_icons{'dirbackground'}, 'dircoloralink' => !$opt_frames ? "" : $opt_dircoloralink, 'dircolorback' => !$opt_frames ? "" : $opt_dircolorback, 'dircolorfore' => !$opt_frames ? "" : $opt_dircolorfore, 'dircolorlink' => !$opt_frames ? "" : $opt_dircolorlink, 'dircolorvlink' => !$opt_frames ? "" : $opt_dircolorvlink, 'dirfmt' => !$opt_frames ? "" : $opt_dirfmt, 'dirhtmlext' => !$opt_frames ? "" : $opt_dirhtmlext, 'dirindexname' => !$opt_frames ? "" : $opt_dirindexname, 'footer' => $opt_footer, 'frameddirfmt' => !$opt_frames ? "" : $opt_frameddirfmt, 'framemarginwidth' => !$opt_frames ? 0 : $opt_framemarginwidth, 'framemarginheight' => !$opt_frames ? 0 : $opt_framemarginheight, 'framebordersize' => !$opt_frames ? 0 : $opt_framebordersize, 'frameborder' => !$opt_frames ? "" : $opt_frameborder, 'frames' => $opt_frames, 'framestyle' => !$opt_frames ? 1 : $opt_framestyle, 'header' => $opt_header, 'htimage' => !$opt_serversidemap ? "" : $opt_htimage, 'htmlext' => !$opt_frames ? "" : $opt_htmlext, 'iconbase' => $opt_iconbase, 'imgindexname' => $opt_imgindexname, 'indexname' => $opt_indexname, 'javascript' => $opt_javascript, 'jsdirindex' => !$opt_javascript ? "" : $fileNames{'jsDirIndex'}, 'jsfunctions' => !$opt_javascript ? "" : $fileNames{'jsFunctions'}, 'jspageindex' => !$opt_javascript ? "" : $fileNames{'jsPageIndex'}, 'jsvariables' => !$opt_javascript ? "" : $fileNames{'jsVariables'}, 'metaauthor' => $opt_metaauthor, 'metacharset' => $opt_metacharset, 'metaclassification' => $opt_metaclassification, 'metadescription' => $opt_metadescription, 'metaexpires' => $opt_metaexpires, 'metakeywords' => $opt_metakeywords, 'msg_copyright' => $opt_anonymous ? "" : $opt_msg_copyright, 'msg_directories' => !$opt_frames ? "" : $opt_msg_directories, 'msg_directory_navigator' => !$opt_frames ? "" : $opt_msg_directory_navigator, 'msg_images' => !$opt_frames ? "" : $opt_msg_images, 'msg_index_of_directory' => $opt_msg_index_of_directory, 'msg_index_of_files' => $opt_msg_index_of_files, 'msg_index_through' => $opt_msg_index_through, 'msg_next' => $opt_msg_next, 'msg_page_navigator' => !$opt_frames ? "" : $opt_msg_page_navigator, 'msg_prev' => $opt_msg_prev, 'msg_produced_by' => $opt_anonymous ? "" : $opt_msg_produced_by, 'msg_readme' => !$haveReadme ? "" : $opt_msg_readme, 'msg_up' => $opt_msg_up, 'numpages' => $numPages, 'pageindexname' => $opt_pageindexname, 'pichtml' => $opt_pichtml, 'pichtmlbottom' => !$opt_pichtml ? "" : $opt_pichtmlbottom, 'pichtmlext' => !$opt_pichtml ? "" : $opt_pichtmlext, 'pichtmlnav' => !$opt_pichtml ? 0 : $opt_pichtmlnav, 'pichtmlputtitle' => !$opt_pichtml ? 0 : $opt_pichtmlputtitle, 'pichtmltarget' => (!$opt_pichtml || !$opt_frames) ? "" : $opt_pichtmltarget, 'pichtmltitleend' => !$opt_pichtml ? "" : $opt_pichtmltitleend, 'pichtmltitlestart' => !$opt_pichtml ? "" : $opt_pichtmltitlestart, 'pichtmltop' => !$opt_pichtml ? "" : $opt_pichtmltop, 'prefixpath' => $opt_prefixpath, 'readme' => !$haveReadme ? "" : $opt_readme, 'readmepresent' => $haveReadme, 'readmevisible' => !$haveReadme ? 0 : $opt_readmevisible, 'rows' => $opt_rows, 'serversidemap' => $opt_serversidemap, 'stylesheet' => $opt_stylesheet, 'subdirectories' => !$opt_frames ? "" : join(' ',@dirNames), 'tables' => $opt_tables, 'title' => $pageTitle, 'version' => $webmagickInfo{'version'}, ); # Compute a conglomeration of all parameters that effect the HTML # to use for comparison with the parameters used in the last run. { my $firstparam = 1; my $tmp_htmlParams = ''; my $key; foreach $key (sort(keys(%htmlOpts))) { if(defined($htmlOpts{$key})) { if( $firstparam ) { $firstparam = 0; } else { $tmp_htmlParams .= ",\n "; } $tmp_htmlParams .= $key . '=>\'' . $htmlOpts{$key} . '\''; } } if( !defined($htmlParams) || ($tmp_htmlParams ne $htmlParams)) { $htmlParams = $tmp_htmlParams; print( STDERR "HTML parameters have changed, must re-do HTML\n" ) if $opt_debug; $opt_forcehtml=1; } } # # Print statistics message # print( STDERR " $numimages Images $numdirectories Directories", " $numPages Pages --- " ) if $opt_verbose; my @imgfiles = @allImageFiles; # Save full list of files for later # Loop through file list, placing a maximum of $maxfiles images on # each page. Do at least one page (there might not be any # images). while (scalar(@allImageFiles) > 0 || $pageNumber == 1) { $doMontage=0; # Set to true if montage must be generated $doPageHtml=0; # Set to true if per-page HTML files must be generated print(STDERR " $pageNumber" ) if $opt_verbose; # # Get per-page image names # @imageNames is a list of lists { my @tmp_imageNames = splice(@allImageFiles,0,$maxfiles); if( !defined($imageNames[$pageNumber - 1]) || ("@tmp_imageNames" ne "@{$imageNames[$pageNumber - 1]}") ) { $imageNames[$pageNumber - 1] = [ @tmp_imageNames ]; print( STDERR "Need to do both montage and page HTML because", " file list differs\n") if $opt_debug; ++$doMontage; ++$doPageHtml; } } my $numfiles = $#{$imageNames[$pageNumber - 1]} + 1; setFileNames(); # Set current file names # # Decide if we need to do HTML & montage # if ( $perlVarsVersion < $requiredPerlVarsVersion) { print ( STDERR "Need to do montage, HTML and cache because", " version has changed\n") if $opt_debug; $opt_forcehtml = 1; $opt_forcemontage = 1; $opt_forcecache = 1; } # Montage specific checks # Check for missing output files # Check for new input files if( $numfiles > 0 ) { if( ! $opt_tables && (! -f $fileNames{'pageStatus'} || ( ! -f $fileNames{'montageGIF'} && ! -f $fileNames{'montageJPEG'} ))) { # If key file is missing then do montage print(STDERR "\nMust do montage because a required output", " file is missing\n") if $opt_debug; ++$doMontage; } else { # If any file in file list is newer than status file, # then do montage my $file; foreach $file (@{$imageNames[$pageNumber - 1]}) { if( fmtime($file) > $pageStatusTime ) { print( STDERR "Need to do both montage and HTML", " because file has been updated\n") if $opt_debug; ++$doMontage; ++$doPageHtml; print(STDERR "\nMust do montage and html: file", " updated\n") if $opt_debug; } } } } die("Empty \$opt_indexname set with \$opt_frames\n$@\n") if ($opt_frames && "$opt_indexname" eq ''); # HTML specific checks # Check for missing files if( ! -f $fileNames{'pageStatus'} || ! -f $fileNames{'htmlCurrentIndex'} || ($opt_frames && ! -f "$opt_indexname")) { # If key file is missing then do HTML print(STDERR "\n Must do page and index HTML: output file", " missing\n") if $opt_debug; ++$doPageHtml; ++$doIndexHtml if ($opt_frames); } # Overrides if( $opt_forcehtml ) { ++$doPageHtml; ++$doIndexHtml if ($opt_frames); } if( $opt_forcemontage ) { ++$doPageHtml; # Montage effects HTML output ++$doMontage; } my $errorstat = 1; # Cleared for non-error block exit PAGES: { # # Build montage for current page # if( $doMontage && ( $numfiles > 0 ) ) { doMontage(@{$imageNames[$pageNumber - 1]}) && last PAGES; # Determine image name & size to use for imagemap { my $montageImage; my $montageImageSize; if( -f $fileNames{'montageGIF'} ) { $montageImage = $fileNames{'montageGIF'}; # Use GIF $montageImageSize = html_imgsize($fileNames{'montageGIF'}); } elsif ( -f $fileNames{'montageJPEG'} ) { $montageImage = $fileNames{'montageJPEG'}; # Use JPEG $montageImageSize = html_imgsize($fileNames{'montageJPEG'}); } if(!defined($montageImages[$pageNumber - 1]) || ( $montageImages[$pageNumber - 1] ne $montageImage )) { $montageImages[$pageNumber - 1] = $montageImage; print( STDERR "Need to re-do page HTML because montage image name ", "has changed\n") if $opt_debug; ++$doPageHtml; } if(!defined($montageImageSizes[$pageNumber - 1]) || ( $montageImageSizes[$pageNumber - 1] ne $montageImageSize )) { $montageImageSizes[$pageNumber - 1] = $montageImageSize; print( STDERR "Need to re-do page HTML because montage image size ", "has changed\n") if $opt_debug; ++$doPageHtml; } } } # # Write out page index files for current page # if( $doPageHtml ) { writeIndexFiles(); } # Write server-side imagemap file if( $opt_serversidemap && $doPageHtml && ( $numfiles > 0 ) ) { writeImageMap(); } if ( $doPageHtml || $doIndexHtml || $doMontage ) { # # Save run status (source files and montage options) # writePerlIndexFiles(); if( $opt_javascript ) { writeJavaScriptIndexFiles(); } } # Clear error flag $errorstat = 0; } print( STDERR "Error encountered when creating page\n" ) if $errorstat; ++$pageNumber; # Next page } print( STDERR "\n" ) if $opt_verbose; # # Clean up old files # setFileNames(); while( -f $fileNames{'htmlCurrentIndex'} || -f $fileNames{'montageGIF'} || -f $fileNames{'montageJPEG'} || -f $fileNames{'montageServerMap'} ) { unlink( $fileNames{'htmlCurrentIndex'}, $fileNames{'montageGIF'}, $fileNames{'montageJPEG'}, $fileNames{'montageServerMap'} ); ++$pageNumber; # Next page setFileNames(); } # # Clean up cached thumbnails # if( $opt_cache && -d $opt_cachedir ) { opendir( CACHEDIR, "$opt_cachedir") || die("$0: Failed to open directory $opt_cachedir\n$@\n"); @cacheFiles = grep(!/$excludeRegex/io,readdir( CACHEDIR )); closedir( CACHEDIR ); } { my @extra; my %tarray; grep( $tarray{$_}++, @imgfiles ); @extra = grep( $_ = "$opt_cachedir/$_", grep( ! $tarray{$_}, @cacheFiles )); print( STDERR "Removing extra cache files @extra\n") if $opt_debug; unlink( @extra ); } # # Write out index files (Both main index and frames index files) # if( $doIndexHtml ) { writeTopIndexes(); } # remove lockfile # unlink $opt_lockfile; } # # Write out both top index and frame index files # sub writeTopIndexes { die("Internal error: writeTopIndexes called when \$opt_frames is not set\n$@\n") if (!$opt_frames); die("Empty \$opt_indexname set with \$opt_frames\n$@\n") if ("$opt_indexname" eq ''); print( STDERR "Writing Index Files ${opt_indexname} & ", "${opt_pageindexname}dir${opt_dirhtmlext} ...\n" ) if $opt_debug; #---- Generate the Variables for Format Options ---- # # Generate HTML for up link # my $uphtml = ''; # get indexname of parent directory my $upindexname = get_rc_var('..', 'opt_indexname', "$opt_indexname"); unless ( "$upindexname" eq 'NOLINK' ) { $uphtml = "" . " ${opt_msg_up}
\n"; } # # Generate HTML for help link # my $helphtml = ''; if( $haveReadme ) { $helphtml .= "" . " ${opt_msg_readme}
\n"; } # # Compute HTML for link to first image page # my $nexthtml = ''; if( $haveReadme && $haveImages && $opt_framefmt_frames{$opt_framestyle}<=2 ) { $nexthtml .= "" . " ${opt_msg_images}
"; } # # Compute HTML for directory list # my $dirhtml = ''; if( !$opt_prune && scalar(@dirNames) > 0 ) { $dirhtml = "

${opt_msg_directories}

\n"; my $subdir; foreach $subdir (@dirNames) { # ignore frontpage directories if ($opt_ignorefp && $subdir =~ /^_[a-z]/) { next; } # If an alternative name is defined, then use it my $dirtitle; if( defined( $dirTitles{$subdir} ) ) { $dirtitle=$dirTitles{$subdir}; } else { $dirtitle=$subdir; } # get indexname for sub-directory (default as this directory) my $subindexname = get_rc_var($subdir, 'opt_indexname', "$opt_indexname"); unless ( "$subindexname" eq 'NOLINK' ) { my $url = escapeurl("$subdir/${subindexname}"); $dirhtml .= '
'; # If a bullet icon is defined, then use it # otherwise use plain text only if( defined( $iconImageUrls{'ball'} ) ) { $dirhtml .= "\"*\""; } $dirhtml .= "$dirtitle
\n"; } } } # # Generate HTML for page index list # my $pageindexhtml = ''; if( $haveImages ) { $pageindexhtml = "

${opt_msg_page_navigator}

\n"; my $i; for( $i=1; $i <= $numPages; ++$i ) { $pageindexhtml .= " ${i}
\n"; } } # ----- Evaluate the Format Options ----- # # Evaluate the Top Index File Format Option # my $indexhtml; $indexhtml = eval '"' . $opt_dirfmt . '"'; die( "Bad Eval of directory page template (\$opt_dirfmt)\n$@\n" ) if $@; # Change header to plain bold text for framed directory file $dirhtml =~ s|^

${opt_msg_directories}

\n|${opt_msg_directories}
\n|; $pageindexhtml =~ s|^

${opt_msg_page_navigator}

\n|${opt_msg_page_navigator}
\n|; # # Evaluate the Framed Directory File Format Option # my ($pagedirhtml, $dirframelink, $pageframelink); $pagedirhtml = eval '"' . $opt_frameddirfmt . '"'; die( "Bad Eval for directory page template (\$opt_frameddirfmt)\n$@\n" ) if $@; # # Pull README into thumbnail frame if it exists, and is # either marked always visible or there are no images. # $dirframelink = "${opt_pageindexname}dir${opt_dirhtmlext}"; if( $opt_framefmt_frames{$opt_framestyle} <= 2 ) { if( $haveReadme && ( $opt_readmevisible || ! $haveImages ) ) { # Point to README.html $pageframelink = $opt_readme; } else { # Point to first image page $pageframelink = "${opt_pageindexname}1$opt_htmlext"; } } else { if( $haveReadme && $opt_readmevisible ) { # Point to README.html $pageframelink = "${opt_pageindexname}1$opt_htmlext"; $imageFrameLink = $opt_readme; } else { # Point to first image page $pageframelink = "${opt_pageindexname}1$opt_htmlext"; $imageFrameLink = $fileNames{'htmlBlankPage'}; } } # # Evaluate the Frame Format Option # my $framespechtml = eval '"' . $opt_framefmt{$opt_framestyle} . '"'; die( "Bad Eval for Frame template (\$opt_framefmt{$opt_framestyle})\n$@\n" ) if $@; # # Evaluate the JavaScript version of the Frame Format # # Override normal frame targets if ($opt_javascript) { $dirframelink = q/javascript:parent.returnDirectoryHTML();/; $pageframelink = q/javascript:parent.returnThumbNailsHTML();/; $imageFrameLink = q/javascript:parent.returnImageHTML(0);/; my $framespecjshtml = eval '"' . $opt_framefmt{$opt_framestyle} . '"'; die( "Bad Eval for Frame template (\$opt_framefmt{$opt_framestyle})\n$@\n" ) if $@; } # ----- Output Top Index File (usually "index.html") ------- # open( INDEX, ">${opt_indexname}") || die("$0: Failed to open file ${opt_indexname} for output\n$@\n"); print( INDEX "\n\n" ); # Charset is better before title print( INDEX " \n" ) if( "$opt_metacharset" ne '' ); print( INDEX " ${pageTitle}\n" ); # Meta tags print( INDEX " \n" ); print( INDEX " \n" ) if( "$opt_metaauthor" ne '' ); print( INDEX " \n" ) if( "$opt_metadescription" ne '' ); print( INDEX " \n" ) if( "$opt_metakeywords" ne '' ); print( INDEX " \n" ) if( "$opt_metaclassification" ne '' ); # The value of $opt_metaexpires should be similar to: # "Tue, 20 Aug 1996 14:25:27 GMT" print( INDEX " \n" ) if( "$opt_metaexpires" ne '' ); print( INDEX " \n") if ("$opt_stylesheet" ne ''); # If in JavaScript mode, output code to switch to JavaScript pages # Currently knows about certain browsers. if( $opt_javascript ) { print( INDEX '\n" ); } print( INDEX "\n" ); print( INDEX $framespechtml ); print( INDEX "\n" ); print( INDEX "<BODY\n" ); unless ("$opt_stylesheet" ne '') { print( INDEX " TEXT=\"${opt_colorfore}\"\n" ); print( INDEX " BGCOLOR=\"${opt_colorback}\"\n" ) if $opt_colorback ne 'false'; print( INDEX " BACKGROUND=\"$iconImageUrls{background}\"\n" ) if defined $iconImageUrls{background}; print( INDEX " LINK=\"${opt_colorlink}\"\n" ); print( INDEX " VLINK=\"${opt_colorvlink}\"\n" ); print( INDEX " ALINK=\"${opt_coloralink}\""); } print( INDEX ">\n" ); print( INDEX $indexhtml ); print( INDEX "</BODY>\n\n" ); close( INDEX ); # ----- Output Top JavaScript Index File (usually "indexjs.html") ------- # if( $opt_javascript ) { open( INDEX, ">$fileNames{'jsDirIndex'}") || die("$0: Failed to open file $fileNames{'jsDirIndex'} for output\n$@\n"); print( INDEX "\n" ); print( INDEX "\n" ); print( INDEX "\n" ); print( INDEX q/! . "\n" ); print( INDEX q/! . "\n" ); print( INDEX "\n" ); print( INDEX "\n" ); close( INDEX ); } # ----- Output Frame Directory File (usally ".indexdir.html") ------ # open( INDEX, ">${opt_pageindexname}dir${opt_dirhtmlext}") || die("$0: Failed to open file \"${opt_pageindexname}dir${opt_dirhtmlext}\"", " for output\n$@\n"); print( INDEX "\n\n" ); # Charset is better before title print( INDEX " \n" ) if( "$opt_metacharset" ne '' ); print( INDEX " ${pageTitle}\n" ); # Default URL target print( INDEX " \n" ); # Meta tags print( INDEX " \n" ); print( INDEX " \n" ) if( "$opt_metaauthor" ne '' ); print( INDEX " \n" ) if( "$opt_metadescription" ne '' ); print( INDEX " \n" ) if( "$opt_metakeywords" ne '' ); print( INDEX " \n" ) if( "$opt_metaclassification" ne '' ); # The value of $opt_metaexpires should be similar to: # "Tue, 20 Aug 1996 14:25:27 GMT" print( INDEX " \n" ) if( "$opt_metaexpires" ne '' ); print( INDEX " \n") if ("$opt_stylesheet" ne ''); print( INDEX "\n" ); print( INDEX "\n"); print( INDEX $pagedirhtml ); print( INDEX "\n" ); close( INDEX ); return ( 0 ); } # # Write out page index files # sub writeIndexFiles { my $indexbar; # HTML text representing numeric selection bar my $errorstat = 0; print( STDERR "Writing file $fileNames{'htmlCurrentIndex'} ...\n" ) if $opt_debug; my $numimages = $#{$imageNames[$pageNumber - 1]} + 1; my $pNumber = ($pageNumber == 1) ? "" : "$pageNumber"; # Calculate page index bar # No link for current page # Nothing at all when there is only one page. $indexbar = ""; # Must be visible at each page, if no frames if (!$opt_frames) { # --- readme link --- if ( $haveReadme ) { $indexbar .= "\n"; } # --- up link --- my $upindexname = get_rc_var('..', 'opt_indexname', "$opt_indexname"); if ( "$upindexname" ne 'NOLINK' ) { $indexbar .= "\n"; } } # --- prev link --- if( $pageNumber == 1 ) { if ($numPages > 1) { # Print a grayed out arrow to maintain alignment $indexbar .= "\"\"\n"; } } else { # Go to preceding page $indexbar .= "\n"; } # --- next link --- if( $numPages > 1 ) { if( $pageNumber < $numPages ) { $indexbar .= "\n"; } else { # Print a grayed out arrow to maintain alignment $indexbar .= "\"\"\n"; } } $indexbar .= ""; # --- page links --- if( $numPages > 1 ) { my $page; for ( $page = 1; $page <= $numPages; ++$page) { if ( $page != $pageNumber ) { if ($opt_frames) { $indexbar .= "$fileNames{'htmlCurrentIndex'}") || die("$0: Failed to open file $fileNames{'htmlCurrentIndex'} for output\n$@\n"); print( INDEX "\n\n" ); # Charset is better before title print( INDEX " \n" ) if( "$opt_metacharset" ne '' ); print( INDEX " ${pageTitle}\n" ); print( INDEX " \n" ) if ($opt_frames); # Meta tags print( INDEX " \n" ); print( INDEX " \n" ) if( "$opt_metaauthor" ne '' ); print( INDEX " \n" ) if( "$opt_metadescription" ne '' ); print( INDEX " \n" ) if( "$opt_metakeywords" ne '' ); print( INDEX " \n" ) if( "$opt_metaclassification" ne '' ); # The value of $opt_metaexpires should be similar to: # "Tue, 20 Aug 1996 14:25:27 GMT" print( INDEX " \n" ) if( "$opt_metaexpires" ne '' ); print( INDEX " \n") if ("$opt_stylesheet" ne ''); print( INDEX "\n" ); print( INDEX "\n"); print( INDEX "${opt_header}\n" ) if ("$opt_header" ne ''); # Leave page blank unless there is something to show if( $numimages > 0 ) { # Total HACK!!! if( !$opt_frames || $opt_framestyle == 1 ) { print( INDEX "

${opt_msg_index_of_files}\"$imageNames[$pageNumber - 1][0]\" ${opt_msg_index_through}", " \"$imageNames[$pageNumber - 1][$numimages-1]\"

\n" ); } print( INDEX "$indexbar
\n" ); if ($opt_tables) { print INDEX ""; } else { # # Add image map info to html file # my $mapname = "thumbnails"; if ($opt_serversidemap) { if ( "${opt_htimage}" ne '' ) { print( INDEX "\n" ); } else { print( INDEX "\n"); } } print( INDEX "" ); print( INDEX "" ) if ($opt_serversidemap); print( INDEX "\n\n" ); } # unless ( $opt_tables ) my $imageNum; for( $imageNum = 0; $imageNum <= $#{$imageNames[$pageNumber - 1]}; ++$imageNum ) { my $pic = $imageNames[$pageNumber - 1][$imageNum]; my $pichtml; my $target = ''; if ($opt_pichtml && $opt_frames && "$opt_pichtmltarget" ne '') { $target = " TARGET=\"${opt_pichtmltarget}\""; } if ( $opt_pichtml ) { $pichtml = $pic . $opt_pichtmlext; open( PICHTML, ">$pichtml") || die("$0: Failed to open file $pichtml for output\n$@\n"); print( PICHTML "\n\n" ); # Charset is better before title print( PICHTML " \n" ) if( "$opt_metacharset" ne '' ); print( PICHTML " $pic\n" ); # Meta tags print( PICHTML " \n" ); print( PICHTML " \n" ) if( "$opt_metaauthor" ne '' ); print( PICHTML " \n" ) if( "$opt_metadescription" ne '' ); print( PICHTML " \n" ) if( "$opt_metakeywords" ne '' ); print( PICHTML " \n" ) if( "$opt_metaclassification" ne '' ); # The value of $opt_metaexpires should be similar to: # "Tue, 20 Aug 1996 14:25:27 GMT" print( PICHTML " \n" ) if( "$opt_metaexpires" ne '' ); print( PICHTML " \n") if ("$opt_stylesheet" ne ''); print( PICHTML "\n" ); print( PICHTML "\n" ); print( PICHTML "$opt_pichtmltop") if ("$opt_pichtmltop" ne ''); if ($opt_pichtmlputtitle) { print ( PICHTML "${opt_pichtmltitlestart}"); if (defined( $imageLabels{$pic})) { print( PICHTML "$imageLabels{$pic}"); } else { print( PICHTML "$pic"); } print ( PICHTML "${opt_pichtmltitleend}"); } if ($opt_pichtmlnav) { print ( PICHTML "

"); # Must be visible at each page, if no frames if (!$opt_frames) { # --- readme link --- if ( $haveReadme ) { print (PICHTML "\n"); } } # up if (!$opt_frames || $opt_framestyle == 1) { if ($opt_frames) { print ( PICHTML "\"${opt_msg_up}\"\n"); } # prev if (($imageNum == 0) && ($pageNumber == 1)) { print ( PICHTML "\n"); } else { print ( PICHTML "\"${opt_msg_prev}\"\n"); } #next if (($pageNumber == $numPages) && ($imageNum == $#{$imageNames[$pageNumber - 1]})) { print ( PICHTML "\n"); } else { print ( PICHTML "\"${opt_msg_next}\"\n"); } print ( PICHTML "
"); } if ( $pic =~ /\.(jpg|jpeg?|gif|xbm|png)$/i ) { print( PICHTML "\"\"" ); } else { print( PICHTML "$pic ", fsize($pic), "" ); } print( PICHTML "$opt_pichtmlbottom\n") if ("$opt_pichtmlbottom" ne ''); print( PICHTML "\n" ); print( PICHTML "\n" ); close ( PICHTML ); unless ($opt_tables) { print( INDEX " \n" ); } } else { unless ($opt_tables) { print( INDEX " \n" ); } } if ($opt_tables) { if ($imageNum%$opt_columns == 0) { print INDEX "

"; } print INDEX "\n"); if ($imageNum%$opt_columns == ($opt_columns - 1)) { print INDEX ""; } } # if ($opt_tables) } # for each picture if ($opt_tables) { unless ($imageNum%$opt_columns == ($opt_columns - 1)) { print INDEX ""; } print (INDEX "
"; if ($opt_pichtml) { print (INDEX ""); } else { print (INDEX ""); } # TODO: make sure the thumbnails are created, and get some image sizes # TODO: save the labels in a new array, maybe same with sizes if ( $thumbImageSizes{$pic}) { print (INDEX ""); } else { print (INDEX ""); } print (INDEX "
" . $tableImageLabels{$imageNames[$pageNumber - 1][$imageNum]} . "
\n") } else {print( INDEX "\n" );} } print( INDEX "${opt_footer}\n" ) if ("$opt_footer" ne ''); # Print Copyright info on non-blank pages. if( $numimages > 0 ) { if( "${opt_address}" ne '' ) { print( INDEX "
${opt_address}
\n" ); } if( "$htmlOpts{'dateText'}" ne '' || !$opt_anonymous) { print( INDEX "" ); } if( "$htmlOpts{'dateText'}" ne '' ) { print( INDEX "
$htmlOpts{'dateText'}\n" ); } # If anonymous, don't show copyright and address info if( ! $opt_anonymous ) { print( INDEX "
\n${opt_msg_produced_by} " ); print( INDEX "WebMagick" ); print( INDEX " $webmagickInfo{version}, ${opt_msg_copyright}© Bob Friesenhahn\n" ); } if( "$htmlOpts{'dateText'}" ne '' || !$opt_anonymous) { print( INDEX "
\n" ); } } print( INDEX "\n" ); print( INDEX "\n" ); # Close current HTML index file close( INDEX ); return ( $errorstat ); } # # Write out JavaScript index files # sub writeJavaScriptIndexFiles { print("Writing JavaScript status file: $fileNames{'jsPageIndex'}\n") if $opt_debug; # # Write JavaScript "index" page. # This page loads JavaScript source files and ensures that windows are drawn # open( JSINDEX, ">$fileNames{'jsPageIndex'}") || die("$0: Failed to open file $fileNames{'jsPageIndex'} for output\n$@\n"); print( JSINDEX "\n"); print( JSINDEX "\n"); print( JSINDEX "\n"); print( JSINDEX "\n"); print( JSINDEX "\n"); print( JSINDEX "\n"); print( JSINDEX "\n"); print( JSINDEX "\n"); print( JSINDEX "\n"); close( JSINDEX ); # # JavaScript Variable definitions # open( JSVARS, ">$fileNames{'jsVariables'}") || die("$0: Failed to open file $fileNames{'jsVariables'} for output\n$@\n"); print( JSVARS "//\n// WebMagick Run Status File -- JavaScript Format\n//\n" ); # # Directory global variables # print( JSVARS "//\n// Directory-global definitions\n//\n\n" ); # Subdirectory names print( JSVARS "\n// subdirectory names\n", jsArray( 'dirNames', @dirNames ) ); # Subdirectory titles print( JSVARS "\n// subdirectory titles\n", jsHash( 'dirTitles', \%dirTitles ) ); # Subdirectory links print( JSVARS "\n// subdirectory links\n", jsHash( 'dirLinks', \%dirJsLink ) ); # Image labels print( JSVARS "\n// image titles\n", jsHash( 'imageLabels', \%imageLabels ) ); # Image labels #print( JSVARS "\n// table image titles\n", jsHash( 'tableImageLabels', \%tableImageLabels ) ); print( JSVARS "\n// table image titles\n", jsHashToDouble( 'imLabels', \%tableImageLabels ) ); # Montage options ($montageParameters) # print( JSVARS "\n// montage parameters\n", # jsVariable( 'montageParameters', \$montageParameters) ); # HTML options print( JSVARS "\n// HTML options\n", jsHash( 'htmlOpts', \%htmlOpts ) ); # Icon URLs print( JSVARS "\n// icon URLs\n", jsHash( 'iconImageUrls', \%iconImageUrls ) ); # Icon sizes print( JSVARS "\n// icon sizes\n", jsHash( 'iconImageSizes', \%iconImageSizes ) ); # Thumbnail image sizes #print( JSVARS "\n// thumb sizes\n", # jsHash( 'thumbImageSizes', \%thumbImageSizes ) ); print ( JSVARS "\n// thumb sizes \n", jsSizes( 'thumb', \%thumbImageSizes ) ); # # Page specific variables # print( JSVARS "\n//\n// Page-Specific variable definitions\n//\n" ); # Generated File names # print( JSVARS "\n// file names\n", # jsHash( 'fileNames', \%fileNames ) ); # Image names print( JSVARS "\n// image names (imageNames[page number][image number])\n", jsDoubleArray( 'imageNames', @imageNames) ); # Image thumbnail map (co-ordinate) information (@imageThumbCoords) print( JSVARS "\n// thumbnail coordinates (imageThumbCoords[page number])\n", jsDoubleArray( 'imageThumbCoords', @imageThumbCoords ) ); # Montage image names (@montageImages) already in per-page array form print( JSVARS "\n// montage image names (montageImages[page number])\n", jsArray( 'montageImages', @montageImages) ); # Montage image sizes (@montageImageSizes) already in per-page array form print( JSVARS "\n// montage image sizes (montageImageSizes[page number])\n", jsArray( 'montageImageSizes', @montageImageSizes) ); # Set flag to indicate this file completely loaded print( JSVARS "\nvar jsVarsLoaded = 1;\n" ); close( JSVARS ); print("Done writing JavaScript\n") if $opt_debug; } # # Write out PERL-format run-status file # sub writePerlIndexFiles { open( PERLVARS, ">$fileNames{'pageStatus'}" ) || die( "Unable to open file $fileNames{'pageStatus'}!\n$@\n" ); print(STDERR "Writing PERL status file: $fileNames{'pageStatus'}\n") if $opt_debug; print( PERLVARS "#\n# WebMagick Run Status File -- PERL Format\n#\n\n" ); # # Directory global variables # print( PERLVARS "#\n# Directory-global definitions\n#\n" ); # Subdirectory names (@dirNames) print( PERLVARS "\n# subdirectory names\n", plArray( 'dirNames', @dirNames ) ); # Subdirectory titles print( PERLVARS "\n# subdirectory titles\n", plHash( 'dirTitles', \%dirTitles ) ); # Image labels print( PERLVARS "\n# image titles\n", plHash( 'imageLabels', \%imageLabels ) ); # Table image labels print( PERLVARS "\n# table image titles\n", plHash( 'tableImageLabels', \%tableImageLabels ) ); # Montage options ($montageParameters) print( PERLVARS "\n# montage parameters\n", plVariable( 'montageParameters', \$montageParameters) ); # HTML options ($htmlParams) print( PERLVARS "\n# HTML options\n", plVariable( 'htmlParams', \$htmlParams ) ); # Icon URLs print( PERLVARS "\n# icon URLs\n", plHash( 'iconImageUrls', \%iconImageUrls ) ); # Icon sizes print( PERLVARS "\n# icon sizes\n", plHash( 'iconImageSizes', \%iconImageSizes ) ); # Thumb sizes print( PERLVARS "\n# thumb sizes\n", plHash( 'thumbImageSizes', \%thumbImageSizes ) ); # # Page-Specific variable definitions # print( PERLVARS "\n#\n# Page-specific variables\n#\n" ); # Image names (@imageNames) print( PERLVARS "\n# image names (\$imageNames[page number][image number])\n", plDoubleArray( 'imageNames', @imageNames) ); # Image thumbnail map (co-ordinate) information (@imageThumbCoords) print( PERLVARS "\n# thumbnail coordinates (\$imageThumbCoords[page number][thumb number])\n", plDoubleArray( 'imageThumbCoords', @imageThumbCoords ) ); # Montage image names (@montageImages) already in per-page array form print( PERLVARS "\n# montage image names (\$montageImages[page number])\n", plArray( 'montageImages', @montageImages ) ); # Montage image sizes (@montageImageSizes) already in per-page array form print( PERLVARS "\n# montage image sizes (\$montageImageSizes[page number])\n", plArray( 'montageImageSizes', @montageImageSizes ) ); # Indicate the version used for processing # This way we can regenerate things if we need a newer version print (PERLVARS "\n\$perlVarsVersion = $requiredPerlVarsVersion;\n" ); # Set flag to indicate this file completely loaded print( PERLVARS "\n\$perlVarsLoaded = 1;\n" ); close( PERLVARS ); } # # Build montage using PerlMagick # sub doMontage { my $errorstat = 1; # Started with "failed" status use Image::Magick; my ( $imagename, # Image name $image, # An individual image $montage, # Montage of images $newthumb, # Set to 1 if new thumbnail $status, # Return status $thumbs # Thumbnail array ); # If we need to, then do the expensive stuff Build index # files via PerlMagick's Montage operation. Go out of our # way to avoid problems with multi-image files. JPEG does not # support transparency but we fudge by setting the # background color in the JPEG file to the page color. # Hopefully browsers that support JPEG also support # setting the background unlink( $fileNames{'montageGIF'}, $fileNames{'montageJPEG'}, ); # # If caching thumbnails then ensure that directory exists # mkdir( $opt_cachedir, 0755 ) if ! -d $opt_cachedir; # Read images into PerlMagick object print( STDERR "\nReading images: ", join(' ', @{$imageNames[$pageNumber - 1]}), "\n" ) if $opt_debug; # Allocate thumbnail image $thumbs = Image::Magick->new; # Allocate scratch image $image = Image::Magick->new; # Allocate and read Netscape map image (Netscape 216 color cube) # No need to do an allocation if we are not doing the mapping. if ($opt_mapnetscape) { $netscapeColormap = Image::Magick->new; $status = $netscapeColormap->Read('netscape:'); handleMagickError( __FILE__, __LINE__, 'netscape:', $status) if "$status"; } MONTAGE: { READ: foreach $imagename (@{$imageNames[$pageNumber - 1]}) { my ( $width, # Image width $height, # Image height $base_columns, # Original width $base_rows, # Original height $class, # Image class $comment, # Image comment $depth, # Image color depth $filesize, # Image file size $magick, # Image magick ); # # Handle thumbnail cache # my $cachename = "$opt_cachedir/$imagename"; $newthumb = 1; # Start presuming that thumbnail is new # If we are caching, and cache thumbnail exists and is newer then use it # always make cache if doing tables, or if version is not correct if ( ($opt_cache || $opt_tables) && ! $opt_forcecache && -f $cachename && (fmtime($cachename) >= fmtime($imagename))) { # Read image print( STDERR "Reading $cachename ...\n" ) if $opt_debug; $status = $image->Read("$cachename"); if("$status") { undef @$image; # Only delete image data, not object handleMagickError( __FILE__, __LINE__, $cachename, $status); next READ; # Try to read next image } # Obtain original image parameters $comment = $image->Get("comment"); if ($comment =~ # xv 3.00 & 3.10 format /IMGINFO:(\d+)x(\d+) (\S+) file\s+\((\d+) bytes\)/ ) { $width = $1; $height = $2; $magick = $3; $filesize = $4; } else { print( STDERR "Failed to grock image info from thumbnail ${cachename}!\n", "Removing cache file ...\n" ); print( STDERR "Run WebMagick again to re-generate the thumbnail.\n" ); print( STDERR "If problem continues then your ImageMagick is out of date.\n" ); unlink( $cachename ); } # Indicate that thumbnail came from cache $newthumb = 0; } else { # Otherwise, read and scale image # Set desired image read size. The JPEG library will # read and return a reduced image which is at least # the size specified (it returns a number of standard # scaled sizes) but not smaller. # This uses a feature available in PerlMagick 1.12 and beyond $status = $image->Set(size=>$opt_thumbgeometry); handleMagickError( __FILE__, __LINE__, "$opt_thumbgeometry", $status) if "$status"; # Read image print( STDERR "Reading ${imagename}\[0\] ...\n" ) if $opt_debug; $status = $image->Read("${imagename}\[0\]"); if("$status" && handleMagickError( __FILE__, __LINE__, $imagename, $status)) { undef @$image; # Only delete image data, not object print("Trying next image ...\n" ); next READ; # Try to read next image } } # Scale image and obtain original parameters if not from cache if( $newthumb ) { # # Apply any PerlMagick operations specified by $opt_thumbprehook # if( $opt_thumbprehook ) { print("Evaluating thumbnail pre-hook ...\n$opt_thumbprehook\n" ) if $opt_debug; eval $opt_thumbprehook; } # Obtain image parameters ( $width, $height, $filesize, $magick, $class, $depth ) = $image->Get( 'width', 'height', 'filesize', 'magick', 'class', 'depth'); if( $opt_debug ) { print("Image: ${width}x${height} $class $filesize bytes $magick $depth bits\n"); } # Obtain original image size. This uses a feature # available in PerlMagick 1.12 and beyond. If the # feature is not supported then undefined values # should be returned. ($base_columns, $base_rows) = $image->Get('base-columns', 'base-rows'); if( defined($base_columns) && defined($base_rows) ) { $width = $base_columns; $height = $base_rows; print("Saving original image size ${base_columns}x${base_rows}\n") if $opt_debug; } my $geometry; if( $opt_cache ) { $geometry = $opt_cachegeom; } else { $geometry = $opt_thumbgeometry; } my $opt_sampling = 0; # Set to 1 to enable sampling if( $class eq 'PseudoClass' && $opt_sampling ) { print( STDERR "Sampling $imagename to geometry \"${geometry}>\" ...\n") if $opt_debug; $status = $image->Sample(geometry=>"${geometry}>"); } else { print( STDERR "Zooming $imagename with geometry \"${geometry}>\" ...\n") if $opt_debug; $status = $image->Zoom(filter=>"${opt_zoomfilter}", blur=>0.6, geometry=>"${geometry}>" ); } if("$status") { undef @$image; # Only delete image data, not object handleMagickError( __FILE__, __LINE__, $imagename, $status); next READ; # Try to read next image } } # # Apply any PerlMagick operations specified by $opt_thumbposthook # if( $opt_thumbposthook ) { print("Evaluating thumbnail post-hook ...\n$opt_thumbposthook\n" ) if $opt_debug; eval $opt_thumbposthook; } # If we are caching, thumbnail is new, and image is # large enough, then write it to thumbnail cache # if we are using tables, then we cache as long as it's new if( ($opt_cache || $opt_tables) && $newthumb && ((($width*$height) > $opt_cachemin) || $opt_tables)) { my $comment="IMGINFO:${width}x${height} ${magick} file (${filesize} bytes)"; print( STDERR "Applying image comment:\n${comment}\n") if $opt_debug; # Apply comment to thumbnail image $status = $image->Comment( $comment ); handleMagickError( __FILE__, __LINE__, $cachename, $status) if "$status"; print( STDERR "Writing ${cachename} with format ${opt_cacheformat} ...\n" ) if $opt_debug; # # Give JPEG files special treatment # if( $opt_cacheformat eq 'JPEG' || $opt_cacheformat eq 'JPG' ) { $status = $image->Write( filename=>"${opt_cacheformat}:${cachename}", interlace=>'None', quality=>85 ); } else { $status = $image->Write( filename=>"${opt_cacheformat}:${cachename}" ); } handleMagickError( __FILE__, __LINE__, $cachename, $status) if "$status"; # TODO: for some reason, the output looks like these are getting put in twice, once with .cache/ $thumbImageSizes{$imagename} = html_imgsize($cachename); } } # # Set image label # my $label = ''; if( $opt_thumblabel ne 'false' ) { if( defined( $imageLabels{$imagename} ) ) { # Set image specific label $label = $imageLabels{$imagename}; } else { # Set default label $label = $opt_thumblabel; } } if ($label ne '') { my $sizestr; my $kb = 1024; my $mb = $kb * $kb; if( $filesize <= 9999 ) { # print as bytes $sizestr = "${filesize}b"; } elsif( $filesize <= 9999999 ) { # print as kilobytes my $size = int($filesize/$kb); $sizestr = "${size}kb"; } else { # print as megabytes my $size = int($filesize/$mb); $sizestr = "${size}Mb"; } # # Truncate label down to width $opt_thumblabelwidth # my $imagebase; ($imagebase = $imagename) =~ s/\.[^\.]*$//g; # %b = file size # %d = directory (not implemented) # %e = extension (not implemented) # %f = full filename # %h = height # %m = magick # %n = filename minus extension # %s = scene number (not implemented) # %t = top of filename (not implemented) # %w = width $label =~ s/%b/$sizestr/g; $label =~ s/%f/$imagename/g; $label =~ s/%h/$height/g; $label =~ s/%m/$magick/g; $label =~ s/%n/$imagebase/g; $label =~ s/%w/$width/g; my @llines = split(/\\n/, $label); grep($_ = substr( $_, 0, $opt_thumblabelwidth), @llines); $label = join("\n", @llines); # put our label into the table image hash $tableImageLabels{$imagename} = $label; $tableImageLabels{$imagename} =~ s/\n/
/g; print( STDERR "Applying image label: \"${label}\"\n" ) if $opt_debug; $status = $image->Label( $label ); handleMagickError( __FILE__, __LINE__, $imagename, $status) if "$status"; } # # Add thumbnail to thumbs array # push(@$thumbs, @$image); #print( STDERR "Freeing $imagename ...\n") if $opt_debug; # Only delete image data, not object undef @$image; } # READ end block # # Set common image attributes # if( $opt_thumbframebgcolor ne 'false' ) { $status = $thumbs->Set( bordercolor=>$opt_thumbframebgcolor ); if( "$status" ) { handleMagickError( __FILE__, __LINE__, "", $status); last MONTAGE; } } if( $opt_thumbframecolor ne 'false' ) { $status = $thumbs->Set( mattecolor=>$opt_thumbframecolor ); if( "$status" ) { handleMagickError( __FILE__, __LINE__, "", $status); last MONTAGE; } } # New-style way to set label text foreground color # Somewhere along the way 'foreground' started being ignored by montage if( $opt_thumbforeground ne 'false' ) { $status = $thumbs->Set( pen=>$opt_thumbforeground ); if( "$status" ) { handleMagickError( __FILE__, __LINE__, "", $status); last MONTAGE; } } unless ($opt_tables) { # # Do the montage # print( STDERR "Creating montage using options:\n $montageArguments\n" ) if $opt_debug; eval "\$montage = \$thumbs->Montage( $montageArguments ) ;"; if( $@ ) { handleMagickError( __FILE__, __LINE__, "", $@); last MONTAGE; } handleMagickError( __FILE__, __LINE__, "", $montage) unless ref($montage); last MONTAGE unless ref($montage); # # Obtain imagemap info (thanks to Cristy for the relevant code) # { my @thumbCoords; my $montageWidth = $montage->Get('width'); my $montageHeight = $montage->Get('height'); $montage->Get('montage')=~/(\d+)x(\d+)\+(\d+)\+(\d+)/; my $thumbWidth=$1; my $thumbHeight=$2; my $x=$3; my $y=$4; my $directory = $montage->Get('Directory'); print( STDERR "Montage directory = $directory\n" ) if $opt_debug; for (split(/\n/,$directory)) { # Eliminate cache dir from path HACK! HACK! s%$opt_cachedir/%% if $opt_cache; my $img = $_; my $x1 = $x; my $y1 = $y; my $x2 = $x+$thumbWidth-1; my $y2 = $y+$thumbHeight-1; push(@thumbCoords, "$x1,$y1,$x2,$y2"); #print " \n"; $x+=$thumbWidth; if ($x >= $montageWidth) { $x=0; $y+=$thumbHeight; } } if( !defined($imageThumbCoords[$pageNumber - 1]) || ("@{$imageThumbCoords[$pageNumber - 1]}" ne "@thumbCoords") ) { $imageThumbCoords[$pageNumber - 1] = [ @thumbCoords ]; print( STDERR "Thumbnail coordinates have changed, must re-do HTML page\n" ) if $opt_debug; ++$doPageHtml; } } # # Process & Write GIF file # # Copy image so we can play with it without effecting original print( STDERR "Copying montage to scratch ...\n" ) if $opt_debug; $image = $montage->Copy(); handleMagickError( __FILE__, __LINE__, "", $image) unless ref($image); last MONTAGE unless ref($image); if ($opt_mapnetscape) { print( STDERR "Mapping $fileNames{'montageGIF'} to Netscape 216 color cube...\n" ) if $opt_debug; $status = $image->Map(image=>$netscapeColormap, dither=>'True'); handleMagickError( __FILE__, __LINE__, "", $status) if "$status"; } if( ! $opt_forcejpeg ) { print( STDERR "Writing $fileNames{'montageGIF'} ...\n" ) if $opt_debug; $status = $image->Write( dither=>'True', filename=>"GIF:$fileNames{'montageGIF'}", interlace=>'Line' ); handleMagickError( __FILE__, __LINE__, $fileNames{'montageGIF'}, $status) if "$status"; last MONTAGE if "$status"; undef @$image; } # If not doing GIF only, do JPEG if( ! $opt_forcegif ) { # Only do JPEG if GIF is large. # Most reasonable GIFs are under 30K if( $opt_forcejpeg || fsize( $fileNames{'montageGIF'} ) > $opt_maxgif ) { # Write JPEG file print( STDERR "Writing $fileNames{'montageJPEG'} ...\n" ) if $opt_debug; $status = $montage->Write( filename=>"JPEG:$fileNames{'montageJPEG'}", interlace=>'Plane', quality=>$opt_jpegquality ); handleMagickError( __FILE__, __LINE__, $fileNames{'montageJPEG'}, $status) if "$status"; last MONTAGE if "$status"; } else { print( STDERR "Avoiding JPEG image since GIF is small enough\n" ) if $opt_debug; } } else { print( STDERR "Avoiding JPEG image due to forcegif option\n" ) if $opt_debug; } # Decide to use GIF or JPEG version of output depending on size. # If there is only one type then no need. if( -f $fileNames{'montageGIF'} && -f $fileNames{'montageJPEG'} ) { if( fsize($fileNames{'montageGIF'}) > fsize($fileNames{'montageJPEG'}) ) { print( STDERR "Choosing JPEG since it is smaller\n" ) if $opt_debug; unlink($fileNames{'montageGIF'}); # Use JPEG } else { print( STDERR "Choosing GIF since it is smaller\n" ) if $opt_debug; unlink($fileNames{'montageJPEG'}); # Use GIF } } } # unless ($opt_tables) $errorstat = 0; # If it made it this far, then no error } # MONTAGE end block # Delete montage image #print( STDERR "Freeing montage image ...\n" ) if $opt_debug; undef @$montage; # FIXME: Can't use string ("Warning 310: No images to montag") as an ARRAY ref while "strict refs" in use undef $montage; # Delete thumbnails #print( STDERR "Freeing thumbnail images ...\n" ) if $opt_debug; undef @$thumbs; undef $thumbs; # Delete scratch image #print( STDERR "Freeing scratch image ...\n" ) if $opt_debug; undef @$image; undef $image; # Delete Netscape map image if ($opt_mapnetscape) { #print( STDERR "Freeing Netscape map image ...\n" ) if $opt_debug; undef @$netscapeColormap; undef $netscapeColormap; } unlink( $fileNames{'montageJPEG'}, $fileNames{'montageGIF'} ) if $errorstat; return( $errorstat ); } # # Write out server-side imagemap data # sub writeImageMap { my $errorstat = 0; my $pindexname; my $pNumber; # Write out server-side imagemap (CERN or NCSA) # This uses the absolute path as the URL or a relative one # from the referring URL # The server must map URLs specified with filesystem paths # or support relative URLs from the referrer (Apache & # latest NCSA do). print( STDERR "Writing file $fileNames{'montageServerMap'} ...\n" ) if $opt_debug; open( IMAGEMAP, ">$fileNames{'montageServerMap'}" ) || die("$0: Failed to open file $fileNames{'montageServerMap'} for output\n$@\n"); # default URL if (!$opt_frames) { $pNumber = ($pageNumber == 1) ? "" : "$pageNumber"; $pindexname = "${pNumber}${opt_indexname}"; } else { $pindexname = "${opt_pageindexname}${pageNumber}${opt_htmlext}"; } if ( "${opt_htimage}" ne '' ) { print( IMAGEMAP "default " . abs_path_to_url("${sourceDirectory}/${pindexname}") . "\n" ); } else { print( IMAGEMAP "default ${pindexname}\n" ); } my $imageNum; for( $imageNum = 0; $imageNum <= $#{$imageNames[$pageNumber - 1]}; ++$imageNum ) { my $url = escapeurl($imageNames[$pageNumber - 1][$imageNum]); my($x1,$y1,$x2,$y2); ($x1,$y1,$x2,$y2) = split(',', $imageThumbCoords[$pageNumber - 1][$imageNum]); if( $opt_pichtml ) { $url .= $opt_pichtmlext; } if( $opt_maptype eq 'ncsa' ) { if ( "${opt_htimage}" ne '' ) { print( IMAGEMAP "rect " . abs_path_to_url("${sourceDirectory}/${url}") . " $x1,$y1 $x2,$y2\n" ); } else { print( IMAGEMAP "rect ${url} $x1,$y1 $x2,$y2\n" ); } } elsif ( $opt_maptype eq 'cern' ) { if ( "${opt_htimage}" ne '' ) { print( IMAGEMAP "rect ($x1,$y1) ($x2,$y2) " . abs_path_to_url("${sourceDirectory}/${url}") . "\n" ); } else { print( IMAGEMAP "rect ($x1,$y1) ($x2,$y2) ${url}\n" ); } } else { die( "\nError: \$opt_maptype must be \"cern\"", " or \"ncsa\".\n" ); } } close( IMAGEMAP ); $errorstat=0; return( $errorstat ); } # # Return string to represent JavaScript array # Usage: jsArray('arrayName', @array) # sub jsArray { my($arrayName, @elements) = @_; my($result) = "var ${arrayName} = new Array(\n"; my $i; for $i (0 .. $#elements) { $result .= "\t\'" . escapejs($elements[$i]) . "\'"; $result .= ',' if $i < $#elements; $result .= "\n"; } $result .= ");\n"; return $result; } # # Return string to represent JavaScript double-dimensioned array # Usage: jsDoubleArray('arrayName', @array) # . sub jsDoubleArray { my($arrayName, @elements) = @_; my($result) = "var ${arrayName} = new Array(\n"; my $i; for $i (0 .. $#elements) { $result .= "\tnew Array(\n"; my $j; for $j (0 .. $#{$elements[$i]}) { $result .= "\t\t\'" . escapejs($elements[$i][$j]) . "\'"; $result .= ',' if $j < $#{$elements[$i]}; $result .= "\n"; } $result .= "\t)"; $result .= ',' if $i < $#elements; $result .= "\n"; } $result .= ");\n"; return $result; } # # Return string to represent Javascript array # from a hash # Usage: jsHashToDouble('objectName', \%hashName) # sub jsHashToDouble { my ( $name, $hash) = @_; my $result = "var ${name} = new Array(\n"; my $i; for $i (0 .. $#imageNames) { $result .= "\tnew Array(\n"; my $j; for $j (0 .. $#{$imageNames[$i]}) { $result .= "\t\t'"; if ($$hash{$imageNames[$i][$j]}) { $result .= escapejs($$hash{$imageNames[$i][$j]}); } else { $result .= "0"; } $result .= "\'"; $result .= ',' if $j < $#{$imageNames[$i]}; $result .= "\n"; } $result .= "\t)"; $result .= ',' if $i < $#imageNames; $result .= "\n"; } $result .= ");\n"; return $result; } # # Return string to represent 2 Javascript double # arrays representing width and height # Usage: jsSizes('objectNamePrefix', \%hashName) # sub jsSizes { my ( $nameprefix, $hash) = @_; my $result = "var ${nameprefix}widths = new Array(\n"; my $i; for $i (0 .. $#imageNames) { $result .= "\tnew Array(\n"; my $j; for $j (0 .. $#{$imageNames[$i]}) { if ($$hash{$imageNames[$i][$j]} =~ /WIDTH=([0-9]+)/) { $result .= "\t\t'" . $1 . "\'"; $result .= ',' if $j < $#{$imageNames[$i]}; $result .= "\n"; } else { $result .= "\t\t'0\'"; $result .= ',' if $j < $#{$imageNames[$i]}; $result .= "\n"; } } $result .= "\t)"; $result .= ',' if $i < $#imageNames; $result .= "\n"; } $result .= ");\n"; $result .= "\nvar ${nameprefix}heights = new Array(\n"; for $i (0 .. $#imageNames) { $result .= "\tnew Array(\n"; my $j; for $j (0 .. $#{$imageNames[$i]}) { if ($$hash{$imageNames[$i][$j]} =~ /HEIGHT=([0-9]+)/) { $result .= "\t\t'" . $1 . "\'"; $result .= ',' if $j < $#{$imageNames[$i]}; $result .= "\n"; } else { $result .= "\t\t'0\'"; $result .= ',' if $j < $#{$imageNames[$i]}; $result .= "\n"; } } $result .= "\t)"; $result .= ',' if $i < $#imageNames; $result .= "\n"; } $result .= ");\n"; return $result; } # # Return string to represent JavaScript associative array # Usage: jsHash('objectName', \%hashName) # sub jsHash { my( $name, $hash) = @_; my $result = ''; $result .= "var ${name} = new Object();\n"; my $key; foreach $key (sort(keys(%$hash))) { if(defined($$hash{$key})) { if($$hash{$key} =~ /^\d+$/) { # numeric $result .= "${name}" . '["' . $key . '"] = ' . escapejs($$hash{$key}) . ";\n"; } else { # text string gets quoted $result .= "${name}" . '["' . $key . '"] = \'' . escapejs($$hash{$key}) . "\';\n"; } } } return $result; } # # Return string to represent JavaScript variable # Usage: jsVariable('variableName', \$variableName) # sub jsVariable { my( $name, $variable) = @_; my $result = "${name} = \'" . escapejs($$variable) . "\';\n"; return $result; } # # Return string to represent PERL list # Usage: plArray('arrayName', @array) # sub plArray { my($arrayName, @elements) = @_; my($result) = "\@${arrayName} = (\n"; my $elem; foreach $elem (@elements) { if(defined($elem)) { $result .= "\t\'" . escapeperl($elem) . "\',\n"; } else { $result .= "\t\'\',\n"; } } $result .= ");\n"; return $result; } # # Return string to represent PERL list of lists # Usage: plDoubleArray('arrayName', @array) # sub plDoubleArray { my($arrayName, @elements) = @_; my($result) = "\@${arrayName} = (\n"; my $slow; for $slow (0 .. $#elements) { $result .= " [\n"; my $fast; for $fast (0 .. $#{$elements[$slow]}) { #print( "element $slow $fast is $elements[$slow][$fast]\n"); $result .= "\t\'" . escapeperl($elements[$slow][$fast]) . "\',\n"; } $result .= " ],\n"; } $result .= ");\n"; return $result; } # # Return string to represent PERL associative array # Usage: plHash('objectName', \%hashName) # sub plHash { my( $name, $hash) = @_; my $result = "\%${name} = (\n"; my $key; foreach $key (sort(keys(%$hash))) { if(defined($$hash{$key})) { $result .= "\t\'" . escapeperl($key) . "\' => \'" . escapeperl($$hash{$key}) . "\',\n"; } } $result .= ");\n"; return $result; } # # Return string to represent PERL variable # Usage: plVariable('variableName', \$variableName) # sub plVariable { my( $name, $variable) = @_; my $result = "\$${name} = \'" . escapeperl($$variable) . "\';\n"; return $result; } # # Routine used by 'sort' to sort directories # %dirOrder # Order directories are listed in dirindex file sub sortDir { if(defined($dirOrder{$a}) && defined($dirOrder{$b})) { $dirOrder{$a} <=> $dirOrder{$b} } else { lc($a) cmp lc($b); } } # # Routine used by 'sort' to sort images # %imageOrder # Order that images occur in imgindex file sub sortImages { if(defined($imageOrder{$a}) && defined($imageOrder{$b})) { $imageOrder{$a} <=> $imageOrder{$b} } else { lc($a) cmp lc($b); } } # # Return current directory # sub cwd { local($_); chomp($_ = getcwd()); # fix path name for Win32 if ($^O eq "MSWin32") { s:/:\\:g; }; return $_; } # # Return size of file in bytes (size) # sub fsize { my($name) = @_; return ((stat($name))[7]); } # # Return file modification time (mtime) # sub fmtime { my($name) = @_; return ((lstat($name))[9]); } # # Return file name portion of path # sub basename { my($name) = @_; $name =~ s:([^\/]*/)+::; $name =~ s:([^\\]*\\)+::; return($name); } # # Return directory name portion of path # sub dirname { my($name) = @_; $name =~ s:(/[^\/]+$)::g; return($name); } # # Compare two associative arrays # sub compareHash { my( $hash1, $hash2) = @_; if(scalar(keys(%$hash1)) != scalar(keys(%$hash2))) { return( 1 ); # different length } my $key; foreach $key (keys(%$hash1)) { if(( defined($$hash1{$key}) && !defined($$hash2{$key})) || ( !defined($$hash1{$key}) && defined($$hash2{$key}))) { return( 1 ); # different } if( defined($$hash1{$key}) && defined($$hash2{$key}) ) { if($$hash1{$key} ne $$hash2{$key}) { return( 1 ); # different } } } return(0); } # # Generic error handler routine to handle Magick reported errors # Numeric error codes are currently used to aid backward compatability # in spite of the fact that Magick.pm exports these constants # # Returns 0 when normal processing may continue # Returns 1 when alternative processing (e.g. skip defective image) is recommended # Exits process for serious problems # # Use similar to: # $status = $image->Read("${imagename}\[0\]"); # handleMagickError( __FILE__, __LINE__, $imagename, $status) if "$status"; # sub handleMagickError { my ($file, $line, $argument, $error) = @_; $error =~ /(\d+)/; my $errorCode = $1; # Benign warnings if ( ( $errorCode == 300 ) || # ResourceLimitWarning ( $errorCode == 305 ) || # XServerWarning ( $errorCode == 310 ) || # OptionWarning ( $errorCode == 315 ) || # PluginWarning ( $errorCode == 320 ) ) # MissingPluginWarning { warn('PerlMagick:"', $file, '", line ', $line, ', ', $error, "\n"); return 0; } # Corrupt image problem elsif ( $errorCode == 325 ) { # CorruptImageWarning my $imagename = $argument; warn("Warning: Image $imagename is defective\n"); # Evaluate contents of $opt_readfailhook if image fails to # read A typical action here would be to unlink the image file if( $opt_readfailhook ) { print("Evaluating read-failure hook ...\n$opt_readfailhook\n" ) if $opt_debug; eval $opt_readfailhook; } return 1; } # Errors we consider fatal (until proven otherwise) # Presumably the user can rectify the problem elsif ( ( $errorCode == 330 ) || # FileOpenWarning ( $errorCode == 400 ) || # ResourceLimitError ( $errorCode == 405 ) || # XServerError ( $errorCode == 410 ) # OptionError ) { die('PerlMagick fatal error:"', $file, '", line ', $line, ', ', $error, "\n"); } # Other problems warn('PerlMagick:"', $file, '", line ', $line, ', ', $error, "\n"); return 0; } # # Get icon image sizes # Sets or updates value of %iconImageSizes hash # Sets the value of $opt_forcehtml to true if existing hash is altered # sub getIconImageSizes { my %tmp_iconImageSizes; my $icon; for $icon ( keys %opt_icons ) { if( $opt_icons{$icon} ) { # if defined my $icon_path = $icon_dir_path . ${pathSep}. $opt_icons{$icon}; if( !defined( $icon_paths{$icon} ) || ( $icon_paths{$icon} ne $icon_path )) { $icon_paths{$icon} = $icon_path; $ tmp_iconImageSizes{$icon} = html_imgsize( $icon_path ); } } } if( !defined(%iconImageSizes) || ( compareHash(\%iconImageSizes,\%tmp_iconImageSizes) ) ) { %iconImageSizes = %tmp_iconImageSizes; print( STDERR "Icon sizes have changed, must re-do all HTML\n" ) if $opt_debug; $opt_forcehtml = 1;; } } # # Get the physical path for a specified directory/file path # sub lets_get_physical { my( $path ) = @_; my $physical=$path; if( -d $path ) { my( $savedir ) = cwd(); chdir( $path ); $physical=cwd(); chdir( $savedir ); } if( -f $path ) { my($dir)=dirname($path); my($fname)=basename($path); my( $savedir ) = cwd(); chdir( $dir ); $physical=cwd(); chdir( $savedir ); $physical .= "/$fname"; } return( $physical ); } # # Attempt to build a relative path from specified directory # to a file given the specified absolute physical path # # Usage: relative($dir,$path); # # Example: $relative_icon_path = relative($cwd, $absolute_path); # sub relative { my($dir, $path) = @_; my(@path,@dir); my $savepath; my $result; # Return value from cache if defined my $index = $dir . '|' . $path; if( defined($relativePathCache{$index}) ) { return( $relativePathCache{$index} ); } $savepath=$path; # for Win32, just return absolute for now if ($^O eq "MSWin32") { return $savepath; } # If not rooted then we are hosed if ( ( $path !~ m|^/| ) || ($dir !~ m|^/|) ) { print( "ERROR: The path \"${savepath}\" is not absolute.\n" ); die( "Fix the \$opt_rootpath value and try again.\n" ); } if( ! -f $path && ! -d $path ) { print( "ERROR: The specified path \"${savepath}\" does not exist.\n" ); die( "Fix the \$opt_rootpath and \opt_iconpath values and try again.\n" ); } @path=split('/', $path); # Array form shift(@path); @dir=split('/', $dir); # Array form shift(@dir); # If roots are not the same, then it is not possible to compute a relative path # Just return absolute path if ( $path[0] ne $dir[0] ) { $result = $savepath; # Cache and return result $relativePathCache{$index} = $result; return( $result ); } # If the current dir is not inside the document root, just return # the absolute path if ( index ($dir,$opt_rootpath) == -1 ) { $result = $savepath; # Cache and return result $relativePathCache{$index} = $result; return( $result ); } # Remove common start directories while( scalar(@path) && scalar(@dir) ) { last if( $path[0] ne $dir[0] ); shift(@path); shift(@dir); } # Prepend any ../ part grep($_='..',@dir); # Return results if( scalar(@dir) ) { $result = join('/',@dir,@path) ; } else { if( scalar(@path) ) { $result = './' . join('/',@path); } else { $result = '.'; } } # Cache and return result $relativePathCache{$index} = $result; return $result; } # # Build a relative path to a file given the absolute physical path # Uses the option variables $opt_rootpath and $opt_prefixpath # sub abs_path_to_url { ($_) = @_; # Remove root prefix if absolute my $newfile = ${opt_rootpath}; $newfile =~ s/\\/\\\\/g; s|^$newfile||; # Tack on prefix (if any) $_ = "${opt_prefixpath}${_}"; return( $_ ); } # # Subroutine to print version information # sub version { print( STDOUT qq|webmagick $webmagickInfo{version} | ); } # # Subroutine to print help message # # WARNING: help2man not understand multi-line option description! # sub help { print( STDOUT qq|WebMagick `webmagick' recurses through directories of images and builds HTML pages and image-maps to display those images in a web browser. Options may be specified on the command line as --option or in .webmagickrc files as \$opt_option. By default WebMagick processes files in the current directory. See --srcdir for a way to process files in a different directory. Usage: webmagick [OPTIONS] General: --[no]debug Print debug messages (default off) --[no]forcecache Force cached thumbnails to be generated (default off) --[no]forcehtml Force HTML files to be generated (default off) --[no]forcemontage Force montage (default off) --[no]ignorefp Ignore directories with names like _vti (FrontPage directories) (default on) --[no]help Display usage message (default off) --[no]recurse Recurse directory tree (default off) --srcdir Image directory to process --[no]verbose Tell us more ... (default off) --[no]version Print version and exit (default off) Paths: --iconpath Relative path under rootdir to webmagick icons --iconbase Global base URL for webmagick icons --prefixpath Path to prepend to generated URLs (e.g. /~username) --rootpath Absolute path to server root (NCSA DocumentRoot) Server-side imagemaps: --htimage Imagemap CGI program URL (set to '' for none) --maptype Server-side map type ("ncsa" or "cern") --[no]serversidemap Enable server-side map writting (default off) Filenames: --dirindexname Directory-name to title cross-reference file name --imgindexname Image-name to thumbnail label cross-reference file name --indexname Name of master index files (default server index) --pageindexname Base name of page-related index files --readme Name of directory info file Caching: --[no]cache Cache thumbnails (default on) --cachedir Subdirectory name to cache thumbnails in (default .cache) --cacheformat Format of cached thumbnails (default JPEG) --cachegeom Cache thumbnail geometry (default thumbgeom) --cachemin Smallest image to cache in pixels. (default 300*200) Montage: --[no]forcegif Force imagemap to be in GIF format (default off) --[no]forcejpeg Force imagemap to be in JPEG format (default off) --jpegquality Quality of JPEG imagemaps --maxgif Maximum size of GIF imagemap before trying JPEG --columns Montage columns --rows Montage rows (max) --[no]mapnetscape Map generated image files to Netscape 216-color cube (default off) --thumbbackground Montage background color --thumbframebgcolor Background color inside of Frame (unused if no Frame) --thumbborderwidth Thumbnail border width (pixels) --thumbcompose Thumbnail image composition operation (default Replace) Over, In, Out, Atop, Xor, Plus, Minus, Add, Subtract, Difference, Bumpmap, Replace, MatteReplace, Mask, Blend, Displace --thumbfont Thumbnail title font --thumbforeground Montage foreground color (effects label color) --thumbframe Geometry of frame around thumbnail (default no frame) --thumbgeometry Thumbnail geometry (widthxheight) --thumbgravity Direction thumbnail gravitates to (default Center) NorthWest, North, NorthEast, West, Center, East, SouthWest, South, SouthEast. North is up. --thumblabel Format for default thumbnail text label --thumblabelwidth Label width (in characters) to truncate to. --thumbframecolor Frame color (if thumbnail frames enabled) --thumbshadow Enable decorative shadow under thumbnail --thumbtexture Texture to tile onto the image background --thumbtransparent Transparent color --zoomfilter Zoom filter algorithm (Box/Triangle/Mitchell) HTML Colors & Appearance: --address Optional user address info --[no]anonymous Don't show WebMagick address and copyright info on pages (default off) --coloralink Link (active) color --colorback Background color (also applied to JPEG montage background) --colorfore Foreground text color --colorlink Link (unvisited) color --colorvlink Link (visited) color --dircoloralink Link (active) color (directory frame) --dircolorback Background color (directory frame) --dircolorfore Foreground color (directory frame) --dircolorlink Link (unvisited) color (directory frame) --dircolorvlink Link (visited) color (directory frame) --dirhtmlext Extension for directory frame --stylesheet URL to stylesheet (overrides other color options) --[no]date Output updates date (default on) --footer Page footer (imagemap frame) (default to
) --header Page header (imagemap frame) (default to
) --[no]javascript Enable JavaScript output (default off) --[no]pichtml Per-image HTML file generation (default off) --pichtmlext Per-image HTML file extension (default .html) --pichtmlbottom Per-image HTML, extra HTML to display below image (default to
) --[no]pichtmlnav Per-image HTML, show navigation buttons (default off) --[no]pichtmlputtitle Put per-image HTML picture title (default on) --pichtmltarget Per-image HTML default frame target --pichtmltitleend End tags for per-image HTML picture title (default

) --pichtmltitlestart Start tags for per-image HTML picture title (default

) --pichtmltop Per-image HTML, extra HTML to display above image (default to

) --[no]readmevisible Show README.html on first page rather than just linking (default off) --[no]tables Use HTML tables instead of imagemaps for thumbnails (default off) --title Page title Frame Options: --[no]frames Use frames, if no - single directory collection assumed (default on) --framemarginwidth Pixels allocated to frame margin in horizontal direction --framemarginheight Pixels allocated to frame margin in vertical direction --framebordersize Pixels allocated to frame border --frameborder Enable (YES) or disable (NO) decorative frame borders --framestyle Frame style to use (out of those available) --[no]allowconfig Allow user to configure framestyle, columns and rows (requires javascript and tables) (default off) Messages Replacement: --msg_copyright "Copyright " --msg_date_format "\%B \%e, \%Y" (see strftime(3)) --msg_directories "Directories" --msg_directory_navigator "Directory Navigator" --msg_images "Images" --msg_index_of_directory "Index of directory" --msg_index_of_files "Index of files " --msg_index_through "through" --msg_next "Next" --msg_page_navigator "Page Navigator" --msg_page_updated_on "Page updated on" --msg_prev "Prev" --msg_produced_by "Produced by" --msg_readme "ReadMe" --msg_up "Up" Report bugs to . Visit the WebMagick web page at http://webmagick.sourceforge.net/ | ); } # # Subroutine to calculate per-page file names # This is so names can be defined in one place # sub setFileNames { my $nextPageNumber=$pageNumber + 1; my $previousPageNumber=$pageNumber - 1; my $pNumber; if ($opt_javascript) { # HTML file to load JavaScript code into hidden Frame $fileNames{'jsPageIndex'} = "${opt_pageindexname}js.html"; # Javascript master index "indexjs.html" $fileNames{'jsDirIndex'} = 'indexjs.html'; # JavaScript variable definitions $fileNames{'jsVariables'} = "${opt_pageindexname}.js"; # Shared WebMagick JavaScript source file $fileNames{'jsFunctions'} = "${icon_base_url}${pathSep}webmagick.js"; } # Run status file $fileNames{'pageStatus'} = "${opt_pageindexname}.pl"; # Generated GIF file $fileNames{'montageGIF'} = "${opt_pageindexname}${pageNumber}.gif"; # Generated JPEG file $fileNames{'montageJPEG'} = "${opt_pageindexname}${pageNumber}.jpg"; # Generated server-side imagemap file $fileNames{'montageServerMap'} = "${sourceDirectory}${pathSep}${opt_pageindexname}${pageNumber}.map"; # Name for current HTML index page if (!$opt_frames) { $pNumber = ($pageNumber == 1) ? "" : "$pageNumber"; $fileNames{'htmlCurrentIndex'} = "${pNumber}${opt_indexname}"; } else { $fileNames{'htmlCurrentIndex'} = "${opt_pageindexname}${pageNumber}$opt_htmlext"; } # Name for next HTML index page if($pageNumber == $numPages) { $fileNames{'htmlNextIndex'} = ''; } else { if (!$opt_frames) { $pNumber = ($nextPageNumber == 1) ? "" : "$nextPageNumber"; $fileNames{'htmlNextIndex'} = "${pNumber}${opt_indexname}"; } else { $fileNames{'htmlNextIndex'} = "${opt_pageindexname}${nextPageNumber}$opt_htmlext"; } } # Name for previous HTML index page if($pageNumber == 1) { $fileNames{'htmlPrevIndex'} = ''; } else { if (!$opt_frames) { $pNumber = ($previousPageNumber == 1) ? "" : "$previousPageNumber"; $fileNames{'htmlPrevIndex'} = "${pNumber}${opt_indexname}"; } else { $fileNames{'htmlPrevIndex'} = "${opt_pageindexname}${previousPageNumber}$opt_htmlext"; } } if ($opt_javascript) { # Name for next JavaScript HTML index page if($pageNumber == $numPages) { $fileNames{'htmlNextJsIndex'} = ''; } else { $fileNames{'htmlNextJsIndex'} = "${opt_pageindexname}${nextPageNumber}js.html"; } # Name for previous Javascript HTML index page if($pageNumber == 1) { $fileNames{'htmlPrevJsIndex'} = ''; } else { $fileNames{'htmlPrevJsIndex'} = "${opt_pageindexname}${previousPageNumber}js.html"; } } # Location of blank HTML page for use in Frame target $fileNames{'htmlBlankPage'} = "${icon_base_url}/blank.html"; } # # Escape special characters in HTML text # sub escapehtml { local($_) = @_; s/&/&/g; s/>/>/g; s//%3E/g; # > s/\[/%5B/g; # [ #s/\\/%5C/g; # \ s/\]/%5D/g; # ] s/\^/%5E/g; # ^ s/\`/%60/g; # ` s/\{/%7B/g; # { s/\|/%7C/g; # | s/\}/%7D/g; # } s/\~/%7E/g; # ~ s/ /%20/g; # " " s:\\:/:g; # replace \ with / for better URLs return( $_ ); } # # Convert time in seconds to minutes:seconds.hundreths # sub elapsedminutes { my($seconds) = @_; my $min = int($seconds/60); my $sec = int($seconds%60); my $hund = ($seconds - int($seconds)) * 100; return( "${sec}s" ) if $min == 0; return( "${min}:" . sprintf( "%02d", $sec ) ) if $hund == 0; return( "${min}:" . sprintf( "%02d.%02d", $sec, $hund ) ); } # # PERL-based RC file handlers # # # Search for and return the contents of an rc file # The file handle will be auto-close for next file. # sub get_rc { my ($rc) = @_; my $result = ''; my $bytes = 0; open( RC, "<${rc}" ) || warn("Failed to open file ${rc}\n") && return ''; $bytes = read( RC, $result, fsize($rc) ); #print( STDERR "Read ${bytes} bytes from file ${rc}\n" ) if $opt_debug; close( RC ); return $result; } # # Eval .webmagickrc files with specified path. If the file does not # exist or is not readable, then return silently. If an error occurs, # then print message and return zero to caller (who can die if deemed # necessary). This allows statements like: # $sourceRcFile( $rcfile) || die( "Failed to source $rcfile\n" ); # sub sourceRcFile { my $rc; foreach $rc (@_) { next if ( ! -r $rc || ! -f $rc ); print( "Sourcing ${rc}\n" ) if $opt_debug; eval ( get_rc($rc) ); if( $@ ) { print( STDERR "Bad Eval for file \"${rc}\"...\n$@\n" ); return( 0 ); } } return( 1 ); } # # Look in the .webmagickrc file for the given directory and return # the variable requested, or the default value given. this tries to # be a bit more intelligent than previous eval. # -- added by Anthony Thyssen # # Use as: get_rc_var( directory, variable name, default value) sub get_rc_var { my($dir, $var, $def) = @_; my($rc) = "$dir/$opt_webmagickrc"; return $def if ( ! -r $rc || ! -f $rc ); my($val) = ';' . get_rc( $rc ); $val =~ s/#.*//g; # remove comments to avoid confusion if ( $val =~ /\$$var\b/ > 1 ) { print STDERR "Var \"\$$var\" is not simple in \"$rc\" -- using default.\n"; return $def; } # find variable assignment if pressent and remove stuff before it unless ( $val =~ s/(.|\n)*;\s*\$$var\s*=\s*// ) { # print("DB: \$$var not found in \"$rc\"\n") if $opt_debug; return $def; # variable assignment was not found } $val =~ s/;(.|\n)*//; # remove stuff after assignment expression # print("Assignment for \$$var = \"$val\"\n") if $opt_debug; $val = eval ( $val ); if ( $@ ) { warn("Bad Eval for variable \"\$$var\" in \"$rc\"...\n$@\n"); $val = $def; } # print("DB: \$$var found in \"$rc\" with value of \"$val\"\n") # if $opt_debug; return $val; } # # Eval PERL-format rc files in order from $opt_rootpath to # $currentDirectory directory. Values are added to global variables # sub evaluateRcFiles { my($dir) = $currentDirectory; # current directory my(@top,@dir); my $rcpath ; my $top; my $direlem; # Decide how far to look for .webmagickrc files # Support the case where processing outside of the server # root directory. In that case, use the sourceDirectory instead. if( $currentDirectory =~ m|^$opt_rootpath| ) { $top = $opt_rootpath; # Use server root directory } else { $top = $opt_srcdir; # Use specified source directory } @top=split('/', $top); # Array form shift(@top); @dir=split('/', $dir); # Array form shift(@dir); splice(@dir, 0, scalar(@top) ); # Leave only subdirectory part # # Build up path starting at top sourcing any .webmagickrc as we go. # my $path=$top; $direlem=''; do { # Certain values must only be vaild in the last # current directory webmagickrc file. $opt_ignore=0; # Ignore -- do not process this directory if( $direlem ) { $path = "$path/$direlem"; } $rcpath = "$path/$opt_webmagickrc"; sourceRcFile( $rcpath ); } while( $direlem = shift(@dir) ); return( 0 ); } # # Lookup color in RGB hash table # sub lookupRGBColor { my($color) = @_; # If already in hex format, don't translate if( $color =~ /^\#/ ) { return( "\U$color" ); # just uppercase the color hex value } if( defined($RGBDB{"\L$color"}) ) { return( $RGBDB{"\L$color"} ); } else { print( STDERR "No such color \"$color\" found\n" ); return("#BEBEBE"); # Return grey as default in case of error } } # # Print details regarding executing child process # Takes return from system() command or $? as input # Borrowed from example provided in the Camel book # (PERL 5) page 230 # sub syserror { my($rc) = @_; print("Process exited: "); $rc = 0xffff & $rc; if($rc == 0) { print("normal exit\n"); } elsif ($rc == 0xff00) { print("command failed: $!\n"); } elsif ($rc > 0x80) { $rc >>= 8; print("ran with non-zero exit status $rc\n"); } else { print("ran with "); if ($rc & 0x80) { $rc &= ~0x80; print("coredump from "); } print("signal $rc\n"); } } webmagick-2.02.orig/webmagickrc.in0100644000175000017500000002460007402020735016761 0ustar arafunearafune# # Copy the webmagickrc file to your home directory under the name # .webmagickrc. Any default definitions you want to override should be # uncommented in this file and modified. # # Navigation Icon Paths and URLs # Specify the path and file name for the navigation icons. # !!!MUST EDIT OR OVERRIDE!!! # # $opt_rootpath = '@ROOTPATH@'; # Directory Path to top of html tree # Needed to determine relative paths to images # $opt_prefixpath = '@PREFIXPATH@'; # Path or URL to prepend to root URL # Not used if local relative paths used # $opt_iconpath = '@ICONPATH@'; # Relative path under rootpath / prefixpath # $opt_iconbase = ''; # Global icons base URL, if not empty # # Server-side imagemap settings # !!!MAY NEED TO EDIT OR OVERRIDE!!! # # $opt_htimage='@HTIMAGE@'; # Base URL to server-side imagemap CGI # On some systems this is /cgi-bin/imagemap # Set to '' to use a ".map" URL with relative # URLs (latest NCSA & Apache) # $opt_maptype='@MAPTYPE@'; # Maptype must be 'cern' or 'ncsa'. If you are # using Apache, specify 'ncsa'. # $opt_serversidemap = 0; # Enable server-side maps writting # # RC files # # # Name of per-directory rc file # $opt_webmagickrc = '.webmagickrc'; # global rc files @global_option_files = ("@sysconfdir@/webmagickrc", "$ENV{'HOME'}/${opt_webmagickrc}"); # File naming # $opt_indexname = 'index.html'; # Per-directory master index file # $opt_readme = 'README.html';# Name of welcome page README file ('' = none) # $opt_pageindexname = '.index'; # Base name of secondary index files # $opt_dirindexname = '.dirindex'; # Subdirectory Title cross-reference # dirname Directory Title # $opt_dirhtmlext = '.html'; # Use .shtml for SSI # $opt_imgindexname = '.imgindex'; # Image name to label cross-reference file # # HTML color and background image related options # # X11 RBG color database (rgb.txt) location # Entries in this file have the form: # Red Green Blue Color-name # where color intensities are specified in decimal. # e.g. 250 240 230 linen # $opt_rgbdb='@RGBDB@'; # # Page Frame & non-framed pages # $opt_colorback = '#CCCCCC'; # Color -- Background # $opt_colorfore = 'black'; # Color -- Foreground # $opt_coloralink = '#FF0000'; # Color -- Active link # $opt_colorlink = '#0000EE'; # Color -- Link # $opt_colorvlink = '#551A8B'; # Color -- Visited link # # Directory frame (Leave options empty ('') to use page frame colors # $opt_dircolorback = '#B2B2B2'; # Color -- Background # $opt_dircolorfore = 'black'; # Color -- Foreground # $opt_dircoloralink = ''; # Color -- Active link # $opt_dircolorlink = ''; # Color -- Link # $opt_dircolorvlink = ''; # Color -- Visited link # $opt_stylesheet = '/styles/my_style.css'; # stylesheet to use instead # of specifying colors # General options # $opt_anonymous = 0; # Don't show address & copyright info on pages # $opt_debug = 0; # Debug flag (default off) # $opt_recurse = 0; # Recursivally apply webmagick (default off) # $opt_prune = 0; # Do Not recurse into subdirectories (off) # $opt_ignore = 0; # Do not webmagick this directory # but still recurse into sub-directories # $opt_ignorefp = 1; # Ignore /_[a-z] directories (FrontPage) # $opt_srcdir = '.'; # Source directory path (current directory) # $opt_verbose = 0; # Verbose flag (default off) # $opt_forcecache = 0; # Force update of cached thumbnails # $opt_forcehtml = 0; # Force HTML files to be generated (default off) # $opt_forcemontage = 0; # Force montage (default off) # $opt_forcegif = 0; # Force GIF imagemaps (default off) # $opt_forcejpeg = 0; # Force JPEG imagemaps (default off) # $opt_jpegquality = 70; # Quality of JPEG imagemaps # $opt_help = 0; # Display usage message # $opt_version = 0; # Display version info # $opt_htmlext = '.html'; # Use .shtml for SSI # $opt_header = '
'; # Imagemap extra page header (HTML) # $opt_footer = '
'; # Imagemap extra page footer (HTML) # $opt_javascript = 1; # Enable JavaScript output # $opt_readmevisible = 0; # Make README.html be first page. # $opt_title = ''; # Page title (blank provides default title) # $opt_address = ''; # Additonal address info for bottom of # imagemap page # $opt_date = 1; # Output updates date # $opt_pichtml = 0; # Write separate HTML for each picture # $opt_pichtmlbottom = '
'; # $opt_pichtmlext = '.html'; # Use .shtml for SSI # $opt_pichtmlnav = 0; # Write navigation into pic's HTML # $opt_pichtmlputtitle = 1; # Write picture title above it # $opt_pichtmltarget = ''; # $opt_pichtmltitleend = '

'; # End tags for picture title # $opt_pichtmltitlestart = '

'; # Start tags for picture title # $opt_pichtmltop = '

'; # $opt_tables = 0; # use HTML tables instead of image maps # $opt_allowconfig = 0; # allow user to configure table and framestyle # # ImageMagick Montage settings # # $opt_maxgif = 30000; # Maximum GIF imagemap size before # trying JPEG # $opt_columns = 6; # Max number of columns in montage grid # $opt_rows = 4; # Max number of rows in montage grid # $opt_mapnetscape = 0; # Map GIFs to Netscape 216-color cube # $opt_thumbtexture = 'false'; # Texture to tile onto the image background # $opt_thumbbackground = '#CCCCCC'; # Montage background color # $opt_thumbborderwidth = 0; # Thumbnail border width (pixels) # $opt_thumbframebgcolor = 'black'; # Inside of Frame color. Unused if no frame # $opt_thumbframecolor = '#CCCCCC'; # Color -- Frame Color # $opt_thumbtransparent = $opt_thumbbackground; # Color -- Image Transparency # $opt_thumbcompose = 'Replace'; # Thumbnail image composition operation # $opt_thumbfont = '@DEFAULTFONT@'; # Label font # $opt_thumbforeground = 'black'; # Montage foreground color # $opt_thumbframe = 'false'; # Geometry of frame around thumbnail # (default false) # $opt_thumbgeometry = '106x80+2+2>'; # Size of thumbnail images (width x height) # $opt_thumbgravity = 'Center'; # Direction thumbnail gravitates to # (default Center) # $opt_thumblabel = '%f\n%wx%h\n%b'; # Default format for thumbnail text label # $opt_thumblabelwidth = 13; # Label width past which truncation occurs # $opt_thumbshadow = 'false'; # Enable decorative shadow under thumbnail # (default disabled) # $opt_zoomfilter = 'Mitchell'; # Zoom (size reduction) filter # (Box/Triangle/Mitchell) # # Hooks to add code to key places in WebMagick # # $opt_thumbprehook = ''; # PerlMagick commands to execute on original # prior reducing to thumbnail size # $opt_thumbposthook = ''; # PerlMagick commands to execute on image # after reduction to thumbnail size # $opt_readfailhook = ''; # PERL commands to execute if reading image # fails due to image corruption # # Caching related options # # Note: See below about sharing cache with 'xv' # If caching is turned on, the montage grid will continue to be # controlled by opt_thumbgeometry but the thumbnail size will be # controlled by opt_cachegeom # $opt_cache = 1; # Cache thumbnails # $opt_cachedir = '.cache'; # Subdirectory to cache thumbnails in # $opt_cacheformat = 'JPEG'; # Format to use for thumbnails # $opt_cachegeom = $opt_thumbgeometry; # Thumbnail geometry # $opt_cachemin = 300*200; # Smallest image to cache in total pixels # (width * height). Images smaller than # this size will not be cached. # Uncomment these options to share cache with John Bradley's 'xv' # (Visual Schnauzer format) NOTE: The 'xv' thumbnail format only # supports 128 absolute colors so expect some montage thumbnail # degradation when using 'xv' thumbnails. # # # $opt_cacheformat = 'P7'; # 'xv's thumbnail format # $opt_cachegeom = '80x60'; # 'xv's default thumbnail geometry is 80x60 # $opt_cachedir = '.xvpics'; # 'xv's thumbnail cache directory # $opt_cachemin = 0; # Cache all thumbnails # # Uncomment remaining to obtain 'xv's Visual Schnauzer "look and feel" # # $opt_thumbgeometry = '92x72+2+2>'; # $opt_thumblabel = '%f'; # $opt_thumblabelwidth = 12; # $opt_thumbgravity = 'South'; # # Frame related options # # $opt_frames = 1; # Use frames # $opt_framemarginwidth = 1; # Pixels allocated to frame margin in horizontal direction # $opt_framemarginheight = 1; # Pixels allocated to frame margin in vertical direction # $opt_framebordersize = 3 ; # Pixels allocated to frame border # $opt_frameborder = 'YES'; # Enable (YES) or disable (NO) decorative frame borders # $opt_framestyle = 1; # Frame style to use (out of those available) # # Meta-tag defaults # # $opt_metaauthor = ''; # Page author # $opt_metacharset = ''; # Page character set # $opt_metaclassification = ''; # Page classification # $opt_metadescription = ''; # Page description # $opt_metaexpires = ''; # Date page expires (e.g "Tue, 20 Aug 1996 14:25:27 GMT") # $opt_metakeywords = 'WebMagick'; # Key words # # Messages customization defaults # # $opt_msg_copyright = 'Copyright '; # $opt_msg_date_format = '%B %e, %Y'; # See strftime(3) # $opt_msg_directories = 'Directories'; # $opt_msg_directory_navigator = 'Directory Navigator'; # $opt_msg_images = 'Images'; # $opt_msg_index_of_directory = 'Index of directory'; # $opt_msg_index_of_files = 'Index of files '; # $opt_msg_index_through = 'through'; # $opt_msg_next = 'Next'; # $opt_msg_page_navigator = 'Page Navigator'; # $opt_msg_page_updated_on = 'Page updated on'; # $opt_msg_prev = 'Prev'; # $opt_msg_produced_by = 'Produced by'; # $opt_msg_readme = 'ReadMe'; # $opt_msg_up = 'Up'; # # Hash table of images used -- image size read internally by webmagick # # $opt_icons{'background'} = 'thumbs.jpg'; # Thumbnail frame background image # $opt_icons{'dirbackground'} = 'dir.jpg'; # Directory frame background image # $opt_icons{'prev'} = 'blue_prev.gif'; # Previous # $opt_icons{'prev_gray'} = 'gray_prev.gif'; # Previous (grayed out) # $opt_icons{'next'} = 'blue_next.gif'; # Next # $opt_icons{'next_gray'} = 'gray_next.gif'; # Next (grayed out) # $opt_icons{'up'} = 'blue_up.gif'; # Up # $opt_icons{'help'} = 'blue_readme.gif'; # Help Readme File # $opt_icons{'help'} = 'blue_help.gif'; # Help Alternative (Question) # $opt_icons{'dir'} = 'blue_dir.gif'; # Directory List Icon (See below) # $opt_icons{'ball'} = 'blue_ball.gif'; # A ball matching other icons # $opt_icons{'config'} = 'blue_c.gif'; # Configuration button # webmagick-2.02.orig/INSTALL.generic0100644000175000017500000001644706272746017016645 0ustar arafunearafuneBasic Installation ================== These are generic installation instructions. The `configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a `Makefile' in each directory of the package. It may also create one or more `.h' files containing system-dependent definitions. Finally, it creates a shell script `config.status' that you can run in the future to recreate the current configuration, a file `config.cache' that saves the results of its tests to speed up reconfiguring, and a file `config.log' containing compiler output (useful mainly for debugging `configure'). If you need to do unusual things to compile the package, please try to figure out how `configure' could check whether to do them, and mail diffs or instructions to the address given in the `README' so they can be considered for the next release. If at some point `config.cache' contains results you don't want to keep, you may remove or edit it. The file `configure.in' is used to create `configure' by a program called `autoconf'. You only need `configure.in' if you want to change it or regenerate `configure' using a newer version of `autoconf'. The simplest way to compile this package is: 1. `cd' to the directory containing the package's source code and type `./configure' to configure the package for your system. If you're using `csh' on an old version of System V, you might need to type `sh ./configure' instead to prevent `csh' from trying to execute `configure' itself. Running `configure' takes a while. While running, it prints some messages telling which features it is checking for. 2. Type `make' to compile the package. 3. Optionally, type `make check' to run any self-tests that come with the package. 4. Type `make install' to install the programs and any data files and documentation. 5. You can remove the program binaries and object files from the source code directory by typing `make clean'. To also remove the files that `configure' created (so you can compile the package for a different kind of computer), type `make distclean'. There is also a `make maintainer-clean' target, but that is intended mainly for the package's developers. If you use it, you may have to get all sorts of other programs in order to regenerate files that came with the distribution. Compilers and Options ===================== Some systems require unusual options for compilation or linking that the `configure' script does not know about. You can give `configure' initial values for variables by setting them in the environment. Using a Bourne-compatible shell, you can do that on the command line like this: CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure Or on systems that have the `env' program, you can do it like this: env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure Compiling For Multiple Architectures ==================================== You can compile the package for more than one kind of computer at the same time, by placing the object files for each architecture in their own directory. To do this, you must use a version of `make' that supports the `VPATH' variable, such as GNU `make'. `cd' to the directory where you want the object files and executables to go and run the `configure' script. `configure' automatically checks for the source code in the directory that `configure' is in and in `..'. If you have to use a `make' that does not supports the `VPATH' variable, you have to compile the package for one architecture at a time in the source code directory. After you have installed the package for one architecture, use `make distclean' before reconfiguring for another architecture. Installation Names ================== By default, `make install' will install the package's files in `/usr/local/bin', `/usr/local/man', etc. You can specify an installation prefix other than `/usr/local' by giving `configure' the option `--prefix=PATH'. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you give `configure' the option `--exec-prefix=PATH', the package will use PATH as the prefix for installing programs and libraries. Documentation and other data files will still use the regular prefix. If the package supports it, you can cause programs to be installed with an extra prefix or suffix on their names by giving `configure' the option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. Optional Features ================= Some packages pay attention to `--enable-FEATURE' options to `configure', where FEATURE indicates an optional part of the package. They may also pay attention to `--with-PACKAGE' options, where PACKAGE is something like `gnu-as' or `x' (for the X Window System). The `README' should mention any `--enable-' and `--with-' options that the package recognizes. For packages that use the X Window System, `configure' can usually find the X include and library files automatically, but if it doesn't, you can use the `configure' options `--x-includes=DIR' and `--x-libraries=DIR' to specify their locations. Specifying the System Type ========================== There may be some features `configure' can not figure out automatically, but needs to determine by the type of host the package will run on. Usually `configure' can figure that out, but if it prints a message saying it can not guess the host type, give it the `--host=TYPE' option. TYPE can either be a short name for the system type, such as `sun4', or a canonical name with three fields: CPU-COMPANY-SYSTEM See the file `config.sub' for the possible values of each field. If `config.sub' isn't included in this package, then this package doesn't need to know the host type. If you are building compiler tools for cross-compiling, you can also use the `--target=TYPE' option to select the type of system they will produce code for and the `--build=TYPE' option to select the type of system on which you are compiling the package. Sharing Defaults ================ If you want to set default values for `configure' scripts to share, you can create a site shell script called `config.site' that gives default values for variables like `CC', `cache_file', and `prefix'. `configure' looks for `PREFIX/share/config.site' if it exists, then `PREFIX/etc/config.site' if it exists. Or, you can set the `CONFIG_SITE' environment variable to the location of the site script. A warning: not all `configure' scripts look for a site script. Operation Controls ================== `configure' recognizes the following options to control how it operates. `--cache-file=FILE' Use and save the results of the tests in FILE instead of `./config.cache'. Set FILE to `/dev/null' to disable caching, for debugging `configure'. `--help' Print a summary of the options to `configure', and exit. `--quiet' `--silent' `-q' Do not print messages saying which checks are being made. `--srcdir=DIR' Look for the package's source code in directory DIR. Usually `configure' can determine that directory automatically. `--version' Print the version of Autoconf used to generate the `configure' script, and exit. `configure' also accepts some other, not widely useful, options. webmagick-2.02.orig/MANIFEST0100644000175000017500000000165306450036644015317 0ustar arafunearafune$Id: MANIFEST,v 1.6 1997/12/23 22:39:32 bfriesen Exp $ ChangeLog Cronological changes INSTALL WebMagick install instructions INSTALL.generic GNU configure generic instructions MANIFEST This file Makefile.in Makefile template README WebMagick overview TODO Things left to do configure Autoconf configure script configure.in Configure script macros doc/Makefile.in Documentation Makefile template doc/webmagick.dvi Webmagick documentation (DVI) doc/webmagick*.html WebMagick documentation (HTML) doc/webmagick.info WebMagick documentation (info) doc/webmagick.ps WebMagick documentation (Postscript) icons/ WebMagick navigation icons install-sh BSD compatable install script release WebMagick release identification utils/ Useful utilities webmagick.in WebMagick script in template form webmagick.lsm Linux Software Map entry webmagick.lsm.in Linux Software Map entry template webmagickrc.in webmagickrc file template webmagick-2.02.orig/webmagick.js0100644000175000017500000012116307402017732016447 0ustar arafunearafune// // $Id: webmagick.js,v 1.39 2001/11/24 21:29:03 ache Exp $ // // JavaScript routines to display a set of images // Part of the WebMagick package // Copyright 1997, 1998, Bob Friesenhahn // // Start with first page (zero based) var pageNumber = 0; // Start with first image on page var pageImageIndex = 0; // // Window size hints var browserWindowWidth = 800; var browserWindowHeight = 500; // Netscape 4.X if( parent.innerWidth && parent.innerHeight) { browserWindowWidth = parent.innerWidth; browserWindowHeight = parent.innerHeight; } //alert('Width: ' + browserWindowWidth + ' Height: ' + browserWindowHeight); /////////////////////////////////////////////////// // // Routines and variables for the master frame definition // /////////////////////////////////////////////////// // Define window names based on frame style option var frameTargets = new Object(); var origFramestyle = htmlOpts["framestyle"]; var origColumns = htmlOpts["columns"]; var origRows = htmlOpts["rows"]; var today = new Date(); var expires_date = new Date(today.getYear() + 1,today.getMonth(),today.getDate(),0,0,0); // for testing //Set_Cookie('framestyle', '2', expires_date); //Set_Cookie('columns', '2', expires_date); //Set_Cookie('rows', '3', expires_date); // Should check to see if all of these are needed if (htmlOpts["config"] && htmlOpts["config"] != 0 && htmlOpts["tables"]) { if (Get_Cookie('framestyle') != null) { htmlOpts["framestyle"] = Get_Cookie('framestyle'); if (htmlOpts["framestyle"] != origFramestyle) { // reset the cookie to increase the expiration // should do something about the path, but I'm not sure what - one of our current options? Set_Cookie('frameStyle', htmlOpts["framestyle"], expires_date); } } if (Get_Cookie('rows') != null) { htmlOpts["rows"] = Get_Cookie('rows'); if (htmlOpts["rows"] != origRows) { Set_Cookie('rows', htmlOpts["rows"], expires_date); } } if (Get_Cookie('columns') != null) { htmlOpts["columns"] = Get_Cookie('columns'); if (htmlOpts["columns"] != origColumns) { Set_Cookie('columns', htmlOpts["columns"], expires_date); } } if ((htmlOpts["rows"] != origRows) || (htmlOpts["columns"] != origColumns)) { var totalCount = 0; for (i = 0; i < imageNames.length; i++) { for (j = 0; j < imageNames[i].length; j++) { totalCount++; } } var perPage = htmlOpts["rows"] * htmlOpts["columns"]; var remainder = totalCount % perPage; htmlOpts["numpages"] = Math.floor(totalCount / perPage); if (remainder != 0) { htmlOpts["numpages"]++; } imLabels = fixDoubleArray(imLabels, remainder); thumbwidths = fixDoubleArray(thumbwidths, remainder); thumbheights = fixDoubleArray(thumbheights, remainder); imageNames = fixDoubleArray(imageNames, remainder); // why does this run twice???? //alert ('imageNames ' + imageNames[0]); } } // config only works with tables if (htmlOpts["config"] && !htmlOpts["tables"]) { htmlOpts["config"] = 0; } // Set number of display windows based on framestyle option var numWindows = 3; // default for framestyle 1 if( htmlOpts["framestyle"] == 2 || htmlOpts["framestyle"] == 3 || htmlOpts["framestyle"] == 4) { numWindows = 4; } // Set window names based on number of display windows if( numWindows == 3 ) { // One window plays triple duty when there are only two frames frameTargets["dirview"] = 'dirview'; frameTargets["imageview"] = 'imageview'; frameTargets["navview"] = 'navview'; frameTargets["readmeview"] = 'imageview'; frameTargets["thumbview"] = 'imageview'; } else if( numWindows == 4 ) { // When there are four frames, only the README shares a window frameTargets["dirview"] = 'dirview'; frameTargets["imageview"] = 'imageview'; frameTargets["navview"] = 'navview'; frameTargets["readmeview"] = 'imageview'; frameTargets["thumbview"] = 'thumbview'; } function emptyHTML() { return ''; } function drawWindows() { var style = htmlOpts["framestyle"]; // Is README actually displayed? if( ( htmlOpts["readmepresent"] == 1 && htmlOpts["numpages"] == 0 ) || htmlOpts["readmevisible"] == 1 ) { var showReadme = 1; } else { var showReadme = 0; } if( style == 1 ) { displayResult(frameTargets["dirview"], returnDirectoryHTML()); displayResult(frameTargets["navview"], returnNavHTML(0)); if (showReadme != 1) { displayResult(frameTargets["imageview"], returnThumbNailsHTML()); } } else if (style == 2) { displayResult(frameTargets["dirview"], returnDirectoryHTML()); displayResult(frameTargets["thumbview"], returnThumbNailsHTML()); displayResult(frameTargets["navview"], returnNavHTML(0)); if (showReadme != 1) { displayResult(frameTargets["imageview"], returnImageHTML(0)); } } else if (style == 3) { displayResult(frameTargets["dirview"], returnDirectoryHTML()); displayResult(frameTargets["thumbview"], returnThumbNailsHTML()); displayResult(frameTargets["navview"], returnNavHTML(0)); if (showReadme != 1) { displayResult(frameTargets["imageview"], returnImageHTML(0)); } } else if (style == 4) { displayResult(frameTargets["thumbview"], returnThumbNailsHTML()); displayResult(frameTargets["navview"], returnNavHTML(0)); displayResult(frameTargets["dirview"], returnDirectoryHTML()); if (showReadme != 1) { displayResult(frameTargets["imageview"], returnImageHTML(0)); } } } function displayResult(target, result) { var theFrame = open("", target); theFrame.document.writeln(result); theFrame.document.close(); } function returnFrameHTML() { var style = htmlOpts["framestyle"]; // Is README actually displayed? if( ( htmlOpts["readmepresent"] == 1 && htmlOpts["numpages"] == 0 ) || htmlOpts["readmevisible"] == 1 ) { var showReadme = 1; } else { var showReadme = 0; } // frame border definition var frameBorderSize = ' FRAMEBORDER=' + htmlOpts["frameborder"] + ' BORDER=' + htmlOpts["framebordersize"]; // margin width definition var marginBorderSize = ' MARGINWIDTH=' + htmlOpts["framemarginwidth"] + ' MARGINHEIGHT=' + htmlOpts["framemarginheight"]; // Javascript URLs to generate frame source var srcDirectory = ' SRC="javascript:parent.emptyHTML();"'; var srcHidden = ' SRC="' + htmlOpts["jspageindex"] + '"'; var srcImageView = ' SRC="javascript:parent.emptyHTML();"'; var srcNavView = ' SRC="javascript:parent.emptyHTML();"'; var srcReadMe = ' SRC="' + htmlOpts["readme"] + '"'; var srcThumbnails = ' SRC="javascript:parent.emptyHTML();"'; // frame names var nameDirView = ' NAME="' + frameTargets["dirview"] + '"'; var nameHidden = ' NAME="webmagick"'; var nameImageView = ' NAME="' + frameTargets["imageview"] + '"'; var nameNavView = ' NAME="' + frameTargets["navview"] + '"'; var nameThumbView = ' NAME="' + frameTargets["thumbview"] + '"'; var result = '\n' + '\n' + '' + htmlOpts["title"] + '\n'; if (htmlOpts["stylesheet"]) result += '\n'; result += '\n'; if( style == 1 ) { // Three frame screen with directories listed in the // top-left frame, navigation icons displayed in top right frame, // and imagemap or README (dual-use) displayed in the bottom frame. // // ------------- // | | | // |-------------| // | | // | | // | | // | | // ------------- result += '\n' + ' \n' + ' \n' + ' \n'; if( showReadme == 1 ) { result += ' \n'; } else { result += ' \n'; } result += ' \n' + ' \n' + '\n'; } else if ( style == 2 ) { // Four frame screen with directories listed in top-left frame, // image navigation icons in top right frame, imagemap displayed // in bottom-left frame, and README/Images displayed in // full-height right-hand frame. // ------------- // | |----------| // | | | // |--| | // | | | // | | | // | | | // ------------- result += '\n' + ' \n' + ' \n' + ' \n' + ' \n' + ' \n' + ' \n'; if( showReadme == 1 ) { result += ' \n'; } else { result += ' \n'; } result += ' \n' + ' \n' + '\n'; } else if ( style == 3 ) { // Four frame screen with directories listed in left frame, // imagemap displayed in top-right frame, and README/Images // displayed in lower-right frame. // ------------- // | | | // |--+----------| // |--+----------| // | | // | | // | | // ------------- result += '\n' + ' \n' + ' \n' + ' \n' + ' \n' + ' \n' + ' \n'; if( showReadme == 1 ) { result += ' \n'; } else { result += ' \n'; } result += '\n'; } else if ( style == 4 ) { // Four frame screen with imagemap displayed in top frame, // directories in left-center frame, image navigation icons in // right-center frame, and README/Images displayed in bottom // frame. // ------------- // | | // |-------------| // | | | // |-------------| // | | // | | // ------------- result += '\n' + ' \n' + ' \n' + ' \n' + ' \n' + ' \n' + ' \n'; if( showReadme == 1 ) { result += ' \n'; } else { result += ' \n'; } result += '\n'; } result += '\n'; //alert(result); return result; } /////////////////////////////////////////////////// // // Routines and variables for the 'navview' frame // /////////////////////////////////////////////////// var navViewWindow; function returnNavImageHTML() { var result = '
\n'; // up arrow -- only displayed if three-frame style if( htmlOpts["framestyle"] == 1 ) { result += '' + htmlOpts[\n'; } // if we have more than one image then display image nav buttons if(imageNames[pageNumber].length > 1 || imageNames.length > 1) { // preceding image arrow // if not first page or first page and not first image in page if( (pageNumber > 0) || (pageNumber == 0 && pageImageIndex > 0) ) { result += '' + htmlOpts[\n'; } else { result += '\n'; } // next image arrow // if not last page or last page and not last image in page if( (pageNumber < imageNames.length - 1) || (pageNumber == imageNames.length - 1 && pageImageIndex < imageNames[pageNumber].length - 1 ) ) { result += '' + htmlOpts[\n'; }else { result += '\n'; } } // end of if we have one more image result += '
\n'; return result; } function returnNavThumbHTML() { var result = ''; // if no images then return empty page if( imageNames[pageNumber].length == 0 ) { return result; } if( htmlOpts["numpages"] > 1 ) { // start of table result += '
\n\n'; // start navigation row result += '\n' ; result += '\n'; // select specific page result += '\n'; // next page result += '\n'+ '\n' + '
\n'; // preceding page if( pageNumber == 0 ) { // first page + no preceding result += '\n'; } else { // have preceding result += '' + htmlOpts[\n'; } result += '\n'; result += '
\n'; result += '\n'; result += '\n'; result += '\n'; result += '\n'; result += '
\n'; if( pageNumber == htmlOpts["numpages"] - 1 ) { // already on last page result += '\n'; } else { // more to go result += '' + htmlOpts[\n'; } result += '
\n' + '
\n
\n'; } // End of code for multiple thumbnail pages return result; } function returnNavHTML() { // page header var result = '\n' + '\n' ; if (htmlOpts["stylesheet"]) { result += '\n'; result += '\n\n'; } else { result += '\n' + '\n'; } //alert('returnNavHTML(): thumbNailMode=' + thumbNailMode); if( htmlOpts["framestyle"] == 1 && thumbNailMode == true) { result += returnNavThumbHTML(); } else { result += returnNavImageHTML(); } result += '\n' + '\n' ; return result; } /////////////////////////////////////////////////// // // Routines and variables for the 'imageview' frame // /////////////////////////////////////////////////// // Image descriptions for image extensions var imageExtensions = new Object(); imageExtensions['avs'] = 'AVS X image file'; imageExtensions['bie'] = 'Joint Bi-level Image experts Group file interchange format'; imageExtensions['bmp'] = 'Microsoft Windows bitmap image file'; imageExtensions['cgm'] = 'Computer Graphics Metafile'; imageExtensions['dcm'] = 'DICOM Medical image file'; imageExtensions['dcx'] = 'ZSoft IBM PC multi-page Paintbrush file'; imageExtensions['dib'] = 'Microsoft Windows bitmap image file'; imageExtensions['dot'] = 'Graphviz (DOT) file'; imageExtensions['dvi'] = 'TeX DVI file'; imageExtensions['epdf'] = 'Encapsulated Portable Document Format'; imageExtensions['epi'] = 'Adobe Encapsulated PostScript Interchange format'; imageExtensions['eps'] = 'Adobe Encapsulated PostScript file'; imageExtensions['eps2'] = 'Adobe Level II Encapsulated PostScript file'; imageExtensions['epsf'] = 'Adobe Encapsulated PostScript file'; imageExtensions['epsi'] = 'Adobe Encapsulated PostScript Interchange format'; imageExtensions['ept'] = 'Adobe Encapsulated PostScript with TIFF preview'; imageExtensions['fax'] = 'Group 3 FAX'; imageExtensions['fig'] = 'Xfig file'; imageExtensions['fits'] = 'Flexible Image Transport System'; imageExtensions['fpx'] = 'FlashPix Format'; imageExtensions['g3'] = 'Group 3 FAX'; imageExtensions['gif'] = 'CompuServe graphics interchange format'; imageExtensions['gplt'] = 'GNUPLOT plot file'; imageExtensions['hdf'] = 'Hierarchical Data Format'; imageExtensions['hpgl'] = 'HP-GL plotter file'; imageExtensions['ico'] = 'Microsoft icon'; imageExtensions['im1'] = 'SUN Rasterfile (1 bit)'; imageExtensions['im24'] = 'SUN Rasterfile (24 bit)'; imageExtensions['im8'] = 'SUN Rasterfile (8 bit)'; imageExtensions['jbg'] = 'Joint Bi-level Image experts Group file interchange format'; imageExtensions['jbig'] = 'Joint Bi-level Image experts Group file interchange format'; imageExtensions['jpeg'] = 'Joint Photographic Experts Group JFIF format'; imageExtensions['jpg'] = 'Joint Photographic Experts Group JFIF format'; imageExtensions['m2v'] = 'Motion Picture Experts Group file interchange format'; imageExtensions['man'] = 'Manual page'; imageExtensions['miff'] = 'Magick image file format'; imageExtensions['mng'] = 'Multiple-image Network Graphics'; imageExtensions['mpeg'] = 'Motion Picture Experts Group file interchange format'; imageExtensions['mpg'] = 'Motion Picture Experts Group file interchange format'; imageExtensions['mtv'] = 'MTV Raytracing image format'; imageExtensions['p7'] = 'Xv thumbnail format'; imageExtensions['pbm'] = 'Portable bitmap format (black and white)'; imageExtensions['pcd'] = 'Photo CD'; imageExtensions['pcds'] = 'Photo CD'; imageExtensions['pcx'] = 'ZSoft IBM PC Paintbrush file'; imageExtensions['pdf'] = 'Portable Document Format'; imageExtensions['pgm'] = 'Portable graymap format (gray scale)'; imageExtensions['pic'] = 'Apple Macintosh QuickDraw/PICT file'; imageExtensions['pict'] = 'Apple Macintosh QuickDraw/PICT file'; imageExtensions['pix'] = 'Alias/Wavefront RLE image format'; imageExtensions['png'] = 'Portable Network Graphics'; imageExtensions['pnm'] = 'Portable anymap'; imageExtensions['pov'] = 'Persistance Of Vision file'; imageExtensions['ppm'] = 'Portable pixmap format (color)'; imageExtensions['ps'] = 'Adobe PostScript file'; imageExtensions['psd'] = 'Adobe Photoshop bitmap file'; imageExtensions['rad'] = 'Radiance image format'; imageExtensions['rla'] = 'Alias/Wavefront image file'; imageExtensions['rle'] = 'Utah Run length encoded image file'; imageExtensions['sgi'] = 'Irix RGB image file'; imageExtensions['sun'] = 'SUN Rasterfile'; imageExtensions['tga'] = 'Truevision Targa image file'; imageExtensions['tif'] = 'Tagged Image File Format'; imageExtensions['tiff'] = 'Tagged Image File Format'; imageExtensions['tim'] = 'PSX TIM file'; imageExtensions['ttf'] = 'TrueType font file'; imageExtensions['vicar'] = 'VICAR rasterfile format'; imageExtensions['viff'] = 'Khoros Visualization image file'; imageExtensions['xbm'] = 'X Windows system bitmap (black and white)'; imageExtensions['xpm'] = 'X Windows system pixmap file (color)'; imageExtensions['xwd'] = 'X Windows system window dump file (color)'; // return HTML to display image with corresponding index function returnImageHTML(imageIndex) { pageImageIndex = imageIndex; var result = '\n' + '\n' ; if (htmlOpts["stylesheet"]) { result += '\n'; result += '\n\n'; } else { result += '\n' + '\n'; } // only do work if image exists if (imageNames[pageNumber][imageIndex] != null) { result += '

'; // if image title defined, then use it, otherwise, image name if( imageLabels[imageNames[pageNumber][imageIndex]] != null ) { result += imageLabels[imageNames[pageNumber][imageIndex]]; } else { result += imageNames[pageNumber][imageIndex]; } result += '

\n'; // Look for image file extension var image = imageNames[pageNumber][imageIndex]; var delim = image.lastIndexOf('.'); var extension = ''; if ( delim > 0 ) { extension = image.substring(delim + 1); extension = extension.toLowerCase(); } if( extension == 'gif' || extension == 'jpg' || extension == 'jpe' || extension == 'jpeg' || extension == 'xbm' || extension == 'png' ) { // Browser supports displaying image in-line result += '

\n'; } else { // Browser requires an external helper program result += '

Your browser may not have the capability to view files of format "' + imageExtensions[extension] + '" as an in-line image. View image via a link instead.

\n'; } // mod to get embedded mod files based on previews var imageNoExtension = image.substr(0, image.length - (image.length - delim)); if (imageNoExtension.substr(imageNoExtension.length - 4, 4) == '.mov') { // it's a Quicktime movie result += '

'; } if(htmlOpts["anonymous"] == 0) { result += '

\n' + '
Produced by ' + 'WebMagick ' + htmlOpts["version"] + '\nCopyright © Bob Friesenhahn
\n'; } } result += '\n' + '\n'; return result; } // Display current image in named window // Display image // Display thumbnails in navview window if framestyle != 1 var imageViewWindow; function displayImage() { //var targeturl = 'javascript:parent.webmagick.returnImageHTML(' + pageImageIndex + ');'; //imageViewWindow = window.open( targeturl, frameTargets["imageview"]); displayResult(frameTargets["imageview"], returnImageHTML(pageImageIndex)); if( htmlOpts["framestyle"] == 1) { thumbNailMode = false; } // alert('displayImage(): thumbNailMode=' + thumbNailMode); //var targeturl = 'javascript:parent.webmagick.returnNavHTML();'; //navViewWindow = window.open( targeturl, frameTargets["navview"]); displayResult(frameTargets["navview"], returnNavHTML()); } // Display an image by index number (setting current image) function displayImageByIndex(imageIndex) { pageImageIndex = imageIndex; displayImage(); } // Display the next image in a series function displayNextImage() { // if not last image in current page, then increment index if(pageImageIndex < imageNames[pageNumber].length - 1 ) { ++pageImageIndex; displayImage(); // display new image } else { // if not last page then increment page and set index to zero if(pageNumber < imageNames.length - 1) { ++pageNumber; pageImageIndex = 0; if(htmlOpts["framestyle"] == 1) { displayImage(); // display new image } else { displayThumbNails(); // display new thumbnails & image } } } } // Display the preceding image in a series function displayPrecedingImage() { // if not first image in current page, then decrement index if( pageImageIndex > 0 ) { --pageImageIndex; displayImage(); // display new image } else { // if not first page, then decrement page and set index to max index for page if(pageNumber > 0) { --pageNumber; pageImageIndex = imageNames[pageNumber].length - 1; if(htmlOpts["framestyle"] == 1) { displayImage(); // display new image } else { displayThumbNails(); // display new thumbnails & image } } } } /////////////////////////////////////////////////// // // Routines and variables for the 'thumbview' frame // /////////////////////////////////////////////////// // Write out thumbnail index HTML into thumbview window // and write navigation info to navview window. // Display thumbnails // Display thumbnail navigator in thumbview window if framestyle=1 // Display image if framestyle!=1 var thumbViewWindow; var thumbNailMode=true; function displayThumbNails() { //var targeturl = 'javascript:parent.webmagick.returnThumbNailsHTML();'; //thumbViewWindow = window.open( targeturl, frameTargets["thumbview"]); displayResult(frameTargets["thumbview"], returnThumbNailsHTML()); if ( htmlOpts["framestyle"] == 1 ) { thumbNailMode = true //var targeturl = 'javascript:parent.webmagick.returnNavHTML();'; //navViewWindow = window.open( targeturl, frameTargets["navview"]); displayResult(frameTargets["navview"], returnNavHTML()); } else { thumbNailMode = true displayImage(); } } // return HTML to display thumbnail selection function returnThumbNailsHTML() { // page header var result = '\n' + '\n' ; if (htmlOpts["stylesheet"]) { result += '\n'; result += '\n\n'; } else { result += '\n' + '\n'; } // if no images then return empty page if( imageNames[pageNumber].length == 0 ) { result += '\n' + '\n' ; return result; } // If not in framestyle 1, display thumbnail navigator if ( htmlOpts["framestyle"] != 1 ) { result += returnNavThumbHTML(); } result += '
\n'; if ( htmlOpts["tables"] == 1) { result += ''; } else { result += '' + '\n'; } for( imageNum = 0; imageNum < imageNames[pageNumber].length; ++imageNum ) { if ( htmlOpts["tables"] == 1) { if (imageNum%htmlOpts["columns"] == 0) { result += ''; } result += ''; if (imageNum%htmlOpts["columns"] == (htmlOpts["columns"] - 1)) { result += ''; } } else { result += ' \n'; } } if ( htmlOpts["tables"] == 1) { result += '
\n'; result += '
\n'; if (imLabels[pageNumber][imageNum]) { result += '' + imLabels[pageNumber][imageNum] + '\n'; } result += '
'; } else { result += '\n'; } result += '
\n
\n'; if (htmlOpts["address"] != '') { result += htmlOpts["address"] + '
\n'; } result += ''; result += htmlOpts["dateText"] + '\n'; if(htmlOpts["anonymous"] == 0) { result += '

\n' + htmlOpts["msg_produced_by"] + ' ' + 'WebMagick ' + htmlOpts["version"] + ', ' + htmlOpts["msg_copyright"] + '© Bob Friesenhahn\n'; } result += '
\n
\n'; result += '\n' + '\n' ; return result; } /////////////////////////////////////////////////// // // Routines and variables for the 'dirview' frame // /////////////////////////////////////////////////// // Display directory listing in frame var dirViewWindow; function displayDirectory() { displayResult(frameTargets["dirview"], returnDirectoryHTML()); } var configWindow; function saveConfig() { newColumns = configWindow.document.aForm.columns.value; newRows = configWindow.document.aForm.rows.value; var newStyle; for (var i = 0; i < configWindow.document.aForm.framestyle.length; i++) { if (configWindow.document.aForm.framestyle[i].checked) { newStyle=configWindow.document.aForm.framestyle[i].value; } } // TODO: error checking Set_Cookie('framestyle', newStyle, expires_date); Set_Cookie('columns', newColumns, expires_date); Set_Cookie('rows', newRows, expires_date); configWindow.close(); parent.location.reload(); } // display the window to allow configuration changes function showConfig() { configWindow = open('', 'wmConfig', 'toolbar=no,dependent=yes,menubar=no,status=no,resizable=yes,width=550,height=575'); configWindow.document.open(); result = 'Configure Gallery'; result += '
'; result += '

Columns: \n'; result += ' Rows: \n'; result += ''; result += '
\n'; result += '\n'; result += '\n'; result += '
\n'; result += '

'; configWindow.document.write(result); configWindow.document.close(); } // Navigate to directory function changeDirectory(dirname) { // Redisplay complete frameset top.window.location = escapeURL(dirname) + '/' + dirLinks[dirname]; } // return HTML to display directory listing function returnDirectoryHTML() { var result = '\n' + '\n' ; if (htmlOpts["stylesheet"]) { result += '\n'; result += '\n\n'; } else { result += '\n' + '\n'; } result +='\n'; // up arrow result += '' + htmlOpts[\n'; // config if( htmlOpts["config"] && (htmlOpts["config"] != 0)) { result += 'Config\n'; } // help if( htmlOpts["readmepresent"] != 0 ) { result += '' + htmlOpts[\n'; } // list out directory URLs if( dirNames.length != 0 ) { result += '
' + htmlOpts["msg_directories"] + '
\n'; for( dirNum = 0; dirNum < dirNames.length; ++dirNum ) { // if we have directory title, then use it, else use directory name var dirTitle = ''; if( dirTitles[dirNames[dirNum]] != null ) { dirTitle = dirTitles[dirNames[dirNum]]; } else { dirTitle = dirNames[dirNum]; } result += ' 0 ) { --pageNumber; pageImageIndex = 0; displayThumbNails(); } } // Display specific index page function goToIndex(number) { pageNumber = number; pageImageIndex = 0; displayThumbNails(); } /////////////////////////////////////////////////// // // General purpose routines // /////////////////////////////////////////////////// // Escape characters in strings so they may be evaluated by JavaScript function escapeJs(inString) { var outString = ''; //alert ('Inside escapeJs ' + inString); //if (! defined(inString)) { return outString; } for(pos = 0; pos < inString.length; pos++) { c = inString.charAt(pos); if(c == '\'' || c == '"' || c == '\n') { outString += '\\'; } outString += c; } return outString; } // Escape spaces in URLs function escapeURL(inString) { var outString = ''; for (pos = 0; pos < inString.length; pos++) { c = inString.charAt(pos); if (c == '%') { outString += '%25'; } else if (c == ' ') { outString += '%20'; } else if (c == '#') { outString += '%23'; } else { outString += c; } } return outString; } function Get_Cookie(name) { var start = document.cookie.indexOf(name+"="); var len = start+name.length+1; if ((!start) && (name != document.cookie.substring(0,name.length))) return null; if (start == -1) return null; var end = document.cookie.indexOf(";",len); if (end == -1) end = document.cookie.length; return unescape(document.cookie.substring(len,end)); } function Set_Cookie(name,value,expires,domain,secure) { document.cookie = name + "=" +escape(value) + ( (expires) ? ";expires=" + expires.toGMTString() : "") + ";path=" + htmlOpts["prefixpath"] + "/" + ( (domain) ? ";domain=" + domain : "") + ( (secure) ? ";secure" : ""); } function Delete_Cookie(name,path,domain) { if (Get_Cookie(name)) document.cookie = name + "=" + ( (path) ? ";path=" + path : "") + ( (domain) ? ";domain=" + domain : "") + ";expires=Thu, 01-Jan-1970 00:00:01 GMT"; } function fixDoubleArray(anArray, aRemainder) { var counter = 0; var perPage = htmlOpts["rows"] * htmlOpts["columns"]; // create new array var tempArray = new Array(htmlOpts["numpages"]); for (i = 0; i < htmlOpts["numpages"]; i++) { if ((i == htmlOpts["numpages"] - 1) && (aRemainder != 0)) { tempArray[i] = new Array(aRemainder); } else { tempArray[i] = new Array(perPage); } } // handle empty directory if (htmlOpts["numpages"] == 0) { tempArray = new Array(1); tempArray[0] = new Array(0); } for (i = 0; i < anArray.length; i++) { for (j = 0; j < anArray[i].length; j++) { tempArray[(Math.floor(counter / perPage))][(counter % perPage)] = anArray[i][j]; counter++; } } //alert ('tempArray ' + tempArray[0]); //anArray = tempArray; return tempArray; } // indicate this file fully loaded var WebMagickLoaded = 1; webmagick-2.02.orig/webmagick.lsm0100644000175000017500000000300007413200203016600 0ustar arafunearafuneBegin4 Title: WebMagick Image Web Generator Version: 2.02 Entered-date: 2001-12-28 Description: WebMagick is a package which supports making image collections available on the Web. It recurses through directory trees, building HTML pages, imagemap files, and client-side/server-side maps to allow the user to navigate through collections of thumbnail images (somewhat similar to xv's Visual Schnauzer) and select the image to view with a mouse click. In addition to the HTML interface, WebMagick provides a sophisticated JavaScript-based interface that provides improved visual and navigational capabilities while generating all displays locally in the user's browser. WebMagick is written in PERL and is compatible with PERL version 5.003 and later. WebMagick uses the ImageMagick package and the PERL extension to ImageMagick (PerlMagick) and therefore requires that these packages be installed. Keywords: Web, ImageMagick, PERL, PerlMagick, graphics, GIF, JPEG Author: bfriesen@simple.dallas.tx.us (Bob Friesenhahn) Maintained-by: clindell@users.sourceforge.net (Chris Lindell) Primary-site: download.sourceforge.net /pub/sourceforge/webmagick 359 kb webmagick-2.02.tar.gz Platforms: Requires UNIX, PERL, ImageMagick, and PerlMagick Copying-policy: GPL End webmagick-2.02.orig/webmagick.lsm.in0100644000175000017500000000300607306016453017230 0ustar arafunearafuneBegin4 Title: WebMagick Image Web Generator Version: %VERSION% Entered-date: %DATE% Description: WebMagick is a package which supports making image collections available on the Web. It recurses through directory trees, building HTML pages, imagemap files, and client-side/server-side maps to allow the user to navigate through collections of thumbnail images (somewhat similar to xv's Visual Schnauzer) and select the image to view with a mouse click. In addition to the HTML interface, WebMagick provides a sophisticated JavaScript-based interface that provides improved visual and navigational capabilities while generating all displays locally in the user's browser. WebMagick is written in PERL and is compatible with PERL version 5.003 and later. WebMagick uses the ImageMagick package and the PERL extension to ImageMagick (PerlMagick) and therefore requires that these packages be installed. Keywords: Web, ImageMagick, PERL, PerlMagick, graphics, GIF, JPEG Author: bfriesen@simple.dallas.tx.us (Bob Friesenhahn) Maintained-by: clindell@users.sourceforge.net (Chris Lindell) Primary-site: download.sourceforge.net /pub/sourceforge/webmagick 359 kb webmagick-%VERSION%.tar.gz Platforms: Requires UNIX, PERL, ImageMagick, and PerlMagick Copying-policy: GPL End webmagick-2.02.orig/doc/0040755000175000017500000000000007413200226014716 5ustar arafunearafunewebmagick-2.02.orig/doc/Makefile.in0100644000175000017500000003407307413200223016764 0ustar arafunearafune# Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. # # Makefile for WebMagick Documentation # # Copyright Bob Friesenhahn, 1999 # SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ sbindir = @sbindir@ libexecdir = @libexecdir@ datadir = @datadir@ sysconfdir = @sysconfdir@ sharedstatedir = @sharedstatedir@ localstatedir = @localstatedir@ libdir = @libdir@ infodir = @infodir@ mandir = @mandir@ includedir = @includedir@ oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = .. ACLOCAL = @ACLOCAL@ AUTOCONF = @AUTOCONF@ AUTOMAKE = @AUTOMAKE@ AUTOHEADER = @AUTOHEADER@ INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = @INSTALL_DATA@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : DEFAULTFONT = @DEFAULTFONT@ HTIMAGE = @HTIMAGE@ ICONPATH = @ICONPATH@ MAKEINFO = @MAKEINFO@ MAPTYPE = @MAPTYPE@ PACKAGE = @PACKAGE@ PERL = @PERL@ PREFIXPATH = @PREFIXPATH@ RGBDB = @RGBDB@ ROOTPATH = @ROOTPATH@ VERSION = @VERSION@ XLSFONTS = @XLSFONTS@ AUTOMAKE_OPTIONS = 1.2 # Subdirectories under Automake control SUBDIRS = fig # Additional files to distribute EXTRA_DIST = webmagick.1 webmagick.html # removed for now because it's big #webmagick.ps info_TEXINFOS = webmagick.texinfo dvi_TEXINFOS = webmagick.texinfo man_MANS = webmagick.1 mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_CLEAN_FILES = TEXI2DVI = texi2dvi INFO_DEPS = webmagick.info DVIS = webmagick.dvi TEXINFOS = webmagick.texinfo man1dir = $(mandir)/man1 MANS = $(man_MANS) NROFF = nroff DIST_COMMON = README Makefile.am Makefile.in texinfo.tex DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) TAR = gtar GZIP_ENV = --best all: all-redirect .SUFFIXES: .SUFFIXES: .dvi .info .ps .texi .texinfo .txi $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps doc/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status webmagick.info: webmagick.texinfo webmagick.dvi: webmagick.texinfo DVIPS = dvips .texi.info: @cd $(srcdir) && rm -f $@ $@-[0-9] $@-[0-9][0-9] cd $(srcdir) \ && $(MAKEINFO) `echo $< | sed 's,.*/,,'` .texi.dvi: TEXINPUTS=.:$$TEXINPUTS \ MAKEINFO='$(MAKEINFO) -I $(srcdir)' $(TEXI2DVI) $< .texi: @cd $(srcdir) && rm -f $@ $@-[0-9] $@-[0-9][0-9] cd $(srcdir) \ && $(MAKEINFO) `echo $< | sed 's,.*/,,'` .texinfo.info: @cd $(srcdir) && rm -f $@ $@-[0-9] $@-[0-9][0-9] cd $(srcdir) \ && $(MAKEINFO) `echo $< | sed 's,.*/,,'` .texinfo: @cd $(srcdir) && rm -f $@ $@-[0-9] $@-[0-9][0-9] cd $(srcdir) \ && $(MAKEINFO) `echo $< | sed 's,.*/,,'` .texinfo.dvi: TEXINPUTS=.:$$TEXINPUTS \ MAKEINFO='$(MAKEINFO) -I $(srcdir)' $(TEXI2DVI) $< .txi.info: @cd $(srcdir) && rm -f $@ $@-[0-9] $@-[0-9][0-9] cd $(srcdir) \ && $(MAKEINFO) `echo $< | sed 's,.*/,,'` .txi.dvi: TEXINPUTS=.:$$TEXINPUTS \ MAKEINFO='$(MAKEINFO) -I $(srcdir)' $(TEXI2DVI) $< .txi: @cd $(srcdir) && rm -f $@ $@-[0-9] $@-[0-9][0-9] cd $(srcdir) \ && $(MAKEINFO) `echo $< | sed 's,.*/,,'` .dvi.ps: $(DVIPS) $< -o $@ install-info-am: $(INFO_DEPS) @$(NORMAL_INSTALL) $(mkinstalldirs) $(DESTDIR)$(infodir) @list='$(INFO_DEPS)'; \ for file in $$list; do \ d=$(srcdir); \ for ifile in `cd $$d && echo $$file $$file-[0-9] $$file-[0-9][0-9]`; do \ if test -f $$d/$$ifile; then \ echo " $(INSTALL_DATA) $$d/$$ifile $(DESTDIR)$(infodir)/$$ifile"; \ $(INSTALL_DATA) $$d/$$ifile $(DESTDIR)$(infodir)/$$ifile; \ else : ; fi; \ done; \ done @$(POST_INSTALL) @if $(SHELL) -c 'install-info --version | sed 1q | fgrep -s -v -i debian' >/dev/null 2>&1; then \ list='$(INFO_DEPS)'; \ for file in $$list; do \ echo " install-info --info-dir=$(DESTDIR)$(infodir) $(DESTDIR)$(infodir)/$$file";\ install-info --info-dir=$(DESTDIR)$(infodir) $(DESTDIR)$(infodir)/$$file || :;\ done; \ else : ; fi uninstall-info: $(PRE_UNINSTALL) @if $(SHELL) -c 'install-info --version | sed 1q | fgrep -s -v -i debian' >/dev/null 2>&1; then \ ii=yes; \ else ii=; fi; \ list='$(INFO_DEPS)'; \ for file in $$list; do \ test -z "$ii" \ || install-info --info-dir=$(DESTDIR)$(infodir) --remove $$file; \ done @$(NORMAL_UNINSTALL) list='$(INFO_DEPS)'; \ for file in $$list; do \ (cd $(DESTDIR)$(infodir) && rm -f $$file $$file-[0-9] $$file-[0-9][0-9]); \ done dist-info: $(INFO_DEPS) list='$(INFO_DEPS)'; \ for base in $$list; do \ d=$(srcdir); \ for file in `cd $$d && eval echo $$base*`; do \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file; \ done; \ done mostlyclean-aminfo: -rm -f webmagick.aux webmagick.cp webmagick.cps webmagick.dvi \ webmagick.fn webmagick.fns webmagick.ky webmagick.kys \ webmagick.ps webmagick.log webmagick.pg webmagick.toc \ webmagick.tp webmagick.tps webmagick.vr webmagick.vrs \ webmagick.op webmagick.tr webmagick.cv webmagick.cn clean-aminfo: distclean-aminfo: maintainer-clean-aminfo: cd $(srcdir) && for i in $(INFO_DEPS); do \ rm -f $$i; \ if test "`echo $$i-[0-9]*`" != "$$i-[0-9]*"; then \ rm -f $$i-[0-9]*; \ fi; \ done install-man1: $(mkinstalldirs) $(DESTDIR)$(man1dir) @list='$(man1_MANS)'; \ l2='$(man_MANS)'; for i in $$l2; do \ case "$$i" in \ *.1*) list="$$list $$i" ;; \ esac; \ done; \ for i in $$list; do \ if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \ else file=$$i; fi; \ ext=`echo $$i | sed -e 's/^.*\\.//'`; \ inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ inst=`echo $$inst | sed '$(transform)'`.$$ext; \ echo " $(INSTALL_DATA) $$file $(DESTDIR)$(man1dir)/$$inst"; \ $(INSTALL_DATA) $$file $(DESTDIR)$(man1dir)/$$inst; \ done uninstall-man1: @list='$(man1_MANS)'; \ l2='$(man_MANS)'; for i in $$l2; do \ case "$$i" in \ *.1*) list="$$list $$i" ;; \ esac; \ done; \ for i in $$list; do \ ext=`echo $$i | sed -e 's/^.*\\.//'`; \ inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ inst=`echo $$inst | sed '$(transform)'`.$$ext; \ echo " rm -f $(DESTDIR)$(man1dir)/$$inst"; \ rm -f $(DESTDIR)$(man1dir)/$$inst; \ done install-man: $(MANS) @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) install-man1 uninstall-man: @$(NORMAL_UNINSTALL) $(MAKE) $(AM_MAKEFLAGS) uninstall-man1 # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. @SET_MAKE@ all-recursive install-data-recursive install-exec-recursive \ installdirs-recursive install-recursive uninstall-recursive \ check-recursive installcheck-recursive info-recursive dvi-recursive: @set fnord $(MAKEFLAGS); amf=$$2; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" mostlyclean-recursive clean-recursive distclean-recursive \ maintainer-clean-recursive: @set fnord $(MAKEFLAGS); amf=$$2; \ dot_seen=no; \ rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \ rev="$$subdir $$rev"; \ test "$$subdir" = "." && dot_seen=yes; \ done; \ test "$$dot_seen" = "no" && rev=". $$rev"; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done tags: TAGS ID: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ here=`pwd` && cd $(srcdir) \ && mkid -f$$here/ID $$unique $(LISP) TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) tags=; \ here=`pwd`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) mostlyclean-tags: clean-tags: distclean-tags: -rm -f TAGS ID maintainer-clean-tags: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = doc distdir: $(DISTFILES) @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done for subdir in $(SUBDIRS); do \ if test "$$subdir" = .; then :; else \ test -d $(distdir)/$$subdir \ || mkdir $(distdir)/$$subdir \ || exit 1; \ chmod 777 $(distdir)/$$subdir; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir=../$(top_distdir) distdir=../$(distdir)/$$subdir distdir) \ || exit 1; \ fi; \ done $(MAKE) $(AM_MAKEFLAGS) top_distdir="$(top_distdir)" distdir="$(distdir)" dist-info info-am: $(INFO_DEPS) info: info-recursive dvi-am: $(DVIS) dvi-local dvi: dvi-recursive check-am: all-am check: check-recursive installcheck-am: installcheck: installcheck-recursive install-exec-am: install-exec: install-exec-recursive install-data-am: install-info-am install-man install-data: install-data-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-recursive uninstall-am: uninstall-info uninstall-man uninstall: uninstall-recursive all-am: Makefile $(INFO_DEPS) $(MANS) all-local all-redirect: all-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: installdirs-recursive installdirs-am: $(mkinstalldirs) $(DESTDIR)$(infodir) $(DESTDIR)$(mandir)/man1 mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-aminfo mostlyclean-tags mostlyclean-generic mostlyclean: mostlyclean-recursive clean-am: clean-aminfo clean-tags clean-generic mostlyclean-am \ clean-local clean: clean-recursive distclean-am: distclean-aminfo distclean-tags distclean-generic \ clean-am distclean-local distclean: distclean-recursive maintainer-clean-am: maintainer-clean-aminfo maintainer-clean-tags \ maintainer-clean-generic distclean-am \ maintainer-clean-local @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-recursive .PHONY: install-info-am uninstall-info mostlyclean-aminfo \ distclean-aminfo clean-aminfo maintainer-clean-aminfo install-man1 \ uninstall-man1 install-man uninstall-man install-data-recursive \ uninstall-data-recursive install-exec-recursive \ uninstall-exec-recursive installdirs-recursive uninstalldirs-recursive \ all-recursive check-recursive installcheck-recursive info-recursive \ dvi-recursive mostlyclean-recursive distclean-recursive clean-recursive \ maintainer-clean-recursive tags tags-recursive mostlyclean-tags \ distclean-tags clean-tags maintainer-clean-tags distdir info-am info \ dvi-local dvi-am dvi check check-am installcheck-am installcheck \ install-exec-am install-exec install-data-am install-data install-am \ install uninstall-am uninstall all-local all-redirect all-am all \ installdirs-am installdirs mostlyclean-generic distclean-generic \ clean-generic maintainer-clean-generic clean mostlyclean distclean \ maintainer-clean # Rule to build webmagick.1 webmagick.1: ../webmagick ../utils/help2man ../webmagick > webmagick.1 # Rule to build webmagick.html webmagick.html: webmagick.texinfo texi2html -monolithic webmagick.texinfo webmagick_toc.html: webmagick.texinfo texi2html -split_chapter webmagick.texinfo # Rule to build webmagick.dvi webmagick.dvi: webmagick.texinfo texi2dvi webmagick.texinfo # Rule to build webmagick.ps webmagick.ps: webmagick.dvi dvips -r0 -o $@ webmagick.dvi all-local: webmagick.html dvi-local: webmagick.ps clean-local: distclean-local: maintainer-clean-local: # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: webmagick-2.02.orig/doc/README0100644000175000017500000000564406447567316015632 0ustar arafunearafune WebMagick Documentation This directory contains documentation (webmagick.texinfo) which is written in GNU's TeXInfo format. Provided that a texinfo.tex macro file is available, this file may be translated into a DVI file and from there into Postscript or some other output format for which a DVI driver exists. The GNU texinfo package (currently at version 3.11 provides a 'makeinfo' command which translates the TeXInfo file into 'info' format so that it may be browsed with the stand-anone 'info' program, viewed in Emacs, or viewed with the 'xinfo' program. High quality HTML output may be created via Lionel Cons's 'texi2html' program which is available from the URL "http://wwwcn.cern.ch/dci/texi2html/". If you lack a TeX installation, use the instructions found in `ftp://ftp.tug.org/tex/unixtex.ftp' and proceed from there. These instructions talk about individual packages. In my experience, obtaining and installing the packages 'texmflib.tar.gz' and 'texk-7.0.tar.gz', plus the graphicx packages (see below) provide sufficient TeX capabilities in order to format the WebMagick documentation (in addition to the aforementioned GNU texinfo-3.11.tar.gz package). In order to handle the EPS figures used throughout the document you must install a recent dvips driver (included in texk-7.0.tar.gz) Which may be obtained from the CTAN network. ftp.tex.ac.uk is a represenative CPAN site with its CPAN files rooted under "/ctan/tex-archive/". Another site is ftp.cdrom.com with files rooted under "/pub/tex/ctan/". If you really don't want to bother with installing TeX but want typeset output, then look at the 'webmagick.me' target in the Makefile which uses 'texi2roff' instead. The output is not as nice but is seems to work ok. The 'texi2roff' program takes only a few minutes to compile and install. Documentation processing paths are similar to the following: Postscript: =========== webmagick.texinfo-->texi2dvi-->webmagick.dvi-->dvips-->webmagick.ps The provided Postscript file is optimized for printers with the "CX" engine which include most 300DPI HP printers and clones. If your printer differs, you may want to generate your own Postscript file (presuming you have a TeX installation). Without a TeX installation Postscript can be generated via a combination of texi2roff and groff (see the 'webmagick.me' target in the Makefile): webmagick.texinfo-->texi2roff-->webmagick.me-->groff -me>webmagick_me.ps Info: ===== webmagick.texinfo-->makeinfo-->webmagick.info* HTML: ===== webmagick.texinfo-->texi2html-->webmagick*.html Documentation may be viewed on line via: o Using 'xdvi' on the DVI file o Using 'ghostview' on the Postscript file o Using 'info', 'xinfo', or 'emacs' on the Info file o Using 'nroff -me' on a generated webmagick.me troff file o Using a Web browser to view the HTML files webmagick-2.02.orig/doc/Makefile.am0100644000175000017500000000167307330400404016754 0ustar arafunearafune# # Makefile for WebMagick Documentation # # Copyright Bob Friesenhahn, 1999 # AUTOMAKE_OPTIONS = 1.2 # Subdirectories under Automake control SUBDIRS = fig # Additional files to distribute EXTRA_DIST = webmagick.1 webmagick.html # removed for now because it's big #webmagick.ps info_TEXINFOS = webmagick.texinfo dvi_TEXINFOS = webmagick.texinfo man_MANS = webmagick.1 # Rule to build webmagick.1 webmagick.1: ../webmagick ../utils/help2man ../webmagick > webmagick.1 # Rule to build webmagick.html webmagick.html: webmagick.texinfo texi2html -monolithic webmagick.texinfo webmagick_toc.html: webmagick.texinfo texi2html -split_chapter webmagick.texinfo # Rule to build webmagick.dvi webmagick.dvi: webmagick.texinfo texi2dvi webmagick.texinfo # Rule to build webmagick.ps webmagick.ps: webmagick.dvi dvips -r0 -o $@ webmagick.dvi all-local: webmagick.html dvi-local: webmagick.ps clean-local: distclean-local: maintainer-clean-local: webmagick-2.02.orig/doc/texinfo.tex0100644000175000017500000054550706762613027017146 0ustar arafunearafune% texinfo.tex -- TeX macros to handle Texinfo files. % % Load plain if necessary, i.e., if running under initex. \expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi % \def\texinfoversion{1999-01-05}% % % Copyright (C) 1985, 86, 88, 90, 91, 92, 93, 94, 95, 96, 97, 98 % Free Software Foundation, Inc. % % This texinfo.tex file 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, or (at % your option) any later version. % % This texinfo.tex file is distributed in the hope that 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 texinfo.tex file; see the file COPYING. If not, write % to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, % Boston, MA 02111-1307, USA. % % In other words, you are welcome to use, share and improve this program. % You are forbidden to forbid anyone else to use, share and improve % what you give them. Help stamp out software-hoarding! % % Please try the latest version of texinfo.tex before submitting bug % reports; you can get the latest version from: % ftp://ftp.gnu.org/pub/gnu/texinfo.tex % /home/gd/gnu/doc/texinfo.tex on the GNU machines. % (and all GNU mirrors, see http://www.gnu.org/order/ftp.html) % ftp://tug.org/tex/texinfo.tex % ftp://ctan.org/macros/texinfo/texinfo.tex % (and all CTAN mirrors, finger ctan@ctan.org for a list). % The texinfo.tex in the texinfo distribution itself could well be out % of date, so if that's what you're using, please check. % % Send bug reports to bug-texinfo@gnu.org. % Please include a precise test case in each bug report, % including a complete document with which we can reproduce the problem. % % To process a Texinfo manual with TeX, it's most reliable to use the % texi2dvi shell script that comes with the distribution. For simple % manuals, however, you can get away with: % tex foo.texi % texindex foo.?? % tex foo.texi % tex foo.texi % dvips foo.dvi -o # or whatever, to process the dvi file. % The extra runs of TeX get the cross-reference information correct. % Sometimes one run after texindex suffices, and sometimes you need more % than two; texi2dvi does it as many times as necessary. \message{Loading texinfo [version \texinfoversion]:} % If in a .fmt file, print the version number % and turn on active characters that we couldn't do earlier because % they might have appeared in the input file name. \everyjob{\message{[Texinfo version \texinfoversion]}% \catcode`+=\active \catcode`\_=\active} % Save some parts of plain tex whose names we will redefine. \let\ptexb=\b \let\ptexbullet=\bullet \let\ptexc=\c \let\ptexcomma=\, \let\ptexdot=\. \let\ptexdots=\dots \let\ptexend=\end \let\ptexequiv=\equiv \let\ptexexclam=\! \let\ptexi=\i \let\ptexlbrace=\{ \let\ptexrbrace=\} \let\ptexstar=\* \let\ptext=\t % We never want plain's outer \+ definition in Texinfo. % For @tex, we can use \tabalign. \let\+ = \relax \message{Basics,} \chardef\other=12 % If this character appears in an error message or help string, it % starts a new line in the output. \newlinechar = `^^J % Set up fixed words for English if not already set. \ifx\putwordAppendix\undefined \gdef\putwordAppendix{Appendix}\fi \ifx\putwordChapter\undefined \gdef\putwordChapter{Chapter}\fi \ifx\putwordfile\undefined \gdef\putwordfile{file}\fi \ifx\putwordInfo\undefined \gdef\putwordInfo{Info}\fi \ifx\putwordMethodon\undefined \gdef\putwordMethodon{Method on}\fi \ifx\putwordon\undefined \gdef\putwordon{on}\fi \ifx\putwordpage\undefined \gdef\putwordpage{page}\fi \ifx\putwordsection\undefined \gdef\putwordsection{section}\fi \ifx\putwordSection\undefined \gdef\putwordSection{Section}\fi \ifx\putwordsee\undefined \gdef\putwordsee{see}\fi \ifx\putwordSee\undefined \gdef\putwordSee{See}\fi \ifx\putwordShortContents\undefined \gdef\putwordShortContents{Short Contents}\fi \ifx\putwordTableofContents\undefined\gdef\putwordTableofContents{Table of Contents}\fi % Ignore a token. % \def\gobble#1{} \hyphenation{ap-pen-dix} \hyphenation{mini-buf-fer mini-buf-fers} \hyphenation{eshell} \hyphenation{white-space} % Margin to add to right of even pages, to left of odd pages. \newdimen \bindingoffset \newdimen \normaloffset \newdimen\pagewidth \newdimen\pageheight % Sometimes it is convenient to have everything in the transcript file % and nothing on the terminal. We don't just call \tracingall here, % since that produces some useless output on the terminal. % \def\gloggingall{\begingroup \globaldefs = 1 \loggingall \endgroup}% \ifx\eTeXversion\undefined \def\loggingall{\tracingcommands2 \tracingstats2 \tracingpages1 \tracingoutput1 \tracinglostchars1 \tracingmacros2 \tracingparagraphs1 \tracingrestores1 \showboxbreadth\maxdimen\showboxdepth\maxdimen }% \else \def\loggingall{\tracingcommands3 \tracingstats2 \tracingpages1 \tracingoutput1 \tracinglostchars1 \tracingmacros2 \tracingparagraphs1 \tracingrestores1 \tracingscantokens1 \tracingassigns1 \tracingifs1 \tracinggroups1 \tracingnesting2 \showboxbreadth\maxdimen\showboxdepth\maxdimen }% \fi % For @cropmarks command. % Do @cropmarks to get crop marks. % \newif\ifcropmarks \let\cropmarks = \cropmarkstrue % % Dimensions to add cropmarks at corners. % Added by P. A. MacKay, 12 Nov. 1986 % \newdimen\outerhsize \newdimen\outervsize % set by the paper size routines \newdimen\cornerlong \cornerlong=1pc \newdimen\cornerthick \cornerthick=.3pt \newdimen\topandbottommargin \topandbottommargin=.75in % Main output routine. \chardef\PAGE = 255 \output = {\onepageout{\pagecontents\PAGE}} \newbox\headlinebox \newbox\footlinebox % \onepageout takes a vbox as an argument. Note that \pagecontents % does insertions, but you have to call it yourself. \def\onepageout#1{% \ifcropmarks \hoffset=0pt \else \hoffset=\normaloffset \fi % \ifodd\pageno \advance\hoffset by \bindingoffset \else \advance\hoffset by -\bindingoffset\fi % % Do this outside of the \shipout so @code etc. will be expanded in % the headline as they should be, not taken literally (outputting ''code). \setbox\headlinebox = \vbox{\let\hsize=\pagewidth \makeheadline}% \setbox\footlinebox = \vbox{\let\hsize=\pagewidth \makefootline}% % {% % Have to do this stuff outside the \shipout because we want it to % take effect in \write's, yet the group defined by the \vbox ends % before the \shipout runs. % \escapechar = `\\ % use backslash in output files. \indexdummies % don't expand commands in the output. \normalturnoffactive % \ in index entries must not stay \, e.g., if % the page break happens to be in the middle of an example. \shipout\vbox{% \ifcropmarks \vbox to \outervsize\bgroup \hsize = \outerhsize \vskip-\topandbottommargin \vtop to0pt{% \line{\ewtop\hfil\ewtop}% \nointerlineskip \line{% \vbox{\moveleft\cornerthick\nstop}% \hfill \vbox{\moveright\cornerthick\nstop}% }% \vss}% \vskip\topandbottommargin \line\bgroup \hfil % center the page within the outer (page) hsize. \ifodd\pageno\hskip\bindingoffset\fi \vbox\bgroup \fi % \unvbox\headlinebox \pagebody{#1}% \ifdim\ht\footlinebox > 0pt % Only leave this space if the footline is nonempty. % (We lessened \vsize for it in \oddfootingxxx.) % The \baselineskip=24pt in plain's \makefootline has no effect. \vskip 2\baselineskip \unvbox\footlinebox \fi % \ifcropmarks \egroup % end of \vbox\bgroup \hfil\egroup % end of (centering) \line\bgroup \vskip\topandbottommargin plus1fill minus1fill \boxmaxdepth = \cornerthick \vbox to0pt{\vss \line{% \vbox{\moveleft\cornerthick\nsbot}% \hfill \vbox{\moveright\cornerthick\nsbot}% }% \nointerlineskip \line{\ewbot\hfil\ewbot}% }% \egroup % \vbox from first cropmarks clause \fi }% end of \shipout\vbox }% end of group with \turnoffactive \advancepageno \ifnum\outputpenalty>-20000 \else\dosupereject\fi } \newinsert\margin \dimen\margin=\maxdimen \def\pagebody#1{\vbox to\pageheight{\boxmaxdepth=\maxdepth #1}} {\catcode`\@ =11 \gdef\pagecontents#1{\ifvoid\topins\else\unvbox\topins\fi % marginal hacks, juha@viisa.uucp (Juha Takala) \ifvoid\margin\else % marginal info is present \rlap{\kern\hsize\vbox to\z@{\kern1pt\box\margin \vss}}\fi \dimen@=\dp#1 \unvbox#1 \ifvoid\footins\else\vskip\skip\footins\footnoterule \unvbox\footins\fi \ifr@ggedbottom \kern-\dimen@ \vfil \fi} } % Here are the rules for the cropmarks. Note that they are % offset so that the space between them is truly \outerhsize or \outervsize % (P. A. MacKay, 12 November, 1986) % \def\ewtop{\vrule height\cornerthick depth0pt width\cornerlong} \def\nstop{\vbox {\hrule height\cornerthick depth\cornerlong width\cornerthick}} \def\ewbot{\vrule height0pt depth\cornerthick width\cornerlong} \def\nsbot{\vbox {\hrule height\cornerlong depth\cornerthick width\cornerthick}} % Parse an argument, then pass it to #1. The argument is the rest of % the input line (except we remove a trailing comment). #1 should be a % macro which expects an ordinary undelimited TeX argument. % \def\parsearg#1{% \let\next = #1% \begingroup \obeylines \futurelet\temp\parseargx } % If the next token is an obeyed space (from an @example environment or % the like), remove it and recurse. Otherwise, we're done. \def\parseargx{% % \obeyedspace is defined far below, after the definition of \sepspaces. \ifx\obeyedspace\temp \expandafter\parseargdiscardspace \else \expandafter\parseargline \fi } % Remove a single space (as the delimiter token to the macro call). {\obeyspaces % \gdef\parseargdiscardspace {\futurelet\temp\parseargx}} {\obeylines % \gdef\parseargline#1^^M{% \endgroup % End of the group started in \parsearg. % % First remove any @c comment, then any @comment. % Result of each macro is put in \toks0. \argremovec #1\c\relax % \expandafter\argremovecomment \the\toks0 \comment\relax % % % Call the caller's macro, saved as \next in \parsearg. \expandafter\next\expandafter{\the\toks0}% }% } % Since all \c{,omment} does is throw away the argument, we can let TeX % do that for us. The \relax here is matched by the \relax in the call % in \parseargline; it could be more or less anything, its purpose is % just to delimit the argument to the \c. \def\argremovec#1\c#2\relax{\toks0 = {#1}} \def\argremovecomment#1\comment#2\relax{\toks0 = {#1}} % \argremovec{,omment} might leave us with trailing spaces, though; e.g., % @end itemize @c foo % will have two active spaces as part of the argument with the % `itemize'. Here we remove all active spaces from #1, and assign the % result to \toks0. % % This loses if there are any *other* active characters besides spaces % in the argument -- _ ^ +, for example -- since they get expanded. % Fortunately, Texinfo does not define any such commands. (If it ever % does, the catcode of the characters in questionwill have to be changed % here.) But this means we cannot call \removeactivespaces as part of % \argremovec{,omment}, since @c uses \parsearg, and thus the argument % that \parsearg gets might well have any character at all in it. % \def\removeactivespaces#1{% \begingroup \ignoreactivespaces \edef\temp{#1}% \global\toks0 = \expandafter{\temp}% \endgroup } % Change the active space to expand to nothing. % \begingroup \obeyspaces \gdef\ignoreactivespaces{\obeyspaces\let =\empty} \endgroup \def\flushcr{\ifx\par\lisppar \def\next##1{}\else \let\next=\relax \fi \next} %% These are used to keep @begin/@end levels from running away %% Call \inENV within environments (after a \begingroup) \newif\ifENV \ENVfalse \def\inENV{\ifENV\relax\else\ENVtrue\fi} \def\ENVcheck{% \ifENV\errmessage{Still within an environment; press RETURN to continue} \endgroup\fi} % This is not perfect, but it should reduce lossage % @begin foo is the same as @foo, for now. \newhelp\EMsimple{Press RETURN to continue.} \outer\def\begin{\parsearg\beginxxx} \def\beginxxx #1{% \expandafter\ifx\csname #1\endcsname\relax {\errhelp=\EMsimple \errmessage{Undefined command @begin #1}}\else \csname #1\endcsname\fi} % @end foo executes the definition of \Efoo. % \def\end{\parsearg\endxxx} \def\endxxx #1{% \removeactivespaces{#1}% \edef\endthing{\the\toks0}% % \expandafter\ifx\csname E\endthing\endcsname\relax \expandafter\ifx\csname \endthing\endcsname\relax % There's no \foo, i.e., no ``environment'' foo. \errhelp = \EMsimple \errmessage{Undefined command `@end \endthing'}% \else \unmatchedenderror\endthing \fi \else % Everything's ok; the right environment has been started. \csname E\endthing\endcsname \fi } % There is an environment #1, but it hasn't been started. Give an error. % \def\unmatchedenderror#1{% \errhelp = \EMsimple \errmessage{This `@end #1' doesn't have a matching `@#1'}% } % Define the control sequence \E#1 to give an unmatched @end error. % \def\defineunmatchedend#1{% \expandafter\def\csname E#1\endcsname{\unmatchedenderror{#1}}% } % Single-spacing is done by various environments (specifically, in % \nonfillstart and \quotations). \newskip\singlespaceskip \singlespaceskip = 12.5pt \def\singlespace{% % Why was this kern here? It messes up equalizing space above and below % environments. --karl, 6may93 %{\advance \baselineskip by -\singlespaceskip %\kern \baselineskip}% \setleading \singlespaceskip } %% Simple single-character @ commands % @@ prints an @ % Kludge this until the fonts are right (grr). \def\@{{\tt\char64}} % This is turned off because it was never documented % and you can use @w{...} around a quote to suppress ligatures. %% Define @` and @' to be the same as ` and ' %% but suppressing ligatures. %\def\`{{`}} %\def\'{{'}} % Used to generate quoted braces. \def\mylbrace {{\tt\char123}} \def\myrbrace {{\tt\char125}} \let\{=\mylbrace \let\}=\myrbrace \begingroup % Definitions to produce actual \{ & \} command in an index. \catcode`\{ = 12 \catcode`\} = 12 \catcode`\[ = 1 \catcode`\] = 2 \catcode`\@ = 0 \catcode`\\ = 12 @gdef@lbracecmd[\{]% @gdef@rbracecmd[\}]% @endgroup % Accents: @, @dotaccent @ringaccent @ubaraccent @udotaccent % Others are defined by plain TeX: @` @' @" @^ @~ @= @v @H. \let\, = \c \let\dotaccent = \. \def\ringaccent#1{{\accent23 #1}} \let\tieaccent = \t \let\ubaraccent = \b \let\udotaccent = \d % Other special characters: @questiondown @exclamdown % Plain TeX defines: @AA @AE @O @OE @L (and lowercase versions) @ss. \def\questiondown{?`} \def\exclamdown{!`} % Dotless i and dotless j, used for accents. \def\imacro{i} \def\jmacro{j} \def\dotless#1{% \def\temp{#1}% \ifx\temp\imacro \ptexi \else\ifx\temp\jmacro \j \else \errmessage{@dotless can be used only with i or j}% \fi\fi } % Be sure we're in horizontal mode when doing a tie, since we make space % equivalent to this in @example-like environments. Otherwise, a space % at the beginning of a line will start with \penalty -- and % since \penalty is valid in vertical mode, we'd end up putting the % penalty on the vertical list instead of in the new paragraph. {\catcode`@ = 11 % Avoid using \@M directly, because that causes trouble % if the definition is written into an index file. \global\let\tiepenalty = \@M \gdef\tie{\leavevmode\penalty\tiepenalty\ } } % @: forces normal size whitespace following. \def\:{\spacefactor=1000 } % @* forces a line break. \def\*{\hfil\break\hbox{}\ignorespaces} % @. is an end-of-sentence period. \def\.{.\spacefactor=3000 } % @! is an end-of-sentence bang. \def\!{!\spacefactor=3000 } % @? is an end-of-sentence query. \def\?{?\spacefactor=3000 } % @w prevents a word break. Without the \leavevmode, @w at the % beginning of a paragraph, when TeX is still in vertical mode, would % produce a whole line of output instead of starting the paragraph. \def\w#1{\leavevmode\hbox{#1}} % @group ... @end group forces ... to be all on one page, by enclosing % it in a TeX vbox. We use \vtop instead of \vbox to construct the box % to keep its height that of a normal line. According to the rules for % \topskip (p.114 of the TeXbook), the glue inserted is % max (\topskip - \ht (first item), 0). If that height is large, % therefore, no glue is inserted, and the space between the headline and % the text is small, which looks bad. % \def\group{\begingroup \ifnum\catcode13=\active \else \errhelp = \groupinvalidhelp \errmessage{@group invalid in context where filling is enabled}% \fi % % The \vtop we start below produces a box with normal height and large % depth; thus, TeX puts \baselineskip glue before it, and (when the % next line of text is done) \lineskip glue after it. (See p.82 of % the TeXbook.) Thus, space below is not quite equal to space % above. But it's pretty close. \def\Egroup{% \egroup % End the \vtop. \endgroup % End the \group. }% % \vtop\bgroup % We have to put a strut on the last line in case the @group is in % the midst of an example, rather than completely enclosing it. % Otherwise, the interline space between the last line of the group % and the first line afterwards is too small. But we can't put the % strut in \Egroup, since there it would be on a line by itself. % Hence this just inserts a strut at the beginning of each line. \everypar = {\strut}% % % Since we have a strut on every line, we don't need any of TeX's % normal interline spacing. \offinterlineskip % % OK, but now we have to do something about blank % lines in the input in @example-like environments, which normally % just turn into \lisppar, which will insert no space now that we've % turned off the interline space. Simplest is to make them be an % empty paragraph. \ifx\par\lisppar \edef\par{\leavevmode \par}% % % Reset ^^M's definition to new definition of \par. \obeylines \fi % % Do @comment since we are called inside an environment such as % @example, where each end-of-line in the input causes an % end-of-line in the output. We don't want the end-of-line after % the `@group' to put extra space in the output. Since @group % should appear on a line by itself (according to the Texinfo % manual), we don't worry about eating any user text. \comment } % % TeX puts in an \escapechar (i.e., `@') at the beginning of the help % message, so this ends up printing `@group can only ...'. % \newhelp\groupinvalidhelp{% group can only be used in environments such as @example,^^J% where each line of input produces a line of output.} % @need space-in-mils % forces a page break if there is not space-in-mils remaining. \newdimen\mil \mil=0.001in \def\need{\parsearg\needx} % Old definition--didn't work. %\def\needx #1{\par % %% This method tries to make TeX break the page naturally %% if the depth of the box does not fit. %{\baselineskip=0pt% %\vtop to #1\mil{\vfil}\kern -#1\mil\nobreak %\prevdepth=-1000pt %}} \def\needx#1{% % Go into vertical mode, so we don't make a big box in the middle of a % paragraph. \par % % Don't add any leading before our big empty box, but allow a page % break, since the best break might be right here. \allowbreak \nointerlineskip \vtop to #1\mil{\vfil}% % % TeX does not even consider page breaks if a penalty added to the % main vertical list is 10000 or more. But in order to see if the % empty box we just added fits on the page, we must make it consider % page breaks. On the other hand, we don't want to actually break the % page after the empty box. So we use a penalty of 9999. % % There is an extremely small chance that TeX will actually break the % page at this \penalty, if there are no other feasible breakpoints in % sight. (If the user is using lots of big @group commands, which % almost-but-not-quite fill up a page, TeX will have a hard time doing % good page breaking, for example.) However, I could not construct an % example where a page broke at this \penalty; if it happens in a real % document, then we can reconsider our strategy. \penalty9999 % % Back up by the size of the box, whether we did a page break or not. \kern -#1\mil % % Do not allow a page break right after this kern. \nobreak } % @br forces paragraph break \let\br = \par % @dots{} output an ellipsis using the current font. % We do .5em per period so that it has the same spacing in a typewriter % font as three actual period characters. % \def\dots{% \leavevmode \hbox to 1.5em{% \hskip 0pt plus 0.25fil minus 0.25fil .\hss.\hss.% \hskip 0pt plus 0.5fil minus 0.5fil }% } % @enddots{} is an end-of-sentence ellipsis. % \def\enddots{% \leavevmode \hbox to 2em{% \hskip 0pt plus 0.25fil minus 0.25fil .\hss.\hss.\hss.% \hskip 0pt plus 0.5fil minus 0.5fil }% \spacefactor=3000 } % @page forces the start of a new page % \def\page{\par\vfill\supereject} % @exdent text.... % outputs text on separate line in roman font, starting at standard page margin % This records the amount of indent in the innermost environment. % That's how much \exdent should take out. \newskip\exdentamount % This defn is used inside fill environments such as @defun. \def\exdent{\parsearg\exdentyyy} \def\exdentyyy #1{{\hfil\break\hbox{\kern -\exdentamount{\rm#1}}\hfil\break}} % This defn is used inside nofill environments such as @example. \def\nofillexdent{\parsearg\nofillexdentyyy} \def\nofillexdentyyy #1{{\advance \leftskip by -\exdentamount \leftline{\hskip\leftskip{\rm#1}}}} % @inmargin{TEXT} puts TEXT in the margin next to the current paragraph. \def\inmargin#1{% \strut\vadjust{\nobreak\kern-\strutdepth \vtop to \strutdepth{\baselineskip\strutdepth\vss \llap{\rightskip=\inmarginspacing \vbox{\noindent #1}}\null}}} \newskip\inmarginspacing \inmarginspacing=1cm \def\strutdepth{\dp\strutbox} %\hbox{{\rm#1}}\hfil\break}} % @include file insert text of that file as input. % Allow normal characters that we make active in the argument (a file name). \def\include{\begingroup \catcode`\\=12 \catcode`~=12 \catcode`^=12 \catcode`_=12 \catcode`|=12 \catcode`<=12 \catcode`>=12 \catcode`+=12 \parsearg\includezzz} % Restore active chars for included file. \def\includezzz#1{\endgroup\begingroup % Read the included file in a group so nested @include's work. \def\thisfile{#1}% \input\thisfile \endgroup} \def\thisfile{} % @center line outputs that line, centered \def\center{\parsearg\centerzzz} \def\centerzzz #1{{\advance\hsize by -\leftskip \advance\hsize by -\rightskip \centerline{#1}}} % @sp n outputs n lines of vertical space \def\sp{\parsearg\spxxx} \def\spxxx #1{\vskip #1\baselineskip} % @comment ...line which is ignored... % @c is the same as @comment % @ignore ... @end ignore is another way to write a comment \def\comment{\begingroup \catcode`\^^M=\other% \catcode`\@=\other \catcode`\{=\other \catcode`\}=\other% \commentxxx} {\catcode`\^^M=\other \gdef\commentxxx#1^^M{\endgroup}} \let\c=\comment % @paragraphindent is defined for the Info formatting commands only. \let\paragraphindent=\comment % Prevent errors for section commands. % Used in @ignore and in failing conditionals. \def\ignoresections{% \let\chapter=\relax \let\unnumbered=\relax \let\top=\relax \let\unnumberedsec=\relax \let\unnumberedsection=\relax \let\unnumberedsubsec=\relax \let\unnumberedsubsection=\relax \let\unnumberedsubsubsec=\relax \let\unnumberedsubsubsection=\relax \let\section=\relax \let\subsec=\relax \let\subsubsec=\relax \let\subsection=\relax \let\subsubsection=\relax \let\appendix=\relax \let\appendixsec=\relax \let\appendixsection=\relax \let\appendixsubsec=\relax \let\appendixsubsection=\relax \let\appendixsubsubsec=\relax \let\appendixsubsubsection=\relax \let\contents=\relax \let\smallbook=\relax \let\titlepage=\relax } % Used in nested conditionals, where we have to parse the Texinfo source % and so want to turn off most commands, in case they are used % incorrectly. % \def\ignoremorecommands{% \let\defcodeindex = \relax \let\defcv = \relax \let\deffn = \relax \let\deffnx = \relax \let\defindex = \relax \let\defivar = \relax \let\defmac = \relax \let\defmethod = \relax \let\defop = \relax \let\defopt = \relax \let\defspec = \relax \let\deftp = \relax \let\deftypefn = \relax \let\deftypefun = \relax \let\deftypevar = \relax \let\deftypevr = \relax \let\defun = \relax \let\defvar = \relax \let\defvr = \relax \let\ref = \relax \let\xref = \relax \let\printindex = \relax \let\pxref = \relax \let\settitle = \relax \let\setchapternewpage = \relax \let\setchapterstyle = \relax \let\everyheading = \relax \let\evenheading = \relax \let\oddheading = \relax \let\everyfooting = \relax \let\evenfooting = \relax \let\oddfooting = \relax \let\headings = \relax \let\include = \relax \let\lowersections = \relax \let\down = \relax \let\raisesections = \relax \let\up = \relax \let\set = \relax \let\clear = \relax \let\item = \relax } % Ignore @ignore ... @end ignore. % \def\ignore{\doignore{ignore}} % Ignore @ifinfo, @ifhtml, @ifnottex, @html, @menu, and @direntry text. % \def\ifinfo{\doignore{ifinfo}} \def\ifhtml{\doignore{ifhtml}} \def\ifnottex{\doignore{ifnottex}} \def\html{\doignore{html}} \def\menu{\doignore{menu}} \def\direntry{\doignore{direntry}} % @dircategory CATEGORY -- specify a category of the dir file % which this file should belong to. Ignore this in TeX. \let\dircategory = \comment % Ignore text until a line `@end #1'. % \def\doignore#1{\begingroup % Don't complain about control sequences we have declared \outer. \ignoresections % % Define a command to swallow text until we reach `@end #1'. % This @ is a catcode 12 token (that is the normal catcode of @ in % this texinfo.tex file). We change the catcode of @ below to match. \long\def\doignoretext##1@end #1{\enddoignore}% % % Make sure that spaces turn into tokens that match what \doignoretext wants. \catcode32 = 10 % % Ignore braces, too, so mismatched braces don't cause trouble. \catcode`\{ = 9 \catcode`\} = 9 % % We must not have @c interpreted as a control sequence. \catcode`\@ = 12 % % Make the letter c a comment character so that the rest of the line % will be ignored. This way, the document can have (for example) % @c @end ifinfo % and the @end ifinfo will be properly ignored. % (We've just changed @ to catcode 12.) \catcode`\c = 14 % % And now expand that command. \doignoretext } % What we do to finish off ignored text. % \def\enddoignore{\endgroup\ignorespaces}% \newif\ifwarnedobs\warnedobsfalse \def\obstexwarn{% \ifwarnedobs\relax\else % We need to warn folks that they may have trouble with TeX 3.0. % This uses \immediate\write16 rather than \message to get newlines. \immediate\write16{} \immediate\write16{***WARNING*** for users of Unix TeX 3.0!} \immediate\write16{This manual trips a bug in TeX version 3.0 (tex hangs).} \immediate\write16{If you are running another version of TeX, relax.} \immediate\write16{If you are running Unix TeX 3.0, kill this TeX process.} \immediate\write16{ Then upgrade your TeX installation if you can.} \immediate\write16{ (See ftp://ftp.gnu.org/pub/gnu/TeX.README.)} \immediate\write16{If you are stuck with version 3.0, run the} \immediate\write16{ script ``tex3patch'' from the Texinfo distribution} \immediate\write16{ to use a workaround.} \immediate\write16{} \global\warnedobstrue \fi } % **In TeX 3.0, setting text in \nullfont hangs tex. For a % workaround (which requires the file ``dummy.tfm'' to be installed), % uncomment the following line: %%%%%\font\nullfont=dummy\let\obstexwarn=\relax % Ignore text, except that we keep track of conditional commands for % purposes of nesting, up to an `@end #1' command. % \def\nestedignore#1{% \obstexwarn % We must actually expand the ignored text to look for the @end % command, so that nested ignore constructs work. Thus, we put the % text into a \vbox and then do nothing with the result. To minimize % the change of memory overflow, we follow the approach outlined on % page 401 of the TeXbook: make the current font be a dummy font. % \setbox0 = \vbox\bgroup % Don't complain about control sequences we have declared \outer. \ignoresections % % Define `@end #1' to end the box, which will in turn undefine the % @end command again. \expandafter\def\csname E#1\endcsname{\egroup\ignorespaces}% % % We are going to be parsing Texinfo commands. Most cause no % trouble when they are used incorrectly, but some commands do % complicated argument parsing or otherwise get confused, so we % undefine them. % % We can't do anything about stray @-signs, unfortunately; % they'll produce `undefined control sequence' errors. \ignoremorecommands % % Set the current font to be \nullfont, a TeX primitive, and define % all the font commands to also use \nullfont. We don't use % dummy.tfm, as suggested in the TeXbook, because not all sites % might have that installed. Therefore, math mode will still % produce output, but that should be an extremely small amount of % stuff compared to the main input. % \nullfont \let\tenrm = \nullfont \let\tenit = \nullfont \let\tensl = \nullfont \let\tenbf = \nullfont \let\tentt = \nullfont \let\smallcaps = \nullfont \let\tensf = \nullfont % Similarly for index fonts (mostly for their use in % smallexample) \let\indrm = \nullfont \let\indit = \nullfont \let\indsl = \nullfont \let\indbf = \nullfont \let\indtt = \nullfont \let\indsc = \nullfont \let\indsf = \nullfont % % Don't complain when characters are missing from the fonts. \tracinglostchars = 0 % % Don't bother to do space factor calculations. \frenchspacing % % Don't report underfull hboxes. \hbadness = 10000 % % Do minimal line-breaking. \pretolerance = 10000 % % Do not execute instructions in @tex \def\tex{\doignore{tex}}% % Do not execute macro definitions. % `c' is a comment character, so the word `macro' will get cut off. \def\macro{\doignore{ma}}% } % @set VAR sets the variable VAR to an empty value. % @set VAR REST-OF-LINE sets VAR to the value REST-OF-LINE. % % Since we want to separate VAR from REST-OF-LINE (which might be % empty), we can't just use \parsearg; we have to insert a space of our % own to delimit the rest of the line, and then take it out again if we % didn't need it. Make sure the catcode of space is correct to avoid % losing inside @example, for instance. % \def\set{\begingroup\catcode` =10 \catcode`\-=12 \catcode`\_=12 % Allow - and _ in VAR. \parsearg\setxxx} \def\setxxx#1{\setyyy#1 \endsetyyy} \def\setyyy#1 #2\endsetyyy{% \def\temp{#2}% \ifx\temp\empty \global\expandafter\let\csname SET#1\endcsname = \empty \else \setzzz{#1}#2\endsetzzz % Remove the trailing space \setxxx inserted. \fi \endgroup } % Can't use \xdef to pre-expand #2 and save some time, since \temp or % \next or other control sequences that we've defined might get us into % an infinite loop. Consider `@set foo @cite{bar}'. \def\setzzz#1#2 \endsetzzz{\expandafter\gdef\csname SET#1\endcsname{#2}} % @clear VAR clears (i.e., unsets) the variable VAR. % \def\clear{\parsearg\clearxxx} \def\clearxxx#1{\global\expandafter\let\csname SET#1\endcsname=\relax} % @value{foo} gets the text saved in variable foo. % { \catcode`\_ = \active % % We might end up with active _ or - characters in the argument if % we're called from @code, as @code{@value{foo-bar_}}. So \let any % such active characters to their normal equivalents. \gdef\value{\begingroup \catcode`\-=12 \catcode`\_=12 \indexbreaks \let_\normalunderscore \valuexxx} } \def\valuexxx#1{\expandablevalue{#1}\endgroup} % We have this subroutine so that we can handle at least some @value's % properly in indexes (we \let\value to this in \indexdummies). Ones % whose names contain - or _ still won't work, but we can't do anything % about that. The command has to be fully expandable, since the result % winds up in the index file. This means that if the variable's value % contains other Texinfo commands, it's almost certain it will fail % (although perhaps we could fix that with sufficient work to do a % one-level expansion on the result, instead of complete). % \def\expandablevalue#1{% \expandafter\ifx\csname SET#1\endcsname\relax {[No value for ``#1'']}% \else \csname SET#1\endcsname \fi } % @ifset VAR ... @end ifset reads the `...' iff VAR has been defined % with @set. % \def\ifset{\parsearg\ifsetxxx} \def\ifsetxxx #1{% \expandafter\ifx\csname SET#1\endcsname\relax \expandafter\ifsetfail \else \expandafter\ifsetsucceed \fi } \def\ifsetsucceed{\conditionalsucceed{ifset}} \def\ifsetfail{\nestedignore{ifset}} \defineunmatchedend{ifset} % @ifclear VAR ... @end ifclear reads the `...' iff VAR has never been % defined with @set, or has been undefined with @clear. % \def\ifclear{\parsearg\ifclearxxx} \def\ifclearxxx #1{% \expandafter\ifx\csname SET#1\endcsname\relax \expandafter\ifclearsucceed \else \expandafter\ifclearfail \fi } \def\ifclearsucceed{\conditionalsucceed{ifclear}} \def\ifclearfail{\nestedignore{ifclear}} \defineunmatchedend{ifclear} % @iftex, @ifnothtml, @ifnotinfo always succeed; we read the text % following, through the first @end iftex (etc.). Make `@end iftex' % (etc.) valid only after an @iftex. % \def\iftex{\conditionalsucceed{iftex}} \def\ifnothtml{\conditionalsucceed{ifnothtml}} \def\ifnotinfo{\conditionalsucceed{ifnotinfo}} \defineunmatchedend{iftex} \defineunmatchedend{ifnothtml} \defineunmatchedend{ifnotinfo} % We can't just want to start a group at @iftex (for example) and end it % at @end iftex, since then @set commands inside the conditional have no % effect (they'd get reverted at the end of the group). So we must % define \Eiftex to redefine itself to be its previous value. (We can't % just define it to fail again with an ``unmatched end'' error, since % the @ifset might be nested.) % \def\conditionalsucceed#1{% \edef\temp{% % Remember the current value of \E#1. \let\nece{prevE#1} = \nece{E#1}% % % At the `@end #1', redefine \E#1 to be its previous value. \def\nece{E#1}{\let\nece{E#1} = \nece{prevE#1}}% }% \temp } % We need to expand lots of \csname's, but we don't want to expand the % control sequences after we've constructed them. % \def\nece#1{\expandafter\noexpand\csname#1\endcsname} % @asis just yields its argument. Used with @table, for example. % \def\asis#1{#1} % @math means output in math mode. % We don't use $'s directly in the definition of \math because control % sequences like \math are expanded when the toc file is written. Then, % we read the toc file back, the $'s will be normal characters (as they % should be, according to the definition of Texinfo). So we must use a % control sequence to switch into and out of math mode. % % This isn't quite enough for @math to work properly in indices, but it % seems unlikely it will ever be needed there. % \let\implicitmath = $ \def\math#1{\implicitmath #1\implicitmath} % @bullet and @minus need the same treatment as @math, just above. \def\bullet{\implicitmath\ptexbullet\implicitmath} \def\minus{\implicitmath-\implicitmath} % @refill is a no-op. \let\refill=\relax % If working on a large document in chapters, it is convenient to % be able to disable indexing, cross-referencing, and contents, for test runs. % This is done with @novalidate (before @setfilename). % \newif\iflinks \linkstrue % by default we want the aux files. \let\novalidate = \linksfalse % @setfilename is done at the beginning of every texinfo file. % So open here the files we need to have open while reading the input. % This makes it possible to make a .fmt file for texinfo. \def\setfilename{% \iflinks \readauxfile \fi % \openindices needs to do some work in any case. \openindices \fixbackslash % Turn off hack to swallow `\input texinfo'. \global\let\setfilename=\comment % Ignore extra @setfilename cmds. % % If texinfo.cnf is present on the system, read it. % Useful for site-wide @afourpaper, etc. % Just to be on the safe side, close the input stream before the \input. \openin 1 texinfo.cnf \ifeof1 \let\temp=\relax \else \def\temp{\input texinfo.cnf }\fi \closein1 \temp % \comment % Ignore the actual filename. } % Called from \setfilename. % \def\openindices{% \newindex{cp}% \newcodeindex{fn}% \newcodeindex{vr}% \newcodeindex{tp}% \newcodeindex{ky}% \newcodeindex{pg}% } % @bye. \outer\def\bye{\pagealignmacro\tracingstats=1\ptexend} \message{fonts,} % Font-change commands. % Texinfo sort of supports the sans serif font style, which plain TeX does not. % So we set up a \sf analogous to plain's \rm, etc. \newfam\sffam \def\sf{\fam=\sffam \tensf} \let\li = \sf % Sometimes we call it \li, not \sf. % We don't need math for this one. \def\ttsl{\tenttsl} % Use Computer Modern fonts at \magstephalf (11pt). \newcount\mainmagstep \mainmagstep=\magstephalf % Set the font macro #1 to the font named #2, adding on the % specified font prefix (normally `cm'). % #3 is the font's design size, #4 is a scale factor \def\setfont#1#2#3#4{\font#1=\fontprefix#2#3 scaled #4} % Use cm as the default font prefix. % To specify the font prefix, you must define \fontprefix % before you read in texinfo.tex. \ifx\fontprefix\undefined \def\fontprefix{cm} \fi % Support font families that don't use the same naming scheme as CM. \def\rmshape{r} \def\rmbshape{bx} %where the normal face is bold \def\bfshape{b} \def\bxshape{bx} \def\ttshape{tt} \def\ttbshape{tt} \def\ttslshape{sltt} \def\itshape{ti} \def\itbshape{bxti} \def\slshape{sl} \def\slbshape{bxsl} \def\sfshape{ss} \def\sfbshape{ss} \def\scshape{csc} \def\scbshape{csc} \ifx\bigger\relax \let\mainmagstep=\magstep1 \setfont\textrm\rmshape{12}{1000} \setfont\texttt\ttshape{12}{1000} \else \setfont\textrm\rmshape{10}{\mainmagstep} \setfont\texttt\ttshape{10}{\mainmagstep} \fi % Instead of cmb10, you many want to use cmbx10. % cmbx10 is a prettier font on its own, but cmb10 % looks better when embedded in a line with cmr10. \setfont\textbf\bfshape{10}{\mainmagstep} \setfont\textit\itshape{10}{\mainmagstep} \setfont\textsl\slshape{10}{\mainmagstep} \setfont\textsf\sfshape{10}{\mainmagstep} \setfont\textsc\scshape{10}{\mainmagstep} \setfont\textttsl\ttslshape{10}{\mainmagstep} \font\texti=cmmi10 scaled \mainmagstep \font\textsy=cmsy10 scaled \mainmagstep % A few fonts for @defun, etc. \setfont\defbf\bxshape{10}{\magstep1} %was 1314 \setfont\deftt\ttshape{10}{\magstep1} \def\df{\let\tentt=\deftt \let\tenbf = \defbf \bf} % Fonts for indices and small examples (9pt). % We actually use the slanted font rather than the italic, % because texinfo normally uses the slanted fonts for that. % Do not make many font distinctions in general in the index, since they % aren't very useful. \setfont\ninett\ttshape{9}{1000} \setfont\ninettsl\ttslshape{10}{900} \setfont\indrm\rmshape{9}{1000} \setfont\indit\itshape{9}{1000} \setfont\indsl\slshape{9}{1000} \let\indtt=\ninett \let\indttsl=\ninettsl \let\indsf=\indrm \let\indbf=\indrm \setfont\indsc\scshape{10}{900} \font\indi=cmmi9 \font\indsy=cmsy9 % Fonts for title page: \setfont\titlerm\rmbshape{12}{\magstep3} \setfont\titleit\itbshape{10}{\magstep4} \setfont\titlesl\slbshape{10}{\magstep4} \setfont\titlett\ttbshape{12}{\magstep3} \setfont\titlettsl\ttslshape{10}{\magstep4} \setfont\titlesf\sfbshape{17}{\magstep1} \let\titlebf=\titlerm \setfont\titlesc\scbshape{10}{\magstep4} \font\titlei=cmmi12 scaled \magstep3 \font\titlesy=cmsy10 scaled \magstep4 \def\authorrm{\secrm} % Chapter (and unnumbered) fonts (17.28pt). \setfont\chaprm\rmbshape{12}{\magstep2} \setfont\chapit\itbshape{10}{\magstep3} \setfont\chapsl\slbshape{10}{\magstep3} \setfont\chaptt\ttbshape{12}{\magstep2} \setfont\chapttsl\ttslshape{10}{\magstep3} \setfont\chapsf\sfbshape{17}{1000} \let\chapbf=\chaprm \setfont\chapsc\scbshape{10}{\magstep3} \font\chapi=cmmi12 scaled \magstep2 \font\chapsy=cmsy10 scaled \magstep3 % Section fonts (14.4pt). \setfont\secrm\rmbshape{12}{\magstep1} \setfont\secit\itbshape{10}{\magstep2} \setfont\secsl\slbshape{10}{\magstep2} \setfont\sectt\ttbshape{12}{\magstep1} \setfont\secttsl\ttslshape{10}{\magstep2} \setfont\secsf\sfbshape{12}{\magstep1} \let\secbf\secrm \setfont\secsc\scbshape{10}{\magstep2} \font\seci=cmmi12 scaled \magstep1 \font\secsy=cmsy10 scaled \magstep2 % \setfont\ssecrm\bxshape{10}{\magstep1} % This size an font looked bad. % \setfont\ssecit\itshape{10}{\magstep1} % The letters were too crowded. % \setfont\ssecsl\slshape{10}{\magstep1} % \setfont\ssectt\ttshape{10}{\magstep1} % \setfont\ssecsf\sfshape{10}{\magstep1} %\setfont\ssecrm\bfshape{10}{1315} % Note the use of cmb rather than cmbx. %\setfont\ssecit\itshape{10}{1315} % Also, the size is a little larger than %\setfont\ssecsl\slshape{10}{1315} % being scaled magstep1. %\setfont\ssectt\ttshape{10}{1315} %\setfont\ssecsf\sfshape{10}{1315} %\let\ssecbf=\ssecrm % Subsection fonts (13.15pt). \setfont\ssecrm\rmbshape{12}{\magstephalf} \setfont\ssecit\itbshape{10}{1315} \setfont\ssecsl\slbshape{10}{1315} \setfont\ssectt\ttbshape{12}{\magstephalf} \setfont\ssecttsl\ttslshape{10}{1315} \setfont\ssecsf\sfbshape{12}{\magstephalf} \let\ssecbf\ssecrm \setfont\ssecsc\scbshape{10}{\magstep1} \font\sseci=cmmi12 scaled \magstephalf \font\ssecsy=cmsy10 scaled 1315 % The smallcaps and symbol fonts should actually be scaled \magstep1.5, % but that is not a standard magnification. % In order for the font changes to affect most math symbols and letters, % we have to define the \textfont of the standard families. Since % texinfo doesn't allow for producing subscripts and superscripts, we % don't bother to reset \scriptfont and \scriptscriptfont (which would % also require loading a lot more fonts). % \def\resetmathfonts{% \textfont0 = \tenrm \textfont1 = \teni \textfont2 = \tensy \textfont\itfam = \tenit \textfont\slfam = \tensl \textfont\bffam = \tenbf \textfont\ttfam = \tentt \textfont\sffam = \tensf } % The font-changing commands redefine the meanings of \tenSTYLE, instead % of just \STYLE. We do this so that font changes will continue to work % in math mode, where it is the current \fam that is relevant in most % cases, not the current font. Plain TeX does \def\bf{\fam=\bffam % \tenbf}, for example. By redefining \tenbf, we obviate the need to % redefine \bf itself. \def\textfonts{% \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy \let\tenttsl=\textttsl \resetmathfonts} \def\titlefonts{% \let\tenrm=\titlerm \let\tenit=\titleit \let\tensl=\titlesl \let\tenbf=\titlebf \let\tentt=\titlett \let\smallcaps=\titlesc \let\tensf=\titlesf \let\teni=\titlei \let\tensy=\titlesy \let\tenttsl=\titlettsl \resetmathfonts \setleading{25pt}} \def\titlefont#1{{\titlefonts\rm #1}} \def\chapfonts{% \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy \let\tenttsl=\chapttsl \resetmathfonts \setleading{19pt}} \def\secfonts{% \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy \let\tenttsl=\secttsl \resetmathfonts \setleading{16pt}} \def\subsecfonts{% \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy \let\tenttsl=\ssecttsl \resetmathfonts \setleading{15pt}} \let\subsubsecfonts = \subsecfonts % Maybe make sssec fonts scaled magstephalf? \def\indexfonts{% \let\tenrm=\indrm \let\tenit=\indit \let\tensl=\indsl \let\tenbf=\indbf \let\tentt=\indtt \let\smallcaps=\indsc \let\tensf=\indsf \let\teni=\indi \let\tensy=\indsy \let\tenttsl=\indttsl \resetmathfonts \setleading{12pt}} % Set up the default fonts, so we can use them for creating boxes. % \textfonts % Define these so they can be easily changed for other fonts. \def\angleleft{$\langle$} \def\angleright{$\rangle$} % Count depth in font-changes, for error checks \newcount\fontdepth \fontdepth=0 % Fonts for short table of contents. \setfont\shortcontrm\rmshape{12}{1000} \setfont\shortcontbf\bxshape{12}{1000} \setfont\shortcontsl\slshape{12}{1000} %% Add scribe-like font environments, plus @l for inline lisp (usually sans %% serif) and @ii for TeX italic % \smartitalic{ARG} outputs arg in italics, followed by an italic correction % unless the following character is such as not to need one. \def\smartitalicx{\ifx\next,\else\ifx\next-\else\ifx\next.\else\/\fi\fi\fi} \def\smartslanted#1{{\sl #1}\futurelet\next\smartitalicx} \def\smartitalic#1{{\it #1}\futurelet\next\smartitalicx} \let\i=\smartitalic \let\var=\smartslanted \let\dfn=\smartslanted \let\emph=\smartitalic \let\cite=\smartslanted \def\b#1{{\bf #1}} \let\strong=\b % We can't just use \exhyphenpenalty, because that only has effect at % the end of a paragraph. Restore normal hyphenation at the end of the % group within which \nohyphenation is presumably called. % \def\nohyphenation{\hyphenchar\font = -1 \aftergroup\restorehyphenation} \def\restorehyphenation{\hyphenchar\font = `- } \def\t#1{% {\tt \rawbackslash \frenchspacing #1}% \null } \let\ttfont=\t \def\samp#1{`\tclose{#1}'\null} \setfont\smallrm\rmshape{8}{1000} \font\smallsy=cmsy9 \def\key#1{{\smallrm\textfont2=\smallsy \leavevmode\hbox{% \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{% \vbox{\hrule\kern-0.4pt \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}% \kern-0.4pt\hrule}% \kern-.06em\raise0.4pt\hbox{\angleright}}}} % The old definition, with no lozenge: %\def\key #1{{\ttsl \nohyphenation \uppercase{#1}}\null} \def\ctrl #1{{\tt \rawbackslash \hat}#1} % @file, @option are the same as @samp. \let\file=\samp \let\option=\samp % @code is a modification of @t, % which makes spaces the same size as normal in the surrounding text. \def\tclose#1{% {% % Change normal interword space to be same as for the current font. \spaceskip = \fontdimen2\font % % Switch to typewriter. \tt % % But `\ ' produces the large typewriter interword space. \def\ {{\spaceskip = 0pt{} }}% % % Turn off hyphenation. \nohyphenation % \rawbackslash \frenchspacing #1% }% \null } % We *must* turn on hyphenation at `-' and `_' in \code. % Otherwise, it is too hard to avoid overfull hboxes % in the Emacs manual, the Library manual, etc. % Unfortunately, TeX uses one parameter (\hyphenchar) to control % both hyphenation at - and hyphenation within words. % We must therefore turn them both off (\tclose does that) % and arrange explicitly to hyphenate at a dash. % -- rms. { \catcode`\-=\active \catcode`\_=\active % \global\def\code{\begingroup \catcode`\-=\active \let-\codedash \catcode`\_=\active \let_\codeunder \codex } % % If we end up with any active - characters when handling the index, % just treat them as a normal -. \global\def\indexbreaks{\catcode`\-=\active \let-\realdash} } \def\realdash{-} \def\codedash{-\discretionary{}{}{}} \def\codeunder{\ifusingtt{\normalunderscore\discretionary{}{}{}}{\_}} \def\codex #1{\tclose{#1}\endgroup} %\let\exp=\tclose %Was temporary % @kbd is like @code, except that if the argument is just one @key command, % then @kbd has no effect. % @kbdinputstyle -- arg is `distinct' (@kbd uses slanted tty font always), % `example' (@kbd uses ttsl only inside of @example and friends), % or `code' (@kbd uses normal tty font always). \def\kbdinputstyle{\parsearg\kbdinputstylexxx} \def\kbdinputstylexxx#1{% \def\arg{#1}% \ifx\arg\worddistinct \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}% \else\ifx\arg\wordexample \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\tt}% \else\ifx\arg\wordcode \gdef\kbdexamplefont{\tt}\gdef\kbdfont{\tt}% \fi\fi\fi } \def\worddistinct{distinct} \def\wordexample{example} \def\wordcode{code} % Default is kbdinputdistinct. (Too much of a hassle to call the macro, % the catcodes are wrong for parsearg to work.) \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl} \def\xkey{\key} \def\kbdfoo#1#2#3\par{\def\one{#1}\def\three{#3}\def\threex{??}% \ifx\one\xkey\ifx\threex\three \key{#2}% \else{\tclose{\kbdfont\look}}\fi \else{\tclose{\kbdfont\look}}\fi} % For @url, @env, @command quotes seem unnecessary, so use \code. \let\url=\code \let\env=\code \let\command=\code % @uref (abbreviation for `urlref') takes an optional second argument % specifying the text to display. First (mandatory) arg is the url. % Perhaps eventually put in a hypertex \special here. % \def\uref#1{\urefxxx #1,,\finish} \def\urefxxx#1,#2,#3\finish{% \setbox0 = \hbox{\ignorespaces #2}% \ifdim\wd0 > 0pt \unhbox0\ (\code{#1})% \else \code{#1}% \fi } % rms does not like the angle brackets --karl, 17may97. % So now @email is just like @uref. %\def\email#1{\angleleft{\tt #1}\angleright} \let\email=\uref % Check if we are currently using a typewriter font. Since all the % Computer Modern typewriter fonts have zero interword stretch (and % shrink), and it is reasonable to expect all typewriter fonts to have % this property, we can check that font parameter. % \def\ifmonospace{\ifdim\fontdimen3\font=0pt } % Typeset a dimension, e.g., `in' or `pt'. The only reason for the % argument is to make the input look right: @dmn{pt} instead of @dmn{}pt. % \def\dmn#1{\thinspace #1} \def\kbd#1{\def\look{#1}\expandafter\kbdfoo\look??\par} % @l was never documented to mean ``switch to the Lisp font'', % and it is not used as such in any manual I can find. We need it for % Polish suppressed-l. --karl, 22sep96. %\def\l#1{{\li #1}\null} % Explicit font changes: @r, @sc, undocumented @ii. \def\r#1{{\rm #1}} % roman font \def\sc#1{{\smallcaps#1}} % smallcaps font \def\ii#1{{\it #1}} % italic font % @acronym downcases the argument and prints in smallcaps. \def\acronym#1{{\smallcaps \lowercase{#1}}} % @pounds{} is a sterling sign. \def\pounds{{\it\$}} \message{page headings,} \newskip\titlepagetopglue \titlepagetopglue = 1.5in \newskip\titlepagebottomglue \titlepagebottomglue = 2pc % First the title page. Must do @settitle before @titlepage. \newif\ifseenauthor \newif\iffinishedtitlepage % Do an implicit @contents or @shortcontents after @end titlepage if the % user says @setcontentsaftertitlepage or @setshortcontentsaftertitlepage. % \newif\ifsetcontentsaftertitlepage \let\setcontentsaftertitlepage = \setcontentsaftertitlepagetrue \newif\ifsetshortcontentsaftertitlepage \let\setshortcontentsaftertitlepage = \setshortcontentsaftertitlepagetrue \def\shorttitlepage{\parsearg\shorttitlepagezzz} \def\shorttitlepagezzz #1{\begingroup\hbox{}\vskip 1.5in \chaprm \centerline{#1}% \endgroup\page\hbox{}\page} \def\titlepage{\begingroup \parindent=0pt \textfonts \let\subtitlerm=\tenrm \def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines}% % \def\authorfont{\authorrm \normalbaselineskip = 16pt \normalbaselines}% % % Leave some space at the very top of the page. \vglue\titlepagetopglue % % Now you can print the title using @title. \def\title{\parsearg\titlezzz}% \def\titlezzz##1{\leftline{\titlefonts\rm ##1} % print a rule at the page bottom also. \finishedtitlepagefalse \vskip4pt \hrule height 4pt width \hsize \vskip4pt}% % No rule at page bottom unless we print one at the top with @title. \finishedtitlepagetrue % % Now you can put text using @subtitle. \def\subtitle{\parsearg\subtitlezzz}% \def\subtitlezzz##1{{\subtitlefont \rightline{##1}}}% % % @author should come last, but may come many times. \def\author{\parsearg\authorzzz}% \def\authorzzz##1{\ifseenauthor\else\vskip 0pt plus 1filll\seenauthortrue\fi {\authorfont \leftline{##1}}}% % % Most title ``pages'' are actually two pages long, with space % at the top of the second. We don't want the ragged left on the second. \let\oldpage = \page \def\page{% \iffinishedtitlepage\else \finishtitlepage \fi \oldpage \let\page = \oldpage \hbox{}}% % \def\page{\oldpage \hbox{}} } \def\Etitlepage{% \iffinishedtitlepage\else \finishtitlepage \fi % It is important to do the page break before ending the group, % because the headline and footline are only empty inside the group. % If we use the new definition of \page, we always get a blank page % after the title page, which we certainly don't want. \oldpage \endgroup % % If they want short, they certainly want long too. \ifsetshortcontentsaftertitlepage \shortcontents \contents \global\let\shortcontents = \relax \global\let\contents = \relax \fi % \ifsetcontentsaftertitlepage \contents \global\let\contents = \relax \global\let\shortcontents = \relax \fi % \HEADINGSon } \def\finishtitlepage{% \vskip4pt \hrule height 2pt width \hsize \vskip\titlepagebottomglue \finishedtitlepagetrue } %%% Set up page headings and footings. \let\thispage=\folio \newtoks\evenheadline % headline on even pages \newtoks\oddheadline % headline on odd pages \newtoks\evenfootline % footline on even pages \newtoks\oddfootline % footline on odd pages % Now make Tex use those variables \headline={{\textfonts\rm \ifodd\pageno \the\oddheadline \else \the\evenheadline \fi}} \footline={{\textfonts\rm \ifodd\pageno \the\oddfootline \else \the\evenfootline \fi}\HEADINGShook} \let\HEADINGShook=\relax % Commands to set those variables. % For example, this is what @headings on does % @evenheading @thistitle|@thispage|@thischapter % @oddheading @thischapter|@thispage|@thistitle % @evenfooting @thisfile|| % @oddfooting ||@thisfile \def\evenheading{\parsearg\evenheadingxxx} \def\oddheading{\parsearg\oddheadingxxx} \def\everyheading{\parsearg\everyheadingxxx} \def\evenfooting{\parsearg\evenfootingxxx} \def\oddfooting{\parsearg\oddfootingxxx} \def\everyfooting{\parsearg\everyfootingxxx} {\catcode`\@=0 % \gdef\evenheadingxxx #1{\evenheadingyyy #1@|@|@|@|\finish} \gdef\evenheadingyyy #1@|#2@|#3@|#4\finish{% \global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} \gdef\oddheadingxxx #1{\oddheadingyyy #1@|@|@|@|\finish} \gdef\oddheadingyyy #1@|#2@|#3@|#4\finish{% \global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} \gdef\everyheadingxxx#1{\oddheadingxxx{#1}\evenheadingxxx{#1}}% \gdef\evenfootingxxx #1{\evenfootingyyy #1@|@|@|@|\finish} \gdef\evenfootingyyy #1@|#2@|#3@|#4\finish{% \global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} \gdef\oddfootingxxx #1{\oddfootingyyy #1@|@|@|@|\finish} \gdef\oddfootingyyy #1@|#2@|#3@|#4\finish{% \global\oddfootline = {\rlap{\centerline{#2}}\line{#1\hfil#3}}% % % Leave some space for the footline. Hopefully ok to assume % @evenfooting will not be used by itself. \global\advance\pageheight by -\baselineskip \global\advance\vsize by -\baselineskip } \gdef\everyfootingxxx#1{\oddfootingxxx{#1}\evenfootingxxx{#1}} % }% unbind the catcode of @. % @headings double turns headings on for double-sided printing. % @headings single turns headings on for single-sided printing. % @headings off turns them off. % @headings on same as @headings double, retained for compatibility. % @headings after turns on double-sided headings after this page. % @headings doubleafter turns on double-sided headings after this page. % @headings singleafter turns on single-sided headings after this page. % By default, they are off at the start of a document, % and turned `on' after @end titlepage. \def\headings #1 {\csname HEADINGS#1\endcsname} \def\HEADINGSoff{ \global\evenheadline={\hfil} \global\evenfootline={\hfil} \global\oddheadline={\hfil} \global\oddfootline={\hfil}} \HEADINGSoff % When we turn headings on, set the page number to 1. % For double-sided printing, put current file name in lower left corner, % chapter name on inside top of right hand pages, document % title on inside top of left hand pages, and page numbers on outside top % edge of all pages. \def\HEADINGSdouble{ \global\pageno=1 \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\folio\hfil\thistitle}} \global\oddheadline={\line{\thischapter\hfil\folio}} \global\let\contentsalignmacro = \chapoddpage } \let\contentsalignmacro = \chappager % For single-sided printing, chapter title goes across top left of page, % page number on top right. \def\HEADINGSsingle{ \global\pageno=1 \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\thischapter\hfil\folio}} \global\oddheadline={\line{\thischapter\hfil\folio}} \global\let\contentsalignmacro = \chappager } \def\HEADINGSon{\HEADINGSdouble} \def\HEADINGSafter{\let\HEADINGShook=\HEADINGSdoublex} \let\HEADINGSdoubleafter=\HEADINGSafter \def\HEADINGSdoublex{% \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\folio\hfil\thistitle}} \global\oddheadline={\line{\thischapter\hfil\folio}} \global\let\contentsalignmacro = \chapoddpage } \def\HEADINGSsingleafter{\let\HEADINGShook=\HEADINGSsinglex} \def\HEADINGSsinglex{% \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\thischapter\hfil\folio}} \global\oddheadline={\line{\thischapter\hfil\folio}} \global\let\contentsalignmacro = \chappager } % Subroutines used in generating headings % Produces Day Month Year style of output. \def\today{\number\day\space \ifcase\month\or January\or February\or March\or April\or May\or June\or July\or August\or September\or October\or November\or December\fi \space\number\year} % Use this if you want the Month Day, Year style of output. %\def\today{\ifcase\month\or %January\or February\or March\or April\or May\or June\or %July\or August\or September\or October\or November\or December\fi %\space\number\day, \number\year} % @settitle line... specifies the title of the document, for headings % It generates no output of its own \def\thistitle{No Title} \def\settitle{\parsearg\settitlezzz} \def\settitlezzz #1{\gdef\thistitle{#1}} \message{tables,} % Tables -- @table, @ftable, @vtable, @item(x), @kitem(x), @xitem(x). % default indentation of table text \newdimen\tableindent \tableindent=.8in % default indentation of @itemize and @enumerate text \newdimen\itemindent \itemindent=.3in % margin between end of table item and start of table text. \newdimen\itemmargin \itemmargin=.1in % used internally for \itemindent minus \itemmargin \newdimen\itemmax % Note @table, @vtable, and @vtable define @item, @itemx, etc., with % these defs. % They also define \itemindex % to index the item name in whatever manner is desired (perhaps none). \newif\ifitemxneedsnegativevskip \def\itemxpar{\par\ifitemxneedsnegativevskip\nobreak\vskip-\parskip\nobreak\fi} \def\internalBitem{\smallbreak \parsearg\itemzzz} \def\internalBitemx{\itemxpar \parsearg\itemzzz} \def\internalBxitem "#1"{\def\xitemsubtopix{#1} \smallbreak \parsearg\xitemzzz} \def\internalBxitemx "#1"{\def\xitemsubtopix{#1} \itemxpar \parsearg\xitemzzz} \def\internalBkitem{\smallbreak \parsearg\kitemzzz} \def\internalBkitemx{\itemxpar \parsearg\kitemzzz} \def\kitemzzz #1{\dosubind {kw}{\code{#1}}{for {\bf \lastfunction}}% \itemzzz {#1}} \def\xitemzzz #1{\dosubind {kw}{\code{#1}}{for {\bf \xitemsubtopic}}% \itemzzz {#1}} \def\itemzzz #1{\begingroup % \advance\hsize by -\rightskip \advance\hsize by -\tableindent \setbox0=\hbox{\itemfont{#1}}% \itemindex{#1}% \nobreak % This prevents a break before @itemx. % % If the item text does not fit in the space we have, put it on a line % by itself, and do not allow a page break either before or after that % line. We do not start a paragraph here because then if the next % command is, e.g., @kindex, the whatsit would get put into the % horizontal list on a line by itself, resulting in extra blank space. \ifdim \wd0>\itemmax % % Make this a paragraph so we get the \parskip glue and wrapping, % but leave it ragged-right. \begingroup \advance\leftskip by-\tableindent \advance\hsize by\tableindent \advance\rightskip by0pt plus1fil \leavevmode\unhbox0\par \endgroup % % We're going to be starting a paragraph, but we don't want the % \parskip glue -- logically it's part of the @item we just started. \nobreak \vskip-\parskip % % Stop a page break at the \parskip glue coming up. Unfortunately % we can't prevent a possible page break at the following % \baselineskip glue. \nobreak \endgroup \itemxneedsnegativevskipfalse \else % The item text fits into the space. Start a paragraph, so that the % following text (if any) will end up on the same line. \noindent % Do this with kerns and \unhbox so that if there is a footnote in % the item text, it can migrate to the main vertical list and % eventually be printed. \nobreak\kern-\tableindent \dimen0 = \itemmax \advance\dimen0 by \itemmargin \advance\dimen0 by -\wd0 \unhbox0 \nobreak\kern\dimen0 \endgroup \itemxneedsnegativevskiptrue \fi } \def\item{\errmessage{@item while not in a table}} \def\itemx{\errmessage{@itemx while not in a table}} \def\kitem{\errmessage{@kitem while not in a table}} \def\kitemx{\errmessage{@kitemx while not in a table}} \def\xitem{\errmessage{@xitem while not in a table}} \def\xitemx{\errmessage{@xitemx while not in a table}} % Contains a kludge to get @end[description] to work. \def\description{\tablez{\dontindex}{1}{}{}{}{}} % @table, @ftable, @vtable. \def\table{\begingroup\inENV\obeylines\obeyspaces\tablex} {\obeylines\obeyspaces% \gdef\tablex #1^^M{% \tabley\dontindex#1 \endtabley}} \def\ftable{\begingroup\inENV\obeylines\obeyspaces\ftablex} {\obeylines\obeyspaces% \gdef\ftablex #1^^M{% \tabley\fnitemindex#1 \endtabley \def\Eftable{\endgraf\afterenvbreak\endgroup}% \let\Etable=\relax}} \def\vtable{\begingroup\inENV\obeylines\obeyspaces\vtablex} {\obeylines\obeyspaces% \gdef\vtablex #1^^M{% \tabley\vritemindex#1 \endtabley \def\Evtable{\endgraf\afterenvbreak\endgroup}% \let\Etable=\relax}} \def\dontindex #1{} \def\fnitemindex #1{\doind {fn}{\code{#1}}}% \def\vritemindex #1{\doind {vr}{\code{#1}}}% {\obeyspaces % \gdef\tabley#1#2 #3 #4 #5 #6 #7\endtabley{\endgroup% \tablez{#1}{#2}{#3}{#4}{#5}{#6}}} \def\tablez #1#2#3#4#5#6{% \aboveenvbreak % \begingroup % \def\Edescription{\Etable}% Necessary kludge. \let\itemindex=#1% \ifnum 0#3>0 \advance \leftskip by #3\mil \fi % \ifnum 0#4>0 \tableindent=#4\mil \fi % \ifnum 0#5>0 \advance \rightskip by #5\mil \fi % \def\itemfont{#2}% \itemmax=\tableindent % \advance \itemmax by -\itemmargin % \advance \leftskip by \tableindent % \exdentamount=\tableindent \parindent = 0pt \parskip = \smallskipamount \ifdim \parskip=0pt \parskip=2pt \fi% \def\Etable{\endgraf\afterenvbreak\endgroup}% \let\item = \internalBitem % \let\itemx = \internalBitemx % \let\kitem = \internalBkitem % \let\kitemx = \internalBkitemx % \let\xitem = \internalBxitem % \let\xitemx = \internalBxitemx % } % This is the counter used by @enumerate, which is really @itemize \newcount \itemno \def\itemize{\parsearg\itemizezzz} \def\itemizezzz #1{% \begingroup % ended by the @end itemize \itemizey {#1}{\Eitemize} } \def\itemizey #1#2{% \aboveenvbreak % \itemmax=\itemindent % \advance \itemmax by -\itemmargin % \advance \leftskip by \itemindent % \exdentamount=\itemindent \parindent = 0pt % \parskip = \smallskipamount % \ifdim \parskip=0pt \parskip=2pt \fi% \def#2{\endgraf\afterenvbreak\endgroup}% \def\itemcontents{#1}% \let\item=\itemizeitem} % Set sfcode to normal for the chars that usually have another value. % These are `.?!:;,' \def\frenchspacing{\sfcode46=1000 \sfcode63=1000 \sfcode33=1000 \sfcode58=1000 \sfcode59=1000 \sfcode44=1000 } % \splitoff TOKENS\endmark defines \first to be the first token in % TOKENS, and \rest to be the remainder. % \def\splitoff#1#2\endmark{\def\first{#1}\def\rest{#2}}% % Allow an optional argument of an uppercase letter, lowercase letter, % or number, to specify the first label in the enumerated list. No % argument is the same as `1'. % \def\enumerate{\parsearg\enumeratezzz} \def\enumeratezzz #1{\enumeratey #1 \endenumeratey} \def\enumeratey #1 #2\endenumeratey{% \begingroup % ended by the @end enumerate % % If we were given no argument, pretend we were given `1'. \def\thearg{#1}% \ifx\thearg\empty \def\thearg{1}\fi % % Detect if the argument is a single token. If so, it might be a % letter. Otherwise, the only valid thing it can be is a number. % (We will always have one token, because of the test we just made. % This is a good thing, since \splitoff doesn't work given nothing at % all -- the first parameter is undelimited.) \expandafter\splitoff\thearg\endmark \ifx\rest\empty % Only one token in the argument. It could still be anything. % A ``lowercase letter'' is one whose \lccode is nonzero. % An ``uppercase letter'' is one whose \lccode is both nonzero, and % not equal to itself. % Otherwise, we assume it's a number. % % We need the \relax at the end of the \ifnum lines to stop TeX from % continuing to look for a . % \ifnum\lccode\expandafter`\thearg=0\relax \numericenumerate % a number (we hope) \else % It's a letter. \ifnum\lccode\expandafter`\thearg=\expandafter`\thearg\relax \lowercaseenumerate % lowercase letter \else \uppercaseenumerate % uppercase letter \fi \fi \else % Multiple tokens in the argument. We hope it's a number. \numericenumerate \fi } % An @enumerate whose labels are integers. The starting integer is % given in \thearg. % \def\numericenumerate{% \itemno = \thearg \startenumeration{\the\itemno}% } % The starting (lowercase) letter is in \thearg. \def\lowercaseenumerate{% \itemno = \expandafter`\thearg \startenumeration{% % Be sure we're not beyond the end of the alphabet. \ifnum\itemno=0 \errmessage{No more lowercase letters in @enumerate; get a bigger alphabet}% \fi \char\lccode\itemno }% } % The starting (uppercase) letter is in \thearg. \def\uppercaseenumerate{% \itemno = \expandafter`\thearg \startenumeration{% % Be sure we're not beyond the end of the alphabet. \ifnum\itemno=0 \errmessage{No more uppercase letters in @enumerate; get a bigger alphabet} \fi \char\uccode\itemno }% } % Call itemizey, adding a period to the first argument and supplying the % common last two arguments. Also subtract one from the initial value in % \itemno, since @item increments \itemno. % \def\startenumeration#1{% \advance\itemno by -1 \itemizey{#1.}\Eenumerate\flushcr } % @alphaenumerate and @capsenumerate are abbreviations for giving an arg % to @enumerate. % \def\alphaenumerate{\enumerate{a}} \def\capsenumerate{\enumerate{A}} \def\Ealphaenumerate{\Eenumerate} \def\Ecapsenumerate{\Eenumerate} % Definition of @item while inside @itemize. \def\itemizeitem{% \advance\itemno by 1 {\let\par=\endgraf \smallbreak}% \ifhmode \errmessage{In hmode at itemizeitem}\fi {\parskip=0in \hskip 0pt \hbox to 0pt{\hss \itemcontents\hskip \itemmargin}% \vadjust{\penalty 1200}}% \flushcr} % @multitable macros % Amy Hendrickson, 8/18/94, 3/6/96 % % @multitable ... @end multitable will make as many columns as desired. % Contents of each column will wrap at width given in preamble. Width % can be specified either with sample text given in a template line, % or in percent of \hsize, the current width of text on page. % Table can continue over pages but will only break between lines. % To make preamble: % % Either define widths of columns in terms of percent of \hsize: % @multitable @columnfractions .25 .3 .45 % @item ... % % Numbers following @columnfractions are the percent of the total % current hsize to be used for each column. You may use as many % columns as desired. % Or use a template: % @multitable {Column 1 template} {Column 2 template} {Column 3 template} % @item ... % using the widest term desired in each column. % % For those who want to use more than one line's worth of words in % the preamble, break the line within one argument and it % will parse correctly, i.e., % % @multitable {Column 1 template} {Column 2 template} {Column 3 % template} % Not: % @multitable {Column 1 template} {Column 2 template} % {Column 3 template} % Each new table line starts with @item, each subsequent new column % starts with @tab. Empty columns may be produced by supplying @tab's % with nothing between them for as many times as empty columns are needed, % ie, @tab@tab@tab will produce two empty columns. % @item, @tab, @multitable or @end multitable do not need to be on their % own lines, but it will not hurt if they are. % Sample multitable: % @multitable {Column 1 template} {Column 2 template} {Column 3 template} % @item first col stuff @tab second col stuff @tab third col % @item % first col stuff % @tab % second col stuff % @tab % third col % @item first col stuff @tab second col stuff % @tab Many paragraphs of text may be used in any column. % % They will wrap at the width determined by the template. % @item@tab@tab This will be in third column. % @end multitable % Default dimensions may be reset by user. % @multitableparskip is vertical space between paragraphs in table. % @multitableparindent is paragraph indent in table. % @multitablecolmargin is horizontal space to be left between columns. % @multitablelinespace is space to leave between table items, baseline % to baseline. % 0pt means it depends on current normal line spacing. % \newskip\multitableparskip \newskip\multitableparindent \newdimen\multitablecolspace \newskip\multitablelinespace \multitableparskip=0pt \multitableparindent=6pt \multitablecolspace=12pt \multitablelinespace=0pt % Macros used to set up halign preamble: % \let\endsetuptable\relax \def\xendsetuptable{\endsetuptable} \let\columnfractions\relax \def\xcolumnfractions{\columnfractions} \newif\ifsetpercent % #1 is the part of the @columnfraction before the decimal point, which % is presumably either 0 or the empty string (but we don't check, we % just throw it away). #2 is the decimal part, which we use as the % percent of \hsize for this column. \def\pickupwholefraction#1.#2 {% \global\advance\colcount by 1 \expandafter\xdef\csname col\the\colcount\endcsname{.#2\hsize}% \setuptable } \newcount\colcount \def\setuptable#1{% \def\firstarg{#1}% \ifx\firstarg\xendsetuptable \let\go = \relax \else \ifx\firstarg\xcolumnfractions \global\setpercenttrue \else \ifsetpercent \let\go\pickupwholefraction \else \global\advance\colcount by 1 \setbox0=\hbox{#1\unskip }% Add a normal word space as a separator; % typically that is always in the input, anyway. \expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}% \fi \fi \ifx\go\pickupwholefraction % Put the argument back for the \pickupwholefraction call, so % we'll always have a period there to be parsed. \def\go{\pickupwholefraction#1}% \else \let\go = \setuptable \fi% \fi \go } % multitable syntax \def\tab{&\hskip1sp\relax} % 2/2/96 % tiny skip here makes sure this column space is % maintained, even if it is never used. % @multitable ... @end multitable definitions: % \def\multitable{\parsearg\dotable} \def\dotable#1{\bgroup \vskip\parskip \let\item\crcr \tolerance=9500 \hbadness=9500 \setmultitablespacing \parskip=\multitableparskip \parindent=\multitableparindent \overfullrule=0pt \global\colcount=0 \def\Emultitable{\global\setpercentfalse\cr\egroup\egroup}% % % To parse everything between @multitable and @item: \setuptable#1 \endsetuptable % % \everycr will reset column counter, \colcount, at the end of % each line. Every column entry will cause \colcount to advance by one. % The table preamble % looks at the current \colcount to find the correct column width. \everycr{\noalign{% % % \filbreak%% keeps underfull box messages off when table breaks over pages. % Maybe so, but it also creates really weird page breaks when the table % breaks over pages. Wouldn't \vfil be better? Wait until the problem % manifests itself, so it can be fixed for real --karl. \global\colcount=0\relax}}% % % This preamble sets up a generic column definition, which will % be used as many times as user calls for columns. % \vtop will set a single line and will also let text wrap and % continue for many paragraphs if desired. \halign\bgroup&\global\advance\colcount by 1\relax \multistrut\vtop{\hsize=\expandafter\csname col\the\colcount\endcsname % % In order to keep entries from bumping into each other % we will add a \leftskip of \multitablecolspace to all columns after % the first one. % % If a template has been used, we will add \multitablecolspace % to the width of each template entry. % % If the user has set preamble in terms of percent of \hsize we will % use that dimension as the width of the column, and the \leftskip % will keep entries from bumping into each other. Table will start at % left margin and final column will justify at right margin. % % Make sure we don't inherit \rightskip from the outer environment. \rightskip=0pt \ifnum\colcount=1 % The first column will be indented with the surrounding text. \advance\hsize by\leftskip \else \ifsetpercent \else % If user has not set preamble in terms of percent of \hsize % we will advance \hsize by \multitablecolspace. \advance\hsize by \multitablecolspace \fi % In either case we will make \leftskip=\multitablecolspace: \leftskip=\multitablecolspace \fi % Ignoring space at the beginning and end avoids an occasional spurious % blank line, when TeX decides to break the line at the space before the % box from the multistrut, so the strut ends up on a line by itself. % For example: % @multitable @columnfractions .11 .89 % @item @code{#} % @tab Legal holiday which is valid in major parts of the whole country. % Is automatically provided with highlighting sequences respectively marking % characters. \noindent\ignorespaces##\unskip\multistrut}\cr } \def\setmultitablespacing{% test to see if user has set \multitablelinespace. % If so, do nothing. If not, give it an appropriate dimension based on % current baselineskip. \ifdim\multitablelinespace=0pt %% strut to put in table in case some entry doesn't have descenders, %% to keep lines equally spaced \let\multistrut = \strut %% Test to see if parskip is larger than space between lines of %% table. If not, do nothing. %% If so, set to same dimension as multitablelinespace. \else \gdef\multistrut{\vrule height\multitablelinespace depth\dp0 width0pt\relax} \fi \ifdim\multitableparskip>\multitablelinespace \global\multitableparskip=\multitablelinespace \global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller %% than skip between lines in the table. \fi% \ifdim\multitableparskip=0pt \global\multitableparskip=\multitablelinespace \global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller %% than skip between lines in the table. \fi} \message{indexing,} % Index generation facilities % Define \newwrite to be identical to plain tex's \newwrite % except not \outer, so it can be used within \newindex. {\catcode`\@=11 \gdef\newwrite{\alloc@7\write\chardef\sixt@@n}} % \newindex {foo} defines an index named foo. % It automatically defines \fooindex such that % \fooindex ...rest of line... puts an entry in the index foo. % It also defines \fooindfile to be the number of the output channel for % the file that accumulates this index. The file's extension is foo. % The name of an index should be no more than 2 characters long % for the sake of vms. % \def\newindex#1{% \iflinks \expandafter\newwrite \csname#1indfile\endcsname \openout \csname#1indfile\endcsname \jobname.#1 % Open the file \fi \expandafter\xdef\csname#1index\endcsname{% % Define @#1index \noexpand\doindex{#1}} } % @defindex foo == \newindex{foo} \def\defindex{\parsearg\newindex} % Define @defcodeindex, like @defindex except put all entries in @code. \def\newcodeindex#1{% \iflinks \expandafter\newwrite \csname#1indfile\endcsname \openout \csname#1indfile\endcsname \jobname.#1 \fi \expandafter\xdef\csname#1index\endcsname{% \noexpand\docodeindex{#1}} } \def\defcodeindex{\parsearg\newcodeindex} % @synindex foo bar makes index foo feed into index bar. % Do this instead of @defindex foo if you don't want it as a separate index. % The \closeout helps reduce unnecessary open files; the limit on the % Acorn RISC OS is a mere 16 files. \def\synindex#1 #2 {% \expandafter\let\expandafter\synindexfoo\expandafter=\csname#2indfile\endcsname \expandafter\closeout\csname#1indfile\endcsname \expandafter\let\csname#1indfile\endcsname=\synindexfoo \expandafter\xdef\csname#1index\endcsname{% define \xxxindex \noexpand\doindex{#2}}% } % @syncodeindex foo bar similar, but put all entries made for index foo % inside @code. \def\syncodeindex#1 #2 {% \expandafter\let\expandafter\synindexfoo\expandafter=\csname#2indfile\endcsname \expandafter\closeout\csname#1indfile\endcsname \expandafter\let\csname#1indfile\endcsname=\synindexfoo \expandafter\xdef\csname#1index\endcsname{% define \xxxindex \noexpand\docodeindex{#2}}% } % Define \doindex, the driver for all \fooindex macros. % Argument #1 is generated by the calling \fooindex macro, % and it is "foo", the name of the index. % \doindex just uses \parsearg; it calls \doind for the actual work. % This is because \doind is more useful to call from other macros. % There is also \dosubind {index}{topic}{subtopic} % which makes an entry in a two-level index such as the operation index. \def\doindex#1{\edef\indexname{#1}\parsearg\singleindexer} \def\singleindexer #1{\doind{\indexname}{#1}} % like the previous two, but they put @code around the argument. \def\docodeindex#1{\edef\indexname{#1}\parsearg\singlecodeindexer} \def\singlecodeindexer #1{\doind{\indexname}{\code{#1}}} \def\indexdummies{% \def\ { }% % Take care of the plain tex accent commands. \def\"{\realbackslash "}% \def\`{\realbackslash `}% \def\'{\realbackslash '}% \def\^{\realbackslash ^}% \def\~{\realbackslash ~}% \def\={\realbackslash =}% \def\b{\realbackslash b}% \def\c{\realbackslash c}% \def\d{\realbackslash d}% \def\u{\realbackslash u}% \def\v{\realbackslash v}% \def\H{\realbackslash H}% % Take care of the plain tex special European modified letters. \def\oe{\realbackslash oe}% \def\ae{\realbackslash ae}% \def\aa{\realbackslash aa}% \def\OE{\realbackslash OE}% \def\AE{\realbackslash AE}% \def\AA{\realbackslash AA}% \def\o{\realbackslash o}% \def\O{\realbackslash O}% \def\l{\realbackslash l}% \def\L{\realbackslash L}% \def\ss{\realbackslash ss}% % Take care of texinfo commands likely to appear in an index entry. % (Must be a way to avoid doing expansion at all, and thus not have to % laboriously list every single command here.) \def\@{@}% will be @@ when we switch to @ as escape char. % Need these in case \tex is in effect and \{ is a \delimiter again. % But can't use \lbracecmd and \rbracecmd because texindex assumes % braces and backslashes are used only as delimiters. \let\{ = \mylbrace \let\} = \myrbrace \def\_{{\realbackslash _}}% \def\w{\realbackslash w }% \def\bf{\realbackslash bf }% %\def\rm{\realbackslash rm }% \def\sl{\realbackslash sl }% \def\sf{\realbackslash sf}% \def\tt{\realbackslash tt}% \def\gtr{\realbackslash gtr}% \def\less{\realbackslash less}% \def\hat{\realbackslash hat}% \def\TeX{\realbackslash TeX}% \def\dots{\realbackslash dots }% \def\result{\realbackslash result}% \def\equiv{\realbackslash equiv}% \def\expansion{\realbackslash expansion}% \def\print{\realbackslash print}% \def\error{\realbackslash error}% \def\point{\realbackslash point}% \def\copyright{\realbackslash copyright}% \def\tclose##1{\realbackslash tclose {##1}}% \def\code##1{\realbackslash code {##1}}% \def\uref##1{\realbackslash uref {##1}}% \def\url##1{\realbackslash url {##1}}% \def\env##1{\realbackslash env {##1}}% \def\command##1{\realbackslash command {##1}}% \def\option##1{\realbackslash option {##1}}% \def\dotless##1{\realbackslash dotless {##1}}% \def\samp##1{\realbackslash samp {##1}}% \def\,##1{\realbackslash ,{##1}}% \def\t##1{\realbackslash t {##1}}% \def\r##1{\realbackslash r {##1}}% \def\i##1{\realbackslash i {##1}}% \def\b##1{\realbackslash b {##1}}% \def\sc##1{\realbackslash sc {##1}}% \def\cite##1{\realbackslash cite {##1}}% \def\key##1{\realbackslash key {##1}}% \def\file##1{\realbackslash file {##1}}% \def\var##1{\realbackslash var {##1}}% \def\kbd##1{\realbackslash kbd {##1}}% \def\dfn##1{\realbackslash dfn {##1}}% \def\emph##1{\realbackslash emph {##1}}% \def\acronym##1{\realbackslash acronym {##1}}% % % Handle some cases of @value -- where the variable name does not % contain - or _, and the value does not contain any % (non-fully-expandable) commands. \let\value = \expandablevalue % \unsepspaces } % If an index command is used in an @example environment, any spaces % therein should become regular spaces in the raw index file, not the % expansion of \tie (\\leavevmode \penalty \@M \ ). {\obeyspaces \gdef\unsepspaces{\obeyspaces\let =\space}} % \indexnofonts no-ops all font-change commands. % This is used when outputting the strings to sort the index by. \def\indexdummyfont#1{#1} \def\indexdummytex{TeX} \def\indexdummydots{...} \def\indexnofonts{% % Just ignore accents. \let\,=\indexdummyfont \let\"=\indexdummyfont \let\`=\indexdummyfont \let\'=\indexdummyfont \let\^=\indexdummyfont \let\~=\indexdummyfont \let\==\indexdummyfont \let\b=\indexdummyfont \let\c=\indexdummyfont \let\d=\indexdummyfont \let\u=\indexdummyfont \let\v=\indexdummyfont \let\H=\indexdummyfont \let\dotless=\indexdummyfont % Take care of the plain tex special European modified letters. \def\oe{oe}% \def\ae{ae}% \def\aa{aa}% \def\OE{OE}% \def\AE{AE}% \def\AA{AA}% \def\o{o}% \def\O{O}% \def\l{l}% \def\L{L}% \def\ss{ss}% \let\w=\indexdummyfont \let\t=\indexdummyfont \let\r=\indexdummyfont \let\i=\indexdummyfont \let\b=\indexdummyfont \let\emph=\indexdummyfont \let\strong=\indexdummyfont \let\cite=\indexdummyfont \let\sc=\indexdummyfont %Don't no-op \tt, since it isn't a user-level command % and is used in the definitions of the active chars like <, >, |... %\let\tt=\indexdummyfont \let\tclose=\indexdummyfont \let\code=\indexdummyfont \let\url=\indexdummyfont \let\uref=\indexdummyfont \let\env=\indexdummyfont \let\command=\indexdummyfont \let\option=\indexdummyfont \let\file=\indexdummyfont \let\samp=\indexdummyfont \let\kbd=\indexdummyfont \let\key=\indexdummyfont \let\var=\indexdummyfont \let\TeX=\indexdummytex \let\dots=\indexdummydots \def\@{@}% } % To define \realbackslash, we must make \ not be an escape. % We must first make another character (@) an escape % so we do not become unable to do a definition. {\catcode`\@=0 \catcode`\\=\other @gdef@realbackslash{\}} \let\indexbackslash=0 %overridden during \printindex. \let\SETmarginindex=\relax % put index entries in margin (undocumented)? % For \ifx comparisons. \def\emptymacro{\empty} % Most index entries go through here, but \dosubind is the general case. % \def\doind#1#2{\dosubind{#1}{#2}\empty} % Workhorse for all \fooindexes. % #1 is name of index, #2 is stuff to put there, #3 is subentry -- % \empty if called from \doind, as we usually are. The main exception % is with defuns, which call us directly. % \def\dosubind#1#2#3{% % Put the index entry in the margin if desired. \ifx\SETmarginindex\relax\else \insert\margin{\hbox{\vrule height8pt depth3pt width0pt #2}}% \fi {% \count255=\lastpenalty {% \indexdummies % Must do this here, since \bf, etc expand at this stage \escapechar=`\\ {% \let\folio = 0% We will expand all macros now EXCEPT \folio. \def\rawbackslashxx{\indexbackslash}% \indexbackslash isn't defined now % so it will be output as is; and it will print as backslash. % \def\thirdarg{#3}% % % If third arg is present, precede it with space in sort key. \ifx\thirdarg\emptymacro \let\subentry = \empty \else \def\subentry{ #3}% \fi % % First process the index-string with all font commands turned off % to get the string to sort by. {\indexnofonts \xdef\indexsorttmp{#2\subentry}}% % % Now produce the complete index entry, with both the sort key and the % original text, including any font commands. \toks0 = {#2}% \edef\temp{% \write\csname#1indfile\endcsname{% \realbackslash entry{\indexsorttmp}{\folio}{\the\toks0}}% }% % % If third (subentry) arg is present, add it to the index string. \ifx\thirdarg\emptymacro \else \toks0 = {#3}% \edef\temp{\temp{\the\toks0}}% \fi % % If a skip is the last thing on the list now, preserve it % by backing up by \lastskip, doing the \write, then inserting % the skip again. Otherwise, the whatsit generated by the % \write will make \lastskip zero. The result is that sequences % like this: % @end defun % @tindex whatever % @defun ... % will have extra space inserted, because the \medbreak in the % start of the @defun won't see the skip inserted by the @end of % the previous defun. % % But don't do any of this if we're not in vertical mode. We % don't want to do a \vskip and prematurely end a paragraph. % % Avoid page breaks due to these extra skips, too. % \iflinks \ifvmode \skip0 = \lastskip \ifdim\lastskip = 0pt \else \nobreak\vskip-\lastskip \fi \fi % \temp % do the write % % \ifvmode \ifdim\skip0 = 0pt \else \nobreak\vskip\skip0 \fi \fi \fi }% }% \penalty\count255 }% } % The index entry written in the file actually looks like % \entry {sortstring}{page}{topic} % or % \entry {sortstring}{page}{topic}{subtopic} % The texindex program reads in these files and writes files % containing these kinds of lines: % \initial {c} % before the first topic whose initial is c % \entry {topic}{pagelist} % for a topic that is used without subtopics % \primary {topic} % for the beginning of a topic that is used with subtopics % \secondary {subtopic}{pagelist} % for each subtopic. % Define the user-accessible indexing commands % @findex, @vindex, @kindex, @cindex. \def\findex {\fnindex} \def\kindex {\kyindex} \def\cindex {\cpindex} \def\vindex {\vrindex} \def\tindex {\tpindex} \def\pindex {\pgindex} \def\cindexsub {\begingroup\obeylines\cindexsub} {\obeylines % \gdef\cindexsub "#1" #2^^M{\endgroup % \dosubind{cp}{#2}{#1}}} % Define the macros used in formatting output of the sorted index material. % @printindex causes a particular index (the ??s file) to get printed. % It does not print any chapter heading (usually an @unnumbered). % \def\printindex{\parsearg\doprintindex} \def\doprintindex#1{\begingroup \dobreak \chapheadingskip{10000}% % \indexfonts \rm \tolerance = 9500 \indexbreaks % % See if the index file exists and is nonempty. % Change catcode of @ here so that if the index file contains % \initial {@} % as its first line, TeX doesn't complain about mismatched braces % (because it thinks @} is a control sequence). \catcode`\@ = 11 \openin 1 \jobname.#1s \ifeof 1 % \enddoublecolumns gets confused if there is no text in the index, % and it loses the chapter title and the aux file entries for the % index. The easiest way to prevent this problem is to make sure % there is some text. (Index is nonexistent) \else % % If the index file exists but is empty, then \openin leaves \ifeof % false. We have to make TeX try to read something from the file, so % it can discover if there is anything in it. \read 1 to \temp \ifeof 1 (Index is empty) \else % Index files are almost Texinfo source, but we use \ as the escape % character. It would be better to use @, but that's too big a change % to make right now. \def\indexbackslash{\rawbackslashxx}% \catcode`\\ = 0 \escapechar = `\\ \begindoublecolumns \input \jobname.#1s \enddoublecolumns \fi \fi \closein 1 \endgroup} % These macros are used by the sorted index file itself. % Change them to control the appearance of the index. \def\initial#1{{% % Some minor font changes for the special characters. \let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt % % Remove any glue we may have, we'll be inserting our own. \removelastskip % % We like breaks before the index initials, so insert a bonus. \penalty -300 % % Typeset the initial. Making this add up to a whole number of % baselineskips increases the chance of the dots lining up from column % to column. It still won't often be perfect, because of the stretch % we need before each entry, but it's better. % % No shrink because it confuses \balancecolumns. \vskip 1.67\baselineskip plus .5\baselineskip \leftline{\secbf #1}% \vskip .33\baselineskip plus .1\baselineskip % % Do our best not to break after the initial. \nobreak }} % This typesets a paragraph consisting of #1, dot leaders, and then #2 % flush to the right margin. It is used for index and table of contents % entries. The paragraph is indented by \leftskip. % \def\entry#1#2{\begingroup % % Start a new paragraph if necessary, so our assignments below can't % affect previous text. \par % % Do not fill out the last line with white space. \parfillskip = 0in % % No extra space above this paragraph. \parskip = 0in % % Do not prefer a separate line ending with a hyphen to fewer lines. \finalhyphendemerits = 0 % % \hangindent is only relevant when the entry text and page number % don't both fit on one line. In that case, bob suggests starting the % dots pretty far over on the line. Unfortunately, a large % indentation looks wrong when the entry text itself is broken across % lines. So we use a small indentation and put up with long leaders. % % \hangafter is reset to 1 (which is the value we want) at the start % of each paragraph, so we need not do anything with that. \hangindent = 2em % % When the entry text needs to be broken, just fill out the first line % with blank space. \rightskip = 0pt plus1fil % % A bit of stretch before each entry for the benefit of balancing columns. \vskip 0pt plus1pt % % Start a ``paragraph'' for the index entry so the line breaking % parameters we've set above will have an effect. \noindent % % Insert the text of the index entry. TeX will do line-breaking on it. #1% % The following is kludged to not output a line of dots in the index if % there are no page numbers. The next person who breaks this will be % cursed by a Unix daemon. \def\tempa{{\rm }}% \def\tempb{#2}% \edef\tempc{\tempa}% \edef\tempd{\tempb}% \ifx\tempc\tempd\ \else% % % If we must, put the page number on a line of its own, and fill out % this line with blank space. (The \hfil is overwhelmed with the % fill leaders glue in \indexdotfill if the page number does fit.) \hfil\penalty50 \null\nobreak\indexdotfill % Have leaders before the page number. % % The `\ ' here is removed by the implicit \unskip that TeX does as % part of (the primitive) \par. Without it, a spurious underfull % \hbox ensues. \ #2% The page number ends the paragraph. \fi% \par \endgroup} % Like \dotfill except takes at least 1 em. \def\indexdotfill{\cleaders \hbox{$\mathsurround=0pt \mkern1.5mu ${\it .}$ \mkern1.5mu$}\hskip 1em plus 1fill} \def\primary #1{\line{#1\hfil}} \newskip\secondaryindent \secondaryindent=0.5cm \def\secondary #1#2{ {\parfillskip=0in \parskip=0in \hangindent =1in \hangafter=1 \noindent\hskip\secondaryindent\hbox{#1}\indexdotfill #2\par }} % Define two-column mode, which we use to typeset indexes. % Adapted from the TeXbook, page 416, which is to say, % the manmac.tex format used to print the TeXbook itself. \catcode`\@=11 \newbox\partialpage \newdimen\doublecolumnhsize \def\begindoublecolumns{\begingroup % ended by \enddoublecolumns % Grab any single-column material above us. \output = {\global\setbox\partialpage = \vbox{% % % Here is a possibility not foreseen in manmac: if we accumulate a % whole lot of material, we might end up calling this \output % routine twice in a row (see the doublecol-lose test, which is % essentially a couple of indexes with @setchapternewpage off). In % that case, we must prevent the second \partialpage from % simply overwriting the first, causing us to lose the page. % This will preserve it until a real output routine can ship it % out. Generally, \partialpage will be empty when this runs and % this will be a no-op. \unvbox\partialpage % % Unvbox the main output page. \unvbox255 \kern-\topskip \kern\baselineskip }}% \eject % run that output routine to set \partialpage % % Use the double-column output routine for subsequent pages. \output = {\doublecolumnout}% % % Change the page size parameters. We could do this once outside this % routine, in each of @smallbook, @afourpaper, and the default 8.5x11 % format, but then we repeat the same computation. Repeating a couple % of assignments once per index is clearly meaningless for the % execution time, so we may as well do it in one place. % % First we halve the line length, less a little for the gutter between % the columns. We compute the gutter based on the line length, so it % changes automatically with the paper format. The magic constant % below is chosen so that the gutter has the same value (well, +-<1pt) % as it did when we hard-coded it. % % We put the result in a separate register, \doublecolumhsize, so we % can restore it in \pagesofar, after \hsize itself has (potentially) % been clobbered. % \doublecolumnhsize = \hsize \advance\doublecolumnhsize by -.04154\hsize \divide\doublecolumnhsize by 2 \hsize = \doublecolumnhsize % % Double the \vsize as well. (We don't need a separate register here, % since nobody clobbers \vsize.) \advance\vsize by -\ht\partialpage \vsize = 2\vsize } % The double-column output routine for all double-column pages except % the last. % \def\doublecolumnout{% \splittopskip=\topskip \splitmaxdepth=\maxdepth % Get the available space for the double columns -- the normal % (undoubled) page height minus any material left over from the % previous page. \dimen@ = \vsize \divide\dimen@ by 2 % % box0 will be the left-hand column, box2 the right. \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@ \onepageout\pagesofar \unvbox255 \penalty\outputpenalty } \def\pagesofar{% % Re-output the contents of the output page -- any previous material, % followed by the two boxes we just split, in box0 and box2. \advance\vsize by \ht\partialpage \unvbox\partialpage % \hsize = \doublecolumnhsize \wd0=\hsize \wd2=\hsize \hbox to\pagewidth{\box0\hfil\box2}% } \def\enddoublecolumns{% \output = {% % Split the last of the double-column material. Leave it on the % current page, no automatic page break. \balancecolumns % % If we end up splitting too much material for the current page, % though, there will be another page break right after this \output % invocation ends. Having called \balancecolumns once, we do not % want to call it again. Therefore, reset \output to its normal % definition right away. (We hope \balancecolumns will never be % called on to balance too much material, but if it is, this makes % the output somewhat more palatable.) \global\output = {\onepageout{\pagecontents\PAGE}}% }% \eject \endgroup % started in \begindoublecolumns % % \pagegoal was set to the doubled \vsize above, since we restarted % the current page. We're now back to normal single-column % typesetting, so reset \pagegoal to the normal \vsize (after the % \endgroup where \vsize got restored). \pagegoal = \vsize } \def\balancecolumns{% % Called at the end of the double column material. \setbox0 = \vbox{\unvbox255}% like \box255 but more efficient, see p.120. \dimen@ = \ht0 \advance\dimen@ by \topskip \advance\dimen@ by-\baselineskip \divide\dimen@ by 2 % target to split to %debug\message{final 2-column material height=\the\ht0, target=\the\dimen@.}% \splittopskip = \topskip % Loop until we get a decent breakpoint. {% \vbadness = 10000 \loop \global\setbox3 = \copy0 \global\setbox1 = \vsplit3 to \dimen@ \ifdim\ht3>\dimen@ \global\advance\dimen@ by 1pt \repeat }% %debug\message{split to \the\dimen@, column heights: \the\ht1, \the\ht3.}% \setbox0=\vbox to\dimen@{\unvbox1}% \setbox2=\vbox to\dimen@{\unvbox3}% % \pagesofar } \catcode`\@ = \other \message{sectioning,} % Define chapters, sections, etc. \newcount\chapno \newcount\secno \secno=0 \newcount\subsecno \subsecno=0 \newcount\subsubsecno \subsubsecno=0 % This counter is funny since it counts through charcodes of letters A, B, ... \newcount\appendixno \appendixno = `\@ \def\appendixletter{\char\the\appendixno} % Each @chapter defines this as the name of the chapter. % page headings and footings can use it. @section does likewise. \def\thischapter{} \def\thissection{} \newcount\absseclevel % used to calculate proper heading level \newcount\secbase\secbase=0 % @raise/lowersections modify this count % @raisesections: treat @section as chapter, @subsection as section, etc. \def\raisesections{\global\advance\secbase by -1} \let\up=\raisesections % original BFox name % @lowersections: treat @chapter as section, @section as subsection, etc. \def\lowersections{\global\advance\secbase by 1} \let\down=\lowersections % original BFox name % Choose a numbered-heading macro % #1 is heading level if unmodified by @raisesections or @lowersections % #2 is text for heading \def\numhead#1#2{\absseclevel=\secbase\advance\absseclevel by #1 \ifcase\absseclevel \chapterzzz{#2} \or \seczzz{#2} \or \numberedsubseczzz{#2} \or \numberedsubsubseczzz{#2} \else \ifnum \absseclevel<0 \chapterzzz{#2} \else \numberedsubsubseczzz{#2} \fi \fi } % like \numhead, but chooses appendix heading levels \def\apphead#1#2{\absseclevel=\secbase\advance\absseclevel by #1 \ifcase\absseclevel \appendixzzz{#2} \or \appendixsectionzzz{#2} \or \appendixsubseczzz{#2} \or \appendixsubsubseczzz{#2} \else \ifnum \absseclevel<0 \appendixzzz{#2} \else \appendixsubsubseczzz{#2} \fi \fi } % like \numhead, but chooses numberless heading levels \def\unnmhead#1#2{\absseclevel=\secbase\advance\absseclevel by #1 \ifcase\absseclevel \unnumberedzzz{#2} \or \unnumberedseczzz{#2} \or \unnumberedsubseczzz{#2} \or \unnumberedsubsubseczzz{#2} \else \ifnum \absseclevel<0 \unnumberedzzz{#2} \else \unnumberedsubsubseczzz{#2} \fi \fi } % @chapter, @appendix, @unnumbered. \def\thischaptername{No Chapter Title} \outer\def\chapter{\parsearg\chapteryyy} \def\chapteryyy #1{\numhead0{#1}} % normally numhead0 calls chapterzzz \def\chapterzzz #1{% \secno=0 \subsecno=0 \subsubsecno=0 \global\advance \chapno by 1 \message{\putwordChapter\space \the\chapno}% \chapmacro {#1}{\the\chapno}% \gdef\thissection{#1}% \gdef\thischaptername{#1}% % We don't substitute the actual chapter name into \thischapter % because we don't want its macros evaluated now. \xdef\thischapter{\putwordChapter{} \the\chapno: \noexpand\thischaptername}% \toks0 = {#1}% \edef\temp{\noexpand\writetocentry{\realbackslash chapentry{\the\toks0}% {\the\chapno}}}% \temp \donoderef \global\let\section = \numberedsec \global\let\subsection = \numberedsubsec \global\let\subsubsection = \numberedsubsubsec } \outer\def\appendix{\parsearg\appendixyyy} \def\appendixyyy #1{\apphead0{#1}} % normally apphead0 calls appendixzzz \def\appendixzzz #1{% \secno=0 \subsecno=0 \subsubsecno=0 \global\advance \appendixno by 1 \message{\putwordAppendix\space \appendixletter}% \chapmacro {#1}{\putwordAppendix{} \appendixletter}% \gdef\thissection{#1}% \gdef\thischaptername{#1}% \xdef\thischapter{\putwordAppendix{} \appendixletter: \noexpand\thischaptername}% \toks0 = {#1}% \edef\temp{\noexpand\writetocentry{\realbackslash chapentry{\the\toks0}% {\putwordAppendix{} \appendixletter}}}% \temp \appendixnoderef \global\let\section = \appendixsec \global\let\subsection = \appendixsubsec \global\let\subsubsection = \appendixsubsubsec } % @centerchap is like @unnumbered, but the heading is centered. \outer\def\centerchap{\parsearg\centerchapyyy} \def\centerchapyyy #1{{\let\unnumbchapmacro=\centerchapmacro \unnumberedyyy{#1}}} % @top is like @unnumbered. \outer\def\top{\parsearg\unnumberedyyy} \outer\def\unnumbered{\parsearg\unnumberedyyy} \def\unnumberedyyy #1{\unnmhead0{#1}} % normally unnmhead0 calls unnumberedzzz \def\unnumberedzzz #1{% \secno=0 \subsecno=0 \subsubsecno=0 % % This used to be simply \message{#1}, but TeX fully expands the % argument to \message. Therefore, if #1 contained @-commands, TeX % expanded them. For example, in `@unnumbered The @cite{Book}', TeX % expanded @cite (which turns out to cause errors because \cite is meant % to be executed, not expanded). % % Anyway, we don't want the fully-expanded definition of @cite to appear % as a result of the \message, we just want `@cite' itself. We use % \the to achieve this: TeX expands \the only once, % simply yielding the contents of . (We also do this for % the toc entries.) \toks0 = {#1}\message{(\the\toks0)}% % \unnumbchapmacro {#1}% \gdef\thischapter{#1}\gdef\thissection{#1}% \toks0 = {#1}% \edef\temp{\noexpand\writetocentry{\realbackslash unnumbchapentry{\the\toks0}}}% \temp \unnumbnoderef \global\let\section = \unnumberedsec \global\let\subsection = \unnumberedsubsec \global\let\subsubsection = \unnumberedsubsubsec } % Sections. \outer\def\numberedsec{\parsearg\secyyy} \def\secyyy #1{\numhead1{#1}} % normally calls seczzz \def\seczzz #1{% \subsecno=0 \subsubsecno=0 \global\advance \secno by 1 % \gdef\thissection{#1}\secheading {#1}{\the\chapno}{\the\secno}% \toks0 = {#1}% \edef\temp{\noexpand\writetocentry{\realbackslash secentry{\the\toks0}% {\the\chapno}{\the\secno}}}% \temp \donoderef \nobreak } \outer\def\appendixsection{\parsearg\appendixsecyyy} \outer\def\appendixsec{\parsearg\appendixsecyyy} \def\appendixsecyyy #1{\apphead1{#1}} % normally calls appendixsectionzzz \def\appendixsectionzzz #1{% \subsecno=0 \subsubsecno=0 \global\advance \secno by 1 % \gdef\thissection{#1}\secheading {#1}{\appendixletter}{\the\secno}% \toks0 = {#1}% \edef\temp{\noexpand\writetocentry{\realbackslash secentry{\the\toks0}% {\appendixletter}{\the\secno}}}% \temp \appendixnoderef \nobreak } \outer\def\unnumberedsec{\parsearg\unnumberedsecyyy} \def\unnumberedsecyyy #1{\unnmhead1{#1}} % normally calls unnumberedseczzz \def\unnumberedseczzz #1{% \plainsecheading {#1}\gdef\thissection{#1}% \toks0 = {#1}% \edef\temp{\noexpand\writetocentry{\realbackslash unnumbsecentry{\the\toks0}}}% \temp \unnumbnoderef \nobreak } % Subsections. \outer\def\numberedsubsec{\parsearg\numberedsubsecyyy} \def\numberedsubsecyyy #1{\numhead2{#1}} % normally calls numberedsubseczzz \def\numberedsubseczzz #1{% \gdef\thissection{#1}\subsubsecno=0 \global\advance \subsecno by 1 % \subsecheading {#1}{\the\chapno}{\the\secno}{\the\subsecno}% \toks0 = {#1}% \edef\temp{\noexpand\writetocentry{\realbackslash subsecentry{\the\toks0}% {\the\chapno}{\the\secno}{\the\subsecno}}}% \temp \donoderef \nobreak } \outer\def\appendixsubsec{\parsearg\appendixsubsecyyy} \def\appendixsubsecyyy #1{\apphead2{#1}} % normally calls appendixsubseczzz \def\appendixsubseczzz #1{% \gdef\thissection{#1}\subsubsecno=0 \global\advance \subsecno by 1 % \subsecheading {#1}{\appendixletter}{\the\secno}{\the\subsecno}% \toks0 = {#1}% \edef\temp{\noexpand\writetocentry{\realbackslash subsecentry{\the\toks0}% {\appendixletter}{\the\secno}{\the\subsecno}}}% \temp \appendixnoderef \nobreak } \outer\def\unnumberedsubsec{\parsearg\unnumberedsubsecyyy} \def\unnumberedsubsecyyy #1{\unnmhead2{#1}} %normally calls unnumberedsubseczzz \def\unnumberedsubseczzz #1{% \plainsubsecheading {#1}\gdef\thissection{#1}% \toks0 = {#1}% \edef\temp{\noexpand\writetocentry{\realbackslash unnumbsubsecentry% {\the\toks0}}}% \temp \unnumbnoderef \nobreak } % Subsubsections. \outer\def\numberedsubsubsec{\parsearg\numberedsubsubsecyyy} \def\numberedsubsubsecyyy #1{\numhead3{#1}} % normally numberedsubsubseczzz \def\numberedsubsubseczzz #1{% \gdef\thissection{#1}\global\advance \subsubsecno by 1 % \subsubsecheading {#1} {\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno}% \toks0 = {#1}% \edef\temp{\noexpand\writetocentry{\realbackslash subsubsecentry{\the\toks0}% {\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno}}}% \temp \donoderef \nobreak } \outer\def\appendixsubsubsec{\parsearg\appendixsubsubsecyyy} \def\appendixsubsubsecyyy #1{\apphead3{#1}} % normally appendixsubsubseczzz \def\appendixsubsubseczzz #1{% \gdef\thissection{#1}\global\advance \subsubsecno by 1 % \subsubsecheading {#1} {\appendixletter}{\the\secno}{\the\subsecno}{\the\subsubsecno}% \toks0 = {#1}% \edef\temp{\noexpand\writetocentry{\realbackslash subsubsecentry{\the\toks0}% {\appendixletter}{\the\secno}{\the\subsecno}{\the\subsubsecno}}}% \temp \appendixnoderef \nobreak } \outer\def\unnumberedsubsubsec{\parsearg\unnumberedsubsubsecyyy} \def\unnumberedsubsubsecyyy #1{\unnmhead3{#1}} %normally unnumberedsubsubseczzz \def\unnumberedsubsubseczzz #1{% \plainsubsubsecheading {#1}\gdef\thissection{#1}% \toks0 = {#1}% \edef\temp{\noexpand\writetocentry{\realbackslash unnumbsubsubsecentry% {\the\toks0}}}% \temp \unnumbnoderef \nobreak } % These are variants which are not "outer", so they can appear in @ifinfo. % Actually, they should now be obsolete; ordinary section commands should work. \def\infotop{\parsearg\unnumberedzzz} \def\infounnumbered{\parsearg\unnumberedzzz} \def\infounnumberedsec{\parsearg\unnumberedseczzz} \def\infounnumberedsubsec{\parsearg\unnumberedsubseczzz} \def\infounnumberedsubsubsec{\parsearg\unnumberedsubsubseczzz} \def\infoappendix{\parsearg\appendixzzz} \def\infoappendixsec{\parsearg\appendixseczzz} \def\infoappendixsubsec{\parsearg\appendixsubseczzz} \def\infoappendixsubsubsec{\parsearg\appendixsubsubseczzz} \def\infochapter{\parsearg\chapterzzz} \def\infosection{\parsearg\sectionzzz} \def\infosubsection{\parsearg\subsectionzzz} \def\infosubsubsection{\parsearg\subsubsectionzzz} % These macros control what the section commands do, according % to what kind of chapter we are in (ordinary, appendix, or unnumbered). % Define them by default for a numbered chapter. \global\let\section = \numberedsec \global\let\subsection = \numberedsubsec \global\let\subsubsection = \numberedsubsubsec % Define @majorheading, @heading and @subheading % NOTE on use of \vbox for chapter headings, section headings, and such: % 1) We use \vbox rather than the earlier \line to permit % overlong headings to fold. % 2) \hyphenpenalty is set to 10000 because hyphenation in a % heading is obnoxious; this forbids it. % 3) Likewise, headings look best if no \parindent is used, and % if justification is not attempted. Hence \raggedright. \def\majorheading{\parsearg\majorheadingzzz} \def\majorheadingzzz #1{% {\advance\chapheadingskip by 10pt \chapbreak }% {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 \parindent=0pt\raggedright \rm #1\hfill}}\bigskip \par\penalty 200} \def\chapheading{\parsearg\chapheadingzzz} \def\chapheadingzzz #1{\chapbreak % {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 \parindent=0pt\raggedright \rm #1\hfill}}\bigskip \par\penalty 200} % @heading, @subheading, @subsubheading. \def\heading{\parsearg\plainsecheading} \def\subheading{\parsearg\plainsubsecheading} \def\subsubheading{\parsearg\plainsubsubsecheading} % These macros generate a chapter, section, etc. heading only % (including whitespace, linebreaking, etc. around it), % given all the information in convenient, parsed form. %%% Args are the skip and penalty (usually negative) \def\dobreak#1#2{\par\ifdim\lastskip<#1\removelastskip\penalty#2\vskip#1\fi} \def\setchapterstyle #1 {\csname CHAPF#1\endcsname} %%% Define plain chapter starts, and page on/off switching for it % Parameter controlling skip before chapter headings (if needed) \newskip\chapheadingskip \def\chapbreak{\dobreak \chapheadingskip {-4000}} \def\chappager{\par\vfill\supereject} \def\chapoddpage{\chappager \ifodd\pageno \else \hbox to 0pt{} \chappager\fi} \def\setchapternewpage #1 {\csname CHAPPAG#1\endcsname} \def\CHAPPAGoff{% \global\let\contentsalignmacro = \chappager \global\let\pchapsepmacro=\chapbreak \global\let\pagealignmacro=\chappager} \def\CHAPPAGon{% \global\let\contentsalignmacro = \chappager \global\let\pchapsepmacro=\chappager \global\let\pagealignmacro=\chappager \global\def\HEADINGSon{\HEADINGSsingle}} \def\CHAPPAGodd{ \global\let\contentsalignmacro = \chapoddpage \global\let\pchapsepmacro=\chapoddpage \global\let\pagealignmacro=\chapoddpage \global\def\HEADINGSon{\HEADINGSdouble}} \CHAPPAGon \def\CHAPFplain{ \global\let\chapmacro=\chfplain \global\let\unnumbchapmacro=\unnchfplain \global\let\centerchapmacro=\centerchfplain} % Plain chapter opening. % #1 is the text, #2 the chapter number or empty if unnumbered. \def\chfplain#1#2{% \pchapsepmacro {% \chapfonts \rm \def\chapnum{#2}% \setbox0 = \hbox{#2\ifx\chapnum\empty\else\enspace\fi}% \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright \hangindent = \wd0 \centerparametersmaybe \unhbox0 #1\par}% }% \nobreak\bigskip % no page break after a chapter title \nobreak } % Plain opening for unnumbered. \def\unnchfplain#1{\chfplain{#1}{}} % @centerchap -- centered and unnumbered. \let\centerparametersmaybe = \relax \def\centerchfplain#1{{% \def\centerparametersmaybe{% \advance\rightskip by 3\rightskip \leftskip = \rightskip \parfillskip = 0pt }% \chfplain{#1}{}% }} \CHAPFplain % The default \def\unnchfopen #1{% \chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 \parindent=0pt\raggedright \rm #1\hfill}}\bigskip \par\nobreak } \def\chfopen #1#2{\chapoddpage {\chapfonts \vbox to 3in{\vfil \hbox to\hsize{\hfil #2} \hbox to\hsize{\hfil #1} \vfil}}% \par\penalty 5000 % } \def\centerchfopen #1{% \chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 \parindent=0pt \hfill {\rm #1}\hfill}}\bigskip \par\nobreak } \def\CHAPFopen{ \global\let\chapmacro=\chfopen \global\let\unnumbchapmacro=\unnchfopen \global\let\centerchapmacro=\centerchfopen} % Section titles. \newskip\secheadingskip \def\secheadingbreak{\dobreak \secheadingskip {-1000}} \def\secheading#1#2#3{\sectionheading{sec}{#2.#3}{#1}} \def\plainsecheading#1{\sectionheading{sec}{}{#1}} % Subsection titles. \newskip \subsecheadingskip \def\subsecheadingbreak{\dobreak \subsecheadingskip {-500}} \def\subsecheading#1#2#3#4{\sectionheading{subsec}{#2.#3.#4}{#1}} \def\plainsubsecheading#1{\sectionheading{subsec}{}{#1}} % Subsubsection titles. \let\subsubsecheadingskip = \subsecheadingskip \let\subsubsecheadingbreak = \subsecheadingbreak \def\subsubsecheading#1#2#3#4#5{\sectionheading{subsubsec}{#2.#3.#4.#5}{#1}} \def\plainsubsubsecheading#1{\sectionheading{subsubsec}{}{#1}} % Print any size section title. % % #1 is the section type (sec/subsec/subsubsec), #2 is the section % number (maybe empty), #3 the text. \def\sectionheading#1#2#3{% {% \expandafter\advance\csname #1headingskip\endcsname by \parskip \csname #1headingbreak\endcsname }% {% % Switch to the right set of fonts. \csname #1fonts\endcsname \rm % % Only insert the separating space if we have a section number. \def\secnum{#2}% \setbox0 = \hbox{#2\ifx\secnum\empty\else\enspace\fi}% % \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright \hangindent = \wd0 % zero if no section number \unhbox0 #3}% }% \ifdim\parskip<10pt \nobreak\kern10pt\nobreak\kern-\parskip\fi \nobreak } \message{toc,} \newwrite\tocfile % Write an entry to the toc file, opening it if necessary. % Called from @chapter, etc. We supply {\folio} at the end of the % argument, which will end up as the last argument to the \...entry macro. % % We open the .toc file here instead of at @setfilename or any other % given time so that @contents can be put in the document anywhere. % \newif\iftocfileopened \def\writetocentry#1{% \iftocfileopened\else \immediate\openout\tocfile = \jobname.toc \global\tocfileopenedtrue \fi \iflinks \write\tocfile{#1{\folio}}\fi } \newskip\contentsrightmargin \contentsrightmargin=1in \newcount\savepageno \newcount\lastnegativepageno \lastnegativepageno = -1 % Finish up the main text and prepare to read what we've written % to \tocfile. % \def\startcontents#1{% % If @setchapternewpage on, and @headings double, the contents should % start on an odd page, unlike chapters. Thus, we maintain % \contentsalignmacro in parallel with \pagealignmacro. % From: Torbjorn Granlund \contentsalignmacro \immediate\closeout\tocfile % % Don't need to put `Contents' or `Short Contents' in the headline. % It is abundantly clear what they are. \unnumbchapmacro{#1}\def\thischapter{}% \savepageno = \pageno \begingroup % Set up to handle contents files properly. \catcode`\\=0 \catcode`\{=1 \catcode`\}=2 \catcode`\@=11 % We can't do this, because then an actual ^ in a section % title fails, e.g., @chapter ^ -- exponentiation. --karl, 9jul97. %\catcode`\^=7 % to see ^^e4 as \"a etc. juha@piuha.ydi.vtt.fi \raggedbottom % Worry more about breakpoints than the bottom. \advance\hsize by -\contentsrightmargin % Don't use the full line length. % % Roman numerals for page numbers. \ifnum \pageno>0 \pageno = \lastnegativepageno \fi } % Normal (long) toc. \def\contents{% \startcontents{\putwordTableofContents}% \openin 1 \jobname.toc \ifeof 1 \else \closein 1 \input \jobname.toc \fi \vfill \eject \endgroup \lastnegativepageno = \pageno \pageno = \savepageno } % And just the chapters. \def\summarycontents{% \startcontents{\putwordShortContents}% % \let\chapentry = \shortchapentry \let\unnumbchapentry = \shortunnumberedentry % We want a true roman here for the page numbers. \secfonts \let\rm=\shortcontrm \let\bf=\shortcontbf \let\sl=\shortcontsl \rm \hyphenpenalty = 10000 \advance\baselineskip by 1pt % Open it up a little. \def\secentry ##1##2##3##4{} \def\unnumbsecentry ##1##2{} \def\subsecentry ##1##2##3##4##5{} \def\unnumbsubsecentry ##1##2{} \def\subsubsecentry ##1##2##3##4##5##6{} \def\unnumbsubsubsecentry ##1##2{} \openin 1 \jobname.toc \ifeof 1 \else \closein 1 \input \jobname.toc \fi \vfill \eject \endgroup \lastnegativepageno = \pageno \pageno = \savepageno } \let\shortcontents = \summarycontents % These macros generate individual entries in the table of contents. % The first argument is the chapter or section name. % The last argument is the page number. % The arguments in between are the chapter number, section number, ... % Chapter-level things, for both the long and short contents. \def\chapentry#1#2#3{\dochapentry{#2\labelspace#1}{#3}} % See comments in \dochapentry re vbox and related settings \def\shortchapentry#1#2#3{% \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno{#3}}% } % Typeset the label for a chapter or appendix for the short contents. % The arg is, e.g. `Appendix A' for an appendix, or `3' for a chapter. % We could simplify the code here by writing out an \appendixentry % command in the toc file for appendices, instead of using \chapentry % for both, but it doesn't seem worth it. \setbox0 = \hbox{\shortcontrm \putwordAppendix } \newdimen\shortappendixwidth \shortappendixwidth = \wd0 \def\shortchaplabel#1{% % We typeset #1 in a box of constant width, regardless of the text of % #1, so the chapter titles will come out aligned. \setbox0 = \hbox{#1}% \dimen0 = \ifdim\wd0 > \shortappendixwidth \shortappendixwidth \else 0pt \fi % % This space should be plenty, since a single number is .5em, and the % widest letter (M) is 1em, at least in the Computer Modern fonts. % (This space doesn't include the extra space that gets added after % the label; that gets put in by \shortchapentry above.) \advance\dimen0 by 1.1em \hbox to \dimen0{#1\hfil}% } \def\unnumbchapentry#1#2{\dochapentry{#1}{#2}} \def\shortunnumberedentry#1#2{\tocentry{#1}{\doshortpageno{#2}}} % Sections. \def\secentry#1#2#3#4{\dosecentry{#2.#3\labelspace#1}{#4}} \def\unnumbsecentry#1#2{\dosecentry{#1}{#2}} % Subsections. \def\subsecentry#1#2#3#4#5{\dosubsecentry{#2.#3.#4\labelspace#1}{#5}} \def\unnumbsubsecentry#1#2{\dosubsecentry{#1}{#2}} % And subsubsections. \def\subsubsecentry#1#2#3#4#5#6{% \dosubsubsecentry{#2.#3.#4.#5\labelspace#1}{#6}} \def\unnumbsubsubsecentry#1#2{\dosubsubsecentry{#1}{#2}} % This parameter controls the indentation of the various levels. \newdimen\tocindent \tocindent = 3pc % Now for the actual typesetting. In all these, #1 is the text and #2 is the % page number. % % If the toc has to be broken over pages, we want it to be at chapters % if at all possible; hence the \penalty. \def\dochapentry#1#2{% \penalty-300 \vskip1\baselineskip plus.33\baselineskip minus.25\baselineskip \begingroup \chapentryfonts \tocentry{#1}{\dopageno{#2}}% \endgroup \nobreak\vskip .25\baselineskip plus.1\baselineskip } \def\dosecentry#1#2{\begingroup \secentryfonts \leftskip=\tocindent \tocentry{#1}{\dopageno{#2}}% \endgroup} \def\dosubsecentry#1#2{\begingroup \subsecentryfonts \leftskip=2\tocindent \tocentry{#1}{\dopageno{#2}}% \endgroup} \def\dosubsubsecentry#1#2{\begingroup \subsubsecentryfonts \leftskip=3\tocindent \tocentry{#1}{\dopageno{#2}}% \endgroup} % Final typesetting of a toc entry; we use the same \entry macro as for % the index entries, but we want to suppress hyphenation here. (We % can't do that in the \entry macro, since index entries might consist % of hyphenated-identifiers-that-do-not-fit-on-a-line-and-nothing-else.) \def\tocentry#1#2{\begingroup \vskip 0pt plus1pt % allow a little stretch for the sake of nice page breaks % Do not use \turnoffactive in these arguments. Since the toc is % typeset in cmr, so characters such as _ would come out wrong; we % have to do the usual translation tricks. \entry{#1}{#2}% \endgroup} % Space between chapter (or whatever) number and the title. \def\labelspace{\hskip1em \relax} \def\dopageno#1{{\rm #1}} \def\doshortpageno#1{{\rm #1}} \def\chapentryfonts{\secfonts \rm} \def\secentryfonts{\textfonts} \let\subsecentryfonts = \textfonts \let\subsubsecentryfonts = \textfonts \message{environments,} % Since these characters are used in examples, it should be an even number of % \tt widths. Each \tt character is 1en, so two makes it 1em. % Furthermore, these definitions must come after we define our fonts. \newbox\dblarrowbox \newbox\longdblarrowbox \newbox\pushcharbox \newbox\bullbox \newbox\equivbox \newbox\errorbox %{\tentt %\global\setbox\dblarrowbox = \hbox to 1em{\hfil$\Rightarrow$\hfil} %\global\setbox\longdblarrowbox = \hbox to 1em{\hfil$\mapsto$\hfil} %\global\setbox\pushcharbox = \hbox to 1em{\hfil$\dashv$\hfil} %\global\setbox\equivbox = \hbox to 1em{\hfil$\ptexequiv$\hfil} % Adapted from the manmac format (p.420 of TeXbook) %\global\setbox\bullbox = \hbox to 1em{\kern.15em\vrule height .75ex width .85ex % depth .1ex\hfil} %} % @point{}, @result{}, @expansion{}, @print{}, @equiv{}. \def\point{$\star$} \def\result{\leavevmode\raise.15ex\hbox to 1em{\hfil$\Rightarrow$\hfil}} \def\expansion{\leavevmode\raise.1ex\hbox to 1em{\hfil$\mapsto$\hfil}} \def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}} \def\equiv{\leavevmode\lower.1ex\hbox to 1em{\hfil$\ptexequiv$\hfil}} % Adapted from the TeXbook's \boxit. {\tentt \global\dimen0 = 3em}% Width of the box. \dimen2 = .55pt % Thickness of rules % The text. (`r' is open on the right, `e' somewhat less so on the left.) \setbox0 = \hbox{\kern-.75pt \tensf error\kern-1.5pt} \global\setbox\errorbox=\hbox to \dimen0{\hfil \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right. \advance\hsize by -2\dimen2 % Rules. \vbox{ \hrule height\dimen2 \hbox{\vrule width\dimen2 \kern3pt % Space to left of text. \vtop{\kern2.4pt \box0 \kern2.4pt}% Space above/below. \kern3pt\vrule width\dimen2}% Space to right. \hrule height\dimen2} \hfil} % The @error{} command. \def\error{\leavevmode\lower.7ex\copy\errorbox} % @tex ... @end tex escapes into raw Tex temporarily. % One exception: @ is still an escape character, so that @end tex works. % But \@ or @@ will get a plain tex @ character. \def\tex{\begingroup \catcode `\\=0 \catcode `\{=1 \catcode `\}=2 \catcode `\$=3 \catcode `\&=4 \catcode `\#=6 \catcode `\^=7 \catcode `\_=8 \catcode `\~=13 \let~=\tie \catcode `\%=14 \catcode 43=12 % plus \catcode`\"=12 \catcode`\==12 \catcode`\|=12 \catcode`\<=12 \catcode`\>=12 \escapechar=`\\ % \let\b=\ptexb \let\bullet=\ptexbullet \let\c=\ptexc \let\,=\ptexcomma \let\.=\ptexdot \let\dots=\ptexdots \let\equiv=\ptexequiv \let\!=\ptexexclam \let\i=\ptexi \let\{=\ptexlbrace \let\+=\tabalign \let\}=\ptexrbrace \let\*=\ptexstar \let\t=\ptext % \def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}% \def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}% \def\@{@}% \let\Etex=\endgroup} % Define @lisp ... @endlisp. % @lisp does a \begingroup so it can rebind things, % including the definition of @endlisp (which normally is erroneous). % Amount to narrow the margins by for @lisp. \newskip\lispnarrowing \lispnarrowing=0.4in % This is the definition that ^^M gets inside @lisp, @example, and other % such environments. \null is better than a space, since it doesn't % have any width. \def\lisppar{\null\endgraf} % Make each space character in the input produce a normal interword % space in the output. Don't allow a line break at this space, as this % is used only in environments like @example, where each line of input % should produce a line of output anyway. % {\obeyspaces % \gdef\sepspaces{\obeyspaces\let =\tie}} % Define \obeyedspace to be our active space, whatever it is. This is % for use in \parsearg. {\sepspaces% \global\let\obeyedspace= } % This space is always present above and below environments. \newskip\envskipamount \envskipamount = 0pt % Make spacing and below environment symmetrical. We use \parskip here % to help in doing that, since in @example-like environments \parskip % is reset to zero; thus the \afterenvbreak inserts no space -- but the % start of the next paragraph will insert \parskip % \def\aboveenvbreak{{\advance\envskipamount by \parskip \endgraf \ifdim\lastskip<\envskipamount \removelastskip \penalty-50 \vskip\envskipamount \fi}} \let\afterenvbreak = \aboveenvbreak % \nonarrowing is a flag. If "set", @lisp etc don't narrow margins. \let\nonarrowing=\relax % @cartouche ... @end cartouche: draw rectangle w/rounded corners around % environment contents. \font\circle=lcircle10 \newdimen\circthick \newdimen\cartouter\newdimen\cartinner \newskip\normbskip\newskip\normpskip\newskip\normlskip \circthick=\fontdimen8\circle % \def\ctl{{\circle\char'013\hskip -6pt}}% 6pt from pl file: 1/2charwidth \def\ctr{{\hskip 6pt\circle\char'010}} \def\cbl{{\circle\char'012\hskip -6pt}} \def\cbr{{\hskip 6pt\circle\char'011}} \def\carttop{\hbox to \cartouter{\hskip\lskip \ctl\leaders\hrule height\circthick\hfil\ctr \hskip\rskip}} \def\cartbot{\hbox to \cartouter{\hskip\lskip \cbl\leaders\hrule height\circthick\hfil\cbr \hskip\rskip}} % \newskip\lskip\newskip\rskip \long\def\cartouche{% \begingroup \lskip=\leftskip \rskip=\rightskip \leftskip=0pt\rightskip=0pt %we want these *outside*. \cartinner=\hsize \advance\cartinner by-\lskip \advance\cartinner by-\rskip \cartouter=\hsize \advance\cartouter by 18.4pt % allow for 3pt kerns on either % side, and for 6pt waste from % each corner char, and rule thickness \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip % Flag to tell @lisp, etc., not to narrow margin. \let\nonarrowing=\comment \vbox\bgroup \baselineskip=0pt\parskip=0pt\lineskip=0pt \carttop \hbox\bgroup \hskip\lskip \vrule\kern3pt \vbox\bgroup \hsize=\cartinner \kern3pt \begingroup \baselineskip=\normbskip \lineskip=\normlskip \parskip=\normpskip \vskip -\parskip \def\Ecartouche{% \endgroup \kern3pt \egroup \kern3pt\vrule \hskip\rskip \egroup \cartbot \egroup \endgroup }} % This macro is called at the beginning of all the @example variants, % inside a group. \def\nonfillstart{% \aboveenvbreak \inENV % This group ends at the end of the body \hfuzz = 12pt % Don't be fussy \sepspaces % Make spaces be word-separators rather than space tokens. \singlespace \let\par = \lisppar % don't ignore blank lines \obeylines % each line of input is a line of output \parskip = 0pt \parindent = 0pt \emergencystretch = 0pt % don't try to avoid overfull boxes % @cartouche defines \nonarrowing to inhibit narrowing % at next level down. \ifx\nonarrowing\relax \advance \leftskip by \lispnarrowing \exdentamount=\lispnarrowing \let\exdent=\nofillexdent \let\nonarrowing=\relax \fi } % Define the \E... control sequence only if we are inside the particular % environment, so the error checking in \end will work. % % To end an @example-like environment, we first end the paragraph (via % \afterenvbreak's vertical glue), and then the group. That way we keep % the zero \parskip that the environments set -- \parskip glue will be % inserted at the beginning of the next paragraph in the document, after % the environment. % \def\nonfillfinish{\afterenvbreak\endgroup} % @lisp: indented, narrowed, typewriter font. \def\lisp{\begingroup \nonfillstart \let\Elisp = \nonfillfinish \tt \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special. \gobble % eat return } % @example: Same as @lisp. \def\example{\begingroup \def\Eexample{\nonfillfinish\endgroup}\lisp} % @small... is usually equivalent to the non-small (@smallbook % redefines). We must call \example (or whatever) last in the % definition, since it reads the return following the @example (or % whatever) command. % % This actually allows (for example) @end display inside an % @smalldisplay. Too bad, but makeinfo will catch the error anyway. % \def\smalldisplay{\begingroup\def\Esmalldisplay{\nonfillfinish\endgroup}\display} \def\smallexample{\begingroup\def\Esmallexample{\nonfillfinish\endgroup}\lisp} \def\smallformat{\begingroup\def\Esmallformat{\nonfillfinish\endgroup}\format} \def\smalllisp{\begingroup\def\Esmalllisp{\nonfillfinish\endgroup}\lisp} % Real @smallexample and @smalllisp (when @smallbook): use smaller fonts. % Originally contributed by Pavel@xerox. \def\smalllispx{\begingroup \def\Esmalllisp{\nonfillfinish\endgroup}% \def\Esmallexample{\nonfillfinish\endgroup}% \indexfonts \lisp } % @display: same as @lisp except keep current font. % \def\display{\begingroup \nonfillstart \let\Edisplay = \nonfillfinish \gobble } % @smalldisplay (when @smallbook): @display plus smaller fonts. % \def\smalldisplayx{\begingroup \def\Esmalldisplay{\nonfillfinish\endgroup}% \indexfonts \rm \display } % @format: same as @display except don't narrow margins. % \def\format{\begingroup \let\nonarrowing = t \nonfillstart \let\Eformat = \nonfillfinish \gobble } % @smallformat (when @smallbook): @format plus smaller fonts. % \def\smallformatx{\begingroup \def\Esmallformat{\nonfillfinish\endgroup}% \indexfonts \rm \format } % @flushleft (same as @format). % \def\flushleft{\begingroup \def\Eflushleft{\nonfillfinish\endgroup}\format} % @flushright. % \def\flushright{\begingroup \let\nonarrowing = t \nonfillstart \let\Eflushright = \nonfillfinish \advance\leftskip by 0pt plus 1fill \gobble } % @quotation does normal linebreaking (hence we can't use \nonfillstart) % and narrows the margins. % \def\quotation{% \begingroup\inENV %This group ends at the end of the @quotation body {\parskip=0pt \aboveenvbreak}% because \aboveenvbreak inserts \parskip \singlespace \parindent=0pt % We have retained a nonzero parskip for the environment, since we're % doing normal filling. So to avoid extra space below the environment... \def\Equotation{\parskip = 0pt \nonfillfinish}% % % @cartouche defines \nonarrowing to inhibit narrowing at next level down. \ifx\nonarrowing\relax \advance\leftskip by \lispnarrowing \advance\rightskip by \lispnarrowing \exdentamount = \lispnarrowing \let\nonarrowing = \relax \fi } \message{defuns,} % Define formatter for defuns % First, allow user to change definition object font (\df) internally \def\setdeffont #1 {\csname DEF#1\endcsname} \newskip\defbodyindent \defbodyindent=.4in \newskip\defargsindent \defargsindent=50pt \newskip\deftypemargin \deftypemargin=12pt \newskip\deflastargmargin \deflastargmargin=18pt \newcount\parencount % define \functionparens, which makes ( and ) and & do special things. % \functionparens affects the group it is contained in. \def\activeparens{% \catcode`\(=\active \catcode`\)=\active \catcode`\&=\active \catcode`\[=\active \catcode`\]=\active} % Make control sequences which act like normal parenthesis chars. \let\lparen = ( \let\rparen = ) {\activeparens % Now, smart parens don't turn on until &foo (see \amprm) % Be sure that we always have a definition for `(', etc. For example, % if the fn name has parens in it, \boldbrax will not be in effect yet, % so TeX would otherwise complain about undefined control sequence. \global\let(=\lparen \global\let)=\rparen \global\let[=\lbrack \global\let]=\rbrack \gdef\functionparens{\boldbrax\let&=\amprm\parencount=0 } \gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb} % This is used to turn on special parens % but make & act ordinary (given that it's active). \gdef\boldbraxnoamp{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb\let&=\ampnr} % Definitions of (, ) and & used in args for functions. % This is the definition of ( outside of all parentheses. \gdef\oprm#1 {{\rm\char`\(}#1 \bf \let(=\opnested \global\advance\parencount by 1 } % % This is the definition of ( when already inside a level of parens. \gdef\opnested{\char`\(\global\advance\parencount by 1 } % \gdef\clrm{% Print a paren in roman if it is taking us back to depth of 0. % also in that case restore the outer-level definition of (. \ifnum \parencount=1 {\rm \char `\)}\sl \let(=\oprm \else \char `\) \fi \global\advance \parencount by -1 } % If we encounter &foo, then turn on ()-hacking afterwards \gdef\amprm#1 {{\rm\}\let(=\oprm \let)=\clrm\ } % \gdef\normalparens{\boldbrax\let&=\ampnr} } % End of definition inside \activeparens %% These parens (in \boldbrax) actually are a little bolder than the %% contained text. This is especially needed for [ and ] \def\opnr{{\sf\char`\(}\global\advance\parencount by 1 } \def\clnr{{\sf\char`\)}\global\advance\parencount by -1 } \def\ampnr{\&} \def\lbrb{{\bf\char`\[}} \def\rbrb{{\bf\char`\]}} % First, defname, which formats the header line itself. % #1 should be the function name. % #2 should be the type of definition, such as "Function". \def\defname #1#2{% % Get the values of \leftskip and \rightskip as they were % outside the @def... \dimen2=\leftskip \advance\dimen2 by -\defbodyindent \noindent \setbox0=\hbox{\hskip \deflastargmargin{\rm #2}\hskip \deftypemargin}% \dimen0=\hsize \advance \dimen0 by -\wd0 % compute size for first line \dimen1=\hsize \advance \dimen1 by -\defargsindent %size for continuations \parshape 2 0in \dimen0 \defargsindent \dimen1 % Now output arg 2 ("Function" or some such) % ending at \deftypemargin from the right margin, % but stuck inside a box of width 0 so it does not interfere with linebreaking {% Adjust \hsize to exclude the ambient margins, % so that \rightline will obey them. \advance \hsize by -\dimen2 \rlap{\rightline{{\rm #2}\hskip -1.25pc }}}% % Make all lines underfull and no complaints: \tolerance=10000 \hbadness=10000 \advance\leftskip by -\defbodyindent \exdentamount=\defbodyindent {\df #1}\enskip % Generate function name } % Actually process the body of a definition % #1 should be the terminating control sequence, such as \Edefun. % #2 should be the "another name" control sequence, such as \defunx. % #3 should be the control sequence that actually processes the header, % such as \defunheader. \def\defparsebody #1#2#3{\begingroup\inENV% Environment for definitionbody \medbreak % % Define the end token that this defining construct specifies % so that it will exit this group. \def#1{\endgraf\endgroup\medbreak}% \def#2{\begingroup\obeylines\activeparens\spacesplit#3}% \parindent=0in \advance\leftskip by \defbodyindent \exdentamount=\defbodyindent \begingroup % \catcode 61=\active % 61 is `=' \obeylines\activeparens\spacesplit#3} % #1 is the \E... control sequence to end the definition (which we define). % #2 is the \...x control sequence for consecutive fns (which we define). % #3 is the control sequence to call to resume processing. % #4, delimited by the space, is the class name. % \def\defmethparsebody#1#2#3#4 {\begingroup\inENV % \medbreak % % Define the end token that this defining construct specifies % so that it will exit this group. \def#1{\endgraf\endgroup\medbreak}% \def#2##1 {\begingroup\obeylines\activeparens\spacesplit{#3{##1}}}% \parindent=0in \advance\leftskip by \defbodyindent \exdentamount=\defbodyindent \begingroup\obeylines\activeparens\spacesplit{#3{#4}}} % @deftypemethod has an extra argument that nothing else does. Sigh. % #1 is the \E... control sequence to end the definition (which we define). % #2 is the \...x control sequence for consecutive fns (which we define). % #3 is the control sequence to call to resume processing. % #4, delimited by the space, is the class name. % #5 is the method's return type. % \def\deftypemethparsebody#1#2#3#4 #5 {\begingroup\inENV % \medbreak % % Define the end token that this defining construct specifies % so that it will exit this group. \def#1{\endgraf\endgroup\medbreak}% \def#2##1 ##2 {\begingroup\obeylines\activeparens\spacesplit{#3{##1}{##2}}}% \parindent=0in \advance\leftskip by \defbodyindent \exdentamount=\defbodyindent \begingroup\obeylines\activeparens\spacesplit{#3{#4}{#5}}} \def\defopparsebody #1#2#3#4#5 {\begingroup\inENV % \medbreak % % Define the end token that this defining construct specifies % so that it will exit this group. \def#1{\endgraf\endgroup\medbreak}% \def#2##1 ##2 {\def#4{##1}% \begingroup\obeylines\activeparens\spacesplit{#3{##2}}}% \parindent=0in \advance\leftskip by \defbodyindent \exdentamount=\defbodyindent \begingroup\obeylines\activeparens\spacesplit{#3{#5}}} % These parsing functions are similar to the preceding ones % except that they do not make parens into active characters. % These are used for "variables" since they have no arguments. \def\defvarparsebody #1#2#3{\begingroup\inENV% Environment for definitionbody \medbreak % % Define the end token that this defining construct specifies % so that it will exit this group. \def#1{\endgraf\endgroup\medbreak}% \def#2{\begingroup\obeylines\spacesplit#3}% \parindent=0in \advance\leftskip by \defbodyindent \exdentamount=\defbodyindent \begingroup % \catcode 61=\active % \obeylines\spacesplit#3} % This is used for \def{tp,vr}parsebody. It could probably be used for % some of the others, too, with some judicious conditionals. % \def\parsebodycommon#1#2#3{% \begingroup\inENV % \medbreak % % Define the end token that this defining construct specifies % so that it will exit this group. \def#1{\endgraf\endgroup\medbreak}% \def#2##1 {\begingroup\obeylines\spacesplit{#3{##1}}}% \parindent=0in \advance\leftskip by \defbodyindent \exdentamount=\defbodyindent \begingroup\obeylines } \def\defvrparsebody#1#2#3#4 {% \parsebodycommon{#1}{#2}{#3}% \spacesplit{#3{#4}}% } % This loses on `@deftp {Data Type} {struct termios}' -- it thinks the % type is just `struct', because we lose the braces in `{struct % termios}' when \spacesplit reads its undelimited argument. Sigh. % \let\deftpparsebody=\defvrparsebody % % So, to get around this, we put \empty in with the type name. That % way, TeX won't find exactly `{...}' as an undelimited argument, and % won't strip off the braces. % \def\deftpparsebody #1#2#3#4 {% \parsebodycommon{#1}{#2}{#3}% \spacesplit{\parsetpheaderline{#3{#4}}}\empty } % Fine, but then we have to eventually remove the \empty *and* the % braces (if any). That's what this does. % \def\removeemptybraces\empty#1\relax{#1} % After \spacesplit has done its work, this is called -- #1 is the final % thing to call, #2 the type name (which starts with \empty), and #3 % (which might be empty) the arguments. % \def\parsetpheaderline#1#2#3{% #1{\removeemptybraces#2\relax}{#3}% }% \def\defopvarparsebody #1#2#3#4#5 {\begingroup\inENV % \medbreak % % Define the end token that this defining construct specifies % so that it will exit this group. \def#1{\endgraf\endgroup\medbreak}% \def#2##1 ##2 {\def#4{##1}% \begingroup\obeylines\spacesplit{#3{##2}}}% \parindent=0in \advance\leftskip by \defbodyindent \exdentamount=\defbodyindent \begingroup\obeylines\spacesplit{#3{#5}}} % Split up #2 at the first space token. % call #1 with two arguments: % the first is all of #2 before the space token, % the second is all of #2 after that space token. % If #2 contains no space token, all of it is passed as the first arg % and the second is passed as empty. {\obeylines \gdef\spacesplit#1#2^^M{\endgroup\spacesplitfoo{#1}#2 \relax\spacesplitfoo}% \long\gdef\spacesplitfoo#1#2 #3#4\spacesplitfoo{% \ifx\relax #3% #1{#2}{}\else #1{#2}{#3#4}\fi}} % So much for the things common to all kinds of definitions. % Define @defun. % First, define the processing that is wanted for arguments of \defun % Use this to expand the args and terminate the paragraph they make up \def\defunargs #1{\functionparens \sl % Expand, preventing hyphenation at `-' chars. % Note that groups don't affect changes in \hyphenchar. \hyphenchar\tensl=0 #1% \hyphenchar\tensl=45 \ifnum\parencount=0 \else \errmessage{Unbalanced parentheses in @def}\fi% \interlinepenalty=10000 \advance\rightskip by 0pt plus 1fil \endgraf\nobreak\vskip -\parskip\nobreak } \def\deftypefunargs #1{% % Expand, preventing hyphenation at `-' chars. % Note that groups don't affect changes in \hyphenchar. % Use \boldbraxnoamp, not \functionparens, so that & is not special. \boldbraxnoamp \tclose{#1}% avoid \code because of side effects on active chars \interlinepenalty=10000 \advance\rightskip by 0pt plus 1fil \endgraf\nobreak\vskip -\parskip\nobreak } % Do complete processing of one @defun or @defunx line already parsed. % @deffn Command forward-char nchars \def\deffn{\defmethparsebody\Edeffn\deffnx\deffnheader} \def\deffnheader #1#2#3{\doind {fn}{\code{#2}}% \begingroup\defname {#2}{#1}\defunargs{#3}\endgroup % \catcode 61=\other % Turn off change made in \defparsebody } % @defun == @deffn Function \def\defun{\defparsebody\Edefun\defunx\defunheader} \def\defunheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index \begingroup\defname {#1}{Function}% \defunargs {#2}\endgroup % \catcode 61=\other % Turn off change made in \defparsebody } % @deftypefun int foobar (int @var{foo}, float @var{bar}) \def\deftypefun{\defparsebody\Edeftypefun\deftypefunx\deftypefunheader} % #1 is the data type. #2 is the name and args. \def\deftypefunheader #1#2{\deftypefunheaderx{#1}#2 \relax} % #1 is the data type, #2 the name, #3 the args. \def\deftypefunheaderx #1#2 #3\relax{% \doind {fn}{\code{#2}}% Make entry in function index \begingroup\defname {\defheaderxcond#1\relax$$$#2}{Function}% \deftypefunargs {#3}\endgroup % \catcode 61=\other % Turn off change made in \defparsebody } % @deftypefn {Library Function} int foobar (int @var{foo}, float @var{bar}) \def\deftypefn{\defmethparsebody\Edeftypefn\deftypefnx\deftypefnheader} % \defheaderxcond#1\relax$$$ % puts #1 in @code, followed by a space, but does nothing if #1 is null. \def\defheaderxcond#1#2$$${\ifx#1\relax\else\code{#1#2} \fi} % #1 is the classification. #2 is the data type. #3 is the name and args. \def\deftypefnheader #1#2#3{\deftypefnheaderx{#1}{#2}#3 \relax} % #1 is the classification, #2 the data type, #3 the name, #4 the args. \def\deftypefnheaderx #1#2#3 #4\relax{% \doind {fn}{\code{#3}}% Make entry in function index \begingroup \normalparens % notably, turn off `&' magic, which prevents % at least some C++ text from working \defname {\defheaderxcond#2\relax$$$#3}{#1}% \deftypefunargs {#4}\endgroup % \catcode 61=\other % Turn off change made in \defparsebody } % @defmac == @deffn Macro \def\defmac{\defparsebody\Edefmac\defmacx\defmacheader} \def\defmacheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index \begingroup\defname {#1}{Macro}% \defunargs {#2}\endgroup % \catcode 61=\other % Turn off change made in \defparsebody } % @defspec == @deffn Special Form \def\defspec{\defparsebody\Edefspec\defspecx\defspecheader} \def\defspecheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index \begingroup\defname {#1}{Special Form}% \defunargs {#2}\endgroup % \catcode 61=\other % Turn off change made in \defparsebody } % This definition is run if you use @defunx % anywhere other than immediately after a @defun or @defunx. \def\deffnx #1 {\errmessage{@deffnx in invalid context}} \def\defunx #1 {\errmessage{@defunx in invalid context}} \def\defmacx #1 {\errmessage{@defmacx in invalid context}} \def\defspecx #1 {\errmessage{@defspecx in invalid context}} \def\deftypefnx #1 {\errmessage{@deftypefnx in invalid context}} \def\deftypemethodx #1 {\errmessage{@deftypemethodx in invalid context}} \def\deftypefunx #1 {\errmessage{@deftypefunx in invalid context}} % @defmethod, and so on % @defop CATEGORY CLASS OPERATION ARG... \def\defop #1 {\def\defoptype{#1}% \defopparsebody\Edefop\defopx\defopheader\defoptype} \def\defopheader #1#2#3{% \dosubind {fn}{\code{#2}}{\putwordon\ #1}% Make entry in function index \begingroup\defname {#2}{\defoptype{} on #1}% \defunargs {#3}\endgroup % } % @deftypemethod CLASS RETURN-TYPE METHOD ARG... % \def\deftypemethod{% \deftypemethparsebody\Edeftypemethod\deftypemethodx\deftypemethodheader} % % #1 is the class name, #2 the data type, #3 the method name, #4 the args. \def\deftypemethodheader#1#2#3#4{% \dosubind{fn}{\code{#3}}{\putwordon\ \code{#1}}% entry in function index \begingroup \defname{\defheaderxcond#2\relax$$$#3}{\putwordMethodon\ \code{#1}}% \deftypefunargs{#4}% \endgroup } % @defmethod == @defop Method % \def\defmethod{\defmethparsebody\Edefmethod\defmethodx\defmethodheader} % % #1 is the class name, #2 the method name, #3 the args. \def\defmethodheader#1#2#3{% \dosubind{fn}{\code{#2}}{\putwordon\ \code{#1}}% entry in function index \begingroup \defname{#2}{\putwordMethodon\ \code{#1}}% \defunargs{#3}% \endgroup } % @defcv {Class Option} foo-class foo-flag \def\defcv #1 {\def\defcvtype{#1}% \defopvarparsebody\Edefcv\defcvx\defcvarheader\defcvtype} \def\defcvarheader #1#2#3{% \dosubind {vr}{\code{#2}}{of #1}% Make entry in var index \begingroup\defname {#2}{\defcvtype{} of #1}% \defvarargs {#3}\endgroup % } % @defivar == @defcv {Instance Variable} \def\defivar{\defvrparsebody\Edefivar\defivarx\defivarheader} \def\defivarheader #1#2#3{% \dosubind {vr}{\code{#2}}{of #1}% Make entry in var index \begingroup\defname {#2}{Instance Variable of #1}% \defvarargs {#3}\endgroup % } % These definitions are run if you use @defmethodx, etc., % anywhere other than immediately after a @defmethod, etc. \def\defopx #1 {\errmessage{@defopx in invalid context}} \def\defmethodx #1 {\errmessage{@defmethodx in invalid context}} \def\defcvx #1 {\errmessage{@defcvx in invalid context}} \def\defivarx #1 {\errmessage{@defivarx in invalid context}} % Now @defvar % First, define the processing that is wanted for arguments of @defvar. % This is actually simple: just print them in roman. % This must expand the args and terminate the paragraph they make up \def\defvarargs #1{\normalparens #1% \interlinepenalty=10000 \endgraf\nobreak\vskip -\parskip\nobreak} % @defvr Counter foo-count \def\defvr{\defvrparsebody\Edefvr\defvrx\defvrheader} \def\defvrheader #1#2#3{\doind {vr}{\code{#2}}% \begingroup\defname {#2}{#1}\defvarargs{#3}\endgroup} % @defvar == @defvr Variable \def\defvar{\defvarparsebody\Edefvar\defvarx\defvarheader} \def\defvarheader #1#2{\doind {vr}{\code{#1}}% Make entry in var index \begingroup\defname {#1}{Variable}% \defvarargs {#2}\endgroup % } % @defopt == @defvr {User Option} \def\defopt{\defvarparsebody\Edefopt\defoptx\defoptheader} \def\defoptheader #1#2{\doind {vr}{\code{#1}}% Make entry in var index \begingroup\defname {#1}{User Option}% \defvarargs {#2}\endgroup % } % @deftypevar int foobar \def\deftypevar{\defvarparsebody\Edeftypevar\deftypevarx\deftypevarheader} % #1 is the data type. #2 is the name, perhaps followed by text that % is actually part of the data type, which should not be put into the index. \def\deftypevarheader #1#2{% \dovarind#2 \relax% Make entry in variables index \begingroup\defname {\defheaderxcond#1\relax$$$#2}{Variable}% \interlinepenalty=10000 \endgraf\nobreak\vskip -\parskip\nobreak \endgroup} \def\dovarind#1 #2\relax{\doind{vr}{\code{#1}}} % @deftypevr {Global Flag} int enable \def\deftypevr{\defvrparsebody\Edeftypevr\deftypevrx\deftypevrheader} \def\deftypevrheader #1#2#3{\dovarind#3 \relax% \begingroup\defname {\defheaderxcond#2\relax$$$#3}{#1} \interlinepenalty=10000 \endgraf\nobreak\vskip -\parskip\nobreak \endgroup} % This definition is run if you use @defvarx % anywhere other than immediately after a @defvar or @defvarx. \def\defvrx #1 {\errmessage{@defvrx in invalid context}} \def\defvarx #1 {\errmessage{@defvarx in invalid context}} \def\defoptx #1 {\errmessage{@defoptx in invalid context}} \def\deftypevarx #1 {\errmessage{@deftypevarx in invalid context}} \def\deftypevrx #1 {\errmessage{@deftypevrx in invalid context}} % Now define @deftp % Args are printed in bold, a slight difference from @defvar. \def\deftpargs #1{\bf \defvarargs{#1}} % @deftp Class window height width ... \def\deftp{\deftpparsebody\Edeftp\deftpx\deftpheader} \def\deftpheader #1#2#3{\doind {tp}{\code{#2}}% \begingroup\defname {#2}{#1}\deftpargs{#3}\endgroup} % This definition is run if you use @deftpx, etc % anywhere other than immediately after a @deftp, etc. \def\deftpx #1 {\errmessage{@deftpx in invalid context}} \message{macros,} % @macro. % To do this right we need a feature of e-TeX, \scantokens, % which we arrange to emulate with a temporary file in ordinary TeX. \ifx\eTeXversion\undefined \newwrite\macscribble \def\scanmacro#1{% \begingroup \newlinechar`\^^M \immediate\openout\macscribble=\jobname.tmp \immediate\write\macscribble{#1}% \immediate\closeout\macscribble \let\xeatspaces\eatspaces \input \jobname.tmp \endgroup } \else \def\scanmacro#1{% \begingroup \newlinechar`\^^M \let\xeatspaces\eatspaces\scantokens{#1}\endgroup} \fi \newcount\paramno % Count of parameters \newtoks\macname % Macro name \newif\ifrecursive % Is it recursive? % Utility routines. % Thisdoes \let #1 = #2, except with \csnames. \def\cslet#1#2{% \expandafter\expandafter \expandafter\let \expandafter\expandafter \csname#1\endcsname \csname#2\endcsname} % Trim leading and trailing spaces off a string. % Concepts from aro-bend problem 15 (see CTAN). {\catcode`\@=11 \gdef\eatspaces #1{\expandafter\trim@\expandafter{#1 }} \gdef\trim@ #1{\trim@@ @#1 @ #1 @ @@} \gdef\trim@@ #1@ #2@ #3@@{\trim@@@\empty #2 @} \def\unbrace#1{#1} \unbrace{\gdef\trim@@@ #1 } #2@{#1} } % Trim a single trailing ^^M off a string. {\catcode`\^^M=12\catcode`\Q=3% \gdef\eatcr #1{\eatcra #1Q^^MQ}% \gdef\eatcra#1^^MQ{\eatcrb#1Q}% \gdef\eatcrb#1Q#2Q{#1}% } % Macro bodies are absorbed as an argument in a context where % all characters are catcode 10, 11 or 12, except \ which is active % (as in normal texinfo). It is necessary to change the definition of \. % It's necessary to have hard CRs when the macro is executed. This is % done by making ^^M (\endlinechar) catcode 12 when reading the macro % body, and then making it the \newlinechar in \scanmacro. \def\macrobodyctxt{% \catcode`\~=12 \catcode`\^=12 \catcode`\_=12 \catcode`\|=12 \catcode`\<=12 \catcode`\>=12 \catcode`\+=12 \catcode`\{=12 \catcode`\}=12 \catcode`\@=12 \catcode`\^^M=12 \usembodybackslash} \def\macroargctxt{% \catcode`\~=12 \catcode`\^=12 \catcode`\_=12 \catcode`\|=12 \catcode`\<=12 \catcode`\>=12 \catcode`\+=12 \catcode`\@=12 \catcode`\\=12} % \mbodybackslash is the definition of \ in @macro bodies. % It maps \foo\ => \csname macarg.foo\endcsname => #N % where N is the macro parameter number. % We define \csname macarg.\endcsname to be \realbackslash, so % \\ in macro replacement text gets you a backslash. {\catcode`@=0 @catcode`@\=@active @gdef@usembodybackslash{@let\=@mbodybackslash} @gdef@mbodybackslash#1\{@csname macarg.#1@endcsname} } \expandafter\def\csname macarg.\endcsname{\realbackslash} \def\macro{\recursivefalse\parsearg\macroxxx} \def\rmacro{\recursivetrue\parsearg\macroxxx} \def\macroxxx#1{% \getargs{#1}% now \macname is the macname and \argl the arglist \ifx\argl\empty % no arguments \paramno=0% \else \expandafter\parsemargdef \argl;% \fi \expandafter\ifx \csname macsave.\the\macname\endcsname \relax \cslet{macsave.\the\macname}{\the\macname}% \else \message{Warning: redefining \the\macname}% \fi \begingroup \macrobodyctxt \ifrecursive \expandafter\parsermacbody \else \expandafter\parsemacbody \fi} \def\unmacro{\parsearg\unmacroxxx} \def\unmacroxxx#1{% \expandafter\ifx \csname macsave.\the\macname\endcsname \relax \errmessage{Macro \the\macname\ not defined.}% \else \cslet{#1}{macsave.#1}% \expandafter\let \csname macsave.\the\macname\endcsname \undefined \fi } % This makes use of the obscure feature that if the last token of a % is #, then the preceding argument is delimited by % an opening brace, and that opening brace is not consumed. \def\getargs#1{\getargsxxx#1{}} \def\getargsxxx#1#{\getmacname #1 \relax\getmacargs} \def\getmacname #1 #2\relax{\macname={#1}} \def\getmacargs#1{\def\argl{#1}} % Parse the optional {params} list. Set up \paramno and \paramlist % so \defmacro knows what to do. Define \macarg.blah for each blah % in the params list, to be ##N where N is the position in that list. % That gets used by \mbodybackslash (above). % We need to get `macro parameter char #' into several definitions. % The technique used is stolen from LaTeX: let \hash be something % unexpandable, insert that wherever you need a #, and then redefine % it to # just before using the token list produced. % % The same technique is used to protect \eatspaces till just before % the macro is used. \def\parsemargdef#1;{\paramno=0\def\paramlist{}% \let\hash\relax\let\xeatspaces\relax\parsemargdefxxx#1,;,} \def\parsemargdefxxx#1,{% \if#1;\let\next=\relax \else \let\next=\parsemargdefxxx \advance\paramno by 1% \expandafter\edef\csname macarg.\eatspaces{#1}\endcsname {\xeatspaces{\hash\the\paramno}}% \edef\paramlist{\paramlist\hash\the\paramno,}% \fi\next} % These two commands read recursive and nonrecursive macro bodies. % (They're different since rec and nonrec macros end differently.) \long\def\parsemacbody#1@end macro% {\xdef\temp{\eatcr{#1}}\endgroup\defmacro}% \long\def\parsermacbody#1@end rmacro% {\xdef\temp{\eatcr{#1}}\endgroup\defmacro}% % This defines the macro itself. There are six cases: recursive and % nonrecursive macros of zero, one, and many arguments. % Much magic with \expandafter here. % \xdef is used so that macro definitions will survive the file % they're defined in; @include reads the file inside a group. \def\defmacro{% \let\hash=##% convert placeholders to macro parameter chars \ifrecursive \ifcase\paramno % 0 \expandafter\xdef\csname\the\macname\endcsname{% \noexpand\scanmacro{\temp}}% \or % 1 \expandafter\xdef\csname\the\macname\endcsname{% \bgroup\noexpand\macroargctxt \noexpand\braceorline\csname\the\macname xxx\endcsname}% \expandafter\xdef\csname\the\macname xxx\endcsname##1{% \egroup\noexpand\scanmacro{\temp}}% \else % many \expandafter\xdef\csname\the\macname\endcsname{% \bgroup\noexpand\macroargctxt \noexpand\csname\the\macname xx\endcsname} \expandafter\xdef\csname\the\macname xx\endcsname##1{% \csname\the\macname xxx\endcsname ##1,}% \expandafter\expandafter \expandafter\xdef \expandafter\expandafter \csname\the\macname xxx\endcsname \paramlist{\egroup\noexpand\scanmacro{\temp}}% \fi \else \ifcase\paramno % 0 \expandafter\xdef\csname\the\macname\endcsname{% \noexpand\norecurse{\the\macname}% \noexpand\scanmacro{\temp}\egroup}% \or % 1 \expandafter\xdef\csname\the\macname\endcsname{% \bgroup\noexpand\macroargctxt \noexpand\braceorline\csname\the\macname xxx\endcsname}% \expandafter\xdef\csname\the\macname xxx\endcsname##1{% \egroup \noexpand\norecurse{\the\macname}% \noexpand\scanmacro{\temp}\egroup}% \else % many \expandafter\xdef\csname\the\macname\endcsname{% \bgroup\noexpand\macroargctxt \noexpand\csname\the\macname xx\endcsname} \expandafter\xdef\csname\the\macname xx\endcsname##1{% \csname\the\macname xxx\endcsname ##1,}% \expandafter\expandafter \expandafter\xdef \expandafter\expandafter \csname\the\macname xxx\endcsname \paramlist{% \egroup \noexpand\norecurse{\the\macname}% \noexpand\scanmacro{\temp}\egroup}% \fi \fi} \def\norecurse#1{\bgroup\cslet{#1}{macsave.#1}} % \braceorline decides whether the next nonwhitespace character is a % {. If so it reads up to the closing }, if not, it reads the whole % line. Whatever was read is then fed to the next control sequence % as an argument (by \parsebrace or \parsearg) \def\braceorline#1{\let\next=#1\futurelet\nchar\braceorlinexxx} \def\braceorlinexxx{% \ifx\nchar\bgroup\else \expandafter\parsearg \fi \next} \message{cross references,} \newwrite\auxfile \newif\ifhavexrefs % True if xref values are known. \newif\ifwarnedxrefs % True if we warned once that they aren't known. % @inforef is relatively simple. \def\inforef #1{\inforefzzz #1,,,,**} \def\inforefzzz #1,#2,#3,#4**{\putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}}, node \samp{\ignorespaces#1{}}} % @node's job is to define \lastnode. \def\node{\ENVcheck\parsearg\nodezzz} \def\nodezzz#1{\nodexxx [#1,]} \def\nodexxx[#1,#2]{\gdef\lastnode{#1}} \let\nwnode=\node \let\lastnode=\relax % The sectioning commands (@chapter, etc.) call these. \def\donoderef{% \ifx\lastnode\relax\else \expandafter\expandafter\expandafter\setref{\lastnode}% {Ysectionnumberandtype}% \global\let\lastnode=\relax \fi } \def\unnumbnoderef{% \ifx\lastnode\relax\else \expandafter\expandafter\expandafter\setref{\lastnode}{Ynothing}% \global\let\lastnode=\relax \fi } \def\appendixnoderef{% \ifx\lastnode\relax\else \expandafter\expandafter\expandafter\setref{\lastnode}% {Yappendixletterandtype}% \global\let\lastnode=\relax \fi } % @anchor{NAME} -- define xref target at arbitrary point. % \def\anchor#1{\setref{#1}{Ynothing}} % \setref{NAME}{SNT} defines a cross-reference point NAME, namely % NAME-title, NAME-pg, and NAME-SNT. Called from \foonoderef. We have % to set \indexdummies so commands such as @code in a section title % aren't expanded. It would be nicer not to expand the titles in the % first place, but there's so many layers that that is hard to do. % \def\setref#1#2{{% \indexdummies \dosetq{#1-title}{Ytitle}% \dosetq{#1-pg}{Ypagenumber}% \dosetq{#1-snt}{#2} }} % @xref, @pxref, and @ref generate cross-references. For \xrefX, #1 is % the node name, #2 the name of the Info cross-reference, #3 the printed % node name, #4 the name of the Info file, #5 the name of the printed % manual. All but the node name can be omitted. % \def\pxref#1{\putwordsee{} \xrefX[#1,,,,,,,]} \def\xref#1{\putwordSee{} \xrefX[#1,,,,,,,]} \def\ref#1{\xrefX[#1,,,,,,,]} \def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup \def\printedmanual{\ignorespaces #5}% \def\printednodename{\ignorespaces #3}% \setbox1=\hbox{\printedmanual}% \setbox0=\hbox{\printednodename}% \ifdim \wd0 = 0pt % No printed node name was explicitly given. \expandafter\ifx\csname SETxref-automatic-section-title\endcsname\relax % Use the node name inside the square brackets. \def\printednodename{\ignorespaces #1}% \else % Use the actual chapter/section title appear inside % the square brackets. Use the real section title if we have it. \ifdim \wd1 > 0pt % It is in another manual, so we don't have it. \def\printednodename{\ignorespaces #1}% \else \ifhavexrefs % We know the real title if we have the xref values. \def\printednodename{\refx{#1-title}{}}% \else % Otherwise just copy the Info node name. \def\printednodename{\ignorespaces #1}% \fi% \fi \fi \fi % % If we use \unhbox0 and \unhbox1 to print the node names, TeX does not % insert empty discretionaries after hyphens, which means that it will % not find a line break at a hyphen in a node names. Since some manuals % are best written with fairly long node names, containing hyphens, this % is a loss. Therefore, we give the text of the node name again, so it % is as if TeX is seeing it for the first time. \ifdim \wd1 > 0pt \putwordsection{} ``\printednodename'' in \cite{\printedmanual}% \else % _ (for example) has to be the character _ for the purposes of the % control sequence corresponding to the node, but it has to expand % into the usual \leavevmode...\vrule stuff for purposes of % printing. So we \turnoffactive for the \refx-snt, back on for the % printing, back off for the \refx-pg. {\normalturnoffactive % Only output a following space if the -snt ref is nonempty; for % @unnumbered and @anchor, it won't be. \setbox2 = \hbox{\ignorespaces \refx{#1-snt}{}}% \ifdim \wd2 > 0pt \refx{#1-snt}\space\fi }% % [mynode], [\printednodename],\space % page 3 \turnoffactive \putwordpage\tie\refx{#1-pg}{}% \fi \endgroup} % \dosetq is the interface for calls from other macros % Use \normalturnoffactive so that punctuation chars such as underscore % and backslash work in node names. (\turnoffactive doesn't do \.) \def\dosetq#1#2{% {\let\folio=0 \normalturnoffactive \edef\next{\write\auxfile{\internalsetq{#1}{#2}}}% \iflinks \next \fi }% } % \internalsetq {foo}{page} expands into % CHARACTERS 'xrdef {foo}{...expansion of \Ypage...} % When the aux file is read, ' is the escape character \def\internalsetq #1#2{'xrdef {#1}{\csname #2\endcsname}} % Things to be expanded by \internalsetq \def\Ypagenumber{\folio} \def\Ytitle{\thissection} \def\Ynothing{} \def\Ysectionnumberandtype{% \ifnum\secno=0 \putwordChapter\xreftie\the\chapno % \else \ifnum \subsecno=0 \putwordSection\xreftie\the\chapno.\the\secno % \else \ifnum \subsubsecno=0 % \putwordSection\xreftie\the\chapno.\the\secno.\the\subsecno % \else % \putwordSection\xreftie\the\chapno.\the\secno.\the\subsecno.\the\subsubsecno % \fi \fi \fi } \def\Yappendixletterandtype{% \ifnum\secno=0 \putwordAppendix\xreftie'char\the\appendixno{}% \else \ifnum \subsecno=0 \putwordSection\xreftie'char\the\appendixno.\the\secno % \else \ifnum \subsubsecno=0 % \putwordSection\xreftie'char\the\appendixno.\the\secno.\the\subsecno % \else % \putwordSection\xreftie'char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno % \fi \fi \fi } \gdef\xreftie{'tie} % Use TeX 3.0's \inputlineno to get the line number, for better error % messages, but if we're using an old version of TeX, don't do anything. % \ifx\inputlineno\thisisundefined \let\linenumber = \empty % Non-3.0. \else \def\linenumber{\the\inputlineno:\space} \fi % Define \refx{NAME}{SUFFIX} to reference a cross-reference string named NAME. % If its value is nonempty, SUFFIX is output afterward. \def\refx#1#2{% \expandafter\ifx\csname X#1\endcsname\relax % If not defined, say something at least. \angleleft un\-de\-fined\angleright \iflinks \ifhavexrefs \message{\linenumber Undefined cross reference `#1'.}% \else \ifwarnedxrefs\else \global\warnedxrefstrue \message{Cross reference values unknown; you must run TeX again.}% \fi \fi \fi \else % It's defined, so just use it. \csname X#1\endcsname \fi #2% Output the suffix in any case. } % This is the macro invoked by entries in the aux file. % \def\xrdef#1{\begingroup % Reenable \ as an escape while reading the second argument. \catcode`\\ = 0 \afterassignment\endgroup \expandafter\gdef\csname X#1\endcsname } % Read the last existing aux file, if any. No error if none exists. \def\readauxfile{\begingroup \catcode`\^^@=\other \catcode`\^^A=\other \catcode`\^^B=\other \catcode`\^^C=\other \catcode`\^^D=\other \catcode`\^^E=\other \catcode`\^^F=\other \catcode`\^^G=\other \catcode`\^^H=\other \catcode`\^^K=\other \catcode`\^^L=\other \catcode`\^^N=\other \catcode`\^^P=\other \catcode`\^^Q=\other \catcode`\^^R=\other \catcode`\^^S=\other \catcode`\^^T=\other \catcode`\^^U=\other \catcode`\^^V=\other \catcode`\^^W=\other \catcode`\^^X=\other \catcode`\^^Z=\other \catcode`\^^[=\other \catcode`\^^\=\other \catcode`\^^]=\other \catcode`\^^^=\other \catcode`\^^_=\other \catcode`\@=\other \catcode`\^=\other % It was suggested to define this as 7, which would allow ^^e4 etc. % in xref tags, i.e., node names. But since ^^e4 notation isn't % supported in the main text, it doesn't seem desirable. Furthermore, % that is not enough: for node names that actually contain a ^ % character, we would end up writing a line like this: 'xrdef {'hat % b-title}{'hat b} and \xrdef does a \csname...\endcsname on the first % argument, and \hat is not an expandable control sequence. It could % all be worked out, but why? Either we support ^^ or we don't. % % The other change necessary for this was to define \auxhat: % \def\auxhat{\def^{'hat }}% extra space so ok if followed by letter % and then to call \auxhat in \setq. % \catcode`\~=\other \catcode`\[=\other \catcode`\]=\other \catcode`\"=\other \catcode`\_=\other \catcode`\|=\other \catcode`\<=\other \catcode`\>=\other \catcode`\$=\other \catcode`\#=\other \catcode`\&=\other \catcode`+=\other % avoid \+ for paranoia even though we've turned it off % Make the characters 128-255 be printing characters {% \count 1=128 \def\loop{% \catcode\count 1=\other \advance\count 1 by 1 \ifnum \count 1<256 \loop \fi }% }% % The aux file uses ' as the escape (for now). % Turn off \ as an escape so we do not lose on % entries which were dumped with control sequences in their names. % For example, 'xrdef {$\leq $-fun}{page ...} made by @defun ^^ % Reference to such entries still does not work the way one would wish, % but at least they do not bomb out when the aux file is read in. \catcode`\{=1 \catcode`\}=2 \catcode`\%=\other \catcode`\'=0 \catcode`\\=\other % \openin 1 \jobname.aux \ifeof 1 \else \closein 1 \input \jobname.aux \global\havexrefstrue \global\warnedobstrue \fi % Open the new aux file. TeX will close it automatically at exit. \openout\auxfile=\jobname.aux \endgroup} % Footnotes. \newcount \footnoteno % The trailing space in the following definition for supereject is % vital for proper filling; pages come out unaligned when you do a % pagealignmacro call if that space before the closing brace is % removed. (Generally, numeric constants should always be followed by a % space to prevent strange expansion errors.) \def\supereject{\par\penalty -20000\footnoteno =0 } % @footnotestyle is meaningful for info output only. \let\footnotestyle=\comment \let\ptexfootnote=\footnote {\catcode `\@=11 % % Auto-number footnotes. Otherwise like plain. \gdef\footnote{% \global\advance\footnoteno by \@ne \edef\thisfootno{$^{\the\footnoteno}$}% % % In case the footnote comes at the end of a sentence, preserve the % extra spacing after we do the footnote number. \let\@sf\empty \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\/\fi % % Remove inadvertent blank space before typesetting the footnote number. \unskip \thisfootno\@sf \footnotezzz }% % Don't bother with the trickery in plain.tex to not require the % footnote text as a parameter. Our footnotes don't need to be so general. % % Oh yes, they do; otherwise, @ifset and anything else that uses % \parseargline fail inside footnotes because the tokens are fixed when % the footnote is read. --karl, 16nov96. % \long\gdef\footnotezzz{\insert\footins\bgroup % We want to typeset this text as a normal paragraph, even if the % footnote reference occurs in (for example) a display environment. % So reset some parameters. \interlinepenalty\interfootnotelinepenalty \splittopskip\ht\strutbox % top baseline for broken footnotes \splitmaxdepth\dp\strutbox \floatingpenalty\@MM \leftskip\z@skip \rightskip\z@skip \spaceskip\z@skip \xspaceskip\z@skip \parindent\defaultparindent % % Hang the footnote text off the number. \hang \textindent{\thisfootno}% % % Don't crash into the line above the footnote text. Since this % expands into a box, it must come within the paragraph, lest it % provide a place where TeX can split the footnote. \footstrut \futurelet\next\fo@t } \def\fo@t{\ifcat\bgroup\noexpand\next \let\next\f@@t \else\let\next\f@t\fi \next} \def\f@@t{\bgroup\aftergroup\@foot\let\next} \def\f@t#1{#1\@foot} \def\@foot{\strut\egroup} }%end \catcode `\@=11 % Set the baselineskip to #1, and the lineskip and strut size % correspondingly. There is no deep meaning behind these magic numbers % used as factors; they just match (closely enough) what Knuth defined. % \def\lineskipfactor{.08333} \def\strutheightpercent{.70833} \def\strutdepthpercent {.29167} % \def\setleading#1{% \normalbaselineskip = #1\relax \normallineskip = \lineskipfactor\normalbaselineskip \normalbaselines \setbox\strutbox =\hbox{% \vrule width0pt height\strutheightpercent\baselineskip depth \strutdepthpercent \baselineskip }% } % @| inserts a changebar to the left of the current line. It should % surround any changed text. This approach does *not* work if the % change spans more than two lines of output. To handle that, we would % have adopt a much more difficult approach (putting marks into the main % vertical list for the beginning and end of each change). % \def\|{% % \vadjust can only be used in horizontal mode. \leavevmode % % Append this vertical mode material after the current line in the output. \vadjust{% % We want to insert a rule with the height and depth of the current % leading; that is exactly what \strutbox is supposed to record. \vskip-\baselineskip % % \vadjust-items are inserted at the left edge of the type. So % the \llap here moves out into the left-hand margin. \llap{% % % For a thicker or thinner bar, change the `1pt'. \vrule height\baselineskip width1pt % % This is the space between the bar and the text. \hskip 12pt }% }% } % For a final copy, take out the rectangles % that mark overfull boxes (in case you have decided % that the text looks ok even though it passes the margin). % \def\finalout{\overfullrule=0pt} % @image. We use the macros from epsf.tex to support this. % If epsf.tex is not installed and @image is used, we complain. % % Check for and read epsf.tex up front. If we read it only at @image % time, we might be inside a group, and then its definitions would get % undone and the next image would fail. \openin 1 = epsf.tex \ifeof 1 \else \closein 1 % Do not bother showing banner with post-v2.7 epsf.tex (available in % doc/epsf.tex until it shows up on ctan). \def\epsfannounce{\toks0 = }% \input epsf.tex \fi % \newif\ifwarnednoepsf \newhelp\noepsfhelp{epsf.tex must be installed for images to work. It is also included in the Texinfo distribution, or you can get it from ftp://ftp.tug.org/tex/epsf.tex.} % % Only complain once about lack of epsf.tex. \def\image#1{% \ifx\epsfbox\undefined \ifwarnednoepsf \else \errhelp = \noepsfhelp \errmessage{epsf.tex not found, images will be ignored}% \global\warnednoepsftrue \fi \else \imagexxx #1,,,\finish \fi } % % Arguments to @image: % #1 is (mandatory) image filename; we tack on .eps extension. % #2 is (optional) width, #3 is (optional) height. % #4 is just the usual extra ignored arg for parsing this stuff. \def\imagexxx#1,#2,#3,#4\finish{% % \epsfbox itself resets \epsf?size at each figure. \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi \setbox0 = \hbox{\ignorespaces #3}\ifdim\wd0 > 0pt \epsfysize=#3\relax \fi % If the image is by itself, center it. \ifvmode \nobreak\medskip \nobreak \centerline{\epsfbox{#1.eps}}% \bigbreak \else \epsfbox{#1.eps}% \fi } \message{paper sizes,} % And other related parameters. \newdimen\defaultparindent \defaultparindent = 15pt \chapheadingskip = 15pt plus 4pt minus 2pt \secheadingskip = 12pt plus 3pt minus 2pt \subsecheadingskip = 9pt plus 2pt minus 2pt % Prevent underfull vbox error messages. \vbadness = 10000 % Don't be so finicky about underfull hboxes, either. \hbadness = 2000 % Following George Bush, just get rid of widows and orphans. \widowpenalty=10000 \clubpenalty=10000 % Use TeX 3.0's \emergencystretch to help line breaking, but if we're % using an old version of TeX, don't do anything. We want the amount of % stretch added to depend on the line length, hence the dependence on % \hsize. This makes it come to about 9pt for the 8.5x11 format. We % call this whenever the paper size is set. % \def\setemergencystretch{% \ifx\emergencystretch\thisisundefined % Allow us to assign to \emergencystretch anyway. \def\emergencystretch{\dimen0}% \else \emergencystretch = \hsize \divide\emergencystretch by 45 \fi } % Parameters in order: 1) textheight; 2) textwidth; 3) voffset; % 4) hoffset; 5) binding offset; 6) topskip. Then whoever calls us can % set \parskip and call \setleading for \baselineskip. % \def\internalpagesizes#1#2#3#4#5#6{% \voffset = #3\relax \topskip = #6\relax \splittopskip = \topskip % \vsize = #1\relax \advance\vsize by \topskip \outervsize = \vsize \advance\outervsize by 2\topandbottommargin \pageheight = \vsize % \hsize = #2\relax \outerhsize = \hsize \advance\outerhsize by 0.5in \pagewidth = \hsize % \normaloffset = #4\relax \bindingoffset = #5\relax % \parindent = \defaultparindent \setemergencystretch } % @letterpaper (the default). \def\letterpaper{{\globaldefs = 1 \parskip = 3pt plus 2pt minus 1pt \setleading{13.2pt}% % % If page is nothing but text, make it come out even. \internalpagesizes{46\baselineskip}{6in}{\voffset}{.25in}{\bindingoffset}{36pt}% }} % Use @smallbook to reset parameters for 7x9.5 (or so) format. \def\smallbook{{\globaldefs = 1 \parskip = 2pt plus 1pt \setleading{12pt}% % \internalpagesizes{7.5in}{5.in}{\voffset}{.25in}{\bindingoffset}{16pt}% % \lispnarrowing = 0.3in \tolerance = 700 \hfuzz = 1pt \contentsrightmargin = 0pt \deftypemargin = 0pt \defbodyindent = .5cm % \let\smalldisplay = \smalldisplayx \let\smallexample = \smalllispx \let\smallformat = \smallformatx \let\smalllisp = \smalllispx }} % Use @afourpaper to print on European A4 paper. \def\afourpaper{{\globaldefs = 1 \setleading{12pt}% \parskip = 3pt plus 2pt minus 1pt % \internalpagesizes{53\baselineskip}{160mm}{\voffset}{4mm}{\bindingoffset}{44pt}% % \tolerance = 700 \hfuzz = 1pt }} % A specific text layout, 24x15cm overall, intended for A4 paper. Top margin % 29mm, hence bottom margin 28mm, nominal side margin 3cm. \def\afourlatex{{\globaldefs = 1 \setleading{13.6pt}% % \afourpaper \internalpagesizes{237mm}{150mm}{3.6mm}{3.6mm}{3mm}{7mm}% % \globaldefs = 0 }} % Use @afourwide to print on European A4 paper in wide format. \def\afourwide{% \afourpaper \internalpagesizes{9.5in}{6.5in}{\hoffset}{\normaloffset}{\bindingoffset}{7mm}% % \globaldefs = 0 } % @pagesizes TEXTHEIGHT[,TEXTWIDTH] % Perhaps we should allow setting the margins, \topskip, \parskip, % and/or leading, also. Or perhaps we should compute them somehow. % \def\pagesizes{\parsearg\pagesizesxxx} \def\pagesizesxxx#1{\pagesizesyyy #1,,\finish} \def\pagesizesyyy#1,#2,#3\finish{{% \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \hsize=#2\relax \fi \globaldefs = 1 % \parskip = 3pt plus 2pt minus 1pt \setleading{13.2pt}% % \internalpagesizes{#1}{\hsize}{\voffset}{\normaloffset}{\bindingoffset}{44pt}% }} % Set default to letter. % \letterpaper \message{and turning on texinfo input format.} % Define macros to output various characters with catcode for normal text. \catcode`\"=\other \catcode`\~=\other \catcode`\^=\other \catcode`\_=\other \catcode`\|=\other \catcode`\<=\other \catcode`\>=\other \catcode`\+=\other \def\normaldoublequote{"} \def\normaltilde{~} \def\normalcaret{^} \def\normalunderscore{_} \def\normalverticalbar{|} \def\normalless{<} \def\normalgreater{>} \def\normalplus{+} % This macro is used to make a character print one way in ttfont % where it can probably just be output, and another way in other fonts, % where something hairier probably needs to be done. % % #1 is what to print if we are indeed using \tt; #2 is what to print % otherwise. Since all the Computer Modern typewriter fonts have zero % interword stretch (and shrink), and it is reasonable to expect all % typewriter fonts to have this, we can check that font parameter. % \def\ifusingtt#1#2{\ifdim \fontdimen3\the\font=0pt #1\else #2\fi} % Turn off all special characters except @ % (and those which the user can use as if they were ordinary). % Most of these we simply print from the \tt font, but for some, we can % use math or other variants that look better in normal text. \catcode`\"=\active \def\activedoublequote{{\tt\char34}} \let"=\activedoublequote \catcode`\~=\active \def~{{\tt\char126}} \chardef\hat=`\^ \catcode`\^=\active \def^{{\tt \hat}} \catcode`\_=\active \def_{\ifusingtt\normalunderscore\_} % Subroutine for the previous macro. \def\_{\leavevmode \kern.06em \vbox{\hrule width.3em height.1ex}} \catcode`\|=\active \def|{{\tt\char124}} \chardef \less=`\< \catcode`\<=\active \def<{{\tt \less}} \chardef \gtr=`\> \catcode`\>=\active \def>{{\tt \gtr}} \catcode`\+=\active \def+{{\tt \char 43}} %\catcode 27=\active %\def^^[{$\diamondsuit$} % Set up an active definition for =, but don't enable it most of the time. {\catcode`\==\active \global\def={{\tt \char 61}}} \catcode`+=\active \catcode`\_=\active % If a .fmt file is being used, characters that might appear in a file % name cannot be active until we have parsed the command line. % So turn them off again, and have \everyjob (or @setfilename) turn them on. % \otherifyactive is called near the end of this file. \def\otherifyactive{\catcode`+=\other \catcode`\_=\other} \catcode`\@=0 % \rawbackslashxx output one backslash character in current font \global\chardef\rawbackslashxx=`\\ %{\catcode`\\=\other %@gdef@rawbackslashxx{\}} % \rawbackslash redefines \ as input to do \rawbackslashxx. {\catcode`\\=\active @gdef@rawbackslash{@let\=@rawbackslashxx }} % \normalbackslash outputs one backslash in fixed width font. \def\normalbackslash{{\tt\rawbackslashxx}} % Say @foo, not \foo, in error messages. \escapechar=`\@ % \catcode 17=0 % Define control-q \catcode`\\=\active % Used sometimes to turn off (effectively) the active characters % even after parsing them. @def@turnoffactive{@let"=@normaldoublequote @let\=@realbackslash @let~=@normaltilde @let^=@normalcaret @let_=@normalunderscore @let|=@normalverticalbar @let<=@normalless @let>=@normalgreater @let+=@normalplus} @def@normalturnoffactive{@let"=@normaldoublequote @let\=@normalbackslash @let~=@normaltilde @let^=@normalcaret @let_=@normalunderscore @let|=@normalverticalbar @let<=@normalless @let>=@normalgreater @let+=@normalplus} % Make _ and + \other characters, temporarily. % This is canceled by @fixbackslash. @otherifyactive % If a .fmt file is being used, we don't want the `\input texinfo' to show up. % That is what \eatinput is for; after that, the `\' should revert to printing % a backslash. % @gdef@eatinput input texinfo{@fixbackslash} @global@let\ = @eatinput % On the other hand, perhaps the file did not have a `\input texinfo'. Then % the first `\{ in the file would cause an error. This macro tries to fix % that, assuming it is called before the first `\' could plausibly occur. % Also back turn on active characters that might appear in the input % file name, in case not using a pre-dumped format. % @gdef@fixbackslash{@ifx\@eatinput @let\ = @normalbackslash @fi @catcode`+=@active @catcode`@_=@active} % These look ok in all fonts, so just make them not special. The @rm below % makes sure that the current font starts out as the newly loaded cmr10 @catcode`@$=@other @catcode`@%=@other @catcode`@&=@other @catcode`@#=@other @textfonts @rm @c Local variables: @c eval: (add-hook 'write-file-hooks 'time-stamp) @c page-delimiter: "^\\\\message" @c time-stamp-start: "def\\\\texinfoversion{" @c time-stamp-format: "%:y-%02m-%02d" @c time-stamp-end: "}" @c End: webmagick-2.02.orig/doc/webmagick.texinfo0100744000175000017500000026776007413175362020301 0ustar arafunearafune\input texinfo @c -*-texinfo-*- @c %**start of header @setfilename webmagick.info @settitle WebMagick Image Web Generator @c Define a new index for options. @defcodeindex op @c Define a new index for command-line arguments @defcodeindex sw @c Indicate ready for use (no ugly markings) @finalout @c %**end of header @c Before release, run C-u C-c C-u C-a (texinfo-all-menus-update with a @c prefix arg). This updates the node pointers, which texinfmt.el needs. @dircategory WebMagick Image Web Generator @direntry * WebMagick: (webmagick.info). WebMagick Image Web Generator @end direntry @ifinfo This file documents WebMagick, a package which supports making image collections available on the Web. It recurses through directory trees, building HTML pages, imagemap files, and client-side/server-side maps to allow the user to navigate through collections of thumbnail images (somewhat similar to @code{xv}'s Visual Schnauzer) and select the image to view with a mouse click. This work may be used for any purpose, public or private, provided that this work or derivations thereof are attributed to its original authors. Copyright @copyright{} 1997-2001 Bob Friesenhahn (bfriesen@@simple.dallas.tx.us) @end ifinfo @c Start chapers on new pages @setchapternewpage on @titlepage @c use the new format for titles @title WebMagick @subtitle Image Web Generator @subtitle December 2001 (Version 2.02) @author by Bob Friesenhahn @author now maintained by Chris Lindell @c The following two commands start the copyright page. @page @vskip 0pt plus 1filll Copyright @copyright{} 1997-2001 Bob Friesenhahn (bfriesen@@simple.dallas.tx.us) @sp 2 This work may be used for any purpose, public or private, provided that this work or derivations thereof are attributed to its original authors. @end titlepage @ifinfo @node Top, Introduction, (dir), (dir) @comment node-name, next, previous, up @top WebMagick WebMagick is a package which supports making image collections available on the Web. It recurses through directory trees, building HTML pages, imagemap files, and client-side/server-side maps to allow the user to navigate through collections of thumbnail images and select the image to view with a mouse click. @end ifinfo @menu * Introduction:: WebMagick basics * General:: Options that control basic processing * Directory Paths:: Directory path options * File Names:: File name options * Server-Side Imagemaps:: Server-side imagemap options * Thumbnail Caching:: Thumbnail caching options * Montage Options:: Montage (thumbnail page) options * HTML Options:: HTML generation options * String Customization:: Customizing (localizing) displayed strings * Authors:: WebMagick maintainer and friends * Obtaining WebMagick:: Where to obtain WebMagick and the packages it requires * Installation:: Installing WebMagick * Option Index:: Option variable index * Argument Index:: Command-line argument index * Concept Index:: Concept index --- The Detailed Node Listing --- General * Display Help:: List options * Source Directory:: Specify source directory * Verbose Output:: Display progress verbosely * Debug Output:: Display debug messages * Sub-Directory Processing:: Control sub-directory processing * Forcing Output:: Override WebMagick's work avoidance algorithms Sub-Directory Processing * Recursion:: Control recursion into sub-directories * Prune Directory:: Skip sub-directory and its children * Ignore Directory:: Skip generating output for directory * Ignore FrontPage:: Ignore FrontPage directories Forcing Output To Be Generated * Force Cache:: Force cached thumbnails to be updated * Force HTML:: Force generated HTML to be updated * Force Montage:: Force thumbnail montages to be updated Paths * URL Computation:: Define how URLs are generated URL Computation * Server Root Path:: Location of server's root * Root Prefix:: URL prefix to server's root * Icon Location:: Specify offset to WebMagick icons File Names * Icon File Names:: Specify icon and background file names * Index File Base Name:: Specify base name for visible HTML index * README File Name:: Specify filename for directory README * Page Index File Name:: Specify base name for per-page HTML * Directory Title Xref:: Specify filename that contains directory titles Server-Side Imagemaps * Imagemap Program:: Specify URL to server-side imagemap program * Imagemap Type:: Specify server-side imagemap type Thumbnail Caching * Caching:: Enable thumbnail caching * Cache Directory:: Specify thumbnail cache directory name * Cache Thumbnail Format:: Specify thumbnail image format * Cache Thumnail Geometry:: Specify thumbnail image geometry * Cache Minimum Image Size:: Specify cross-over point before trying JPEG Montage Options * Montage Anatomy:: The Anatomy of a montage * Montage Geometry:: Specify montage geometry * Montage Format:: Specify montage format * Montage Colors:: Specify montage colors * Thumbnail Imaging:: Specify montage thumbnail imaging options * Thumbnail Label Options:: Specify montage thumbnail label options * Thumbnail Hooks:: Specify pre/postprocessing options for thumbnails Montage Geometry * Columns:: Specify montage columns * Rows:: Specify montage rows Montage Image Format * GIF/JPEG Transition Point:: Specify GIF/JPEG size transition point * Force GIF Format:: Always use GIF format for montages Montage Colors * Thumb Foreground Color:: Specify thumbnail foreground color * Thumb Background Color:: Specify thumbnail background color * Thumb Trans Color:: Specify thumbnail transparent color * Thumb Frame Color:: Specify thumbnail frame color * Border Color:: Specify thumbnail border color * Netscape Color Cube:: Quantize montage to Netscape 216 color cube Thumbnail Imaging * Thumb Frame:: Enable decorative frames around thumbnails * Thumb Shadows:: Enable decorative shadows under thumbnails * Border Width:: Specify thumbnail border width * Thumb Background Texture:: Specify montage background image * Thumb Geometry:: Specify thumbnail geometry * Thumb Gravity:: Specify thumbnail placement * Composition Algorithm:: Specify thumbnail imaging algorithm * Zoom Filter:: Specify zoom filter to use for reductions Thumbnail Label Options * Thumbnail Title Xref:: Specify thumbnail titles * Thumb Label Format:: Specify thumbnail label format * Thumb Label Width:: Specify thumbnail label truncation width * Thumb Label Font:: Specify thumbnail label font Thumbnail Processing Hooks * Read Fail Hook:: Specify image read-failure hook * Thumb Post Hook:: Specify thumbnail pre-processing hook * Thumb Pre Hook:: Specify thumbnail post-processing hook HTML Options * HTML Content:: Specify HTML page contents * Text Colors:: Specify HTML text colors * HTML Link Colors:: Specify HTML link colors * Frame Options:: Specify frame options * Meta Tags:: Specify HTML meta tags HTML Content * Allow Configuration:: Allow user configuration * JavaScript Mode:: Enable JavaScript output * Table Mode:: Use tables instead of imagemaps * README File Treatment:: Control README file visibility * Address Info:: Specify an address field * Anonymize:: Protect the author's reputation * Page Header:: Specify HTML page header * Page Title:: Specify HTML page title * Stylesheet:: Specify a URL to a Cascading Style Sheet * Dir Page Fmt (No Frames):: Directory page template (unframed) * Dir Page Fmt (Framed):: Directory page template (framed) * Per-Image HTML:: Per-Image HTML * Enable Per-image HTML:: * Per-image HTML extension:: * Per-image HTML Nav Buttons:: * Per-image Picture Title:: * Per-image Picture Title Start HTML:: * Per-image Picture Title End HTML:: * Default Frame Target:: * Extra Top HTML:: * Extra Bottom HTML:: Text Colors * Thumb Background:: Specify thumbnail page background color * Thumb Foreground:: Specify thumbnail page foreground color * Dir Foreground Color:: Specify directory page foreground color * Dir Background Color:: Specify directory page background color HTML Link Colors * Thumb Active Link Color:: Specify thumbnail page active link color * Thumb Un-visited Color:: Specify thumbnail page un-visited link color * Thumb Visited Color:: Specify thumbnail page visited link color * Dir Active Color:: Specify directory page active link color * Dir Un-Visited Color:: Specify directory page un-visited link color * Dir Visited Color:: Specify directory page visited link color Frame Options * Frames:: Enable frames * Frame Borders:: Enable frame borders * Frame Border Thickness:: Specify frame border thickness * Frame Margin Height:: Specify frame margin height * Frame Margin Width:: Specify frame margin width * Frame Style:: Specify frame style (layout) HTML Meta Tags * Meta Author:: Specify AUTHOR meta-tag * Meta Charset:: Specify CHARSET meta-tag * Meta Classification:: Specify CLASSIFICATION meta-tag * Meta Description:: Specify DESCRIPTION meta-tag * Meta Expires:: Specify EXPIRES meta-tag * Meta Key-Words:: Specify KEYWORDS meta-tag Installing WebMagick * Basic Installation:: * Installation Names:: @end menu @node Introduction, General, Top, Top @comment node-name, next, previous, up @chapter Introduction WebMagick creates HTML index files and imagemaps corresponding to a directory of image files. WebMagick is ideal for making large image collections available on the net or for just using your Web browser for browsing images. Configuration options are derived from either the command line (options prefixed with '-', '--', or '+'), configuration file ($opt_ options), or internal defaults ($opt_ options). Some arguments (like X11 font specifications) seem to confuse PERL's getopt function. When this happens, try using the syntax @code{--option=arg} to avoid any confusion caused by a space. The default configuration file name is @file{.webmagickrc}. Configuration files are written in PERL syntax and are sourced via PERL's eval statement. When WebMagick is executed, it first reads files listed in the @@global_option_files array (@file{/etc/webmagickrc} and @file{$HOME/.webmagickrc} by default). When a directory is processed, WebMagick will process any @file{.webmagickrc} files found in the path from the server's root directory (specified by @code{$opt_rootpath} (@pxref{Server Root Path})) to the directory being processed. All configuration options are additive. @sp 1 @noindent Evaluation order (inverse of precedence) is as follows : @cindex .webmagickrc evaluation order @enumerate @item Files listed in @@global_option_files (default @file{/etc/webmagickrc} and @file{$HOME/.webmagickrc}) @item Command line options @item Per directory .webmagickrc files. Webmagickrc files are evaluated in path order from server root to current directory. This allows sub-directories to "inherit" the configuration of parent directories. @end enumerate @noindent Each directory is processed with items 1 & 2 already complete. @sp 1 In general, WebMagick's defaults produce nice output. However, the options @code{$opt_prefixpath} (@pxref{Root Prefix}), @code{$opt_rootpath} (@pxref{Server Root Path}), @code{$opt_iconpath} (@pxref{Icon Location}), @code{$opt_htimage} (@pxref{Imagemap Program}), and @code{$opt_maptype} (@pxref{Imagemap Type}) must be configured on a per-site basis so please read the documentation on these options and perform the required configuration before executing the program. A key configuration/installation issue is that WebMagick depends on the image files being on the same filesystem as the icons. The reason for this limitation is that this allows WebMagick to determine the mapping between the physical disk and the server's URLs. If someone knows a better algorithm than this one, please let the author know. By default the output files of WebMagick for the first page are as follows (second page replace '1' with '2', etc.): @table @code @item index.html Main (default server index) HTML index file. @item indexjs.html Javascript master index file (name currently hard-coded). @item .cache Thumbnail cache directory @item .indexdir.html HTML page that displays directory frame @item .indexjs.html HTML file to load JavaScript source into browser. @item .index.pl WebMagick status file (in PERL format). Re-generated per run. May be used by other programs to produce additional HTML output. @item .index.js JavaScript variables file (similar to status file but in JavaScript). @item .index1.html HTML page that displays thumbnail frame @item .index1.gif Montaged images (thumbnails) in GIF format @item .index1.jpg Montaged images (thumbnails) in JPEG format @item .index1.map Server-side imagemap (clickable map) file @end table @node General, Directory Paths, Introduction, Top @chapter General @menu * Display Help:: List options * Source Directory:: Specify source directory * Verbose Output:: Display progress verbosely * Debug Output:: Display debug messages * Sub-Directory Processing:: Control sub-directory processing * Forcing Output:: Override WebMagick's work avoidance algorithms @end menu @node Display Help, Source Directory, General, General @section Display Help @cindex help @opindex $opt_help @swindex --help @table @code @item Variable: @code{$opt_help=1} @item Argument: @code{--help} @end table Display usage message. @node Source Directory, Verbose Output, Display Help, General @section Specify Source Directory @cindex directory, specification @opindex $opt_srcdir @swindex --srcdir @table @code @item Variable: $opt_srcdir=path @item Argument: --srcdir path @end table Image directory to process or start recursion at (default current directory). Specify this option (usually on the command line) if the directory you want to process is not the current directory. This simply causes WebMagick to change directories before starting processing. @node Verbose Output, Debug Output, Source Directory, General @section Enable Verbose Output @cindex verbose @opindex $opt_verbose @swindex --verbose @table @code @item Variable: $opt_verbose=1 @item Argument: --verbose @end table Normally WebMagick prints only the directory names for directories it processes. Selecting the verbose option displays the number of images and sub-directories in the directory as well as the number of pages to be generated, and the current page number. It will also show the current image index WebMagick is currently creating as a progress report. @node Debug Output, Sub-Directory Processing, Verbose Output, General @section Enable Debug Output @cindex debugging @opindex $opt_debug @swindex --debug @table @code @item Variable: $opt_debug=1 @item Argument: --debug @end table Print debugging messages. @node Sub-Directory Processing, Forcing Output, Debug Output, General @section Sub-Directory Processing @menu * Recursion:: Control recursion into sub-directories * Prune Directory:: Skip sub-directory and its children * Ignore Directory:: Skip generating output for directory * Ignore FrontPage:: Ignore FrontPage directories @end menu @node Recursion, Prune Directory, Sub-Directory Processing, Sub-Directory Processing @subsection Recurse Sub-Directories @cindex recurse @opindex $opt_recurse @swindex --recurse @table @code @item Variable: $opt_recurse=1 @item Argument: --recurse @end table Recurse directory tree (default off). The default is to only process the current directory, generating appropriate links for sub-directories and the parent directory. Selecting this option causes WebMagick to recurse through sub-directories as well. @node Prune Directory, Ignore Directory, Recursion, Sub-Directory Processing @subsection Prune Directory @cindex directory, prune @opindex $opt_prune @table @code @item Variable: $opt_prune=1 @end table If @code{$opt_prune} is set in a directory's @file{.webmagickrc} file (default off), then sub-directories below that directory will not be processed by WebMagick when operating in the recursive mode. @xref{Ignore Directory,$opt_ignore}, for details on how to skip a directory rather than prune it. @node Ignore Directory,Ignore FrontPage, Prune Directory, Sub-Directory Processing @subsection Ignore Directory @cindex directory, skip @table @code @item Variable: $opt_ignore=1 @end table If @code{$opt_ignore} is set in a directory's @file{.webmagickrc} file (default off), then that directory will not be processed (but will still be linked to). If recursion is enabled, then recursion will continue into any sub-directories. This provides support for subdirectories with HTML files which are generated by other means. also @code{$opt_indexname}. @node Ignore FrontPage, , Ignore Directory, Sub-Directory Processing @subsection Ignore FrontPage @cindex directory, skip @opindex $opt_ignorefp @swindex --ignorefp @table @code @item Variable: $opt_ignorefp=1 @item Argument: --ignorefp @end table If @code{$opt_ignorefp} is used, sub-directories with names like _vti_bin will be ignored. MS FrontPage creates these directories which begin with an underscore followed by a lowercased letter (_[a-z]). @node Forcing Output, , Sub-Directory Processing, General @section Forcing Output To Be Generated @cindex force @cindex override WebMagick uses algorithms similar in concept to those used by @code{make} to try to only do required processing. Occasionally due to modification of a parameter that WebMagick doesn't track or due to external modification of file modification times, WebMagick will skip doing an update that it should have done. In these cases, options are provided to force WebMagick to perform a task. @menu * Force Cache:: Force cached thumbnails to be updated * Force HTML:: Force generated HTML to be updated * Force Montage:: Force thumbnail montages to be updated @end menu @node Force Cache, Force HTML, Forcing Output, Forcing Output @subsection Force Generation Of Thumbnail Cache @cindex cache, force generation of @opindex $opt_forcecache @swindex --forcecache @table @code @item Variable: $opt_forcecache=1 @item Argument: --forcecache @end table Force cache files to be generated (default off). Without this option, WebMagick will only re-generate cache files if the source file is newer. In order for this option to take effect, a montage must be generated and @code{$opt_cache} must be set to a non-zero value. The --forcemontage option be used to force montages. @node Force HTML, Force Montage, Force Cache, Forcing Output @subsection Force Generation Of HTML Files @cindex HTML, force generation of @opindex $opt_forcehtml @swindex --forcehtml @table @code @item Variable: $opt_forcehtml=1 @item Argument: --forcehtml @end table Force HTML files to be generated (default off). Without this option, WebMagick will only re-generate HTML files as required. @node Force Montage, , Force HTML, Forcing Output @subsection Force Generation Of Montage @cindex montage, force generation of @opindex $opt_forcemontage @swindex --forcemontage @table @code @item Variable: $opt_forcemontage=1 @item Argument: --forcemontage @end table Force montage (default false). Without this option, WebMagick will only re-generate montages as required. @node Directory Paths, File Names, General, Top @chapter Paths @menu * URL Computation:: Define how URLs are generated @end menu @node URL Computation, , Directory Paths, Directory Paths @section URL Computation @menu * Server Root Path:: Location of server's root * Root Prefix:: URL prefix to server's root * Icon Location:: Specify offset to WebMagick icons @end menu @node Server Root Path, Root Prefix, URL Computation, URL Computation @subsection Specify Server Root Path @cindex URL, root path @opindex $opt_rootpath @swindex --rootpath @table @code @item Variable: $opt_rootpath=path @item Argument: --rootpath path @end table Absolute path to server root directory (NCSA/Apache DocumentRoot) or the users Home page directory. This must be an absolute path (starting with @file{/}) to the top of the WWW directory tree WebMagick will be processing in. If this value is specified incorrectly, WebMagick will generate incorrect URLs. @node Root Prefix, Icon Location, Server Root Path, URL Computation @subsection Specifying Root Prefix @cindex URL, prefix @cindex home directory @opindex $opt_prefixpath @swindex --prefixpath @table @code @item Variable: $opt_prefixpath=path @item Argument: --prefixpath path @end table The prefix to prepend to all URLs to specify the WWW location of @code{$opt_rootpath} (@pxref{Server Root Path}). For directories under the WWW server's root directory (@file{/}) this is a empty string (""). For a user's personal pages this is the URL path to their home pages (usually @file{/~username} equating to @file{~/public_html}, but may be configured differently on your server). If a relative URL can be computed then this option is not actually used. It however must be used if the WebMagick icon images are not in the same logical WWW directory tree as the directories WebMagick is processing. (See the next option). @node Icon Location, , Root Prefix, URL Computation @subsection Specifying WebMagick Icon Location @cindex icon, location @opindex $opt_iconpath @swindex --iconpath @table @code @item Variable: $opt_iconpath=path @item Argument: --iconpath path @end table This is the relative path from the top of the WWW directory tree specified in @code{$opt_rootpath} (@pxref{Server Root Path}). If this value is specified incorrectly then WebMagick will generate incorrect URLs for its icons. @node File Names, Server-Side Imagemaps, Directory Paths, Top @chapter File Names @menu * Icon File Names:: Specify icon and background file names * Index File Base Name:: Specify base name for visible HTML index * README File Name:: Specify filename for directory README * Page Index File Name:: Specify base name for per-page HTML * Directory Title Xref:: Specify filename that contains directory titles @end menu @node Icon File Names, Index File Base Name, File Names, File Names @section Specifying Icon File Names @cindex icons, hash table @opindex %opt_icons @table @code @item Variable: %opt_icons=( 'id', 'filename', .... ; @end table This is a hash table of all the images used directly by WebMagick and located in the @code{$opt_iconpath} (@pxref{Icon Location}) directory. The elments are pairs of icon @file{id}s and the filename of the image. The @file{id}s currently used internally by @file{WebMagick} are :- @file{background}, @file{dirbackground}, @file{prev}, @file{next}, @file{next_grey}, @file{up}, @file{help}, and @file{ball}. These IDs are used as follows: @table @code @item background @cindex background image, thumbnail frame @cindex thumbnail frame background image thumbnail frame background image @item dirbackground @cindex background image, directory frame @cindex directory frame background image directory frame background image @item prev link to previous page @item next link to next page @item next_gray link to next page (when there isn't one) @item up link to parent directory up @item help link to help Readme File (if it exists) @item ball a decorative ball. If no definition exists (array element is left undefined) then the ball is not displayed in preference to unadorned text. @end table By default the @code{background} and @code{dirbackground} options are undefined which results in no background images being defined. Other images can also be defined in the hash table and WebMagick will automatically process those images along with the images it uses, to generate the icon URL and size infomation. This information can then be used in the various special formating options to add extra, or special purpose links. An alternative way to define entries (particularly useful in directory .webmagickrc files) is to define (or undefine) individual hash table entries. Use syntax similar to @example $opt_icons@{'background'@} = 'background.gif'; @end example to add a background image to the thumbnail page or override an existing definition. Use syntax similar to @example undef $opt_icons@{'background'@}; @end example to undefine an existing definition for the image corresponding to @file{background}. This can be useful if the default is to display a background image but you want to turn off the background image for a particular sub-directory tree. @node Index File Base Name, README File Name, Icon File Names, File Names @section Index File Base Name @cindex file name, master index @opindex $opt_indexname @swindex --indexname @table @code @item Variable: $opt_indexname=filename @item Argument: --indexname filename @end table Base name of the master index files (default server index), usually set to @file{index.html}. This is also the filename WebMagick will look for in sub-directories and parent directory @file{.webmagickrc} files as the document to make links to. EG: If a directory is not processed by WebMagick, by either never running WebMagick on that directory, or the option @code{$opt_ignore} has been set, then setting @code{$opt_indexname} will specify the document WebMagick created index files of OTHER directories should link to. If you do not want WebMagick to ever link to this directory then setting the option, @code{$opt_indexname}, to "NOLINK" will will prevent WebMagick index files in other directories from linking to this directory. If you want WebMagick to entirely ignore a particular directory tree, even during recursion of the surrounding directories, then you can use the following options in its "@file{.webmagickrc}" file: @example @group # # .webmagickrc -- WebMagick is not to process or even link # to this directory tree # $opt_indexname = 'NOLINK'; # Do not link to this directory $opt_ignore = 1; # Do not generate WebMagick image indexes $opt_prune = 1; # Don't recurse into sub-directories @end group @end example @node README File Name, Page Index File Name, Index File Base Name, File Names @section Specifying README File Name @cindex file name, README @opindex $opt_readme @swindex --readme @table @code @item Variable: $opt_readme=filename @item Argument: --readme filename @end table Name of directory information file (default @file{README.html}). If this file exists in the directory, then it will be displayed in preference to the first page of images and a link will appear in the directory frame which links to the image index. Typically the contents of this file describe the images to be viewed. @node Page Index File Name, Directory Title Xref, README File Name, File Names @section Page Index File Name @cindex file name, per-page @opindex $opt_pageindexname @swindex --pageindexname @table @code @item Variable: $opt_pageindexname=string @item Argument: --pageindexname string @end table Base name of page-related index files (default @file{.index}). This name is used as the prefix for all generated files except for the main index file. The default naming creates these as hidden files (UNIX convention). @node Directory Title Xref, , Page Index File Name, File Names @section Specifying Sub-Directory Titles @cindex file name, directory index @opindex $opt_dirindexname @swindex --dirindexname @table @code @item Variable: $opt_dirindexname=filename @item Argument: --dirindexname filename @end table Specify the file name to contain the directory-name to title cross-reference for naming sub-directories (default file name @file{.dirindex}). If this file exists, then @emph{dirtext} will replace @file{dirname} if @file{dirname} is found in the file. This provides the ability to use user-specified text rather than actual sub-directory names. The order specified by this file is used to sort directory names. If an entry for a directory is not in this file, then that directory name is sorted alphbetically with relation to the other directory names. The format of the file is: @example dirname dirtext @end example With @emph{dirname} representing the directory name and @emph{dirtext} representing the replacement link text. It is wise to limit the length of @emph{dirtext} to fit within the limitations of the directory frame. @node Server-Side Imagemaps, Thumbnail Caching, File Names, Top @chapter Server-Side Imagemaps @menu * Imagemap Program:: Specify URL to server-side imagemap program * Imagemap Type:: Specify server-side imagemap type @end menu @node Imagemap Program, Imagemap Type, Server-Side Imagemaps, Server-Side Imagemaps @section Imagemap Program @cindex server, imagemap program @opindex $opt_htimage @swindex --htimage @table @code @item Variable: $opt_htimage=path @item Argument: --htimage path @end table Specify imagemap CGI program URL (set to '' for none). Older servers (e.g. CERN and old NCSA) require an external program to handle server-side imagemaps. These programs are usually supplied with a full URL to the referenced file. Newer servers have server-side imagemap support built-in and can accept URLs relative to the current directory. If you have a modern server, then specify this value as a null string (just hit @key{RETURN} when running the configure script). @node Imagemap Type, , Imagemap Program, Server-Side Imagemaps @section Imagemap Type @cindex server, imagemap type @opindex $opt_maptype @swindex --maptype @table @code @item Variable: $opt_maptype=maptype @item Argument: --maptype maptype @end table Specify server-side map type (set to "ncsa" or "cern"). NCSA and Apache servers require "ncsa". CERN requires "cern". Phttpd can use either format. NCSA format looks similar to: @example @group default .index1.html rect scooby1.gif 440,0 549,128 @end group @end example while CERN format looks similar to: @example @group default .index1.html rect (440,0) (549,128) scooby1.gif @end group @end example @node Thumbnail Caching, Montage Options, Server-Side Imagemaps, Top @chapter Thumbnail Caching @cindex caching, thumbnail @menu * Caching:: Enable thumbnail caching * Cache Directory:: Specify thumbnail cache directory name * Cache Thumbnail Format:: Specify thumbnail image format * Cache Thumnail Geometry:: Specify thumbnail image geometry * Cache Minimum Image Size:: Specify cross-over point before trying JPEG @end menu @node Caching, Cache Directory, Thumbnail Caching, Thumbnail Caching @section Enable Caching @cindex flag, cache @opindex $opt_cache @swindex --cache @table @code @item Variable: $opt_cache @item Argument: --cache @end table Enable thumbnail caching. This is good for a 5X reduction in processing time when a single image is added or removed from a directory since thumbnails are cached in reduced form. As an added benefit, WebMagick can share its cache with John Bradley's @code{xv} image manipulation program (Visual Schnauzer feature) if configuration values are set as follows: @example @group $opt_cacheformat= 'P7'; $opt_cachegeom = 80x60; $opt_cachedir = '.xvpics'; @end group @end example Sharing the cache with @code{xv} is only feasable if all of the images being cached are compatable with @code{xv} (ImageMagick supports many more formats than @code{xv}). A further drawback of sharing the cache with @code{xv} is that @code{xv} is limited to thumbnails with a geometry of 80x60 which may be small for your tastes (I prefer larger). @node Cache Directory, Cache Thumbnail Format, Caching, Thumbnail Caching @section Cache Directory @cindex directory, cache name @cindex cache, directory @opindex $opt_cachedir @swindex --cachedir @table @code @item Variable: $opt_cachedir=dirspec @item Argument: --cachedir dirspec @end table Specify subdirectory name to cache thumbnails in (default @file{.cache}). @node Cache Thumbnail Format, Cache Thumnail Geometry, Cache Directory, Thumbnail Caching @section Cache Thumbnail Format @cindex cache, format @cindex thumbnail, format @opindex $opt_cacheformat @swindex --cacheformat @table @code @item Variable: $opt_cacheformat=imageformat @item Argument: --cacheformat imageformat @end table Specify the format that cached thumbnails are saved in. Can be any format that ImageMagick knows how to read and write. The default is 'JPEG' which works well for photorealistic images. @node Cache Thumnail Geometry, Cache Minimum Image Size, Cache Thumbnail Format, Thumbnail Caching @section Cache Thumbnail Geometry @cindex cache, thumbnail geometry @cindex geometry, cached thumbnail @opindex $opt_cachegeom @swindex --cachegeom @table @code @item Variable: $opt_cachegeom=geometry @item Argument: --cachegeom geometry @end table Specifies the geometry specification for cached thumbnails. The default is to use the value specified by @code{$opt_thumbgeometry} (@pxref{Thumb Geometry}). If a smaller value is used, there will be more unused space around the montaged thumbnails. Use of a larger value than the thubnail geometry is to be avoided because the cached thumbnail will still have to be reduced for the montage, costing both time and thumbnail quality. @node Cache Minimum Image Size, , Cache Thumnail Geometry, Thumbnail Caching @section Cache Minimum Image Size @cindex cache, minimum size @opindex $opt_cachemin @swindex --cachemin @table @code @item Variable: $opt_cachemin=minsize @item Argument: --cachemin minsize @end table Specifies the original Image size (in total pixels) over which caching will be used. For images smaller than this size, WebMagick will use the original image in the Montage and no thumbnail will be cached. The default value is 60,000 which is equivalent to a @c This is an experiment with math output @tex $300\times200$ @end tex @ifinfo 300 x 200 @end ifinfo @ifhtml 300 x 200 @end ifhtml image. Selecting a value for this option is a judgement call based on space vs time. If a small value is selected, the initial run will be slower and more disk space will be consumed by thumbnails. However, subsequent updates should be faster since more thumbnails are already reduced. If a large value is selected, then less disk space will be consumed, the first pass will be faster, and subsequent passes will be slower. @node Montage Options, HTML Options, Thumbnail Caching, Top @chapter Montage Options @cindex montage @menu * Montage Anatomy:: The Anatomy of a montage * Montage Geometry:: Specify montage geometry * Montage Format:: Specify montage format * Montage Colors:: Specify montage colors * Thumbnail Imaging:: Specify montage thumbnail imaging options * Thumbnail Label Options:: Specify montage thumbnail label options * Thumbnail Hooks:: Specify pre/postprocessing options for thumbnails @end menu @node Montage Anatomy, Montage Geometry, Montage Options, Montage Options @section The Anatomy Of A Montage @subsection Montage Layout @cindex montage layout @cindex layout, montage A montage is a single image which is composed of thumbnail images layed out in a grid. The size of the montage image is determined by the size of the individual thumbnails and the number of rows and columns in the grid. The following figure shows a montage consisting of three columns and two rows of thumbnails: @image{fig/montage-sample-framed,,} @subsection The Anatomy Of A Thumbnail @cindex thumbnail anatomy @cindex anatomy, thumbnail @cindex thumbnail, layout @subsubsection Un-Framed Thumbnails Un-framed thumbnails consist of four components: the thumbnail image, the thumbnail border, an optional thumbnail shadow, and an optional thumbnail label area. @image{fig/thumbnail-anatomy-plain,,} @subsubsection Framed Thumbnails Framed thumbnails consist of four components: the thumbnail image, the thumbnail frame, the thumbnail border, an optional thumbnail shadow, and an optional thumbnail label area. @image{fig/thumbnail-anatomy-framed,,} @node Montage Geometry, Montage Format, Montage Anatomy, Montage Options @section Montage Geometry The montage geometry specifies the size in rows and columns of the generated thumbnail grid. Since a single montage is displayed per HTML page, after the montage grid is full, a new page is started. The montage geometry combined with the thumbnail geometry determines the total size of the montage image and therefore the size that the user's web browser must be set to in order to view the entire montage. Setting the rows to a very large value (large enough that rows x columns exceeds the number of images) results in a single HTML page being generated. The user can then use the browser's vertical scroll bar to peruse the thumbnails. @menu * Columns:: Specify montage columns * Rows:: Specify montage rows @end menu @node Columns, Rows, Montage Geometry, Montage Geometry @subsection Columns @cindex columns, montage @cindex montage, columns @opindex $opt_columns @swindex --columns @table @code @item Variable: $opt_columns=number @item Argument: --columns number @end table Specify the montage columns (max). This is the maximum number of thumbnail columns allowed per thumbnail row. @node Rows, , Columns, Montage Geometry @subsection Rows @cindex rows @opindex $opt_rows @swindex --rows @table @code @item Variable: $opt_rows=number @item Argument: --rows number @end table Specify the montage rows (max). This is the maximum number of thumbnail rows allowed per page. @node Montage Format, Montage Colors, Montage Geometry, Montage Options @section Montage Image Format @menu * GIF/JPEG Transition Point:: Specify GIF/JPEG size transition point * Force GIF Format:: Always use GIF format for montages @end menu @node GIF/JPEG Transition Point, Force GIF Format, Montage Format, Montage Format @subsection GIF/JPEG Transition Point @cindex imagemap selection @cindex selection, imagemap @cindex tuning, GIF vs JPEG @opindex $opt_maxgif @swindex --maxgif @table @code @item Variable: $opt_maxgif=number @item Argument: --maxgif number @end table Specify the maximum size of GIF imagemap before trying JPEG (default 30000). This is an optimization which tries to avoid the JPEG conversion step. When indexing true or deep-color images, JPEG usually leads to a smaller montage imagemap file. Even if a JPEG image is generated, the smaller of the two images is selected for use and the larger one is deleted to save disk space. @node Force GIF Format, , GIF/JPEG Transition Point, Montage Format @subsection Force GIF Format @cindex force, GIF @cindex GIF, force @opindex $opt_forcegif @swindex --forcegif @table @code @item Variable: $opt_forcegif=1 @item Argument: --forcegif @end table Force GIF imagemaps to be generated (default off). This avoids the possible generation of JPEG format imagemaps when the GIF file is large (over 30K). The primary reason for using this option is because GIF supports image transparancy while JPEG does not, leading to a possibly more attractive display when using GIF format imagmaps. The drawbacks of forcing GIF format are larger imagemap files (often two or three times the size of JPEG when montaging true or deep-color images) and the limited color depth (256 colors) of the GIF format. @node Montage Colors, Thumbnail Imaging, Montage Format, Montage Options @section Montage Colors @menu * Thumb Foreground Color:: Specify thumbnail foreground color * Thumb Background Color:: Specify thumbnail background color * Thumb Trans Color:: Specify thumbnail transparent color * Thumb Frame Color:: Specify thumbnail frame color * Border Color:: Specify thumbnail border color * Netscape Color Cube:: Quantize montage to Netscape 216 color cube @end menu @node Thumb Foreground Color, Thumb Background Color, Montage Colors, Montage Colors @subsection Thumbnail Foreground Color @cindex color, thumbnail foreground @cindex thumbnail, foreground color @opindex $opt_thumbforeground @swindex --thumbforeground @table @code @item Variable: $opt_thumbforeground=colorspec @item Argument: --thumbforeground colorspec @end table Specify the montage foreground color. This color is used as the color for thumbnail label text. @node Thumb Background Color, Thumb Trans Color, Thumb Foreground Color, Montage Colors @subsection Thumbnail Background Color @cindex color, thumbnail background @cindex thumbnail background, color @opindex $opt_thumbbackground @swindex --thumbbackground @table @code @item Variable: $opt_thumbbackground=colorspec @item Argument: --thumbbackground colorspec @end table Specifies the background color that thumbnails are imaged upon. @node Thumb Trans Color, Thumb Frame Color, Thumb Background Color, Montage Colors @subsection Thumbnail Transparent Color @cindex color, thumbnail transparency @cindex transparent, background @cindex background, transparent color @cindex thumbnail, transparent color @opindex $opt_thumbtransparent @swindex --thumbtransparent @table @code @item Variable: $opt_thumbtransparent=colorspec @item Argument: --thumbtransparent colorspec @end table Specify a montage color to set transparent. Usually should be set the same as the background color @code{$opt_colorback} (@pxref{Thumb Background Color}) of the imagemap page. GIF format imagemaps use the transparent color directly while JPEG format imagemaps may approximate "transparency" by setting the imagemap background color to the same color used as the background for HTML pages. This approximation becomes less useful for clients with shallow colormaps. @node Thumb Frame Color, Border Color, Thumb Trans Color, Montage Colors @subsection Thumbnail Frame Color @cindex matte, color @cindex thumbnail, matte, color @cindex color, color frame @cindex thumbnail, color matte @opindex $opt_thumbframecolor @swindex --thumbframecolor @table @code @item Variable: $opt_thumbframecolor=colorspec @item Argument: --thumbframecolor colorspec @end table Specify the thumbnail frame color (only applicable if frames are enabled). @node Border Color, Netscape Color Cube, Thumb Frame Color, Montage Colors @subsection Thumbnail Frame Border Color @cindex color, thumbnail border @cindex thumbnail border, color @opindex $opt_thumbframebgcolor @swindex --thumbframebgcolor @table @code @item Variable: $opt_thumbframebgcolor=colorspec @item Argument: --thumbframebgcolor colorspec @end table Specifies the background color within the thumbnail frame. Ignored if there is no frame. @node Netscape Color Cube, , Border Color, Montage Colors @subsection Quantize To Netscape Color Cube @cindex Netscape, color map @cindex color map, Netscape @cindex color cube @cindex cube, color @opindex $opt_mapnetscape @swindex --mapnetscape @table @code @item Variable: $opt_mapnetscape @item Argument: --mapnetscape @end table Re-map the montage colors to the Netscape 216-color cube. Netscape maps colors to a fixed 216-color cube on PseudoColor color displays. Using this option allows you to ensure that Netscape doesn't dither or re-map your colors when used with common PseudoColor displays and the images may be smaller. The drawback to using this option is that the color quality will be significantly decreased on True and DirectColor displays or when using browsers that don't use the 216-color cube technique. When using image transparency, make sure that the transparent color is selected from one of the 216 "standard" colors or transparency won't work. @node Thumbnail Imaging, Thumbnail Label Options, Montage Colors, Montage Options @section Thumbnail Imaging @menu * Thumb Frame:: Enable decorative frames around thumbnails * Thumb Shadows:: Enable decorative shadows under thumbnails * Border Width:: Specify thumbnail border width * Thumb Background Texture:: Specify montage background image * Thumb Geometry:: Specify thumbnail geometry * Thumb Gravity:: Specify thumbnail placement * Composition Algorithm:: Specify thumbnail imaging algorithm * Zoom Filter:: Specify zoom filter to use for reductions @end menu @node Thumb Frame, Thumb Shadows, Thumbnail Imaging, Thumbnail Imaging @subsection Enable Thumbnail Frame @cindex frame, thumbnail enable @cindex thumbnail, enable frame @opindex $opt_thumbframe @swindex --thumbframe @table @code @item Variable: $opt_thumbframe=geometry @item Argument: --thumbframe geometry @end table Specify the geometry specification for frame to place around thumbnail. If no frame is desired then the string "false" should be specified. The specified geometry values are in @emph{addition} to the thumbnail geometry. For example, a frame geometry of '8x8' places an 8 pixel frame around the image. @node Thumb Shadows, Border Width, Thumb Frame, Thumbnail Imaging @subsection Enable Thumbnail Shadows @cindex shadow, thumbnail @cindex thumbnail, enable shadows @opindex $opt_thumbshadow @swindex --thumbshadow @table @code @item Variable: $opt_thumbshadow=boolean @item Argument: --thumbshadow boolean @end table Set to string "true" or "false" to control the use of decorative shadows around image thumbnails (or frames if enabled). The default is "false". @node Border Width, Thumb Background Texture, Thumb Shadows, Thumbnail Imaging @subsection Thumbnail Frame Border Width @cindex width, thumbnail border @cindex thumbnail border, width @opindex $opt_thumbborderwidth @table @code @item Variable: $opt_thumbborderwidth=borderwidth @end table Specify the border (in pixels) to place between a thumbnail and its surrounding frame. This option only takes effect if thumbnail frames are enabled and the thumbnail geometry specification doesn't also specify the thumbnail border width. @node Thumb Background Texture, Thumb Geometry, Border Width, Thumbnail Imaging @subsection Thumbnail Background Texture @cindex texture, thumbnail background @cindex background, thumbnail @cindex thumbnail, background texture @opindex $opt_thumbtexture @swindex --thumbtexture @table @code @item Variable: $opt_thumbtexture=texturespec @item Argument: --thumbtexture texturespec @end table Specify a texture to use as montage background. The built-in textures "granite:" and "plasma:" are available. A texture is the same aas a background image. For example: Granite texture: @example $opt_thumbtexture='granite:'; @end example Plasma texture: @example $opt_thumbtexture='plasma:blue-yellow'; @end example Image file texture: @example $opt_thumbtexture='vibrant.gif'; @end example @node Thumb Geometry, Thumb Gravity, Thumb Background Texture, Thumbnail Imaging @subsection Thumbnail Geometry @cindex geometry, thumbnail @cindex thumbnail, geometry @opindex $opt_thumbgeometry @swindex --thumbgeometry @table @code @item Variable: $opt_thumbgeometry=geometry @item Argument: --thumbgeometry geometry @end table Specify image thumbnail geometry. Thumbnail geometry is specifed in the form: @example x++@{!@}@{<@}@{>@} @end example Specify the size and scaling options for thumbnail images (default '106x80+2+2>'). The following description is extracted verbatim from the montage manual page regarding the treatment of this option: By default, the width and height are maximum values. That is, the image is expanded or contracted to fit the width and height value while maintaining the aspect ratio of the image. Append an exclamation point to the geometry to force the image size to exactly the size you specify. For example, if you specify 640x480! the image width is set to 640 pixels and height to 480. If only one factor is specified, both the width and height assume the value. Use > to change the dimensions of the image only if its size exceeds the geometry specification. Use < to resize the image only if its dimensions is less than the geometry specification. For example, if you specify 640x480> and the image size is 512x512, the image size does not change. However, if the image is 1024x1024, it is resized to 640x480. Each image is surrounded by a border whose size in pixels is specified as and and whose color is the background color. @node Thumb Gravity, Composition Algorithm, Thumb Geometry, Thumbnail Imaging @subsection Thumbnail Gravity @cindex gravity, thumbnail @cindex thumbnail, gravity @opindex $opt_thumbgravity @swindex --thumbgravity @table @code @item Variable: $opt_thumbgravity=direction @item Argument: --thumbgravity direction @end table Specify the thumbnail positioning within the specified geometry (@code{$opt_thumbgeometry} area. If the thumbnail is smaller in any dimension than the geometry, then it will be placed according to this specification. Available options are @code{NorthWest}, @code{North}, @code{NorthEast}, @code{West}, @code{Center}, @code{East} @code{SouthWest}, @code{South}, and @code{SouthEast}. Just as with a map (at least those in the northern hemisphere) @code{North} is up and @code{West} is left. The default is @code{Center} so that thumbnails are centered in their grid. @node Composition Algorithm, Zoom Filter, Thumb Gravity, Thumbnail Imaging @subsection Thumbnail Composition Algorithm @cindex thumbnail composition @cindex composition, thumbnail @opindex $opt_thumbcompose @swindex --thumbcompose @table @code @item Variable: $opt_thumbcompose=operation @item Argument: --thumbcompose operation @end table Specify the image composition algorithm for thumbnails. This controls the algorithm by which the thumbnail image is placed on the background. Available options are (default @code{Replace}): @code{Over}, @code{In}, @code{Out}, @code{Atop}, @code{Xor}, @code{Plus}, @code{Minus}, @code{Add}, @code{Subtract}, @code{Difference}, @code{Bumpmap}, @code{Replace}, @code{MatteReplace}, @code{Mask}, @code{Blend}, and @code{Displace}. Use of @code{Over} is recommended for use with images that have transparency. This option may have negative side-effects for images without transparency. @node Zoom Filter, , Composition Algorithm, Thumbnail Imaging @subsection Thumbnail Zoom Filter @cindex zoom, filter @cindex filter, zoom @cindex reduction, filter @opindex $opt_zoomfilter @swindex --zoomfilter @table @code @item Variable: $opt_zoomfilter=filtertype @item Argument: --zoomfilter filtertype @end table Select the filter algorithm to use for image zooms (reductions & enlargements). The available values are @code{Box}, @code{Triangle}, and @code{Mitchell}. The algorithms have a significant effect on processing time and may have a perceptible effect on image quality. Images zoomed via the @code{Box} algorithm will have the lowest quality (unsuitable for further processing) and will zoom the fastest. Images zoomed via the @code{Triangle} algorithm usually have sufficient quality that it takes careful inspection to detect differences from the best algorithm. The @code{Triangle} algorithm is almost as fast as the @code{Box} algorithm so there is little need to use the @code{Box} algorithm. The @code{Mitchell} algorithm produces the best possible results (preserving fine details) but with a 40% (or so) speed penalty overall as compared with the @code{Triangle} algorithm. If speed is not important for your application, and end-users are likely to be using deep-color displays, then by all means choose the @code{Mitchell} algorithm because if you choose a lesser agorithm, you will never know what you are missing. @node Thumbnail Label Options, Thumbnail Hooks, Thumbnail Imaging, Montage Options @section Thumbnail Label Options @menu * Thumbnail Title Xref:: Specify thumbnail titles * Thumb Label Format:: Specify thumbnail label format * Thumb Label Width:: Specify thumbnail label truncation width * Thumb Label Font:: Specify thumbnail label font @end menu @node Thumbnail Title Xref, Thumb Label Format, Thumbnail Label Options, Thumbnail Label Options @subsection Thumbnail Labels @cindex file name, image index @opindex $opt_imgindexname @swindex --imgindexname @table @code @item Variable: $opt_imgindexname=filename @item Argument: --imgindexname filename @end table Specify the filename for the image name to thumbnail-title cross-reference for images (default @file{.imgindex}). If this file exists, then @emph{labelformat} will replace @emph{imagename} if @emph{imagename} is found in the file. This provides the ability to use user-specified label text rather than the default provided by @code{$opt_thumblabel}. See the description of @code{$opt_thumblabel} or the montage(1) manual page for information on the label format. The order specified by this file is used to sort image names. If an entry for an image is not in this file, then that image name is sorted alphbetically with relation to the other image names. The format of the image index file consists of an image name followed by an image label. The image name and the image label are delimited by white space which may be one or more space or tab characters as shown in the following example: @example mr2-91ev.jpg '91 Front mr2-91re.jpg '91 Back mr2-91si.jpg '91 Side @end example @node Thumb Label Format, Thumb Label Width, Thumbnail Title Xref, Thumbnail Label Options @subsection Thumbnail Label Format @cindex label, thumbnail @cindex thumbnail, label format @opindex $opt_thumblabel @swindex --thumblabel @table @code @item Variable: $opt_thumblabel=format @item Argument: --thumblabel format @end table Specifies the default format of thumbnail labels. The image filename, type, width, height, or scene number in the label by embedding special format characters. Embed %f for filename, %d for directory, %e for filename extention, %t for top of filename, %m for magick, %w for width, %h for height, %s for scene number, %b for file size, or \n for newline. For example, @example -label "%m:%f %wx%h" @end example produces an image label of MIFF:bird.miff 512x480 for an image titled bird.miff and whose width is 512 and height is 480. (This explanation borrowed from montage manual page). If a label is not desired, then use the argument @emph{"label"} to turn off this feature. The default format is '%f\n%wx%h %b' which displays the filename over the image geometry followed by image size. See the @code{$opt_imgindexname} option for a description of a more powerful per-image labeling mechanism. When @code{$opt_cache} is enabled, a number of labeling features will not work correctly since they may refer to characteristics of the cached thumbnail rather than the original image. The labels which are supported when caching is enabled are: @table @code @item %b (file size) @item %f (full filename) @item %h (height) @item %m (magick) @item %n (filename minus extension) @item %w (width) @end table @node Thumb Label Width, Thumb Label Font, Thumb Label Format, Thumbnail Label Options @subsection Thumbnail Label Width @cindex label, width @cindex thumbnail, label width @opindex $opt_thumblabelwidth @swindex --thumblabelwidth @table @code @item Variable: $opt_thumblabelwidth=labelwidth @item Argument: --thumblabelwidth labelwidth @end table Specify the maximum column width (in characters) of label text. Label text longer than this is truncated to the specified width. The purpose of this is to ensure that the label is not munged due to excessive length. @node Thumb Label Font, , Thumb Label Width, Thumbnail Label Options @subsection Thumbnail Label Font @cindex font, thumbnail label @cindex thumbnail, label font @opindex $opt_thumbfont @swindex --thumbfont @table @code @item Variable: $opt_thumbfont=fontspec @item Argument: --thumbfont fontspec @end table Specify the thumbnail title font. This is the X11 font used to title thumbnails (default 5x8). PERL's newgetopt module seems to have difficulties with the dashes in most X11 font specifications. If 'getopt' prints the usage message rather than doing what you want to, then try using the command line syntax @code{--thumbfont=fontspec} and you should have better luck. @node Thumbnail Hooks, , Thumbnail Label Options, Montage Options @section Thumbnail Processing Hooks WebMagick provides EMACS-like hooks that can be used to insert additional processing code fragments into the thumbnail generation code. @menu * Read Fail Hook:: Specify image read-failure hook * Thumb Post Hook:: Specify thumbnail pre-processing hook * Thumb Pre Hook:: Specify thumbnail post-processing hook @end menu @node Read Fail Hook, Thumb Post Hook, Thumbnail Hooks, Thumbnail Hooks @subsection Read Failure Hook @cindex hook, read failure @cindex read, failure hook @opindex $opt_readfailhook @table @code @item Variable: $opt_readfailhook=string @end table PERL code fragment to evaluate if an original image fails to read during the process of building a thumbnail. Usually this is due to the original image being corrupted. Your mileage may vary. When the code fragment is executed, the name of the current image is in the variable '$imagename'. For example: @example @group $opt_thumbreadfailhook='unlink($imagename)'; @end group @end example removes the image, assuming that it is defective. In the case of images retrieved from the binaries newsgroups this is not a bad assumption. @node Thumb Post Hook, Thumb Pre Hook, Read Fail Hook, Thumbnail Hooks @subsection Thumbnail Post-processing Hook @cindex hook, thumbnail post-processing @cindex thumbnail, post-processing @opindex $opt_thumbposthook @table @code @item Variable: $opt_thumbposthook=string @end table PERL code fragment to evaluate on the reduced thumbnail before saving it to cache or using it in the montage. The thumbnail image is available via the variable $image. For example: @example @group $opt_thumbposthook='$status=$image->Sharpen(factor=>40); warn $status if "$status"'; @end group @end example applies the PerlMagick Sharpen operation on the thumbnail, @example @group $opt_thumbposthook='$image->Set(colorspace=>"Gray"); $status=$image->Quantize(); warn $status if "$status"'; @end group @end example displays thumbnails in grayscale, and @example @group $opt_thumbposthook='$image->Set(colorspace=>"Gray"); $status=$image->Quantize(); warn $status if "$status"; $status=$image->Emboss(); warn $status if "$status"'; @end group @end example displays embossed thumbnails. See the @uref{http://www.wizards.dupont.com/cristy/www/perl.html,PerlMagick documentation} for the many other operations which may be applied to an image. @node Thumb Pre Hook, , Thumb Post Hook, Thumbnail Hooks @subsection Thumbnail Pre-Processing Hook @cindex hook, thumbnail pre-processing @cindex thumbnail, pre-processing hook @opindex $opt_thumbprehook @table @code @item Variable: $opt_thumbprehook=string @end table PERL code fragment to evaluate on the original image in memory prior to reducing it into a thumbnail. The image is available via the variable $image. For example: @example @group $opt_thumbprehook='$status=$image->Blur(factor=>80); warn $status if "$status"'; @end group @end example applies the PerlMagick Blur operation on the image. See the @uref{http://www.wizards.dupont.com/cristy/www/perl.html,PerlMagick documentation} for the many operations which may be applied to an image. @node HTML Options, String Customization, Montage Options, Top @chapter HTML Options @menu * HTML Content:: Specify HTML page contents * Text Colors:: Specify HTML text colors * HTML Link Colors:: Specify HTML link colors * Frame Options:: Specify frame options * Meta Tags:: Specify HTML meta tags @end menu @node HTML Content, Text Colors, HTML Options, HTML Options @section HTML Content @menu * Allow Configuration:: Allow user configuration * JavaScript Mode:: Enable JavaScript output * Table Mode:: Use tables instead of imagemaps * README File Treatment:: Control README file visibility * Address Info:: Specify an address field * Anonymize:: Protect the author's reputation * Page Header:: Specify HTML page header * Page Title:: Specify HTML page title * Stylesheet:: Specify a URL to a Cascading Style Sheet * Dir Page Fmt (No Frames):: Directory page template (unframed) * Dir Page Fmt (Framed):: Directory page template (framed) * Per-Image HTML:: @end menu @node Allow Configuration, JavaScript Mode, HTML Content, HTML Content @subsection Allow Configuration @cindex configuration @opindex $opt_allowconfig @swindex --allowconfig @table @code @item Variable: $opt_allowconfig=1 @item Argument: --allowconfig @end table Available only when also using @code{$opt_javascript} and @code{$opt_tables}, Allow Configuration gives the user the option to select their own frame style and number of rows and columns for the table. There will be an icon in the directory frame that will pop-up a new window which includes pictures of the available frame styles. This configuration is accomplished with cookies. If the user has cookies disabled in their browser, their configuration will not be saved. When a configuration is saved, it will be applied to all directories at or below @code{$opt_prefixpath}. For example, if $opt_prefixpath is empty (the default), the configuration will apply to all directories on the site. @node JavaScript Mode, Table Mode, Allow Configuration, HTML Content @subsection JavaScript Mode @cindex javascript @opindex $opt_javascript @swindex --javascript @table @code @item Variable: $opt_javascript=1 @item Argument: --javascript @end table When JavaScript mode is enabled, JavaScript code is added to the main index file (default index.html) to re-set the location to the JavaScript index file (currently hard-coded as "indexjs.html"). This results in JavaScript being loaded into the browser automatically if JavaScript is supported by the browser and the browser is one that WebMagick supports (currently Netscape 3.0X, Netscape 4.0X, and Internet Explorer 4.0X). Browsers that do not support JavaScript, have JavaScript disabled, or are not recognized by WebMagick safely ignore the JavaScript and operate directly from WebMagick's usual HTML files. The advantage of JavaScript mode is that other than retrieving a few intial files and the images to be viewed, all HTML is generated directly within the user's browser, minimizing server accesses. In addition, navigation and presentation are dramatically improved since there is no need to pre-compute every possible viewing option and JavaScript has better control and knowledge of the browser than HTML does. In order for JavaScript mode to operate correctly, the file 'webmagick.js' must be installed in the location specified by @code{$opt_iconpath} (@pxref{Icon Location}) and the server must be updated to associate MIME type "application/x-javascript" with the extension ".js". Read your web server's documentation to see what is required in order to add new MIME types (if the type is not already supported). Apache server: Update conf/mime.types and add the line @example application/x-javascript js @end example CERN or W3 server: Update config/httpd.conf and add the line @example AddType .js application/x-javascript 8bit @end example Phttpd: Update modules/file.conf and add the following to the content-types list @example .js application/x-javascript @end example @node Table Mode, README File Treatment, JavaScript Mode, HTML Content @subsection Table Mode @cindex tables @opindex $opt_tables @swindex --tables @table @code @item Variable: $opt_tables=1 @item Argument: --tables @end table Use HTML tables instead of imagemaps for displaying thumbnails. This results in quicker navigation because smaller images are downloaded, and quicker directory processing, since no montages are created. This option is available with or without JavaScript mode enabled. @node README File Treatment, Address Info, Table Mode, HTML Content @subsection README File Treatment @cindex flag, README visible @opindex $opt_readmevisible @swindex --readmevisible @table @code @item Variable: $opt_readmevisible=1 @item Argument: --readmevisible @end table Specify the handling of a README file. If the file designated by @code{$opt_readme} exists (default @file{README.html}) then make it the first page seen when the user enters a directory. Regardless of this option, the help icon will appear if the README file exists which is a link to the file. @node Address Info, Anonymize, README File Treatment, HTML Content @subsection Address Information @cindex tag, address @opindex $opt_address @swindex --address @table @code @item Variable: $opt_address=string @item Argument: --address string @end table Specify additional information to place in
tags in page frame. WebMagick copyright and support information is placed on all generated pages. @node Anonymize, Page Header, Address Info, HTML Content @subsection Anonymize @cindex anonymous @cindex author, protect @cindex protect, author @opindex $opt_anonymous @swindex --anonymous @table @code @item Variable: $opt_anonymous @item Argument: --anonymous @end table Turn off the WebMagick copyright info and author's address on all generated pages. If you are operating a site that my mother wouldn't approve of, please use this option. @node Page Header, Page Title, Anonymize, HTML Content @subsection Page Header @cindex page, header @cindex header, page @opindex $opt_header @swindex --header @table @code @item Variable: $opt_header=string @item Argument: --header string @end table Specify text to add to the page header in the thumbnail frame (a short term hack). This option is subject to change and will be eliminated if the thumbnail frame is templatized. @node Page Title, Stylesheet, Page Header, HTML Content @subsection Page Title @cindex title, page @cindex page, title @opindex $opt_title @swindex --title @table @code @item Variable: $opt_title=string @item Argument: --title string @end table Specify the page title. If this option is not specified, then WebMagick will generate its own title in the form 'Index of directory "subdirectory name"'. @node Stylesheet, Dir Page Fmt (No Frames), Page Title, HTML Content @subsection Stylesheet @cindex stylesheet @opindex $opt_stylesheet @swindex --stylesheet @table @code @item Variable: $opt_stylesheet=URL @item Argument: --stylesheet URL @end table Specify a style sheet to use for all generated pages. This will override the following options: @itemize @item @code{$opt_colorfore} (@pxref{Thumb Foreground}) @item @code{$opt_colorback} (@pxref{Thumb Background}) @item @code{$opt_dircolorfore} (@pxref{Dir Foreground Color}) @item @code{$opt_dircolorback} (@pxref{Dir Background Color}) @item @code{$opt_coloralink} (@pxref{Thumb Active Link Color}) @item @code{$opt_colorlink} (@pxref{Thumb Un-visited Color}) @item @code{$opt_colorvlink} (@pxref{Thumb Visited Color}) @item @code{$opt_dircoloralink} (@pxref{Dir Active Color}) @item @code{$opt_dircolorlink} (@pxref{Dir Un-Visited Color}) @item @code{$opt_dircolorvlink} (@pxref{Dir Visited Color}) @end itemize @node Dir Page Fmt (No Frames), Dir Page Fmt (Framed), Stylesheet, HTML Content @subsection Directory Page Template (No Frames) @cindex template, directory page (frameless) @cindex directory page, template (frameless) @opindex $opt_dirfmt @table @code @item Variable: $opt_dirfmt=string @end table Specify a template (written in PERL) that represents the format used to generate the frame-less directory navigation page. This format will be seen by browsers that do not support frames. This is a guru-level option that may require reading WebMagick code. @node Dir Page Fmt (Framed), Per-Image HTML, Dir Page Fmt (No Frames), HTML Content @subsection Directory Page Template (Framed) @cindex template, directory page (framed) @cindex directory page, template (framed) @opindex $opt_frameddirfmt @table @code @item Variable: $opt_frameddirfmt=string @end table Specify a template (written in PERL) that represents the format used to generate the framed (left frame) directory navigation page. This format will be seen by browsers that support frames. This is a guru-level option that may require reading WebMagick code. @node Per-Image HTML, , Dir Page Fmt (Framed), HTML Content @subsection Per-Image HTML When per-image HTML mode is enabled, an HTML file is generated corresponding to each image. The HTML file is named based on the image file name with an HTML extension. @menu * Enable Per-image HTML:: * Per-image HTML extension:: * Per-image HTML Nav Buttons:: * Per-image Picture Title:: * Per-image Picture Title Start HTML:: * Per-image Picture Title End HTML:: * Default Frame Target:: * Extra Top HTML:: * Extra Bottom HTML:: @end menu @node Enable Per-image HTML, Per-image HTML extension, Per-Image HTML, Per-Image HTML @subsubsection Enable Per-image HTML @cindex enable, per-image html @cindex per-image html, enable @opindex $opt_pichtml @swindex --pichtml @table @code @item Variable: $opt_pichtml=1 @item Argument: --pichtml @end table Enable per-image HTML file generation. @node Per-image HTML extension, Per-image HTML Nav Buttons, Enable Per-image HTML, Per-Image HTML @subsubsection Per-image HTML extension @cindex extension, per-image html @cindex per-image html, extension @opindex $opt_pichtmlext @swindex --pichtmlext @table @code @item Variable: $opt_pichtmlext='.ext'. @item Argument: --pichtmlext extention @end table Set the file extension to use for per-image HTML files. The final name is the image file name appended with this file extension. The default extension is '.html'. @node Per-image HTML Nav Buttons, Per-image Picture Title, Per-image HTML extension, Per-Image HTML @subsubsection Per-image HTML Nav Buttons @cindex per-image html, nav buttons @cindex nav buttons, per-image html @opindex $opt_pichtmlnav @swindex --pichtmlnav @table @code @item Variable: $opt_pichtmlnav @item Argument: --pichtmlnav @end table Enable image navigation buttons (up, previous, next) on per-image HTML files. @node Per-image Picture Title, Per-image Picture Title Start HTML, Per-image HTML Nav Buttons, Per-Image HTML @subsubsection Per-image Picture Title @cindex per-image html, picture title @cindex picture title, per-image html @opindex $opt_pichtmlputtitle @swindex --pichtmlputtitle @table @code @item Variable: $opt_pichtmlputtitle @item Argument: --pichtmlputtitle @end table Enable per-image HTML picture titles. Default is on. @node Per-image Picture Title Start HTML, Per-image Picture Title End HTML, Per-image Picture Title, Per-Image HTML @subsubsection Per-image Picture Title Start HTML @cindex per-image html, picture title @cindex picture title, per-image html @opindex $opt_pichtmltitlestart @swindex --pichtmltitlestart @table @code @item Variable: $opt_pichtmltitlestart @item Argument: --pichtmltitlestart @end table HTML to add before picture title (default is

) @node Per-image Picture Title End HTML, Default Frame Target, Per-image Picture Title Start HTML, Per-Image HTML @subsubsection Per-image Picture Title End HTML @cindex per-image html, picture title @cindex picture title, per-image html @opindex $opt_pichtmltitleend @swindex --pichtmltitleend @table @code @item Variable: $opt_pichtmltitleend @item Argument: --pichtmltitleend @end table HTML to add after picture title (default is

) @node Default Frame Target, Extra Top HTML, Per-image Picture Title End HTML, Per-Image HTML @subsubsection Default Frame Target @cindex frame target, per-image html @cindex per-image html, frame target @cindex default, frame target @cindex frame target, default @opindex $opt_pichtmltarget @swindex --pichtmltarget @table @code @item Variable: $opt_pichtmltarget='targetname'; @item Argument: --pichtmltarget target_name @end table Set the default URL target name for links in per-image HTML files. There is normally no need to set this target because HTML is normally displayed in the current frame and there are no links by default, however, sometimes it is desirable for links to display in a different (or new) window. @node Extra Top HTML, Extra Bottom HTML, Default Frame Target, Per-Image HTML @subsubsection Extra Top HTML @cindex html, top @cindex top, html @opindex $opt_pichtmltop @swindex --pichtmltop @table @code @item Variable: $opt_pichtmltop='html_source'; @item Argument: --pichtmltop 'html_source' @end table Extra HTML to insert above the image. @node Extra Bottom HTML, , Extra Top HTML, Per-Image HTML @subsubsection Extra Bottom HTML @cindex html, bottom @cindex bottom, html @opindex $opt_pichtmlbottom @swindex --pichtmlbottom @table @code @item Variable: $opt_pichtmlbottom='html_source'; @item Argument: --pichtmlbottom 'html_source' @end table Extra HTML to insert below the image. @node Text Colors, HTML Link Colors, HTML Content, HTML Options @section Text Colors @menu * Thumb Background:: Specify thumbnail page background color * Thumb Foreground:: Specify thumbnail page foreground color * Dir Foreground Color:: Specify directory page foreground color * Dir Background Color:: Specify directory page background color @end menu @node Thumb Background, Thumb Foreground, Text Colors, Text Colors @subsection Thumbnail Frame Background Color @cindex color, background (thumbnail frame) @cindex background color (thumbnail frame) @cindex frame, color (thumbnail frame) @opindex $opt_colorback @swindex --colorback @table @code @item Variable: $opt_colorback=colorspec @item Argument: --colorback colorspec @end table Specify the background color for thumbnail frame. @node Thumb Foreground, Dir Foreground Color, Thumb Background, Text Colors @subsection Thumbnail Frame Text Foreground Color @cindex text, foreground color (thumbnail frame) @cindex foreground color, text (thumbnail frame) @cindex color, foreground text (thumbnail frame) @opindex $opt_colorfore @swindex --colorfore @table @code @item Variable: $opt_colorfore=colorspec @item Argument: --colorfore colorspec @end table Specify the toreground color for text in thumbnail frame. @node Dir Foreground Color, Dir Background Color, Thumb Foreground, Text Colors @subsection Directory Frame Text Color @cindex color, text (directory frame) @cindex text, color (directory frame) @opindex $opt_dircolorfore @swindex --dircolorfore @table @code @item Variable: $opt_dircolorfore=colorspec @item Argument: --dircolorfore colorspec @end table Specify the foreground text color of the directory frame. Defaults to the value of @code{$opt_colorfore} (@pxref{Thumb Foreground}) if not explicitly set. @node Dir Background Color, , Dir Foreground Color, Text Colors @subsection Directory Frame Background Color @cindex color, background (directory frame) @cindex frame, background color (directory frame) @opindex $opt_dircolorback @swindex --dircolorback @table @code @item Variable: $opt_dircolorback=colorspec @item Argument: --dircolorback colorspec @end table Specify the background color of the directory frame. Defaults to the value of @code{$opt_colorback} (@pxref{Thumb Background}) if not explicitly set. @node HTML Link Colors, Frame Options, Text Colors, HTML Options @section HTML Link Colors @cindex link, colors @cindex colors, link @menu * Thumb Active Link Color:: Specify thumbnail page active link color * Thumb Un-visited Color:: Specify thumbnail page un-visited link color * Thumb Visited Color:: Specify thumbnail page visited link color * Dir Active Color:: Specify directory page active link color * Dir Un-Visited Color:: Specify directory page un-visited link color * Dir Visited Color:: Specify directory page visited link color @end menu @node Thumb Active Link Color, Thumb Un-visited Color, HTML Link Colors, HTML Link Colors @subsection Thumbnail Frame Active Link Color @cindex color, active link (thumbnail frame) @cindex html, active link color (thumbnail frame) @cindex link, active (thumbnail frame) @opindex $opt_coloralink @swindex --coloralink @table @code @item Variable: $opt_coloralink=colorspec @item Argument: --coloralink colorspec @end table Specify the link (active) color for the thumbnail frame. @node Thumb Un-visited Color, Thumb Visited Color, Thumb Active Link Color, HTML Link Colors @subsection Thumbnail Frame Un-visited Link Color @cindex color, un-visited link (thumbnail frame) @cindex link, un-visited color (thumbnail frame) @cindex un-visited link, color (thumbnail frame) @opindex $opt_colorlink @swindex --colorlink @table @code @item Variable: $opt_colorlink=colorspec @item Argument: --colorlink colorspec @end table Specify link (unvisited) color for the thumbnail frame. @node Thumb Visited Color, Dir Active Color, Thumb Un-visited Color, HTML Link Colors @subsection Thumbnail Frame Visited Link Color @cindex color, visited link (thumbnail frame) @cindex link, visited color (thumbnail frame) @cindex visited link color (thumbnail frame) @opindex $opt_colorvlink @swindex --colorvlink @table @code @item Variable: $opt_colorvlink=colorspec @item Argument: --colorvlink colorspec @end table Specify link (visited) color for the thumbnail frame. @node Dir Active Color, Dir Un-Visited Color, Thumb Visited Color, HTML Link Colors @subsection Directory Frame Active Link Color @cindex color, active link (directory frame) @cindex link, active color (directory frame) @cindex active link color (directory frame) @opindex $opt_dircoloralink @swindex --dircoloralink @table @code @item Variable: $opt_dircoloralink=colorspec @item Argument: --dircoloralink colorspec @end table Specify link (active) color for the directory frame. Defaults to value of @code{$opt_coloralink} (@pxref{Thumb Active Link Color})if not explicitly set. @node Dir Un-Visited Color, Dir Visited Color, Dir Active Color, HTML Link Colors @subsection Directory Frame Un-Visited Color @cindex color, unvisited link (directory frame) @cindex unvisited link, color(directory frame) @opindex $opt_dircolorlink @swindex --dircolorlink @table @code @item Variable: $opt_dircolorlink=colorspec @item Argument: --dircolorlink colorspec @end table Specify link (unvisited) color for the directory frame. Defaults to the value of @code{$opt_colorlink} (@pxref{Thumb Un-visited Color}) if not explicitly set. @node Dir Visited Color, , Dir Un-Visited Color, HTML Link Colors @subsection Directory Frame Visited Color @cindex color, visited link (directory frame) @cindex visited link, color(directory frame) @opindex $opt_dircolorvlink @swindex --dircolorvlink @table @code @item Variable: $opt_dircolorvlink=colorspec @item Argument: --dircolorvlink colorspec @end table Specify link (visited) color for the directory frame. Defaults to value of @code{$opt_colorvlink} (@pxref{Thumb Visited Color}) if not explicitly set. @node Frame Options, Meta Tags, HTML Link Colors, HTML Options @section Frame Options @menu * Frames:: Enable frames * Frame Borders:: Enable frame borders * Frame Border Thickness:: Specify frame border thickness * Frame Margin Height:: Specify frame margin height * Frame Margin Width:: Specify frame margin width * Frame Style:: Specify frame style (layout) @end menu @node Frames, Frame Borders, Frame Options, Frame Options @subsection Enable Frames @cindex frame, enable @opindex $opt_frames @swindex --frames @table @code @item Variable: $opt_frames=1 @item Argument: --[no]frames @end table Enable frames. This defaults to on, but is useful to turn off if you have a single directory collection. @node Frame Borders, Frame Border Thickness, Frames, Frame Options @subsection Enable Frame Borders @cindex frame, borders enable @cindex borders, frame enable @opindex $opt_frameborder @swindex --frameborder @table @code @item Variable: $opt_frameborder=borderenable @item Argument: --frameborder borderenable @end table Enable decorative frame borders with the value 'YES' or disable decorative frame borders by specifying the value 'NO'. These options are passed directly to the HTML's FRAMESET 'FRAMEBORDER' option in the generated pages. @node Frame Border Thickness, Frame Margin Height, Frame Borders, Frame Options @subsection Frame Border Thickness @cindex frame, border thickness @cindex border thickness, frame @opindex $opt_framebordersize @swindex --framebordersize @table @code @item Variable: $opt_framebordersize=bordersize @item Argument: --framebordersize bordersize @end table Specifies the number of pixels allocated to the frame border. @node Frame Margin Height, Frame Margin Width, Frame Border Thickness, Frame Options @subsection Frame Margin Height @cindex frame, margin height @cindex margin height, frame @opindex $opt_framemarginheight @swindex --framemarginheight @table @code @item Variable: $opt_framemarginheight=marginheight @item Argument: --framemarginheight marginheight @end table Specifies the number of pixels allocated to the frame margin in the vertical direction. @node Frame Margin Width, Frame Style, Frame Margin Height, Frame Options @subsection Frame Margin Width @cindex frame, margin width @cindex margin width, frame @opindex $opt_framemarginwidth @swindex --framemarginwidth @table @code @item Variable: $opt_framemarginwidth=marginwidth @item Argument: --framemarginwidth marginwidth @end table Specifies the number of pixels allocated to the frame margin in the horizontal direction. @node Frame Style, , Frame Margin Width, Frame Options @subsection Frame Style @cindex frame, style @cindex style, frame @cindex frame, template selection @opindex $opt_framestyle @swindex --framestyle @table @code @item Variable: $opt_framestyle=framestyle @item Argument: --framestyle framestyle @end table Specifies the frame template to use. Templates are currently specified for the range of 1-4 with the following effect: @need 2500 @enumerate @c ============ @c Style 1 @c ============ @item Simple two frame screen with directories listed in the left frame and imagemap or README displayed in the right frame. @image{fig/frame-style-1,,} @sp 1 @c ============ @c Style 2 @c ============ @need 2500 @item Three frame screen with directories listed in top-left frame, imagemap displayed in bottom-left frame, and README/Images displayed in full-height right-hand frame. @image{fig/frame-style-2,,} @sp 1 @c ============ @c Style 3 @c ============ @need 2500 @item Three frame screen with directories listed in left frame, imagemap displayed in top-right frame, and README/Images displayed in lower-right frame. @image{fig/frame-style-3,,} @sp 1 @c ============ @c Style 4 @c ============ @need 2500 @item Three frame screen with directories listed in lower-left frame, imagemap displayed in top frame, and README/Images displayed in lower-right frame. @image{fig/frame-style-4,,} @sp 1 @end enumerate @node Meta Tags, , Frame Options, HTML Options @section HTML Meta Tags @cindex meta tags @cindex tags, meta @menu * Meta Author:: Specify AUTHOR meta-tag * Meta Charset:: Specify CHARSET meta-tag * Meta Classification:: Specify CLASSIFICATION meta-tag * Meta Description:: Specify DESCRIPTION meta-tag * Meta Expires:: Specify EXPIRES meta-tag * Meta Key-Words:: Specify KEYWORDS meta-tag @end menu @node Meta Author, Meta Charset, Meta Tags, Meta Tags @subsection Meta-Tag Author @cindex meta, author @cindex tag, author @cindex author, meta tag @opindex $opt_metaauthor @table @code @item Variable: $opt_metaauthor=string @end table Specify author name to add to the HTML meta tags in generated HTML files. @node Meta Charset, Meta Classification, Meta Author, Meta Tags @subsection Meta-Tag Charset @cindex meta, charset @cindex tag, charset @cindex charset, meta tag @opindex $opt_metacharset @table @code @item Variable: $opt_metacharset=string @end table Specify HTML documents character set in case HTTPD can't provide it. @node Meta Classification, Meta Description, Meta Charset, Meta Tags @subsection Meta-Tag Classification @cindex meta, classification @cindex tag, classification @cindex classification, meta tag @opindex $opt_metaclassification @table @code @item Variable: $opt_metaclassification=string @end table Specify any classification information to add to the HTML meta tags in generated HTML files. This may be used by indexing robots. @node Meta Description, Meta Expires, Meta Classification, Meta Tags @subsection Meta-Tag Description @cindex meta, description @cindex tag, description @cindex description, meta tag @opindex $opt_metadescription @table @code @item Variable: $opt_metadescription=string @end table Specify page description text to add to the HTML meta tags in generated HTML files. This information may used by indexing robots. @node Meta Expires, Meta Key-Words, Meta Description, Meta Tags @subsection Meta-Tag Expires @cindex meta, expires @cindex tag, expires @cindex expires, meta tag @opindex $opt_metaexpires @table @code @item Variable: $opt_metaexpires=string @end table Page expiration date to add to the HTML meta tags in generated HTML files. Should be specified in the form: @example "Tue, 20 Aug 1996 14:25:27 GMT" @end example Since the specified expiration time is absolute, use of this option implies a commitment to execute WebMagick with option @code{--forcehtml} as least as often as the specified expiration period. This information is used by browsers and caching servers to determine when cached data becomes stale. @node Meta Key-Words, , Meta Expires, Meta Tags @subsection Meta-Tag Key-Words @cindex meta, key-words @cindex tag, key-words @cindex key-words, meta tag @opindex $opt_metakeywords @table @code @item Variable: $opt_metakeywords=string @end table Specify keywords to add to the HTML meta tags in generated HTML files. Should be specified as a string with keywords delimited by a comma (e.g. "key1,key2,key3"). This information may used by indexing robots. @node String Customization, Authors, HTML Options, Top @chapter String Customization @cindex localization @opindex $opt_msg_copyright @opindex $opt_date_format @opindex $opt_msg_directories @opindex $opt_msg_directory_navigator @opindex $opt_msg_images @opindex $opt_msg_index_of_directory @opindex $opt_msg_index_of_files @opindex $opt_msg_index_through @opindex $opt_msg_next @opindex $opt_msg_page_navigator @opindex $opt_msg_page_updated_on @opindex $opt_msg_prev @opindex $opt_msg_produced_by @opindex $opt_msg_readme @opindex $opt_msg_up Use the following variables to override the strings that WebMagick displays. @table @code @item Variable: $opt_msg_copyright = "Copyright " @item Variable: $opt_date_format = "%B %e, %Y" (see strftime(3)) @item Variable: $opt_msg_directories = "Directories" @item Variable: $opt_msg_directory_navigator = "Directory Navigator" @item Variable: $opt_msg_images = "Images" @item Variable: $opt_msg_index_of_directory = "Index of directory" @item Variable: $opt_msg_index_of_files = "Index of files " @item Variable: $opt_msg_index_through = "through" @item Variable: $opt_msg_next = "Next" @item Variable: $opt_msg_page_navigator = "Page Navigator" @item Variable: $opt_msg_page_updated_on = "Page update on" @item Variable: $opt_msg_prev = "Prev" @item Variable: $opt_msg_produced_by = "Produced by" @item Variable: $opt_msg_readme = "ReadMe" @item Variable: $opt_msg_up = "Up" @end table @node Authors, Obtaining WebMagick, String Customization, Top @chapter Authors WebMagick is currently maintained by @email{clindell@@users.sourceforge.net,Chris Lindell}. It was written by @email{bfriesen@@simple.dallas.tx.us,Bob Friesenhahn} with copious input from @email{anthony@@cit.gu.edu.au,Anthony Thyssen}. Anthony's diligent assistance as the first alpha tester is very much appreciated. Patches to support per-image HTML files and other usability enhancements were contributed by @email{ache@@nagual.pp.ru,Andrey A. Chernov}. ImageMagick and PerlMagick are written by @email{cristy@@dupont.com, John Cristy}. WebMagick would not be possible without his wonderful software. The author greatly appreciates Cristy's assistance with ironing out PerlMagick's (or WebMagick's) bugs and feature set during the development of WebMagick. @node Obtaining WebMagick, Installation, Authors, Top @chapter Obtaining WebMagick @noindent The following packages are required in order to install WebMagick. Retrieve each package and install according to the following order: @enumerate @item @uref{http://www.perl.com/perl/index.html,PERL version 5} @item @uref{http://www.wizards.dupont.com/cristy/ImageMagick.html,ImageMagick} @item @uref{http://www.wizards.dupont.com/cristy/www/perl.html,PerlMagick} @item @uref{http://webmagick.sourceforge.net,WebMagick} @end enumerate Each package provides its own installation instructions. Please follow them carefully. @node Installation, Option Index, Obtaining WebMagick, Top @chapter Installing WebMagick @cindex install @menu * Basic Installation:: * Installation Names:: @end menu @node Basic Installation, Installation Names, Installation, Installation @section Basic Installation Execute the provided configure script specifying a --prefix option for a GNU-style directory heriarchy you would like to install in (e.g. "./configure --prefix=/opt/tools"). This will generate a base copy of WebMagick that has been edited to reflect the location of your PERL interpreter and the X11 RGB database. The configure script will ask you questions to provide definitions of @code{$opt_prefixpath}, @code{$opt_rootpath}, @code{$opt_iconpath}, @code{$opt_htimage}, and @code{$opt_maptype} in the @file{webmagick} script and the sample @file{webmagickrc} file. Read the Introduction section of this manual to learn the details. A few examples are provided below. The script provides a running narrative with examples so it should not be necessary to read much documentation before running it. Then "make install". This will install WebMagick, sample icons, the WebMagick JavaScript interface, and TexInfo documentation. The WebMagick icons must be installed in a directory somewhere under the same server "root" as the images you want to catalogue. This root does not neccessarily have to be the actual server root. The "root" may be established via a server path mapping (rather than symbolic link) that offsets onto another filesystem. In order for JavaScript mode to operate correctly, the file @file{webmagick.js} must be installed in the location specified by @code{$opt_iconpath} and the server must be updated to associate MIME type "application/x-javascript" with the extension ".js". This file contains the various JavaScript routines that define WebMagick's JavaScript interface. See the formal documentation for more on JavaScript. @node Installation Names, , Basic Installation, Installation @section Installation Names By default, @samp{make install} will install the package's files in @file{/usr/local/bin}, @file{/usr/local/man}, etc. You can specify an installation prefix other than @file{/usr/local} by giving @code{configure} the option @samp{--prefix=@var{path}}. In addition, if you use an unusual directory layout you can give options like @samp{--bindir=@var{path}} to specify different values for particular kinds of files. Run @samp{configure --help} for a list of the directories you can set and what kinds of files go in them. @node Option Index, Argument Index, Installation, Top @unnumbered Option Index Summary index of available WebMagick option variables. Many of these options have command-line equivalents. @printindex op @node Argument Index, Concept Index, Option Index, Top @unnumbered Argument Index Summary index of available WebMagick command-line arguments. All of these arguments have equivalent option variables. @printindex sw @node Concept Index, , Argument Index, Top @comment node-name, next, previous, up @unnumbered Concept Index @printindex cp @contents @bye webmagick-2.02.orig/doc/webmagick.10100644000175000017500000001773507413200217016743 0ustar arafunearafune.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.010. .TH WEBMAGICK 1 "December 2001" "webmagick 2.02" "FSF" .SH NAME webmagick \- manual page for webmagick 2.02 .SH SYNOPSIS .B webmagick [\fIOPTIONS\fR] .SH DESCRIPTION WebMagick `webmagick' recurses through directories of images and builds HTML pages and image-maps to display those images in a web browser. Options may be specified on the command line as --option or in .webmagickrc files as $opt_option. By default WebMagick processes files in the current directory. See --srcdir for a way to process files in a different directory. .SS "General:" .TP \fB\-\-[no]debug\fR Print debug messages (default off) .TP \fB\-\-[no]forcecache\fR Force cached thumbnails to be generated (default off) .TP \fB\-\-[no]forcehtml\fR Force HTML files to be generated (default off) .TP \fB\-\-[no]forcemontage\fR Force montage (default off) .TP \fB\-\-[no]ignorefp\fR Ignore directories with names like _vti (FrontPage directories) (default on) .TP \fB\-\-[no]help\fR Display usage message (default off) .TP \fB\-\-[no]recurse\fR Recurse directory tree (default off) .TP \fB\-\-srcdir\fR Image directory to process .TP \fB\-\-[no]verbose\fR Tell us more ... (default off) .TP \fB\-\-[no]version\fR Print version and exit (default off) .SS "Paths:" .TP \fB\-\-iconpath\fR Relative path under rootdir to webmagick icons .TP \fB\-\-iconbase\fR Global base URL for webmagick icons .TP \fB\-\-prefixpath\fR Path to prepend to generated URLs (e.g. /~username) .TP \fB\-\-rootpath\fR Absolute path to server root (NCSA DocumentRoot) .SS "Server-side imagemaps:" .TP \fB\-\-htimage\fR Imagemap CGI program URL (set to '' for none) .TP \fB\-\-maptype\fR Server-side map type ("ncsa" or "cern") .TP \fB\-\-[no]serversidemap\fR Enable server-side map writting (default off) .SS "Filenames:" .TP \fB\-\-dirindexname\fR Directory-name to title cross-reference file name .TP \fB\-\-imgindexname\fR Image-name to thumbnail label cross-reference file name .TP \fB\-\-indexname\fR Name of master index files (default server index) .TP \fB\-\-pageindexname\fR Base name of page-related index files .TP \fB\-\-readme\fR Name of directory info file .SS "Caching:" .TP \fB\-\-[no]cache\fR Cache thumbnails (default on) .TP \fB\-\-cachedir\fR Subdirectory name to cache thumbnails in (default .cache) .TP \fB\-\-cacheformat\fR Format of cached thumbnails (default JPEG) .TP \fB\-\-cachegeom\fR Cache thumbnail geometry (default thumbgeom) .TP \fB\-\-cachemin\fR Smallest image to cache in pixels. (default 300*200) .SS "Montage:" .TP \fB\-\-[no]forcegif\fR Force imagemap to be in GIF format (default off) .TP \fB\-\-[no]forcejpeg\fR Force imagemap to be in JPEG format (default off) .TP \fB\-\-jpegquality\fR Quality of JPEG imagemaps .TP \fB\-\-maxgif\fR Maximum size of GIF imagemap before trying JPEG .TP \fB\-\-columns\fR Montage columns .TP \fB\-\-rows\fR Montage rows (max) .TP \fB\-\-[no]mapnetscape\fR Map generated image files to Netscape 216-color cube (default off) .TP \fB\-\-thumbbackground\fR Montage background color .TP \fB\-\-thumbframebgcolor\fR Background color inside of Frame (unused if no Frame) .TP \fB\-\-thumbborderwidth\fR Thumbnail border width (pixels) .TP \fB\-\-thumbcompose\fR Thumbnail image composition operation (default Replace) Over, In, Out, Atop, Xor, Plus, Minus, Add, Subtract, Difference, Bumpmap, Replace, MatteReplace, Mask, Blend, Displace .TP \fB\-\-thumbfont\fR Thumbnail title font .TP \fB\-\-thumbforeground\fR Montage foreground color (effects label color) .TP \fB\-\-thumbframe\fR Geometry of frame around thumbnail (default no frame) .TP \fB\-\-thumbgeometry\fR Thumbnail geometry (widthxheight) .TP \fB\-\-thumbgravity\fR Direction thumbnail gravitates to (default Center) NorthWest, North, NorthEast, West, Center, East, SouthWest, South, SouthEast. North is up. .TP \fB\-\-thumblabel\fR Format for default thumbnail text label .TP \fB\-\-thumblabelwidth\fR Label width (in characters) to truncate to. .TP \fB\-\-thumbframecolor\fR Frame color (if thumbnail frames enabled) .TP \fB\-\-thumbshadow\fR Enable decorative shadow under thumbnail .TP \fB\-\-thumbtexture\fR Texture to tile onto the image background .TP \fB\-\-thumbtransparent\fR Transparent color .TP \fB\-\-zoomfilter\fR Zoom filter algorithm (Box/Triangle/Mitchell) .SS "HTML Colors & Appearance:" .TP \fB\-\-address\fR Optional user address info .TP \fB\-\-[no]anonymous\fR Don't show WebMagick address and copyright info on pages (default off) .TP \fB\-\-coloralink\fR Link (active) color .TP \fB\-\-colorback\fR Background color (also applied to JPEG montage background) .TP \fB\-\-colorfore\fR Foreground text color .TP \fB\-\-colorlink\fR Link (unvisited) color .TP \fB\-\-colorvlink\fR Link (visited) color .TP \fB\-\-dircoloralink\fR Link (active) color (directory frame) .TP \fB\-\-dircolorback\fR Background color (directory frame) .TP \fB\-\-dircolorfore\fR Foreground color (directory frame) .TP \fB\-\-dircolorlink\fR Link (unvisited) color (directory frame) .TP \fB\-\-dircolorvlink\fR Link (visited) color (directory frame) .TP \fB\-\-dirhtmlext\fR Extension for directory frame .TP \fB\-\-stylesheet\fR URL to stylesheet (overrides other color options) .TP \fB\-\-[no]date\fR Output updates date (default on) .TP \fB\-\-footer\fR Page footer (imagemap frame) (default to
) .TP \fB\-\-header\fR Page header (imagemap frame) (default to
) .TP \fB\-\-[no]javascript\fR Enable JavaScript output (default off) .TP \fB\-\-[no]pichtml\fR Per-image HTML file generation (default off) .TP \fB\-\-pichtmlext\fR Per-image HTML file extension (default .html) .TP \fB\-\-pichtmlbottom\fR Per-image HTML, extra HTML to display below image (default to
) .TP \fB\-\-[no]pichtmlnav\fR Per-image HTML, show navigation buttons (default off) .TP \fB\-\-[no]pichtmlputtitle\fR Put per-image HTML picture title (default on) .TP \fB\-\-pichtmltarget\fR Per-image HTML default frame target .TP \fB\-\-pichtmltitleend\fR End tags for per-image HTML picture title (default

) .TP \fB\-\-pichtmltitlestart\fR Start tags for per-image HTML picture title (default

) .TP \fB\-\-pichtmltop\fR Per-image HTML, extra HTML to display above image (default to

) .TP \fB\-\-[no]readmevisible\fR Show README.html on first page rather than just linking (default off) .TP \fB\-\-[no]tables\fR Use HTML tables instead of imagemaps for thumbnails (default off) .TP \fB\-\-title\fR Page title .SS "Frame Options:" .TP \fB\-\-[no]frames\fR Use frames, if no - single directory collection assumed (default on) .TP \fB\-\-framemarginwidth\fR Pixels allocated to frame margin in horizontal direction .TP \fB\-\-framemarginheight\fR Pixels allocated to frame margin in vertical direction .TP \fB\-\-framebordersize\fR Pixels allocated to frame border .TP \fB\-\-frameborder\fR Enable (YES) or disable (NO) decorative frame borders .TP \fB\-\-framestyle\fR Frame style to use (out of those available) .TP \fB\-\-[no]allowconfig\fR Allow user to configure framestyle, columns and rows (requires javascript and tables) (default off) .SS "Messages Replacement:" .TP \fB\-\-msg_copyright\fR "Copyright " .TP \fB\-\-msg_date_format\fR "%B %e, %Y" (see strftime(3)) .TP \fB\-\-msg_directories\fR "Directories" .TP \fB\-\-msg_directory_navigator\fR "Directory Navigator" .TP \fB\-\-msg_images\fR "Images" .TP \fB\-\-msg_index_of_directory\fR "Index of directory" .TP \fB\-\-msg_index_of_files\fR "Index of files " .TP \fB\-\-msg_index_through\fR "through" .TP \fB\-\-msg_next\fR "Next" .TP \fB\-\-msg_page_navigator\fR "Page Navigator" .TP \fB\-\-msg_page_updated_on\fR "Page updated on" .TP \fB\-\-msg_prev\fR "Prev" .TP \fB\-\-msg_produced_by\fR "Produced by" .TP \fB\-\-msg_readme\fR "ReadMe" .TP \fB\-\-msg_up\fR "Up" .SH "REPORTING BUGS" Report bugs to . Visit the WebMagick web page at http://webmagick.sourceforge.net/ .SH "SEE ALSO" The full documentation for .B webmagick is maintained as a Texinfo manual. If the .B info and .B webmagick programs are properly installed at your site, the command .IP .B info webmagick .PP should give you access to the complete manual. webmagick-2.02.orig/doc/webmagick.html0100644000175000017500000033331407413175452017555 0ustar arafunearafune WebMagick Image Web Generator

WebMagick

Image Web Generator

December 2001 (Version 2.02)

by Bob Friesenhahn
now maintained by Chris Lindell


Table of Contents


Introduction

WebMagick creates HTML index files and imagemaps corresponding to a directory of image files. WebMagick is ideal for making large image collections available on the net or for just using your Web browser for browsing images.

Configuration options are derived from either the command line (options prefixed with '-', '--', or '+'), configuration file ($opt_ options), or internal defaults ($opt_ options). Some arguments (like X11 font specifications) seem to confuse PERL's getopt function. When this happens, try using the syntax --option=arg to avoid any confusion caused by a space.

The default configuration file name is `.webmagickrc'. Configuration files are written in PERL syntax and are sourced via PERL's eval statement. When WebMagick is executed, it first reads files listed in the @global_option_files array (`/etc/webmagickrc' and `$HOME/.webmagickrc' by default). When a directory is processed, WebMagick will process any `.webmagickrc' files found in the path from the server's root directory (specified by $opt_rootpath (see section Specify Server Root Path)) to the directory being processed. All configuration options are additive.

Evaluation order (inverse of precedence) is as follows :

  1. Files listed in @global_option_files (default `/etc/webmagickrc' and `$HOME/.webmagickrc')
  2. Command line options
  3. Per directory .webmagickrc files. Webmagickrc files are evaluated in path order from server root to current directory. This allows sub-directories to "inherit" the configuration of parent directories.

Each directory is processed with items 1 & 2 already complete.

In general, WebMagick's defaults produce nice output. However, the options $opt_prefixpath (see section Specifying Root Prefix), $opt_rootpath (see section Specify Server Root Path), $opt_iconpath (see section Specifying WebMagick Icon Location), $opt_htimage (see section Imagemap Program), and $opt_maptype (see section Imagemap Type) must be configured on a per-site basis so please read the documentation on these options and perform the required configuration before executing the program.

A key configuration/installation issue is that WebMagick depends on the image files being on the same filesystem as the icons. The reason for this limitation is that this allows WebMagick to determine the mapping between the physical disk and the server's URLs. If someone knows a better algorithm than this one, please let the author know.

By default the output files of WebMagick for the first page are as follows (second page replace '1' with '2', etc.):

index.html
Main (default server index) HTML index file.
indexjs.html
Javascript master index file (name currently hard-coded).
.cache
Thumbnail cache directory
.indexdir.html
HTML page that displays directory frame
.indexjs.html
HTML file to load JavaScript source into browser.
.index.pl
WebMagick status file (in PERL format). Re-generated per run. May be used by other programs to produce additional HTML output.
.index.js
JavaScript variables file (similar to status file but in JavaScript).
.index1.html
HTML page that displays thumbnail frame
.index1.gif
Montaged images (thumbnails) in GIF format
.index1.jpg
Montaged images (thumbnails) in JPEG format
.index1.map
Server-side imagemap (clickable map) file

General

Display Help

Variable:
$opt_help=1
Argument:
--help

Display usage message.

Specify Source Directory

Variable:
$opt_srcdir=path
Argument:
--srcdir path

Image directory to process or start recursion at (default current directory). Specify this option (usually on the command line) if the directory you want to process is not the current directory. This simply causes WebMagick to change directories before starting processing.

Enable Verbose Output

Variable:
$opt_verbose=1
Argument:
--verbose

Normally WebMagick prints only the directory names for directories it processes. Selecting the verbose option displays the number of images and sub-directories in the directory as well as the number of pages to be generated, and the current page number. It will also show the current image index WebMagick is currently creating as a progress report.

Enable Debug Output

Variable:
$opt_debug=1
Argument:
--debug

Print debugging messages.

Sub-Directory Processing

Recurse Sub-Directories

Variable:
$opt_recurse=1
Argument:
--recurse

Recurse directory tree (default off). The default is to only process the current directory, generating appropriate links for sub-directories and the parent directory. Selecting this option causes WebMagick to recurse through sub-directories as well.

Prune Directory

Variable:
$opt_prune=1

If $opt_prune is set in a directory's `.webmagickrc' file (default off), then sub-directories below that directory will not be processed by WebMagick when operating in the recursive mode. See section Ignore Directory, for details on how to skip a directory rather than prune it.

Ignore Directory

Variable:
$opt_ignore=1

If $opt_ignore is set in a directory's `.webmagickrc' file (default off), then that directory will not be processed (but will still be linked to). If recursion is enabled, then recursion will continue into any sub-directories. This provides support for subdirectories with HTML files which are generated by other means. also $opt_indexname.

Ignore FrontPage

Variable:
$opt_ignorefp=1
Argument:
--ignorefp

If $opt_ignorefp is used, sub-directories with names like _vti_bin will be ignored. MS FrontPage creates these directories which begin with an underscore followed by a lowercased letter (_[a-z]).

Forcing Output To Be Generated

WebMagick uses algorithms similar in concept to those used by make to try to only do required processing. Occasionally due to modification of a parameter that WebMagick doesn't track or due to external modification of file modification times, WebMagick will skip doing an update that it should have done. In these cases, options are provided to force WebMagick to perform a task.

Force Generation Of Thumbnail Cache

Variable:
$opt_forcecache=1
Argument:
--forcecache

Force cache files to be generated (default off). Without this option, WebMagick will only re-generate cache files if the source file is newer. In order for this option to take effect, a montage must be generated and $opt_cache must be set to a non-zero value. The --forcemontage option be used to force montages.

Force Generation Of HTML Files

Variable:
$opt_forcehtml=1
Argument:
--forcehtml

Force HTML files to be generated (default off). Without this option, WebMagick will only re-generate HTML files as required.

Force Generation Of Montage

Variable:
$opt_forcemontage=1
Argument:
--forcemontage

Force montage (default false). Without this option, WebMagick will only re-generate montages as required.

Paths

URL Computation

Specify Server Root Path

Variable:
$opt_rootpath=path
Argument:
--rootpath path

Absolute path to server root directory (NCSA/Apache DocumentRoot) or the users Home page directory. This must be an absolute path (starting with `/') to the top of the WWW directory tree WebMagick will be processing in. If this value is specified incorrectly, WebMagick will generate incorrect URLs.

Specifying Root Prefix

Variable:
$opt_prefixpath=path
Argument:
--prefixpath path

The prefix to prepend to all URLs to specify the WWW location of $opt_rootpath (see section Specify Server Root Path). For directories under the WWW server's root directory (`/') this is a empty string (""). For a user's personal pages this is the URL path to their home pages (usually `/~username' equating to `~/public_html', but may be configured differently on your server).

If a relative URL can be computed then this option is not actually used. It however must be used if the WebMagick icon images are not in the same logical WWW directory tree as the directories WebMagick is processing. (See the next option).

Specifying WebMagick Icon Location

Variable:
$opt_iconpath=path
Argument:
--iconpath path

This is the relative path from the top of the WWW directory tree specified in $opt_rootpath (see section Specify Server Root Path). If this value is specified incorrectly then WebMagick will generate incorrect URLs for its icons.

File Names

Specifying Icon File Names

Variable:
%opt_icons=( 'id', 'filename', .... ;

This is a hash table of all the images used directly by WebMagick and located in the $opt_iconpath (see section Specifying WebMagick Icon Location) directory. The elments are pairs of icon `id's and the filename of the image. The `id's currently used internally by `WebMagick' are :- `background', `dirbackground', `prev', `next', `next_grey', `up', `help', and `ball'. These IDs are used as follows:

background
thumbnail frame background image
dirbackground
directory frame background image
prev
link to previous page
next
link to next page
next_gray
link to next page (when there isn't one)
up
link to parent directory up
help
link to help Readme File (if it exists)
ball
a decorative ball. If no definition exists (array element is left undefined) then the ball is not displayed in preference to unadorned text.

By default the background and dirbackground options are undefined which results in no background images being defined.

Other images can also be defined in the hash table and WebMagick will automatically process those images along with the images it uses, to generate the icon URL and size infomation. This information can then be used in the various special formating options to add extra, or special purpose links.

An alternative way to define entries (particularly useful in directory .webmagickrc files) is to define (or undefine) individual hash table entries.

Use syntax similar to

$opt_icons{'background'} = 'background.gif';

to add a background image to the thumbnail page or override an existing definition.

Use syntax similar to

undef $opt_icons{'background'};

to undefine an existing definition for the image corresponding to `background'. This can be useful if the default is to display a background image but you want to turn off the background image for a particular sub-directory tree.

Index File Base Name

Variable:
$opt_indexname=filename
Argument:
--indexname filename

Base name of the master index files (default server index), usually set to `index.html'. This is also the filename WebMagick will look for in sub-directories and parent directory `.webmagickrc' files as the document to make links to.

EG: If a directory is not processed by WebMagick, by either never running WebMagick on that directory, or the option $opt_ignore has been set, then setting $opt_indexname will specify the document WebMagick created index files of OTHER directories should link to.

If you do not want WebMagick to ever link to this directory then setting the option, $opt_indexname, to "NOLINK" will will prevent WebMagick index files in other directories from linking to this directory.

If you want WebMagick to entirely ignore a particular directory tree, even during recursion of the surrounding directories, then you can use the following options in its "`.webmagickrc'" file:

#
# .webmagickrc -- WebMagick is not to process or even link
# to this directory tree
#
$opt_indexname = 'NOLINK'; # Do not link to this directory
$opt_ignore    = 1;        # Do not generate WebMagick image indexes
$opt_prune     = 1;        # Don't recurse into sub-directories

Specifying README File Name

Variable:
$opt_readme=filename
Argument:
--readme filename

Name of directory information file (default `README.html'). If this file exists in the directory, then it will be displayed in preference to the first page of images and a link will appear in the directory frame which links to the image index. Typically the contents of this file describe the images to be viewed.

Page Index File Name

Variable:
$opt_pageindexname=string
Argument:
--pageindexname string

Base name of page-related index files (default `.index'). This name is used as the prefix for all generated files except for the main index file. The default naming creates these as hidden files (UNIX convention).

Specifying Sub-Directory Titles

Variable:
$opt_dirindexname=filename
Argument:
--dirindexname filename

Specify the file name to contain the directory-name to title cross-reference for naming sub-directories (default file name `.dirindex'). If this file exists, then dirtext will replace `dirname' if `dirname' is found in the file. This provides the ability to use user-specified text rather than actual sub-directory names. The order specified by this file is used to sort directory names. If an entry for a directory is not in this file, then that directory name is sorted alphbetically with relation to the other directory names.

The format of the file is:

dirname  dirtext

With dirname representing the directory name and dirtext representing the replacement link text.

It is wise to limit the length of dirtext to fit within the limitations of the directory frame.

Server-Side Imagemaps

Imagemap Program

Variable:
$opt_htimage=path
Argument:
--htimage path

Specify imagemap CGI program URL (set to " for none). Older servers (e.g. CERN and old NCSA) require an external program to handle server-side imagemaps. These programs are usually supplied with a full URL to the referenced file. Newer servers have server-side imagemap support built-in and can accept URLs relative to the current directory. If you have a modern server, then specify this value as a null string (just hit RETURN when running the configure script).

Imagemap Type

Variable:
$opt_maptype=maptype
Argument:
--maptype maptype

Specify server-side map type (set to "ncsa" or "cern"). NCSA and Apache servers require "ncsa". CERN requires "cern". Phttpd can use either format.

NCSA format looks similar to:

default .index1.html
rect scooby1.gif 440,0 549,128

while CERN format looks similar to:

default .index1.html
rect (440,0) (549,128) scooby1.gif

Thumbnail Caching

Enable Caching

Variable:
$opt_cache
Argument:
--cache

Enable thumbnail caching. This is good for a 5X reduction in processing time when a single image is added or removed from a directory since thumbnails are cached in reduced form.

As an added benefit, WebMagick can share its cache with John Bradley's xv image manipulation program (Visual Schnauzer feature) if configuration values are set as follows:

$opt_cacheformat= 'P7';
$opt_cachegeom  = 80x60;
$opt_cachedir   = '.xvpics';

Sharing the cache with xv is only feasable if all of the images being cached are compatable with xv (ImageMagick supports many more formats than xv). A further drawback of sharing the cache with xv is that xv is limited to thumbnails with a geometry of 80x60 which may be small for your tastes (I prefer larger).

Cache Directory

Variable:
$opt_cachedir=dirspec
Argument:
--cachedir dirspec

Specify subdirectory name to cache thumbnails in (default `.cache').

Cache Thumbnail Format

Variable:
$opt_cacheformat=imageformat
Argument:
--cacheformat imageformat

Specify the format that cached thumbnails are saved in. Can be any format that ImageMagick knows how to read and write. The default is 'JPEG' which works well for photorealistic images.

Cache Thumbnail Geometry

Variable:
$opt_cachegeom=geometry
Argument:
--cachegeom geometry

Specifies the geometry specification for cached thumbnails. The default is to use the value specified by $opt_thumbgeometry (see section Thumbnail Geometry). If a smaller value is used, there will be more unused space around the montaged thumbnails. Use of a larger value than the thubnail geometry is to be avoided because the cached thumbnail will still have to be reduced for the montage, costing both time and thumbnail quality.

Cache Minimum Image Size

Variable:
$opt_cachemin=minsize
Argument:
--cachemin minsize

Specifies the original Image size (in total pixels) over which caching will be used. For images smaller than this size, WebMagick will use the original image in the Montage and no thumbnail will be cached. The default value is 60,000 which is equivalent to a 300 x 200 image.

Selecting a value for this option is a judgement call based on space vs time. If a small value is selected, the initial run will be slower and more disk space will be consumed by thumbnails. However, subsequent updates should be faster since more thumbnails are already reduced. If a large value is selected, then less disk space will be consumed, the first pass will be faster, and subsequent passes will be slower.

Montage Options

The Anatomy Of A Montage

Montage Layout

A montage is a single image which is composed of thumbnail images layed out in a grid. The size of the montage image is determined by the size of the individual thumbnails and the number of rows and columns in the grid.

The following figure shows a montage consisting of three columns and two rows of thumbnails:



The Anatomy Of A Thumbnail

Un-Framed Thumbnails

Un-framed thumbnails consist of four components: the thumbnail image, the thumbnail border, an optional thumbnail shadow, and an optional thumbnail label area.



Framed Thumbnails

Framed thumbnails consist of four components: the thumbnail image, the thumbnail frame, the thumbnail border, an optional thumbnail shadow, and an optional thumbnail label area.



Montage Geometry

The montage geometry specifies the size in rows and columns of the generated thumbnail grid. Since a single montage is displayed per HTML page, after the montage grid is full, a new page is started. The montage geometry combined with the thumbnail geometry determines the total size of the montage image and therefore the size that the user's web browser must be set to in order to view the entire montage.

Setting the rows to a very large value (large enough that rows x columns exceeds the number of images) results in a single HTML page being generated. The user can then use the browser's vertical scroll bar to peruse the thumbnails.

Columns

Variable:
$opt_columns=number
Argument:
--columns number

Specify the montage columns (max). This is the maximum number of thumbnail columns allowed per thumbnail row.

Rows

Variable:
$opt_rows=number
Argument:
--rows number

Specify the montage rows (max). This is the maximum number of thumbnail rows allowed per page.

Montage Image Format

GIF/JPEG Transition Point

Variable:
$opt_maxgif=number
Argument:
--maxgif number

Specify the maximum size of GIF imagemap before trying JPEG (default 30000). This is an optimization which tries to avoid the JPEG conversion step. When indexing true or deep-color images, JPEG usually leads to a smaller montage imagemap file.

Even if a JPEG image is generated, the smaller of the two images is selected for use and the larger one is deleted to save disk space.

Force GIF Format

Variable:
$opt_forcegif=1
Argument:
--forcegif

Force GIF imagemaps to be generated (default off). This avoids the possible generation of JPEG format imagemaps when the GIF file is large (over 30K). The primary reason for using this option is because GIF supports image transparancy while JPEG does not, leading to a possibly more attractive display when using GIF format imagmaps. The drawbacks of forcing GIF format are larger imagemap files (often two or three times the size of JPEG when montaging true or deep-color images) and the limited color depth (256 colors) of the GIF format.

Montage Colors

Thumbnail Foreground Color

Variable:
$opt_thumbforeground=colorspec
Argument:
--thumbforeground colorspec

Specify the montage foreground color. This color is used as the color for thumbnail label text.

Thumbnail Background Color

Variable:
$opt_thumbbackground=colorspec
Argument:
--thumbbackground colorspec

Specifies the background color that thumbnails are imaged upon.

Thumbnail Transparent Color

Variable:
$opt_thumbtransparent=colorspec
Argument:
--thumbtransparent colorspec

Specify a montage color to set transparent. Usually should be set the same as the background color $opt_colorback (see section Thumbnail Background Color) of the imagemap page. GIF format imagemaps use the transparent color directly while JPEG format imagemaps may approximate "transparency" by setting the imagemap background color to the same color used as the background for HTML pages. This approximation becomes less useful for clients with shallow colormaps.

Thumbnail Frame Color

Variable:
$opt_thumbframecolor=colorspec
Argument:
--thumbframecolor colorspec

Specify the thumbnail frame color (only applicable if frames are enabled).

Thumbnail Frame Border Color

Variable:
$opt_thumbframebgcolor=colorspec
Argument:
--thumbframebgcolor colorspec

Specifies the background color within the thumbnail frame. Ignored if there is no frame.

Quantize To Netscape Color Cube

Variable:
$opt_mapnetscape
Argument:
--mapnetscape

Re-map the montage colors to the Netscape 216-color cube. Netscape maps colors to a fixed 216-color cube on PseudoColor color displays. Using this option allows you to ensure that Netscape doesn't dither or re-map your colors when used with common PseudoColor displays and the images may be smaller. The drawback to using this option is that the color quality will be significantly decreased on True and DirectColor displays or when using browsers that don't use the 216-color cube technique.

When using image transparency, make sure that the transparent color is selected from one of the 216 "standard" colors or transparency won't work.

Thumbnail Imaging

Enable Thumbnail Frame

Variable:
$opt_thumbframe=geometry
Argument:
--thumbframe geometry

Specify the geometry specification for frame to place around thumbnail. If no frame is desired then the string "false" should be specified. The specified geometry values are in addition to the thumbnail geometry. For example, a frame geometry of '8x8' places an 8 pixel frame around the image.

Enable Thumbnail Shadows

Variable:
$opt_thumbshadow=boolean
Argument:
--thumbshadow boolean

Set to string "true" or "false" to control the use of decorative shadows around image thumbnails (or frames if enabled). The default is "false".

Thumbnail Frame Border Width

Variable:
$opt_thumbborderwidth=borderwidth

Specify the border (in pixels) to place between a thumbnail and its surrounding frame. This option only takes effect if thumbnail frames are enabled and the thumbnail geometry specification doesn't also specify the thumbnail border width.

Thumbnail Background Texture

Variable:
$opt_thumbtexture=texturespec
Argument:
--thumbtexture texturespec

Specify a texture to use as montage background. The built-in textures "granite:" and "plasma:" are available. A texture is the same aas a background image. For example:

Granite texture:

$opt_thumbtexture='granite:';

Plasma texture:

$opt_thumbtexture='plasma:blue-yellow';

Image file texture:

$opt_thumbtexture='vibrant.gif';

Thumbnail Geometry

Variable:
$opt_thumbgeometry=geometry
Argument:
--thumbgeometry geometry

Specify image thumbnail geometry. Thumbnail geometry is specifed in the form:

 <width>x<height>+<borderwidth>+<borderheight>{!}{<}{>}

Specify the size and scaling options for thumbnail images (default '106x80+2+2>').

The following description is extracted verbatim from the montage manual page regarding the treatment of this option:

By default, the width and height are maximum values. That is, the image is expanded or contracted to fit the width and height value while maintaining the aspect ratio of the image. Append an exclamation point to the geometry to force the image size to exactly the size you specify. For example, if you specify 640x480! the image width is set to 640 pixels and height to 480. If only one factor is specified, both the width and height assume the value. Use > to change the dimensions of the image only if its size exceeds the geometry specification. Use < to resize the image only if its dimensions is less than the geometry specification. For example, if you specify 640x480> and the image size is 512x512, the image size does not change. However, if the image is 1024x1024, it is resized to 640x480. Each image is surrounded by a border whose size in pixels is specified as <border width> and <border height> and whose color is the background color.

Thumbnail Gravity

Variable:
$opt_thumbgravity=direction
Argument:
--thumbgravity direction

Specify the thumbnail positioning within the specified geometry ($opt_thumbgeometry area. If the thumbnail is smaller in any dimension than the geometry, then it will be placed according to this specification. Available options are NorthWest, North, NorthEast, West, Center, East SouthWest, South, and SouthEast. Just as with a map (at least those in the northern hemisphere) North is up and West is left. The default is Center so that thumbnails are centered in their grid.

Thumbnail Composition Algorithm

Variable:
$opt_thumbcompose=operation
Argument:
--thumbcompose operation

Specify the image composition algorithm for thumbnails. This controls the algorithm by which the thumbnail image is placed on the background. Available options are (default Replace): Over, In, Out, Atop, Xor, Plus, Minus, Add, Subtract, Difference, Bumpmap, Replace, MatteReplace, Mask, Blend, and Displace. Use of Over is recommended for use with images that have transparency. This option may have negative side-effects for images without transparency.

Thumbnail Zoom Filter

Variable:
$opt_zoomfilter=filtertype
Argument:
--zoomfilter filtertype

Select the filter algorithm to use for image zooms (reductions & enlargements). The available values are Box, Triangle, and Mitchell. The algorithms have a significant effect on processing time and may have a perceptible effect on image quality. Images zoomed via the Box algorithm will have the lowest quality (unsuitable for further processing) and will zoom the fastest. Images zoomed via the Triangle algorithm usually have sufficient quality that it takes careful inspection to detect differences from the best algorithm.

The Triangle algorithm is almost as fast as the Box algorithm so there is little need to use the Box algorithm. The Mitchell algorithm produces the best possible results (preserving fine details) but with a 40% (or so) speed penalty overall as compared with the Triangle algorithm. If speed is not important for your application, and end-users are likely to be using deep-color displays, then by all means choose the Mitchell algorithm because if you choose a lesser agorithm, you will never know what you are missing.

Thumbnail Label Options

Thumbnail Labels

Variable:
$opt_imgindexname=filename
Argument:
--imgindexname filename

Specify the filename for the image name to thumbnail-title cross-reference for images (default `.imgindex'). If this file exists, then labelformat will replace imagename if imagename is found in the file. This provides the ability to use user-specified label text rather than the default provided by $opt_thumblabel. See the description of $opt_thumblabel or the montage(1) manual page for information on the label format. The order specified by this file is used to sort image names. If an entry for an image is not in this file, then that image name is sorted alphbetically with relation to the other image names.

The format of the image index file consists of an image name followed by an image label. The image name and the image label are delimited by white space which may be one or more space or tab characters as shown in the following example:

mr2-91ev.jpg	'91 Front
mr2-91re.jpg	'91 Back
mr2-91si.jpg	'91 Side

Thumbnail Label Format

Variable:
$opt_thumblabel=format
Argument:
--thumblabel format

Specifies the default format of thumbnail labels. The image filename, type, width, height, or scene number in the label by embedding special format characters. Embed %f for filename, %d for directory, %e for filename extention, %t for top of filename, %m for magick, %w for width, %h for height, %s for scene number, %b for file size, or \n for newline. For example,

    -label "%m:%f %wx%h"

produces an image label of MIFF:bird.miff 512x480 for an image titled bird.miff and whose width is 512 and height is 480. (This explanation borrowed from montage manual page). If a label is not desired, then use the argument "label" to turn off this feature.

The default format is '%f\n%wx%h %b' which displays the filename over the image geometry followed by image size.

See the $opt_imgindexname option for a description of a more powerful per-image labeling mechanism.

When $opt_cache is enabled, a number of labeling features will not work correctly since they may refer to characteristics of the cached thumbnail rather than the original image.

The labels which are supported when caching is enabled are:

%b
(file size)
%f
(full filename)
%h
(height)
%m
(magick)
%n
(filename minus extension)
%w
(width)

Thumbnail Label Width

Variable:
$opt_thumblabelwidth=labelwidth
Argument:
--thumblabelwidth labelwidth

Specify the maximum column width (in characters) of label text. Label text longer than this is truncated to the specified width. The purpose of this is to ensure that the label is not munged due to excessive length.

Thumbnail Label Font

Variable:
$opt_thumbfont=fontspec
Argument:
--thumbfont fontspec

Specify the thumbnail title font. This is the X11 font used to title thumbnails (default 5x8). PERL's newgetopt module seems to have difficulties with the dashes in most X11 font specifications. If 'getopt' prints the usage message rather than doing what you want to, then try using the command line syntax --thumbfont=fontspec and you should have better luck.

Thumbnail Processing Hooks

WebMagick provides EMACS-like hooks that can be used to insert additional processing code fragments into the thumbnail generation code.

Read Failure Hook

Variable:
$opt_readfailhook=string

PERL code fragment to evaluate if an original image fails to read during the process of building a thumbnail. Usually this is due to the original image being corrupted. Your mileage may vary.

When the code fragment is executed, the name of the current image is in the variable '$imagename'. For example:

 $opt_thumbreadfailhook='unlink($imagename)';

removes the image, assuming that it is defective. In the case of images retrieved from the binaries newsgroups this is not a bad assumption.

Thumbnail Post-processing Hook

Variable:
$opt_thumbposthook=string

PERL code fragment to evaluate on the reduced thumbnail before saving it to cache or using it in the montage. The thumbnail image is available via the variable $image. For example:

 $opt_thumbposthook='$status=$image->Sharpen(factor=>40);
   warn $status if "$status"';

applies the PerlMagick Sharpen operation on the thumbnail,

 $opt_thumbposthook='$image->Set(colorspace=>"Gray");
   $status=$image->Quantize();
   warn $status if "$status"';

displays thumbnails in grayscale, and

 $opt_thumbposthook='$image->Set(colorspace=>"Gray");
   $status=$image->Quantize();
   warn $status if "$status";
   $status=$image->Emboss();
   warn $status if "$status"';

displays embossed thumbnails.

See the PerlMagick documentation for the many other operations which may be applied to an image.

Thumbnail Pre-Processing Hook

Variable:
$opt_thumbprehook=string

PERL code fragment to evaluate on the original image in memory prior to reducing it into a thumbnail. The image is available via the variable $image. For example:

 $opt_thumbprehook='$status=$image->Blur(factor=>80);
 warn $status if "$status"';

applies the PerlMagick Blur operation on the image. See the PerlMagick documentation for the many operations which may be applied to an image.

HTML Options

HTML Content

Allow Configuration

Variable:
$opt_allowconfig=1
Argument:
--allowconfig

Available only when also using $opt_javascript and $opt_tables, Allow Configuration gives the user the option to select their own frame style and number of rows and columns for the table. There will be an icon in the directory frame that will pop-up a new window which includes pictures of the available frame styles.

This configuration is accomplished with cookies. If the user has cookies disabled in their browser, their configuration will not be saved.

When a configuration is saved, it will be applied to all directories at or below $opt_prefixpath. For example, if $opt_prefixpath is empty (the default), the configuration will apply to all directories on the site.

JavaScript Mode

Variable:
$opt_javascript=1
Argument:
--javascript

When JavaScript mode is enabled, JavaScript code is added to the main index file (default index.html) to re-set the location to the JavaScript index file (currently hard-coded as "indexjs.html"). This results in JavaScript being loaded into the browser automatically if JavaScript is supported by the browser and the browser is one that WebMagick supports (currently Netscape 3.0X, Netscape 4.0X, and Internet Explorer 4.0X). Browsers that do not support JavaScript, have JavaScript disabled, or are not recognized by WebMagick safely ignore the JavaScript and operate directly from WebMagick's usual HTML files.

The advantage of JavaScript mode is that other than retrieving a few intial files and the images to be viewed, all HTML is generated directly within the user's browser, minimizing server accesses. In addition, navigation and presentation are dramatically improved since there is no need to pre-compute every possible viewing option and JavaScript has better control and knowledge of the browser than HTML does.

In order for JavaScript mode to operate correctly, the file 'webmagick.js' must be installed in the location specified by $opt_iconpath (see section Specifying WebMagick Icon Location) and the server must be updated to associate MIME type "application/x-javascript" with the extension ".js". Read your web server's documentation to see what is required in order to add new MIME types (if the type is not already supported).

Apache server: Update conf/mime.types and add the line

application/x-javascript        js

CERN or W3 server: Update config/httpd.conf and add the line

AddType .js application/x-javascript 8bit

Phttpd: Update modules/file.conf and add the following to the content-types list

        .js             application/x-javascript

Table Mode

Variable:
$opt_tables=1
Argument:
--tables

Use HTML tables instead of imagemaps for displaying thumbnails. This results in quicker navigation because smaller images are downloaded, and quicker directory processing, since no montages are created.

This option is available with or without JavaScript mode enabled.

README File Treatment

Variable:
$opt_readmevisible=1
Argument:
--readmevisible

Specify the handling of a README file. If the file designated by $opt_readme exists (default `README.html') then make it the first page seen when the user enters a directory. Regardless of this option, the help icon will appear if the README file exists which is a link to the file.

Address Information

Variable:
$opt_address=string
Argument:
--address string

Specify additional information to place in <ADDRESS></ADDRESS> tags in page frame. WebMagick copyright and support information is placed on all generated pages.

Anonymize

Variable:
$opt_anonymous
Argument:
--anonymous

Turn off the WebMagick copyright info and author's address on all generated pages. If you are operating a site that my mother wouldn't approve of, please use this option.

Page Header

Variable:
$opt_header=string
Argument:
--header string

Specify text to add to the page header in the thumbnail frame (a short term hack). This option is subject to change and will be eliminated if the thumbnail frame is templatized.

Page Title

Variable:
$opt_title=string
Argument:
--title string

Specify the page title. If this option is not specified, then WebMagick will generate its own title in the form 'Index of directory "subdirectory name"'.

Stylesheet

Variable:
$opt_stylesheet=URL
Argument:
--stylesheet URL

Specify a style sheet to use for all generated pages. This will override the following options:

Directory Page Template (No Frames)

Variable:
$opt_dirfmt=string

Specify a template (written in PERL) that represents the format used to generate the frame-less directory navigation page. This format will be seen by browsers that do not support frames. This is a guru-level option that may require reading WebMagick code.

Directory Page Template (Framed)

Variable:
$opt_frameddirfmt=string

Specify a template (written in PERL) that represents the format used to generate the framed (left frame) directory navigation page. This format will be seen by browsers that support frames. This is a guru-level option that may require reading WebMagick code.

Per-Image HTML

When per-image HTML mode is enabled, an HTML file is generated corresponding to each image. The HTML file is named based on the image file name with an HTML extension.

Enable Per-image HTML

Variable:
$opt_pichtml=1
Argument:
--pichtml

Enable per-image HTML file generation.

Per-image HTML extension

Variable:
$opt_pichtmlext='.ext'.
Argument:
--pichtmlext extention

Set the file extension to use for per-image HTML files. The final name is the image file name appended with this file extension. The default extension is '.html'.

Per-image HTML Nav Buttons

Variable:
$opt_pichtmlnav
Argument:
--pichtmlnav

Enable image navigation buttons (up, previous, next) on per-image HTML files.

Per-image Picture Title

Variable:
$opt_pichtmlputtitle
Argument:
--pichtmlputtitle

Enable per-image HTML picture titles. Default is on.

Per-image Picture Title Start HTML

Variable:
$opt_pichtmltitlestart
Argument:
--pichtmltitlestart

HTML to add before picture title (default is <P>)

Per-image Picture Title End HTML

Variable:
$opt_pichtmltitleend
Argument:
--pichtmltitleend

HTML to add after picture title (default is </P>)

Default Frame Target

Variable:
$opt_pichtmltarget='targetname';
Argument:
--pichtmltarget target_name

Set the default URL target name for links in per-image HTML files. There is normally no need to set this target because HTML is normally displayed in the current frame and there are no links by default, however, sometimes it is desirable for links to display in a different (or new) window.

Extra Top HTML

Variable:
$opt_pichtmltop='html_source';
Argument:
--pichtmltop 'html_source'

Extra HTML to insert above the image.

Extra Bottom HTML

Variable:
$opt_pichtmlbottom='html_source';
Argument:
--pichtmlbottom 'html_source'

Extra HTML to insert below the image.

Text Colors

Thumbnail Frame Background Color

Variable:
$opt_colorback=colorspec
Argument:
--colorback colorspec

Specify the background color for thumbnail frame.

Thumbnail Frame Text Foreground Color

Variable:
$opt_colorfore=colorspec
Argument:
--colorfore colorspec

Specify the toreground color for text in thumbnail frame.

Directory Frame Text Color

Variable:
$opt_dircolorfore=colorspec
Argument:
--dircolorfore colorspec

Specify the foreground text color of the directory frame. Defaults to the value of $opt_colorfore (see section Thumbnail Frame Text Foreground Color) if not explicitly set.

Directory Frame Background Color

Variable:
$opt_dircolorback=colorspec
Argument:
--dircolorback colorspec

Specify the background color of the directory frame. Defaults to the value of $opt_colorback (see section Thumbnail Frame Background Color) if not explicitly set.

HTML Link Colors

Thumbnail Frame Active Link Color

Variable:
$opt_coloralink=colorspec
Argument:
--coloralink colorspec

Specify the link (active) color for the thumbnail frame.

Thumbnail Frame Un-visited Link Color

Variable:
$opt_colorlink=colorspec
Argument:
--colorlink colorspec

Specify link (unvisited) color for the thumbnail frame.

Thumbnail Frame Visited Link Color

Variable:
$opt_colorvlink=colorspec
Argument:
--colorvlink colorspec

Specify link (visited) color for the thumbnail frame.

Directory Frame Active Link Color

Variable:
$opt_dircoloralink=colorspec
Argument:
--dircoloralink colorspec

Specify link (active) color for the directory frame. Defaults to value of $opt_coloralink (see section Thumbnail Frame Active Link Color)if not explicitly set.

Directory Frame Un-Visited Color

Variable:
$opt_dircolorlink=colorspec
Argument:
--dircolorlink colorspec

Specify link (unvisited) color for the directory frame. Defaults to the value of $opt_colorlink (see section Thumbnail Frame Un-visited Link Color) if not explicitly set.

Directory Frame Visited Color

Variable:
$opt_dircolorvlink=colorspec
Argument:
--dircolorvlink colorspec

Specify link (visited) color for the directory frame. Defaults to value of $opt_colorvlink (see section Thumbnail Frame Visited Link Color) if not explicitly set.

Frame Options

Enable Frames

Variable:
$opt_frames=1
Argument:
--[no]frames

Enable frames. This defaults to on, but is useful to turn off if you have a single directory collection.

Enable Frame Borders

Variable:
$opt_frameborder=borderenable
Argument:
--frameborder borderenable

Enable decorative frame borders with the value 'YES' or disable decorative frame borders by specifying the value 'NO'. These options are passed directly to the HTML's FRAMESET 'FRAMEBORDER' option in the generated pages.

Frame Border Thickness

Variable:
$opt_framebordersize=bordersize
Argument:
--framebordersize bordersize

Specifies the number of pixels allocated to the frame border.

Frame Margin Height

Variable:
$opt_framemarginheight=marginheight
Argument:
--framemarginheight marginheight

Specifies the number of pixels allocated to the frame margin in the vertical direction.

Frame Margin Width

Variable:
$opt_framemarginwidth=marginwidth
Argument:
--framemarginwidth marginwidth

Specifies the number of pixels allocated to the frame margin in the horizontal direction.

Frame Style

Variable:
$opt_framestyle=framestyle
Argument:
--framestyle framestyle

Specifies the frame template to use. Templates are currently specified for the range of 1-4 with the following effect:

  1. Simple two frame screen with directories listed in the left frame and imagemap or README displayed in the right frame.

  2. Three frame screen with directories listed in top-left frame, imagemap displayed in bottom-left frame, and README/Images displayed in full-height right-hand frame.

  3. Three frame screen with directories listed in left frame, imagemap displayed in top-right frame, and README/Images displayed in lower-right frame.

  4. Three frame screen with directories listed in lower-left frame, imagemap displayed in top frame, and README/Images displayed in lower-right frame.

HTML Meta Tags

Meta-Tag Author

Variable:
$opt_metaauthor=string

Specify author name to add to the HTML meta tags in generated HTML files.

Meta-Tag Charset

Variable:
$opt_metacharset=string

Specify HTML documents character set in case HTTPD can't provide it.

Meta-Tag Classification

Variable:
$opt_metaclassification=string

Specify any classification information to add to the HTML meta tags in generated HTML files. This may be used by indexing robots.

Meta-Tag Description

Variable:
$opt_metadescription=string

Specify page description text to add to the HTML meta tags in generated HTML files. This information may used by indexing robots.

Meta-Tag Expires

Variable:
$opt_metaexpires=string

Page expiration date to add to the HTML meta tags in generated HTML files. Should be specified in the form:

	"Tue, 20 Aug 1996 14:25:27 GMT"

Since the specified expiration time is absolute, use of this option implies a commitment to execute WebMagick with option --forcehtml as least as often as the specified expiration period.

This information is used by browsers and caching servers to determine when cached data becomes stale.

Meta-Tag Key-Words

Variable:
$opt_metakeywords=string

Specify keywords to add to the HTML meta tags in generated HTML files. Should be specified as a string with keywords delimited by a comma (e.g. "key1,key2,key3"). This information may used by indexing robots.

String Customization

Use the following variables to override the strings that WebMagick displays.

Variable:
$opt_msg_copyright = "Copyright "
Variable:
$opt_date_format = "%B %e, %Y" (see strftime(3))
Variable:
$opt_msg_directories = "Directories"
Variable:
$opt_msg_directory_navigator = "Directory Navigator"
Variable:
$opt_msg_images = "Images"
Variable:
$opt_msg_index_of_directory = "Index of directory"
Variable:
$opt_msg_index_of_files = "Index of files "
Variable:
$opt_msg_index_through = "through"
Variable:
$opt_msg_next = "Next"
Variable:
$opt_msg_page_navigator = "Page Navigator"
Variable:
$opt_msg_page_updated_on = "Page update on"
Variable:
$opt_msg_prev = "Prev"
Variable:
$opt_msg_produced_by = "Produced by"
Variable:
$opt_msg_readme = "ReadMe"
Variable:
$opt_msg_up = "Up"

Authors

WebMagick is currently maintained by Chris Lindell. It was written by Bob Friesenhahn with copious input from Anthony Thyssen. Anthony's diligent assistance as the first alpha tester is very much appreciated. Patches to support per-image HTML files and other usability enhancements were contributed by Andrey A. Chernov.

ImageMagick and PerlMagick are written by John Cristy. WebMagick would not be possible without his wonderful software. The author greatly appreciates Cristy's assistance with ironing out PerlMagick's (or WebMagick's) bugs and feature set during the development of WebMagick.

Obtaining WebMagick

The following packages are required in order to install WebMagick. Retrieve each package and install according to the following order:

  1. PERL version 5
  2. ImageMagick
  3. PerlMagick
  4. WebMagick

Each package provides its own installation instructions. Please follow them carefully.

Installing WebMagick

Basic Installation

Execute the provided configure script specifying a --prefix option for a GNU-style directory heriarchy you would like to install in (e.g. "./configure --prefix=/opt/tools"). This will generate a base copy of WebMagick that has been edited to reflect the location of your PERL interpreter and the X11 RGB database. The configure script will ask you questions to provide definitions of $opt_prefixpath, $opt_rootpath, $opt_iconpath, $opt_htimage, and $opt_maptype in the `webmagick' script and the sample `webmagickrc' file. Read the Introduction section of this manual to learn the details. A few examples are provided below. The script provides a running narrative with examples so it should not be necessary to read much documentation before running it. Then "make install". This will install WebMagick, sample icons, the WebMagick JavaScript interface, and TexInfo documentation. The WebMagick icons must be installed in a directory somewhere under the same server "root" as the images you want to catalogue. This root does not neccessarily have to be the actual server root. The "root" may be established via a server path mapping (rather than symbolic link) that offsets onto another filesystem. In order for JavaScript mode to operate correctly, the file `webmagick.js' must be installed in the location specified by $opt_iconpath and the server must be updated to associate MIME type "application/x-javascript" with the extension ".js". This file contains the various JavaScript routines that define WebMagick's JavaScript interface. See the formal documentation for more on JavaScript.

Installation Names

By default, `make install' will install the package's files in `/usr/local/bin', `/usr/local/man', etc. You can specify an installation prefix other than `/usr/local' by giving configure the option `--prefix=path'.

In addition, if you use an unusual directory layout you can give options like `--bindir=path' to specify different values for particular kinds of files. Run `configure --help' for a list of the directories you can set and what kinds of files go in them.

Option Index

Summary index of available WebMagick option variables. Many of these options have command-line equivalents.

$

  • $opt_address
  • $opt_allowconfig
  • $opt_anonymous
  • $opt_cache
  • $opt_cachedir
  • $opt_cacheformat
  • $opt_cachegeom
  • $opt_cachemin
  • $opt_coloralink
  • $opt_colorback
  • $opt_colorfore
  • $opt_colorlink
  • $opt_colorvlink
  • $opt_columns
  • $opt_date_format
  • $opt_debug
  • $opt_dircoloralink
  • $opt_dircolorback
  • $opt_dircolorfore
  • $opt_dircolorlink
  • $opt_dircolorvlink
  • $opt_dirfmt
  • $opt_dirindexname
  • $opt_forcecache
  • $opt_forcegif
  • $opt_forcehtml
  • $opt_forcemontage
  • $opt_frameborder
  • $opt_framebordersize
  • $opt_frameddirfmt
  • $opt_framemarginheight
  • $opt_framemarginwidth
  • $opt_frames
  • $opt_framestyle
  • $opt_header
  • $opt_help
  • $opt_htimage
  • $opt_iconpath
  • $opt_ignorefp
  • $opt_imgindexname
  • $opt_indexname
  • $opt_javascript
  • $opt_mapnetscape
  • $opt_maptype
  • $opt_maxgif
  • $opt_metaauthor
  • $opt_metacharset
  • $opt_metaclassification
  • $opt_metadescription
  • $opt_metaexpires
  • $opt_metakeywords
  • $opt_msg_copyright
  • $opt_msg_directories
  • $opt_msg_directory_navigator
  • $opt_msg_images
  • $opt_msg_index_of_directory
  • $opt_msg_index_of_files
  • $opt_msg_index_through
  • $opt_msg_next
  • $opt_msg_page_navigator
  • $opt_msg_page_updated_on
  • $opt_msg_prev
  • $opt_msg_produced_by
  • $opt_msg_readme
  • $opt_msg_up
  • $opt_pageindexname
  • $opt_pichtml
  • $opt_pichtmlbottom
  • $opt_pichtmlext
  • $opt_pichtmlnav
  • $opt_pichtmlputtitle
  • $opt_pichtmltarget
  • $opt_pichtmltitleend
  • $opt_pichtmltitlestart
  • $opt_pichtmltop
  • $opt_prefixpath
  • $opt_prune
  • $opt_readfailhook
  • $opt_readme
  • $opt_readmevisible
  • $opt_recurse
  • $opt_rootpath
  • $opt_rows
  • $opt_srcdir
  • $opt_stylesheet
  • $opt_tables
  • $opt_thumbbackground
  • $opt_thumbborderwidth
  • $opt_thumbcompose
  • $opt_thumbfont
  • $opt_thumbforeground
  • $opt_thumbframe
  • $opt_thumbframebgcolor
  • $opt_thumbframecolor
  • $opt_thumbgeometry
  • $opt_thumbgravity
  • $opt_thumblabel
  • $opt_thumblabelwidth
  • $opt_thumbposthook
  • $opt_thumbprehook
  • $opt_thumbshadow
  • $opt_thumbtexture
  • $opt_thumbtransparent
  • $opt_title
  • $opt_verbose
  • $opt_zoomfilter
  • %

  • %opt_icons
  • Argument Index

    Summary index of available WebMagick command-line arguments. All of these arguments have equivalent option variables.

    -

  • --address
  • --allowconfig
  • --anonymous
  • --cache
  • --cachedir
  • --cacheformat
  • --cachegeom
  • --cachemin
  • --coloralink
  • --colorback
  • --colorfore
  • --colorlink
  • --colorvlink
  • --columns
  • --debug
  • --dircoloralink
  • --dircolorback
  • --dircolorfore
  • --dircolorlink
  • --dircolorvlink
  • --dirindexname
  • --forcecache
  • --forcegif
  • --forcehtml
  • --forcemontage
  • --frameborder
  • --framebordersize
  • --framemarginheight
  • --framemarginwidth
  • --frames
  • --framestyle
  • --header
  • --help
  • --htimage
  • --iconpath
  • --ignorefp
  • --imgindexname
  • --indexname
  • --javascript
  • --mapnetscape
  • --maptype
  • --maxgif
  • --pageindexname
  • --pichtml
  • --pichtmlbottom
  • --pichtmlext
  • --pichtmlnav
  • --pichtmlputtitle
  • --pichtmltarget
  • --pichtmltitleend
  • --pichtmltitlestart
  • --pichtmltop
  • --prefixpath
  • --readme
  • --readmevisible
  • --recurse
  • --rootpath
  • --rows
  • --srcdir
  • --stylesheet
  • --tables
  • --thumbbackground
  • --thumbcompose
  • --thumbfont
  • --thumbforeground
  • --thumbframe
  • --thumbframebgcolor
  • --thumbframecolor
  • --thumbgeometry
  • --thumbgravity
  • --thumblabel
  • --thumblabelwidth
  • --thumbshadow
  • --thumbtexture
  • --thumbtransparent
  • --title
  • --verbose
  • --zoomfilter
  • Concept Index

    .

  • .webmagickrc evaluation order
  • a

  • active link color (directory frame)
  • anatomy, thumbnail
  • anonymous
  • author, meta tag
  • author, protect
  • b

  • background color (thumbnail frame)
  • background image, directory frame
  • background image, thumbnail frame
  • background, thumbnail
  • background, transparent color
  • border thickness, frame
  • borders, frame enable
  • bottom, html
  • c

  • cache, directory
  • cache, force generation of
  • cache, format
  • cache, minimum size
  • cache, thumbnail geometry
  • caching, thumbnail
  • charset, meta tag
  • classification, meta tag
  • color cube
  • color map, Netscape
  • color, active link (directory frame)
  • color, active link (thumbnail frame)
  • color, background (directory frame)
  • color, background (thumbnail frame)
  • color, color frame
  • color, foreground text (thumbnail frame)
  • color, text (directory frame)
  • color, thumbnail background
  • color, thumbnail border
  • color, thumbnail foreground
  • color, thumbnail transparency
  • color, un-visited link (thumbnail frame)
  • color, unvisited link (directory frame)
  • color, visited link (directory frame)
  • color, visited link (thumbnail frame)
  • colors, link
  • columns, montage
  • composition, thumbnail
  • configuration
  • cube, color
  • d

  • debugging
  • default, frame target
  • description, meta tag
  • directory frame background image
  • directory page, template (framed)
  • directory page, template (frameless)
  • directory, cache name
  • directory, prune
  • directory, skip, directory, skip
  • directory, specification
  • e

  • enable, per-image html
  • expires, meta tag
  • extension, per-image html
  • f

  • file name, directory index
  • file name, image index
  • file name, master index
  • file name, per-page
  • file name, README
  • filter, zoom
  • flag, cache
  • flag, README visible
  • font, thumbnail label
  • force
  • force, GIF
  • foreground color, text (thumbnail frame)
  • frame target, default
  • frame target, per-image html
  • frame, background color (directory frame)
  • frame, border thickness
  • frame, borders enable
  • frame, color (thumbnail frame)
  • frame, enable
  • frame, margin height
  • frame, margin width
  • frame, style
  • frame, template selection
  • frame, thumbnail enable
  • g

  • geometry, cached thumbnail
  • geometry, thumbnail
  • GIF, force
  • gravity, thumbnail
  • h

  • header, page
  • help
  • home directory
  • hook, read failure
  • hook, thumbnail post-processing
  • hook, thumbnail pre-processing
  • html, active link color (thumbnail frame)
  • html, bottom
  • HTML, force generation of
  • html, top
  • i

  • icon, location
  • icons, hash table
  • imagemap selection
  • install
  • j

  • javascript
  • k

  • key-words, meta tag
  • l

  • label, thumbnail
  • label, width
  • layout, montage
  • link, active (thumbnail frame)
  • link, active color (directory frame)
  • link, colors
  • link, un-visited color (thumbnail frame)
  • link, visited color (thumbnail frame)
  • localization
  • m

  • margin height, frame
  • margin width, frame
  • matte, color
  • meta tags
  • meta, author
  • meta, charset
  • meta, classification
  • meta, description
  • meta, expires
  • meta, key-words
  • montage
  • montage layout
  • montage, columns
  • montage, force generation of
  • n

  • nav buttons, per-image html
  • Netscape, color map
  • o

  • override
  • p

  • page, header
  • page, title
  • per-image html, enable
  • per-image html, extension
  • per-image html, frame target
  • per-image html, nav buttons
  • per-image html, picture title, per-image html, picture title, per-image html, picture title
  • picture title, per-image html, picture title, per-image html, picture title, per-image html
  • protect, author
  • r

  • read, failure hook
  • recurse
  • reduction, filter
  • rows
  • s

  • selection, imagemap
  • server, imagemap program
  • server, imagemap type
  • shadow, thumbnail
  • style, frame
  • stylesheet
  • t

  • tables
  • tag, address
  • tag, author
  • tag, charset
  • tag, classification
  • tag, description
  • tag, expires
  • tag, key-words
  • tags, meta
  • template, directory page (framed)
  • template, directory page (frameless)
  • text, color (directory frame)
  • text, foreground color (thumbnail frame)
  • texture, thumbnail background
  • thumbnail anatomy
  • thumbnail background, color
  • thumbnail border, color
  • thumbnail border, width
  • thumbnail composition
  • thumbnail frame background image
  • thumbnail, background texture
  • thumbnail, color matte
  • thumbnail, enable frame
  • thumbnail, enable shadows
  • thumbnail, foreground color
  • thumbnail, format
  • thumbnail, geometry
  • thumbnail, gravity
  • thumbnail, label font
  • thumbnail, label format
  • thumbnail, label width
  • thumbnail, layout
  • thumbnail, matte, color
  • thumbnail, post-processing
  • thumbnail, pre-processing hook
  • thumbnail, transparent color
  • title, page
  • top, html
  • transparent, background
  • tuning, GIF vs JPEG
  • u

  • un-visited link, color (thumbnail frame)
  • unvisited link, color(directory frame)
  • URL, prefix
  • URL, root path
  • v

  • verbose
  • visited link color (thumbnail frame)
  • visited link, color(directory frame)
  • w

  • width, thumbnail border
  • z

  • zoom, filter

  • This document was generated on 28 December 2001 using the texi2html translator version 1.51a.

    webmagick-2.02.orig/doc/fig/0040755000175000017500000000000007413200226015463 5ustar arafunearafunewebmagick-2.02.orig/doc/fig/Makefile.in0100644000175000017500000001434707413200226017536 0ustar arafunearafune# Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. # # Makefile for WebMagick Documentation Images # # Copyright Bob Friesenhahn, 1999 # SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ sbindir = @sbindir@ libexecdir = @libexecdir@ datadir = @datadir@ sysconfdir = @sysconfdir@ sharedstatedir = @sharedstatedir@ localstatedir = @localstatedir@ libdir = @libdir@ infodir = @infodir@ mandir = @mandir@ includedir = @includedir@ oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = ../.. ACLOCAL = @ACLOCAL@ AUTOCONF = @AUTOCONF@ AUTOMAKE = @AUTOMAKE@ AUTOHEADER = @AUTOHEADER@ INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = @INSTALL_DATA@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : DEFAULTFONT = @DEFAULTFONT@ HTIMAGE = @HTIMAGE@ ICONPATH = @ICONPATH@ MAKEINFO = @MAKEINFO@ MAPTYPE = @MAPTYPE@ PACKAGE = @PACKAGE@ PERL = @PERL@ PREFIXPATH = @PREFIXPATH@ RGBDB = @RGBDB@ ROOTPATH = @ROOTPATH@ VERSION = @VERSION@ XLSFONTS = @XLSFONTS@ AUTOMAKE_OPTIONS = 1.2 SUFFIXES = .eps .fig .gif .jpg .png FROM_PS_FLAGS = -verbose -density 144 -geometry 50% TO_PS_FLAGS = -verbose -colors 32 -colorspace gray FIG_TO_JPG_FLAGS = -L jpeg -q 100 # Additional files to distribute FIG_SRCS = frame-style-1.fig frame-style-2.fig frame-style-3.fig frame-style-4.fig thumbnail-anatomy-framed.fig thumbnail-anatomy-plain.fig JPEG_SRCS = montage-sample-framed.jpg thumbnail-sample-framed.jpg thumbnail-sample-plain.jpg GIF_TGTS = frame-style-1.gif frame-style-2.gif frame-style-3.gif frame-style-4.gif montage-sample-framed.gif thumbnail-anatomy-framed.gif thumbnail-anatomy-plain.gif thumbnail-sample-framed.gif thumbnail-sample-plain.gif JPEG_TGTS = frame-style-1.jpg frame-style-2.jpg frame-style-3.jpg frame-style-4.jpg thumbnail-anatomy-framed.jpg thumbnail-anatomy-plain.jpg EPS_TGTS = frame-style-1.eps frame-style-2.eps frame-style-3.eps frame-style-4.eps montage-sample-framed.eps thumbnail-anatomy-framed.eps thumbnail-anatomy-plain.eps thumbnail-sample-framed.eps thumbnail-sample-plain.eps PDF_TGTS = frame-style-1.pdf frame-style-2.pdf frame-style-3.pdf frame-style-4.pdf montage-sample-framed.pdf thumbnail-anatomy-framed.pdf thumbnail-anatomy-plain.pdf thumbnail-sample-framed.pdf thumbnail-sample-plain.pdf EXTRA_DIST = $(JPEG_TGTS) $(JPEG_SRCS) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_CLEAN_FILES = DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) TAR = gtar GZIP_ENV = --best all: all-redirect .SUFFIXES: .SUFFIXES: .eps .fig .gif .jpg .png $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps doc/fig/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status tags: TAGS TAGS: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = doc/fig distdir: $(DISTFILES) @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done info-am: info: info-am dvi-am: dvi-local dvi: dvi-am check-am: all-am check: check-am installcheck-am: installcheck: installcheck-am install-exec-am: install-exec: install-exec-am install-data-am: install-data: install-data-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-am uninstall-am: uninstall: uninstall-am all-am: Makefile all-local all-redirect: all-am install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-generic mostlyclean: mostlyclean-am clean-am: clean-generic mostlyclean-am clean-local clean: clean-am distclean-am: distclean-generic clean-am distclean-local distclean: distclean-am maintainer-clean-am: maintainer-clean-generic distclean-am \ maintainer-clean-local @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-am .PHONY: tags distdir info-am info dvi-local dvi-am dvi check check-am \ installcheck-am installcheck install-exec-am install-exec \ install-data-am install-data install-am install uninstall-am uninstall \ all-local all-redirect all-am all installdirs mostlyclean-generic \ distclean-generic clean-generic maintainer-clean-generic clean \ mostlyclean distclean maintainer-clean # FIG --> GIF %.gif : %.fig convert $(FROM_PS_FLAGS) -colors 32 $< $@ # JPEG --> GIF %.gif : %.jpg convert -colors 32 $< $@ # FIG --> JPEG %.jpg : %.fig #convert $(FROM_PS_FLAGS) $< $@ fig2dev $(FIG_TO_JPG_FLAGS) $< $@ # JPEG --> EPS %.eps : %.jpg convert $(TO_PS_FLAGS) $< $@ # FIG --> EPS %.eps : %.fig convert $(TO_PS_FLAGS) $< $@ # EPS -> PDF %.pdf : %.eps epstopdf $< all-local: $(JPEG_TGTS) dvi-local: clean-local: distclean-local: maintainer-clean-local: rm -f $(GIF_TGTS) $(JPEG_TGTS) $(EPS_TGTS) $(PDF_TGTS) # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: webmagick-2.02.orig/doc/fig/Makefile.am0100644000175000017500000000374107306017016017525 0ustar arafunearafune# # Makefile for WebMagick Documentation Images # # Copyright Bob Friesenhahn, 1999 # AUTOMAKE_OPTIONS = 1.2 SUFFIXES = .eps .fig .gif .jpg .png FROM_PS_FLAGS = -verbose -density 144 -geometry 50% TO_PS_FLAGS = -verbose -colors 32 -colorspace gray FIG_TO_JPG_FLAGS = -L jpeg -q 100 # FIG --> GIF %.gif : %.fig convert $(FROM_PS_FLAGS) -colors 32 $< $@ # JPEG --> GIF %.gif : %.jpg convert -colors 32 $< $@ # FIG --> JPEG %.jpg : %.fig #convert $(FROM_PS_FLAGS) $< $@ fig2dev $(FIG_TO_JPG_FLAGS) $< $@ # JPEG --> EPS %.eps : %.jpg convert $(TO_PS_FLAGS) $< $@ # FIG --> EPS %.eps : %.fig convert $(TO_PS_FLAGS) $< $@ # EPS -> PDF %.pdf : %.eps epstopdf $< # Additional files to distribute FIG_SRCS = \ frame-style-1.fig \ frame-style-2.fig \ frame-style-3.fig \ frame-style-4.fig \ thumbnail-anatomy-framed.fig \ thumbnail-anatomy-plain.fig JPEG_SRCS = \ montage-sample-framed.jpg \ thumbnail-sample-framed.jpg \ thumbnail-sample-plain.jpg GIF_TGTS = \ frame-style-1.gif \ frame-style-2.gif \ frame-style-3.gif \ frame-style-4.gif \ montage-sample-framed.gif \ thumbnail-anatomy-framed.gif \ thumbnail-anatomy-plain.gif \ thumbnail-sample-framed.gif \ thumbnail-sample-plain.gif JPEG_TGTS = \ frame-style-1.jpg \ frame-style-2.jpg \ frame-style-3.jpg \ frame-style-4.jpg \ thumbnail-anatomy-framed.jpg \ thumbnail-anatomy-plain.jpg EPS_TGTS = \ frame-style-1.eps \ frame-style-2.eps \ frame-style-3.eps \ frame-style-4.eps \ montage-sample-framed.eps \ thumbnail-anatomy-framed.eps \ thumbnail-anatomy-plain.eps \ thumbnail-sample-framed.eps \ thumbnail-sample-plain.eps PDF_TGTS = \ frame-style-1.pdf \ frame-style-2.pdf \ frame-style-3.pdf \ frame-style-4.pdf \ montage-sample-framed.pdf \ thumbnail-anatomy-framed.pdf \ thumbnail-anatomy-plain.pdf \ thumbnail-sample-framed.pdf \ thumbnail-sample-plain.pdf EXTRA_DIST = $(JPEG_TGTS) $(JPEG_SRCS) all-local: $(JPEG_TGTS) dvi-local: clean-local: distclean-local: maintainer-clean-local: rm -f $(GIF_TGTS) $(JPEG_TGTS) $(EPS_TGTS) $(PDF_TGTS) webmagick-2.02.orig/doc/fig/frame-style-1.jpg0100644000175000017500000003131707306037341020564 0ustar arafunearafuneÿØÿàJFIFPPÿÛCÿÛCÿÀßß"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?þ–¾þÄ_±í)ûZÁT¼uûEþÈŸ³Çïi?¶ÿÂï é~1ø×ð áOÅOi¾±ÿ‚aÿÁ:5‹ éþ!ñׄõí^ÏÃöz¾»®j–º5½äzu¾£¬ê·ÐÛ%Σy,ßOÿçà–_ô?ØÿßöuÿçsGìoÿ'ÿbÿ³ÿøqÿ®²ÿ‚i×ßôðü:wþ eÿHÓý€?ñ ÿg_þw4çà–_ô?Øÿßöuÿçs_Ñ@çà–_ô?ØÿßöuÿçsGü:wþ eÿHÓý€?ñ ÿg_þw5÷ýðü:wþ eÿHÓý€?ñ ÿg_þw5ñüþ “ÿÛð_Àoëÿ‚|þÄÕï?mÿø&O„ï5O þÊ´Fë¾=ÿ‚’~Êñ׆no´¿ÚÜÏáÿx'Ä~!ðw‹4iem;Ä~×uŸkךF©}g?îõ|ÿ,ÿ“uøsÿgÿÿÿצþÆôçà–_ô?ØÿßöuÿçsGü:wþ eÿHÓý€?ñ ÿg_þw5÷ýðü:wþ eÿHÓý€?ñ ÿg_þw4çà–_ô?Øÿßöuÿçs_Ñ@çà–_ô?ØÿßöuÿçsGü:wþ eÿHÓý€?ñ ÿg_þw5÷ýðü:wþ eÿHÓý€?ñ ÿg_þw4çà–_ô?Øÿßöuÿçs_Ñ@çà–_ô?ØÿßöuÿçsGü:wþ eÿHÓý€?ñ ÿg_þw5÷ýðü:wþ eÿHÓý€?ñ ÿg_þw4çà–_ô?Øÿßöuÿçs_Ñ@çà–_ô?ØÿßöuÿçsGü:wþ eÿHÓý€?ñ ÿg_þw5÷ýðü:wþ eÿHÓý€?ñ ÿg_þw4çà–_ô?Øÿßöuÿçs_Ñ@çà–_ô?ØÿßöuÿçsGü:wþ eÿHÓý€?ñ ÿg_þw5÷ýðü:wþ eÿHÓý€?ñ ÿg_þw5øƒÿÁ=¿`_ßðF?Û'â—ÁOØ{ö@ø?ñ7ÂÿðÏ?ðŒüEø[û4üøã¿ÿmþÕ|;¬ÿax»Â~ Ò×ïõ~ÿÁÑßò‚Û›þí›ÿ[ö} ¿ÿcù8¯ø+ýŸÿÃýu—üN¾ÿ¯€?cù8¯ø+ýŸÿÃýu—üN¾ÿ Š( Š( ¾ÿ‚–ɺü9ÿ³ÿÿ‚NÿëÓczûþ¾ÿ‚–ɺü9ÿ³ÿÿ‚NÿëÓczûþŠ( Š( Š( Š( Š( Š( Š( Š( Š( ¿àèïùAGíÍÿvÍÿ­‡û>×ïõ~ÿÁÑßò‚Û›þí›ÿ[ö} ¿ÿcù8¯ø+ýŸÿÃýu—üN¾ÿ¯€?cù8¯ø+ýŸÿÃýu—üN¾ÿ Š( Š( ¾ÿ‚–ɺü9ÿ³ÿÿ‚NÿëÓczûþ¾ÿ‚–ɺü9ÿ³ÿÿ‚NÿëÓczûþŠ( Š( Š( Šüýº?g xƒö¢ý„µ•ø£û_øKþOö¿ñÂߌ>ø[û{~Ü_| âxKþ ÛûhüNÑ4- áÇÂÚÁŸþìøð3á‹5=Oádž|%¬xƒXе Ÿj§ü%¾2_xÿíûJþÒ¿±ÇßÛKÄ?~xö‡ýŸ?cïø%ìñËÆ>øùûhüoðWм=§|:ñ§üÂûÄ:ÿÃÛÍcà/íQsñsãÅ_ü Ò´ˆ>;øãx«Å:€>KãOøÎIåÕ<(û½E|àßÛŸþßøgøµßÙÿðзÿí©û Èíö¿øD¿áÿ᾿âèÿÈ£mý½ÿ þsþDŸø’ÿÂ%ÿ CþFïÂÿoç‹ÿ‡ý´5߀_ÿhË?Ø#ö`Á? ÿàœÿà¨!Òîà¡¿“ÅWŸ¾?x/ö…ñ׃¼!£XÅÿÝ›H¸øÁ¦é³_Ž­üM _kšw‚ìõ[Âpé5›kíbóAþ‡¨¯Â'öãý§þþÜ¿¶ç…üQû8øƒâ×ì_üö)ýœGí í#áõñWÀŸ~ÖŸ±ÏìKà/ øCÀ_³/Š´4“Tø?á?ÚÇ¿ µï‹z¾ƒñ7ÂZ®£ûWê^=ðÃ_‰Ú„¾.¾èßðSºN£¤x«Ä?³ìÁà¯ÙóÆß´ÿíûû+xâÿÿn_xCQѼUû xWöæ×ï>"üwðÕ÷ìS/‚~|ñÏì1ãâŸhÿ~'j? ü+âý/ÅRøwÆÒhº¦„à³ÔWàÁ_ø+Í÷í9á/]x³öwÿ„sÃþøÿˆñÃßü-øÏûdü?Ñþ*x;þ ûq‹ø}ãý [øùûþÃ_uÿ‡þ ½ð=·Ä-NÏÃ>ñÿÀŸÚgÀšž¡ðwYñ¬¾Õ~!é¿£ÿðOŸx«ÆŸ¼}¬xÇÄÞ ñf¯gûoÿÁM¼'gªx›YÔuíF×¾ÿ‚’~Õþð/†m¯µK›«˜×ïõ~ÿÁÑßò‚Û›þí›ÿ[ö} ¿ÿcù8¯ø+ýŸÿÃýu—üN¾ÿ¯€?cù8¯ø+ýŸÿÃýu—üN¼þø*oÃoÚø»âÄï€?´ÁÙKÀŸ´Ä_Ù¿ÅŸ¶çÅ-öNÑÿgøïáÏíâ/ÙçX×týö¤ñíáÿ‡þ ý¡ü>¿´Ïøƒà•£ø~×XÓþ!|G“ÀŸ ,|Mã€~ŸÑ\þ¬ê:¦£âËï øƒÃ–Þñ¶£ëÍÏ…gÓ¼{§Oá_ ø†_xN/x›]Õìü?g«ëÚ§nm¼u¥ø/ÅMâ¯øšòÏÃ7^ ºðwŒ|YÐPEyÿŒ¾)xáÿˆþøOÅÚïöGˆ>8ü@Ô¾ü-Óÿ³5‹ÿøJü[ÿ…ûÿ ÀßðÃP~Ïú7ì¹ñÓþ*oé_ðœ| ðÿü.¯ìÄ“Ä:oü#?dÿ†ˆøÅÿ7ƒÿáñÇü&é^!›þÿ b{ý~pÁWüAâ¯~Æw×oŒêúßí?ÿüð5æ‹ðâv£ðcã/<+ñþ û0ü>ñ×Ão‡¿ô¿ˆÿ®|⊠ñ7ˆ~îKñ_áÆ'¸Xñ·†´‰oµkPƒÂßðKÿسÁß´w‚ÿk á×Ä ¾6ü5øûCüRøkªø‹ö’ý§|càO†¾;ý¬®¼W¨~ÑÚï/øÇ®|ðü-íOÆþ&Õ¼]¦xOáÞ£ÝkðkÚ}®§¥éV¦þÁ_²v‘ð³Æ_4ÿ…?gøeñö@øiûx»Ã?ð|I—û_öNø?áÏ‹>øuð§ûfËâ øG|?ñÇâ–Ÿÿ Ö™ªÙ|IÕÿá(ûV»ãN÷DðíΑñ…üuñ öZðÿÂ;ÿ²í?¥üdý¯?iñû9hÿ à¦ðS‰Ÿ4í#Nøyû/þÐÿ´ô¿tOˆ^øËÿ\Ò< áýKHøOâ߯†ü¥øWÅ^2ñPÓo Õ?iÿŒ?²Æ±ñÏàßÅÿÚƒâðûâÂïÙÓâÇí-…<}­ø‡þ ýðãöO‹ã^øq¥è>xöÏñ÷ÄÏ„Þ*ñUí…æ—â{oøÆóOú]ÿ‚\~Â~(ý¬uÛsÄß?á"ý£uˆ ~,j¾%×~&übÕü ©üSøðÛSøIðSâ^¡ð+Pøƒqð÷âÁÿëz͇Âß\ü3—Äõ_Sñ„õ-#Æw÷^ —Ð> ~Á_²wÅ/…’|ñߟí߆Rü@ý§>)IáŸøN¾$雼wûdxsöðŸí!®ÿlèþ1Óü@?ácxö·ý¡4ÿìÅÕFáøXjðŸá{ß x"çÔ/üöÐ×~|Ký£,ÿ`Ù‚?ü+ÿ‚p|ÿ‚ x‡K¹ÿ‚†üVO^|øýà¿ÚÇ^ð†cüvm"ã㛤~Í~:·ñ6}®iÞ ³Ôuo Ã¥ü@Öm¯µ‹ÍØ?áóö¾2ý²á?gÙö€ý¤~ø'ö¿ÿ†ý¡>?|4øgûG\ÿÂ’øÙ§Xù>;ñ–¥nß³5Çìå{û?üñž·à¿üYñŠkŸ‡¿t_´øËâ'…>øßàþ‰à?ˆ_@>¿ð·üöDð¯ŒuÿdþÐ5ñn¿ÿ /ûgVøÅûkþÚÿÿ´ᙾ;hŸ´¿À/µX|jý¡|}¦Iÿ £ãn‡ÿ ¯ƒÿЇöwü$¼9ûÏ |Oø ø«ëÿ†Ÿ | ðÚ—„þh_ðŽøWøñgâ–¡§ÿië¿Ú |g±Ö|'ð®óà„çñÅ»}á§Ž¼gðgÁ:·ˆ~5x'íÿØßþN+þ Åÿgÿðãÿ]eÿÓ¯¿èñâ—ìâ?Ž?´¦»?Æ¿ÙïáÿÆÙËÅðWý3ö£ñ7†~)Yü,øàO| Ñ?à„zì—£xç]øyâËý^_û#öºÒ4¯éžÔ<;qã cLÓþ"Úøz/Y[xÆ/ÆŒ?ðEۓijøËÅ~0oÚö²ý¯´_|X¿ø÷ñÂÛö„ýŽ`¿Ùþ Mû(øëã.‰ã¿þÈÏ‹g_‡šßüÄþ øÏðÃ_¿gÏ üý©üEàßÙWöXñ™âÍ;à×Ç-7௄þøµý®Ñ@Í„?àŸ~“ö‘ý~;øÿû3ühøSá þ ˆ—?ÿhŸøkoÚŸÆß lŸí?Û×Áß´Ùþoü ¾Ôi¬ífþÏh æ ö«ÿ‚uèþÿ‚‰~β_ì§û?~È?b_ÛïáÿÊ_·Â­ öcð&…£øÀŸðHOڋ´n®éþð÷Äo†ßüyÿ añö«øeû-|RÓ#Ö%¼øƒþ Yÿ&ëðçþÏÿþ ;ÿ¯Mýèïú(¢€ (¢€ (¢€ óÿ‰ | ñƒÃšo„þ"è_ð‘xHøðŸâ–Ÿ§ÿiëGÙüwð;⟃~5ü-×~Õ¡jeì¿ð‹üMøáfOs.­ÿdcx‹OÕü?©éW¾EyÿŒ¾øâˆþø³ÅÚö¿ˆ>|@Ô¾)|-Ô?´õ‹øEüw«ü,ø—ðSP×~˦jVZßÚ>|`ø‹áŸìÏ[jú<_ð‘lÁ§Åâ #BÕtÏ,ÿà˜ß²&ñOß´ý'ö€°ñoƒ¿hþÔ~Ò,ÿmÛ^×ág…~;|JñüSñÇ>øí Ÿ´?øOµ?Šÿ­|ká3áõ¯ƒ¼Uáω^?ð~»áëÿ xÇÄZ&£÷ýò›û~ÉÚGÂÏ|ÓþýŸá—ÄÙá§ìâï ÿÂuñ&_íÙ;àÿ‡>,øOáןí™üc/ˆ,?áðÿÇŠZü'Zf«eñ'Wÿ„£íZïŒu;Ý÷:GAâoØÛöxñÆ[oŽÚ÷ƒ¼Aqãdñ„üg«hv_þ-èß¼mñ ÀhÖÿ¾*|Pý4_iÿ³çÅŸŒ£ð§€›À?¾&ü0ñoÄÏÏð¯àÝ×…üW¤ÜüøY7„>Ÿ¢€ (¢€ (¢€ (¢€ üÿƒ£¿å·7ýÛ7þ¶ìû_¿ÕøÿGÊ ?noû¶oýl?Ùö€>ÿýÿäâ¿à¬_öÿ?õÖ_ðM:ûþ¾ýÿäâ¿à¬_öÿ?õÖ_ðM:ûþ€?œØ[öÕñÏìàÏÛã÷íÿ?øÁ{ð«ö—öÖý£¾xãöøYðKöqñ·ö'ìÿcã‰ZÁÏ:¿ü“önðÿÄ/ìïksë´¯‡¿µõÇü&Öº.•¯Mâ¿|2²ñ~«söísÿ†ðì/àOxÿö¡ý•ÿh„Ö^/øãßÛxsÅß¿à˜ñÚµÖ5{/x+þ ñ7üGDñƈ^·ð`ðçìýeñwíz?Ň^‚õ¾&êšÏ€4¯ÿáŠ~Ãÿú?·þ Â’ÿ†@ÿ†)ÿ„§ûWßð´ÿáV—ÿ…ý¿ý·ÿ§ü"_ð°?áÿ‰ö¯ü ÿðŽÂGþ—ÿ§ögüJ+çÿÚëþ eðÛö»ø§ñWâÞ§ñûö€ø+âŽ?²~Âßí¾è²uÿü&³çˆþ)ø›Ä µñgÇ_ÙoãwÄßÿÂ_{ño]Æü-ñï­|EÿïÃíKP±—ÄðÖ³b|Rÿ‚Xü?ý 5ßÙã±íñÇÄGí¦~ËšŒþßþÆÚGøÎßûör½¹ñN§âox/þ—XÒ5 hÞ!ÕüA.•c©øÆïø/¿ìQû<ü"Ð~ üUÒ> xWân§ÿ +y­þÊZï¿dO þÑÞðçì™ñ³âOìïñ‡Äz…‡Œ¿j_ üñ~ïŒ |Gàÿ…¾ øMñ‹â?Å?Ž÷Qjw_|ñËÀ_.>}¿á?ØCáï‡<}៊zÇÄ¿Œ=ø‰ þÓú7íyªx§Å—Ÿ ìçñ§Æ]/þ émÿÚ¾½ñ6‘à_…þ ðݯ‡üGðn ~ ë:ƒ´_ ÁÆ[Ë[ÃÒè_ÖÏᯟ¿ü/á&â ‰_~)|`ýžÿh;?~ÔMûLü1Òg{ã.±ðÏö¸ý¨Ñö]OO²½Š{h¾@ÿ‚–ɺü9ÿ³ÿÿ‚NÿëÓczûÂ~Ó¼á_ ø;G¹ñæ‘á?èÞÒï&ñ׎µŸøÛÆž žÚÖ)uŸxÇÄ:G¨µÎ±âgTÕï//§øƒþ Yÿ&ëðçþÏÿþ ;ÿ¯Mýèïú(¢€ (¢€ (¢€ (¢€?0?à¯?¼cð“ö6Ö¼ð§Å¿<ñ·öªøàOÙ7áG‹¾|øíñçâŸÿámß]OñÇâ÷ÃO‡_³‹Ú|RÔ¾ ~Îÿ²—†hÚCÁ·.±¢}ŸÄtØâ»Ô5;7úßȱçíéûBi²ì£ðkJðü4Çíu¦þ×ÿÿà›>2Õ¿j£ûL~Â:Ưÿ +öøùûKü'ý¡¾4X|aø%ûGür±øûB~Æ_~ |n×ô˯ xû_Ç´ }CÄ^›KÖô#ö{Ç>üKø™ð7âïŒô¿jž6ýœÓ¼]âÃà{ŸÜøŸ]¸Ô8 oØÛöxµøß¬þÑ1x;Ä ñ[]øÁáŸ×Ú¥ÏÅ?‹wžƒã/„ÿf¯~ÇÚ_Ä-á…玧ø]áÏ]~ÍÞ4Ö>øšox7KƒÆšuŸ„õ¯Ûë¾)ðuß~þПðVŸÛÏöƒýƒ?ଞ ýŸaøçö#ðÿíqû+|vøÍ þÞïáxãï¤ø‘á‰ÿd4µý4üOðÿìë𦆴¤¾.ø•¨þɾ4ñ£â߆ÿü;â¿x5u_ú¯ÊŠðDø&?Æ þ2Kã?ÙãÄ[~Ñž ½ñgí¢xöŒý©>øWãÿŠ®¾2øûãý·‰¾9xCáWƯø[âïˆ<;ñ[âg‹|Càgââ=Gáþ6àïÜø{Á> ð_‡&þÏ´ÿíEñ“âìAÿ»ø×ñ³âOÁKÙÃO‰ŸðQ¯OðàæŸ¨i??h¿ÙæKo|Rý ü)â‹«_xãáíSJÕ5íW¾óŽ—ôÿˆ?à¨ðwÁ?Ž¿ü{û.þÐ ᙿh ~ÏüñKâ§üïᆱð×XñÂ/„Ÿ<-ãÍwâ‡ÿn/~̲|?×ô_Žÿ <1¦6›ñîÿÇw^;ñ®ŸáÈü~˪^Ø~ŸÑ_ˆ0ÿÁwg½{á߯?†Ÿ³GíñŸÃþýŸþ=~ÔáøQ£þÌþ$Ñþ| øñ³ãÀ]WÇ>9øÁuûPi?³—ŽáeøÏö|øáªüðÏìõñ§ãoŒ~'xáwмq¢øy|?ŸwÏü]ÿƒŒ?à›<+ðOž2ñ—ˆ ·ÅOƒÿ³WÇxkMñÀgø™û7|3ý¬4ïë¿ uO‹5/ú_Åoø|-âÏøN<{àÙ;ÁŸ´¿Ä/†ÿt˜þ!ø×ÂÚ7‚|sð_øŒû½E~`ÁKÿh‹¿²ü1¿í3áÿg~Î^ý¯þ|ý¸´ø¯àŸÃÿ…šWìãûMý»àn—ñëÇþ;ø•à½gÇZü3¯Ç¯|ñ§ÂÿxF×\ðæ§ã];âd2ø1¤ñ¿Ã˜%ÿ‚øà†·ñÛö±ý±¾>|`øûjŸðQÿŒ¿²ìã£ø‹Ãß²úü3±ð_ìiû#üpð÷Æ­[ÅÒøkÂþ(øý{áÿ‹ÿµ÷ìõûPºÑí|k«ü}ñßÄ/~ÊÞ ø}ðïÂ~ø‰ãÿ|BýÞ¢¿gÏø.¿ì_ûEê:ž‹á]ãޝáoÚöyý•¾!>§ü)øù࿆Þ*ý­<+âGökø‹âό߲'ÅïÚ3àLßþ,|Iðøý­¼]á_Š&Ô|ñ÷^ðσ~.øwáæ‘¬EâxûÿØ“þ û5Á@ôïÙ{Týœ|ñƒ]¶ý¦|?ûUxšò-]þZj?³žû#ø«á_ƒ¼umûGhú_ÆíkWð¿ˆÿÁ/þ hw†¿à¹u¯ ÿÁ&~>ëÿ´gìç¨j³[ü?µ¶ŸÄ4ñ·ˆï´¿wVvv:wˆü+­t¯‡ºM®N|wÿ‚eü$øé­êž-—â—Æ‡^6ºý·üÿÑ<[á='öxñ¤þ øûðÏöGð·ìká ü3áoÿ~5|;>Ѿø?GñÆ'ˆ|¯øÓÂÿ`¶ø‡àïørçGð冋ú?_ÁN~/xïàw쉫x÷á×Ĉ x÷ÅÚoƒ|;ÂOˆºÅÿˆïtØü;áoÄL²”ñ‡öâÿ‚Q|yø]ðÏã7…ÿcí{þ ?ûKüDý«fÛ÷áWÅŸˆøãÿÛðg…uï|{ø…©|møsð›öø'ñ“ágÀ†Ú×Áÿüvý¤?lˆÖ¿g‹~Ôô~øoÄzŸÃ¿ü4Ð>~þÍðJmà÷Á?ÙçF‡âßÄ€tïÙöIý˜¿m~ÈÚ·<+£þ×ö¿²÷Â-?á†í<_ñÆ¿µ¾ÿ„WLÔ~!xOÀ_>ø›ölý£­| â­"Úãâ©ü5ø2ß ‡ßµM×Àïx?ÄÐx¿þ ÿñíû@ZþÍÿ >|tý—¿gØ÷⟇|wàÿ?¿hßkð߯ßÙûþ eewðÿRøeðçÄW:ßü]¬øãG¿ñ…t ü:’Cã› {û?ø*§ÁßønÏÁ>ü-ý±¾ ~Õ¿þü@øYðþx+Ägo ÈÛà 7ÅÖ^Ôü[§ÚPصWìÑð³öÈýœ~4~ËŸôŸí†_~ëþñ7‘aáËýcBþ×µ?ØÞ5ðü%šŠ,øuñ[ûÛî/_ÿÂEáÿßµøAtÍ*÷âN‘ÿ¿Ùußi—ºß‡mµ@ñÿüöøûdø+ö(Ÿâü%¿<[û@xsöOÔü]à|ño‡>þÓ-±½ŸBøEã_‡Zůøi¯ù Â;àü[ðìÿâßÙïáÿÅ?Ùü,ø‹ñÂ_<%ñKÿÀ=â¯ü–Žß³ÇÅŸ€Ÿ¿m/ÛÇz¿Åo|ñ?-~ |øañ—áDÿ³ÇÅ¿|pøVß4ü øuâ âN€úæ«ñ;Nø%?Æ_Á§é'ø«i¾Y|6?d¯ø%gìû~Ðÿ?iO¾ñ—¾2üýš>ÙéÞ+¿Ñ<[§|ø5û,|$ð¯ÁŸü=øCâ}SÃñ[Kðÿ‹<-à/‡ÚÅH|kñ#ÇSøóÅ^ðgˆ/®-î|?b‰ú?EQEQEøÿGÊ ?noû¶oýl?Ùö¿«ðþŽÿ”~Üß÷lßúسí}ÿûÿÉÅÁX¿ìÿþ묿àšu÷ý|ûÿÉÅÁX¿ìÿþ묿àšu÷ýQEQEðü³þM×áÏýŸÿüwÿ^›û×ßõðü³þM×áÏýŸÿüwÿ^›ûÐßôQEQEQEãÿ> xWã÷‚ô_øÇPñ›¤h_?g¯vwºÓ¬õøyñ—Dø³àÚ«öŸð¶‘ þÛÿà Vÿ4o þĶuO¿ ø± |WŸÅž%ö6¼qáÿü6øÙñàõ´ž3øÏ¯xÓà ï<3¤xKÆz¯ðóáÞ»á_Õú(óƒEÿ‚_üо|Kýœìü_ñ‚OüTÿ‚p|ÿ‚_ø‡T¹×üþ*³øðÁ´/|âýú/‡ðéÿ5-#ö”ñÕljµûíQð]棤øNm/áþmc¬YëÞ£~Â|ñ—ÅŸþ|KøÁð?Á?>0[~Ñ_?gOƒwŸ üðkã—í †÷ã7µÍ;á{~Ðz_ˆ×ßÿð±¿à©¿ôfÿ°þ,³öŠÿéN×ÀðTÙ{þ ›ÿ(ý„þ9þÅ?ð¢?`‚ÿðº?áYÅËÿ†öý¢¾#Â5ÿ ëãÃï‹?ò&ÿòü ý±ý±ÿ'öüzWöö¯ö¯úwسo?ÿÙwebmagick-2.02.orig/doc/fig/frame-style-2.jpg0100644000175000017500000002534407306037341020570 0ustar arafunearafuneÿØÿàJFIFPPÿÛCÿÛCÿÀßß"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?þ–¾þÄ_±í)ûZÁT¼uûEþÈŸ³Çïi?¶ÿÂï é~1ø×ð áOÅOi¾±ÿ‚aÿÁ:5‹ éþ!ñׄõí^ÏÃöz¾»®j–º5½äzu¾£¬ê·ÐÛ%Σy,ßOÿçà–_ô?ØÿßöuÿçsGìoÿ'ÿbÿ³ÿøqÿ®²ÿ‚i×ßôðü:wþ eÿHÓý€?ñ ÿg_þw4çà–_ô?Øÿßöuÿçs_Ñ@çà–_ô?ØÿßöuÿçsGü:wþ eÿHÓý€?ñ ÿg_þw5÷ýðü:wþ eÿHÓý€?ñ ÿg_þw5ñüþ “ÿÛð_Àoëÿ‚|þÄÕï?mÿø&O„ï5O þÊ´Fë¾=ÿ‚’~Êñ׆no´¿ÚÜÏáÿx'Ä~!ðw‹4iem;Ä~×uŸkךF©}g?îõ|ÿ,ÿ“uøsÿgÿÿÿצþÆôçà–_ô?ØÿßöuÿçsGü:wþ eÿHÓý€?ñ ÿg_þw5÷ýðü:wþ eÿHÓý€?ñ ÿg_þw4çà–_ô?Øÿßöuÿçs_Ñ@çà–_ô?ØÿßöuÿçsGü:wþ eÿHÓý€?ñ ÿg_þw5÷ýðü:wþ eÿHÓý€?ñ ÿg_þw4çà–_ô?Øÿßöuÿçs_Ñ@çà–_ô?ØÿßöuÿçsGü:wþ eÿHÓý€?ñ ÿg_þw5÷ýðü:wþ eÿHÓý€?ñ ÿg_þw4çà–_ô?Øÿßöuÿçs_Ñ@çà–_ô?ØÿßöuÿçsGü:wþ eÿHÓý€?ñ ÿg_þw5÷ýðü:wþ eÿHÓý€?ñ ÿg_þw4çà–_ô?Øÿßöuÿçs_Ñ@çà–_ô?ØÿßöuÿçsGü:wþ eÿHÓý€?ñ ÿg_þw5÷ýðü:wþ eÿHÓý€?ñ ÿg_þw5øƒÿÁ=¿`_ßðF?Û'â—ÁOØ{ö@ø?ñ7ÂÿðÏ?ðŒüEø[û4üøã¿ÿmþÕ|;¬ÿax»Â~ Ò×ïõ~ÿÁÑßò‚Û›þí›ÿ[ö} ¿ÿcù8¯ø+ýŸÿÃýu—üN¿ |Eû0üÐàœÿ·?í—ð“áßÃÿ„?ðP~×ÿðU¯~Ï¿µ‡Âß…­kþÑÞÿ‚¡þÕ:?ìíðsBø‰¯|?ñ?‹~"ÿÃBx·Fðì—©ü‘u˯Žÿ ¾%j³–›¥_ÛøòÏI“õûö7ÿ“Šÿ‚±Ùÿü8ÿ×YÁ4ëØ<3û~Åþ øËsûFx;öDý˜<'ûAÞxƒÅž,¼øíៀ_ tŒ·^*ñìÍ¯Ž¼Msñ?Kð¯§ñ-¼Gâk2ë¨øŽ wY‡X¹¼T¾YÀ>ñÏí1ñöÏöƒø“ðOötÓf„>6ø‹ÿ_ÐÿemS⟎~xÓâd÷…tßø"o‚nK|%à__õˆ¿%Õü ¡üÐü]qñCÓ´ƒZ‚t ¼;¬\ø:Îêóóâwügþ +¢ø/Ãÿµ†¿bσÿ¿cÏŽ_>#þÉß |]ûüCø_û)j?³ÇÛ/­û8|9ñ¯ÇmNÃö²ø¡ñ“ã‡ü3âOü_øƒûV|Ð?cŸÙËÆŸ<+á/Úè_þ&øáoŠ>:ø‡úÿ…Oð³þ?øL?áZ|?ÿ„·þü-øJá ðçü$ð´ÿáV‹ÿ…—ý·ý›ý§ÿ þ—üYßøL¾Õÿ ü*Ïø·¿Ú_ð‰Ä¢¸ OöNý–5¿üRø¥¬þÍ?³þ¯ñ7ãÃýCá?Æ¿ˆºŸÁ¿‡Wþ;øÁð³WÑô/ê¿ >)xºëÃ’øƒâÃýOÃþðÎ…¨x7Åš†¯áËÝú™s¦Ëe¤ið[€~@x¿ãWíõ/í»û!|ñwíyûkÿð‚~ßú'‡>)h?³7†¾4hÿüOð³âüSö¹øÝ§øö¤ýšµ?ÚÄÿð¡<ßøTÿu¯ƒ·ž"ø«ñÏß Kû<þܾøcû(j?¿hxW@ðö«{lZÊï÷û±ì_à/ øgÀ¾ý‘?fø'Á4oÚÁÞðŸÀ/…>ð¯„þ>øsN¶Ñü=ñÇÃ>Ñü'g¤h?4-"ÎÏKѾ%évv¾4Òôë[kj h"‰M7ö"ý‹ôo|[ñÖû"~ÌO¾?xǾøíã7à›|jð¯ÅMF=câ†~-ø†×Âqjÿü?ñWŠ-SǺ7Œo5;ÆŒqßx†ÛQ¹E”~P|xý¿mÙö„Ò¿bˆ¾4ýŸþ!~Ó_µü1Çü0|ÿüý®ô¯…ž0ÿ„Ïö˜ñŸ€?oßøM|7¤~Õ?t_ÿÃ~̺?„i?ùÿ´GÀÏì¯xÂÎëÄ^vŠöד}ÿÿ,ÿ“uøsÿgÿÿÿצþÆõì+ý—ü+ãïÚãáí_ã‡ðÿˆ5Ù×àÿÅO‡<=qà½:}GÀ~*øÿ­ø2_¿¦ñޝ}¬Ü¿ˆ5oü+øyðãáêø3Fø¨ø;ºÿÇí7ž øŸ¤|`Ðô…Þ?ÿ,ÿ“uøsÿgÿÿÿצþÆô÷ýQ@Q@Q@Q@Q@Q@Q@Q@Q@~ÿÁÑßò‚Û›þí›ÿ[ö}¯ßêüÿƒ£¿å·7ýÛ7þ¶ìû@þÆÿòq_ðV/û?ÿ‡úë/ø&}ÿ_~Æÿòq_ðV/û?ÿ‡úë/ø&}ÿ@~Ê¿·G‹k-à¿|3û ~×ÿ ~ |wø |RðOÇŠ^"ý‡cð$>ñü ®ë¾ømûhüJøÛaÿ Ž™u£iºf™mð’ÿXÒõOÅš‡4Ë]sTÑþÿ¯ÀÁ1¼cð×þ¿ã_~Òh GöÇñ÷üIJæ»ðwÇÿ¶¿ÇoŠÿ ,>;x«öR³ð~§ào|=ø¥ûBøÇöRøkö_ŠVx[Þ&øu¤xWÁÞðãÞèžñ‡ðßQÔ-n¾@ÿ‚¹ÿÁ-ð½÷ÃíkáÿíAû#j7žÒ~¾ƒañƒö˜±ð õ»_ÁK?äÝ~ÿÙÿÿÁ'õ鿱½}?û=x'Å_ >|øsã­sÄ'ñ·€>ü4ðOŒ|Kâω:Æ_x‡Å^ð^‹¡x‡\ñ7ÅýcÀß 5ŠÞ Õµ{ ËýgâN©ð×áæ£ãFâçÅÞð•Ω.§üÁÿ,ÿ“uøsÿgÿÿÿצþÆô÷ýQ@Q@Q@Q@Q@Q@Q@Q@Q@~ÿÁÑßò‚Û›þí›ÿ[ö}¯ßêüÿƒ£¿å·7ýÛ7þ¶ìû@þÆÿòq_ðV/û?ÿ‡úë/ø&}ÿ_~Æÿòq_ðV/û?ÿ‡úë/ø&}ÿ@Q@Q@|ÿ,ÿ“uøsÿgÿÿÿצþÆõ÷ý|ÿ,ÿ“uøsÿgÿÿÿצþÆô÷ýQ@Q@Q@Q@Q@Q@Q@Q@Q@~ÿÁÑßò‚Û›þí›ÿ[ö}¯ßêüÿƒ£¿å·7ýÛ7þ¶ìû@þÆÿòq_ðV/û?ÿ‡úë/ø&}ÿ_~Æÿòq_ðV/û?ÿ‡úë/ø&}ÿ@Q@Q@|ÿ,ÿ“uøsÿgÿÿÿצþÆõ÷ý|ÿ,ÿ“uøsÿgÿÿÿצþÆô÷ýQ@Q@Q@ÿ„üYá_øWÃ>:ð/‰¼?ãOøÓÃú7‹<ã ë:wˆü+âÏ øN¶Ö<=âo ø‡G¹¼Ò5ïëºEåž©£k:]åÖªi×V×Ö73ÛO­ÐWòEð_âÇíUgû*þ¾øAû_|`ýž|ðóþ ÁÿÊhÖ^øcðûöQñ>¯j?ðP¯Ú»Åÿ²?ÇxƒSøùû7|jñIñð§Áþ—áŶ…â ºŠ´µÖ5ÿ øªÚóQÓ/=ÿö—ý°¾<þË_ ÿhŸ‡>-ýµþ0jž6ð·üàßì‡ðCöƒø™ãÏø&ßì©§i ø‡ÿêýž¿k?Ù~Ó~&~Äþ/ýŸ<ðÁ1ø¿ã‡Ž,õï~Ë>*øûã/h ~ø>-~çÄ÷]€KÔWñqÿ€ý 5ÙÿãF§ã/ø+GÃÿƒ~-øû ÁA|qð7Æ´?Ùâ^ûqþ×ÿ¿kÿÚ“ÁÞø9?í3ã¿Ù£Cýžñ¯µm3Sš/‡þ(ý‘~ ~Ð^#ÐôX¥Ö7ø‹ágÃÿßþП |*ÔüsàÏÛá~‘ðàÞ¹ûB|=þÉð¿‚¾;ø[Åÿ ~4ü1“Æ~ÿoý´¿à¤ÿµÇoþÌß¶F±ñ@ø›û þÏúŸÄÿÛÃ_µð—À_øsã_Žÿn_|øåû|7øƒàM_àÏ€~0|$øðGàÿ‹ÿio|bøð›ÁþÑôoŠ<¨ø×â÷l¼gsà‹ éöŠ( Š( ¿àèïùAGíÍÿvÍÿ­‡û>×ïõ~ÿÁÑßò‚Û›þí›ÿ[ö} `øCâÏÛCAý­?àªV³§À/ك⧂dý·þ\êž!ø×û]üVøâ«??üþ Ñö§ø;À¿±í)¤j^·Ò!Ðï­|Mqã­'Q¼ÔuWK›Âv6Ú5ž±®ý?ÿ þ ›ÿFoûâË?h¯þ”í±¿üœWü‹þÏÿáÇþºËþ §_ÐÀð±¿à©¿ôfÿ°þ,³öŠÿéNÑÿ þ ›ÿFoûâË?h¯þ”í}ÿE|ÿ þ ›ÿFoûâË?h¯þ”íð±¿à©¿ôfÿ°þ,³öŠÿéN×ßôPÀð±¿à©¿ôfÿ°þ,³öŠÿéN×ȶ×o­_á‡ÁÍ?ã_ìÓû |?øeqûÿÁ,?á&ñwÂßÛ‡ãGÆéWü×öGŸFþÂøuâÏø'·Àïø‹íþ ‹JÓ5?íŠ^þÈÑïu v×ûn÷L¶ðî¯û}_ÁK?äÝ~ÿÙÿÿÁ'õ鿱½}ÿEPEPEP^ñKâÇÂÏÞ×~)|kø—ðÿàÿÃ/ ÿfÂMñâ—Œ¼9ðÿÀžþÛÖ4ÿèßÛ¾.ñf¥¤xHþ×ñ¯¥hZgö†¡oöýcSÓôË_6ööÚ }¿8?à«Þ*¼ý’ü=gà]gÃþñµ×í¿ÿ¶¶ðwˆ|YáGÆžмU?üóö?‹ÃÚω¼£ø³ÀZ¿‹è_ð‹ü2ø?ðÿÁ¿ ~xgûOXÖÿáð'Ãÿi¾ðŽ…ý³â-CWñ¯ý‘áý#OÓÿ´õÝWSÖ/þÏö­OP½½–{™8>>ËûmhOû|ñíáÿøÛöŒý·üYðÛÅßÿd?Ù«Àÿ õ?ƒ^ýƒ?k¿:g‚l¼û\x§þ áoøH.þ+| ðö£¯xæ$µžó³EáCðýÌž¿®þ`øþ {ãí[þ ¡à†'öÝðþ‘û>k¿ðQÿÚ[ö2×gŽ´ïüÒóã.³?€þ ~ÒÚf6‹û/| ýŒ¼%ñûà×ÁûÚûÀøCû=xëâïí­â/Œ¿ ³øim⯅쟴†µTþ§h¯ä‹Â?à úïì_ñ÷öŒ¼ÿ‚™þÓñøÛá_ü‡öDÿ‚ x{K¶ø3ÿåO Þ|}øýð§öÝñ׌|!¬ØËû Í«Ü|ÓuÙ¯À¶þÐ,uÍ;Æ–zv­âÈuOˆÍÍöy ûÿ‰¿mø)v½ÿ.¶øawñö`ý“¼àOÛ¼?ûüXøµ¤üBøËûf~ÂÚŽ“£iÚíGð{ö~øoûøÛöƒñˆ<_'¼Eñ;DøûàŸÚÛÀ?³wìçÁ|)ý§>ØÛ~Ï´§Æ?KÔQEQEQEøÿGÊ ?noû¶oýl?Ùö¿«ðþŽÿ”~Üß÷lßúسí}ÿûÿÉÅÁX¿ìÿþ묿àšu÷ý|ûÿÉÅÁX¿ìÿþ묿àšu÷ýQEQEðü³þM×áÏýŸÿüwÿ^›û×ßõðü³þM×áÏýŸÿüwÿ^›ûÐßôQEQEQEQEQEQEQEQEQEøÿGÊ ?noû¶oýl?Ùö¿«ðþŽÿ”~Üß÷lßúسí}ÿûÿÉÅÁX¿ìÿþ묿àšu÷ý~0ø[öÂø!û|`ÿ‚¯øëãÃ|`Òüí¿¦ø³[ñÃÙŸö•øýá_xWáçüƒþ ‹¬x¿Äß¼Cðá'Äý#áO‡ô"üj‹¬üI¼ð®©iÚwˆ/´››ëo xŽ]+ïÿ~Ø_<{ÃilÛã‚î~/ü`×>|6Ñ>5þÌÿ´¯ìõâ¯|LðçÁ¯|Õ´½?Â>|8ñL^‹áOÃx†×Ç÷Ú=¯ÃÝSQð¾«àí/Å7¾6€xq€>Ÿ¢Š(¢¼ÿRø¥àM#⟃~ jïÙþ&ü@øñ/â—„|3ý™¬Ký¯àOƒþ#øOá?ˆºïöÌ|¾°ÿ„wÄ~éÿÙšž«e¬jÿð”}«BÓõ;-ÄW:G P_ÁK?äÝ~ÿÙÿÿÁ'õ鿱½}ÿ_”·wdžþøÀ¾Õ&ézÏ€5ë=;âµ ÜØø÷ÂÞ¹¾ÒbÔ?W袊(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+ðþŽÿ”~Üß÷lßúسí~ÿWàüÿ((ý¹¿îÙ¿õ°ÿgÚè>6øOÅ^=ý™àæøÃ> ñ§¼iâ>ðwƒ¼'£j>#ñW‹ðömy«ëÞ ×µ{Ë=/FÑ´»;­GTÔn­¬lm§¹ž(›ëÿø(À‰ÿh?Á9¼%y¥ü`ŸÁ:í¿â¿|Iñ/ÁOüeøCâ¯øV×þ éû{hZO‰µ‹ÿüSàoˆŸ »®ø³Ä·þ‘ðËÄ_ðSý3ᦡÂßÚÇöìøðŠßö6Ò?àˆÚÄ[]KBðïÁOŒŸþx_áü¿·Ö™m§ê<3¦iÚ߯Éu…ºÏŒ¯ïu}WÂ7¿£ÿà¡¿³wí;¨ü=³ø3aûOëÚGÅoÃâχß|MûþÝ? > x“·ž¸ñ®“âkoŽ_ÿgüµðÿˆü7_xOYÔ|ug§xº{ýKðÅέ«ëÚ-ÿÛôü~Ò? ~$ø^ûö2¹øÏ¡Áoµ|0ÿˆ‰¾é~=ýƒu?ÚÇâ'íO¦hú¿í“áé?aÝ âןõü`ñÃÿüøoá}gökÔþ&x³Wð'Ĉ¾ ýžüMñCP׿g-#âV¥Óÿþ~Ý?>~Ò~1øÛ­~Ûú_ícðþCû)x›áåŸìãûBþÒ?<+«ÁK›Á·Þ©ñúÛÂýŽ>%øàOÆÏŒâO†¾E«øOHð÷t”Ó®~èúŒ¾ñf…c¬ÿKÔPòÅà~ÓQÿÁT<ãí[Cý·þ|)?ðQÿÚ[á7‰> Ù|6ÿ‚ã|jø{¨ü—à·í-ð¯áçíñCãÅoêßðMÍàÿÅOÚqþ|KðÃ/€ÿ³Ô^ øðÏÆüL>#±–óú¯€?य़òn¿ìÿÿà“¿úôßØÞ€>ÿ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¯Àø:;þPQûsݳëaþϵûý_€?ðtwü £öæÿ»fÿÖÃýŸhïÿØßþN+þ Åÿgÿðãÿ]eÿÓ¯¿ëàØßþN+þ Åÿgÿðãÿ]eÿÓ¯¿èùáø)û7þØ_?à†º…ÆûEþÛþ#øíkÿaºðŸÃÙkRðÀÏø«àOÇØ?d)üោ–¿f…?µ…‡Æ†1Òbøwà=Æ?üiãK]Fy#ñ ·ˆþ$Úé^$Ó¾`ÿ‚¹øöˆøs¬x—ào씿·ÿ„tφŸ°ügð·ã_‚üyÿðý²ÿ¢¾ÿ…ÿMÿ£7ý€?ñeŸ´WÿJvøXßðTßú3ØÿYûEô§hïúøþ Yÿ&ëðçþÏÿþ ;ÿ¯Mýèÿ…ÿMÿ£7ý€?ñeŸ´WÿJv¼ö–ð—ü7öˆøuáÏÃ/þÀÿ„ö€ý“¾:kÃÄh¯}¯þö§ø7ûKÿÂ-öøu¦‰öøN?áRÂý·öÉ¿áÿ„ƒþ?ìe`ê@¯ÔWÀð±¿à©¿ôfÿ°þ,³öŠÿéNÑÿ þ ›ÿFoûâË?h¯þ”í}ÿE|ÿ þ ›ÿFoûâË?h¯þ”íð±¿à©¿ôfÿ°þ,³öŠÿéNÐßôWÀð±¿à©¿ôfÿ°þ,³öŠÿéNÑÿ þ ›ÿFoûâË?h¯þ”í}ÿE|ÿ þ ›ÿFoûâË?h¯þ”íð±¿à©¿ôfÿ°þ,³öŠÿéNÐßôWÀð±¿à©¿ôfÿ°þ,³öŠÿéNÑÿ þ ›ÿFoûâË?h¯þ”í}ÿE|ÿ þ ›ÿFoûâË?h¯þ”íð±¿à©¿ôfÿ°þ,³öŠÿéNÐßôWÀð±¿à©¿ôfÿ°þ,³öŠÿéNÑÿ þ ›ÿFoûâË?h¯þ”í}ÿE|ÿ þ ›ÿFoûâË?h¯þ”íð±¿à©¿ôfÿ°þ,³öŠÿéNÐßôWÀð±¿à©¿ôfÿ°þ,³öŠÿéNÑÿ þ ›ÿFoûâË?h¯þ”í}ÿ_€?ðtwü £öæÿ»fÿÖÃýŸkïÿøXßðTßú3ØÿYûEô§kàø*?ì½ÿMÿ‚”~ÂÿbŸøQ°Áø]ð¬¿âåÿÃ{~Ñ_¿áÿ…uñ‹á÷ÅŸùáÙ~þØþØÿ„ûþF½+û?ûWûWý;ì?Ù·€ÿÙwebmagick-2.02.orig/doc/fig/frame-style-3.jpg0100644000175000017500000003001707316176053020567 0ustar arafunearafuneÿØÿàJFIFPPÿÛCÿÛCÿÀßß"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?þ–¾þÄ_±í)ûZÁT¼uûEþÈŸ³Çïi?¶ÿÂï é~1ø×ð áOÅOi¾±ÿ‚aÿÁ:5‹ éþ!ñׄõí^ÏÃöz¾»®j–º5½äzu¾£¬ê·ÐÛ%Σy,ßOÿçà–_ô?ØÿßöuÿçsGìoÿ'ÿbÿ³ÿøqÿ®²ÿ‚i×ßôðü:wþ eÿHÓý€?ñ ÿg_þw4çà–_ô?Øÿßöuÿçs_Ñ@çà–_ô?ØÿßöuÿçsGü:wþ eÿHÓý€?ñ ÿg_þw5÷ýðü:wþ eÿHÓý€?ñ ÿg_þw5ñüþ “ÿÛð_Àoëÿ‚|þÄÕï?mÿø&O„ï5O þÊ´Fë¾=ÿ‚’~Êñ׆no´¿ÚÜÏáÿx'Ä~!ðw‹4iem;Ä~×uŸkךF©}g?îõ|ÿ,ÿ“uøsÿgÿÿÿצþÆôçà–_ô?ØÿßöuÿçsGü:wþ eÿHÓý€?ñ ÿg_þw5÷ýðü:wþ eÿHÓý€?ñ ÿg_þw4çà–_ô?Øÿßöuÿçs_Ñ@çà–_ô?ØÿßöuÿçsGü:wþ eÿHÓý€?ñ ÿg_þw5÷ýðü:wþ eÿHÓý€?ñ ÿg_þw4çà–_ô?Øÿßöuÿçs_Ñ@çà–_ô?ØÿßöuÿçsGü:wþ eÿHÓý€?ñ ÿg_þw5÷ýðü:wþ eÿHÓý€?ñ ÿg_þw4çà–_ô?Øÿßöuÿçs_Ñ@çà–_ô?ØÿßöuÿçsGü:wþ eÿHÓý€?ñ ÿg_þw5÷ýðü:wþ eÿHÓý€?ñ ÿg_þw4çà–_ô?Øÿßöuÿçs_Ñ@çà–_ô?ØÿßöuÿçsGü:wþ eÿHÓý€?ñ ÿg_þw5÷ýðü:wþ eÿHÓý€?ñ ÿg_þw5øƒÿÁ=¿`_ßðF?Û'â—ÁOØ{ö@ø?ñ7ÂÿðÏ?ðŒüEø[û4üøã¿ÿmþÕ|;¬ÿax»Â~ Ò ~пf¿I¨ÙéÚ®— ¶¡ã¯ÙÏâ_¿jÞ{mfò[¯ êž!¼ð­ö£•¬_h×¾…¡ßiÞÁE8? l>$ü(ÿ‚1þÅÿ´w‰Ÿ´¿i¯ÚKþcâïk?¿mÏÚÇÆš?¼wñ_ö«ýŽí¼sáÙ¼Mñ'Æ?ÿáEü?øÍÿ KÆ^øÁÁhúç#øÝàFÿ…%ðÛþ ‘ñKFþÂÔüYû<üñ£ÿ §‡ÿचUž§ý¡áþ cá&¡okÿ }—Œ­µ ýeû.| Ó¾ü"ýš,ü äüøÿ éÿ §Á_ð“xÆOøEá“|cðïÇÿ³ÿüTrø…ü[®Ââß…Õ¿â£×µøJ¿°>Áã_øHôÍSZ²Ô~øïÿ¿ý‹?iøóÅŸ¾|@¸ñÅ?øY|LÔ<ûI~Ó¿ÿáahÿ>~Ï_>(xGƶ¿>1øËÅüuðËöSýŸü3â?‡ZÕµï5øWVz̾ÿ„ƒ[ñF«­€|A¨Á]~>øÁ¼uðgö:ø?â­#â·ìÁÿ›øù⫉߶>j> ñWü¿ãï‹?g?„_|?…c_Œ6Þ7ðÿÂÿxe5OˆÿuÏj3øVý¯¼1ðóVÕí‡uÏüqý·?n-oÆÿ³—…üû5ü?¶ý£~ÿÁ_ôßÙÇÿ<ûiø¶ÛàOÆxßþ ñ_ö£¼ñ~9øöeøuâðÿág‡þ4xsâçˆü{û 𯇴k/ ë7‡íõÛÆ'G=LjæùƒÀŸðQ¿Ú;ã}¯ì·áŸ‚Ÿ±·Ãý3ãoÆŸ‡ÿ¶÷ˆ¾2ü0ý¤?k ¯…Ú?ÀoþÀ´wÁßÙ3ã·Ã­â'ÀÿÙËöªÓ>0ùÿ~(j¶ÞñvŸ£x+G×ü áüYu“©øŠ/ i_/øoþ §âx«ö_Ó4Ùëàÿ‰´žÿ‚bx›âàO_µÄ?‰Ÿ³6ÿ1Ô~x{ÀöߥðgüŸXý—>øƒ@×>"뺟‚<'ñö¸øQ⯟|- x»ÃZ6ƒ«üL𗃟õÿàŸì_û0~ÎwÀ½àoÂü3Ò?f¿ƒÿ~|Òü3{â };Â? þ.ø«áw޾(éw63ëÞ-ñümðká÷Œ|YãÿÅâ/ˆZߊ´ÝgÄ7Þ)›Wñ§¯.ŸÀßi_ øJïâÂÿ ~Ïÿ-¼;ñëF›ÇÛ ¼#âÍCÄW¾-Ò¡×(€øñëXø¡ûfþÏš‡æøàÿ‡÷¿ÿà¼~ñ7ÃÝwãŽþ&èþ&ñßì¿ÿIý‘þèßu ¼YwÿeUø[áµ›GýŸü ñ7Sø)ðÆ{/‡úUµ½ßëõx¿eÏ? |cáïø+Àߨ¾-ð¯ü5ö­ÿ 7Œu°ÃhüvðÏí/ûKÿ jÞ!¿Ó.¿áe|mðw‡Ðßÿ±¿üœWü‹þÏÿáÇþºËþ §_×À±¿üœWü‹þÏÿáÇþºËþ §_ÐEPEP_ÁK?äÝ~ÿÙÿÿÁ'õ鿱½}ÿ_ÁK?äÝ~ÿÙÿÿÁ'õ鿱½}ÿEPEPEP_€?°÷…5Œ¼kã/ˆ¿?à§þ"½Ò?oÿø(Lí9ÿñÞ‘û[èÿ¿nÏÚ[Cø[áøf þ 9¦x‚_‡þðÿÃÿü ÿ…u?ìU/5»í#ìÞ"ðî¯ðÊÿSñ¥ïïõyÿÃO…¾ø?áÍK´/øG|?«ü@ø³ñKPÓÿ´õ_í;øãñOÆ_þ)k¿j×u Nö/øJ>&ü@ñw‰¿³ ¹‹GÑ?µÿ±¼;§é°Ó4« ÆGþ ãñÏDýš¿bŽÞ!ýœf Æß·¿‡×Ç¿?g/öªý°¾0üeñ?ÃÝ[à‡þ:èš—…¾~Í?ðJ_ŽŸ¼eâ ø[Zñ‹|wGø`Ÿ þ A£xê_‹~0¹ø©g¦xhÔ?ி|Gà¿^:ø3û|ñV‘ñ[ö`ÿ‚Mü|ñU¿ÄïÛ ÆŸ 5ø«þ ßñ÷ÅŸ³ŸÂ/‡¾‡Â¿±¯Æoøá¼2š§Äˆ:ç5ü+~×Þøy«jöƒCºûÿÄŸðN¿ÙWÄ~ýœ¼o |`ð‘û&|¿øðóà§íWûW|ñW‚þ jšw­/Qø{¨xëàÆÏ‡¾6ñ߇ﭾ|(–ꈞ!ñdóê> Òµ‰.WkÛë£á×ü“ö=øWà¿ü>ðwÃ/Gáo øöVðŸ‡-?øëö|øÁû*xÛâ‡ïn|cû>|wðö£á‰Ÿ ¼U xƒXð§ˆtmSNÖ4ÍW¼ðý毠Þk~ñ6©áÏ j>3ø{ªx[Å÷Þð­Î¹/‡tÃÇ?±·ìññ‰#_ðwˆ4ý_â·Æ ã÷Š øBømðÛBÿ„Â^þÓžÚÚ}OXñ±ªë Ö5x³ÅÞ.ñg‰µ cž;øã¿ëç¾"üEñ¶¹âüFñ߈ÓúEsú6³¨êš‹,o¼'â[xsÄÚ6¬k7>ŸNñî?…|3â|Yá8¼=âmwW³ðýž¯¯jž¹¶ñÖ—à¿7мâkË? Ýx&ëÁÞ1ñgA@çþ2ø¥àO‡þ#øOá?k¿Ù øãñRø[ð·OþÌÖ/ÿá(ñÞ‘ð³â_ƽCBûV™§ÞÙhŸgøeðâ/‰¿´üEs¤hòÿÂ;ý¡/ˆ5} JÔý€ øþ Yÿ&ëðçþÏÿþ ;ÿ¯Mýëïúøþ Yÿ&ëðçþÏÿþ ;ÿ¯Mýèïú(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ üÿƒ£¿å·7ýÛ7þ¶ìû_¿ÕøÿGÊ ?noû¶oýl?Ùö€>ÿýÿäâ¿à¬_öÿ?õÖ_ðM:ø‚Óá?íUãoÙWöÂÿ‚rjŸ²Æ[~Ô??à¨>‹ö»ñ7ÄÙGPýžøWyðÂsø¿âݾðÓÇ^3ø3à[Ä?¼öÿìoÿ'ÿbÿ³ÿøqÿ®²ÿ‚i×ßôøƒñKöñÇÚS]Ÿã_ì÷ðÿãìåâø+þ™ûQø›Ã?¬þ|@ð'ˆ¾èŸðB=?öKѼs®ü<ñeþ¯¯ý‘û]iW„tÏ ê¸ñ†±¦iÿm|=ƒ,­¼cãÆø"‡íÉâYüeâ¿7í?ûY~×Ú/ˆ>,_ü{øámûB~Ç?°_ì¿ÿ&ý”|uñ—Dñßd gÅ¿³¯ÃÍoþ â|gøᯇ߳ç†~ ~Ôþ"ðoì«û,xƒLñfðkã–›ðáWÂüZþ×h æ‡ÂðO¿ÉûHþο<ÿUðÿì»ðïáoüáÏÄÃà{Ÿ‹¿²ÿŠüU§x.÷öøÍð—Å_´Þû0xW⧈?dŸÙcÃþý¢oeøšÏö\ø·ã?¿µÙë¼eð¶çâ'Áß„V—ßMÿªý¬o?g½ágàœ¿ð¦?k¯~ÈðT…¿¶/íËÿ yðÛÄŸðòŸüý™þ4|)ðÆ…ÿ ¿ÄKŸŒÿ´Oü5·íOão…?¶OöŸíëàï‚Z?ì‡ÿ ·þ_j 4Öv³g´PóûUÿÁ:ôÿÁD¿g?Ù/öSýŸ¿d‡±/í÷ðÿáÅ/ÛÇáV…û1øBÑü?àOø$'íEá?Ú7@×tÿ ø{â7Ão‡þ<ÿ†°øûUü2ý–¾)iž øMñ#Xðÿ-´Ï?Ä>Óu«þ¿ÁK?äÝ~ÿÙÿÿÁ'õ鿱½}¿má? Ùø«YñÕŸ†|?kãoøÃ>ñŒm´m:k¾ð^£âÍcÁÞÖ|C²êú§‡ü'«ø÷ÇZ§†tkëÉôíQñ§‹/´»k[ŸëÞ|Aÿ,ÿ“uøsÿgÿÿÿצþÆô÷ýQ@Q@Q@Q@Q@Q@Q@Q@Q@~ÿÁÑßò‚Û›þí›ÿ[ö}¯ßêüÿƒ£¿å·7ýÛ7þ¶ìû@þÆÿòq_ðV/û?ÿ‡úë/ø&}ÿ_~Æÿòq_ðV/û?ÿ‡úë/ø&}ÿ@Îì-ûjøŽçö@ðgíÇñûöÇÿ‚Ÿü`½øUûKûk~Ñß)ÁN¬~þÐïìñá?Ø¿ö¿øãâ #ö€Ó?eÍ?Æ oÿcm#Àž(øíû iÿ·M×´)~5þØügoý‰û9^Üø§Sñ7‰¼áßK¬i‡…4oêþ —J±Ôüãwüßö(ýž~h?~*é<+ñ7Sÿ†•¼Öÿe-wÇß²'…ÿhïøsöLøÙñ'öwøÃâ=BÃÆ_µ/†þø¿wÆ…¾#ðÂß|&øÅñâŸÇ{¨µ;¯‚>øeà/‹¾ßðŸì!ð÷Þ>ðÏÅ=câ_ÆüDÐiýö¼Õ!YÇ㿌oñ0íÿ„ÿ¼ ñÇágÃO ußøJ>|`øàߊ_¼Mý™¬hŸð‘xâ‡4ßxG]þÆñŸ¤xƒHþ×ðþ¯§êٚkhû.§§Ù^Å=´_ ÁK?äÝ~ÿÙÿÿÁ'õ鿱½}¿á? éÞ ð¯†|£Üø‚óHðŸ‡ôo éwž,ñgм{â«­;BÓ­´»ŸxëÇZψümãOOmkºÏ‹³ñW5/N¹¾±ðŸ†o,kŸ?eÿ éžñ_ÅÿØ¿Âþ ý¡tëÛ¿ˆ5Šuÿ|ø·¨Þ[|ýªSAøSñ‡ã’è?ÒïügöKºýÿgü6‡Ã?´Ãÿ x·ö€ø—ñoÀ ÿiˆ³‹|wðÓGøká‹ßxkGðìyàï þÊ_³¿ÃýKâ§Ä/x#àWÀsâ4]űøæãÄñoÄüøZèÿ‚üø¯ðOö øïð‡Ã?>+øKþ ñÁß¾iþ½øE{¬xX×>|Vø×ãÙþ1Ýj_t¯ hð¡¼%ðC⦗ñ§Ã¾ ñO¼w¡øïÁº¯€<)áøµ#ÒŸíÿ ë:ˆü+áŸëñ€µ}{Ãú6³ªxÅ—>¼ñW‚õSN¶¾¾ðŸ‰¯< âox&ëĹž]Y¹ðwŒ|YáYõ;™|=âmwHk=Rëðþ õÿØý¡þÿÁBþ4êßü3ð}¿aÏØÿĵ³ÿ¢]àÿÂO j>Ó¿à¥þ>ø}ñÛö‚ðŸ­|ñ ZÕþxöPÕþø—à?‚nu߆ÞñWÄ? üxø’4iŸáðÿà àØoþÛûf|4ñ§ì+âÚïRý§þ$üvýŸüAûxûáWÆO„þ2ÿ‚|ø5û0| øQð áß~Ãß~%Ûx?â_íáâøÃOý ~ëÿfËÿþÇ¿µÌþ8ðoįˆ-øYñ'ã·íñgá€ö;E~.ÿ‚=ÁOÿá1ñ´¼ÿ Ÿáý×ü-ø"‚ ñÏÇ~Ñßñ¤¯¿nˆ¾#ý¥&Ñþ!øëáÿ‰ìü#_Úç„ü'á_xWÃ>ð/†|?à¿ø/Ãú7„üàï èÚw‡<+á? øsN¶Ñü=០ø{G¶³Ò4èZEž—£hÚ]®¥éÖ¶Ö66Ð[AJÐQEQEWàüÿ((ý¹¿îÙ¿õ°ÿgÚýþ¯Àø:;þPQûsݳëaþÏ´÷ÿìoÿ'ÿbÿ³ÿøqÿ®²ÿ‚i×ßõðìoÿ'ÿbÿ³ÿøqÿ®²ÿ‚i×ßôQEQEWÀðRÏù7_‡?öÿðIßýzoìo_×ÀðRÏù7_‡?öÿðIßýzoìo@ÑEQEQEWçû^?í;?þYÿÁ;iÿŠß³æ½ñƒã—ìŸñâ—‹.`ËÏ€^$Ó¾|eñßìÃñËVñ7ÃßþÙ|dñÁû_x/ÇVºÎ}ð&ÿÅ^.ð]Ëiõé5kÿô~¿0?aïØ^×àý÷~/|EŸö€ðïÆ _ö¿ÿ‚„üRÓüÿ ‰ûGjÿn< ñÇöÉý¥¼cð·]ÿ†fо:j²Ä_ð”|øáÿfOð®-cDñޝÿ _ˆ´ý#ㆧ¨Ù}¿ðSözøû5øWPð/ìçð;àÿÀêÞ ºñf©à <ð¯Âº—Н´í+G¾ñ6¡áï躑yâ Í#BÐô»­fâÎMFãNÑ´«®^ÛN³Š`¯å Æ¿ðKOø_ö@ÿ‚J~Ï7ü»áýÿ‡þ~Ï÷¾)ý»çøû/ÿÁ#þ/þÑÚgíOìÿû9|:ºÒ4_ÁA¼[oû9YÂàñž‰âoþÐ_<'࿎?~ ]~Î ¼)m­è¾ññtG‚¿à“ß~1|ýš`ý¥ÿ`χú×Ă߲üåû4A¦|t¶ý–>(øÂðÅß·×ÅCþ ¤ø[]Óxþ ÇûüðG‹| àÚ»FÕd øRÿµÿ߈þ4ñ7Á¯Ú+žð猿â¡ý¡ü2ÿð½~~Í·þ+ýžÿ‚o~ÏìûüýïÇÆ-¾xÄ:…ôŸß<+ñÃã/…¾ÝxãÅ×Ã/|Bøƒà/ øOáÛøƒÀ_õO x.oü5¶ñÃ?…0h6ÿ ¾üIø·àŸè?üböýQ@Q@Q@~ÿÁÑßò‚Û›þí›ÿ[ö}¯ßêüÿƒ£¿å·7ýÛ7þ¶ìû@þÆÿòq_ðV/û?ÿ‡úë/ø&}ÿ_~Æÿòq_ðV/û?ÿ‡úë/ø&}ÿ@Q@Q@|ÿ,ÿ“uøsÿgÿÿÿצþÆõ÷ý|ÿ,ÿ“uøsÿgÿÿÿצþÆô÷ýQ@Q@Q@Q@Q@Q@Q@Q@Q@~ÿÁÑßò‚Û›þí›ÿ[ö}¯ßêüÿƒ£¿å·7ýÛ7þ¶ìû@þÆÿòq_ðV/û?ÿ‡úë/ø&}ÿ_~Æÿòq_ðV/û?ÿ‡úë/ø&}ÿ@Q@Q@|ÿ,ÿ“uøsÿgÿÿÿצþÆõ÷ý|ÿ,ÿ“uøsÿgÿÿÿצþÆô÷ýQ@Q@Q@Q@Q@Q@Q@Q@Q@~ÿÁÑßò‚Û›þí›ÿ[ö}¯ßêüÿƒ£¿å·7ýÛ7þ¶ìû@þÆÿòq_ðV/û?ÿ‡úë/ø&}ÿ_~Æÿòq_ðV/û?ÿ‡úë/ø&}ÿ@Q@Q@|ÿ,ÿ“uøsÿgÿÿÿצþÆõ÷ý|ÿ,ÿ“uøsÿgÿÿÿצþÆô÷ýQ@Q@Q@Q@Q@Q@Q@Q@Q@~ÿÁÑßò‚Û›þí›ÿ[ö}¯ßêüÿƒ£¿å·7ýÛ7þ¶ìû@þÆÿòq_ðV/û?ÿ‡úë/ø&}ÿ_~Æÿòq_ðV/û?ÿ‡úë/ø&}ÿ@Q@Q@|ÿ,ÿ“uøsÿgÿÿÿצþÆõ÷ý|ÿ,ÿ“uøsÿgÿÿÿצþÆô÷ýQ@Q@Q@Q@Q@Q@Q@Q@Q@~ÿÁÑßò‚Û›þí›ÿ[ö}¯ßêüÿƒ£¿å·7ýÛ7þ¶ìû@þÆÿòq_ðV/û?ÿ‡úë/ø&}ÿ_˜o€?o¯ß´íâdŒ ¿iÚÁ?<3¬|Rý±¾4| ñ߇±?dÙgöoÖ|-®ø#°oíáù<¿~Ïš¯ˆ´ÍoOø‹qöýÄz|ZF—{es¾ÿ þ ›ÿFoûâË?h¯þ”í}ÿE|ÿ þ ›ÿFoûâË?h¯þ”íð±¿à©¿ôfÿ°þ,³öŠÿéNÐßôWÀð±¿à©¿ôfÿ°þ,³öŠÿéNÑÿ þ ›ÿFoûâË?h¯þ”í}ÿ_ÁK?äÝ~ÿÙÿÿÁ'õ鿱½ð±¿à©¿ôfÿ°þ,³öŠÿéN×€~ÒÞÿ‚¦þѼ9àøeÿØÁÿðþвwÇOíoøxíâµÿÃ/þÔÿÿiøE¾Áÿ´Ñ>Ïÿ Çü*OøB¿¶þÙ7ü#?ðÂGý‘âì¯ìHõúŠøþ7ü7þŒßöÿÅ–~Ñ_ý)Ú?ácÁSèÍÿ`üYgíÿÒ ¿è¯€?ácÁSèÍÿ`üYgíÿÒ£þ7ü7þŒßöÿÅ–~Ñ_ý)ÚûþŠøþ7ü7þŒßöÿÅ–~Ñ_ý)Ú?ácÁSèÍÿ`üYgíÿÒ ¿è¯€?ácÁSèÍÿ`üYgíÿÒ£þ7ü7þŒßöÿÅ–~Ñ_ý)ÚûþŠøþ7ü7þŒßöÿÅ–~Ñ_ý)Ú?ácÁSèÍÿ`üYgíÿÒ ¿è¯€?ácÁSèÍÿ`üYgíÿÒ£þ7ü7þŒßöÿÅ–~Ñ_ý)ÚûþŠøþ7ü7þŒßöÿÅ–~Ñ_ý)Ú?ácÁSèÍÿ`üYgíÿÒ ¿è¯€?ácÁSèÍÿ`üYgíÿÒ£þ7ü7þŒßöÿÅ–~Ñ_ý)ÚûþŠøþ7ü7þŒßöÿÅ–~Ñ_ý)Ú?ácÁSèÍÿ`üYgíÿÒ ¿ëðþŽÿ”~Üß÷lßúسí}ÿÿ þ ›ÿFoûâË?h¯þ”í|ÿGý—¿à©¿ðRØOãŸìSÿ #öø/ÿ £þ—ü\¿øooÚ+â7ü#_ð®¾1|>ø³ÿ"oü;/ÀŸÛÛð‚`È×¥gÿjÿjÿ§}‡û6ðÿÙwebmagick-2.02.orig/doc/fig/frame-style-4.jpg0100644000175000017500000003054107306037341020565 0ustar arafunearafuneÿØÿàJFIFPPÿÛCÿÛCÿÀßß"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?þ–¾þÄ_±í)ûZÁT¼uûEþÈŸ³Çïi?¶ÿÂï é~1ø×ð áOÅOi¾±ÿ‚aÿÁ:5‹ éþ!ñׄõí^ÏÃöz¾»®j–º5½äzu¾£¬ê·ÐÛ%Σy,ßOÿçà–_ô?ØÿßöuÿçsGìoÿ'ÿbÿ³ÿøqÿ®²ÿ‚i×ßôðü:wþ eÿHÓý€?ñ ÿg_þw4çà–_ô?Øÿßöuÿçs_Ñ@çà–_ô?ØÿßöuÿçsGü:wþ eÿHÓý€?ñ ÿg_þw5÷ýðü:wþ eÿHÓý€?ñ ÿg_þw4çà–_ô?Øÿßöuÿçs_Ñ@çà–_ô?ØÿßöuÿçsGü:wþ eÿHÓý€?ñ ÿg_þw5÷ýðü:wþ eÿHÓý€?ñ ÿg_þw4çà–_ô?Øÿßöuÿçs_Ñ@çà–_ô?ØÿßöuÿçsGü:wþ eÿHÓý€?ñ ÿg_þw5÷ýðü:wþ eÿHÓý€?ñ ÿg_þw4çà–_ô?Øÿßöuÿçs_Ñ@çà–_ô?ØÿßöuÿçsGü:wþ eÿHÓý€?ñ ÿg_þw5÷ýðü:wþ eÿHÓý€?ñ ÿg_þw4çà–_ô?Øÿßöuÿçs_Ñ@çà–_ô?ØÿßöuÿçsGü:wþ eÿHÓý€?ñ ÿg_þw5÷ýðü:wþ eÿHÓý€?ñ ÿg_þw4çà–_ô?Øÿßöuÿçs_Ñ@çà–_ô?ØÿßöuÿçsGü:wþ eÿHÓý€?ñ ÿg_þw5÷ýðü:wþ eÿHÓý€?ñ ÿg_þw5øƒÿÁ=¿`_ßðF?Û'â—ÁOØ{ö@ø?ñ7ÂÿðÏ?ðŒüEø[û4üøã¿ÿmþÕ|;¬ÿax»Â~ Ò5éŸ?h†ÿfÿÙö±ø¥ð“ÄßÿiïÚ;öyþÈñ߇þ ëÞ,ðþ»âàWÅO‡~øŸýƒâèZ†‰¦|RÒ¼g£éu{]?O¶²ñ/‰mµ~ö–ðgÄŸÙ#Tÿ‚{xö:¾øñÄ?oÿÁ®ø#ö£ýºkxsâ6/üöá×õ?øçã—Å(¿kWÃý÷á·†>$øgáÕŸ‚|QàCñOÁž×-ü;á¯jz‡ŽôÿÓï‹? | ñÇágÄ¿‚Ÿ´/øJ>|`øã/…¿|3ý§¬hŸð‘xâ‡5/ ø»BþÙðxƒHþ×ðþ¯¨iÿÚz«¦khûV™¨Y^ÅÌGŒ¾øâˆþø³ÅÚö¿ˆ>|@Ô¾)|-Ô?´õ‹øEüw«ü,ø—ðSP×~˦jVZßÚ>|`ø‹áŸìÏ[jú<_ð‘lÁ§Åâ #BÕtÀÊÁXüUª|ý¾>%xëölðÿ†¼mûþ̾>xÇÁøï¨øÛ¾=ñWÁ?ÚWþ aû6ø‡áï†~ k¼«éÞÕuø'5çŠ4oˆ:§Ã‘¨¶ñrÚÂûáåÏå›ÅÅ/ø(WíO¤~ÔZïì÷ðSöJýŸþ x~ßö¿Ó?bŸ øÿâ—í™ñàþ±«üS—þ Û§ÿÁGµ]ð/„ÿbŽ6^øaðÊ]WÀzf«§øïÅ#Õüwe§µ×…4Oêw:¶‘ßüiÿ‚6ÿÁ<h;_iŸ>|@Õü?ñ?ûWþw„<;ûRþÖ¿ü ñ/û_öŽøÇû\·ü,_|8øçá/xïûöý >/|Rðü%z¯ÿ6±ã)ôÿ`øHðþ‘¤ýÿ ¹ð'þ/ü-øA¿âàÃ@ÃQÿoÿÂMãù.ßðËðÅ?ðœÿeÂCý‹ÿ&ËÿÓþŸìßøC¿ærÿ„{þüUtøÁâ¿Û×öóñ§Ç?ØßÅÿ³çìáÿŠÿ5ƒÿð[o‡¿e]?ö܇­|Uû ~Ø_³GÀ+âv•ñ_ÆŸô{o‰ž ×ümðëQøgðQ|EðCÁz‡'ý§®®ÿ„ÄÚF‹aª]é–—¾#¯§þ;ÿÁ$ÿ`/ÚSNðF—ñை5«o‡^ ý®üMá |3ñçö‹øg¨éºíéâ­wÆ?µõµÎ±ð¿â׃u}kÃÿ5x–ÏÅž×oµ? ÛøW_Ö|  hÚ?‚u+ÏMô·ûþÌ÷…~,xãá‡ô¿ülý˜<ûüCðw„ï|Aà Þ~Ì4ïŒ:?þxgÃÞ Ö4#áç‡ü-¤||ø¯¥è׿ìü+â =;ĶÖ1ëÛËAøÁ¿ðVx¯öýÑ?c;„ücàSöŸøÃû,kþ ü_ý¨>!éß¾!|.ý>,~ÒÑxSÇÚ߈àŸß?dø¾0Eàï‡^‡ñCà7lÿ|LøMâ¯^Ø^i~'¶ðŒo4þƒþ ÉñëXøóñNÏÅ–S|@ðïÃ/ÿÁ ?à¼ð“Æ¿1iúOíaâß~Ð5ý¨ü#¤YþÚÿ¶½¯ÂÏ üvø•â?ø§â/Ž|9ð.Ú> hðŸjþ)Zø×Ã:gÃë_x«ÃŸ¼àýwÃ×þñˆ´MGè‚¿²çÀŸÙßûþï¿áÿ„öøû.iñSxÇÄdøû/ÿÂÇÿ…àoøª|C­ý£þø[⦺ó¼câoøH?â°ñˆ?²´OìТŠ(¢Š(¢Š(¢Š(¯Àø:;þPQûsݳëaþϵûý_€?ðtwü £öæÿ»fÿÖÃýŸhïÿØßþN+þ Åÿgÿðãÿ]eÿÓ¯¿ëàØßþN+þ Åÿgÿðãÿ]eÿÓ¯¿è¢Š(¢Š(¢Š(¢Š(¢Š(ù‚ý…¾$ëྠÿ‚ƒ|Gýÿà§þ øð3þ /틬üTý¤?ঞ;ø…û8þÔ~;ðÿì»cã?Yèÿm¿à ¿´Ÿöü./íOxÃÁ¿c¿èÿ ­R=u¼1àψðŸ…$úöåÿ‚¸üsý„4ë]/âìãû0x÷ã&“û0|Vý©þ üøIûU~Ø_>!xgáïÂoxƒIÕ¼WøYÿ¥ñî‘á?ƒú¦¾³Ó~<þÒWß³_Ã3ñ3YñïfÕà µ¯‰:¯êÿü2çÀŸøeøbŸøA¿ãáŸÿá—?áZÂMãù!?ð®¿áSÿ ÿ —ü$?ð°?äŸÿăþoøJÿá1ÿ˜¯ü$?Û_ñ2¯ý£¿à²¯í_â¯øÇãFñ‚óWø‹ðHøñ&ÏáÇíWûW|ð¯ÄïƒZ£ñ+TÒ~üNð/ÀŸ |ñÃöw?þ(İøÛÃÚôòéÞ9ñ=ĺEá±P˜>)ÁB¿j}#ö¢×g¿‚Ÿ²WìÿñÃöÿµþ™ûøgÇÿ¿lψ¿õ_✿ðNÝ?þ =¬ëúï|'û|q²ðïÃû†Rê¾Ó5]?Ç~(ñ¯ã»-=®¼)¢xS¹Õ´—þ$Áw|AàíJøaà¯ØçÄ?o oþØ^=ñ·ì£ð{Xý¨>.xWMø{û!þ׿bÙõ/üiø/û |Qñ&½âŽ>_Zü'âÀŸ„? ô=9u¶øåñoàåûü.±ø½úÿá?ØÛöxð^·áŸhþñçŠ|'ñƒFøý¥ø¯ÅŸþ-ø÷ÅW_t/ÙÛö±ø…âoøëÇ^#×)éÞ#ý¦~)ë¾>é¶¿~ üSðŨþüWøµ®Âã„ÿ𚟅šˆü9ðúóþØÿáX|8O €{ÿÂÿÂ×øYðÓâ—ü!_>ÿÂÊøàßÿºø³áÏøC¾)øþi¾"ÿ„+â_„~Û¨ÿÂ+ñ¿Ú?Ø^2ðçö…ÿöˆì5-3í·_eóßÐ+ŸðŸ„ü+à/ øgÀ¾ðχüàŸøF🃼á=Nðç…|'á_iÖÚ?‡¼3áŸhöÖzFƒáý H³³ÒômK³µÓ´½:ÖÚÆÆÚ h"‰z (¢Š(¢Š(¢Š(¢Š+ðþŽÿ”~Üß÷lßúسí~ÿWàüÿ((ý¹¿îÙ¿õ°ÿgÚûÿö7ÿ“Šÿ‚±Ùÿü8ÿ×YÁ4ëïúüaøCâÏÛCAý­?àªV³§À/ك⧂dý·þ\êž!ø×û]üVøâ«??üþ Ñö§ø;À¿±í)¤j^·Ò!Ðï­|Mqã­'Q¼ÔuWK›Âv6Ú5ž±®ý?ÿ þ ›ÿFoûâË?h¯þ”í}ÿE|ÿ þ ›ÿFoûâË?h¯þ”íð±¿à©¿ôfÿ°þ,³öŠÿéNÐßôWÀð±¿à©¿ôfÿ°þ,³öŠÿéNÑÿ þ ›ÿFoûâË?h¯þ”í}ÿE|ÿ þ ›ÿFoûâË?h¯þ”íxÿÇÚÇþ IðÁz/޼cûþÄ–‘®ü`ýž¾ YÛøgþ EñæóQÅ_´§Ç߆Ÿ³Ÿu ˜uOø%–lžÒ|mñSÃÚ§‹.¢¼›Q±ð­ž³}£éZö¯oc¡ê «ôWÀð±¿à©¿ôfÿ°þ,³öŠÿéNÑÿ þ ›ÿFoûâË?h¯þ”í}ÿE|ÿ þ ›ÿFoûâË?h¯þ”íð±¿à©¿ôfÿ°þ,³öŠÿéNÐßôWÀð±¿à©¿ôfÿ°þ,³öŠÿéNÑÿ þ ›ÿFoûâË?h¯þ”í}ÿE|ÿ þ ›ÿFoûâË?h¯þ”íð±¿à©¿ôfÿ°þ,³öŠÿéNÐßôWÀð±¿à©¿ôfÿ°þ,³öŠÿéNÑÿ þ ›ÿFoûâË?h¯þ”í}ÿE|ÿ þ ›ÿFoûâË?h¯þ”íð±¿à©¿ôfÿ°þ,³öŠÿéNÐßôWÀð±¿à©¿ôfÿ°þ,³öŠÿéNÑÿ þ ›ÿFoûâË?h¯þ”í}ÿE|ÿ þ ›ÿFoûâË?h¯þ”íð±¿à©¿ôfÿ°þ,³öŠÿéNÐßôWÀð±¿à©¿ôfÿ°þ,³öŠÿéNÑÿ þ ›ÿFoûâË?h¯þ”í}ÿ_€?ðtwü £öæÿ»fÿÖÃýŸkïÿøXßðTßú3ØÿYûEô§kñþ<ñ¯íõ«ÿÁÿl?ã_ìÓû |?øeqÿ óÿ 7‹¾þÜ?>0xïHò¿j¿³èߨ_¼Yÿöøáÿ}¿ÄiZf§ý¡ñKÂÿÙ=î¡®ÚÿmÞé–ÞÕÀ?o¿cù8¯ø+ýŸÿÃýu—üN¾ÿ¯€?cù8¯ø+ýŸÿÃýu—üN¾ÿ Š( Š( ¾ÿ‚–ɺü9ÿ³ÿÿ‚NÿëÓczûþ¾ÿ‚–ɺü9ÿ³ÿÿ‚NÿëÓczûþŠ( Š( Š( Š( Š( Š( Š( Š( Š( ¿àèïùAGíÍÿvÍÿ­‡û>×ïõ~ÿÁÑßò‚Û›þí›ÿ[ö} ¿ÿcù8¯ø+ýŸÿÃýu—üN¾ÿ¯€?cù8¯ø+ýŸÿÃýu—üN¾ÿ Š( Š( ¾ÿ‚–ɺü9ÿ³ÿÿ‚NÿëÓczûþ¾ÿ‚–ɺü9ÿ³ÿÿ‚NÿëÓczûþŠ( Š( Š( Š( Š( Š( Š( Š( Š( ¿àèïùAGíÍÿvÍÿ­‡û>×ïõ~ÿÁÑßò‚Û›þí›ÿ[ö} ¿ÿcù8¯ø+ýŸÿÃýu—üN¾ÿ¯€?cù8¯ø+ýŸÿÃýu—üN¾ÿ Š( Š( ¾ÿ‚–ɺü9ÿ³ÿÿ‚NÿëÓczûþ¾ÿ‚–ɺü9ÿ³ÿÿ‚NÿëÓczûþŠ( Š( Š( Š( Š( Š( Š( Š( Š( ¿àèïùAGíÍÿvÍÿ­‡û>×ïõ~ÿÁÑßò‚Û›þí›ÿ[ö} ¿ÿcù8¯ø+ýŸÿÃýu—üN¼þø*oÃoÚø»âÄï€?´ÁÙKÀŸ´Ä_Ù¿ÅŸ¶çÅ-öNÑÿgøïáÏíâ/ÙçX×týö¤ñíáÿ‡þ ý¡ü>¿´Ïøƒà•£ø~×XÓþ!|G“ÀŸ ,|Mãúìoÿ'ÿbÿ³ÿøqÿ®²ÿ‚i×ÄŸ ÿj¯~Ê¿¶ü“Tý~0x Ûö¡øÁÿAð¤_µß‰¾ þÊ:‡ìñáƒ_¶Çí]ûP|GÑþ/[xkÁß´‰ÿioøƒDø-ñžÇYðŸÂ»Ï€~ŸÅÿíôo†ž:ñŸÁŸêÞ!øÕàÛíYÔuMGÅ–7Þñ‡-¼9â mGÖ5›Ÿ ϧx÷NŸÂ¾ñ ¾,ðœ^ñ6»«Ùø~ÏW×µOÜÛxëKð_Š›Å^ ñ5埆n¼uàïø³ ¯ÄŠ_°ˆþ8þÒšìÿÿg¿‡ÿ?g/Á_ôÏÚÄÞø¥gð³â0ÿÁ?nOÏã/øÁ¿iÿÚËö¾Ñ|AñbÿãßÇ oÚö9ý‚ÿeÿø)7ì£ã¯Œº'Žükû k>-ý~kðP?øƒã?À? |>ýŸ<3ð[ö§ñƒe_ÙcÄg‹4ïƒ_´ß€? ¾ø?âÐö;ã/Š^øâ?„þñv»ý‘âŽ?5/…¿ tÿìÍbÿþé >%ükÔ4/µiš}í–‰ö†_þ"ø›ûOÄW:F/ü#¿ØÐjøƒWд­OÐ+ù¡ð‡üïÃò~Ò?³¯ÇÿÁ|?û.ü;ø[ÿøsñ0øçâïì¿â¿iÞ ½ý…¾3|%ñWí7£~Ìø©âÙ'öXðÿh›ßÙ_Ä>&³ý—>-øÏãïÇíGözðŸÇ/|-¹ø‰ðwá¥÷ÄÁ*¿kÏÙïCøYà_ø'/ü)Úë²üáoí‹ûrÿÃ^|6ñ'ü<§Çÿf |1¡ÂAoñçã?íÿ mûSøÛáOí“ý§ûzø;à–û!ÿ­ÿ„ÁÚ‚Í5¬ÀÙí|ÿ,ÿ“uøsÿgÿÿÿצþÆõùûUÿÁ:ôÿÁD¿g?Ù/öSýŸ¿d‡±/í÷ðÿáÅ/ÛÇáV…û1øBÑü?àOø$'íEá?Ú7@×tÿ ø{â7Ão‡þ<ÿ†°øûUü2ý–¾)iž øMñ#Xðÿ-´Ï?Ä>Óu«þ¿ÁK?äÝ~ÿÙÿÿÁ'õ鿱½}ÿEPEPüpø×á_€> Ñ|uã?Ä–‘®ü`ýž¾ YÛøf×N¼ÔcñWí)ñ÷á§ìçà]BæSUÑ­“ÃúO¾*x{TñeÔW“j6>³Öo´}+^Õíìt=GØ+äÛ‡áoŽþ0|ðW„þh_ð‘xƒHý¯ÿàžßµ ?ûOGÒ>ÏàOß·×ìÓñ¯â–»ö­wPÓ,¥ÿ„_á—Ãÿx›û2 ™uoû#ûú~¯â ý3J½ü ø9ÿ~øI®~Ôžø¯ûJ~Á_³4øƒþ eâÏŒž*ø“ð£öxø—¨øÇÅ_´üãáGÅߨ{ÄÞ6•ŸˆõÏx‚Ùr×âDžÖu}_QøCá]C\øwâ Ÿjþ">Ô€?¡ê+øÂý¯?à—¶/ÆÙcö`øªþÃŸð›øƒàßüà¯ìÙ xÃáÂOø$Ͼ)ÛþÜVß¼KàíWá—ÆÚgöÖøŸñ7áìÿð÷AÐ5O Ý~Å^¶ñn·â?ÿ<áOŽZoˆ<áM:÷À?k_…÷^ý£¿c/üYýŠ?áý¦¼iÿ?~Éþ5ñ¿í³©üfýœ~>øïQømñ¦êOÿcŠZÆñ—ÆŸ´À/ˆ¿gÿ|øW¨~Í>ð¦­û'iÚ?À- â÷¯‹>4Ñ~(ø]ñP÷y_0xSö°ø{â_Úãâ÷ìY}¤øƒÁß>üøWñûG‹ÅzÇÃ4Ó¾3üø¡­øÏÁÒüBøC£ø{â'ˆ~"jøiñÀÚ§ÃŸŠ“xëÀ~ŸÃ*Õ¼%¾³á¿x;Ä:ßâì3ÿ¿ý¤~ ~Þ¿hÏÚKÅÿ´ÿÆŸÚGá÷ˆ?jCñ“öÓ¶×ÿaoÿ²ÿíKð“ã[øšOø_YðÁï‡úÏíáñ«Ä°³å¿†gÚ{\ðçìñû-xƒáG‹!ýš¾.Mð»áÀχ?ýƒþ AûþÖ?´¿Žÿgÿˆÿ±ø¢ø·â¿ÃÿŽðM?ÛƒY×~|6×5ƒÿûý´t}"ÛÇ_5x«â_¯ø‡þž_‰ß ~øÄ'ñ'Žü}©¶åøJóâg„þ!€~¯þÉŸ´ìµÏÁ¯†<=ð_㟇þü;ø×ðòûâÜÿ—Q×|+ñ>ÞxoO“KøWñƒâ¥Î“âðNàï‰:•®°,4ë_ ü\ð“«sñIø­à_†O×óCÿ ÿ‚d~Ò??kÅ¿´ÏhßðOO~̱×Áï‰?±¿À‡Ÿ°¶©¨þÑ|Öÿà¡¶ÞðoÃß~Ùú~¯û.[xöI×>4üñÄ? þ;x3Dø5â ø²ãâ½m¿h¿ÙŸàö‰Ìÿà‰¿¼uð_ö$ýŽþøö€OÙÿãìÿ¨þÉ_·Äoß¶ÿƒ¼WñOà/ì±ð3öúøûlþÈ0x·GÐ|{ð—âoíðËá-—í;û7üð×Á?ƒž3øuðÄáåßÇŸˆß³ÿÃÝâ'Ž€?¯Ú+òþãû<~Ö? ~ üNý¡¿à¡Þø ÁAÿkψñwí þð§Ãm7X°Ñþ|"ø{û/üðið»Æž<ð—ÿ·<%ð†ïöƒž ê~ð'ƒ¼wûC|Eð÷ƒ¾xÞ=BÆëõú€ (¢€ (¢€ üÿƒ£¿å·7ýÛ7þ¶ìû_¿ÕøÿGÊ ?noû¶oýl?Ùö€>ÿýÿäâ¿à¬_öÿ?õÖ_ðM:ûþ¾ýÿäâ¿à¬_öÿ?õÖ_ðM:ûþ€ +ùÁý…¿m_ÜþÈ ý¸þ?~ØÿðSÿŒ¿ ¿` moÚ;àçŽ?`_…Ÿ¿gb~Ïö>8ø• |øÓ«ÿÁ9?fïüBþÎñ·>·ð[Jø{û_\Âmk¢éZôÞ+ñ—Ã+/ê·?`~×?ðXo~Âþð‡ÿjÙ_ö€øMeâÿ‡þ=ñý·‡<]ñÛþ á¿§ü+]cW²ñg‚¼;à¯ÁDtO|`øeáûøÖ~ÏÖ_~×£üQøuáÈ/[ân©¬ø@ý~¢¿0>)ÁN¬~þÐïìñá?Ø¿ö¿øãâ #ö€Ó?eÍ?Æ oÿcm#Àž(øíû iÿ·M×´)~5þØügoý‰û9^Üø§Sñ7‰¼áßK¬i‡…4oêþ —J±Ôüãwüßö(ýž~h?~*é<+ñ7Sÿ†•¼Öÿe-wÇß²'…ÿhïøsöLøÙñ'öwøÃâ=BÃÆ_µ/†þø¿wÆ…¾#ðÂß|&øÅñâŸÇ{¨µ;¯‚>øeà/‹€?g­¼'á[?k>:³ðχí|mâ?øgÂ~!ñ¶§Aâ­w¾ Ô|Y¬x;Ã:ψb¶]_Tðÿ„õøëTðÎ}y> ê>4ñeö—mksâ=b[ψ?य़òn¿ìÿÿà“¿úôßØÞ¾¿øOñKÀŸ~|4ø×ð·]ÿ„£á—Ƈþ ø¥ðëÄßٚƉÿ > xsMñg„ußìoiúGˆ4íêú~¡ý™®éZf±aö²êz}•ìSÛEòü³þM×áÏýŸÿüwÿ^›ûÐßôQEQEQEàðÉß²Çü/oøj?øfŸÙÿþkþŽ/þßïø^ßò'»ÿ’»ÿçü,ù'ÿñCÈÃÿ"wüS?òÿA¯€?à¡_üwðÿö§ý’¾iÿ´?íðá—ÄoÙÿöÌø‹âëŸØ§öMÑÿkŠ~(ñßÂ?ˆ¿±†~A¯øNØÏöÖñ…¾é>øÓñJMWÄZg€¼)£Ëâ=Cšn»âá{sáÝSõÿ†¿µN·á?i³O‡¾~Ûÿ¶o¼5û0xCö©ñoÇ/øGöGø'â¥ð¯Ç-Gö޾øðëâOÃïx‹ö&Õü)ñƒÅú¿Àü'Ðü#§~Í>Ó¼¨ÿÃAø‹À÷3xïÆºXèýøÃð³þ }û:|eð_Ç_|;øAñƒÆº¿ÀŸ~ǽðGÃo‹_°ÆýGÇþ*ý¹þ>ë³oÀÿ ø'âÀ?Ûoâ§À'Ä ñ'FøçFø¯ñwá–£á/ ê:Š®-®´kNšã¿ðü›Àþ#Ô|yñ?öUý§ÿf_…>=øÁûK|´Çï~ĺ_Á¯üLý‘|+ûKx¯ãÆ—ñ QømûdüNñ·…"ºý_¢¿(?bø,Ïì_ÿøûãÙÏà¹â ïxcàþûBxWT¹Ôþø«Â¿>j>4oŸè×ß¾(üOÕþøƒIÕïüqâo´þ‡ðö•ð®ñÂsx“ྗsЬü3ú¿@Q@Q@Q@~ÿÁÑßò‚Û›þí›ÿ[ö}¯ßêüÿƒ£¿å·7ýÛ7þ¶ìû@þÆÿòq_ðV/û?ÿ‡úë/ø&}ÿ_~Æÿòq_ðV/û?ÿ‡úë/ø&}ÿ@ Ãü,ÿ†ÿ‡toü@ÿ…%ÿ ÿ Sÿ Oö¯‡?áiÿ¬ÿ…/ÿ /ûûoþOøD¿á`Â%ÿí_øAÿáÿ„ý/þOìÏø”WÏÿµ×üËá·íwñOâ¯Å½Oã÷íðWÄdý…¾-Û|Ð?dëÿøL?gÏüSñ7ˆ<kâÏŽ¿²ßÆï‰¾ÿ„¾÷âÞ»Œ%ø[ãßZø‹þ߇ږ¡c/ˆ<á­fÇôþŠøƒÂ°‡ÃßxûÃ?õ‰<{ñAý§ôoÚóTñO‹/>ÙÏãOŒº_üÒÛþ µ}{âm#À¿ üá»_øàÜüAÖth¾‚Œ·—:·‡¥Ð¾­ŸÃ;_?ø&_ÂMÄ?¾ üRøÁû=þÐv~ ý¨&›ö™øc¤þÏ÷Æ]cáŸíqûPxÓöÂø©ðÄ ñ³àÅï†ÚçÁý7ã·ŒSÅ-õ‡3üBøu‚¶ø…gŽþ1¿ÄÏÑú(ŸðŸ†tïøWÃ>Ñî|Ay¤xOÃú7†t»Ïx³Å^=ñUÖ¡iÖÚ]ω¼uã­gÄ~6ñ§ˆ'¶µŠ]gÅž1ñ»â¯ê-s¬x‡YÕ5{ËËéþ ÿ‚–ɺü9ÿ³ÿÿ‚NÿëÓczûþ¾ÿ‚–ɺü9ÿ³ÿÿ‚NÿëÓczûþŠ( Š( Š( Ö¾ xW]øûðÓöŒ¼Ôð¯ˆXñíUûOüFÒ"ðÿìCá=#ÀZÏ…ÿb_‡|1á_ø'‡íA§~Õ¿²×†|'áoÙßö6ø'má¯øÆÇÆ>¹Ñ´ym4íSáŸÄxz[hµ}áˆþ}?ü÷à©á_‡^ñT ñׂ~~ÓÿµÇíRþñÌ~ ñ?…|{â¯ÛSNý±4Œß¾$ø{QðdšGŠ~ɤ~Ûßt½Â&ÎËQ};KðMмEâ«k/ÅâÏ·è ?fØ÷Gý˜?²to üqý 'ÿ`øÁ¾ðŸ‡>$~Ô~&ý þ6xgÞ½¶ð÷Äý2÷â_Æ­Câo×ôQ@Q@Q@Q@~ÿÁÑßò‚Û›þí›ÿ[ö}¯ßêüÿƒ£¿å·7ýÛ7þ¶ìû@þÆÿòq_ðV/û?ÿ‡úë/ø&}ÿ_~Æÿòq_ðV/û?ÿ‡úë/ø&}ÿ@Q@Q@|ÿ,ÿ“uøsÿgÿÿÿצþÆõ÷ý|ÿ,ÿ“uøsÿgÿÿÿצþÆô÷ýQ@Q@Q@Q@Q@Q@Q@Q@Q@~ÿÁÑßò‚Û›þí›ÿ[ö}¯ßêüÿƒ£¿å·7ýÛ7þ¶ìû@þÆÿòq_ðV/û?ÿ‡úë/ø&}ÿ_~Æÿòq_ðV/û?ÿ‡úë/ø&}ÿ@Q@Q@|ÿ,ÿ“uøsÿgÿÿÿצþÆõ÷ý|ÿ,ÿ“uøsÿgÿÿÿצþÆô÷ýQ@Q@Q@Q@Q@Q@Q@Q@Q@~ÿÁÑßò‚Û›þí›ÿ[ö}¯ßêüÿƒ£¿å·7ýÛ7þ¶ìû@þÆÿòq_ðV/û?ÿ‡úë/ø&}ÿ_~Æÿòq_ðV/û?ÿ‡úë/ø&}ÿ@Q@Q@|ÿ,ÿ“uøsÿgÿÿÿצþÆõ÷ý|ÿ,ÿ“uøsÿgÿÿÿצþÆô÷ýQ@Q@Q@Q@Q@Q@Q@Q@Q@~ÿÁÑßò‚Û›þí›ÿ[ö}¯ßêüÿƒ£¿å·7ýÛ7þ¶ìû@þÆÿòq_ðV/û?ÿ‡úë/ø&}ÿ_˜o€?o¯ß´íâdŒ ¿iÚÁ?<3¬|Rý±¾4| ñ߇±?dÙgöoÖ|-®ø#°oíáù<¿~Ïš¯ˆ´ÍoOø‹qöýÄz|ZF—{es¾ÿ þ ›ÿFoûâË?h¯þ”í}ÿE|ÿ þ ›ÿFoûâË?h¯þ”íð±¿à©¿ôfÿ°þ,³öŠÿéNÐßôWÀð±¿à©¿ôfÿ°þ,³öŠÿéNÑÿ þ ›ÿFoûâË?h¯þ”í}ÿ_ÁK?äÝ~ÿÙÿÿÁ'õ鿱½ð±¿à©¿ôfÿ°þ,³öŠÿéN×€~ÒÞÿ‚¦þѼ9àøeÿØÁÿðþвwÇOíoøxíâµÿÃ/þÔÿÿiøE¾Áÿ´Ñ>Ïÿ Çü*OøB¿¶þÙ7ü#?ðÂGý‘âì¯ìHõúŠøþ7ü7þŒßöÿÅ–~Ñ_ý)Ú?ácÁSèÍÿ`üYgíÿÒ ¿è¯€?ácÁSèÍÿ`üYgíÿÒ£þ7ü7þŒßöÿÅ–~Ñ_ý)ÚûþŠøþ7ü7þŒßöÿÅ–~Ñ_ý)Ú?ácÁSèÍÿ`üYgíÿÒ ¿è¯€?ácÁSèÍÿ`üYgíÿÒ£þ7ü7þŒßöÿÅ–~Ñ_ý)ÚûþŠøþ7ü7þŒßöÿÅ–~Ñ_ý)Ú?ácÁSèÍÿ`üYgíÿÒ ¿è¯€?ácÁSèÍÿ`üYgíÿÒ£þ7ü7þŒßöÿÅ–~Ñ_ý)ÚûþŠøþ7ü7þŒßöÿÅ–~Ñ_ý)Ú?ácÁSèÍÿ`üYgíÿÒ ¿è¯€?ácÁSèÍÿ`üYgíÿÒ£þ7ü7þŒßöÿÅ–~Ñ_ý)ÚûþŠøþ7ü7þŒßöÿÅ–~Ñ_ý)Ú?ácÁSèÍÿ`üYgíÿÒ ¿ëðþŽÿ”~Üß÷lßúسí}ÿÿ þ ›ÿFoûâË?h¯þ”í|ÿGý—¿à©¿ðRØOãŸìSÿ #öø/ÿ £þ—ü\¿øooÚ+â7ü#_ð®¾1|>ø³ÿ"oü;/ÀŸÛÛð‚`È×¥gÿjÿjÿ§}‡û6ðÿÙwebmagick-2.02.orig/doc/fig/thumbnail-anatomy-framed.jpg0100644000175000017500000020104107306037341023054 0ustar arafunearafuneÿØÿàJFIFPPÿÛCÿÛCÿÀ~ƒ"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?þŽ¿b_ø'·ì ñÇá‡Æ?Š_ÿaïÙãÄß~ßÿðTÿøI¾"üRýš~ ü@ñ߈¿±?িµÇ‡toíßx³ÁZ¿ˆ5ìéV…¦hj`ÑôÍ?Lµò¬¬­ ‹ëÿøtïüËþ‘§ûâþοüîhÿ‚iÿɺüFÿ³ÿÿ‚±ëÓlŠûþ€>ÿ‡NÿÁ,¿é°þ!¿ìëÿÎæøtïüËþ‘§ûâþοüîkïú(àøtïüËþ‘§ûâþοüîhÿ‡NÿÁ,¿é°þ!¿ìëÿÎæ¾ÿ¢€>ÿ‡NÿÁ,¿é°þ!¿ìëÿÎæøtïüËþ‘§ûâþοüîkïú(àøtïüËþ‘§ûâþοüîhÿ‡NÿÁ,¿é°þ!¿ìëÿÎæ¾ÿ¢€>ÿ‡NÿÁ,¿é°þ!¿ìëÿÎæøtïüËþ‘§ûâþοüîkïú(àøtïüËþ‘§ûâþοüîhÿ‡NÿÁ,¿é°þ!¿ìëÿÎæ¾ÿ¢€>ÿ‡NÿÁ,¿é°þ!¿ìëÿÎæøtïüËþ‘§ûâþοüîkïú(àøtïüËþ‘§ûâþοüîhÿ‡NÿÁ,¿é°þ!¿ìëÿÎæ¾ÿ¢€>ÿ‡NÿÁ,¿é°þ!¿ìëÿÎæøtïüËþ‘§ûâþοüîkïú(àøtïüËþ‘§ûâþοüîhÿ‡NÿÁ,¿é°þ!¿ìëÿÎæ¾ÿ¢€>ÿ‡NÿÁ,¿é°þ!¿ìëÿÎæøtïüËþ‘§ûâþοüîkïú(àøtïüËþ‘§ûâþοüîhÿ‡NÿÁ,¿é°þ!¿ìëÿÎæ¾ÿ¢€>ÿ‡NÿÁ,¿é°þ!¿ìëÿÎæøtïüËþ‘§ûâþοüîkïú(àøtïüËþ‘§ûâþοüîhÿ‡NÿÁ,¿é°þ!¿ìëÿÎæ¾ÿ¢€>ÿ‡NÿÁ,¿é°þ!¿ìëÿÎæøtïüËþ‘§ûâþοüîkïú(àøtïüËþ‘§ûâþοüîhÿ‡NÿÁ,¿é°þ!¿ìëÿÎæ¾ÿ¢€>ÿ‡NÿÁ,¿é°þ!¿ìëÿÎæøtïüËþ‘§ûâþοüîkïú(àøtïüËþ‘§ûâþοüîhÿ‡NÿÁ,¿é°þ!¿ìëÿÎæ¾ÿ¢€>ÿ‡NÿÁ,¿é°þ!¿ìëÿÎæøtïüËþ‘§ûâþοüîkïú(àøtïüËþ‘§ûâþοüîhÿ‡NÿÁ,¿é°þ!¿ìëÿÎæ¾ÿ¢€>ÿ‡NÿÁ,¿é°þ!¿ìëÿÎæøtïüËþ‘§ûâþοüîkïú(àøtïüËþ‘§ûâþοüîhÿ‡NÿÁ,¿é°þ!¿ìëÿÎæ¾ÿ¢€>ÿ‡NÿÁ,¿é°þ!¿ìëÿÎæøtïüËþ‘§ûâþοüîkïú(ü¡?à½_µíOûÁX¿jÏÙsö)ý¥¿hØÿöeø_ÿ 3þ§ìéû.|dø‹û?ü øwÿ ¯ìÛðwâ'Œ¿áøEðŸÄ~øá/øK~ x·Å~9ñ7ö‡´ÿíïø›Ä>&Õ~×­kZ•õÉ^ÿGÊuÿnoû¶oýcÏÙöŠÿO¿ø&Ÿü›¯Äoû?ÿø+þ½7öȯ¿ëàø&Ÿü›¯Äoû?ÿø+þ½7öȯ¿è¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(óƒþ ñ#öÐø+¢x3âWìçñWö`ðß‚uÏŒ²'À=SÁÿeÿŠß¼T|UûNþ× ?fÛïˆZÄþØß´‹Oø?HøÃ¡ø¢×áõÇÛýGYÔ|ªØMñM¶ñuœÞùƒÄßðV¯þËþ7ý¨üûZüøã ~Îÿ;øKàwü%;ýš>)ü6ø×áwÂ×^"ñŸƒ/|Kÿ ßâo‡þø›[Ó,.u _7HѼc§ßøÄ3éZŸ?âÏØÛö%ý«üâokðÿÅχ´§ˆ5ŸÚ§Šü'ñOÇø¨ücý‰na[ïˆ^ñ/|uk§Oáÿ~Åþ#—áÎ7ƒ¯í¼+.©[|Jðõ¼?ÏÇ ÏüRÿ‚„x;áÿ‹u߇^øû@|qø›¤~×úgìS§ü>øZŸtcÅïÿaÝ?þ u¯èZçÆ¿Ž¿ü oðÿDø {s§ªø›ÅÞñ¾;Ò5èÞÕì¥Òµ½Oà‡ð[ïüqý©þ|ø-ÿóý¯üQáÿŒ°³ûzÇáJ÷öÑ>)ø‹áĈ¿|'û7üVðn³¬~ßzGÃ-#áþ¯e«ücÓþ%øÇ®™ñ²ÃÄw î´¯Yx~/ÜÅú?áŸØ÷ö=ý˜¼?sñ6ù|A é ~0x³öÐñÆß´ÇÇ?‰ú†þ&YþËúÏì½â¿‹ÿ¾/~Ðüi®]xß²äú§€f²ñ׊/>øG¶úõž¤êú®XxÿŠÿà¿ðOøïöxø¥sð{â…þ&þÉÿ³ÿ‚ÿeÏÙãâ/ÂßÚ—öµø3ã¿…¿~èþ)ðï…ü ¡x»áÇ?ø‚çìÞñ·‹4-OÄÚΡ©øÇÄš>½¨iž&ñ¯e(@>ÿøOñKÀŸ~|4ø×ð·]ÿ„£á—Ƈþ ø¥ðëÄßٚƉÿ > xsMñg„ußìoiúGˆ4íêú~¡ý™®éZf±aö²êz}•ìSÛEèÏøOÂ~ð…|3à_øgÃþ ðO‚ü?£xOÁÞðž§xs¾ð¯‡4ëmÃÞðχ´{k=#Aðþ…¤YÙéz6¥ÙÚéÚ^kmccm´D½QE|ÿ$ø¡ûSþÏÿ²ÇÆßÚ_öhñçìÿáÏøfÏÙÿãÿÇOø+ã§ÀOˆ¿¿áh¬øuyãÿ ø[ÂÞ#ðí5û?ÿ¯û_ü#:ö“­ëz¶ƒñOíÛºEý†‘¥ÿÂ9ygâoÕooŽß³wí:fÿÚWá×ü/ßÛü?ý€?·ÿhÏÙwჾøáïÅ?ÛÏöÓý§?eOÂÊøcñËöÎñ¿ÄÛo‡÷7¾ ø'£éð¨£øÝâ=;X²ø¹ãÿbx[ðG„ôO¿ÿj?øQ:ÀŸøö—ý÷Á/ŽÿðŒþËž5Òâ±þ¯øk/ø{öhðß¾ßà/źü'Þ-ø¯ ø+þm&÷Gÿ„Wû{þ;ÿøsLÒïuí8ñÏì¹ð'âWŒ|Cãÿøûkž*ÿ†\þÞÕ¿á&ñŽöÿøbïŽÞ&ý¥ÿfô 'Ä6e¯ü+_¾1ñЬ­ÿá1þÑÿ„sÇÿð•xJÎÃAµøýà«?õ„Z/Å¿ ü$ý 5øWöƒøg¥üMð–Ÿâ ÚxÿÀÞ%ð¯‹-të_xâgˆ^)øEñá·‰Ž…ªø‡ÂÚ‡ˆ>|Vð7Œü¬ëžñGŒ~ø‹QðåνðóÆÞ4ðN¥ x«Wö óÿ…¿ | ð_ÀšÃo†Úü#þðÿöœöÖÓêzLj5WXñ±¨x›Åž.ñw‹"øÀšGíñjßÇZׄõɾ!|@ÔføQ> ø~ÛÃÞ8¼ñï÷‹)Ö~|TÖüA§ÂÂðÿìÝà½?Dñ׊uVø’?á^j÷^ñíÏ‹®uƒÅÿðT€^ ð_ÄjžøÁq¤|8ø?ÿ@ø×®[éú‚åÔn¼+ÿ™øû ~δfŸ¥CqñÖÚxÓÆÞ#±Õ> ZÞ^XéÞ#ð¬WWÞ:Õ~jé‡?Ä´·üûÅ¿ÿáðž…ÿóý¯ü;ñ7Wý¿ÿdïØ*}?â]ïì;«ørãâïÇøSüEð§Mºøuû}êsEñŲ/Ä OÄß üu¨\ÅðODø§«ø7Fø¥ã"ÊÃÅÚU—ßéÿ¿ý‹?¶>8k7_¾ jÿðÑÿj…¿|?â/ÚKöñ7?áý¶üwcñ;ö¬Ð¾|8ñÆ=OáÿÁ/ø]¿4Í?Åž.Ôþ xgáö±ý±iΕ¨i»ÑûQÿÁ.?a?ÛGÁÞ9ðí/ð3þW„¾%~Ðý¨ük¤ÿÂÍøÅàïí¯ŽÞøáï٣Þ9û€> øWSÓ¿³¾ xWAðWü#:M퇃¯>Áÿ ÿ‡®¼[u{¯\}û=þК?í£øñ—À>|@øIñ¾üaø=ñI| qã¿…þ;¸ð'>,hš»­ü'ñßÅ?„¾#ÿ„á/Å?†?ôÍOáÇÄïhöš?Ž4ÿøƒPÑ> hž2ðo†}þ¼à§À†³ç…u |2ÒüA¶¹â ¯x«Ä¾9ñÿÄ/‹ßÑ@é÷ÿÓÿ“uøÿgÿÿbÿצþÙ÷ý|ÿÓÿ“uøÿgÿÿbÿצþÙ÷ýQEQEQEQEQEQEQE~0ÿÁM¾~Ò?þ>þÍþ:ø'¥þÛñø'Ký˜?n_ücÿýñÿì-ðóãøýãOاXð–—ˆnOøcHðׇõ½#àÇÄ R?ü¼Ó¾2øÆžðeö⟠[_]K¨|¿û8þÏðQÏxönð޽ð/âÁïø@>ÿÁ3í~xÇá'ퟪ]þÆß²ßÀŸ†ÿ >øgöùýˆ~7þÉ~ øõ®Â×ø€Ÿð€þÒþýž¿h‹ÿ‡_·Œ|K}ûGüŸVý¤þƒð÷Ä?‡Ñõsþ,ñg…|á_xëÇ^&ðÿ‚üà¿ë>,ñŒ|Y¬éÞð¯„ü+áÍ:çXñ‰¼MâbæÏHÐ|?¡iwš¦³¬ê—–ºv—§ZÜß_\Ám²¨òÅûB~Å¿ðQÏ~þýøkö_ XxÒ_…>#ð·ì-ÿÚ±ýžü9¨ÅàÏÙx«S¹·×toèûö ÿ…§û'|)ñ¿Æ¿øXwÄßð~Ñþ&ðÅ/øHÏŽþÃMüIñí £~Ìzëx³ÈñÿÃ*øâf•û7é’j?„|ÝáfŸ%¯Ãÿ‡VMmàOý@ÿ„ü3§x/¾ðvsâ Í#Â~Ѽ3¥Þx³Åž*ñ´í N¶Òìn|Mã¯k>#ñ·,ñˆußxQkcÄ:Ω«Þ^_OÐQEQE|Áû]üñWÇï…>ð/ƒµ麾…ûOþÄ_ï.~Ñž:Óí¦Òô­fåüA«x'á_ˆt¿ ÚËg}â«ÍÇXÕt"âû\Ó¿>5Á¼+ñsDøõ¬j??b kã'Åïƒÿð\M6‰Þ,øu§j^*¹øûûz~×øÕûü[ñ7'ø9©x¦o~Í müOàígÇ©.§ãOƒšŽ¹sáïƒ1øÇÃz–¡ª¯ô½EZÇüûöÚø1¢|oøÿ¦ü&ýˆ>x¦Ùƒ]ðf·ðŸöIø{àü%ø›â sö¸ý‰¾=ø¿á_ˆg_€ðO_Ø3ã·b|6ýž>.|'øÇð‡ÇŸ´íûûPxƒöxø‹®ü<øKáOÚâ¶¹â?|zù_ÿ‚~×¶×?iïÚ7á/ÁÏÙƒöQøñÃÃÿþü ý‰|W¦k > |ñˆþ~Éojï„?iø%Ÿˆ¾"x/Ä>"|"ñæñRßMý?àŸµÓü.ðgŒþþÓZ÷Ãoxgâ·ý~þÀž,ñWÅïƒ^(ý¦¼KâokÚGíañƒâǃֺΣyà½ö`¼ŸNøsû"êŸ ü/­\ÞkŸ |?ñö\øqðƒöñ÷€5ù¬üA¦ü}øÓñ“X×|-ðïWׯ>ø;íú(¢Š(¢Šùþ ð·Ç`_Û‡à§ÂÝ þ‰¿?dÚ[áoï ÿièú'ü$^;øð_ƾðŽ…ý³â-CHðþ‘ý¯â _OÓÿ´õÝWLÑì>Ñö­OP²²Š{˜¾@ý¯f_ÚÆ/ƒ¿|3àO‹_µÿí¯{áÚâ¯Æ‰ºWü4ÏÃoØ7âŸÄh°ŸíQ§ü%ø ÿ ¯ö0ðŸìo…ðÿŵÐýží¾ÖÚ7‰µ3Ä~+ÿ„³Ç“k_ ¼ská×ê(ù‚ýž¿dÿø)­ÿ„¿j_üI‹ö¿ðG„¾%|@ÿ‚Oéþ ¶ñígñ?ÁÞ;µð'€ÿn/ø›þ ©ü:ñdßðX¿ø)gÅ?…¿Ú²–§¡éÞ.×|ûLü!Ö>%höx;Àß n¼[¡É¬øÇçÿÚ»þ áÿˆðþ—ð6ÿö0ø¯û_‹%ý ?m©?k¿ øËþ !ñËâˆþ$~ÉÚüwá^³ûx#á=·ÅoÛsáüÞø/싦\ø“RÖ>~Ñ¿²GÄŸü,ðßÄ¿…_¿i|Mø†|gý~Èž,ñWÇo|wý«n üTñ…ð»öZðrë:‹øQøðQñ¾kûHiÞ{_Â×~ ý©~+xËâ·|ñƒá߈õüný‰tŸØ‡Å1éú7‰,|I×ÛôðüÿÀŸ´wÃ_سá׃ÿkøÆÛˆ´–¡ªÛ|Rñå×įØxÄ´ïÆ?|Ó5ßj´'íe©Íý—ðKXøw§iš­ûLüwÖ<£ÚéþÖ>)xÇSÐ.µ›¯¿è¢€ (¢€ (¢€ (¢€ (¢€ (¢€?ÈþŽÿ”ëþÜß÷lßúÇŸ³íÁÑßòÛ›þí›ÿXóö}¢€?Óïþ §ÿ&ëñþÏÿþ Åÿ¯Mý²+ïúøþ §ÿ&ëñþÏÿþ Åÿ¯Mý²+ïú(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+àø(§üW >þɱÿÍöþÐý— ñ7‚-?á1Ñþ)ø÷À?ˆ~¤|Vð'ßõðƒâòÿÁG~,øþßxKö&ýŸôßÙsAÕ´ßø—ùÿ¿k-Sá§í/ûKøÆV¶ýO\ÿ„à—Âø'§~x›Â¶Z?ƒ ÿ…ëñgÚŸˆ~ ø·K¿Ð~ }ÿEPEPEP_ÁA?âéxá÷ìW£ÄÏĶŸÄ á§ÄÇûÛVý¼/¬hž.ýºõ/Ï¥}§Æ~ øãÙÊÛÄ¿²æñcÂztWÞý£¿ißÙ¿Ã6Þ2øaâˆø‹á¿¿ëàÙÃþ/ŸíOûN~Ö?ñ÷ðÿÁþ_ì1û>iÄÓgü3¿Ä_ˆðØŸ|ý§ö-ká—ü,ßÚj÷þ§â_‚áÓáaýþüdÿ„»â'Ãÿ|ÿ„0ïú(¢€ (¢€ (¢€ øöçÿ‹Ñÿ »öÓ{ÿ ÿ ·ü/ŸàþÊý„þÿÂ#ÿ kþ¿û+íßðº?ác|&ýŠÿâñ—†>1|9ÿ†¸ÿ†Žøiý¥ÿ Ä¿aûÅž,𯀼+âoxëÄÞð_‚|áýgÅž1ñ‹5;ÞðŸ…|9§\ë!ñ7‰¼C¬\Ùé‡ô-"ÎóTÖuRò×NÒôë[›ëë˜- –Uùö1🊼[§x—öÊø¿áŸxCãíYáÿ L<â}Qðgˆ> ~Ì ñWÅOþÉ|aðòþÚÞçÂ_<àŸŒ¾%ñoí'o®ßøÛÄÿµÄß>Ð>!j¼!ðGÁžû~Š( Š( Š( Š( Š( Š( Š( òÿƒ£¿å:ÿ·7ýÛ7þ±çìûEðtwü§_öæÿ»fÿÖ<ýŸh ôûÿ‚iÿɺüFÿ³ÿÿ‚±ëÓlŠûþ¾ÿ‚iÿɺüFÿ³ÿÿ‚±ëÓlŠûþ€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€9ÿx³Â¾𯉼uã¯xÁ~ ð_‡õŸxÇÆ>,ÖtïxWÂ~ðæs¬x‡ÄÞ&ñ±sg¤h>д‹;ÍSYÖuKË];KÓ­no¯®`¶‚YWäø'„üU¥þËþøŸñ+Ã> ðÆOÚ—Ä1ý®þ/ø_Ç:6£¦|LðŠ¿hÿ]üJð×À‰7úýµŠ|MâÙ/áN±ðçö>Ðõßi~ÔWáïÀèVøoá½Bøsá?Æø/7ü#ágìÇñ'À_ðKo|ý >1øƒöÈøðjÿÇ–¿´/x¯XñÿÀŸ‹?µ„>ü[ýš<àù ñ¶¥ñ à§ôû@Q@Q@Q@0~ןüUðOàÕí×ÂÍ?Ãþ!ý þ'øƒAø)û1ø;ÄöºŽ­áÿü}ø—<º?‚ux{ú®“ãmgàÿ»dÖ¾;~Òw_›Pñ§ÿeÿ…?~'é:Uü~»ˆwÿ³×ÁO þ;þÎ~Ô• éž ¼Ò4+;fëKÐôm:ãQ’æk+N¶x¬áùƒþNOöìÿžÿ àœÿöËûwöìøûðwþà^%Òÿá›?b_Œ_õ<|øÅÿÿ˜7ůÙGþ%ÐEPEPEçÿ~)xàwÂωþ)k¿ð‹ü2ø?ðÿÆ_¾"ø›û3XÖÿáð'Ãÿj^,ñv»ýáÝ?Wñ¯ý‘áý#PÔ?³4-+SÖ/þÏö]3O½½– i@>@ý¨ã%þ)øOöпҼ%kÿ ³ãïíÁö¿ô û,_øâwü*ÿ‚¶ÿoûf™ãßøkß¿õ?…ß¾jñï~ÆÞý¬¼ñKYøkâ߉_?áaýÿ_ ~Å_ |wào…šÿÄo:ü#_´oíEñUý¥h ÿièúÏü ^;ñŸ‡<+á?üþÙð¦¡wà_ÿÃ0üðÁÏÙgþOì|?£üjÿ…)ÿ ¿UÐm|gñ#Å77Ÿ_ÐEPEPEPEPEPEPEPùÿÁÑßòÛ›þí›ÿXóö}¢ø:;þS¯ûsݳë~Ï´Pú}ÿÁ4ÿäÝ~#ÙÿÿÁX¿õé¿¶E}ÿ_Á4ÿäÝ~#ÙÿÿÁX¿õé¿¶E}ÿ@Q@Q@Q@sñ†úóKøGñOSÓïnôÛý;áÏï¬u>ymoì/-<3©Ü[^Ù\Á$S[ÝÚÍOm<2Ç,3F’G":†…£ãgÆ¢ÿÂÝøŸ¿Ê«xãÅAL›rˆÔ„Ÿ6òÅÖ5U9Ør©ýÈøÞüø¼йø_ãð¬%XøSV À(,H8 ($ã€M<‚K°LÑ\¤¦f+m"²¬P¸Gò£¸%d.¡"œDec¸ å¾Z?_ò}Ÿáo]š5ÒÎÚùwZìïä•ý:ž°ß~3½~,üNK0Sãß8 jømè®Ãṯ1Ì€ˆ+Iñ“ã[??>',JêÌǾ*bó :(MWy“j…é’YbWܲ™þèðìð^ÿáçüaâÏøÓFŸÅðÅüòÉâhÚXÔ5} ÃSÚµÿ…ãœÈÊ’b9çf–I.”©w*›Iû%~ÌêÊGÅ}p®C`øóÁì$Ý)/£7ÈÊ¢=ÙÜå7Fñ³Kæ ¤m¢Ñi¢oM.“Žª×²»óÝÜ.Ú¾¿$Þ‹–ú«íÙÙ+yŸ/ÆŒØs'Åωp*¡‘L¾;ñ6üùr3/©Q¶@¨»•ãÀ圻´P\üpø½jåøÁñ5älX¼kâ…Fa•ê§ûèÌ¢DfL°?zKû~ÌóËæOñs\•HeñçƒÊ¼¶#v•æ1iYcu,ÒV2Þcy<Ÿ²ìÅ*+ŠzÀXñ!q㟨'JZO+GŠ<é&à‰.À1'ïÂö‘þVµþE­¹l¶âé{륮¯å%Óázü.Ú+êµéÝÝY?€ÆïŒx 'Å¿‰©½/|RJ’Æ0›WYW`)Š21’Còå…ßìÍ4ß¾/ù,ÉñsâfìH<{â ¥‚åUŸûTaHu1 E3)ÆÎÿ|ÙöbbüPÖH ±PøßÁD/È®GÑ BA†õ|A#¨Ë)¿±×ìÀÒFÒ|S׃ƒ•DøàĈ’èH0¶ŒË"3„$Mæ—ly$–|êêñ’Õ$¹v³‹ÚÊïNÉ5{Ùê›zõé¼_N]½¯º³²¿SùÜø‡û \|oÿ‚•|>ÿ‚€|dñ$ÿáDþÏøyðOCñM߉õßøcã'†¾,üFøƒmñV-KQ¿µÓ4¿ø@ô¿Úÿ½†H|G,8ñ¥ãKüâ?‡þÖµÒɾ2|b¶?iÿ…¹ñL‰$ø‰â¦‚##ó gX\ªƒ¿…‚¨E‡èý?fdVüQעܤŽ|»sÆåEðÿ–X+;ã‘[”b‘bû ~ÌŽ?üHé¹F|gà@¿1eD <$ Šñ©]ˆ¿¼<¦aN;¨ËÿJËݺm—»æïq7ÑIwÓd­çmÝü’¶÷>ãgÆA)ñwâ†FU;ñ\¤²2««+¹Ê0 ¥¦ šõh²|]øÙqp§þ÷Äø#Tà'ĬÛAPìu@»7<¯¶Ñ“Ì»}õìyû0Ç.åøŸâ´©!üoà“l%òïÿ“»zî`?v Ée¸ß²gìÔ˰|SÖŽbnñ¿ƒHQ±€*Šª»n‘•ù.YØç…í&âôÑÃ}cµµ»åûOºÝ» ïOzú_Ü~Zùm¢½–ÍjÏÏ×ø¿ñ¤] ¿¾&l(Ÿø¬Æ>ì‰ÀÖl@Hƒ åWQ#™Dÿðº~1T?>&°…óSÇž*>Pv#s/ö«QHÉ1°c=òÇ}èß²ìÌÙ#⎻r¹ñÏ‚N΃ÿ°ÖeBC*3‚Ûßw˜ÂVý’?fEj|QÕaXÊ™Y$Òôéõ[;M¸‹L´Ôu]6Ææí ŽæþÂÕÚhÿS[öFý˜pøø§«+áü'à4¡?ñ'¼R,’—vbÒ ]°Éƒâ޲ÿì÷ñCö¡ý›f 7âV¡?€´M+ĵïÇNÏÅþÖ"¶Ož7ø{§~Ëÿ |F4­+N¾øsyñCã¶¿}ñëá猯5øÏŒ¬ao‹_ m¼㟠x‡âF«àž £ZYEÅë{=Oeªëv®ä´Eüšÿ·[ÞÝãgmÖÍwÖÏæ?ÙÊïãÏÂÜKã/‹ž/½øÁñ+_Ô¾,|}ñ/‡|yãK½7Äÿ|amdž#“JÕµ'°ñN¿à_io†¾üƆïÅ~øðçáWÃëëû˜ü§÷ÿø\ÿsñs⣣þáÈåßý¦hÙI%B™FvþìWÞçöIý™ä_)~,ëQ€ÑøïÁ^h/[û×Ì(É:³Fåää Q‚FÙ#ök2$ƒâ¿‰ÊåP£øßÁ)|¥Àuÿ„YHÞÛу(ŒHŒd)ÅÚÉùhí´t×V¶z4î´Ñ‚wµ¯®ß¾Íúk}ÓÞêÉYéð2üiøÏ•ÏÅ_‰ã! -㟨H³)ÕŽÕd%‚ÈU£ NÂHãþ2|kv ÿ oârŹ‚øóÅŠæ"åÞ5Qª,žh@«†PÇzF¯Ÿ1®?@Çì™û6eË|VÖ‚¨%Éñ¿ÆÀªÄœ…cº)I+´”%TE&ÅöMýšC>+kŒ„²x0n'ªú3ùâ‘}6 †”À§ýËH¿/´š²³µü¯dÚHWz7Ùh¤ûu³V¿äºïð*ügøÍ‡2|\ø—ªËã¿oÏ—#2ñª•d ‹¹^<YË»EÏNj֨_Œ^FÀE‹Æ¾(TfPYª¾ŒÊ$@v`Ë÷¬Ÿ²ìÑs?›/Å­rTFŽWŽ_ø*D*@bÒÑüµ($¹EùI'?137ì‡û1Éiÿ WTA%ž?x)X´^_šÒÄ ©pÅÚFu,¯"?+ù©Î+xÛÒÛ——[wM»=[³ºBo½×¢oKÇÉhíÑß›Gt|~7|cÀi>-üMMìè|{â’T–1„ںʻÑLQ‘Œ’Ç—,.ÿfo‡dý§µŸÛ#â״´­ñsöxø >•ñ—Åþ+ð‡Å‹ï|7ñ×í kª_Að'áô:þ‰¯ø›ÀÞ&¹ø>‘®þо:ðÆ¦º'~|U‹ö(ø»àÍUDÌŸ¥·¯Àÿ†?b¯Ú›âWÁ/|MñOÇ ü ø‘'À¿ ü:ÐàøÛâýSã•ÿ„µ-à톑ðÃÁ_üi­ø†ÞOˆº—…Î°Óøv÷ú‡ÿµ|Mã›Í3ÁúF·®é_/Á&¿àƒ?²÷üÃàh¾9øøÞ=ý¥>'ÃáÍgöƒñ§ƒ¼w£éß%×´(5y´ü6ðþ·¥›ÃàŸ'ˆu›;/øŠÂÛÅß5í_ÅÚÖ™á=3QðßïÑ];4“Kg¦±}•ÚÞÖ\ÛuaÍ×]ZZ©tåßÑkkk¦Tý†_4Ÿð¶>'²Æ *Þ:ñR—*¨Å·r¦wS̙㠵„3|døÅl~Óÿ sâ™6IñÅMFF æΰ¹U~ 7PŠ7Ðý?fdVüQעܸ&?ø väYQ|?å–Á`wÇ"°r±Hˆ€þȳ#€Å?:nGŸø/ÌYQ Eb¼jWb/ï)™óÇuà6²÷n›òôj>zÝÝôRé}‰[­ÖÍßÉ+_©ð$>0Ê O‹¿0B2¨ñߊå ‘•X Y]ÎTy€m-0hÓÿ«E“âïÆË‹…?ð·¾'Á§> ø®fÚ ‡cªÙ¸áåxÕ¶Œ˜¶eÛï¨cÏÙ†9w/Äÿ¥Iã˜Ûa/—øFÛ×pû°ÈVH -Æý“?f¦Mƒâž´p…SwüvŒ>U:*®òìXŽ#`vÔ–f9á{I¸½4pßXímnù~Óî·n»ÓÞ¾—÷–¾[h¯e³Z³óõþ/ühCoÆ/‰› çÇž+1ƒ$yÛ¬ωW§˜æJ™¾4üc_ø[ŸÌÜHüwâ’-„fάv²+á£`Æ<*óoÙ öef |RÖ÷!7xëÁcc… 4TŸ3ªJ®ñ噲ÌÇókã‡Å/Ù?Á—à—¯^ø‹[Ñô³©ø÷ÅÚÏŒ<%ÿn‡%ÔV‘àm;ìºl:ޱã=^òêïWžÂÕñ¥Å¤KáÐ@–êÓµk]Û[5×ݵú%et¯«»åV»/µ»+ëguËå½µ·«·onøMño⦩ñkáv“}ñOâ%þŸyñÁV—ö7ž7ñ%åž¡g?Š4ûk›Ø&Õ¤†îÖê×íÜÚÍ‘O˜'Sc›÷Z¿Ÿƒ_f—ãÂíÚ3æüLðÅ*ÇKˆWĺXV ½‰v‰ÁF( ˆìfŠ¿ ú‰î½;Ýìží/ËG̶Av÷ïÞý¶ºéÙ¥guÒÁETQEQEQEþ@¿ðtwü§_öæÿ»fÿÖ<ýŸh£þŽÿ”ëþÜß÷lßúÇŸ³íþŸðM?ù7_ˆßöÿðV/ýzoí‘_×ÀðM?ù7_ˆßöÿðV/ýzoí‘_ÐEPEPEP—üo ß¾/*±Vo…þ? Ë»r±ð¦¬.Ð[ ò6‚Ùkù똤vÁÝd[y¦Ý’$2,lXÈè~i:üİ2;8 ©5ý |o!~ |^b2Âÿ’8ä jÇ0eçÝXz‚8¯ç±"Ya¶&Ø”4l‘–eÃ! ¥TáÑ›ÈÚãt‘Ûtk¤W»'ê»êÒ¶Ý:ZÎí¥¿(}ú'k[­®õòüm£i¯3%fƒ…¢ á߇Ñ{c¾–U· ±F|Ù`"+˜Î?Ï_¿´·ÁOÙÔx~ãã?¥ð}¿‹n5ã¥<>ñ޾&m"gµ’“Ã>×m-c‘µ­<]\=ÒÌq™[ÊŽÜÐßäþÌŸóÎï|;.@*  µ92Täñ"¬Š¬I*™”gùéÿ‚°Z[^Úü¶¹†)¡tø´ìé·}·ÃÛ…òf¹†hmÞ) Á.’5á•glÓ×Óþw»V¶Íú‚×~=lß}O“>?ðS?Ø_Œül€‘¸F¯àŠ,ÄûU x!ˆ1˜ª,AãPceœðS_Øe[+ñº0ÿ0\øâšoÁ‘Õq‚îáÈ8 ,j‰QŸóGoÛƒö¢efâƒÆ«´˜Çƒþ²¤qùq@©4Þ’âà’¸˜»I,¥ZyÞw’g¨¿á¹j_ú*Mÿ„gÃßþdêÔomvóNÛ;|=|¬šw³Ðµ릖êŸE¿»¿àÓO[Ÿézি°¾ ÿÂ›À¿‹/˜Õ”x(¡7¶%*&à¯O2VÿÃËÿafVEø× èßð€|Pf"mŸ€X¸r2V6ÈWTÊËù¢ÃrþÔ¿ôT›ÿχ¿üÉÓ“öãý¨Œ±>)Ȩ7²ø+áä„&ôf>KøZ8¦ /ÊêŽ3º£¾Og½­®–¾›§‡W¦š+.½Qìû[ïôßÝòén×Ù¯ô¶ÿ‡˜þÂ'÷mñ®ÑäùÉQð×â*î ¼‡eð*]§Þà†ù&xöȤgø)ì&rã–Hr øwñ)˜è@†ü xyÓ‹5BÆ=Oöÿ‚VþÀ¿?`ÿØ“ãGÅ€Ÿð”|KøÃû"~Íÿþ!øŒ|KøÉ¦&»ã?ü%ð'‹‰sú7eTY›ÿ-ý…å~6€s…'À€ÊpÛ?á!ºÊ@뫯ÐïørÇü''?³"¸©#â÷í;Y‰|N @`B«* `ñFçþµÿÆ?ðÌñžw_‹Ÿ[8M˜¿á´qR a‚—Á¢ýyeÒí(·¢ŽöOT®Òz^O _´%Òî)tµïdúlŸVÿ1üsÿiÿ‚yü7ð¾©ã_|~7†tf²]OQ_„ŸµµþÕÔmôË&ºO€u ÙD÷×ñÁnmìçX£’)îÛÁãåØÏþ iû xâÃãgí¬|w´Ôüyñã¯Ä½2Y‡þ!Þ/‡¾ |ñŸ‰¾þ; Ñ!»ð%÷ˆ<'á]gá—¢|~Ô¾ëZ›G¥üdý ~4øëOð÷ƒáa\ø[Oú×þ •ÿøEñûà€>þÿ~|&ñGÅ¿ÿ<=ñËãÇŽ¼uñ«ÆoðösÐtÏüHñ§ÄOø#Xø¿kcã¯_ø¿Á_þøkÂW^»g­^Y_OðÿL[ß‹¿ µ~.~ÁðC¯ø&ÿÁßü7ñŸÁüIñ—„~ÙOá/†þñÇÅþÑÿ,¼/§Ão®üDŸáçÃßø/Ãí«ÞÁâ?köðO¹¨ëšŒú^™iåÛÂôv÷R³_f.ÏNîVZ&õ[^ÝÝû-nºFééÖîËDÞ««±0ÿ‚˜þÃ`ø½œ£Ãáÿı¸1æ'áûc ùŠrÛCíV’Bÿ-ý…F@øÍÚC‡Ÿ[puwáî ’v–Jú[ögÿ‚nÁ'ÿj€¿ h~Êž&Ñ-ü,Hañ4avç.á´0qŠW¾êO¦ñ]´·O+iw¦–º»þóÙoÕYzôóÑ®ïó½ॿ°ª2•øØ+cÀCËÞ¡·€ âD r¡ˆwü<Çöê~8(#à‰ÄC9ø~á•ö† • (ŠYCÿáË_ðL|ñû3ÄNíÀÂÝøù‚ØÚ8ÿ…¢F;íÁþ}»þjþ±ÿÉþMpÿš¹ûAž"*¤cþi';FÕäÊ …C¬’/³q—[]Eiîí{uºÓ¾­ìµ¯|ÔUþé=þZ¯CóÈÿÁK¿aQ÷¾5$„sÿÅS·ÌÊÿȈ×!K¶‰.È‘mòÙGü»ö/ÆäBħ?þ&WXãáóÈ[ËÞûû+YÉ%¾&á—a9,v ÉóI¥ðEø&7Aû3ÆOâÿÇãœmÀ?ñtŽrTg îÜùÌ“qw¥£7¯h¿å½ÚOÏGÜ.ô´dõè¢ÒøtºO¥ô}ÏÏÿ0ý†0Oü.å'/Çü+ï‰@ŒùŽãáö>àFÒJüÄ-íË5¿à¥ß°Á ?ásDr§ ÿ ÷âPVà ÀWð§aER|Æî/—Y$–OÐÖÿ‚.Á1àG•ÿfXÑ"ŽWw‹¿´ TH€;øšGKypd‘7o‘›ò'þ ­ÿûý‘¿c/ø%GíIûKþÍŸÃ àšx7ÆÇ_¼Zt©2yRáq øsñ02’[þüe‡–Ä›ÃHV˜¦ÄðRÿØfâXà²gxáHí¾|Pk—’fXÖmÞÝ%Ã0Š+Bc!î$fqsŸ;üÏ¿á¹jnß%_P¾ø~ ÿ¼€7_˜‘>䎭õ¿ìûIükøãûwþÄÿ¾(øÚ?ü3ø½û\~Íß þ"xf x+NƒÄ>ñïÆOøSź÷úo†­5 (5}VÔ4ù®ìn­ï Žáå‚x¥TÍõkKÛ[[Tõ¼vºî­êîÍõi¥çnÛéå­­ø&¿Ò—áÆ/‡ÿ|¥|Cøe©^ø‡ÁšÍåÆŸ¦ø‹Qð¿ˆ<§k×%£ŸPð퇌ôkšjº i¥6SÚMvH°†æB#?Ï7Å[9µïÚGâµ³ÝKm|hø‰¨M/Ú$Oˆïnµ+‹D…£¼šKO=níÌo5ÌÊÏÍÐÿ[ÿ|9¡ø?]ð‡|3¤iº†ü;àèº&§Ù[Xhº&¦ßjVZ&£ÙYÀ‚)í-Z+uO³Ú˜m/ !þI¾&9‡öœø®^?Ý‹ÿž+¦›`ŽF×õºmöï"1ÃóI!u™*a¼lúÅ-ZÒÉÙëdµ×D´½º¼ãѧÿ ÒÑ­­Ýmå³µÿ³<+g´ód{x¼Sð¤C$ŽZYei~kI#Îò̱ùÒÞLÑ„‘›Ë×ôm_ÎìÔòGã/ÙäNÈBø«àò³.Í{W†/ÝÞÉ%Ä‚ †V’4\èòªnöß­îÛìúíæž·ò°ÿ®Ÿ¢Z=ü®QE@Q@Q@Q@ä ÿGÊuÿnoû¶oýcÏÙöŠ?àèïùN¿íÍÿvÍÿ¬yû>Ñ@é÷ÿÓÿ“uøÿgÿÿbÿצþÙ÷ý|ÿÓÿ“uøÿgÿÿbÿצþÙ÷ýQEQEQEyÆÒWàÇÅÆPK/ÃIÕˆpI<U†z©èŸ¥··cf’6E‡íÌCbX”²¢•c´nÈUwRñ€@!Ê·ôñ£þHïÅŽŸòM¤q_Ï]¸!ppÁså ‚ƒò0Ú#·uÀo)W-&ëäÓºW/5Ó¶ï@?]øÕ¢ÝøÇºç€fø­ñçâÇÁí?Ä:^§£\ÙØêz׉âð^»ãh/|%uá·Ô-¼5­hÖE¯lµ8g’&WnÎNÚ®ÿÝ{Þ÷ÞÉ8Ý­ô°®Ýœµ]ÿº÷½ï½’q»[écöCãíí¦ŸCû:~ÈZdß´í%âÏ·é0jš%ÅçƒÉe—©øßâ¿Ä(-›ÂvvÚ L/`ð¶“-Ϋ­ÜÙɧ2Ã4Љ7üCgð·Â¿Gü÷Ãß¼O¬þÜÿµ»}öÁý­þ,èþ ðÇŠáf‡j×¾%ðGÂ}SƉ YëwŒt{aá_†~øUð\Ôo|QªHu³Iú-ð·öýž?d_Ù öHºøµ'ÃßÙ¿þ¿ƒ|iàß…¾ð-åÝ׊ü}«xkNñ?ˆt¯‡ÿ>øzëĺΣ·ž$½Ò<=á©õ? ]î‡Rût$Á?ÑvZ‡ì¿ûy|ÙGàïŽ_õ½FûGeºÒuåÑ|Uá½DG¨ÚIýµo¢ø›Á>)Ñ5a¶‚ÜÚøoÄúEßÙ¥³ºÓ¤6ó@+í«W¶êú¥«»×m´Ý?Q_mZ½·WÕ-]Þ»m¦éúûw…<'áO…^Ѽ#ákMÂ^ ð7‡-´ÝE•Ž¢ø{FÓ„báceik¦Ù£Íux.'û<)’ƨ$Y#øËá/üãö+øßûLÃ&ü+øÅ'¾.ÿÂ+âZbxWÆ—_üA¢ø?R“Hñ†>(ÝxrÃÀþ%Ôt;¹£¸ÔLJµ›ðâ3g.£u2+ò§ö‰°ñìÉð7âGॿüA{û|ñôšGìµû-ë:÷…µŒ_´nü?ð¿ÆÏhˆ4ßi§TžK_è]‹K-&ÆÒãÆw igäÜû×üN{ö±ñljÿफ़%ø+að À¾)ø5àÿÙçöOøGcs£ê6ž ø9ámNmwꦉ•¥éÖÚ|>'ñx1g§Ùù¶–Ã,hC8Ý}Ë[Ù7u{»ï}mukÝm£×ܵ½“wW»¾÷Ö×V½ÖÚ~ï„Q€ÉÁBBC•PB!To,s‘FìáGGº%MKÐrX¼â'äÆß¼Àó*ÿ¨PXà®Gʵ3Œ(@dy@@¨ÅFÍž\12Ûû¥•e‚Pd¥ÆÑ‚CyaL³d´kæÂ‡(N]s$ †|s"ܧÌì»Yl¯­¬º|ík_¥•'eÚËe}meÓçkZý,¬ƒ8 AË(o-ðñ¾rD#6åW“å/nÿ»- F¡AF mÈ!X*…áWãä!CEq«Fª‰:¯Êqó¬æË’—'$ƒË’¿êeQ˜(ÝŒ±*!ýì›CD|©€.Èʪ Ì–ò~ð»ßw}zói¢çv´è–×w¾îúõæÓDÿÎíiÑ-®øþòç“•ê7#*»Ì@d4J3”ÜÈò®Z?Àÿø9ÝQà…Ÿ¶òƱ öjbÆÅ#öÂø ¹F»'jÙÏ9ZýðA‰‚xýÙ‘¶ùnŒØfÄ…L’™/'•¼þÿÁÏ\ÿÁ mÞXü¿³AË 1Ïíð–]£kãdx9ìíÚí¿zžþ«»¾÷ýz6]»]·ïSßÕwwÞÿ¯FÿÈ«Ðóùwô¼cóüIEçüýýu¹¸WßðJPüþ ³ÿgõûzÿÑÃü:ÇP:õx#¸5ð%}ùÿ¦ÿ”£ÿÁ6=¿oŸØìuý¢~÷ˆ=qÎL˯øeú.¿á—诟í,ªž=Ñdk X¨‘÷ªƒ^ÕP¢²/˜Ê|ÝþWÌ$q„Wþ>¾.Gß´‡Å15£ÝEÿ ³ÇŒÍæ \/Œ|LÄ9(ï Á b[å‚)ÿxc¯ìö™.¾2'í%ñSlÀçã¯âŠiX!Q˜Ã°F.NÍÎÍý!V³¾—½üúh¬»}ÖMÝÚ÷/[kßç{F÷é÷lï}ueQYˆ(¢Š(¢Š(¢Šÿ _ø:;þS¯ûsݳë~Ï´QÿGÊuÿnoû¶oýcÏÙöŠÿO¿ø&Ÿü›¯Äoû?ÿø+þ½7öȯ¿ëàø&Ÿü›¯Äoû?ÿø+þ½7öȯ¿è¢Š(¢Š(¢Š(Ì>7à¿ÅÖ…Uæ_†>1#œ#H<)«V'€¬Ø } ¯ç¢Ù·¨#g`Y"™X«ðÊŽWhV3;Ư°¶ÿ˜³É»úøÜ®ÿþ/$lFø_ãõF'hWo jÁX°É1 c5üóé¶pZÂì„5ÎÒó AÃÄZÌÛf\ÉîÀÄÒ¨Üe)¤6kOònÉ;~Në^öß>ßÝIë¯~¶µïe{þ¾xëþM“à ôøsÓÛáÆ¦x;eÎâ0¸Ý½/óñÿRÁo|L?:¡‹GðÐ’ûB¹e1–߉PÂéæH× ÿA>7çödø)üSߘî'·Ã}LîÈ †\oRTüà ?Ÿ_ø*˜Ëü ã9‹âñé»vè>ãd›÷g9Û>üç}Æ|É2KG}ïkÝïhü¿_ÈIhï½í{½í—ëùæ)žHÆîß© ‘Ð ”H$0Úpéø·§e  óÇ$ŒäOÌÚèJ×þº%ú Zÿ×D¿@¢Š)Œÿl¯ø%YDÿ‚ZÿÁ7dsµSöýË0—ÊìùðᙌŒÈˆ@\ùŒãÊäæ0XŸ’´í_ö…ÿ‚›üBñÝß>6üCýšÿ`†0¿ð.›®|*{? |hý­¼WàÝE4Ïø§HñÍü2\x+ö}‘÷Yh·¾žÎûÆ’Úêm„ÚŸ,zÏì] x“ÅðCÙ?à k˜ü_âOø$ÿÀ½Â’ØÏ-­ì~%ÕÿdO éúÙÜÛ2Ïotš¥Å«Áq‰ œ$±˜äŸYÿ‚Y^øN÷þ ½ûÜx=-¡Ò­?g…ZN¦–‘¦Èüi¢xRÇþ>C°ánÄ/¾¡?Ë-Πn®.q=Ìäó=|µÕ¯;>¯²²Më®´s=|µÕ¯;>¯²²Më®´QðŸü³þ ãá{‹ÝMd„þ8Ö/µÔõ}sâ߇WâÞ½®ê†Øu ›ï‹KâW3·™%¶œö:CÏ+¹Š0žLy¿?à’ðM?ŠZuîŸâØÏàÆ“ ì3GwkðçF“á Ì­Êü%Ô|*·,‘Ê$ÜépêJ:FòmSú0ª¿p$?2dRr£²IX-[ö¨š|¹!éÇæFW*:ˆÌ¡À+·Ïo‚²«ù2ob¡â•ܯEÕì»Ù·ÊõwßTÖ¶}NÃÑu{.ömò½]÷Õ5­ŸDÓ±ä¿~ ü;ý~ø;à× GáøG²Ñ4µKÊ‚ÚÍüËÛ­WX¸¼Ö5ËÛÉü·¾»»¼—Q»¸¥ƒ°?3ÛÿÁ7ÿeÈ>"j¾=øs§ko>/êŸ/¾+üD»ýž5‰zŽ¡.¥yãYþ ]ë§áÑñ5Æ­5Æ·t'Ñc·½Õ¯n翆¶];z‡ìÍñ³âçÆ‹Š—?ÿf/~ÍQx'↱àoÁãhÝ×Å XÃg=¯ÄÓBX§Ò´mNy®´ÔÍdµ‘Ÿå\,_PžC©Q'ÞÝÀ݈ûp†F|yMæ²+ä°M¨Âïv­m®ï•Ùí·ìîîw»V¶‹WwÊìöÛÎöwwGàoíû7üc_ø(ïŠ?jKO؆çö¨ñ÷‡ü)à­3ö'ø¡¯|XÐü7ð›ön¸µðE–•ã9½«Ü^øwÂ:ÕÔÖ+oo ÊêFÖ{ÔïØóöu¶ý—þø?áBjZ~µâH§ÕüUñ ÄÚnœðYx¯â_Œµƒâ_øžÚÚVŠ{6ïZ¼k->âæ¿Ö³Lñ¿˜Wê`ÅAEfr0ÊØÎ7>Õ`7ehåòâI£E „1o#&=…äVu*ۼª©B,‘£V>b¢)Ž1#£ùª+YYì´Òú{[6“×[=U“¾À­eg²ÓKéî=lÚO]lõVNûÌoü;û(øŸâg‡¾ üxÒÅ>;Ò4oˆß¾ø£Âú¦§áÛ_†?ü9âoEe©üBº°Š(5;¿Þ¶¼º——ÞîÓ.£Ò%,nÖÞ_èûÀ>ðŸÃ/xOáïƒt« Â^ ðÖ‰áo éI”[m/@·ŽÛCY!CÝ?“u=Üÿf7Ÿé2´³ ù…ÿªû£ûx7áäújjgâ·íaû*ü6Ó,q<·ÞjŸ4-sýÞ$>dÑYø~âKHå0"IúììÆP |†f$aËü ü¬Z@«/Ýp†,¹t¥Ù;è×—¹mífžÖ[KQvNú5çeî[F»Y§µ–ÒÔ`È!pÿ+s€Ç$·Èï2F 挴8Tò\·E0”¶ŒùŸq3“S'ÎNÔÛ•K·÷d`Úþ÷4ܦ>gUP²oc.ÅdÂùÒ.&o%c›‚Ì]¡Ùä¨Ee-ð¯üöëðìû!øÇö§ÕtÕøm[Úà xwR´·“âgÄÞAá¿xwFÕ]5k;]WXº¶ûN£²æ;KKÛÉT„†}·Ý}§¦‘VÕ»=o³Z7{-m÷_ié¤UµnÏ[ìÖÞËO»Nîx“?¿ ‹9à(“±Êù6qyó⑉Žâ ó±MŠ-µÎv7– ‚ë.à@e¶;‡áŸìIÿ-ý¦¿kŸÛK[ýŸµÙóÂ_ >üø/àTý¬5ÝfûW¹×|ûRøÇC>+³øAà[˜îm4}JÛKÒ5]8jë¨Gª]C>¨Íf–ì1îK%%GveÀtUvÝ!ÜÑ@p¦Key70ÞÒ±–7Q n'¯]£Õ·Ñ­µzk§’\Àž½vVßF¶Õ鮞Is.íã‡Á‘† LJÉœS¶3º £ –ß":ªÍ_‚ðsÖGü»öÞsÿÔÄn/†oÛà`†í ð¿*0È?{Pƒ"ò7yŒ§s¡|©gDýØ X¥–@™Ñɹãüÿƒžå¿¶èìÓ´)µá°>ìJ¸SœƒÓýXOñCwwºï¯–ŽÞ·ÓüPÝÝî»ë壷­Ïò,ì8õÇ¿\õçÀÇ­'ùüºÑEt_~Á)¿å)ðMžÿñŸ_±ç|ÿÍÄü;ÿi¿Ÿ¿9Ü~ì8ç'=ø œ~ zdä×ß_ðJoùJGük’qû}þÇ}sÇüdGâG98É=y=N 5/¯øeúúÿ†_¡þ¾Ÿ´Ê—ñƘ_›ÂVJ2N m{Sm»H]â%%[;GhÕ%þ>¾-bOÚkâdo C.fé’ø¿Ä…^PÁó \%°p»¼Ï*‘°Š#WQ·•ߥ•ŸF›}·ÓFa£oîßÓEn·M¾Ïn›Ÿµÿ³­»x»öwtfq‹~’' Íç.¿§³5»¾Yb/ä°ÀG!U1“ú>¯æ÷öd•gñìñ"ËòÂ[ðƒÊ@6¯i¬V4Ê®$RW U] ˜â5ý!V“µôzkÖýo·KÞý/»W½Ån—åVßïùõwl¢Š*QEQEQE/üÿ)×ý¹¿îÙ¿õ?gÚ(ÿƒ£¿å:ÿ·7ýÛ7þ±çìûE§ßüOþM×â7ýŸÿü‹ÿ^›ûdWßõðüOþM×â7ýŸÿü‹ÿ^›ûdWßôQEQEQEæ?/ÁŸ‹ŒHP¿ ||ň,Õ‰%AÔ€A=Í=?éKnòŶáÙ¢ŠB¿37b™™²N’EgÆÃ·Íf _ÐŸÇ ‡à¯Åñ&|¿øUß7à€vÂ'«nÁ$vç3Ô×ó½ Ä‘”†ÝìíCåh¸v*„Äñɲ-žb8Û#úÁÚ/[Y§µßM¯øÙ«uz ígÿ xÝþZÚý-û ãS!ý—þ F>øm¾3‹‚¡~j ʬ„°+*î?Äλçïþ §‚ÿð ÝÅâ£ïd4 ?»“Ì,Ümì²IºàL» .?f‚`¨þ¯‡yUP¸?ð­51…¸\”Îà3OóíÿS\g1|^=7nÝÂãœl“~ìç;gßœï¸Ï™&+m­­­®žì{·Õõ×òImµµµµÓÝvú¾ºþKüÅ:Áãø€81ôí‚“Æy´îØ<Ý8,=xÈ<`tÔðoùüº×Bëòü—¯®ïÔè]~_’õõÝú‡×üÿ*(¢˜ÏöÌÿ‚U’?à–¿ðMÒâ?ðÀ?±÷ï#1ïL~Ï€u3†‡z&Ýž$@›ù—àÞ¿üâf±û5üJÑ_BýŠ~1|V×|Cû&|^´‹PüñgÄ­dëzÿìÁã裊VðN‡iâ«k\ø?ã=VTÒ¼NšÕÖ•s}iiO¦ÿà•ÿ‡\Á6q¸û~Ç@l$ŸÙÿá¿ÚØ8cŸoÝãu}ŸâïxWÇþ×<ã]IñG„¼I§O§ëþÖ,–÷NÕ,/|Çh.¬e s¹"š —ý%.íÄÐ-½ÔpËWõzÚÛ^:Þÿ-[^½0²¿«ÖÖÚñÖ÷ùjÚõé³mt·°A}i=µõ…Ô%â’;¨nmd‚t_³\XÍc‘^ÙϹ–ã.¶çÍã–æz²•ÉaÇ–Šì]  NƒGò§+yRVw$_™^ý‚>#ü°kØÃö²øð—Â_Û+®…4í/ãÃHã¸Ô’ëWÒt£âÆ.ðŽ™< ö‰c¡ë6fÊÙÍg*,öçÄŸŒðPOÙïáÿˆ¾ |MÑÿbÿøkÂZN³©ëÞ%Ò¼Sñá9ѬôË»„Ogâ¶ñE¾¿¬jâ(b³Ñô›Í-n¯åŽÁnaÝõ;?¹êú{ºmÝ;÷ºN÷mÎ߃Õô÷U–šë{ï{ë{¶ÿMnß($„`“ó——p\²1ÎelîÃ’³§šÅ<©P7¹!X«©’%(­µ¦ë!T™Êè ?;GtÆjüªø_ñëþ ñÇჼ{áÏÙ[ötø?m¬õ-*ËãÅÿxÓ[Ñ<5u|ÃIÔ|Yá_ xoÂ×6òÞèÍ&¥½—‰5+íÓ[—·y×`Ù×ÿdÚÏãÏcûMþÛÞ'ð׃¯¯ï ÿÂ_Ù?ÃGྑ¨hÚ…©°ºÐ/~'jwµhd’;»V¼Iš>Dé;Äè]½ûµÒÑ],½U“×u`»z7÷k¥¢ºYz«'®êÇ«üpÿ‚€üø-ñSÀáÖu?Šþ ø·Ã>²øAð‚ñ§Ž|1¤ëZÞ§k2ñÖ• žÇÀ¾ðôW¨Þ¿‰.¢Ôï,WÊÒ¡´b¸I.²ì,®Oœêde¸ß< Iã‰sÄæ(Êc¤ÊÅ÷¸ùËö{ý’ÿgÙ_I¸Ñ¾|(ð‡n59¼Eâ»=>ÖóÆ2¥‰e¾ñg…¼I®êóÈža•íÌM0!W?êþ‘‘ÆÇ$)*²HªÒˆØ¯6ðXDY˜91ùÄ?’GÎy½=uÝÅ­u¶º-lÓV³²7§®»¸µ®¶×E­šjÖvGå‡ü»U†óÇ¿ðM‡©=²Kâ¿ø(‡Á¯Á "ÜXü5Ðügâ{¨Ð*mQä49B)Ùó€ŠÇôïÄšî›á_ø‡ÄÚÔ®šW…ômKÄz¬‘EçM£YO©]Ê‘̲¤Vw 4„ª*å7ŸÍ/Ú.];Ç¿ðRÏø'ÏÂË»Õcøaà¿Ú#ö…Ôžæ ÖÖ×Px{Jøsá ZK½µýŽ»{~¶ó ðÞÏSš\þlu¿ø)¯ÇïŒ×^:øÍû:ê:OÅOÙ;ãV¯àÙ[à^§èÛWøqñKã…lõ 3â7Ž&µ-­ê¯ªãÓiRyz<÷"C4ÜHdòŸ¼ûHþŲŸÂOÚÁºoö'ìÕûsüEÑujz<·‹‡¿àŸ÷Z¯SÄ6·“,Öw>+»ƒÃÚ´–·–1Üiú啺ʑJ¡>P‡Xðwü÷à¬>ø]âOˆÿ~*øö„ø§í7áçšø[¥xŸGÖ¯~øÆþÄÑÅy>-øiw¤ê)cøKRñ‡t‹¿Úoâ¢ü “âTú~qào:„>%üOøÛ↾ѣ¼o‡? ô†þƒÄzõÕíµ¯ˆ-dÔ´T¸‰üƒJ›¶­++Ù­6Zîõv÷{è$´Wiyy¥ø~kuf}ðïönð×ÅOÿ¿oo‰_´Áφ?³?‹ßÿiïŒÿt iü!.¥ûu|FÑü7¨h~ñ?‹ïâÓì¼[að¿À÷ú%¥®‘¦ê!žûÅKâí9¸Ô¯ÄßÐÀ?Ú3àíCà‹‰¾!øâOƒ-¼aãKâoêQ\ØÃ¯x#ÄšŸ‡µ«Hã1ÊRµe³™#ešÂöÚHehäË0 øYûü+ÿ‚lþÓÚ~4ø£ã.µðkK¸øEá?~*];NKÏ|b»ÕumUð?ƒ­-£>O‰þ)ñ ýŽ¿ão}¯U×4‹üg¥›/ÚÜúqÿ/ñÂ]ö<øð7öpøeâ[ƒ_ü7‘âOZ¿‡ÿáÒ>/ü}Õõ[‹Ï‰çºí¼~ ñ­¾|Dó|TÕ$¹´¿Ó“L³¥³¶Qo¦’WI«8õN)itµNú^×lí§eÑ5gnšKK¤îô½®ßíìde’NaJˆÆ`m’/DuÞ¥W¬CA”Þ¿‚?ðsÖáÅß¶ð;‰ðÍ#-·'¶À1¼ìÊøÝÀNP~÷!ùÔÝHdÚ£r.+ áe«¸Ì É>Xüÿƒžqÿ-ý·@ Ù¥v¡ÜªWöÀø¥T€0‚¿v>˜<ü­-çƒëÕ§Öÿž—µ·Ò×þx>½Z}oùé{[süŠè¥ôã¾9àN}ðqŒ äæ~\ú{wôíž¼fº€É=I?þ ?è}÷ÿ¦ÿ”£ÿÁ6:Éý~Ç}0?æâ>úÁê2ŒOÀ•÷çü›þR‘ÿÙïÿõûwÏüÜOÿö›ùûóÆe×ü2ý —_ðËô?×Ëö™ãÇIÀÿ‘FËœ¨'%Á@>/,|¹¦,0 Kü€|Uˆ]þÓ?‹/Æo†Þ‘²Ÿø¦%V-¹,äK!Æ\%(þ¿ÿi£é?–G„lÏ™·~ÌxƒQ;öžn3·¾÷þA~'I ¯í9ñ6K‰–Î'øÙãò÷ Kæ©ñwŠ  Ò e’9 y•â e2³FÀ•Â:òúGU{ékëÓ¶û7¢0Žª+­“ºÝZÚùuߥþ_´ÿ²üQCâ¯ÙÉ]÷â¿„{DP¬`¿ö¯… ¬çê†I®|µÞò*ÿHµüäþÌr¤¾2ýž„_|)Ž4‘å.±¥ª3;~ê)Üá¹¶èã+ýV“è®Þ›¾öIÚîöÓï»NÏGÛþ¯]zßT¯p¢Š*(¯ç‡öŒñ7í™û5ê?ðT+íþ -ûOüE¶ý?à”oíyð£Gø“ð·þ ütíKã/ÄÏ ÿÁH¼=o{ãi~þÄõ}_Ãÿ5Ù‡ág޼  é:¦ÇŠ­µË?ˆ2øóÁ:Äž‡Ø5ïø+gÅ?†_¶7„~5þÊô/‰¿±Ïìÿûu|tñ6ð·öœñÄxËþßöqÿ‚v~Ò7…´/ø³öbøEâ øZ~ÿ‚‚i^Ôõ½CáÑÿ…w¬|/Ô'µÒ> Ùx®ÚMöúŠüø¥ÿ ý©ôÚ‹]ýžþ ~É_³ÿÄÛþ×úgìSáŸüRý³>"üÖ5ŠrÿÁ;tÿø(ö³¯ë¾ðŸìAñÆËÿì>KªøLÕtÿø£Äz¿Žì´öºð¦‰áýNçVÒ>_ÿ‚CÁ]þ2þÚß¿g/Šß¾|ý¯?iÿÚ»àŸÃ]{á§íÄŒ¿~!xjÚgö›øsð/ö…ø5aû8üðwÃÿü?ý“¾¿†ô_ˆºwÅO|Lø‰øñÄÿ ­-¾6xŸÄÞþ‡¨¢Šÿ _ø:;þS¯ûsݳë~Ï´QÿGÊuÿnoû¶oýcÏÙöŠÿO¿ø&Ÿü›¯Äoû?ÿø+þ½7öȯ¿ëàø&Ÿü›¯Äoû?ÿø+þ½7öȯ¿è¢Š(¢Š(¢Š(̾5~ üZÃ/È øWUÈ ðAî+ùãÙ<Ç’$HãäGDDQ¹A”*T¤j¬û$kæ\*³/ô1ñÁ¶|ø¾ûCìø]ãöØy·Âz±ÚFCcƒ×¥<@ÜÞE”Xb,<ØeRDüÁ£u#c c.6:áù%[ÌýÞ°Iŧnº½úh½àlÙJ7í£ûïm6ÓË}oe¹ûâ÷/û/|tå_Ã_ùbÜ¡øeª†n®ÌʧxRÎw—Æ^¿Ÿ¯ø*˜Ëü ã9‹âñé»vè>ãd›÷g9Û>üç}Æ|É? Ÿ¨öaø%Hˆ«á¿‡h±¨Šƒá®¨6ª¢ä*¦v¢œùW$>ßðU1—øÆsÅãÓvíÐ|.9ÆÉ7îÎs¶}ùÎûŒù’d¶ôo§”á½%mnͯü–?{ý?ÌPtÿ¾»z/û§¦OsŒçäÎâÚv8¿K½:ãÇK¨j^#šëBðåŒçô?öæøùâ/Ùÿö|ñV¿ðò+}KãWÄSÃß¿gŸÍåL|Añ·â¾±§x/áñxef‰ì<;¯jÒx“Ä"EXWCÑožêUØ„ü¹û!~Âý„ü ÿ gã—ÅË/‰>#øgáOj6|c§AáÏ ü1ЃÁþ ø+†‡í¼yãs_Š%ˆéÞ*Ô$ž)Ñm¼^Úccû á¯èöEý¥¼û\|ðgÆïˆ,ôïE5ž«áȵK}^ ø‹Jž[m_A¿Ôì;kËë=ÑK'–­9R²w°þ;?à§ðLïÚþ ¥ûQë·Â߀zߎ¿d]cÞÓ´Ií¼WkáÚ'ÅZ?ƒ,´=ÄzÃo‡¾(ʵ{¤j×úS_}ŠïÅäBÌñÎÛ?¬?ø'7ìáá_ÙköGøað«Áòøäx~n|S§Ú|Oð¶•áèâxÖYt?éú\ihúöŸre·šþUšêîᦎDww²I[u¥ïkZÖèõOF¯¢Ù§w{$“Z5¥ïk[nÝ7ªè¶k_¹Ac­÷†Õy#Ì!YD[Ö9‰•X3ow†,( #qnC16‘^b*‹LY–Ib_4±P žk¡ÁäæAµÁ ¹Œ€gFL|ÞkÌiÉo)¼ˆó•2Keq#ä"‡tMêÊ ­åË3Ä‚FhÀpí'ž¸'m|“¿œS½¯åÖÚ;¨´’;käüâí.¶ÑÝE¤—ã‡Â­?[‹þ “ûWjž$ñ>­|·±Àûo†>Õ5+;+@ð´þ9IûÇ ômAîýÊÇLðv¥økL”³²«³é°Ç´ 4È ]ƒÜ&Õ–­ô»²Våù÷Öú^÷ÖÀ›Ó¿Ÿ“;õiõvzÿ'¿5ÿ §ìÓ}û"|ð—ƒj Ï‹¾.´‡Æ:/Àß„Þ>Ñ5„V‘¦Ic½ðïÅ6ð³MñÇÚ·Ûõí|}âoYÂ>‹ö«=%lõ¶×oÙ3öý¯F±ð+à/†?à—?ø û7ø/BÐ|ªü@ø½ñÃáÕŸˆ|!àÏ iÑøz-FÛÂZm“Þx—XŽæßG{ë;[ƒu¯µÖ£¨G.ô’UýT—XQO–‰¹#ùü¸Á’8ÆÅbÂ0ò4q€pX•Œ1ÚÌfÎ:³!Êß…Å'ÌiÚ»XÆÒ/±‹9ÚÉëeeÞ÷äµ’Û[ÛðÙÜIìì¶Ò÷½ùlìºôZtÓk 3¨äùrª¢BÒ¸$<³.×y\\g÷*ÿ‚ŸðsÑÏü»öÞ;•ÿ†i`W¦Óû`ü*G/ü8†ÐÇpvÞå\ȨÎüüåK!VÚHV#r™Ÿ.õ2²õþÿÁÏ\ÿÁ mÞXü¿³AË 1Ïíð–]£kãdx9ìÙmïCó^Ÿ“õîû-½è~kÓò~½ÿȪŠ(ýϵt_~Á)¿å)ðMžÿñŸ_±ç|ÿÍÄü;ÿi¿Ÿ¿9Ü~¯¿?à”ßò”ø&ÏøÏ¯Øó¾æâ~ÿ´ßÏßœî3.¿á—èLºÿ†_¡þ¾Ÿ´¸ÇŽ´ƒ–ðˆ%2c]ÕâÊ˸r¸Ür¨Ù$É/òñP¨ý¤þ&—µ[•»øÕãÔýÕÚÀïñEùx®7³¤ç¼BŠ)ÎvŽXØ»_Ÿ´¿>:ÑÆ„ìq‚Àœëº³àÝ()¹‡™<ß&+ã“ã·‡µ/|~øÃ¤é'×|©Üüjñ¬k⟠Zø:ÿ]Ñ#‡ÆÚíÔ·:}¯Žü+ãO ¼·¶–b¸¿†ïÙ,îKX {Ûh.íp½Ûë¤]¶¾«­×段OC²¿dí·U×Ë·Ï¥ŸíÀxÂÿÿd¿ë¾0ð†¼iãÿø ~x+Xñ.câ'„ï4Ý[ʼnà¿^^Cªø…|5¤Üèø‡û ßP]ÖU»ÔZYÑŸ÷§ã§ícû,~Ëÿð‹ÃKþÒß³ÿìïÿ Çößü!_ð½>2|:øIÿ ‡ü#?Ùð’Â-ÿ ÿˆü?ÿ ü#ÿðh?ÛÙ?kþÊþÛÒ>ßöí+?;ø”ý˜?à†³ ßíSû<|zñÏÆ¿Úçâÿ®þ&ü+>1¶ø»ñ#á÷´?Š™t¿ xƒá—Å(uŸ„M«xÏá_¾Euð³Ç Õu™4¯|/Õ5oÝHúEô¶‰ýµü ý“¿eÙþŸøfÙ§öýÿá8þÄÿ„×þ_Á¿‡_ ?á0ÿ„gû_þ¿øJáðç‡ÿá ÿ„þ {ûû[íÙ_Ûz¿Ø>Ïý¥yçi;ét¼»ìž½o­õm«Ûd‡÷|®º-5ë×çèyÿÂßÛ£öøÓã½ À `ý 1é=ñƒ´¿‹_ÿkh~&i þ,|_ZOãÏ x{âÂ;‹ï|øÁ§[Ggã_ƒŸô¿‡ß'øuñ Âzõ€W¹Ó|màÈÒ¾8þÄ¿ µ:†‹áýkWý«|A¨~Å>*ð_ÅÏÙëÇ ø™ã]GÁ¿¾5þÑörý¢>|]øiáω> ðün¾1|]ð¿ÿh ø_ºïÃ߉£Å^µÔôŽž¹ñÏ |[ýˆ¿bÿÚŒšÇÇoÙö`øÕ«Ëâ KÅ’êŸþ|)ø¨Éâ­g¾ð.±âi/¼cá=fåüA«x'á_ÃjZËJuï ü8ð‡®®eÒ<áë=;óƒÃÿðNŸŸ<1ð+À¶Çƒÿgÿ‰¿¾~ßþ%ý¡4ŸÙïâ—Ç?‹¿ðP=JýœoàŸþèþ×~4~Ö<1ñ#ãßÄ¿l‹$øï¦/Æm.ö×áÏ5}?ÂÞ ñÛiŸ ¾ø"Çòƒöhÿ‚þÛ_Ÿöv·×µ؃öbñ·Âƒÿ>êß´¿ìm/ô߈Z~£âïØ3ö…ýþ|aðv—¢ÿÁ7?g_ÚÃ_øÁŒ~'ø ã§Å=oâoüËÄžñ_ÄÍÇ^4ð¿ƒ|sð³@øLýOi°~Î:¿ÇoxOðÃû_ÿáZ~Õ^.øWV±xHÖ>0x;âÏì¿ðëãGü&“øv++ÿˆ"øeð;â—Àßíý3_½ñÞ‘ð³Âÿð„k§Lð.·áÛ_Ÿø)û~Åÿ³_е~β'ìÁðÆÚ·‡î¼'ªxÇà§À/…? üU©xVûQÒµ‹ï ê!ð/„ô^óÃ÷š¾…¡ê—Z5ÅäšuÆ££iWÓ[=Îg,?φ¿àŒÿµ=‡íáÿÚYý…ÿàˆ+ðÊ_Ùÿá'ÁOðOO \|EÓ?dŽ?ü#uñ×ÅZ¯í·áø.¿bKÏüý <âøgá¿ÂM;ÅŸ?i¿Åû?ü@øëà;ŸŽ¾½ÔtýOÄ]íÿeÿ‚’Zø¯öGýµü?eão þ̱Oм=ñwãů:_мaÿiý–5þÎÞ1ý¸üC¹ðþñOFþ§h¯?øOð·ÀŸ¾|4ø)ð·Bÿ„_á—Áÿ‡þ ø[ðëÃ?ÚzÆ·ÿï>øsMðŸ„t/íŸj¿ˆ5ìé~Ÿý§®êºž±öµjz…íì³ÜËèþ@¿ðtwü§_öæÿ»fÿÖ<ýŸh£þŽÿ”ëþÜß÷lßúÇŸ³íþŸðM?ù7_ˆßöÿðV/ýzoí‘_×ÀðM?ù7_ˆßöÿðV/ýzoí‘_ÐEPEPEP™üjø9ñdpsðÏǃçÂÚ¨çøu€ØÇ µ3œmbJãr€¹,£2GóëÿS\g1|^=7nÝÂãœl“~ìç;gßœï¸Ï™'ôã'•ÿeÿ‚Fh 2|8g‚Êÿá[ê™\Fò «(!‹@Q˱WAüþÿÁTð_à^;£ø¼T}ì†á‘ç÷ry…‘¢‚ͽ–I7\ —n+fû¿ý¶?Öïüålßwÿ¶ÇúÝÿŸù‰ž„rn‡·_qÏ—°ät-§ í¶Xÿ8QØq‘ëïóaz¶ºõ¿õ¢^~¿ž§B¾·þ´KÏ×óÔ(¢Šc?Û3þ R?ãWðM¬çaý€ÿcÕ`Ëß³÷Ãpd!”X¶W;·D–ûÍËá±'ÌP`.a*`GI…’IFÞ$FýÙxâø7þ QŸøuÏügR`oØè žOìÿðß‚B±çAÊÄyxÝ_zEŒ€ (%>Uù hCªG*cÝå ¤#Ê‘Xîl¼£ø]·w¾±·WÖÖ×Í_V°…Ûw{ëu}mm|Õõkò·Ç6úOíEÿ@ð'Ãi¢¸»ð?üÃáªüqñU´²K&‡©~п´U½þƒðŠ×RÓ„Ÿd½»ð?ïxïÆrO¹Óo|O¤ÜÙ¼FàIY´sOûcþÛýƒï®µ8ÿgÿƒ <9ûP~ÔðX\B,>*ëZ‡Žn´ÏüE%½¬Ú:ë¹øµã ,Ïu¦x—BÒôŸëV/Èv—þ ”úŒþ+ÁR~4ë…ÛZñgücâ‡Â[i§…>о ý™üà„¾µK—q%»iú´¶V­$0Z=ÅÌ–Ñ ¸¸7ª°éÚu¶£}©[iö0jšœv1êZ„6ÐèjQiÞp³Žòî8¾Ñ}ž·“-’ycî&…»JîRÚ×¶ËÖü¯E¶í«^׿[1.×¶ËÖü­Ùm»j×¶ýlÂÊÖÊÊÖßLÓ­àŠÒÆÒÛL‚ÊßkAc§Ø †Þ ÅAÂ@«p1rvíC±e”Û$o/±ZNHÎDŒ±«<ÅQ…y *|À†;ƒ'²B…I,(­.Cc7!`G•¿ílV$<òT­'C·,~éÁ`öˆ×Îù^0"$b%ÞXþìù›nZékÚëKƒºw×¥º_âѵÒ×µÖ–ÿtï¯Kt¿Å£\7@\+°RîÛlŒˆÑ3†/´!ÆZ8Ýb‰ͧKnlJʡس•äÞ= $€01È7áX»I(vì|ŵX‰^72çxÂ;¤’?Ú³9RŒ(ÈŒ†Z59AxYP¬S±ÉŠ1±„r)xv{].¯¯.»km6¾–iÙj»=®—W×—]µ¶›_K4ìµùgö½ý”¼ûdü·øIã_xãÁ‹¤xëÀ_<-âï‡úôþñ¿…|sðß\‡Ä:±¤kÓE$7Vó@á~t‰ã™ÝŒÐ³Æþ/¥þËßµõÜsxSâíûã=KᕱÓ4Ûsàß„þøwñWSÒ­d·‰ì¯>$éÖ³êºv­5ºýž/h¦«}rÿi‘̳ËûŸÇw^"²ð/õCÏ‹ì<'â[Ï Ãq§ÝjQÉâK]úM 9tëYVïPŽ]N8ímd†{È]míœ<«+þ=~É_ÿà¡ðPÙ¿áÅ]/ƒÿ²·…ük¥ÜéºçìþÕñâv¢Ú¹©xSÆzŸ¼+¨"øGÃòoA•mGŠíî.4¸äo²«È…u}í¶¶]TmeÖöÿ·ºô²º¾öÛ[.ª6²ë{ÛÝz[ùý¨aþÎ?ðYO†ß üWã¯ü8ðÄÏ‹ ñýßí=âèþñ‚üaâ©üIáX´ÿŠþ4¸Òm#ÕÍÆ—ž(]6ÎÏÅYYGm£Î³ÚÚùè·àøâkâ†þ>ð·ÄO G4:Iñ/…|S¥x»J–÷NK@–ëZNµugý²%½‚æìk¹‘ãŽâ?5íLŸË'ì û*|(ý®ÿà«ÿðTüb›Uý§~þÍÞ$оéÖ|]wñM5OêšU›Oâ}'Kº–÷@¶Ò´«m3â_‡´ý>ÊÒ8ô²të[¬Í°X¿¥_Ùßö_ýže ê¾ýœ>x?à߃õÿê>1ñà› 4Ý7Sñfª-bº×oÞéÅÔú¥ì6–°M¸He-á=çU{袯£Oáï~©-}}ª÷ÑE_FŸÃÞýRZúú}Kzœ zÃ)ù£eÆP?Í„QˆÁÿH|,¡BíÁ vÈÌìË”w>Îa”ÌJÌBʱHˆÊ˜ €>UÀi b±LFüû”)S»{4®ëÓ*àPÜ!ÈP¸rùBˆì<ß0Ê­`s¹Ìå¤ÜÜ\;í×¼ÞöMY«[¦÷I»í×¼ÞöMY«[¦÷Iº07G‘ÉÚä²pä¦ÖŒ!„Î`HŠ2«C¿É¾-•°øeãÒ 6ÒH𮫀øI<íÖ¿žy*_-§Ù$û;Æ[í&a!~ñ@$ÊÄ€ˆ\·ÍÝ+mí`´oÖßù-ïÖÛ.ÚÝ´Òc]=Ën»½×ÎÇëïŒÃÙàÌdoøG~ÀïÞGÃ}H†,c6Oͽ•F~}ÑðËüýÁT¹?€ÁÏü-´(Ã{¨À&@IW Ä›u¯Ûˆ@ë´¢§ôãböcø&A$7‡~È7’á¶§È ?ÊÙÃ8V±ló¯óïÿR¿À#âèÛá¸xV¸3ÝûÆæ?ôˆJ+D$H°_-ú†;y}ß>¾_/ðÇðû¾}?ÌK°éÕºaÇN¾œœŸ—©1À>ä~Xö÷õ?AÆ]”p>æOþzž£žƒ<œqŒr])ÞþNÇJw¿“°QEƶoü§ø%ÇüdàÿÉ‚þÇYØ7?áŸþÊØpç?"–oÝãu} ,çk0åv·b»1(%òë·ÊI\$n]~ÿ‚TøÕÇük9Ø`?ØõX rÇwìýðÜe-ƒ•ÎíÑ%¾õ6ÐÄ|FÌA–1å´@²ÇÆ6(rŠò B²Ä]°¬»ÿw]ÚòÖíë«0¬»ÿw]ÚòÖíë«?%¿àvºOÂ?Ú÷FÖ5WÄ_üãöòƒ^Ômµ;íPOusñëY×ô™u GP’KëA|3©ø~Ö(ÞYc†Ú+H”[Å´~´€&à¡6e¨gÁ)©QåŒåâŠHÌ1핃×åOì=øQûjÁP?g{Ziíµ¯¿kßÙß[C Òøgö‰øUá+?=›92jmŸÅŸ‡~'ÓþÕȶ­{g ™dõW‚p[ø¶gÍ—p2'!D À °üñJ‰ûªJ÷¾šµÑë~Gk-V–\»%Ñè%{ßMZèõ¿#µ–«K.]’èô9UF ,WjÆe}¢o–9¶38‘ØÊé4rD¬Îч‘À+–rA(Â%iŒ­¼²g ´Á‘<Œï3Ç4N¿8NYr!”±òåâMð©QP±9,AßlÁÑd…‘÷;£Kna>QÀRÞcÎÜ+F«¹(Ê‘¯’²*ŽÖZikÛ[òú=l´Z¾»¶¬´Ò×¶·åôzÙhµ}wlO¼ïŸ #‘w^C,å©”*ÊŽÑË#D°‘ö¼D•SÊ%yAÈI¸D>]ìÇÌó?t¤D„¸ê€0 TÆw)22óa7+³#°+)“Ê|EæÈ€þú4˼µ8ÚrØ·EŽØØŽà"«y dŠ3äüù£ošVzÿuÙÝk×âÙ¶î–¨Ûæ•ž¿ÝvwZõø¶m»¥ªã‚ÖâYä··‚i$–Y¶­­¼ 43HcAmV‘É/•Œªª;·ägü3âN…ð»þ ðëâ¥Ä°Eáý |g\Ü;G&•ῊŸu;Ròçɽm<%¦Àc0¼1ۯʫ_r~Ø_4¿‚ß²gíñ;Y»†ÂÃÀÿþ&jëurαͩÃáR×C¶v@.ëWÖæ²³ŒÂŒó\ÜF¨ÌÏ?寋~üoðßüNø û?øK[ø‰ñÏű øa­m4mfOüI·Ñ¼Gâ=>ú’Õ,¡ðüÞ%ñ$W’O"j 5ª³¼w“I,k}|âôôWWi]ÚîÚ´žÚ;-õó‹ÓÑ]]¥wk»jÒ{híå_ðm_€`Ó¿doßµ ˜¼qñïö°ø›ãoêwanìõOø®ÎÚ×|xh4xÛÆVPdI\Cwnv:LeþŒrNÜeAn œ©Å7m2"Æè¯¹™•2"âY 'Á_ðL¯3ý›a¿€_ þ!èx{â&…¦kšÏŽ4èæŽâhüAâßkþ º776¾×{ko®Zرº-"Ce¼~Bùy`/eܱªªª4y ¡N6ù‡ÈÿHS´,‘[f˺â6Ÿž—Õ¶õiÁmnº¤Õ¶v膟•ÕÛoV¹ÖëªMZÖÝèƒ ¹Ú\.ržPóšO5T£=dsÇ+Œ(vÃ)iŒŒ–«cÌ)S*H‡óTb„»¦õc ;šÜ(ê1ÆWk B@°‘K9l·‘wÊs±²Žòj¡Är:îŸ8±˜ úu²KNë“E­ö½­ï.š;¾l’ÓºäÑk}¯k{˦ŽÃÓ“nk Ä6ÅɈªHQÙ›u¾dV•ŽïœðGþzÏü8»öÞq#þ¤e¶äãöÁø7™Q¿¸ ÁÁÁÊÞÔÉd%™°Á2Y1˜òЦÂ2ìñö•YQYa@žu~ÿÁÏ8ÿ‡þÛ GìÒ»PîU+û`|Rª@ A_»L~@vÿ,¾k§¯Ÿçdvÿ,¾k§¯ŸçeþE˜àr?,{{úŸ ã)EÐt}ùÿ¦ÿ”¤Á6{ÿÆ}~Çóÿ7ðïý¦þ~üçqø¾üÿ‚SÊR?à›=ÿã>¿cÎùÿ›‰øwþÓ?~s¸Ìºÿ†_¡2ëþ~‡úùþÒãþ+½'޾°3Ÿøœë«¸w}í¸ÄŸë lýè·½þAþ)ÿ†›ø¨Å¼£ÿ ‹Ç¡®í’$>-ñ.Hz‚Œñ‰íÉgxwù_׿í3ÿ#Γ…$ÿÂ#eÐ Ïÿ½k ó©RpZ q¶âEẻÇòñ"?3ö ø§lÓŸŒ~?˜Å$b_0Â[âÉZvlª¶Ô.wD ¹>PÎ1étÛ´t[ÙÚÎ×^÷k­“Æ.Éi}Ûô×Ó£}.ºÙ?ÙÙßQ´ÿ…›ð³»Î¾>øc {ùkx¯Dd­ó¼ÂB© í¯é>¿œ?Ù¶%_~Ïד%ºÈþ/øI8|ÆiüAc—Þ–,â'‘ÁóÛ÷fD˜¶G•¥K]mÕï{í«û·ê•Êm=•¼¾K]<î»Ù+ô (¢³$(¢Š(¢Š(¢Šÿ _ø:;þS¯ûsݳë~Ï´QÿGÊuÿnoû¶oýcÏÙöŠÿO¿ø&Ÿü›¯Äoû?ÿø+þ½7öȯ¿ëàø&Ÿü›¯Äoû?ÿø+þ½7öȯ¿è¢Š(¢Š(¢Š(Ìþ5> üZ'8 ¼xNcá]W8QË@9'_ÏlÂ`bÑÚ¡Ø1gEpÊívV>g˜®¥³Îì¬<ÿè;ãx-ð_âò«ˆØü/ñøY FO…5`‘È ~bG#üñ©¸ºÜªÇ´‘ X”®ØþP\|Ä(PªHŽŠ«Ö ®¯µ¶ò¾G}-Õz^ïî~¾«Ñ»Ùm{ZúhÏØ?7öcø([záï‡NBøVú™(JïU‚îÈ$A¯ç×þ ¦2ÿ¸Îbø¼znݺ…Ç8Ù&ýÙÎvÏ¿9ßqŸ2OèÆ„·ìÁðA¤Än|;ðà•Éûçá¶§˜ó‘’Ù(È,B²È¤£?ðU™~ ªÛ£ø»ò·Ý}Ðü.?1Ãe_<¶eÜï2|ùŠÚÚï¥ý#Óõ²Öë¡+kk¾—ôOÖË[®‡ù‰ì¼ßj6œ½ýÑÿ¡­6ºòõýз—¯è‚Š(¦3ý³?à•$î?à›Cø¿á€ÿcÆ ¥78_Ùûá¹`7¸l…lº…ßÖ"CWÞRãÊ”3•_.U,ÈΪ¨ª7>ðÍ/͹Жr3±IŠ kàßø%Nüßþ ´ÌjþÀ¿±Û͵@OÙûáÖݵ°Ëß•ÀÏ–>jû×”+’ÊAÚK²a˜4häuÄ’€Db ±ƒ#4‘ÜGXk›·ß·ïk»ÿ-ïkK oóvûãÖýíwå½íi~J~܌߳íiû)ÿÁB’9ãø{nš‡ìqûSÏn÷di_ þ,ø–ÿƒÿ/¢‰?ì_†ß$K]zk¥x£Ò¾ A$†-$Ìÿ¬i4r¤ÒUh"ž;«IÍ¿Øç¸ŽkvŒüÑÍì¤RÄ®-P–…Ö"&<7Å_…žø×ðÓÇ?~%ønÏÅþ#øSUðŠü?u rG¨hº­”–·FûZ;KÛE™n´«èf[3RŠ-CNx.l¢¸_ÎÙ âçŒÿf?h°ío㸯ügákfÒeß>$×#µ·ý¨>[Ëoi¡Xêóê¢äYüqð=£Aá-sÃ&þFñh´oiÑÝÝÈ÷YtòºJÏìÙkk[]o¢mµeaYtòºJÏìÙkk[]o¢mµecõx²äà¦à­ó!. ”%"vŠG‰åËœÌ#P±Í*F/((„‘T`dBX•†ÝëŸ01Š/Ü”gVXcÏŸzó‘ÃD $H_ ö›h­ŠÌP…ž8Ü¡0A䙀¿.Ø€ã lWhüÀ¨Î2dVŠVV·c{on—ÞË£{íÕô@]í½º_{.ï·WÒ=í/ò81°+´\¿”¢V-˜yܬp³)qeBò6QW{³Œ*ìBJd[÷{‘Ä<ÀjÊ…L­?qа7²³#¼9Te&#æ1uó]Ê)”H°,l¤­xßÇþýž~øÃâǵAk xWÃúŽ©§ÙEqj>*¾Òô{ýcOðφՙ¯õj°XLaVhˆ¸–Y™í­¯.!/Ù^û>žê‹oµ½ÞíÝ0¿e{ìú{ª-¾ÖôO{·tÏÏø(®Ÿ´/ÆïÙcþ ñ Jú”?<}eñÃö“Óô©Úh_þÜÁâ8´¯µ¼’[¥§Ä®—e¥iÚšì¿6AÞÙ”íúÖWkï_4gÈ‘K´­!Œ£[ˆŸr)&ïc;2Ü–cKŸÍŸø'Âmj÷ÂÚ§í­ña´Mköý²´ß ø÷UÕô˜VM;Á?.¬Ž·ðsáy$3ܦ‹áßj¶ú–¡v%³¿‰M¼wû’ÎÍô „¶ÔW“Ë2¬<Æm‘ßùÎ ¬jÈ]™ââq¼];¥Õ‡U}×®­&Õîî.Òê¿Ãª¾ë×V“j÷wjª¦ qƤ(ºã*’D˜ÕqåÅEÙNbËĢݔ¿h9E °0Pª%Ûƒ®@˜s¹ZÚFÆ­$Áe DT·›"ü‘²Çpà ØòÕ ®áœFÒ¦^V~ 1œ°ÜZØÙ1r  €dŶðvᦧ$jíwwe~–ø¼ýí4ßKíï»]ÝÙ_¥¾o?{M7Òû{ÈNõ$îde~QbdxÝ7ÆÂ?Þ–!IŠ5ÌŒ[t]¨ÜîV;²®X!Þ¨ÁÀHeYQ–c ¥>gf @v E¾·¥]jwº=•ýµî½¥G§Í­ißYMªh¶ú½»ÏbÚ…¤R¼v«¨ 2V„̨eI­Ø««>¶ÜáIw;bÎÎÈa2¸·Ù™b .Á´ãŒ:·˜Q_T¯¦ë²é÷Ù.võIÚúhÞ».Ÿ}’é×bD È„´lFåq¹¶´+#½±ÑìhѤP| ÒFFÖüÿƒž¹ÿ‚þÛ¼±ùfƒ–cŸÚÿà,»FÖ=ÆÈðr?ؽÈÅ™Nr7²åJˆÎH;w³a6ˆ0Þb¾øU@h¿àç Gü»öÞÏ_øÆ–#qp ~Ø?ÉÃ0ÎÜ’íAŒ(à·nh~käúêõüXûvæ‡æ¾O®¯_ÅŸäWØqê=~¹ëÏ ZJ^Ã÷^û¼Çð.=ºwéÐõþ˜äœôýxÍtWߟðJoùJGüg¿üg×ìyß?óq?ÿÚoçïÎw€ëïÏø%7ü¥#þ ³ßþ3ëö<ïŸù¸Ÿ‡í7ó÷ç;ŒË¯øeú.¿á—诟í03ã$7Ýo X¹æõ×5…?»ùÞ°–Þð^Ÿäâì¶_´¿Å+ȯ#²Y>5xòÄHc7 wçx»ÄâK@€”ΡBLr‰D•XüÔþ¿?i|ŸhÁNøNÇiÈ?ðßàä«ÏrŒun‡ùø—,p~Ó¿Äl­ñÛÆ°’T0YO¼SåJHTJ ¸GÝ«$"Ȭ²­¾Ú*ÝŸ^ñù'{kÝß¡‚Õ%¦Éëòù/WÜý°ýšf†óÆß³è(dÙâ߃ó ±Ô¼z݈ŽFR8ÛæBΛQcdbÈÿÑÕ9¿³k©ñçÀ?˜ÿÂYð„*$í:݉]¥› *´$düÙYÈêJFU­MÓ½Ûß×O?EµîÛÜçªó²¿ÍýéZ÷Ü(¢ŠÌŠ( Š( Š( òÿƒ£¿å:ÿ·7ýÛ7þ±çìûEðtwü§_öæÿ»fÿÖ<ýŸh ôûÿ‚iÿɺüFÿ³ÿÿ‚±ëÓlŠûþ¾ÿ‚iÿɺüFÿ³ÿÿ‚±ëÓlŠûþ€ (¢€ (¢€ (¢€<Ããp'àÇÅÐi? <|nÛ´ÿÂ)«|Û°vã®ìc8¯ç¥–8í7Ÿ0!+»p`ëÆÌ™P¾Q Æ‹æHª|æ¡_ä‚߉áÉáMX‘† §=>eaê⿞ÔdX÷(T ÌrF­æ‚I‘TJ‹&öpŽd‘G›² wáχ°6î?ð¬õQÓ  ÁÁÈíœâ¿Ÿø*ð(©ecŲxùË$_6ù»VRf@±–"9 žñÁvMŒ••Ò¶ïeÒÑÿ-4]mÕ$ºú¿Ê?ÒùÙî—ù‰/GÿtèkMýϵ;øG»0>à lóõ¦×Bëæÿ+/Ðè]|ßåeú Ÿaúû{ûÌûa(¢˜ÏöÌÿ‚Tƒÿ¸ÿ‚m0Ü~À±î0ÿŒ~ønØùþL±P f0V‹qjû×…b3оFf1¾Íû6æA+ÆÎê¾HadŒC¹> ÿ‚UÊ-ÿà›k·†ý€¿cå$'˜£wìûðápèf1.7m yˆr~÷ rB²Ÿ™ÙW{lH‹+r VGi(GŒJ­àþ_ïxÙ¥úÝí¥ÚFåñyÞ÷š_­ÞÚ]¤3;I,8ß+î“Ë•Td0Ž=ТºÅæ¸&-±‚¯2~ëó—þ µû4iÿµìAñƒÂpÅ$^6ø}¦¿Æo…:Õ†¥¬xwUðßÄ…^x–ÎçCñNukwáÍKRÐmõ ZjÖ×vq[\ëS=Ä¥<ø‡èñ7—$H|¬Äïå­©e†F]Ȭ¤À»Á\„â9ž5t_ÁoþÂÿðUOŽ~)ÕuoßµŸÁ¯ˆ? ®î5û[Ù×À÷ÿ>ü4Ö<%w©ê÷Z>—ñ#ÄŸ -eñ猧’ÆëIµÖ­Ó^¶ÒnEƒ´P¢¥¾Vöÿ·t}~º´ï³oVìÖ‹{Ûº>¿ ]ZwÙ·«vkFÏÖ¿€^7ðÿÄßÙáWŽþ jRø“Ãþ&ø1á»ï‡Z¿ŒµG]¼¾û7†l ÐÆzãÞI«kºŠê”ñ°÷ϨÜÞŨ\}°^\Ipÿ¿²7í!ÿBý«gÿüzÒüûèZ'ŸÆkާâ_ÚÞþÃþOxÁ‚V·Ó´­~Ì3Ó^ȉ¬BÍ3$µ Í^Ãðgá?íóð7áW„~xÂ?ðOo‡žð.•ÿ÷„ü'á ?h#áï x}^y8µ[S-ɶ’âK¯&w‚+©$•&hÉcöÏ„Ÿ²þ½û?~ÆVŸ³ÂǦxÇ@øyã]Âÿï4ë¦Dñ×®üG«Ëâ»m/L•/ìítoxŽëQÓ wO"ÅkÆyg3£èõº×k+¾–½´K}î¶DïÕkµ•ße{h•¯ß§–ÿÁ:þ8þÑ´/„¾8xÓã¶£ðÛ]Òt>3ðÂ?| ðþ§áïkþðrZé7šÞ‰}®x¯[Ö5ý+RÕÍÛi×Z¾—¥C+ZæO´1ßkñwí àÏÿÁBÿko?«í;Tøcÿê²Õ´èú•Ü#À?i/‰^ ¹²ø“àWV”Ëo‡ƒ~ê–Þ†æH.ì¼/âÍKP½Û2†÷OÙÓáçüÏöSýŸ¾|ð×Â?Ø“â~“ð—Âú„ô§íñ¿ÀºÇ‰¢€‹«ÍkRÑï?fMHÑïo./g¹’×O×uؤžIw´rG_8Çû1~Û?ÇŒÖ?Gñ7…àÐ54×–Áì+mÊÆÅ£2¹œjßIÖ5[Æ–²ÜMóœ¾2ÿ‚­ «›øËö®·…cg‚ÏÀ_±‡ì1£øŠU€HòÙ§Œâ; &ö_Ù“M_‡ø^8µ-I,ô9îõçÅ>¥oºÜü;ÕtÚ'Áþð,:†·yâ-Ã:Gí)ñ›ö¨ñ†“¨êú¤i¨Y_|Iø±á->M6 I¬ô- NþÌÒïµ @Ã{oæKu_¿dÿ¾(ø»ö‚ø_£üøG‹µK=?RƒÂë⟄SiúŸˆD^›Sø‰ðÿà§ãí/F™µ‹hõÝw\ŽßF¹·Š-BæÏH´Ûïø'×ì¥ñ3öRÐaø}a¬ÇáOú|¾%ÏÀÍcP³ø­“â¹u«K#ÇŸ ¾1YËá¿Yø ^ÓCßË࿈þÔ¯t‹Áj4ýONœRéÞéyÚñÒÊ×mèÖ«m·)tït¼íxéek¶ôkU¶ÛŸ¨ G˜€•'%Tí#9}á·6J¤?¼@ϸåo)UþÁÏ?ò‚ßÛtöiÚÚ¿ðØö ‡%H\)ÈNAéþ¬~÷G€ÊhLàÜÃ(ÐÆFàDQªtHP0m¥ÆÖI@üÿƒž³ÿ.ý·ÜHÿ†im¹8ý°~çfToÆîpppr€[­>Ü/ëuçú}ÝEºÓíÂþ·^§Ý×üо¿çùRòsïžÃêqÇÇl`{P{}9üϹþŸNå+ èÔpO=Sì:óøûïþ JsÿFÿ‚lääÿÃ}þÇ}rIÏíðèý0Oc“ß·À•÷çü›þRÿÙ§ü7×ìyÀ<ÉÄü;ÞnÀwè_¼f[>ö¥þòe³ïgú_ï?××ö—øëFÚØ'Âv!I…?Ûúš†ÇÃ:ÈA8-c„2¬ŸÈÅ--µ¯ÚOâ¼ݵ™ÿ…Ëãë³:»£ˆ¬üIªÌíc!rÑÎàJë<&óÈt _×ïí.JøëFe]ì<'bU2y!¿!w¸ñ’@ɯä+âC¬_´ÇÅRѤ‰ÅÓ4¿f{Y‰/¸2‚&Ô°HÔ\C˜ÙT±ZÆeÞÖQµ¯½Õ´[÷ù\Â;/$¶}tûûùZýÚÏÙšÞümû?,fG‚?ü!Qq3»É4¿ðiÒÆÏ/GyÅåÙ›hgݼ×ôq_ÎìÒÒ§‹ÿgXnJ²§Š¾I&ìbmSÂ`AÚóIöß3t©–r?£ÊÒ};Û_¹.ºô¶©jŸ«}¿®÷~_P¢Š+0 +ùáý£"@>üCñ?ÂëKož'ñ7€À?¡ê(¢€?ÈþŽÿ”ëþÜß÷lßúÇŸ³íÁÑßòÛ›þí›ÿXóö}¢€?Óïþ §ÿ&ëñþÏÿþ Åÿ¯Mý²+ïúøþ §ÿ&ëñþÏÿþ Åÿ¯Mý²+ïú(¢Š(¢Š(¢Šó¬Ëðcâã ÜËðÃÇÌ«‚Û˜xSV*0998ž‚¿Ÿ‘oo0WvV) ͹Ô3¬Ñ†+¹2r¼`&çR§úøÓÿ$sâÎè™øóÿQmWé_ÏH%`˜)ÆØHö}Ñò>Ò‡2©$ƒ,;Yš86 SòçH;'¶÷Û]-k>®íY[æ“k§¯¦Î;jµ×åkö?]üt þÌ">4/‡‘Æs-šÈ¿ð‚^BUnad ,,Éæ(ó †F”"<{ð›þ %à|Vñ·ìÓðëá߇uøÇÅs|U²Ñt-6ÛN´¿Ôæš_‡VðJ×:­ÆŸáÝEµº¹i.õ}R²³û!û^¡{oo¹«÷gÆ­Ù›à¾ò‘§ö'ÃŒ™]@_^ni nŒE´Ë,ãnZKq³rüûáÏjÖcñ–úeŽ»¼Ö6šìúo†u½Imõ³‹ëKKëÛ9/´Ø¯ä²³†ña¸D¹H,E̘¶cÍ7Ó­·Ói.öùßK/“I¾m¾›Iw·ÎúY|Ÿù¾Ä0ßð\v1ˆÿbë,o<-ÿ %û#ª¼ Ä‡Ìøö†&"hÎÉ„Rc;¢ø6þ ™‘ÿ@§žŸðÓ±ÿ>Ü~ÐçÛšÿLø^ß›¼SkŒ†Ñ¼23ó©ÊðoI#U‰Ôd!ebÙGÇÏŠ`óâ˨.ʺN€Î2†Â %¥©`$ò˜ÆYQéJI-ígiõåòo­õû­b”¤’ÙÞÖvŸ^_&úß_ºÖ?Ìóþ!ÿ‚æŽá‡@Ç9?´·ìÛœþÐìs‘ŽO¶ÿÀÿÁsðÄ Ï~Òÿ±ö{ÕÎxý}NÓ#þßÅ>ñU¨'hÿ/†¶î9g ù TWÈ&P˜Øb‘¾=|QueoZ°d`Qô? C’±£©·<ÉœÌC†R§u Sê£ëiékwM®›Ûk¾à¥>ª>¶ž–·tÚé½¶»îz?üïáÏþ ~Àÿ±Áωž¸ðÇÄ„²ìÕðÏ↦¼±¾} Æþø5à¿ø—C:žu¨èZ°Óµí+P¶{­TÔm¦hcšÉ® ñ9úðï ›]Ù/!)’$D+0@så|éI[Ÿ1¡Ýùø>=|O\ãÅ¡»º†s€KHÛDë$˜–UÉ2 ʦC‘J>=üRð•[díþ$Þ#vܾŠUþì˜ØÆù&R—%ñoî½ùw~Im×F¥)wò_þëß—wä–Ýtkô ÷¹BêÀ]˜…Q€‹F×Ë8ó$v,gfòçE…Õ¼Ýᄤ'*YTL»¢T&TȪ² 1µÖóóþçÅ.Þ*¶Î3ƒ¢xl[î2¹´¹·çWS¾ø_‰ÀñU¹Šäh~Î »ó€7c :ÈUYB\ÊÚ¥¶žöÏ—T¹vùèûÙ s+j–Ú{Û>]RåÛç£ïd~¡1Ù®ö(6áU\ˆåŒjÅ£pfŽ@ª@·u’6*º¢bÙ‘b Ÿ)/”F¨ˆVY„ù.qüß5–?Ïÿø_0 ñ]¨ gJðζ© K@NÒIù‡Ì6«ÂWŒð¾þ(’ñTnÚÑ<8NÕɦL€°ÑfPåÁw–úz¸¾¼º«Æí+½ßÏaÞ[éêâúò꯴®÷=Ð$@˜…ÆÅ ¨ˆ ‰Z@LQ0òÔÇ BáT†[„ufxœLЬ¢ÊWiÆÕ%з (2³âb» e¢%ıH­ùú>;üW?,^'If|ì‰4LZO-JG¤q›–wòÂÆbÒ„u!‘Zßþ'„iâñœÖS˜ä¶–ÓHКܡ7±•Óo®Ò÷ûfÎò9´RÃPIÚ9â3Y§–ÌM^ÎÝõj×I=lß~ïWѽ»êÕ®’zÙ;¾ýÞ¯¢ý>fãû‰hvˆ¹Ü#ÙùÄ!ðéówY÷±%†oWÜ!bÅw<©.ß2$Ì›_qÆ‘º+°“FnYZ(¿?¿á{üT9ÅVã,@?ØþW€X#Âà ‡d20EÆRV)Ÿ¾(¬R?ü%Ñ¢7v–MÃŒ U…XÈ#X¥ØÛÄwHäL‹¸‚€mí̵µ›nÖ|½ìÚצ›>ì{s-mfÛµŸ/{6µé¦Ï»?AƒÎ Œ~pWqÛ¿k¿–UTÆpˆ’0Ör·©#]Y·¯Ùƒd³+æ/ Ñù¸>Z»²ý¥p|}£cƒá ÁWs`ë:Ò’ê@Ü>}°‚¿;<ñû¾Ë?ñûñr8%ý£þ(¤öS\[¯ÆÏºÆÒþá>-ñ*3-¿(¨Â;rY0®#‡bî_÷Äß·Þ¿ñGP‹Røû2~Ù?õ-*ØYëRGðÙJ YLZm^/Û§Äß²!ñËëRGªÜۧ“ãÿøFOˆøÙ¼/.¿áâoæçâ±ýª'øsöym'P»ÖlmÓTÓþ$~Ç¿f¯Œæk ¯í`ÒuO‰Ú·†§–ö=jÿÃ÷þ)Ð<)¯xú\ø)ûþÈÿ³§Šµˆg/ƒþø­¯x~ëÃ>1øÛ¦øD¼øûñ'NÕ5+\ñ ÏÅ¿zÅ®¥ñ“â÷ˆë½ì­o•¶ßÏ[o¿òŒV¿…ï­ï}ÑÏü-ýº?gÿ>;мðÆÚÅ_ð•iÏá?‰°~ǵþû8ø¿GÓ´}CÄÞ.ðíY¬ü Ó¿f_|?ñV‹§6¥ðëâ/‡þ-ê>ø£k¨øvO‡"ñWü%^·×ôQP€xÖÙÇ[ø§{ðSÇþøâ/‰¿´¿ìÿãø³ñ'ſٿÀ?µÏŒ¿´_о~Ë^¹‘õOø³W_x÷WÒþ|(Ô¼YspYøWÁÞ·ñf³¦ø'À7Z?ûKü/ý©ÿá©ÿg/Ú_öhðìÿñCþìÿûXü ñ¯‚¾:|{ø‹û?ÿÉÀ|Eýüá¿ø[Ä~ý™i¯í¯ì_øf]{IÖôM[AðÏüŒÚEý†¯wöKË:þxu/ø çíµª'Äé??à”ümâ?ƒþÐÛáN¦xÙÇ¿´OÛÏöý­®¼ âφ?à–²ŸÅfý˜Âß²ŸÄŸ[x'ãÇÇÛâchž4ðσÏÄ›[OâÄÿ[¿ð©þÂGÿ ‡ü+O‡ÿð–ÿÂÀÿ…±ÿ Oü!¾ÿ„þŸü*ÏøQð²ÿ¶ÿ³´ÿá`Â’ÿ‹;ÿ —Ú¿á#ÿ…Yÿ÷ûKþ/ø”W̳ìéÿôøWñ3ãE÷ì‹û0~Ì>+|#ñ~3x‹à§ìßàƒž*Òuü=ø?ûA§ÃÝCÅ~ð…n|OáýSÁ?þxêêTÖü*úΕgyp¾)ðÆ£§h߈?´÷üöŸøááÿÙâóÀ÷_³Ÿ‡ ?iÿÿõø&…üMáûߨ—á÷…~'þËÿ ~xcOøG®|fý‚¿h:Lj<ñ'áÏÄ?Ú8ZøÏþ a§CãÛ3ö‡ÿ„KUð—ÄM%þ5üWý^ÿ‚RþÅ?ÿa€¾"ø[ño_øâ/jÿðÊßf¼øuªøWÑÓþwücöý޼YçÜx›Âž½_퉿³'ußùz|¿kð&¯áORþÈñþ³áôþŠ( òÿƒ£¿å:ÿ·7ýÛ7þ±çìûEðtwü§_öæÿ»fÿÖ<ýŸh ôûÿ‚iÿɺüFÿ³ÿÿ‚±ëÓlŠûþ¾ÿ‚iÿɺüFÿ³ÿÿ‚±ëÓlŠûþ€ (¢€ (¢€ (¢€<ÃãsJŸþ.¼*døaãæ‰HyWš±Hœ3€8< þz`ýâ˜ä@Y¼Å$'krÆ Ðoy#*^H•#ds¼°úøÞ'Á‹È‡k¿Âÿ¢xfð¦¬ñ“Á ð ô¯ç£N°‚Ö'ÀV•šg•£ùKG¼Œ0ØM’Ï F³åìÒ?ÓÎÝ4Ogmm}Ó[¿¿~‹]×ëúôlý€ñº•ý™þ `“û#áº7,Øÿ„*ðFŸ.Æ–H·X÷ yPɱT4oòìä‰<Ìlå‹å™¾òXâe “*G-æÌ†K‰]"™>£ñ¨'öfø-€HOÃe8 U‡ü!w*ÐVC´…d”W̶$Ÿ-LW œ0påˆÜÛÔ4rÖVßÌv9%ÐËL‘ÜJà2ßÊúÝm½×}4½ß[7{«¡|¯­ÖÛÝwÓKÝõ³wºº"qÙ@°.Û,H¬æ5(Í`|¥ÍSæ@äA ´‚$|ÛK+ÌQÅ>M¢g’4jåO9†â7_œ’ÊLX+> ”uÛ( ó#°"Gùˆ¡âò_a´€FÕÝ´¶U7+ª†äG Ãþõä”(Dï‚e'ˤ’ÓNÚ=:BÛ/½-[µµRI$´Ó¶N¶ËïKVímT’ €Ç;o<‘Œ ó!y %¦ˆmn^O„ýØt ÷@ÜK£jeYÂDU™a#*8Ù•VW„ÈT˜^ƒaɨ!œ)Œ³æVhùt`¡þÌeÞ\•„%8Û˜œ,„Ÿ5òÁšd}È É@Ëæ*Æ$ó7J¢ETPì»/•ÿºÕ¶V²¿~]tv»²ì¾WþëVÙZÊýùuÑÚí ¿/Ìv’B¾Ã°ìhòGöùed!cY2§“È” ¹Æ †+ŸÞìDR©¹™å¸µD…B˺G»ˆ*D^w‚6ó#U<—pʨŽFòãßzîE“ÊT²ñùs<2»•t&›&UeGÊ«ºRóEû¸æˆ?•ïn7Œf6"%A ™wüé%Û¶÷kì»èûrÚéß{5ºIví½Úû.ú>ܶºwÞÍoù{ñ;ö±ý¨¼%ãoÚ[Xð‡„>xƒágÀ?Ú»ömý™<3á/Ÿx{ÇŸ5ßÚ“Áß²Œz%η㽠ïÄš7›O…ž2ý ­5«Û½áoÄé~$hwx+IÒ¼1­øfóÅþ5ítÏÚ{ã…׊~kãáV¯ûK鿵®›ûx_âV™áxà•î¹®~Ì>ý­%ø‹âO…Ú‡µßYYx?À—Úæ‹§øMø˜¾&ø“âíEðö¥¯ü,‹ÆÉ§}]«þÏÿµ–ø†º·„g“þÆÿ†_´a}oÄëw®|RøGÿ é¾øºiÒï62hzÀo‡sCá«fþÍñ$Ú&¥¢f·×®DË«þÏß¼Kañ‹FÔ¼5 Oþ3Ò> üGK]_ŶڽïÄÍ ÃÞð¾…â­ZÓµÍYøcâ è?üÿ óWð·áýbÇÄþXÓu­'P¹·ÔmZ·KlŸåÛÕ-n­ê®Õ¿'߷ߺßF´¾ªÿ+i´ïÆOüE_ÙÂÿ <3ûUøW]ø•¡øß⯉ü!ã?~Ï“øs௅þøóTñ/Ãßé2ð?Ž|g¯øæÇö—ø7ksà Ÿ¾±ðêk¯ˆê_~ i£Ò|[iûTü}øÁ㯀 þh þkÞ=ø}ûe\üQÕþ'éþ)ø£iðçÆŸ±OÇß„|a€l<-}àWøµáŸx¿Ä¾/BÕ|SuàíGEÔ<9ãT½Ð-´´øcâowø¥ð§öJø}ð×Ã?u-ágÀ¿‡ÚÄ^!?õO‹þ!øMâo øVÕuƒ¨øÖŽö"мqŽ~$øƒSºµñ—ŽÇî¼uñ üM¬iþ<×õMcU–ç#þoÙÿg¯ÚoI‚vð\¿OÂßÙ¾ÏáWþ&ø‹ÄÚçÃŽÃO\xcá¿À†~ñGˆ/¶ô‡^ ñ ·Óü¨x‡Ã}=ÍŠ¦Ÿ¯ÞêbÒÞM;µÓݾÖzÞ-´šÝï{‹Ky4î×OvûYëx¶Òkw½ï柲¿íQñ£ãF³ð÷â„þøwÃ?¶ìãÚ‹áWƒüsãMoUøS£øçàM²øOÅþ;ñZdõ_‰ZWÇKOA‡<ðþ÷ᥖ‹uá»=oâÜHþ%ƒÉ>übøésðwþ “ðölоü9µøÙÿéÕ¾3kמ;Ñ>#xÓLøQeðŸDýš®|/á_hüNÓµoY^ÇñKRЇ‡|]ã kÕ{–ñ޽ãýGSð¥äþ4úÇà´Ÿ²5¿|ñ[áìéà ~Éüwû9i’|LâOÂoü øW%§Â¿xÃá÷Ä¿|`²ð÷‹¼#eÿÏ߆F¡ñ;LºñM§…ÿ°µÛ £¥ø­¥ñ…ÿٟÿ³Œþ|ø—ð@×[Àÿ~üQý”¾ÿÂOgñSÁZǃ>è>/ð€þ&ü,×¼ãûM#⛯x{Ç?³Ö‰¡ë×?m-¼E¥ÞèwzŽâ+èµk]BÄê•ôÓnšÆÖÕ?+-ÖÛ ê•ôÓnšÆÖÕ?+-ÖÛ#å/ üeý ~<üÿ‚y|Qøyã¿ü0ø]ñ×ö ø•ûAø»à¿‰ü'ãOG-¼ž$ý–~Ôµ‹gÏÙOâÄgÍ7âíßÃ| ðφ<ãÔðGÁïë¿|yñÓÆ^4ø«®ktï|K†çÁ ÿ„³Áßüÿ¥a¯Í§|ñÅî<_gãÝؾ3øö+ý–~|ñ7Æ_iÿ>~ËžÓ¼ðkÅ?ð´øã—ÅÏ‹zw…¾Eá7ðÿ‰¼)§|,ðω¾/èál°h7_Ä›ëKMcž%Õ:´ñŽ­oqaqi6Ÿ£hWšF³ö¿²,>xCHñ÷Š~%ØhëüYà‡ |Mâ(¦Ö;ÿü(Ö/øCJñÁŸŽ𺆮ºŒÑø à¯Ã?Œ?>9hÚ^›©Þh—ž#ñìëðßálj¾>xÁ–:­¼v2øçÆß |=àÛ‰õŸ E¸?á8ðkx‡ö—ÿ‚L~ÀŸ¶'ŠόߴŸÁ-gâ¯Ä[JðÚkZ—ÇÚE²Òü5 Ç7öf០xg⮋áo iË6¥ª\éžð敦ÝëÚÆ·â}NÖëÄþ#ÖõKï ?e?Øïörýˆþk ÿf‡Ÿð¬|âêu |g㛯꺇¼9ªk굋,¾-üñ®«ãý _½ð_Ž5_ü=³Ð|3£}ð§àŸÁŸ½ð—Àÿ„¿ ¾ xCRÖ®|C¨xgáW€¼3ð÷Ãwþ$½²°ÒnuûýÁºN‰c6³w¦hÚm¬º”ö2êréúN“i;ÍkcnÓ~R2~æBäyNcC(tÜØVi6Ç1ù¼—‘R64$Æí³]Š2YYU<´p%U•˱‘^1広É’ mt—Ý}“Ñ5v­¯MW“ mt—Ý}“Ñ5v­¯MW“%„1š1€­ç¨d$#Dß0Ìh¯Ä„?t­”-"$KüÉüY_;ö™øŒŒÑG$ß¼j¢9ÕgˆHÞ-½bºR6@’BUGžÐȾJ„–¿¦¨‚³Ä†Rñ Ã+ ºp ïF ¦Äd«[í»ùvcÈÃ1lùˆÌâ6Ü#…ƒ¶OH#|G+ŽA5Ð1;f´¶÷ïó^wïeåk¡--½ûü×ûÙyZè‰q3PJ’ ¡òÕŠ¹’âBÃ÷sÜÆ±åR?%A6¥Xm#†;["egÚ’GÌ»…UdL¬m+9‚FWrHÚ è‘|ˆ~oß÷†iv»È ßfPRbîÛyoM@Ò6®‘6®Lmf2´eÔ•);K …Ú5‘‚Ûw²$£§w-×Í««Û½“ù%;¸Ùn¾m]YIÆå'a]ê <¨P°%áTre bXØ¡d•Þyž6Rí$gr®ä8et\›òQUYœ–ƒÀÑyQr…Œq·h\,G!Q°ìØÞsf9VM¬¡ÃF§ÍFl$ÆGÛ˜æMÃ-–Dm®"—"@ù Ë.òÑÆÈLîc'^Ú¦¶þîû{É5ªÓK·fš:öÕ5·÷wÛÞI­Vš]»4Òcy—ei"¤e¶oy˜"†sµÊåã‰]ã‘É2LòGº08ÚŒ H6³’£äTÁYYƒ!W’?7†2N’¤dàôÎ1(@ÒG PXŸ,—Ê#÷¸#ÊchaFuv\ +‚»N6hÁ6ìVɉ‰ÕUÔ€¬òïq#L‚³íuo’NÙ½6ÛD¯w¦ˆV}®­òIÃ[7¦Ûh•îôÑ"G°ªÄ@>J,#xDÐ+FÑFûオ€Ep± fCª#lhDr.øF‚ E$p­¹0ª¼rG¹6@Û¾Xc0¯•oµXœ…$@r 9V¢vÛª!"á\É1Ÿ5üòiqó0 œ(| È‹‰Ñ$Ý<Ã'—#¯ÞŸ+pËGËnþ\ºo¦Û+líön|¶ïå˦úm²¶Îßfí»HæµÕmä€_ í>ó}¼q$Íq<ЦçH¥…¢yÝ¢†EÆDa!I7Knc¯Íï…?…û<~Î £ø]áO„ÆK40Û_ŸN–íÞûl×çÓ¥»w¾Û;èð—Á/|mÑ´/‰Ÿ >4.…¬Z|YÖ~0~Ò:ígû|tð×…>.üsÑ<5ð§ÂüYað—ÄÿeýwÂþ ýŸ|á­;Gøqc6·ñKÁºi¾4ñïˆ~(øëÅ?'ðŸáWí¦|ø]á¯èׇímÿ/ý®|Eðsâð·ÆþðÂkÝkâ·í=¯øÇâ¿Æ=\ñÄX5?ƒÿ~^|O¶ðv•å¶£âÛ‹~xcÄ:75{/:Ùñ?í3ñká7ÂÍwáGÆïÙŽûQ½>0ºø‘ñ»Ä¾*é^Óî´Ï`iŸ í¿fGã–‹âÿ‡3ð½ÂêúÅ‹ßübÿ„¯áÇ</ƒõ/…ɪx’æãÃ?"ø“öÐý¨¯|û3ø›ÂZn‡á? üLðÇí:ž>øÑ¡~Ä?µ7íwàOðcâÿ¼ ð Å_<+û>üDðîµàO†¿µ75üeð.­âø³IÒüq¡Xè¾>ñ®§ÅZ¹w§}-Ñý—}vW¾šy¤zwÒÝÙ}vWé§÷šG_ãOëwÿðJ?ÚÃáþ…ðÏâ¯Å]SàÏí¹gâ j±Mâ¯xûöˆÕnþ+i¾$xl[x7Á£^Ò~0üaÕ¼Aâ?„§„<ᵿ x¯Ã×/ÃûNÇÁúÕß´·ÄÅø}àÍ?J¹¿ý§>ÛxÇLK>4~Ì->9x›À>!ðö§à~ß|?±øyñ÷Z±ÒüC¦ÙëþÒ¼_qð‡Å>ƒOðõä^!Ô4_ˆwÞñ_‰~^ñ¿íƒã/ xöx¸¸ý¨?eo‡Z_Å +ãF§â¯ÚçâÿÁü2ø§ø“á'¼ àÍàþ ~ÐÚ‹~|vÕåÖüCÿ ?†|wñKÃz¯Àoh:oÃ}_|(û¯Û7â¿ÃŸØkâdz6»â+Ï‹Ÿ¶Æ/„>%ðßÀ¿ 6¦ß´w‡|)ðŸö°Ó~ø“áv›âÍjäxgÁ?|EðïÀ_~x™üa‡tokd3ø­oáÕ¾ø…¬ §Ý§[r[ݲºîíê´i‹§Ý§[r[ݲºîíê´iù†¼ÿ ëà÷ÀŸxÌ~Û_ðoÆoÜ'Àøwá‡Ä ^ü<ÖâøCšgÂí[ë¯ØÀ2ðìÇ¡i~8.¿ñ½ñWö ø™­ñ ÃÖÞø¯xOã?íñ_âǃ~"üDðÚèøc]ø‰ð÷ÆÚµ«ø>ãÂ>¹ð׈5[Ë;ý Ã÷Öëá‹ï~ø9ñGÃß~iÞ:Ð4ýKH¶ŸRñ—‚üCá¯ÚZØë~øƒðãÆ:§Ãïx;T²Óîotø¯¼ ã/ k~’móÄš^¯‡$Õ­5íLº»ñfêR1•ØÈÏ#4ÏtZw;丙e•¯¸‘<éVE1•§¹iX$ÌdÊ%ói¤ž©ôŽï^ŠöWßÑ4¾m4“Õ>‘ÝëÑ^Êûú&®îYòò–iRd‘•žEKfŽw º2ÿf²±‚<ÌdÞÓÉ‘ÒâŽ<*íéµ Mѳ2¨ÚÑ3n‘¦ûNÑšG`$•c GÊ8°‚R?,B^5¡¶be>Ë# >j»’ß*È I ]Š¡ÕŽãÒŠ¥Ù­Àd; ófSäjÚuï'_Wåu{[]ui«i×½üœm}_•ÕímuÕ¦œ)ÚÛO#?#£º¢BÑ€Z2™P4rˆÄŠYšã÷nA@Ff$|›•H*àD|¢V9Q˜² zIömþ{”¥S€¹1°a09FØåƒm JĨ0—1K0b’*‚NÖXb× 1a&ðªóDÑÏ,‹±ÐÇ™’0Tû÷K¯NN–×Wg²Õ§{ó#ïÝ.½9:[]]žËVïÌ®2 õUÞÊ‘ò„¦"b€èXG‰ÄÃÆ^_5¤*s–Á&@ÊJÆC«DÌ÷q«x[ʇrˆœ*€~A+r /pK0(ß; $ƒ³y!÷ÉìxË*+N±°YC‡“¹A*å6ùd¤r"D»cxÕÊ$ž\ËæœË¼:ºÌÅ-mªüÿ—Ó½ÖÛ·nT¬–¶Õ~ËéÞëmÛ·*V0 |„îËÄ›;„qÄ¡V$aò6X²F·C|ec›r±ËE$–,#Sö]¦VŽ2d‹*Š‘+ *¬©È°]ÊȬ²ãO63FØU#2ñ*Æbdòæ±ÑÉt!Lk–xãÆÒ"ýà ØDk1,ò«Ê»rÎäleb`b‘%ò¢`Ž"#3¾¤À?™¯Š±-ßí/ñR #*~4xíÝ$Ž7ŠG_xªi‰Þ˜Â,ž`Tß»k†Cý1¦†Ý˜”» ŸË| ŽARBù›vÄ#D <ò*æâl‘ÛþÓßZâciükñî뇈\Qü]â¥XT“*þ94‹$d,ŠÌ`TA­u}iìÖÖÖÉßM^¶ÕkvîìÕš²·H´÷ó¾½tzŸ´ß²üQÃâŸÙÉ]ƒñgÂ,yP*eÆ©áR¥ˆ µä';Ö3$×Rù O鿜يd›Æ?³»ÆŒxŸáBDªÅÂ5-cbŠýÔVÞá‡Éo-{£z¹èÒ캫k³ë}Öïw{i`íþwé~ºõ¾©?Š(¨¢Š(¢Š(¢Š(üàèïùN¿íÍÿvÍÿ¬yû>ÑGüÿ)×ý¹¿îÙ¿õ?gÚ(ý>ÿàšòn¿¿ìÿÿà¬_úôßÛ"¾ÿ¯€?àšòn¿¿ìÿÿà¬_úôßÛ"¾ÿ Š( Š( Š( 2øÔø7ñh? ¼x# ƒá]W ƒÁ¸¯çŠØ%yaO*ÞHäXÐeV$o•ÀeåYbºª¨³Oµ?¡ŸŽ ³à¯Å÷Ùælø]ñ¶`û|'«˜<ØÆ×óÆ«u¨E2,6ïqÄ‚4h]ÄRùòÌÐE%e!ÞWTÙ!r9F­a{;[}ßÊÉ=7v¾«¢z;ªQºÒ×ZöoXÛ~«u®ºÙ\ý€ñ«ý˜~<|Ç.ƒðÛ-“Ëo‡zƒ3¸Úû‘p²²à0*¤p~\™¤ÝŒÈ¡™‡,ç/û¯4>H"°§Âªb%TFSý¥?lOÙ·öyø!ûjœ¨’B…ƒ— sÇ.àyKæ‘`` c¡ùd–@UØÂ|ÙKn9"&‘aŒm‰þÿ‡—þßÅñÖW 8çá§Äò9óKÐx("mÌžR  ,mS$y?áåÿ°á ÿÂô™N n~(·ˆ±‘à°cM„(]ÌVò²ˆ%ém4vþïf’ëÙyÜô¶š;w³Iuì¼î}Ö~ë¼€ùF@ÀLÌ$-" ’#S>ï ˜‚ì£9,AÝ"ï;Á›sH&Wz°"Gi#Q `óœ¯Âgþ _ûÏÇ›Œsðçâƒ0 `DmàÁU?p"@ø·*রé,OÇIö’NÊ*ó2–Ûàx÷¾99–F’RÄR@[mº%m?—ÍrÚÍ+ÞÝâ¶ÛtJÚ/šåµšW½º=Ï»6Œ…ÛÈ$"”ùx¾öÈäy–IG”ñZ#»+*,ªí8`Çï|®ÄÔaœF7žZˆüÙ3 W`®ª¦(–fZøTÿÁKÿa¿˜Âó“‹a~üOÆA”ü|€¤äª¦·A€s þ ]û ±*~:HAfãþ¿ÅãBŃ:¨ðQP(ÁˆÚ"®TÅŽÚô}––¿»m/eg­µKn’mÛ^²Ò×÷m¥ì¬õ¶©mÒMýܨòºÄŠå¦™Q-m1‘çUh£ž .\ºDÓ[´mÙ5³—eoø§áïŽ:óx{[øñ“Áß 5-ntwNøð‰~/ü;ñt^#ó/f¸¹Ð¼=ñáO‹<-â­¼<ÖþšóâqðëÇ®ø¥üs¡ê:Σðûì9ø)ì6û·|s™üѶ@ÿ þ(®õso4·‚Ÿx«:¸;¼©™6;¤§þ iûcñÖáæ$Hæÿ…yñA¥Dá Þ™vQÿ{°ÎŽÊ¾]¬“µ·{-/²¶¾my݇k$ímÞËKì­¯›^wg9âïØãã%ßÁ_‡ÿ¾þÐÿ ô=¾&|_øÁûCÙ|Eø âø/ã猾9xç_ø¹âO‡öZ>‹ñçá׈<ðCþ_êþ"»ø{qñÇz·ü¡øáÏ>&ø¯E¸ñU‡=ãSðíusáÂ-ûD|ðÿÅý kÖ^4–ëö]×®~xëFÖ®–]2òÏà øåoñÀšç‚tÝ?HÒ,¯ô¿z§‡u ¯ükk¨x6ÿEÔ4? ø7Éÿáæ°îÂó›oAøqñ=mi ÂQ”&dPe%ÑecÁKa—‹ÉoŽ2xâð×â„‘©™’YFßøBPí i–ŽòÇl]A…gäלº®^ÚzÙ­ü›jÏɯ9u\½´õ³[ù6óôÏØûÇ~µøGã„ß¼ §ünð,¿´Å׉øWâ€|Qá6ƒâo…tÉþÝé¿&«û|BÒþþÏ^øgñÏÂZÄÿß´—ÆÚnÿÆ~?ø/¨|Bð'nØZL¨‘<‘ q3ù‹,šO‘’ØÒzk·w}ìµ{­ÉßFìº4žšíÝß{-^ëE²wÑ».Ÿuó³sÃ#—‹ihÈ”«eMÎ!‰gƒ÷¤Å–LcÕTXÿx² Éó(ªÌ Œ<ä;§Úñ$nÁ …þ aûpÇ9yÚ? ¾'²©xâ›Àñl¶Àû<ìG¾Gic‘”ðRÿØoä+ñÎP@]Œ¿ þ(ÆÊrއÌeUË!–Þße Õ[MíýÛÝ=ž—é~¶_½U´ÞßݽÓÙé~—ëeðýØ °P`̱6# à²0eq¼…¥–f”ù)†·Â€‡*X«1PY˜Ž¥ƒ6cc$’fU•˜±™9ã–8þ_…üÃöÊŸø^R¶0T·ÃoŠ*îWÚc•(ÆUw Ê«—ßæc?রèà|rœ ƒvï†ÿIC2Ÿ€¡RPÙ™Ñüç3mVÑj–ßkÊ*É;ú]ê–—»I+hµKoµådý.õKKݤ¾ëŠç –Ý'ÊáU|áÅq £nhX/—³qIñqÆÊqœ‘LŒ XÓz—1B„e„h‘"«¬r‰<’íFøPÁKÿa²À·Ç°ÞXoø¶Ÿàù@á ;ª_nãûÐùÄâš¿ðSØw‚~9I“±Ž~üM|â8³¸·ãV ¸'™9gGev¿Uÿ.˪{ò«]®Ï{&ûY¯”“Û–Úégek½^š[G÷`q’ ›•6ǰÈU_,c[OŒ™€Â€ÙfQK÷ºà£rî‘Â"ùöZ5Š5)åÈÖ'vˆ8|Çð—ü<»öÁÇÇAÀÿ¸ø¢¹,P3ÿFClb0NAWg•6Ì‘¸ÿÁKÿa¶ëñÎO¼XÅ´øž¸fÁÎ?á €Ú±3s-ÿ´Ù¦´Ö÷²MÞÑiÉÝÇÝI~—×NõïÕ«¶õHûºÆX Ê¿(˜HIV*€*‡òJ ÔìibÛ_ÌÇÅR«ûKüMûE»L·¿¼woˆäùdŽêhb.Å’EºaåÈP:]I2Æ|ÂÇõåà¥ÿ°È ÉñÒUŒad•¾|Mm‘l †Y¼ªÅ;^IU‘îdŸÆm_Åžø“ñÓÆž2ðuì:¿†üGñKÅ>#Ò¯`Ó5¸¤¹ÒµsVÔ­îMÞz—owna¸GB‘©Žx’ lïuºêú5tÕ“I&´wi¥£ºHÛªÝu}9wWÒÛÚí¦ÓWº·îÇìÒ¢?~ÏŠ@"ñGÂ$DÝæ¨Ý®ØïTÏÍ9|),¤,eÌ#ú;¯æïöbuOþÏéfVñßÂÔÌÍ!@º†Èðçr*±²º EÄŠ¿Ò%T÷Z[Eø¤ìõoKßW}m²A¯kvß²ßÏÓM{X(¢Š€ (¢€ (¢€ (¢€?ÈþŽÿ”ëþÜß÷lßúÇŸ³íÁÑßòÛ›þí›ÿXóö}¢€?Óïþ §ÿ&ëñþÏÿþ Åÿ¯Mý²+ïúøþ §ÿ&ëñþÏÿþ Åÿ¯Mý²+ïú(¢Š(¢Š(¢Šó?@Ÿƒ€$ðÏÇ€‚A>Õ@ FGl‚3Ôþxîn¯m•µ™¾…2ƒýŸr ì-þ^QX”{$p"f_èoãY#àßÅ¢ ) ¼zC(Ë<+ªò£ –@Úr{•ü󆼢pê’¿Ì_Ï$4‘Â\ov<i( Ä'D]iÞϵöÙïou§MSJú¦ì5}—üãÓ¢ÛU­ô×§Ä_´gì“á?Šº¶©ãG¾Ö‹§F–œ©n›º½µwo™>‚ßn‰tzitÝú7£Õ=Ù)ÿýñÝ^Ù\éö0fEh.£ÔíH˜€cCâWYmðxBÎæYR¦·ÿ‚}ëjó}¢ÂÞíU^HœjV0BdžS6Ï™LXœ™†”vËÎg*ß±1<~rÀŒ¿$Q# É È@9(Ò²m‚8÷€BxB%‘/8“´`’Ñ3’2±b¬ÌÛXåÎÒD J$·¶–NöZü-4¤“jý/¥½ÛĤº.¯[ÇGÑ÷z¾ËMã5ÿì âK{èàƒÂm†êÛwÚmu«o²Á<¡£i2ëÓIAäß1މ‚ ‚@^KˆØ‡ö »iõT: ³%šÇoilÚÅÄo%ÜþdM+Ü—ÿJX§•̪Î!!ÎaÃl“ö:á¢pÛÕ¯ÝÆÐë#m£ugdhË«`DÎÞd.›Ý™$ªØ‰LM;Q$ñ<¬\¦ØÝ±†˜—äVò÷™Í »e"JËE¢º¾»8«è•÷_…¥½;½ïe¿W²nÊöÛK¿È ø'öªa#RÓ"ƒQ’U.=^Y!K'‘Œ¥¼éR!¥å’ 3!‘‚—þ ýâ(áw´ðí­õÉ+ËþÜSµ%y#ygÄŠ1—wú;»|‰åi~À~òW—L»ÕŒiµÊ (ü¢ð8y«$¤0Œ¬Öá'¶.MÈÁ‚2Ã# l°TgTyÒû7+ÊËó€bD¾ûÆûÝÞÚYr½yžöÖïk\·›ÓMÛjÍèµë÷]Ùì~=Çÿøñ–ð:i6« ‚á®^mRS?œÃp,’+²9ˆ¦cŽ3½Ú5ó墸'LjbŠ9dÒ`’I˜#ÛǪȲ˜]pî È‰˜šgW.¦A(b£ö0982àìÀÎ óvF|(1´™*Ù£ù‚©"$¸4È%å-ÄKd^0퓸m‰ƒG¹Àp]Axw…q+ÛDöÙu|–¶Ú6“Ñ¥è¶-åoÂíò%níÿWM%ù ßðOKçŠå_H¹µ•ü„@u ø’Uƒ4²Fˆ%ß+7úE¸Q$ä8`ÎR/ø'Ôì/þÙ¤LŠ×˜dU´ å+f`6x‘@FYX;(„“›çf‹õÒþkFåÒ4ÉWÜC1VGË:®wÈ«åÇ´„°ÑÁ<…•¡UÐIw*°RYC U¥ É)ÞK¸ˆe‹GFí«ZÚͯwDÕžÉôKgì¬Y/½=S»^íõ[½ŸK­ì‘øëqÿýÖÑ/çØa·¶¹ž §Õ-nÒîH-ä‘`(Þ%/Ì,Êí…9™ÙÌ…·Õ˜àŸ—^di>qt‹qp—OkªÚ£î–}›ÄÁi4Âv,rÉ?ë´î"šfŽy6+¦#r¤$ù‘A;‹);²¸+LËvº•À•áq.ɘ3° LƒÌ@øCm»@mˆU¾þKJöjÍè®úAË}|´¿v®®Ta)lœ­kÛ[6£tÝ´¿EmÏÈ£ÿùÖežÔA¢Ç\M{&£«Ù¬ÖÒÄ“ÉE¿‰J›Ì*Ñɸ£‡i\>eçüóÅvï(³ðÕ†¥gå=Ä·’x—È[xÉvbÂ?O3®ÒHH’iXÊñÄ.wCû$𕤥cH¡ ]7«æ1FVMÌ7r•Èb Œ#—2@³yqË,Q‰ei¡XÀC3Ä]ÔFß&$o+‰Èâ|I³ÈTvºO—¶ªÊÿ v¿MÖ“ÚëDî2‹I¦–Öm¿vúj’×]lî®Òµ¿ ý5ç¸hª¶qÀïpnu –Ó:’ÒÇbëµõ+$ZxhemÆ«l(XÍ&|Jqéäf2+Eæ9Löbãx”ˆ– ÃÛW´6±\Ì53´ž ¸"V™š_*—ýx[WÈY°~Á·o>ªŸØ3N–i6–ÇX¹G{©ÖTyžä‘ö¨á’GywHÐv&0ÊoÙ †‰Î±’›æÆä`£ÈÅá!¥ŠBáC!þg©µbmÚW,¬’Âe íWLGhÔ€ªªDo4†H–4¦’KEm]¬õmÛ•YhµÄöí®¬4M_ówÖÚ^ÎþnÉ_K_Çû/ø'æ­äyz–––ú”Ò¡H†¯<‹&¹2ê %Ù;´’4¶ùS$‰8Ý+Q7ìâ…æ´Ð,on™vÿnÄc‘¤O4F|A2¶ÒeÈìì”-ÄÍ,cöwÊʑܢWÌxaXÚE'Ì,Ø <·,IrU6JIÌE¬Û<ä-¸:+˜¤rÁÕÉ}ˆÒ6é¬)2€$Ë#+H܉7­»h›¾¶VÒÏ^ºE'gוo£ÛmÛv‹Ù+ßVú&´I«7øòŸðOŸÉoǤY¬r¤Ò\ý§X”ݥ˯ú ŒÀˆK;( JFd™™Hyt¿ðO~ÜE;éó<’ÇÛÿk²†RX±I$†Þ9dIö‚fNd”Ébö1ZÜs+Œ+2ç*rTaÂï•vòÌYUÉFJöÍ$|È] *;gˆ™0ªÁÔ 3 ®ð q˜Â*†X„–š&¯£I]é£Jý•“uµÂ×û÷i%wm[}.íÓM¬¿!þ ózªÎ¶CrDgS´ŸcX×v|G1L<¯4Ø›çf2™«ð—ìQâ_ êw®‡lÖ:™Š }P–îÞñä¶–%†õä…¼A/úbD´÷kfdxâhVCI?R¢g2I<‰+ÚÄ3¨2S&K.yÚÌU¤* O'—,—NCyF ¬¦èÈ€n@†rͽŠG¹c.¬H”ó vKu®šì–ŠÉY]¿[ïË{=•¯ÕÝ-£µ®¾ýîím—öh±¾Ò×&²¶Ð|ãÛ€~ïQ_€?µ¯ü;Çuø$Æ¿„Ÿ ~ÞþÄ¿·Ãû/Ž¿µgŒþ=x£GøUã¿Ù³öqø›ã¿ØwáÃ/‹sx¬üB¹ø ÿ»øûqø PøÁáù4¯‰¶º¦§ÝÚé¾%ð/†¬¼AñSBôˆ_ðTŸŠrÿÁg> ÿÁ8~ |7øâO€¾û'ƒÿm¯"›Äk㿇ÿ¾2~ÊŸ´ïíUû6üøu \jž²_í†_³&«ãÿ|BÓôŸŒžÔôÁà[«¯…Þ:ðÚ~ßQ_ÏìEÿ?ñWí)á_ÙÅþ:ÿ‚´ÁtŸ|~ðÿÀ/xÇöGðŸÂ­FÇãî›â¯Ššw„õ?þÎ^Ôõø*ž½«Ùü`³ÕõÛφz5þ©ðCYÔmüiµÅ÷­Få%ðŒßPxãü×âÏïߴÂßþÈ0ðÿÃÚöãøðëöMÿ†gøŸáÿŠtÙö§øíðÂ? ?á«|Eûvi¿ ¼ñã}—Á½>Ïþö»û;_xᯈügý½©ü7ñ/‡ü;>“ª~¿Q_0x3âÏŠ¿j¿Ùá_Ç¿ÙkÄ~øS«þпþükøS­|~øU¨üRÓ¼-á_‰ú'…> Ûéÿ¾|;øÝð®çVñø'YºÐæµð߯ë ;@ñU;®š¯Šô&M'\ùöIñÿíõñö€ý¥<#ñ¯ãwìâ†_²¿í§ü ñ6ð·ö9øÑðÓÇÿá%ý?gŸÚCFñN…ã~Þ_ü?ðãûÄ´f•áÝODÔ>|HþÞÑü¨Ok«øz÷ÆvÒx4ôþŠüÿ‡ïþËðë/øj?øl/Øþkþþïü3§ü4ïù:øg_øXŸð¥áQÂßÿ…µÿ%kþ(oøWðÿÂÅÿ™gûgþ_ôêý_øñ¯Å_>+~Û¾ñŸáû=#öký§ü'ðSÀ·5®£o¨êÞ׿bÿÙöŒ¼Ô(ºøYÿ öqý™?à§ÿ ?à›~=i3ñoÄ)|?aÿïˆ>8ü-ñgÇKMOÃ>.µñVu» ‚þ ]cž úâü'✿ðYÏ‚ðN‚Ÿ þø“à/†þÉàÿÛkãGˆ¦ñøïáÿÇoŒŸ²§í;ûU~Í¿~h§„l—ûGá—ìɪøÿÅß´ý'ã'ƒµ=Åðxêëáw޼6£Å·ÔWóCû0Á[>>ücð¯ìãíöÂÿ‚P~Ôž6ý¥,øMsᵞÛêØ'þ “ñOãgíûNþɵçÇÿïeý ?jm#þ ¿ãÍ oéš?í“ð'öYý >/þÏ4M=u­SÅ~¹ý >xƒá^&ø¥ák/øwÆ>#ð'Ä 3âƒð/Âÿ ¼-qã¿€~ßQ_Ïí+ÿoý¥|ÿþÿ‚røÓösø_ðâgüwþ )û0'íðßà¶¿áŸúŸÃ;­;áìfÿ¶7í0|à߇øÆÞ4ñöÖºÁ_¿î>'xwÅ^#ø…ñ‹Àš¬Þ(ñƒà¿$ÿ£ð~Úßð°<1ÿ±ø¥ð—@û7Ã/ø(—Ä í6t¯'Ç~øYãoø'ßíCûbøOÈ·ðÏŠï|?¢|@·ñÁÿè^"ó5xr-ûÅÚf›ö»ÛÄú`ßôW̱ƿ~ÒŸ±ì‰ûFxëOðþ“ãoß³À/~1Òü'k¨ØøWMñWÅO…>ñ׈tÿ Øë®½«Ùø~ÏW×o-ôk]S\Öu}:;hoµ]Få%¼›éú(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šÿ _ø:;þS¯ûsݳë~Ï´QÿGÊuÿnoû¶oýcÏÙöŠÿO¿ø&Ÿü›¯Äoû?ÿø+þ½7öȯ¿ëàø&Ÿü›¯Äoû?ÿø+þ½7öȯ¿è¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¯˜?b/‚ž*ýšÿbÿÙösñÖ¡áý[Æßf€_ øSáo‰ÿ ´½gYÐlõÍGÀÚ„nl|sâ-;@ðýö |ÿ‚Wüsñׯ_ƒÿ¿oØ~Ï?-¼AñKâ'…>øoÃb?Šž4ƒâ—…~X|CøÕ¢Gãk_‡>øWû½E4?ÿà‡Ÿà‡ÄŸØßâ4¿³†díàÿü7öfý”4ï YüLøÏ⯅¿nÿÚWöMý¥?d?øÿÃÿlôÛoü`ý›|oð—âV·ªj6?ҧѵ |¹ðÇŒxsÀð”ÿÂ9ÿ´ñü#ÿðÂ?ý­ý‰ý½­ÿe}¯ìÚú—ÙþÙ7?£üÿ‚¯|0øSñ—öxýŸ,?b†6ßiÿÚßâOkÿ|røÁñ3⟇¿µí¡ñwö‡¼ñµ·ì}}û xwáß>0|3øwñwQÒ¼'ào~Ô+ðÏVø™ hÚŸŠõÍcÁ2êž¿ýž¢€<özø)á_Ù¯àÀÿÙÏÀº‡ˆ5oüø?ðÓৃµO]i×Þ*Ô¼+ð¯Áz/|=¨xšûGÒ´"óÄšF…gq¬Ýiz§\j2\Íc¥iÖÏœ<À/‚ž*øWñ[öÝñ׈uÞi´§í?á?~·Ñ®µGIð®ƒûþÈŸ³æŸâÈo´­:ÚÇÄxÛàŒuKk]ó^ӟº—†o¥ÕaÕï5MFú~ŠüÀÿ†)ø§ÿ_ÿ‡toü?ÿ…ÛÿÀÿ†)ÿ„§ûWÄð«?áiÿÃ)‹þßþÛÿ„SþßøWÿð–ÿÄÇûWþøHÿáÿKÿ„SûOþ%/ÂÿÛëà'í1û]xÿöðìñïà—íYñágÇK='ãÇ¿³Å?„ÿü1û=ü*ýš<ák«ÿ~Ì¿µ—„¾*ü?ñ„¿gß…>5ð~·ŸÂøcÄz÷ÄkZG‹4ȼ9¯EúE~êŸðHŠ¿gýàïí3ã¿Ùÿ_ñÄÙþ åàŽþ"ð¯Ã¯øƒÀžý©ÿà§µÿìÿûfx[Æ¿¾xÿP»½ñOÃÿÙ‡âo€üauàoøÇ₾"Þk øQã :ËÃ^ Ö5I|Ð~ÂßðM/ÚãàŸÿeŸþÕŸ´‡þ>~Ö6ðQÿŽÿ·ßí§ñoëzï…|K¨üCý‰i_سÀ~øŸþ\é~ðÇ‚|ÿ†$ø³ö€ø{ÿgü-ïÙÒ?øi_²øí¢|;ñwü, øD|ûß@øëÿ¶ø§ñöDÔtO…¿>üÿ‚ƒüý¯ÿm¿Úÿöý«t˜|G©ÿ—ñíûl|ký¢,| ¯_Å¥éZ÷Ãÿ¾#iÿÿik¾ø•ð²ûûNÿWÔþ|m·ø}àË}WöúŠüýšÿàSdzιû[üUø§xKö@ÿ‚`~É?°GÀÏ þÈß·ícð{G×i6ø»á»_éß <3ð£Ð?coø&ÇÆÏÙ“Áß²ßÁMß³ÿ‡~þÅðSÿÛö„ý<3à|]×üG§~ÿ~þÛžøEà?ë?4[ëß~Ðø›û]ÿgø‘µbð’ü,ðÍ•×ü'~0ñÕ…õÏ‹¿o¨ ÊØ‹Á?ðROÙ¯àì‰û.xëöxýˆ5oüø?ð àŒ~+xOöëøó}â­K¿ üá?‡ž!ø…ៅzÇüƒAÒ/ÿ¢¾ÿ…ÿMÿ£7ý€?ñeŸ´WÿJvøXßðTßú3ØÿYûEô§hïú+àøXßðTßú3ØÿYûEô§hÿ…ÿMÿ£7ý€?ñeŸ´WÿJv€>ÿ¢¾ÿ…ÿMÿ£7ý€?ñeŸ´WÿJvøXßðTßú3ØÿYûEô§hïú+àøXßðTßú3ØÿYûEô§hÿ…ÿMÿ£7ý€?ñeŸ´WÿJv€>ÿ¢¾ÿ…ÿMÿ£7ý€?ñeŸ´WÿJvøXßðTßú3ØÿYûEô§hïú+àøXßðTßú3ØÿYûEô§hÿ…ÿMÿ£7ý€?ñeŸ´WÿJv€>ÿ¢¾ÿ…ÿMÿ£7ý€?ñeŸ´WÿJvøXßðTßú3ØÿYûEô§hïú+àøXßðTßú3ØÿYûEô§hÿ…ÿMÿ£7ý€?ñeŸ´WÿJv€>ÿ¢¾ÿ…ÿMÿ£7ý€?ñeŸ´WÿJvøXßðTßú3ØÿYûEô§hïú+àøXßðTßú3ØÿYûEô§hÿ…ÿMÿ£7ý€?ñeŸ´WÿJv€>ÿ¢¾ÿ…ÿMÿ£7ý€?ñeŸ´WÿJvøXßðTßú3ØÿYûEô§hïú+àøXßðTßú3ØÿYûEô§hÿ…ÿMÿ£7ý€?ñeŸ´WÿJv€>ÿ¢¾ÿ…ÿMÿ£7ý€?ñeŸ´WÿJvøXßðTßú3ØÿYûEô§hïú+àøXßðTßú3ØÿYûEô§hÿ…ÿMÿ£7ý€?ñeŸ´WÿJv€>ÿ¢¾ÿ…ÿMÿ£7ý€?ñeŸ´WÿJvøXßðTßú3ØÿYûEô§hïú+àøXßðTßú3ØÿYûEô§hÿ…ÿMÿ£7ý€?ñeŸ´WÿJv€>ÿ¢¾ÿ…ÿMÿ£7ý€?ñeŸ´WÿJvøXßðTßú3ØÿYûEô§hïú+àøXßðTßú3ØÿYûEô§hÿ…ÿMÿ£7ý€?ñeŸ´WÿJv€>ÿ¢¾ÿ…ÿMÿ£7ý€?ñeŸ´WÿJvøXßðTßú3ØÿYûEô§hïú+àøXßðTßú3ØÿYûEô§hÿ…ÿMÿ£7ý€?ñeŸ´WÿJv€>ÿ¢¾ÿ…ÿMÿ£7ý€?ñeŸ´WÿJvøXßðTßú3ØÿYûEô§hïú+àøXßðTßú3ØÿYûEô§hÿ…ÿMÿ£7ý€?ñeŸ´WÿJv€?ÌþŽÿ”ëþÜß÷lßúÇŸ³íûýÿGÿƒd?à©¿ðRÛ³ãŸí­ÿ _ìð_þGü+/ø¶ŸðÑ?´WÄoøF¿á]|ø}ð›þG/øbll ý¿ÿ"¦•ýŸý«ý•þöí+€?ÿÙwebmagick-2.02.orig/doc/fig/thumbnail-anatomy-plain.jpg0100644000175000017500000015042307306037341022730 0ustar arafunearafuneÿØÿàJFIFPPÿÛCÿÛCÿÀjV"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?þŽ¿b_ø'·ì ñÇá‡Æ?Š_ÿaïÙãÄß~ßÿðTÿøI¾"üRýš~ ü@ñ߈¿±?িµÇ‡toíßx³ÁZ¿ˆ5ìéV…¦hj`ÑôÍ?Lµò¬¬­ ‹ëÿøtïüËþ‘§ûâþοüîhÿ‚iÿɺüFÿ³ÿÿ‚±ëÓlŠûþ€>ÿ‡NÿÁ,¿é°þ!¿ìëÿÎæøtïüËþ‘§ûâþοüîkïú(àøtïüËþ‘§ûâþοüîhÿ‡NÿÁ,¿é°þ!¿ìëÿÎæ¾ÿ¢€>ÿ‡NÿÁ,¿é°þ!¿ìëÿÎæøtïüËþ‘§ûâþοüîkïú(àøtïüËþ‘§ûâþοüîhÿ‡NÿÁ,¿é°þ!¿ìëÿÎæ¾ÿ¢€>ÿ‡NÿÁ,¿é°þ!¿ìëÿÎæøtïüËþ‘§ûâþοüîkïú(àøtïüËþ‘§ûâþοüîhÿ‡NÿÁ,¿é°þ!¿ìëÿÎæ¾ÿ¢€>ÿ‡NÿÁ,¿é°þ!¿ìëÿÎæøtïüËþ‘§ûâþοüîkïú(àøtïüËþ‘§ûâþοüîhÿ‡NÿÁ,¿é°þ!¿ìëÿÎæ¾ÿ¢€>ÿ‡NÿÁ,¿é°þ!¿ìëÿÎæøtïüËþ‘§ûâþοüîkïú(àøtïüËþ‘§ûâþοüîhÿ‡NÿÁ,¿é°þ!¿ìëÿÎæ¾ÿ¢€>ÿ‡NÿÁ,¿é°þ!¿ìëÿÎæøtïüËþ‘§ûâþοüîkïú(àøtïüËþ‘§ûâþοüîhÿ‡NÿÁ,¿é°þ!¿ìëÿÎæ¾ÿ¢€>ÿ‡NÿÁ,¿é°þ!¿ìëÿÎæøtïüËþ‘§ûâþοüîkïú(àøtïüËþ‘§ûâþοüîhÿ‡NÿÁ,¿é°þ!¿ìëÿÎæ¾ÿ¢€>ÿ‡NÿÁ,¿é°þ!¿ìëÿÎæøtïüËþ‘§ûâþοüîkïú(àøtïüËþ‘§ûâþοüîhÿ‡NÿÁ,¿é°þ!¿ìëÿÎæ¾ÿ¢€>ÿ‡NÿÁ,¿é°þ!¿ìëÿÎæøtïüËþ‘§ûâþοüîkïú(àøtïüËþ‘§ûâþοüîhÿ‡NÿÁ,¿é°þ!¿ìëÿÎæ¾ÿ¢€>ÿ‡NÿÁ,¿é°þ!¿ìëÿÎæøtïüËþ‘§ûâþοüîkïú(àøtïüËþ‘§ûâþοüîhÿ‡NÿÁ,¿é°þ!¿ìëÿÎæ¾ÿ¢€?Œ/ø:á?ÂÏø&¿ì ð‹ã§ü£á§ÃÿØãoŠÿkÿü'ñOÆ/اÁ¾ý•þ)ø—áf»ð_ãÿŒ5¿†šÿÄ/zo<[¬|?Ö<[àOø§Uðn£«ÜøsPñƒ|+­Ýé³j~Ò.¬Êôø=[þQeðþÏÿágþ³¯íUE~ÿÁ4ÿäÝ~#ÙÿÿÁX¿õé¿¶E}ÿ_Á4ÿäÝ~#ÙÿÿÁX¿õé¿¶E}ÿ@Q@Q@Q@Q@Q@Q@~`xÇÿ·×‡ÿo¯ƒ³ÿü.ïÙïà—Å¿‡ÿ´·í ö?øcŸÿü?ð³öwøÑû'x+þ'ü'ÿðÞSxKUøã ~ÔWü.oøU:o‡ xºÚcö_ý¯hÍâOɼûEü\ñ·‡¾êöß°¯ÇÝ/ÃúÄû=ã.‰>¥ðÆÇÅž †=oÄ:ç‡zÁbþsá‹<û&~×ÿ|?ñƒöý¿hKMCÀ~ÉÚ'ü!:?ü·âŸˆ~ ~ɾñ­¯ÅïÚÃámë|@ñÄß ÞøgÄkà«oxÁ?h³Ö|Iã»/½Æ«mïú×üÿö,Ö4…Z5¿Ã¯ˆÿ…ðÿàÂß„Þ ø[ûI~Ó¿¼wàO~Ëþý ¾üд/ˆÿ ¾1ø7â?ðŠ|?ýª>?xOSÔæñ4ÚÇŽôˆÚ…·Ä-CÅÙ^m ‡ö6ý‰~iß >ÉàïøRÚþÆ_~xoYø§ã‹]GÄ:wü‡Å^:ý©d_‡¾MgÇGWñ‡ˆ> jú7ÄOŠ÷0ÛÉ«ø«Ç>ð牮>+ÜxÓÁ>¼µÓÀ> ý’à±w_´ŽÿiEñÿì™û@|$ø%ð“öÿÓÿ`­7ãˆ"ýœn4…ÿn4Ùçá< ~:èžý¬>)üHñÄþØÿõO‡ñ×À†>8ø'iàO|$ñŠ|c¢iš'Å¿xgöú¿8>Á$ÿ`/„Ÿ~'~Ó¾ øƒAø­ñ«ãü~ø¾døóûEë? þ'üe³ñ§ˆ>$økâ~ëÿµO>*ñÃω>'Õ¾#ü$›ZøoyÁ߈GMñÇÂËø§Aеm7ô~€ (¢€ (¢€>ÿ‚’|Pý©ÿgÿÙcãoí/û4xóöðçü3gìÿñÿã§|ñÓà'Ä_Œ_ð´?áV|:¼ñÿ†ü-áoøöšýŸÿáWý¯þ{IÖõ½[Aø§ö¿íÝ"þÃHÒÿá¼³ñ7€j¿··ÇoÙ»ö?³í+ðëþï‡íþþÀÛÿ´gì»ðÇÁßü ð÷âŸíçûiþÓŸ²§?áe|1øåûgxßâm·Ãû›ßüÑô¿øTQünñ¬Y|\ñ¿‹ÿ±!ñÿ| ýµâßÃ.ojßð“xÇNûü1wÇo~Òÿ³Gú“â 2×þ¯ÆßøÆ¿èVVÿð˜ÿhÿÂ9ãÿøJ¼%ga Ú€|~¿ðUŸ‚zÂ-âß„þ~Ð6ÿ„«öÿ‚l~Оø{¡i?´ïø«Gÿ‚©|lñGÀÙ›Àz|Þ1øËá_‡úwÄ ;â…ncø¤¾&ñîƒàO èúŽ™©hÞ;ñVu};äÿÁo¼[sñÛö.ø)ðßþ çû_¿ˆ?i¿ÚöÇø['†|e{û¯ˆüm£þÂþøáá?ÚCBøO¬èÿ·Úø3Ã>þѾø§êZŸÅíW@ð'¾ißî¾j.ñß‚.n~ÿøCÿ¿ý‹>xrïÂ~øuñü?qÿ ›¦ŸãÿÚKöøÁÿîû üS¸ø×û&øGÁW_¾1øæ÷À_þ üM¼½ñ7‡>x*ç@ð%ÿÛotoøw[ðýÝÆ•/?ñÃþ 'û~Ñsü¾ø¯ðWÄ–¯û=|`øíñûàŸˆ¼'ñçö‹ø[⯆ßiOŒ±~Ðþ!xgÅ þ-x/Ä–¾ ñÆH-üu£M&©4Ôm­¬þÛøSH·‡NŒëÿü+ûAü3Òþ&øKOñ‡m?ˆ<àoøWÅ–ºu¯Š¼ñ3áÄ/ü"ø¿ðÛÄÇBÕ|CámCÄ >+xÆ~ÖuÏø£Æ?|E¨ørç^øyãox'RÐ|Rø‹ðãá&™>·ð'ľ ~ξ.×~|HÓ-üE§øƒú>¢€?š~Ì¿ðToøBðÄ-öŸø[ãkß|ð‡íÕã?ø(_‰¼Qá_Ú³ÅZ/ü/öDÖ¾°ø“á}wö…Ôký2o‰3ø³ô=ÿñgŠ´¿ÙÅ_ >ø›ÄøÉûRøƒÁß²'ÂxYÔtωžñWíâ O†¾%øïðÚÃ@¹±ñO‰¼Aû%ü)Ö>#~Ø:æ…á}SúŠü=øãmvÿÆÿ ü7¢k¿¼'öý=kÁ؃ZøÉñ{àÿüMƒâw‹>iÚ—Š®~>þÞŸµÇ‡¾5~Á?üMãIþj^)›Ä³_›ø;YñêK©øÓàæ£®\ø{àÌ~1ðÞ¥¨j«ý/Q@DZÿ~ý¶¾ hŸþ?é¿ ¿b†Þ)Ÿö`×|­ü'ý’~øÇ ~&øƒ\ý®?bo~/øWâÙ×àü×ö øíã_؃Ä_ ¿g‹Ÿ þ1ü!ñçíû~þÔ ýž>"ë¿>øSö‡ø­®xÁ_¾@×ÿàƒŸµÇíµãOÚ{öøKðsö`ý”~üpðÿÆ?…¿b_éšßÂOƒ_|Aâ?€_²GÛßÚ»áÃßÚGþ gâ/ˆž ñÄψŸ¼y£|T·ÓcÏø'ßíA4ÿ ¼ã?„´Ö½ðÛÆžø­ÿ_¿°‡‹ñ—ü^_ø(ïÂOûï ~Äß³þ¥ûQëÚN¥ÿÿ?ã·íeª|Kýš?fø6ÿIß©ëŸð€üøQÿ ðWÄ¿ øª÷Gðtð½~øLð÷Äév÷Á¯¿ëàø'_üW >*~ÖRÍöþÐ8ý¨ü1-Ÿú?‡5?ðŽx#öý޼sáÍóÍñ/†?ál~Ä¿?fÿ‹Þ5ðÏîÿá1Ñþ)ø÷ÇöúLJ¾£ü)ð'ßôQEQEQEWÀðQ¿ø¸ü3ûAþ{ÿø{ûßk³~æ×Âÿ )ÿÁ?¼a¡x»Ãþ-ø•ñ›áî€÷ýQ@Q@Q@Q@Q@Q@Q@Q@Èü­ÿ(²øÿgÿð³ÿY×öª¢ø=[þQeðþÏÿágþ³¯íUE~ÿÁ4ÿäÝ~#ÙÿÿÁX¿õé¿¶E}ÿ_Á4ÿäÝ~#ÙÿÿÁX¿õé¿¶E}ÿ@Q@Q@Q@Q@Q@Q@|AÿñgŠ´¿ÙÅ_ >ø›ÄøÉûRøƒÁß²'ÂxYÔtωžñWíâ O†¾%øïðÚÃ@¹±ñO‰¼Aû%ü)Ö>#~Ø:æ…á}SúŠü=øãmvÿÆÿ ü7¢k¿¼'öý0_ à± ?nïø.oƒ¿`íàíÖ_°ŸÄÛÖÂçÅ1è^Ö< ¦üvø]à¯ü ðŸí/ã}oÃ> ‹ÄþéžñGíãû6húˆ[Äžñ.±ñëöoñfµ¤ÿÂÍñ~¤~ÏÀÒï„ü'á_xWÃ>ð/†|?à¿ø/Ãú7„üàï èÚw‡<+á? øsN¶Ñü=០ø{G¶³Ò4èZEž—£hÚ]®¥éÖ¶Ö66Ð[AKÐQEQEQEQExíGñÓþÃàOŽ~,Yx[þïéßðŒø?áOÃOí¿øEálüvø¯ã|&ýŸþÿÂe.‘®éžÿ…½ñ·Æþøiÿ Äzkø;Àð•Âeã[­;ÂZµ©Z²¯À¿øfÙÇà¿À«ŸÿÂÀñÇú‰ãÏŠSèŸðë¾)Ëj5?‹<]§É«øŠö_ˆ~&ßø³âßÄ]_Yñ/Šß<1ßôQEQEQEQEQEQEQEQEüÁêßò‹/€öÿ ?õjª(ÿƒÕ¿å_ÿìÿþë:þÕTPï÷üOþM×â7ýŸÿü‹ÿ^›ûdWßõðüOþM×â7ýŸÿü‹ÿ^›ûdWßôQEQEWÆŸ·ŠË¯„¿à¡ 3üð †S42çlnáñªª²HB¸óLl;겂ÀQø£³ÕokoæšûÕŸ]5ó]m׿ô»è~jŸ_NýŸþ) ²’û¼{â²”¶|¼jLÞVÕܪ#‘ž(‡,èX>3|hÀÙñoâr0Oùmãß2ð«³'ûH!gù|ÖBܬ‹n¥Œ²,†;èÃ;]´ÂWŒ¡–%+R>ð Æ>P^?-PÂË+È!7Èá äݽÌRÏ´å#,bMî7ǽY²©Í“k.–J÷Û^ŸÊÚµµêÞ©íf×KYmnÿfû_U­ºjôm€Ÿ¾6¬¯»â÷ÄçL2*·üX¼c+¿: çb„3CÌrä¸oÞÕø\ß"&øÃñ=¤<²·¼XdòÔ9Âíbáþ_œª³¶\ Š$x÷–ˆ› # ¬§1D1°#®â\á"Œœ’ f˜Äs´n<ä UŽrÒ”HÑ •ÔHWãê±B¥c •ôjí+ÙnšqNïVÞGetÕïªK奶oû¯WkµÝ_ucÓ$øéñ~DüXø¢Ó¸1›ÇÞ+‘ù`£V ÍEr¼1¢Í˜ƒ¥øÙñ}dH¿áoüO Î cÇÞ+/´/—ˆÙuù Œ$FVrûö‘+[™yßøz|Dð^~÷zf¿â¿h7“Ù†dXÖì´r ¦Îùr%º‰͉có"G ËúŸÿ ðhœ|De)·iÔ|Ãåv$‰‚ÍÆWvÕS+FŠ‘.ÜD€D§hÒ»¶–M5î§«»ÓU»¾®É;4åËåª}ÞŠ=õÚÚ_Íh~jËñ¿ã…ü\øšñ€¸ñçŠdv ]J+IԷ˶4+M&ѹ™%I5a¯ØöoÙ'ãíqûM\ø™/¿hÚ×öˆøçãýOâ…õØx¿Aø9ñâ=÷ü-ð®_^êÞê }w ¯>!\év÷®ôÍ3UŸÆv_ ¼â·þ”ü÷ູøH¾%œçlÛ^Fžüq'ƒÕP¸A0_53HïdþÁ?[ïø‹âSzgWðØ*HÁ*ÃÁáÐáˆÈl€ÏÎw*­7ÒI]4­w{Fî÷×^é;»lô\ËÎÚifÝýÕu­¯Mm­õ˜­ñ«ã%’Ç Ÿ¾*´?¾•¥—â'Фžeó¤q?öÓH ÊJ!†F¹ÆŒ’WâÿÄ餒A³Çž,1„,R4¹U.ÌA³ ÀÄB‚âC'éK~À?$!Ÿ_øŒàeVÕ|0ÁZB¤°Vðy r2HQÎIäÈ^X¿`ƒQ³×¾#‚à†ÿ‰¯†Ðç’WÁèXŒð ãA`EVž›¥uwÉ¢µ·IÚéô»¿WÜæVº½´Ú6JܽomÖÖ³ßG¿æš|\øÎ&k™~1üQ%Õâ¯Äˆ6±RŒc]XF’¨^dòͰˆÕ÷Ö´øËñ–1$²üdøžËæÆŠ$ñ÷Šä–R¨¿Û \`DìC òË+yoúrÿ°gÁÖÿÄt·b=gÃ݉8#þ3Ÿ—ä窀§væVOØàÈTó5ÿˆm r dYõ_ ˜öÆ‹3ÿÂ$…%æfmá[ýp`ý¥6ì¯f׽ȓKDôÖÚZï]¼ì Ií{ï{=>oÕ»´žÖMßósþgƪGÅ¿‰ÿ(ËÊ|}â}r0ÝLÆÌãËv88Y¤f·«{ñ§ã%Ì,-~.|Q ãlÄ[´0ÎfIµO–ùTMì[H©cœ×±þѺ—ü›öOñï†ß?h/ø'ǵ¿ø{Âþ:†©jqâ[è4'Z¿±Ó¼¨K¢hrë3G¤=ôòZZ5Þ£o ÙÜ´Ñ\Gör~Á?÷:ÿÄ,]¤X5ˆ¤,ÃnÝþy.ŒaÊe‘Àßµ–œ¡[¶ÖvvJé´•µÛNî¯'MÙ]¶•üÿ»²º»ÓM;ÛEù§|^øÖ¶ò¬Ÿ>+ìPÉÜüFñ|“†e;äÖe‘dÆé7³@nDµõ¿Úâ7ƒ¼?¬ø³Å_ ø£¯hú‰ i6j𶻫j𖻆—£é6“ßj:ž£wigca åõÜðZDdOÔy?`σÌWÿÄh•TXuŸ(]¥XaO„ÙF6(À`mÁ`ÿË÷ü¿ã%ÿÁ_ø(·ìñÿ¤øsû7|aý¦4_ÚÇñ×ÅIáøiã Añ2_Y~Öÿ$ý«~k¾ñG†4ï†þ|Kýž~ ÞøoT·ñ×þ ü:ð?‡µO‰~%øßã?|*½Ôtß O´§Ó™õÙ%gk«Þ÷Öï^ýmt¤ºz½÷[WÑÚú½ŸK]]ýUû xû㥧›ϋ^/ñŸÅÿ |Zý¨|MíñƒEÕüIãOø‹Ã¾*ñ§ƒü)á¿ü6ñ^ž÷Zqm{àOÁ?ü(ýžõ/ øZ÷ÅkðžxƒÃš?Œ5ÝzõRügøÊw•ø±ñKý\¬x÷Åe¹A_í·Ìʃ þX¡‘Ç—é"~À¿Ñ¥câ‰ì&rY³á` ° ”0ø1W`(2ÿ*“Œ6`¿ƒàÿÈÉñ+¹çXðس'-áAÜrp¸S!{JvÞVnÿ ì•·÷¬Ûz´®ÝÚ’KKô³¶ºrîï»ëf­{zþg'Æa‹‹¿Ø9òÆ|}â°ƒ—p5–ÚA‰£i%Ë#²†Y„Ïÿ…Íñ‚4*ßþ'ÈpEoˆ~+I*6:ÀÃï ½‹m!¤$  _¥Çö ø=´ ñÄ aƵá¼Ù'k’¿xã`£ Ø àæíïâ?‰Èdó’jÞ‘•ƒwø=•ÕòË(W1„]ઽ¬.¯y$×N[»§º»åZ§Õ¤®•—ñZl>[ÿmn:"¶òå"@ðI"z×íqðwáÇìñyðâ +Äz_'Œ!1øÃW²–[«„03EÒä–r52Œ’Í%¨7AÞÙÝÔ/ËòÀ#0$S—`ÆGX¥F‹hØ|Æ)#È2«gÆ×f$™‘i¤Õ¬Ö¯E·.Žñ^k­õkF‹Mî´Ù«¯ð÷×T»í{=R=*_ßÓjÅñoâsF çÇ~*iK©Œ©8+²Qå—’ÑÌ’ÚOŒÿÝ"+ñcâ•/îö·|T%ÿU!,’ÿl)=вoÜW~Y\<~CöAó6]»ÙBÌ^oõ«(³¶XÐ óÊ1dYaæTYoÈ$aò•gYr¾a*È7̨å¾FÆâªv¨VŠ9öµÁ95§NTžßi}•«Öþõ·³M´ô`·µý®öåWèÚ¿—3ê¯«îÆŸŒ6qÅø»ñ_Ëa1vŸâ'Šå¹qû´ ɬ3ed;,NÌdÄø“Ò¾ü]ø­ªüWøWa©|Sø¨éÚ—ÄÙ]i×>7ñ5Í•æŸuâ*;« NÖãSšÞî)à2Esmuº;‹ifFGåœÞ20Waµ<ÆŽ7Ë–a0F\E²ð¦6II3ÈùoTø'n?ápü%x|Ž~&x Y6/ü%Znâ¬UL V8ˆ .<Çc"VV[èÓ²Z5ÑtÖöÝ?š´l;¦ã¦»Z7Õé{Y¯¿á³?¡j(¢°¢Š(¢Š(¢Š(ùÿƒÕ¿å_ÿìÿþë:þÕTQÿ«Ê,¾ÿÙÿü,ÿÖuýª¨ ßïø&Ÿü›¯Äoû?ÿø+þ½7öȯ¿ëàø&Ÿü›¯Äoû?ÿø+þ½7öȯ¿è¢Š(¢Š(¯„à¡ò|ðŠG´“ñWD ¬ÛU“þnV8o•‡ 0r¹p~¿à øÿ…;áÃ$¿ñut?¸p"?ð‰øßIÁ&48ã»”É$8î½}~V³¿¥µ þõÒý|¿¥¹ù p‚9h€õwÁÌqmÊÂ2Ïð Æ!Ê£„}²³\Á·qp7dº³Hn_,‰J4Nø s;%@ pù¦Xãi Ý,Ñ ÛI@ÒG*+FÏ1G8‘T+©˜£Í ± 0@ѹÈ8V;2%v‰ˆVpvíŠ|°ŽâŽTF;ßmmæíª|º½4ëÚQÕ蓺ÞÛkk»tn:õ۷ž©+–äžì@1,².Ð|À‹¸y`ÊJylÇË}­» $$áÉ$¹{O:â)ĬÊ) !Vù‰T^Q7:?ɸÌdŽGd±¼ùdȪC*ì&5a½ãʼ±°HÑ&$e(9nIT Æñœ,k“•o—j£Eæ®]V7Z®UFÙ±oÈR#¼=õÑ««Ù;+r»7¦¿‡]ž­t·êöåvvÓï½ÒZ«Ùú—Á…â÷¨Π/į(Ø>-°–Ý‚: B“E‘3,Š­¼mæ#JßÐ?N•üúü,>1|&*â_‚F BÉâK ½ÖB¤*2 GËÞŒ–ÎAUÉ[u×O^ÞŸ–›+¤›Î§Ùþ»wÿ†í¥‚ŠB@ÆHä9äà…XàÎ=ª,ÈgæS¸‡Tر‰çÜÄüÄLc°ÇÍ’‹~]¯×Ó§ëÙ2[òí~¾?^É“QQH˰³:¬[ »†`|¼d²º2”Þ`c´vçpø{Å¿ðQÙOúώ4]âe·Ä{ï…þñ‡>&ß|,³Ô>"xSáΕàÝ"mSQ±ñ¿Œ|)£áOx†êâ;m+Mð½î¡7Œ.ﯢh´ìÛmRÿLj þ^Kmߣ»Jíz» A¿¾Úì¶Ýú;»^ÝugÛ×.5$|Å۴˸‘–8Hs$ÛQZCVY ɶ=ò'å§ÇÛ[VøŸâÝoöoýˆ<}à=gâw†íΣñ×öˆ¿6~"ø?û,xiSÝÞx§R×$±¿ðoˆ¾&\Û¹—Ãþ–McÃZ3Øj³xîK{7Òïÿu/ÚCþ ûlkŸþ!~×uÿÙ×öñíOðïà_‡e!ÄO…ß¿io |UmzmÅ>=×4ÿ§Ž5‹O *ÏS»ðW†ä³ðî­¢Oq¨k> ¸M,Mký#'dŸÙRo ü2ºñgÀÙÿWñr[GáÞx‡À ï|J,m®l¬åÒ´iC»Ôlbk Û(5Oìÿ*[ÔšÒ^ÞšÒåK«Ýz;]ÁÛÏRÒi%»{[Ï–ëïëµõ¾ºþ>|ý?fÚã.—ð£à>¯¦ükø=ðWâñ÷öÉý§uHñ¯ŽjÿÚO~§ðÇÁú¯ô»;›/i~Õ¤_x’? ßiß ´§¹·Ðt Ââ[—¶þƒuVÃEÓ/u­OQ´Òt*ÞúûUÕõ­¬ô½+M°·žâÿQÕ®¯'´ŠÏM²Š ¦»½3Å´H.î¦K(n&_ÎoÚ3öMømðïÃÿÿiÙ¢ÃXøñÛBÒ5Ǭüðþ¦tï‹:æ“kbÚ>‰ñSá'„ã:Äïëz•Ž»uw᫽ZßFšûV³×4˸“R‹òßöªý¥|?ேÿ ~4Á`nu /MøŸmðwþ ·ðg_¸¾±ñ¥§A³ªüJøÃáëûß Ëñ"m!`]V?†šäþ ð¯„JZø_PÒ¾$ø›Z²‡J{êžÚÛ}ù]µv»ïÓEnª·³éÛ®¼²¶½÷Oe{%Õ@_?i_€¿´µ‰uïÙûã/Ãð–½uá?êÿ ¼c¡xÃKѼGd#–M:[ý ëQ¶¹i£–GMB+ÖÓ.ã?²^õRòâ?ž¾Á?| àø(í;ÿñ/ÄüIøÙñÛÀøðãFñ·¬Gà_ÙÇörðw†~Üøƒá'ï 6·¦]ÂÉøÙàígãg‹µû›K [Mc^ƒL🆼9©Ý|NñgÅŸ"ÿ‚E|¾øKû=x«â¿‹>iß>%þÖÿüMûEøÇÂö>µð¤žÑüX-#øoá ¿é’\é:EÆàˆ´ç¹Ó,nç‹N¿Ô¯¬UÕíæ±ÓV«9hÚ]’o»ï÷îe-K²M÷}þýŠ(©$) 0@ ä@ ‚#Ô¨$RÑéõô'±ü¾§ŽÝH Â/ø-%Åݾ½û'¾žbäünK30P˜·Áö%ò¬0‘,’.HùÑHÉ›Ò+‚–°Ëv¶³ZEgF¯mq$º}«²ªF ùqÊJ™ †C1M¡Ñþƒÿ‚×ÛEwâÙ&n¥´_ø¿. ¯†e±øWå…Ù´’ ¼ÀîÊ´*cV“¾~Òm͸…f¸šd2ˆd•šGXC¢,qäž,VÅC"¬QðñÇ 5vR_»Z¤÷Óuï-t}5Õ¯E$ÑÑþíJûo¢ÓÞ‹]/½·i]­Þå­µÊC3ÝHd”°¬\Å»€Ž–áŒ@’Û£W!ÙÁP¬Ëf0ÐÝØ»#Jìcfíøráy;ßc«¬.çZd²´jL²fHÛ(å`]’ç–/嫸8•äIsF\Ds.óy¬†à˜K0HNâg ØšD? e Ë!‹nù÷4&O›ËÓÏ[;i¶ü¼Ë«VÑ¥«Õ»¤¥v•ÚIhÚZôø|¬öÒúëºJÒƒ4,ó3 F>Ù£PðåNÇ-ÄJæg刅ØÈòJ¾d~ƒðZ ɾ4| A5ºCÅO‡“04®±xÃBf@${vpuÂ~ò5ÁÀY!ðQ £ŒK$“tù`t@Ï"<’!l‡r’)Ý剑¢¡ô¯‚÷/ŒŸ"ž#$ñOáâ*…VØ_ÅZthÍÅÌL¨­Éç>d»ÜŒvI¿ºû½•“²ÒîÉkv¬ïøZziníkËu{´÷×[饓þ‰(¢ŠçQEQEQEüÁêßò‹/€öÿ ?õjª(ÿƒÕ¿å_ÿìÿþë:þÕTPï÷üOþM×â7ýŸÿü‹ÿ^›ûdWßõðüOþM×â7ýŸÿü‹ÿ^›ûdWßôQEQEWŸðPiÌü-ÇË7Å í»# xÔ–Ýü8e^r`A ×Ýuð·ügàφG̓ñ;E g*|-ã=ņÇʪåöã÷…DD0}Pø¢»´´óÞ«ÏüÏȨ Ihö³a£EVu¬…ÈŒ<Ý»°ûˆ°)ƒĨ"a¹A¤`2B3r$IåùHÀªC“,ð¸B⌺,A ]lÙ+hrg2ˆ%VâfaåºÅçf7Ú®¢1©*Ë U¼ÂÝ7½’»I´›Iê÷åi%dõÑÞé3¯Ëµ´¼o÷i­ºk«³õO‚±ËÆo…/,ŠAø…àuCÌðƹãê¢ÚkÆÓü?áÍ2ëVÕnc³¶ÿJ»™m-$K{kPÓËpñ*#ä©ü,ø%)?>£Ãä·ü,²|ª¹Tñ&–¤)DEq1ªÉ´ &6‘þ¹ÿ‚»F/þüðÞ·{-—Âï~Ü_²/‚þ8’̺uïÂOüT°ÓuÝ3]á­ŸCÔ5™|;k¨C¨£é÷ ,p\#‰N“æ§vµZÛef–Žîí;éwè¶Rþ(^ÛëåªÚ÷»ëªÕý›hp?  ý·à¡:<_Ð-£u‘e»]ÂÚtw35”Ë ò[?¨6¶V–pÁ­¬°ÛÇPÃ,qDÁ´*ˆTyVÑGo) ˆÆ €ª 0U ø.ÀX€X–Ààg8+.{l­¥´ªÑ¾¼Í6ôõ'žÛ+imê´o¯3M½=OÈ߉ŸðGÿ„_ãð¾ƒ/í7ûqXü2Ò"xKGñ†™áψž»ðg4KzÕ/¬ôÏøRöIçÑõ›;Yb†úÝ®gE¸Y<§1hMÚúÙ;%²Ò×»ÑuVI|šnâo–ýÓeµ¯w§ueø;»ü©ð{ö “Á~1ð—Ž~3ü~ø½ûPj¿ ž×à͇ÅK?iÃ7þ˲Ñ×_´ð÷€|3áÝ'ÅÞ­Û{]tº·KÛ[5uf“½Þ©œþ[Úþv·KÛ£WI;;ÝêŽcþÓ¼%á?øS@I‹ám MÐt¨îfºº¸m3HÓ!±ÓwÞŸ6ââóe½´³jEyq$Ë+˜Úi|ÔþN¾2þÄÚ§Åßø/OÁ½öœÔõ?Œ:ˆ4Oü[еMCÀ—žøueào‡×:ߌ<+ðJµñ>£­ÇaªÜØI¯¶…¨ê¾ó­æ}J 'Pû5”ÿ×`Š0»V8Õ|Ã)QíóS;¾˜Ó1~XÊL‡.s_“ÿuoø+ïì'¢[Í5¼žýœ?j_"Hæ Ë]pxcÁ–°Kñ‘/nä»K–Ûtoü¶fR.þ¶{|­òn÷K¾Í„]ü´×Îܶù9tIï³zŸ«ñ…Ve,@^C‘óšWdãåÂlÇ9òÆz ËQ¢ª–Â*– “¹™²Hã%‹»rÎ[;™²Ë™á·…¦¸•a‰J«Hî#¤ahr“$²:E ©.óÖÒ×zyÑ_¶ÏüƒáìOão€ ¼U øÇâÅ_Ú#ŧKð—‚ü `.nôésÛ¯Š>$x¢Yæ)¤x7ÂñËö­È.]>Ù9"‚v¿àœ?·êÿÁC|%ñŸâŸ†¾x—À¿|!ñÄ?þ øÿ]¸bøßàÍâæ~ hZsªÏccq$H¸òä{‘l…šÅÉ9ZMéßÎÚYú;ïÝ4ìÕ¤Þüí¥Ÿ£¾ýÓNÌý ¤=:àúú{sùséÍ-!è~‡ß·Ðÿ#ô=)Guê¿1Guê¿3ðwþ K´ø§öDQä?ð¾Å´sG‘I9²øSÇ?/îD«»Ç´̵áÄáv´±ÄÆGóÒL”.Ó:ÇQ³ Iûôíóå¯sÿ‚Ô\5§ŠÿcÛ•¶bŽÅà‘<ÈLrZ|(…ÚDÃ*%ùUƒ. ±_—rx41AåB%’âcFaròÎòyö–sÊ!ÙãFw‰Ë|¸Œf@í×KXAt»Û‰twM­öNî)è’5ޱŠÓfµz|Jú=:ôùò¯ŠÙ” ˆÿvÅKY2Ò!#TÚI1©$…Hf*–º\‘Fû§+» +`ä€ÌÈtgÛ”Ž<ÂgR%f@Š#Á{y"b¡‚Iƒ4Æ6e>[FÊÂå•Á v¸Y1^¼Wª÷ qܰ æÜH$X­PÊØ†;,jdòÉ`©S ³E²³wåKFµZ-ÛÓGݨökE¢NÎIÛk¾¿ei}S³ÒëE¦©;Y0¨•¤‘ÎÍŠÒÅæå·"+,D`Hß°ƒ:¬oj¬Ìñ@ø- ÂíøG$“ÈÇþ€ˆ(OøJtpŠÌ²[pòp¨T˜¦ ª‘€Ža¸n—Ëe\²«±Œd4ÛÃJ¢BШ,ÇÏi. n… zwÁÉPüføC$qÉ!ÿ…£ðúckhš0þ)Ó~i’öh‹CWOôwž÷yx¡ƒ+"“]ÚM+]¾öIvJÖÑ6íuhì‰ÝëgªõoEÒß$ÛÞ÷½èrŠ(®p (¢€ (¢€ (¢€?/ø=[þQeðþÏÿágþ³¯íUEðz·ü¢ËàýŸÿÂÏýg_ÚªŠýþÿ‚iÿɺüFÿ³ÿÿ‚±ëÓlŠûþ¾ÿ‚iÿɺüFÿ³ÿÿ‚±ëÓlŠûþ€ (¢€ (¢€ øKþ ì¿ü(£`I>)è‹3¶s+á?J΄•ÃF 9*3>õÛ¸}Û_ÁCmžóà·…íÕüµŠ:'šã–!á_–ØN ³&T«ÇæQ–;¯Uù‡¡ù ÚMn[r¨uD>[¤F1æ„wÙ¹DQÍ—hãp%f äû&Ã3†e¤œ•Œ3¬hdffΉ,x!I,ûü×,PÁnÛnH-<ÈP7Þ9‰•ÛåeùˆŒ¶ùX£Fd-‹p üß0/tä1U\G!K¸DŒ„#]":×F¯{õ]o•“V²ÑZNÉÅ$ía-–•¶W¼]·]~¶³éÀtT1ÄÏ3¢”L²ª3Hd.û|™bfa½Óäya‘JÊewЏ}Ñß[n‘CítZ6“iÝºŠ»Kví¯Mw³ºkG³Vèï{ú—ÁYþ/ü'- `ß¼2H*⦴;AR6ʉ¤Ø¨êsŸ>OÖ¿Û7örÒ¿kOÙâïìõªj3|FðìÚ»m3Á'†ükáýcMño€üUºö‡Âþ4ÐtM›E¨É–ÃK¹³ÔÍ¥ä¿åhþ3|)µ’G’Qñ'ÁRïu+¹‰tèö‰7Æò2¦Â ÆB…,§Ê¼ÐÇùõþUÏYÚqk]ÑõÑ«;tÑl–ÉRñpêÒOMÞÍYýÖ²W]Ï…bÏÚ½¾9xz÷áoÅ«(üû]ü´°ð·íð£R’Ê NßÄvv–ÐMñ Â1ZÇog­|,ø€V/xC[ÑÑìÒÒüh÷"GJ¸÷:rUƒ)fÁ\ ’s´«î]°0F ¯È¿´ì{ðãö†M;Ävú¶»ð“ãW‡aŠÏÀßþLšÅ AՕ寙¹l¨úŸ‡ïŽoÿ‡u¹/4;džÑî,åžÒÏg‰è¶ßðS¯ƒ¶šn™!ýŸkÏYi–öíw®ë:ÿÀ‹×WVqh–ßiÕµ½;@ñ‡ÃmFâébÕ'¹ŠÓ@ÑþÑ{uö£¨G©³¿†¯Ö×¶–k¬WÏ{¤õ[jöMs=í{_GÞ+¾¶½Òz­µ{~”`XÊ@ ‚0A‚àƒÁ¸ ÿÖOó$ýI¯Ë/ŒÿðQ/‰³¯‡-æ¹sá½ J»Ñ4õêºt7:W…u Ùõ¸$ÓtMvò sYµê‘›+9IøçTý›¿oÚ&êÞÓö‹ý©<9ðOá}å¬\øQûéºÿ‡|A­G$/Æ—®|jñ„øÿJ´»´º¼†üxHifk¸í$„Ç $úçöný’?gÙ?Ãמø ð¿@ð,Zœ­?ˆuèšó[ñ—Œ/sIªøÏƺü—Þ)ñ§q2µÄͪj·q¬ÎòD±†UG¤WIwòÚ×õ{hï¥ì–•e­ŸWäš¾zoum’>PI œ®Õs—†wbĶp¥i †mÄ0¯ËM1ìüGÿŸñ$¦×Mº“áŸü¯IÒòJnoôOÇŸ´kí •JiçTÒ´ƒ Ý͸Šk¸-màšI¡EŽ/ÔæÀ‘è8õã§<‘ŽGQÍ~[þʰhþ<ÿ‚ŠÁG>.Z¬ÒIáýŸ?g].íœ4,<à[ŸøÊÚ Kk_ø’ÎSä(ñ³:³Jº“¶–·ý½î®ú½núõݱ^ñ“¶–·ý½î®úï~û=Û>ôøÅñƒáÿÀ﯌þ"x£Hðž‘s®hþÒnu«Ñ¦Ùë,ñ-Ѱð߆’ôÚÝ$¾!Õ$O³’HÒ1u2•Iþai_ø*çÇMwömÔæø§ð–ÇÂ>3ðÅÍ¿íbß¼AâKM*oÙCàß.¥ðÍņ£âM*'“â^¿âß iñõ†¥=߆ôÅñ-—Øì$‡YŽX?aÿà³tߎßðNÏ>ÔôË­j xö-*ÎÜ]ÜÝÍàÏhÚÁ0Û2J³Iesê( ªÏf£fpËøañ.ïÃòGûxgã7‡>-øfÃö,ñÿÃï‚uÅ¥øŸPðÇ‚~üBñgŠ<«-•Þ—.£wuâ+… =íÔúÑÔî¬5ý Éøq¥øÛC¹ø\¿|áËOj¿~ͦÝÛh¶>-ñÍÅŽ½ãÛ¦ÒeñG‰lu»éüC©ÝÜé·ã >>þÕ¼1£x/ƾøp&ø-ð‹Åþ;ñ7Ä—×üà¿…ß¼ð§Â? íî-þÍ¿²^0ý§/ô›?‰¾3ÑíÐä²¸Ñ ‡WñÄYµï é׺ØMF=4\ä—ºÕ´WÙÚü¶ŠzôÓkõz¦Æö×o¿[¤Õß{­]_VÏìÎxn¡Kˆ'Šæ …[‹k˜&Y­îmfD{yíäIeâhŠ"6ÉX4Ê6Ê [ëÖ¾vý–¾!ü6øŸð[Àþ&ø7¤x§IøK…a¡|0“ÅZ½áɵï‡Ú¶‰á/h¶)y|Qyá}GÓm®|5­xžA­kÈ™†ØbyP¤H¿2gP‰+,›pò몓ýÜz|MÝ'{I-šqwºVm&ì´fÐkÙ¤Öû»-R’Ów{ß[¥m;¦çtK±â7˜/)å¨ÛÂÉ3¸–O- «¬o¬v ˜ÒÓÍ)j°›‰.³1{©,Ç2bV#8C4e‰\N$À*ôí=Ô[`c ;›Ì2?ï8ˆóGʾýëòl ŽèŒHÔc±µ¶œ2Ç$¯ 14»UŒYdep»K•s±&Ž&à»Ç¢]»Yµ{µ¹om4ÕËÕ%Ì4Ÿ-ô]-oðmk÷Õkg¥Òw5XK$1Ç‘¶972!Yî”cËPÊéæFä÷TÀ‰6Ⱦ‘ðZÚ(>4ü#d—ñrü‹ã°nñ^”ˆÃðÛD£sÜí$ø|í|@hÌ[•œ•C4€hÀUÍåù¥Æ.è%ôƒÖ°Þ|gøA—‘M·Å^.GŒ—·ñ^—£…fBÎòdžeÞ‘,kE °KGÕ^6ïü»¾­û×i+èµH!nu}ªúÞÚuZêô¾©]]6DTQE` ¢Š(¢Š(¢Š(ùÿƒÕ¿å_ÿìÿþë:þÕTQÿ«Ê,¾ÿÙÿü,ÿÖuýª¨ ßïø&Ÿü›¯Äoû?ÿø+þ½7öȯ¿ëàø&Ÿü›¯Äoû?ÿø+þ½7öȯ¿è¢Š(¢Š(¯ƒÿà¡ry|( ‰“⦅_9ð¯[• ®ÝùWFP…•ÔŒ×Þðoü1m[àׄMÜ p©ñ[Ch•‘,ßð‰xÜ,˜pÛJ£I†QNµTu”z>em÷¾›j4®ÒîÒüW§çnúWáD MvZD”¤,€»¬¡¢ ¡ùÛ°«!Sò´pÛ ¨G²Œ óDeÏ2:äÈÙvbå$2m}¯2¬ÍoB 帙¼µE¶E ‰$FAó)D2.ÈÚ–‰Ü´žHV/´·xMÉ–ìIæ»ÊªÅ£Ø$¼‘þãaX¤C…e*YŠº¤«¶öNïÓ[|:¶´ÖÖV}œZÔz_^Ï}=Ý^ŠËF•ô½¬í£»#lùŸ1c.®Î[tÅciShÈO.EgXUܶé¾J1F¡›Ë(YYËl1‡ŒÈˆxŸ0ˆbcò̇å=½ºÜC.Lªd[ÌH˜³'š>dP§Í‹ÌÌ«L^'X£ &ô{H51#J¬ƒ|Qîò÷’»c`ò!"¾õX¢$Çæ Í>Zkÿ€ótåWvµµzßV%¥®ìïuºèµëÕzÚÖ}½àÍý«ühøMù±È¿| lÛHˆ4öÆÖùKù‘¨Uc¹r~éAý •€J’ÊH© ®G¬Ë‘ÎÒA''?ÏgÁXübøNn#…Ò/ˆÞX·Çô•|K§³Œ ˆíÞ4^Lr•NÒëý W5}We§¦ž^»¶ú]ZË:›G«×òŽŸ}÷ÿ€Š¥©_Ùévšž£u †Ÿm=íõíÌñ[[YYÛDó]Þ]O;¤[Z[¬·3Ë;¢Š&‘øL‹„gãOáÎ?ýr2;ä~PÁR5üáOØGà,:MßÄßÚßJñ¶ŸãIõ=ORÓm|)û?øCH?ï5;­âûOˆ—zŸ‡þÁ{+%¨²ñOˆ¤ŒO5§”™E]¯]W–—õë§ù“vµëªòº_«½ì¬µz£â‹·?Ã.Ç]ÿ‚|^ÐuÿˆžÑnuŸÿÁ7¿f} O×uo|L:3OŸ´M§…ì,oÏVø•yý£'uOiðO |>µ‰4ûØoõg[hø1ÿçýŒ¼i |!ðß‹üQ¬ê¼m£xBËâG„þøÆZ…þxïÄÛIwáokþ ¶Òtû)t‰¯³¬L—3ˆRHX adÛõï€_ ?e/…þ0ø¯ûVxûÁzçŒüW¦i>ñ¦°G„¼á›kOü!øáýEn'Ð)\^ZXÜé:_ˆü?ðúêÖÃÂ~¹¦Íaý‹&§h¶ñhr­ÒÅ2Ùºèþm>­toÎÉ5º½ìúÜ×GoTúµÑúÚ)é¥ïf÷LÿL›i¢¸DšÞh¥·–d·hLo°È¥Òâ#wW‚dtò˜|¸BT°j³\_ÃÏ ÅàxCÂ0¥œQøcžðêC§C<|CDÒ-4âštW.óE§+Aþ‡m/Ïm(Çsµv•Œ·û½v[ù÷ß^¯soò^»-üû­lú½Û\$²Œ à°fQ„v’ªÀ+üuÿ‚(Ûx’ëöxøùã?ˆ!ŸÅ_üûl~ÒúïÄjÿJ´Òu%×´ÿXxjÇFšÚÙ#u·ÒtK±Ì‘ì[·’(£IðbÈÏP×èG§¾;pOÐþJþÄ+wðsöâÿ‚ŠþÌ÷ÆæÄ^=ð—ímðÒÞ+(¬ôC¢|cÒcµø‚ºzB"„O§xÎÆÎÊí¢‡3ÈÅå˜ã.Ö±’Ó¿®«muÒîÖùk-;úê¶×].ío™ú£â-#M×ômCBÖl­µ-#Yµ¸Óu=2ïoÙõ¨$ŽêÎRÌ C,%¾ÐT<‚Ùf1/›±—ø±ý¤gßðO/ø)ÿìe­é¾½ø…û3Ò¿moø,—ìAû6ø7Æz/‰üû7_Š?´ýîÓÅ^¶ñí…ž¿ãûÝ'^òÞâÁ¤þÄø}máY¡•Iµ¹×í¬¯"C04¥.]z&ï»þ^—Kç·V•®›¶ºhõv¿ò½ž7é{»Ù[ósá¯ÄÿþÕþ#‹ÀhþhÚÝ—Äßi~+øðûá ^*ñ³‹Ùìßâе?Åuá½ÁV±I§x'GÒ<5«Â%¥éÚ ð¾Ÿa¨›Yaõڃſ²ÿd߆ÿ¾j>%ð×ì»áíļAû6øSQý§üñ3G×üOâ_Åð¯@ð†µ^I ÿµý#Vø£â?Øh·×þ#±½±¶Š=*ý’ãúÔ¾ýž~kÒ5ƹð7á³<¡dyµŸ†þÕf—uåÅúÍ4Ú–‹<Ïu-äÒß\I+<ï{+ÜK#ÎÆCÕx#áOÂï†qMÆÞøÁ‘§‡Áðï…"¥KHåi£Ðtë”Ë…ŠH\1t²´VÊÛBIVŽ«•§dôk{+jµikm^ŸynªJÊ6vNÿ%­Óë~ŠÖïvßÇß±í½áÚ³Sñ'†üû3þÒ¿<௠xUðî¿ñÇá_t=cMÕ$k;oø{÷ÚÄší­æš–æF²:­…µ„KÍm,vÖ÷0È#ÔG^qõÁúRÒ0Ê;‚?1\î\ÒOmWwówûÞÆ.\ÒOmWwówûÞÇàoüâV‹]ý’0HoÉ@ª¯ið¢ ÅŸÒ*`º7”eqæGâÇ olmh!8AŽF•ÐŒ# a Tr¢EM‹WýÐ2/½ÁjôÕÔQ°Æ¡Xtrà,q"ÂJI"lÞ\s¼LÁtkEÓD­wÊ›åÓv¯ï[•y;ë]¼ÚM;ÛìÙhÛ¾š¥£ºÑh:NÃLò’P°•ßpŽM¡³‘•LºùA[%#i6¾âV½'àÌIÆ?„\·Äÿ‡Ñƒå Àÿ„£IÛ¼ÄH ËÆ€0…QSsæq»•ÉÉ+âÌ_5”²ïùJLciã òs4VÑz?ÁÖœ|cø>ªQ‰ø«ðòI|åG+ü%z:Ëåg…„“mFŠ{·BÛ"·˜–[qõ·mš²q´Uí¥¬’mY-7z0^V[Zûm®‹džéù·£_ÑWŸüRðoˆþ x]ð„þ,|@øâ _û3û?â—ÂÝ7áf¯ã¿ ýƒXÓõ;¯ì-?ã_ÃOŒ ®?¶ì¬®|;©ÿÂMðëÄ^V«êèßÙ ‹J×tÎp=Šþx~|jý¿|á_ÙŸ^ð¯íâÚãâ'ÆÏø*ÿíÉû!Ýü9ý¨.¿gO€_ î¾ ~Èšwü—Âþ²O‰_³ì-ãoøƒÄ–ß³Â/‰¾4ׇ€¼w?ˆþ!|=±ð¿…bøYðïÇ6°ŸêÙ;þ ·ÿ A¡~Í:×ü(_øAÿá¢?hƒþÍÿ GþoøCÿámÿÁ|9ÿmÿ„§Îÿ…uáÿøH?áÿ„ƒþÿûÊÑ?µ~Éÿ [û_MûGü+h@?_¨¯å ö¯ÿ‚è~Ü^ÿ‚}ü|ý¦|'û~Ïÿ ~Áû~ÇŸµ§ƒü}¡~Úž-ø•㿆º?ü³Äÿþ þÌÞ&ÓþøÇþ ó¡|?ñçÄ„?<sãŠ_*øñâ¯ü9øà¯ƒþñ·†þüý£¼5â_ÙÇãþ£ûNüø‹ð öÔ~3è_<_á‹úïÁÙ÷WÔüA©êÿ³ïÄ«ý_H°øk฼ð×Åø•âëŸkú€>ߢŠ(ùÿƒÕ¿å_ÿìÿþë:þÕTQÿ«Ê,¾ÿÙÿü,ÿÖuýª¨ ßïø&Ÿü›¯Äoû?ÿø+þ½7öȯ¿ëàø&Ÿü›¯Äoû?ÿø+þ½7öȯ¿è¢Š(¢Š(¯…?à ä¯Á 0ÜJüNÑŠ„,ßðŠøÓjò ¶1½'43ñ÷]|ÿ šH~ øQâ·7~)èŠ1R„øKÆäIÀù€`]—'85‰zõÿ†Òm«hï£óõéëÐü€k¿²ÂÒÍt‚ ‘ðža dbq¹PH2®Ê’áÖR±Ë Ü>JNÓí‚noÞHSp"8Øî*ØD'nòI—2)’«Éòɾú8n-™0–Þ@vÓ$H%;˜â?´FY3$ª£ÞÛgò,‡–\yÌ›@EA*ì,«•E<½Ê’2ÆÒ Á‹¾övµ»7Ëg²Ž÷Õ»=tO­ö)èšjîú½Öœ¶wµÝ’I+¥¢÷•â ÆgB· »+.]YXÈH‰UKHîXE½6o Mœ†{ck0i$_3aUŽ$q!Üò”M¥AVƒaŸ¾c ñIy^P‹¿ÊUt ªžg–¥Ñ~\; 6–dš0Œ[6æ7¹”G'–ÓÜI$^YvH y›‘ÙpޤñËyºîE·b’M¯&–É]_•«&µ³wÕl‘+VµÝ¥ÑöwÙnõi7u¢Z¤ýS଒ŸŒ¿ £“j•ø‹à„“… $¿ð’é%dŒ†Äñ‰J £’2¡ú ý· ôþ¼þ¯ç—àTwMñ‹á(’9¢1üIðN×k‰î×Äzvb¹Älv|˜e.XHF+ú®zêÎ;kY&­k-nÞºj·]ÝȪ¹lž·^w[uz¾Ý·µãfã‘K©@Ì…¸,¹Ê©ûØ!”«ÈFÉØå[?—?±Õ¤¿j?ÚãöÜ›T¸¿ðž¿/ì{û?!„2iß ~ Þi·_u:åþÛgãÚx®âÙ퉊ãMð¦—o:Ü$VëÜ_´ÄÙ~ þÏ>1Áoäß ¾|Lø—¤ÎcŠîOx/[ñLv’H¤=|6ÿ‚|gøñ7M¿ø•ð³à·‰ƒõSáÏþÏ6úÆ£â/j0ÚË:iºçÄ?Ì·ž±ÔdAjdðd©ªÝZ»Y=Á·¸¾ÿ–/ø6·áÆ­;þ oñšK].é?toж_ïîç“Å2üM¾ñO‰,4»[KmGÄ·ßéWx¯Bµ¼¿Õtèêk}êÌK²òV?ÕÿÄŒÿ¶¯Ä†¾4ñ~à]ö&øQáŸx³ÄÚÏÄoŠÚ‡üuñš4ÒluI4Ë­ᆛ5ç†ü.ËöX¯n›Ç)·¾ ylþÎD­'á÷üóþ QðWöôý/?lÚâçâ§Š¾*þÑ_|eâ? üVðÄ|0ñuÇÃ+MoíšÞ\xçD„j–þ2¾ñ晫$É®6 -¡Ô£·{˜î´Zv·Mü¿7}ï{ïsM•ô³ÛwÑ;ÝwwÓW­·µÿ°«rûÊÉÊ]Än‹q2$+4ÌÝàíXLs2J…ð¿ºù.WðßÀÚoÃ/ø3áÖ}¯jšGü- xOMÔüQ®ê~&ñ¡eáí*×H¶½ÖõÝfê÷SÕ5K¨lãžúúîæY®®d–g;Ý…vÕŒ·Ó²üºvôÝu×Co§eùtíéºë®Hz£ƒÈ ‰àsÅ-zдiöh>Í‚ŸðZénãñì’–¦HÕ“ãÛM$NÑŸdøN¾Q‘åWwW}‡~Äf@]TI•¿v,Š«+‘«2ÖmëÎd/èÌlà:°‰ÝË'½Áiຟ^ý’ÖíìɽøÂ³:ÈȲÛËyðnÞky€*$‚E›2DÛ’@]YIÇ€¬Œ–ðÒH¤'›ˆã¹iGxÿx Å#™[c+îhÞD#¬C®À’[ÝhŸuvûõÙ_u{hõ†ËNöV¿Uvõ·wªòJÛÛ ‰FYG͵™ŸËÉŽ8›1ì_4˜,¥Dò–ŒÉ- $vøC¹™Š±&ÔGàÄD¡c/à–ñù„#Â0%ªò¤Rk¸ŒÀ/›Új˜cC¹YâPî’ˆÕ—Ì3`¢rèAF@Aˆ‡iù™c ƨð¢á¥T©‘aeO•#Ñ^Û&´NÚ'f¶ºŠ²z?=nÓ­»n—{ß–ÚÚÿ6ÓÞéucÈv1·Šb@c lGEhò§jHNÜ)Øá@f•#Y…À_Iø"®>1ü%9žIâoÃö—ÍòÓj髵JH'Þ•#a$,©ˆ‰r¾?µ§†|}"Zþ;ñoí'«\¸]#Äþ Ó5MöohM§Ëâ›ÏÚ‡Ä:TüSá_ xš{Ç:wÀÍgãwÆ_͈âо ø·Yð_Œt- Ð>üý¡¾/|Zøf~4|c»ø'ákâW‚tÛ¿„_²~µö{»­TñŽ•â]+Åßµ<¤|_¼ŸZÓaŠóÂ>2ýž|%û!üHøUqâMvËHñ‡‹þÛÿ…ið§ÁþñÅŽßáþÈ—Æ_ð§gÿ„þñ¿Æß‹ßðéšæ›â?ˆ_ð­<â¯ø@<÷^5ñ—ö„´íKZ´çþ#þØ_>øWáŠðLž/ðfƒñ'YñÇÃ/iß þÊ¿³ìÑÿ MÏÀ¯‚ÿþøƒâö$ÿ¼{¢h²üSøÍ¬xû^M?Åß>-êbÿâoÇˆÞø‹ÄºÎ¯ñâß‹9þÑ¿~xãÁß?fŒ¾ ø1áÿêž¿ñ_í=ûaÁ?¿k‚_|[·„µ?ü!ý²¿d}â·ŠoþüOøS«x‡ÁŸ>KðóÀjz߇üâÝcÇþ;¶·Ó<-àÜ}ð×Äß²?Ä?iøKmðź¿€¼?áÛ[Áמ𞉪xWKÓ¿lÍGöŽÒü=ûFü6ñÖ£IàGÄ®li‰uÏxÄ7¾*ñ>âÏk,ºm#âœWÞ*<'û~Åþø™áŸ^ý‘?füdð_‡ôo ø;âׄþ|)ðçÄÏ øWßm¾ø{Ã>ñæá;?è>оÙÙü1Ñ´m/UµÓ´¿‡¶¶Þ ±¶ƒÃpE¦¯ãícÿŒý£¿j¯‡WŸ~,øköý¢ÿn}3ö@ÿ‚Jü:ð§Ä/Ú_À^(øY?íûþÔÿ~?~ÚÓêÐèmÚÇÄÿ|{ÿïý–¼A©|ð5—d_ ¬í¾ëzg†uߨßÞºý¨¿kÝCYø/ñ¯Ãúì~ø‚~Í¿ðE¿ÚÿàÿíOðS_ñwÆÏ‡þ"ýŒ¾þÐ|>ÿÿáwþÐ)ñÇüïàwÄ_þÓ¿ðFO^GŠüëÿ?aÚêÓâ/ÿá%ñŽåñ>‰ð³Å?ð£`ø·ñ[àmýïÁû éöŠ( ä þVÿ”Y|ÿ³ÿøYÿ¬ëûUQGü­ÿ(²øÿgÿð³ÿY×öª¢€?¿àšòn¿¿ìÿÿà¬_úôßÛ"¾ÿ¯€?àšòn¿¿ìÿÿà¬_úôßÛ"¾ÿ Š( Š( ¾ÿ‚¢¿Á¯ Œ‰Ú!^qoøF ødîU?ð³´` H#RǾ4Úœ\àº++2åÆczù£nëðwñínïI’6°òBån’ViîòÖ0d… ¡hƒ¬À#ך˜ÈÓJñ¤k!Š_1·†BSh^ D3I…c>b†VÞO-Ì-Ë%‘&C#$Š%Š6Fýá4±aåÛ«?™ÄŠÌ]PÄíjä ¬lm¹ y ‰Dgî¬s6Ï1·²«ì‘‘Cjú­mk=µ¶ÖI_m/¯MJÉ =UíÒ×áßU³vv¾—k¡™‹Û9dº`žQÍp¡™à9ãr¯*Ø`‰+G"3)!YÄŽwH¶ÁŽ#vq.çFK³H\³HÇcìic1 l ±½Ã¸*um*¢Ú;íÀ@¨Æ5œR€²cÍRZͼáÝDo ÈîJÆÒŠªÄ®Ô(dÎU È£ç¨ë$¢ôé-ZÞ*ëD­¦Þõå¢m¥f䛺·tµþëvéfõmi½í¡ê ÂßøV ŸˆÞ äp ÿ„›KÂ˰ù˜!Çú $iIF *þ~¾ 2‹ÿ ZR‡âG‚˳y‡Äša<TpìX™'î—’L@¿çüÿž{V¨¸¸&ï£}{¥×ÒÖékr­/•Nš÷6•õÙü—«oEð/üV/MÿÍÿ‚€Gáµo7ìoûH übø=wp¶–¿>|Bøisvè%KHø]ãH-fÞlüuðr)þøÊÆæfšÖòß]ðeÓ\ÛϲX䘫F˜à¾ öw·Ÿü ¾»[ErUù/}Ùw{køë«ÒÚ+Ÿ x''©îqÓ?J(¢ €¢Š(¯ÌOø,•…¦¡ÿàý£í#"Úßá¥Ì:BÍËñÀ0™#yAx]íçžÝä·+p`žh£Þ%x¤ý9f 2H!Ac¹ˆTð&!@êIWäÏü&ñwÀ?‚?,çÓÿµÿhoÛömøecey<¯4Ûoø¤ýŽá$KÛX<=àëèïb1¼IÁó¶£k‚÷¢üþû[Oõò»zïEùíÞÍió¿ÝvôG7ÿàø¡/ÿø&í¤é·3Úë¿´k‚^¿´œÁ%•÷&Ù©_E2ºÍ°ðÆ™â-LIvGe$¬rªéÏø&7Ã7á'üÿöIðVŸo$P§Á?øªd¸B.¡ñÐ|FÔZì±%ïN©â»©®å|Ë. ÷w3;ÜÍ4ùiÿøwâÏÅmö*ø ð¯á¯~!·ÄÏÚÂøÀøWÂ:î½eá½ËÁ³išn¹¯êÚh[=?G:‡ˆ.4»›[ÙD7K¨J&·Úª÷Ð÷‡´=3ÃN—áÝÆÃJÑ´M*ÃEÐô½>%·¶Óô}ÓôÛKd ½Ž•¼6öè@wªFŠÊ —¶»ó×K/žtNú- ¯×U}ïhôÖú}¤Òi¦»€’œœ§dúœ2{: Z(¬Ì‚Š( Âø- câ/Ù ,hÄŸ\§Íò´V æ†a· ºãŠD!WÁÜ«Ä?Û§þ Ãû3~¢xkÅWÍñ/â}׋´=+Wø?ðçÄ¥ãxfâOê¾"ñoŒí.uƒÂ-aà]j=_ÁñÚEçĽ_PÑtí%ôÿ ËâŸø7÷þ 5=´>"ý”–q1’âßãÜžI!ÖëìŸ %S½C2î†)£àïÚARHü†ðoüëöð–»ãOÇû3ü<ñÏŠ>#êòxƒÅþ"ø×'ˆhoXÖÆ£¬^ÞëŸÛ?µï‰º~¯­ßk·wþ"Ôt›‹ Ï_É߉¤ÕeÓ,>Ç×I¾HòÚüÏK7ÕtIÝêšÿ;›Óz-®ŸgÝu·žŠú¾º´ûOøOÿiïŠîÒüøQá?‚þ Õ ŠÃâ—í#?ˆoürð¤ŸÚöž'Ò¿e¯¶«^x[ÅzCizfañ[ö€ýž~1ø'X¾×.¼qðsL¹ðŽŸáËìoðëň‹ûAë¾*ý®®í›ÈÓ£ý¦m¾ø·À:40D‚ÆMà‡‚üà€0ø¿N¸¼Ö Ó~+Ý|)»øÏâ-Â|D¸ð]ů…¬~¼aåG¶BT°G\o¸pÄI_,´˜,X²‰YæªÑ¥Á #Ü(Fo9(‚9Ç•1òÆVHÙ7eq‘".Õ®z»½õWŽ÷Ní+'eº½ú-“Z$®´(^÷÷·ÞÑogÑ%c}ÂKäùE”«·Û ɇy%TÙ •“s´ncUŒ Q >KzoÁwoø\FÆüOð HAÿ ^–ÅC©PV£W {d[ Ñ°óK=Æ‹‚’É½ÊØ1‰@9-† ¡Üyši]evf>§ð\çãÂ< ~&ø FüÀxŸLvb‹å8;TÆce*Ž¢A *îa½>û½S¶T½Û­ì¯f–Žöp¾}¶¶ºïª³¶š­–«Sú¢Š+œŠ( Š( Š( ä þVÿ”Y|ÿ³ÿøYÿ¬ëûUQGü­ÿ(²øÿgÿð³ÿY×öª¢€?¿àšòn¿¿ìÿÿà¬_úôßÛ"¾ÿ¯€?àšòn¿¿ìÿÿà¬_úôßÛ"¾ÿ Š( Š( ¾ ÿ‚†Ù‹ßƒŒ´ª#ø©¡Íû–*íåøOÆÀ&~æ¶ÜKˆòGñ쯼«áø( 2|ðË*o#âv‰„÷1𿌂 †PÙ}¹F8aü.@F¨üKDõZ=¾{øôðeÚìcÙ&aʡЌ·îö«êÕì¾-›ºè­¾º5äí£il²é¥î­¢ò³InÓnÚݼií ³ÅÌù‡ XLY]î½»É2 çD Ê‘“•wO•Y” „# –*Ò|¬°ÅQ¤¸ÔDÖÒDcGv *‚­9ÉSÇï>SlxäMïT½4õOµ·î­¶‰¦­.[Ù¦¯gk´iÙ4šz¾Ê=Õ·Ù·¤Þ‰_»ø§Ï?ÆO„2$ëi?¼4ÐÚ„·ó"!²VŽu„®c°.€nX)©èž¿žß‚V¯Æ_„æFMëñÁQnÆ^ui²<Ù.NI1ngvŒŠB_ЕsוùwÑ=Ý÷QÛÓkîú¹neUß•ë·W~‹kߥµímVH@ I!|ÄòI`„ …g(Spq´’?#?cd‹öYý³ÿloدW+¥x3âï5¯Û‹ö_c‡NÒî<7ñròÉ?hh,­²jøØu¿A i‰›_ø¾ Eà·ŒÍ4¿®§Ûÿ¬x<ƒïë¡üüý½¿f_|iðÏÃÿ‹¿/tÍö¨ý˜üU?Äo€ÚÖ®û´]u‰µñ÷Â9ï-<-ñÃÐIákýCG’ÛTÒuÄð¯Š#ºI<72‡ùz^ê×ù÷é}U…¿%äß2jû5¯^ªêêÇè9lƒW>€~\q»9ÉÈ>¾rý—ÿhÏþÓŸ ì¾ øcLÕ|%­Ù]]ø_â?Ã$v^?øGñ Au±ñ?Ãh¨ÿñ&ñ'†u8®¬æQìï! ©iÓËkx¾©–ÿ%ÿ·Kt^z܉oò_ð;t·Eç­ÂŠ)xÆ:Œõè9ãsœuãÈ=)Šá ‘”ÉPY 8”Tu‘™rr¯„"7P^9 H£+‘ù2.­¿joø*Dq¬Z¯Ãø'¯Ã›Yì¶·zÿí9ñ×L[Xã’ò?>ÎïPøwðÞ+©-Ûßøwĺö Ð½µÔ“Šú§öØý¥nÿf߃©«ø;H‡Å¿¾#ø¿Â¿þøKÈ­Š>*|AÔ±ü2/ IdM G"óÄ:˘Â]Xéi‚X忇6¿bÏÙwMý”> ÙøãSO|Gñ>­¨xÿãOÄF[ƒuñâÇŠ5x©æ»f»6Wóm*ÞpkcoyhÌàh½Ø½.ú+>ñz¾–¶¶Ó¦ûh½ØôoV•Ÿx»·m-nŽÚ4õÔúÎòÔ Û±HòðrÌŒˆYäìÒ<Þk3ã-Äî-™0V4TRÎä"…äv’G I#´ŽÝ]Ù™‰bIPª !@$$ UÉU'®³: ÇM-Cwwþ¿§¹ ÝßúþžáE5†qƒƒž8ìr1Ñ¸Ï {QQA!•U²Œv°”,Šâ)‘„RB .Ç1ËÉ!,$FM¸$!m/U­ÿ+[çú\¶—¿ªÖÿ•­óý/=!8ö“ë€NG?çÞ–œ}?—Ðä~”–ë®»wÝu×nçàÏü£L¼ÔüUûÇoª 1óãNJAæÏq#ÉðZe!âŽ[o´¤²!S´ùd‘'–þ geå^ÌóIkk'—,‚hÙ6b儌Än’]ŒÊfmó €¬¾Ájn¦±ñ/ìy ÓÚ´2|oQ±Š™Ì’|#’„&¾$Àf*Sçˆ%Ôá†$’'Š wH°—R•%‘QVDŠ%1ïeRÄ0 ½”¯Énô½šKÞZ&µ{]ïï4¬Ö«xí.õ¶%¬tºêùuÙ¶ú­í<ÒI"ÁõiF$¸ —Ž7ÌŽQò¯˜ÒFŠ#fÄ~R´’HBÄžeÒƒn.ã‡Éo7Ìt2Éé5éúLrü=ð'üRþ 𗈵ǿ´‡ìš÷Šb´¿›G±ŽÊK»¦¹ŠÎwi`Š#™£ÅjÒó_ßùµiy¯ÇïüËÏÛàl_ ¿à ±Gí•ðÿâ‰~è¿<}'ìáûMZø Oð¿Ædñ •׉¾ ZüW±¸† ;R›Pñ—…¤ø/Ž.þ×â­ËZðΓ§jzo™o'Üÿ¶ßí;«þÇ¿³ŸŠhM7á•çÆ¼ªxBËU𥟌´Ü˦ø³Å:G„aÕ­õ}RÎÿKrº®­¥…µ’$“eëȲ$qËütñÇÀÏø*í.™}ûmü¸ñ¯„¼9ñ#Àÿüðö`ý ~ üøo¥ë¾×ôïé‘øÏÆþ(Ó¼KñgƺnŸªY+\OkãÅ}æGð•Äî÷'í-á¯ÚÓöÉø3®~Íþ'ý—­~è?õ¯‡2x‹â¥ñ·á÷Œm¼1¦ø;⯃üo¯»xkEÒ×TÕ$:o†NÒ'´“lïwÓùr‹pÚÝ;|6M]êú¦ÕúÙjín—ÓWµÖ—q²züO¬^ýlµv¶Êúo¯ñöÖý²<ðÏÆÿµø'•ï†ü;àÏë~9»ñ/‹k/‚ÞKM#GºÕà·”xvM{Å3^\ɵ¬vI¡[Çw,ÆÕoRF‰&û;öyø±¯|Qýž>ügø“¢X|>Öm/‡Þø¡àMOÀ~#×> üDýŒo¼A¥hzï‡ÛE»Â÷¶¿´.¿¤iP$ǧ¿Û´]R t¶šØèz…«ÜÇZÚöÖÉöÕF÷½å}V«­­m½¯mm}­f£½Ó•üÓzÚÖzŸ–ßÛãí«øÃþ %cx–¿ õ¿ŠÞ oØòãÄ#QÔôÿ„þÏ~.ûGÃ Òµ:ÃÂÿ iè×/‹µäµŠÃÖËÄÚ¬‘MÍýþËÿ´‡?h߆–¾0Òá¿Ññ-ïìÍã^ÒÆhèj£á¼šå¥ýͶ³¦ßÁhø•û|vøo?‡¾6~ÊR|Gø{;øqî5O ü9Ô~Ú~ÐÓ5]^Ö­üâ-âÅàøû@h¾ñv·°Þø“¯i^*Ó¯í§Ñü=ñ/P›Ä>2Ò›WV¿T—M4µÓjÖÙëe¢[ê5ukîÒ]4v²iµf¶}6Kuܺd„Î+3©ÂçX,Ü)Ê}ÙQ²¬AüÒlŸø(ÿ‚­eÓž]Ïu«¤(»®©[géÛ×îMèµ!CU­×[=zu³ï§[&ôZ›¿¶‡üãŸ>3ø«ö&ý€ü9¤ë3ð¬Ñ~Õ_´×Œoí|9ðïödÒ¯l­‘t«{XkM'Vø¡¬C­Y6ÇIMnûF5ID“S‹OQñßÚÿö¤½øgáo†?4?ÛËâΙ¤¦±¥7Š¿dϳDŽ[YÓµM_\¼»ñ'íûFüoøŽoõ^öi¯µÝRK/êw;môÁðïGPxdýuø¿ð'À¾ý„¼[ ÿˆÿ…·â-oGºøÅ­xSÁmþë~=øÝâGˆµ/ˆšïÃßxÆ ‹-jã]‘µ¯xSVñ†£âi:l^Ò1†´ìïÁ?ƒzíeñ†Ú_Yülý¢þÜÛÚOâáÇÀ?2ðo|5á(ì£'Äz_Á¿Ž?µö«®øßÃÚ&£l— ¤ø[ûÊûÊÓ<+n–÷Z¾™ŽˆÛ‘¤’ûöÝ­wÖ-¤ïµÒlÑZÖKMÝ’zû¶wÞÖzk}6ÙŸÕÏìï∞$øIà»ÿŠž ñ/€¼p4+ }kBñ§ˆ<%âOÏ%œÙðëÞ"¿ðÿ«âìÆ¯{§h%m,.®§ƒÊŒ€£Û›•?CëéíÏåÏ¥|çû2^|x¸øymmññü!¨ëÚsYÚxwž¶ñ‡5Ÿx_ûF¸±ñGĆþ&·¼¾ø_ãë›™ï`ñ7‚!ñŒ-ô{ø]¯&ôDú0ö¹ŒñƒëÀüA±Ís=$»{ºô²¶«E§Éz=$»{ºô²¶«E§Éz„?ðZ­áñOì‡ö>AeºøË $ê¦8]ïþ fg2#D#X„»Ã‘žVdð. Š@²HË–M¹ÊF»c†EhÿtÊ÷1¹‚JÛ¿Ö|£Ýÿà´v1ßx»öEŽèJl’Ûãô³2…'>OlÒ’FrBgŒ˜äO6(ä8Éðw´·h£†Õ ’+v•Ϋº¤¦Èœ xع‚"åY‚I ÕKJiíçêÕ–‹{«=tn.ý°O•~ ]ý¤×N}]­®ªIåR¤G³Ê@Ì‘0Ñìp588ä@#Ń)–x.+Bc8R™¡Ý€n !1²€dÛ¶.wýÕð"VLﱤD:¬›ÿvˆ¦bð+‰#ºDV0ì‡ÌrbR?´ ð™RãØŒƒq>P ¸ ’Æ%ò0;KD³Í²³+ŠBí¦4Û]ôŠ×U~‰i¶M'ÌÕºt×­¾ÊÙ;.‹[;j»:Ï4p¶Ó™"Ú¬ÓÊÁæØÁ”y.¡ŽYÞIYEEœ¢„ »Ô¾ ¹?~±tb~'ü>تۊC'Š4’¢pÎÀË¿‘#8fa¹ÝŒRùŒ‘Æ™]dòÜ’–’5híÇã£ùQŽ…¥EžS’1C'¨ü¶DøÇð• m<d(Æä/‰ôĶ6*&äG½ÚBãË•NÖégnWªÖÊÊ:Y½ï{-]Ý+yn­hÙ«¨õÓkk{%f›{нyÿÅ/†žøÁàMwá׋5/ˆG‡üEý™ý¡¨|-ø±ñOàwŽíÿ²5?]µþÂø¥ðSÆ_þ&ø_ͽÓ- Ôÿáñv‘ý·£Ë¨xwYû‡õ}WL½ðŠ_·ÀŸ†þ;×~è2|@øóñëÿٖzçÀ¿Ù«á¯Œ~8øïÁž#ñV§ë ¼9ñ»WðN—{ðËöRÿ…µeªÙ]|6ñ¯íyñ àÂÏhñkÞ0—Çöð_Ž|Sᯧü'¬ê>#ð¯†|C¬xOÄÕõïèÚΩà_\øVóÅ^ ÔuM:ÚúûÂ~&¼ð/‰¼ià›¯xræyt}fçÁÞ1ñg…gÔlîeð÷‰µÝ!¬õK¬þp~xW㟂ü+û"Iû=~Òÿ4?Šß¿à³ßðQŸ€:׊¿jÏŸ¶í­ðÎëà×ì¹§Áhü+ð³áïˆ>|Aý­|s©xCðOÂÛˆ|3ñÁøâ€þ|Wø—qñÅ?´‘? ~Ä_ðYŸ~Òž0ý‘>øë\ý˜4ŸŽß¾0|Ó|cðgÂzž£cñ3MøñSþWá?ø)ˆ~-øgáÞ±ñG^ñŸ‡ìÿkvóá.ãÝSMÖ|oðö;oßG¨üII|u7ëüÿ¶À-Ú‡Xø•ãÏüðOì‡ñƒÂ?>/üNø×âü7øggâ¯|ýŸ¾5xkPÓüi¯øž"ßÃú–‘ûJ|9ðu­×Š%ðÖ£yñ꾰Ү펅ªëß?ë_ðWOø&ޅ⯆š=çí£û0IàŸŠžøá©x{ãµ·íðþYø«à£û=ZøÇá&³ñ>_‰Péÿ5-#ö”ð/Œ|3à+µFóÁzO‹øÆ¿~Þé~ ø“öÿkÙcáGÅ?| ø¥ûK~Ïÿ ~6üJÿ„sþ×ÁßüdøuàïŠ~>ÿ„ÇÄw¾ðü!_|Eâ=;ž*ÿ„«Åºv¡áoaiÿÛž#°½Ñ4ϵjv³Ú¦ÿìõñ¯Â¿´§À/ÿ´gtÿi> øýðá§Æ¿i~,µÓ¬|U¦øWâ§‚ô_x{Oñ5ŽªëÚEŸˆ,ôvÎßYµÒõÍgN·Ôc¹†ÇUÔm’+É€=‚Š( ä þVÿ”Y|ÿ³ÿøYÿ¬ëûUQGü­ÿ(²øÿgÿð³ÿY×öª¢€?¿àšòn¿¿ìÿÿà¬_úôßÛ"¾ÿ¯€?àšòn¿¿ìÿÿà¬_úôßÛ"¾ÿ Š( Š( ¾ÿ‚„#ÉðwÂ(IoŠº `ÌUY?áñÆåbùXpÀ«¤‚q_wWÂ_ðPpÁ߃ ’øZº'ú¶*"ÿŠKÆøšB;㌹N@É;¯__•¬ïémC{z®—ëÙÓ¯–î£ Æä-•î#Ƕ|bQP@«.cŒ£8e,qæ6èdYþð‘7ùwK —%Ðî+”RQ‘U"žc^¢Y·B&6¼±8'æÆ ÃíÚÑ$³I–`Vg¢ó#ŽÙcq;I:yjãû’FÀä7ÌQJe„¡’òFrèÝ úk¶ªî?Ýî¯órMY§¦€¶OÑôW½»§¥÷½íikmKËpÑb(RY«sJ¢FÍæXÈ`ó)ÆØÙD’Ê£6Ûí–â'kU]S!"qUxQ ù1©Ü]‰i#>\dl¸]ü¬‘ ´$€©@Î.‹i]€æ!¹DlÑ¡¨$FB(̋ʉ6<2ÉÎࣅ$”oÞZWóQõº¶—òJI&¬ôßVÓzÝ-»zê/ŸÝ}>{__O+ÝúÂ]FÓHø©ðÂúþîÒÎÊÃâ'‚î/.¯nb¶²¶´µ×t缸–iî­ --๕‰Ç–°yd@Üß´º¯í+û;h7"×Ä> hw WqÛkü¥NÖó3ÅþEî·ž\“Áw%™wÀëË+ü™˜(Q,ñ‰\ÂÒÛ°Biþa+Œ‘6ð7’CÏÊ<—ÄŸ<%ã Pk^&–òkømF™ Ó}‘‰Ó’gºŠÐIs¨-a¸ši¢¶FزMq"쑦52¦¤®ï{Y>·æŽ¾½­óvmFœ=ÞfÒÑ«µ®êÎý-«Ñmëcú4µ—ì®Ñ‰Wö—ýŸš"@Œ¿LdãÄ›rT‚rA¥BŸµÇì¤äûMþÏlÊyã7ÀÊGÊr§Ä¤˜0Ïc•ê 5Íû=ü5¶hã·]Oì¥Çú%´ÚD6û‚Í,QY¢³eMÒ(PY¤`6;ÙŸá…ä“K8×tÑ¥Ž¡¤%¼G;RY û?“*¬…C) #m1Š¡çÙ=6o—MµwzÚöIï¥óT×›èÚÙ|=ÓÑ_W¥—}Oé¼~Ö² éûL~σ’xøÍðã©$“ÿ#'RI$õ$œõ¦·íiû)€þgö|ÉP?ás|8Æv–àÂJ;)8\ ã“_Ì­¿ì¿ðÚ †GÕ^{›a ¼¯&…k>ûwUXÜ·›äÅóH‘h£`Y‰¾œ_³¯Ãsó5­âÊT,FÞMzʪ?x›í•ƒ!Î2‚ì,ñ–¨ÙüMjõz¦¯{FÉ«Ý&îÕšZèÔRw¼º=5Öë}7Mù÷½µ_Ò±ý­?e$!á¦g´ßº@Æo‡NtŒþQÎæ,ÌÞ%˜“šícû)1Yá¥gßK$¿ð¹~rJ?ü$™•T¸ÈP Êà3ÇösørÎÑJšŒ¡cm‹4~<ÐFå“슧)!³”(ø`ß=exßá—Á†¾ñ'¼g=ΑàχþÖüiâNX-µ8t xbÊms_ÔJÑô]Rúú MÊæêúÖÊÑ/žÂÞöM5_Rûì_I5{-í½·ÓE¢½ô]l«£k½¥ä´Ñ7ue{û½¶?§ŸøkÙUq/ü4·ìú·—¿þ'Ü»aä†ÿ„,ßë $à9 ÔÿkÙYHŠ_ÚSö}Œ®Ò"“ãÃ…*P«FÁO‰0¬¤”í ‚+ù²?³§Ãäû%º B K‘ø¬eÁÓ­¬áÕfX-t==c¾ŽÞéÇÚMÄ«o¬M§®.ÓEŽÿ>ê:ý燥Ö,u/ZhzN±©hrj»Õ´ÍT»Öì4mJ]>k'¹¶´Öî4jÎ+¥›cO¤\£d4/c¯ÅÕjÚMm«¿{»>®Û&›\›Ù½Óné/ñ7v–Ú3úb?µŸì¡€iÙåTÆ_†Êª‰Âÿ Svè»°1šEý­e ü¿ÚgöyuF>`¾2«/÷±âBAÎ06“Ôd5rþÍ ä‚H­m/…ûÇ0·šìã<3,r\çéwsOšF@“F-Í܈þjÊ!/É]|ø'£x»BølóêÃÅ^$ð§‹üy¡èÛÈN« xX𽊵«Y´›a¥ëühl$¹su§K-¯Ùž" ¨ì¹»hÞ-´ë³¾–ïdÚŠèÝô¬Õ¼“ÓMn­£Øþ íaû'I¹—ö–ýžquv_Œ¿ ÎíÛDŠø“’Û>y%¶v.1uÚö+Öuø“Vøáû/jþ!ð\ú­÷„µíCâ_Â{ýk—Z儺F·wáÍRç[–ûB¸Ö4Ë™´½RãLžÖMBÂâ[+·šÞW‰¿™ÏüøñÁÞøàI®õxÿ@Ó±âŸé§VñµðΪþðÔå´»¯øEõψ+¡\ü?Óüiyáÿø7Æ–ÿnõí#Çþ ñ^…ã›?/ƒ5kØ;xgO‡ŠË-•Ü#r•häБb!ã‘eʵ9b İ¡TÄö+«íÞöºé¾š§µ•¯£J}[ÑyÚÖ½úÙk«Yl›VQÁ\~7ü,ø®~ÍgáwÅ/‡?»Ò­¾5-̾ ñ—†¼W•&¯ÂÕÓeÕBÕõŠÒí-uDYžØ+ÜÃfX¤ ŽÚÏ"C›”·ÂÄðÅpòºÍ#ùð¢*.ð¨Âª™¥³à÷¿²ßÂݨMRÑ$šÛl =ˆ·VŠí' äÙÛÇAå*TÇ$…Ù„Üz>%ü<øáÛ|Kñ¾Ÿá¨uÝe|5áøµ;¹¯uÿø«û:êãAðÃß ÙE⟈_¼KŸx<)ðïÁZ&½ã/Þ[¾áêÚŠ%ƒmʬ×ý½¢ZjÛ¿Eª·E´^ˆÕ4£ËÊŸ{­Ÿ»~g÷+-•’¼OE´·¸ÊndI%ó0<­« ª&ÜD‰RQTFÂ&Zr¬ëTu½Eðw‡õ¯ø§\Ó|5á¿éŽ·âëú¦‹¡h:.‘§Ï¨jšî¹«jome¥é:E…”×Ú¦­¨Moogkouw~!³µßÌ2|Sý£þ(‰->|ƒ:ñ/mñ‹ö ²µ¸}CH¹i/¼7¬øöqøu㋉ÚÙÖ´ý>K/øoãß?dÿ|-"ðÞ«wá?ëºO‹¾iÒh¿²×†gÖ´ü]ñ¯ÄÚgÅÞÕ´ÝkÁ¯Æéüs¢øZÐ.m5? ø‹Áÿ þøáŸÀíâ7…õíiôŒq|0“ãn‘e­ê¾O‰3øEô¿Y;¾ýŽÛÙ+]]ÚÑIik­zY%v’¾¯ñk®NÉuùÞ—ü4éø—–²¿‚íìè#ø¨|H<û,iñ¢K,{¾>¶ƒãfø’o$´ñ?†Àý›|ûBÂ!ñB>ø¼~›Øõ»Nçá/ìíñCã_ÅŸ…MûFügñŽ›£Ý|KðÖŸ eÏüFýŸ<+á¸ñV•%·Ú¾6ü4ñ‚¿iˆž4Ð-µøroÚøïáOÂÏiËáßÛþÍ^ñΦëvþ÷‘#GžR$h™6&K0‘”ù’&D¡Œ›™¶ä‘ÌI¹¥ $ô¿ƒ7;>3|!YágšOŠ_£Û¶&òCx¿OÛ+¦¶!cf‰®&fW’;'šr÷½Û³×F•••·³»µï+ív?…­›í£V´_}µv½¥Õt·ï'Âß„ÿ >xBø[ðSá§Ãÿƒÿ ¼/ý§ÿÏï…¾ ðçÃÿxwûoXÔ,~Ä?¶†©ãOÚúóöwý¶þü øwû`ü`ø}ñ{źf³û&|Vñ¯Æ_ Ïá€_³wìóã?xOã¯ÃÏÛ£à5χþÖŸ<1ðËLÿ‡WÿÂ}ð·â.—ñOÅÇŒ¿áÕ7_ ôÏ…þF¡ðoöŽýœþë_ð±ü ðƒÁ_ˆ¿á¡?eßÚ?þߎåñwį‚ÿð¯ï|Ce¡h?·ÿ²wÀ¿øeÿÙcöiýš?á)ÿ„ãþßöø7ð/þ_ìOøFá0ÿ…IðëÞÿ„§þÏíÂ?ÿ ü#ÿÚߨŸÛÚßöWÚþÁý¯©}Ÿí“{ýQEüÁêßò‹/€öÿ ?õjª(ÿƒÕ¿å_ÿìÿþë:þÕTPï÷üOþM×â7ýŸÿü‹ÿ^›ûdWßõðüOþM×â7ýŸÿü‹ÿ^›ûdWßôQEQEWÃðPšƒÞÚ…Ä¿tXœ“±¼'ãfÎ=7"î?Â¥›µ}Ï_ ÁA@?|4ágh¡ºd)ð·ŒÕ‚ÉgRcH|9ò÷>Ôj†²Šó_×OÎýµÞ«_ÃצçärÚÛ(v‚Âîå„h§£H¡±Œ.ðꬥ÷ ¬*¦'oÃ6Ò$­°1+»{.è„d””ǽ漺hgSÐt®XTSŸ0²‚DlÀ;9F$.‘ydb•Ö[‰Œ©4Q¢îeFbO*EÁÕÎÝŒNQÏ2.ûb±¦É[·Kêµ»[­ÓZ=]ÝÒWv­çªZ÷|»õÑ;'ö´µî™=ظ;|”ICe$Ydب„1ó#o029QJ²@Ú3Ò]Ôùbm‘•’VY± ¸«Êe‹H~c.çWIJ³Bò¤S.'Q&ÒòD’¢¾ÙÑde!$ILR¬rFcUc(TÀ·E¨ÄÀY®ÀÚɤ ²n,­å¿îSË)¶=«4q†…‰*<éVšuÑ$¬—¹îݧÕ)(쮕ýÛ2ëËìýÞêÒÖ¾Ê×kºÖÈ™¬å›ÌóYe0 ò¹,©Éc†0Êdá„ ¹ÃP‰ S¨X¶¬r,H¡Õ>]ñ”O´‡÷hQ³«JOîJHAa$Œ‰ätÁ…â( #*…`£cl#È?-fžH6Ê‹—Œ«Ä„æ}î7dm )fHž5`ç3’‡~Y]ÐÄþd’D±Zè¯{Ù¤¬¯ð¥¤¹´¶·k«VÚÏU³vÝîºG§o]î÷èùnÔ ¦/ òd1ÅS<·ÀÏžâ+Q-ÌBi#°€Ào5gL²Õ±ùáÍÇšþ·ðßQ“ã¿Ç¸îþ6þÞÿ¶×À¯YÙüDÔím´ŸÞñ/íŸâ |(ðŽ˜tÛ­?ÂN|GðoÃ6QücÓôï þÐ>ðn§qà†ŸþxKð5‡‚¿^n/^2±ÚÂâRɸ…Q$o¼u`|ã I‘¸%Z)Y—ïVtW1­ÈµKP Àây·,›Á·x£ÕÊŒ+#‰%·ÿ¥È…%¦Ém¢wMÙmtî×tݯk«s Fë™è´Vß]Þ´ÖöW²¶©~\i>4Ögð'‚ô¯Ž iš¿Žüm࿇ ñwÅ×>-]øãc¡ñçï?²¡ý¨>#üPø9á+_ Þêÿ³¿‹ü?±à?ü]øÅŒ¾ “ž Ñ<š—Œ¿h-Cà燾x»Hý5߆vø—ã?ˆÿtdýœ¼{iðòûÀ_ ¿V!>ÌKL€M†l¤.Ì%EóK[‹™ž)ƒ™ ÄÍ4ÞûOüm¿ýž> øçâîðËÄÿGÿ x£Å—ú>âx~#Ið¯…5_ë~$Ôük«Y\ éñønÚÛ[‡Á:o‹<{WúƒuØ´»¨"nÚ^íhÖ¶´z]u»ÖêÚJ÷HÒõZ5½¬õ]nù–­µ“W?<¾+ø“ãÝö‘ûDüGñï|}ðÇâÀŸø'/Á_Žp|2ømãm{DøQá_Úfù?l [SÖµ7K¾ñe·‹l¼9«x7MÑÁº‡‹þ&ü#ñþŸœ>.Ò~-ÛxWÀ×Z£üWÔ6Ö|Aã}âçŒôoÚ¶x›ÃúêIw¦øvMI¾ø*óJð˜<à/‡z³ßßøᯂîÓG}ÕñWø·¤&‘§|ø]á?ëêŸÛš—>!ÍðãÂ>Ó­m¬LEΧáü[ñÝÏŠu}gT¸’4_…ZÆâ]#Lñ£ø“ÇÖ´‡püCò?öžþÖøw¡M¡xB Ïž&ñůi G‰ìm¬WÄŸ¾#ëß þ/x‚_H»×à¿Ãhšž«¨üWÕü+¡Åm¡ê¿<7gàk¯ŠÞ+ð‡ÁíI-’ºmY»¾š4íxÞöºrn)÷½Ã_–‹ÿI½ÕõmkÝ;]-Zù¯ö¯ŸÆÖ~2ý¯¼i¤|Uø—á)gŸØ'áwÆÿ‡ð猇‡üoñ—C×?lŸéþ<ñ6€Ú¦‹Mø¤x{Y𦳈þøÛCm.OŠ^×lü+àfÒxOÚçMðÇß‹¶§Å)¼wñá§Ä¿Á>£Ö>ÈŸ~"øJÛÄ~4ð/„ÿlñ—ƒ<#¬xß@Ð-Õ|Eâ?Ð߃ü7ñWÂßu¹£›Â¾3øãðOý |=à(`Õ¯àÑ<#i¥|8¹ñV϶™¢éÅü }ñ7Ã6—ºµö¨Iö/´xVÏXðΟ¬E}Ìx×ö›Ó<%à_Ÿ~ø Äÿ>|nñOÀm'ÃÞ?Ñ®ôxSÂzÆ¿|3ð'„üWâ{/^hã%µø·^ÒtO…¾2Õ5]cO¾Ñ|}yð÷ÃÍ«xŽÁ§¢nÉ´¯éÞÚ½yœœSOUÊ e¢½“ô¿.ûk¢M·¾û&ü«â߆¬>'ô‰Ÿ>-øköx×¢ñωþ7ühñ?ƯxkY‹ãœ? l¾xkUø¨|Cáy~|2ø…,ÿüA£7Ã=Oà7#ø£áï…¾°ÿ„?Eñ®©ðsâžÃâ«ñçöj¿ø•cz¾$ºý?o;m?Rñ†¤x—]ð.ûGþÉÖß ›w®ø#Y¹Ôü#­XZjͧx›Áýþ­£k]¶…âý\xrÊâËKáÃ/ |'Òo4O iúµµ½þ¯}â=[ñ7‰¼Wãox‹Ä½³k~1ñßµ=SÆÞ2ÕF—£hÚ6“ªëzµÙðç‡|= xMeðÿ‚ü7gf´ü®Ú+¨¤–šÙ5­Ý´Ò÷«³ë£vÒÉ_£µûµ»mÜùàW„¼ ðÏãwíÿñ_Uñ?ˆü9¥èÿIñV©ãïŒÞ:¹øq¡x9¿fÙ«âV±â;½Å~6¼ð6žt3¨ëšxºþÕ?á_øãLðõoü8Ò“ÃvÙÿ¿à§²ÏÆ|Wð/À›Ÿ‹¿|Ið§Å¶þ ž„¿þ#ü@ðÇ‹u­RÂ3áû¯ üVÑt;¿ƒ¾ð§‰5øüGà¿øÿâ¿Ä†>½Ôü!¯øªOÅ𢠈z¯°þ×?±ß€¿lÿ øCá×ů|UÒ~x{Åúw‹¼]ð³á߉4 øWã,ú-ö›ªé¾ø©~ž¿ñæ¡á‹;‹KË‹}/ÁÞ)ðcíE|E<Òø«Ãž×<9Gö^ý‡?e¿Ø­¼rÿ³ŸÃøVÇâOü#1xÁ?á2ø‰ã¬Ÿ É®KáÉñ÷‹|Z,?±ÓÅ:á ¤}nä¼ ~nÍ¥œˆkuµô¾ÍÝ´´º·»t•ÓjÍ ¿®–ûýÕ}m®Ö{ékß{Aý¯>-©ºÖ;ëמ'ð÷Š| èÿ ¿fï‚_ (ü?ÂdaKø›G•0wH bF¹Þêî"iŽuf9œ«*`†Û½If4„þi FgQYb -ÃúoÁÉ”üføC"$²–ø£àp^@“ÅZ[ o.¡YvOŸgŽK×ÜR(D˜ïu¦—z¥{-vÓKjÛ³Õki9^vzüú[Eo’îîŸ3¹ýQE€Q@Q@Q@Èü­ÿ(²øÿgÿð³ÿY×öª¢ø=[þQeðþÏÿágþ³¯íUE~ÿÁ4ÿäÝ~#ÙÿÿÁX¿õé¿¶E}ÿ_Á4ÿäÝ~#ÙÿÿÁX¿õé¿¶E}ÿ@Q@Q@|%ÿvOƒ¾ÆÀñSEIò6D|!ã‚ÌŒ9GÈU0¡‰g»kàïø(m«Þ|𽺱dø£¡‰dM¾bEÿ¯w4d‚Cµ~L9V`¤dšqø—ªþºÿ˜v¶÷Vë×ú±ù µž(‰w|¬ y€²»4«ûÖY7£Î¯0ŒK†Îá7(òŠ}”"M,LÅ^9àþóÌŒ”ßòŸ%ÎçA$XV1•yc†(aHmò°Ú/*ç[ù»·˜ÿ#•Þ¥áY$Ž}Ô×;HÈU>hÄ!`7±É3ì£b”gHÕVѦ(aH¡;ÛUѶžé+Ý=S½›²i'äŸ+Õ[Ó¥´¶š>»~hô#¸‹“œìª±c°)™Œrü† p+IÅ'™¹¤‚rsÔA$FIVW—ÍD ÅUe2ˆåÃÈa «3")ó3&t˜°Ì™m¸# æFw;!VS$Eö”\0Ú· Aºi–*ÒH³BDl#VvUÛLÎ]$rÞLª- g $pUH1wo´õVNêïÝÑ«ZÒo¢K}{µ¦ÏWkoÞ=W“×–ÉÝ-ÛNKy$džD#ÊY†J»¶É%0ÛyŒ^8c”JòÝJ·P…m²˜“jªªŸ(í.!•Q?/˜ê‘N컡ˆN¬öÑ–;L,ÐÅîxS‰¡ÜÆC3#n/éóeqd )PÂ]«#™ݹZh"‰ü͈ÎØäcˆÔ¡‰Xù_TÖ‰ÿ&ªé­nö½ïuepIvJÍ[«×–6Õ;ú~)lùbWlÀ.ÑæÌtP€YG („:…J0Û æY&9±½²»‹wŒLÄ=ÞÆùvî/"4j 'GM­—\1¹;ˆH‚FŽ U¤i‹;01a>bX…£•‰Q°È';dŽEZQØ[[ͺ8̲I¾” ¯Ê®âo“÷˜‘ÅÞv’)wMü•¿»gh¸¥k¨¥{YÝ^^îÍ…ßÉ[M-§-¾¬úZÉì×KÀÛ•òD qŒÊ€G”1‡Ù¼åcwS+C„WñÏÚ;á®­ñWövøñð³Ã:®“¥ø‹âgÁü=u¯ÝIgáë]cÆ^Õ|=cu¬Ë –¡um¥ÛÜêçU¹Òôû½BÏNŽæçNÓo®aK;ÏlÉŽ€"É´®PÑ„ùI >da”JGËR­u\F]]ZåV7L›9 W"9‘¶ÞH¤Ž=ÏöñÄ“Mkm)kk[˲Žñ©Ë{è–‰ëª×–÷몽¬ÓÚÖvHÝì“ÓWòüúj´KX»[çOÚ/@ý¡|G¢øcÂßm<Ú~¯¯ÜÅñbü^ñ?Â?ÝxjPg±ð‡Ãoxà÷Åø¼=7ŠŸû9¼Mãûk«?ˆg‚moàøiyá/‰:í¿þòºì³à?iÚ‰üuà­cá/Ž´xWáÍÿ…ÿeïÚ_ãÿÃßižð÷‹u_‡ž°ºøiwðONÖ-|)ˆuÏøbßÅ^ðÝÏ…4}aü?ás.‡¦ZOªùíðO㿾2_øßA·ÅŸáo„|?áÿÛþÛ_´‡ìªtoøsÄ_µßx– |ðG‹´íwþk_x#E†÷R¼’}?PðF¥§hq¶Ÿ¡vu§ø3ñà·Àï‹W~&ý¤O†¼uð¿áÜ_>x_ãïÄß|CñN¯ãMûÆúF™w®xâ7‚|Iñ3Ç~-Ð/t×ñî½ñ‹âм áÁ>,ø—sâ†Ú,þ&x€M»[KtÑ«¹+講½––&’ô},ºëu˳òÒﯚR¶?„¿bz€³/ìÕã_H›Àÿþ ^X|B¼Ñ§×¼Oãkߌ:wƒí¾èoà­Sã‡|o¦/Á=GJñ?űsàÿì}15 (xö~ñŸ„âø/ã/ˆŸüYô/þ|Bø©ð[ᯅ|]sðê‹Vž9ýšþ#|GÔtÖáõö«ðÃã7Âÿ‹ÀöÚö™¨øŠçºÄñ¶‘àá«ØÙÞÌ·:…׎µM ê!gaò¯Šg¿ÚãZÖü¯xÂÿNø-§ìëðoÀž57í¡ûVþÈZ&ñÇÀÿð™Éñ—Ǻ„~|“Fñ¶‘ñYüc¤Ø[x›ZÓt[»8ü-siá›?IðÍ¿'wã‹OŒú¯€åð熿j¯‹¿ õ?ÙGökø£ào‡¿ h»ß…<'ÄmKâ¶£/Šþ>xæëöŸø3Åÿˆ>ð†— ê#âgƽg¾(øañ]½ÓüiãMÆ_„ôÕl¢­u¶‰+ù4î쮓z-"'¦½í¥¿º¬¯Û»¶ŠÛ+bþÑøu«ü;»ÑugÖügñ>Oˆk¦ü/ñˆ¿³¯î|ð_á׉þþ̶T þx{À×~ ý¦¦Ô<-ãkohÚF™§øÿƺ^»ªü0ý©¯õ]'âUÞŸ£ê·Zv¨žñ½¾«ámFïZ×üeã].ÏÂ^k§x“ã'‹¼Yûx‡Àž3øyâo‰>0ý…>4kž1ø£â_ kz‡…µoí+ØCÄ ñÞ…ðÖÑ>ê~'Ö¼Y{b!Ó<-­^|*Òü;ˆ/ |"ø¯œÞo‰Ÿ<ãöðôzœúŒ¾ÿ„›Âžñ-¶‰6£.ŸáûÛíCA—QM2}BÿÃÚÚ/4Én´KYáW÷BÚëšú;ýÉßUmú'é}ôòÕ¥§Ã¯E}{mf¯¢ÙøðÀ|ø1ðàûêë¯Éð—á‡Ã¿‡Úôv?ÙÑêÃÁ¾°ðÌZìÚ<º…üº=κšpÔ`´VÕ¹½¿ÓíßKÒôÝ&OzBÛ”ieŒ…ù_`BÛÔ£àðY¢0¾Ô†R±²4O#¢£¶¶ŽÞÍ v°›†:È·7ºžT*®Ì×(ÏvÎMr£ÍIdG¡áÈ;™AiåÞrYÕV2›z3ˆÞDKxMvÖ÷Z_mÓ­íµßŸWuå¾Ûjö•Û²VÚýõÖ;9cŒ"I4á §(QÎÙ¤98ß2©PY]%GHäzñ-ËŠî-²+$¢V˜È;²A!Ç7ï¡e!™‘r\ Ò ¦×ÃvÆO”æ0 G;*ªåJ&ùváâÝ: Í xFÉ6$l±G!‘ÙYÃ…dT,NÉdk'Ÿ±Ï"`WÓwªÓ[]¸ß~›%u¾ïGq[Õ»uV³q¾ºY=žÚ÷NÎkYfrÆiUò)Y`‡û˜‚͹)b1Êùbõå¼™fdnj‚<¼ ŒÊ ´ndtÜu™ZhH•€Íh„ñi̸Wv¸†%E…r£  1gdq±äǘÛ]§êy{¶yƒ£39}ÁÕÚ6òãpªáåY¢ÞêêDžS™þÐÎ/Mí²M}•¢ó{o{ëkØŸ[wÕ¾],÷^]í½ô©T2Ɉö³0BNù˜ùE„Q°¸Em«Ã<×s ˆÖÍ]–Ú8ZRÀÜ·•Ý qùO/̬¡ÚVY#b\‰g‘æiî#"ÝÌ—c#;âR@-Ÿ69ˆmûÓˆ¸Ìm=ìm­§‘´Òch”2n Œ" Qˆe‘c}£pR­$ÀD¬¬Õí«O]cm¾¬îìµi¦Úmêšnô“q½ý›w÷¶öÞÒÞÎû-MPé¸@ˆ$بÎåIF“Ì Bà3†ó;y…™eWx™e”z7Á{haøÓð’P¿ñs<`¿Šô¬ŸxŽ%ÜâBÒæE¯yâ‹u l¦Ö*Á^!–UiÛaYa;·ñ(C4cfƯ@ø=mçÆ„^Tû?Å_‡×d#É g‹Åzk:H€b’O/Íœ$’£f3,2•Ñ»«ÆúZÚYjí뮦‰$”l乕»ÿ‡û·KK]m¥ôÛú"¢Š+Q@Q@Q@Èü­ÿ(²øÿgÿð³ÿY×öª¢ø=[þQeðþÏÿágþ³¯íUE~ÿÁ4ÿäÝ~#ÙÿÿÁX¿õé¿¶E}ÿ_Á4ÿäÝ~#ÙÿÿÁX¿õé¿¶E}ÿ@Q@Q@|ÿ —Êø1áSæ¤[þ)èk™*å|)ãiUPXå£Sòò“Ðû¾ ÿ‚ˆ%»üð‰¹n>+hŒˆÈ¬Ÿð‡øéUÐbC6ÖRŒ åÕ qø£êŸ^È-v—šïß]»ì~Bܤê @÷mæ,oó•"û’EÎA¬ªåžYäP°«­\M‡dL‘’¡d ($FU•–WÌQÜ@%Ë$’´†V‡6ÚyæžW- vˆªÈ†%p_";P1nPØr|¨–5@Êj{H&·7+5Îñ/™"îEq·ÊUXÒA#•…K°f‡{m}[³·Kû·ÒÛ;+¥}íh¦ØÚ³[+Ùîš×•hÞ÷iZé¤Óvå³w%p‘’Ëò¸*<Â@Úû–HئÐȤùnÑ@$…‹²IJ8•c+)‰—çvyö¶U]‚¸p³Fòm£LŽÞd2º¨Dg†]þpict›k@pAUoUš Û@ÅqZH'‘ä,¯[8UR5æŽ'hÛ*vmdÝóy¤ÑÏ1ºBi¾÷IjÒ»´SM+¤’Õ%uy]«´Åë¾ýÞÑNï_-.õJö½Ìù¯#”bÊñ\y3"ÈöÄ«nÁœe,·,mäùŒŒÙ^5ʈæû;žb-º–iÛÍ%%o…_}¯dî—6×i]v¶Šú/åÚÛZýZ~zØñ?‰Ÿ³çË:¥–½â[oéší¶›k§Üjß>/üPø?¬êZ ö§©xcÃ1ñÁÿx/Kñ`ð†£¨x¢çÁQxµ ·ˆüLú5¥‘×59®9?~É?¼]­øc_¼‹ÇÞÔ¼ à{Ÿ†ÿ‹ÿ~xwÃ~º:`—þð×À߉žÒ!Ð$ÿ„kÁöú†gmgu{¢è Ñ.b“J𵕵ŸÓ3¦VÞ54Gh€i›¿u°%‘Ä­(Ž .vXÚWbÁ‘Y÷1W•¸2ɱ£¸Ë…!šTša0G„–Ÿ)".øœ®Ý4óÒê+dítµW½µM{©µ¦Ÿ'ª·U½•öv½´Ijô¿ÏÞ1ý™>xº=kR|WÐõøcLðMçˆ j~ ÑôϳhºÅø3âF›âω˥\ê^+ŸOÔ¾*êž#»°Õ|Mãë¨LRøïÄ—“|Dø¿ð\Âàý>ÞÃÃ>Ö5O‚?ü+§øÁ¿­®‚|7Ó|K¡£øYÚÞØE vºM¢Ä‘Å/EnÒ*€€ën¿#ù*‚7g…ãdUÇÙƒ$’¦lFÃd“½‚Ê3 m²8‰¹ +o„:—U HŠâK™Ö³ì..2M/¦–¿Âí¢åÓg¾ŠïV»±¥v·µÖ©Y­c}?VÕïd·bÌ%# »ydF´ì3Ç:°IOîNÀ’O1ŽüµkÊ /ï]îbØf –Ywº±y »¢…mƒÌ0¢Kå´g6Úæiæu+[@U£Ìk0Þ¡DCäHÞQPÌ%Fñ˜Äö–óÂò‰ç v+Fpˆ²£F‘åDkþ°¤(ŽJ0i1–i«ô·*KF’ŽÛ­SZÙô³ø¦ž¶é¥­Ò6ºµÕ÷M½®ÛOErGØ…xo1Š0*Ä2ÞÛœ?îcÁ âBSÎ>CÑŠ !ý錆ɾ`ªî@äJ¾c´D*F’YPˬ‘ÛÈåyf£cHì÷l»¶È×hÊ]wlm¢4[§åfT`Œäùk•]Ò)ed—`‡æU’ÑÛÁ@±"˜|弬º«7ö^ÚÛXöÑ;¥ï!zÛ®Þ|»·½škeÞæ|·öåÌ2´ÈøQ”•— ¬cØå†øðò€ä1¤*Z4óê,(! „ªÆ’³6çR›e,¤H¨˜‘g}¯'–…ÄŠåL^KÔh e¤† ˜]ªw#¿Îª6CÃ"íF »‚2$‹0·›FÝÔ*³üÁ‚1í‰V1¶IPr‰ "%ˆ¨hqs!øíÖÛÛ­š²¶ªÚ_u¢föÕv{.׳wìôèºîĹžÝJ%Ç–¤/s0]Ñ7a™å¹!ÑBËä¼±ùn$WÆ#h€O’2#*ð;H$‰Cmù$ub jàÂ|Ÿ' ¬ÔËØí¦rÕŽèãm§ ÌäÞ!„Ê >ÐàNÄIw–)pc‹ä‰Wa|)h3/ÝG%Jdy= ­¹bì Z(ìµVÕÙ|:­:¶›ìîÛljÚùµ£¿Âßo›Ù½4jñHa!m$²É”b%è lÞÆ&D`¡Šù­#bäšôŸƒQ$_>9T;¾'|>ŒrY¼S¦>ã´3 ¹Y3$’þô©p›ƒæˆÒ ü…Ÿheûçg’©ûÅiGŠ0Æ_•âgÒL$NÏèßZçþÁØQ¢fOŠ¿¤œÍ²FXSÄú:J«¸7—8’â!ofاlÒ;âE§Ü¶Ñ+Z+K½Þš+뾺ºì­eågÊ­çѽ5µž¨þˆ(¢ŠÀŠ( Š( Š( ä þVÿ”Y|ÿ³ÿøYÿ¬ëûUQGü­ÿ(²øÿgÿð³ÿY×öª¢€?¿àšòn¿¿ìÿÿà¬_úôßÛ"¾ÿ¯€?àšòn¿¿ìÿÿà¬_úôßÛ"¾ÿ Š( Š( ¸/ˆ¿ <ñcDµðïôF×´k-V nÚÍuMgI1êvÖ—¶P\ý§CÔtÛ·Ùm¨ÞGäI;Û±˜Hñ4±Bñ÷´PÌIû~ÍÑ‚áÆ¬?á/ñá ªÀø ‚6¨Qp í¹cýÿg’8×áìì±**|mñ w ºY¼Y$’7Ê2Ò;3å‰2H[éÊ)Ý÷x2Ã~Î?ôNßëÿ —²Æ ÿÂSÅa‚IÜIlHÿcÙÂ-þ_÷Rã á2ñùb b@câ’Ãæfo”˜–ëÍ}9EÒ½ùûÝßïæCûþÎ ßs¸¶sâC8ÿ‘Ÿ…v‘GÊä’á‹6Z?cÙÀtøy*àƒ…ñ§ÄÄBø¨Ä’KY‰bKOÓµùAðçþ ¿áÿxWöZø©âߨ›ößø7û>~Ø> ø!ោ?´gŽtÙÆ¿ íuÚcN±›öy¹ø“¡þÏ?µ?ÇŒŸ ¼?ñoÄš÷ƒ>h~,ñǾø…ãÿøoâ³àÉ5µ¸€æ—w÷¿_ÏP>Ã?±ÇìàBøWL‚GŒ||ª¼’UñH”‘±€Ü›P!P‰µáŽ?fü`|9ÀÛ·Åþ<(mêüýŸþü@øáðcÂ~4ñ§ˆüMý°ºÇÅ [xcÂÞ&ÿ‰Ëiš_Í/½ú÷ï¨Æ¿±¿ìÞ»vü9+´(xÃÇ |ªIÅ8-°yeÈ,c&2J¥ßðÇ?³ü:,T‚¼aãÇ|†fvñAb2ïI3)XƒÍ~Óÿ¶·ÂÏÙ7þ_øXºÄ kþ_Ùö¼ýµµøB´¯j>wÂÏØ»þ¯ü--ÏûwÅ~ó> kÿð½ü#ÿ•?Ùü9ªgxþ/øWìzgöÇŸü ÿ‚“þÎ?ÿbπ߷—Ãø¯üý¡> |ø[á;)ü/k£xï@ñßÇÚwÁŸ²¶…âíYÖ¬4Ë_øV¿|bÚ/Ä]OÃúÿˆôy4 x‹Ä?5ˆºdž—Äjï»ûØÌ?c¿ÙÈcþ-Û½ ñ‡€Â7ÚÂ4Þ¹Úø;ÜÙŠ_Ø×öo™ oðöáTíù¢ñÇÄH$vclÐx²9Wî.v¸ÈÜC¸mÿŽŸ>"ü$ÿ„[þÙ;ö€ý¨?á þÛþÖÿ…â?ÙcÃÿðƒÿed}ƒþŸøiÚ[öwû_ü$ßÚWŸØŸð…ÂaöøGõøI?áó´í¿—ÿgïø)‡þ)ð‡í>üÕ"Ô­¼uáï xª/xëÀZ=Ÿ†omŽu?Òþg÷±¦ÖͯM~±ìØ(ÿá\ÈV#/ã_ˆNàDŠ‘–•üVÒHÊ«ÃÈìû™Ü±yšOøcoÙ»¹8(Æ>= (mÁñN60zãl„ሻÝkã_…t/¿ ?g;Í?ÄxÛâ§ÁÿŽü=ª[ZéÏá[? üñ§ìõà_éúÍôº¬:½¿ˆ5-_ö”ð-džmlt=GN¼Ó´ŸMªjº5ÍŽg¯yü6·ÂÏø`_øx¿öÄøR_ðÈðÚßð‹exsþŸü*ÏøRÿð½?°?±?á+ÿ„Kþü"_ñ.þÊÿ„ãþÏøHÿÑ?á+þÌÿ‰½>ioÍ+½ÝÞ¶Û¨ŽŒ~Æÿ³x9ÿ…sœç;ü_ã· ‚X?Š1;Ÿ%²I’RNe°ÿ±¿ìÞãkü9,7çÅþ<ûÅvîÏü%Ê®sòmM›v&ßøWÿ'ýœ~-ÿÁA?iïø&~†¿4ÚköWøðÿâ—‹-¼Eá{X| ãxïÃüMs®ü:ñf­khÿ„þßÃmÅÚgŽtßkÇŠàoéþ2Ñtk:'Ì_üöjñïíñëöZøðWöŸý£þ2~Ïß´ÿ…?d?h_ ¼=ðCÁúw‹>2ë ?j‹þ+²ðN¿ûAüzø%¤Máÿ…ZGìoñÇÃ~9×¼Yuá5Ohú|0‹â7†üE§x••ßwÛw·`Zm§¦‡è ~Æß³|jU>2‚0qãdðFI>)Él¼Io•9ùhŸ±·ìáGø{3£ò‘¤ñ·Ä)¤QP†š_¼®YUK3»38󌄱ù÷Nÿ‚–ü=³ø{ûox·â·ìÿûOüñ·ìð}¾?|oø!ñcÂ äø…®ü¾øg㉞ø…ð{Åÿ þ.|HýŸ>*xÇQü-ø©àMo üp’} âgÃOx?â¿‚.të{‹ÎƒáüŸöqøïû|ý¼¾¯Ä à—í ñàGÂß ÙOá{]ÇzŽþ;þÓ¾ ý­´/h:εa¦ZÿµøÛãÑ~"ê~×üG£É£øcÄ^!øq¨|EÓ$ð̾#9¥üϯW׿¯qÝ÷g²7ìsû8°Ã|;r¹©ñ¶œ8+ÿ N ’ì T© AUP?Øßöp‹w—ðíÔ¶7øL¼~I×ê|RN ³3 á‰;ÍxçÇø)?ìãû>~Ù?³—ìCñ ~ [|Mý¤³`Ò<{…ítï? 5XüW“à_„~+|[ñNµáÏé?i| øÅàÙÿá×ƒ×ÆÞ;ñÏŒ~ëZuׇtK+RÕ½â·í­ð³àÿÄŸü-ñ6ñûÄ ÿ† þռд¯\è÷ðñ/ÚÇÇ_±×ÁOìûCÅzeì¿ð‹üMø¬ë¿¾Ó§ÚbxçLÔü'ÿ ·ˆ&ºðÅ‘wÝöÝí¦Ÿ‚ûŽ¿cÙ½¾÷Ãß'—“âÿÛ‚¿xø£vB–PÙÞ¡Üß-?±¯ìÞqÿîAƒ> ÀñPˆ-¹¾óbÄ–b~ž¢‹¾ï]õaý}Û}ÖĢö9ýœHÁøxçÓ>2ññ €€0'Å9 6)W2°,băö9ýœ|:ÆÜ‹üw´ÆÑ·þ»PÑ®1æD ìXý5EÒîþöÌ‹û~Î+Óá쾘o|@a×=ÅDuÈ> ²Ÿ•˜-öPøáíkGñàG´Ö4 OOÖ4›Óâßܵ®£¥ÝÅ}c9†ïijÛ\,7PÅ+[ÝC=´â4Žâb+èš(»ÚîÏuw­´_rЊ(¤EPEPEPòÿ«Ê,¾ÿÙÿü,ÿÖuýª¨£þVÿ”Y|ÿ³ÿøYÿ¬ëûUQ@¿ßðM?ù7_ˆßöÿðV/ýzoí‘_×ÀðM?ù7_ˆßöÿðV/ýzoí‘_ÐEPEPEPEPEP_„?°Gü{Æž#ý‹ÿà˜‰ûPþÔŸ¶þ·¤|ø?û|d“ö.ñÌ?¾ ü3ð_Æ_ƒ |®|;ðÄ3áGìÉðƒö‘ñG‡ÿg¯Š6Z‰ô?…ÿ>3xž þ!|1ðN£ñzËǺ¿†®ë÷zŠüøuûGøKö_ý¨¿à¤Ú7Å¿…ßµÿü]Úÿá¿Å/‡¾ ø[ûþÜ_´xóÂzž™‰¿¶4­cÃ:…¶¥§Ú£´ßœa/ŽðW/Úƒþ =ñÚX~üýŸ>"þÌà˜¿õïÚÛþ ùûaOñ÷Ä_¢ðþ‘ûMü[ø»áïƒ_¾4~ÈÚƒ2x‡á‡ÄYâñ§ìñ¡]x;Að$žñ‰¾7S´PòÅñ.óö¸ý±ÿ`Ï…Ÿþ#~Îß´ýŸíâÏø7‡þ #ð7ã7…þ!~Ϻ߀¾&jµÆ¼Ÿ°o€“@¸øeáoxƒöŒñ·Â‰_~øÃEе¿ˆV[ÂþÒã³Ôt ý¸e_Ú;öXýµüâÙ/à¿Ä²/üöÿÿ‚{|Ný®|àmêO~ÿ´wì¹û]þÍ?µÚ¯ÃÞðžÉ>þÕ_ ¾øÅj?x›áÅ­Õ§Å?øgâwÄ?Ú28uŸ|+Õ?§Ú(¯ÀþËž1øû ÿÁ¼>"øö€ð—ü*ÿøg¯ø_V^ñ7ÇoÙÿâŸÁøD¿àµÏ‚®ÿá5ñÿÁÿü9øµð_ì?µ_ü3ñŸâ }»Ä~&³ø_â/µÿÂ[7‡5_ßê(òƒÁ?±î‰ðþ Iûðï†~øF?Úxã¯ìãûVÿÁÿ`‚zÏÄ_|:ðžŽ>$~Ò_þþØÿ¾ksøGáf¥=¨Ö>üE]b ê~¹ø£ðwÇôÏø'R~Ä>4ý‚> øãá?í??ÀŸÙ÷àÿü¯Føóñ+öÒ¿o?j2|eµøÿ_þÐ~,øgñöUÒ!ý§­ü?©~Óß´§ÃÍGÅVÞ OAáo ü{ð/†<[áŸ|6ñ¦Ÿáy?±Ú(ù‚ø¯¢ßx×ágüÿáoì_û?þßþ3øKñ7þ ûO迾"þØŸ l›ßŠ~.ý¦Þ?ðïì¯û?þÍþ.ý¼b·ý¶¾-ÿmøkÇ´^»ñáN—§üBýžþøŽ÷àæ§ðf/†_¾9ü{ƒã)ûpþÊ¿´wì±ûkø+IJ_Áˆÿd_ø*íÿÿöøû\ø3ÀÚÔžý‡hïÙsö»ýš~/jÿµ_‡¼)à!=’|?ýª¾|3ñŠþÔ~,ñ7Ë[«OŠ~ðÏÄdpë>øWªO´PñÅñSöýºiƒ_ðTßø(÷ƒ¡ø?ðã'ůÚ|~ן²—5Ÿø'çí#ã_ÛjëNÿ‚LÏwá/ø'­ï„üû@ühð^‘ð7ãÆ#á/ˆE΃/ìñÅ^6ð?í%âhõ‰u/ üBÑ>ü.ûÿö¼ø…ñ/Åß?j[ÙÛöŸÐüãOƒÿðmWÆAà½Cö}ø™â?Œ¾Ó¾ÿÁZ~>þÑ<ªü*øm øóÅ:¿ÆÙóáOˆ´¿|kø_à[_ø«ÀÐ]Z½å”öÚ–“s¨CÔPÌ?k¿…?¼U¨x;À¾ý§ô-_Mðý׉®/>5þÄ_¶‡ì×áY4ë=GJÒæ¶ÓüuûF|øWà[Äs¬ÙËká=/Ä7ž*¾Ó¡Õu‹ãHеËí;éú( Š( Š( Š( Š( Š( Š( ä þVÿ”Y|ÿ³ÿøYÿ¬ëûUQGü­ÿ(²øÿgÿð³ÿY×öª¢€?¿àšòn¿¿ìÿÿà¬_úôßÛ"¾ÿ¯€?àšòn¿¿ìÿÿà¬_úôßÛ"¾ÿ Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ä þVÿ”Y|ÿ³ÿøYÿ¬ëûUQGü­ÿ(²øÿgÿð³ÿY×öª¢€?¿àšòn¿¿ìÿÿà¬_úôßÛ"¾ÿ¯€?àšòn¿¿ìÿÿà¬_úôßÛ"¾ÿ Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ä þVÿ”Y|ÿ³ÿøYÿ¬ëûUQGü­ÿ(²øÿgÿð³ÿY×öª¢€?¿àšòn¿¿ìÿÿà¬_úôßÛ"¾ÿ¯ˆ,ñŒ|Yû(|ñмYâ¯ê7:Lj|Mâoë¼Õõïkº½å橬ë:¥åÖ£ªj7W7××3ÜÏ,­Ïÿçà–_ô?Øÿßöuÿçs@Ñ_çà–_ô?ØÿßöuÿçsGü:wþ eÿHÓý€?ñ ÿg_þw4÷ýðü:wþ eÿHÓý€?ñ ÿg_þw4çà–_ô?Øÿßöuÿçs@Ñ_çà–_ô?ØÿßöuÿçsGü:wþ eÿHÓý€?ñ ÿg_þw4÷ýðü:wþ eÿHÓý€?ñ ÿg_þw4çà–_ô?Øÿßöuÿçs@Ñ_çà–_ô?ØÿßöuÿçsGü:wþ eÿHÓý€?ñ ÿg_þw4÷ýðü:wþ eÿHÓý€?ñ ÿg_þw4çà–_ô?Øÿßöuÿçs@Ñ_çà–_ô?ØÿßöuÿçsGü:wþ eÿHÓý€?ñ ÿg_þw4÷ýðü:wþ eÿHÓý€?ñ ÿg_þw4çà–_ô?Øÿßöuÿçs@Ñ_çà–_ô?ØÿßöuÿçsGü:wþ eÿHÓý€?ñ ÿg_þw4÷ýðü:wþ eÿHÓý€?ñ ÿg_þw4çà–_ô?Øÿßöuÿçs@Ñ_çà–_ô?ØÿßöuÿçsGü:wþ eÿHÓý€?ñ ÿg_þw4÷ýðü:wþ eÿHÓý€?ñ ÿg_þw4çà–_ô?Øÿßöuÿçs@Ñ_çà–_ô?ØÿßöuÿçsGü:wþ eÿHÓý€?ñ ÿg_þw4÷ýðü:wþ eÿHÓý€?ñ ÿg_þw4çà–_ô?Øÿßöuÿçs@Ñ_çà–_ô?ØÿßöuÿçsGü:wþ eÿHÓý€?ñ ÿg_þw4÷ýðü:wþ eÿHÓý€?ñ ÿg_þw4çà–_ô?Øÿßöuÿçs@Ñ_çà–_ô?ØÿßöuÿçsGü:wþ eÿHÓý€?ñ ÿg_þw4÷ýðü:wþ eÿHÓý€?ñ ÿg_þw4çà–_ô?Øÿßöuÿçs@Ñ_çà–_ô?ØÿßöuÿçsGü:wþ eÿHÓý€?ñ ÿg_þw4÷ýðü:wþ eÿHÓý€?ñ ÿg_þw4çà–_ô?Øÿßöuÿçs@€?ðz·ü¢ËàýŸÿÂÏýg_ÚªŠýþÿ‡NÿÁ,¿é°þ!¿ìëÿÎæŠÿÙwebmagick-2.02.orig/doc/fig/montage-sample-framed.jpg0100644000175000017500000004734607306037341022354 0ustar arafunearafuneÿØÿàJFIFÿþ6 Imported from GIF image: montage-sample-framed.gifÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÂîzÿÄÿÄÿÚ ´ €Ä•<DÀF$©˜–2Üè•%ŒÀ —ÀËÆ…Ð’#JXÒÜ¢ÀvD¥%°ÊK}ÃÓÂ(ðx;3\–2@5²Tä É ü‹(`_Kè#’TÈÈ5²´[L¤¸Ð¢Ìr?™˜ä±’¨p<=‹‰ŽŒP`h#ò,¡}/§…<@º ‘ kel¶Ip/ 68;!G£Ã‘á™.K ¹0zr:#ˆQñ>bƒA‘e é}+ÅlT’-ÀddÙ[-†R\ èÈtv$5ŒÇ†f¹,d€kdÑ]'ÎŽJèø›1Q È²†ô¾$1*$YÀÈÈ5²´[L¤¸b<•<EƧC£3X—2@5²Päxz0"Ë ÀÐGäYCú_O ܱ’âd™‘ keh¶™Ip-ähøv&4$ÎÀ Ì b\ÉÖÉ1àHހł># Òúp|HÒÎddÙZ-¦R\ P‰Ñ,2ƒ"d ,K™ Ù$="É@ü‹(`_Kèdv?8 @ÖÊÑm2’à\FC± àä“‹ ˜Ĺ’­“BGcBDðj<1A ˆÂ†ô˜%H"À$83B l­Ó).ô@èPÌÀ—%Œ lž ‰Óü‹(`_KèˆÄD–# @ÖÊÙo#ǃӰƒ°9:„,„Pã€8;9: DGãøÐ䀊‘p+¥ÌHS“‘q¸#c’pÎ7 ENÎDGcQøÔp;B‹ GĈÄ!f€ˆ°MÀàÄćG€B¢"À"0™=À=ó¡#Ð<Ð<<8=À=ÃÒxh€§€c"`d€§€ƒaàˆž‘ÄÑ–ŒË±u<"ŽÉ02òºŽ‰s)5dDTì TÑÅÒŒjet¶™HȾ—Ò¬pK§ F@—¡Ù,d€¶Nò@è‘!ÌtÓEâœi…l¶HȾ—¢ t?@ Œ/C²XÉ lr1$ˆâXtašv;&ƇGbCð Ñm2‘‘}-d€¸Ä|dd z’ÆHkc’²"[dz4Ó±Ù(z*z ;€ü€+e°ÊFEôµ qaðô Œ/C²XÉ lXŽp| i§c²|à†çbÀEŒ‹ VËa”Œ‹éy" “ +Å€ôÈÈô;%ŒÖÇG"ä¸(¦ŽÉ³Ãƒ°8;°xZˆ2´[L¤d_KèÄvvi$F@—¡Ñ.d€¶;%$Á@ 4ìvO€ÄàfMZ" áV‹i”Œ‹é}€àLDtF@—¡Ñ.d€˜Nň‘ÐôÁ@ 4èxI Š‘cÑÀÀÐrGÄZ-¦R2/¥ô¹Ñ*6½‰s$5²xÌM(T ÓNÆä(ÁÑè œÒ´[L¤d_Kè ÎFÀ"fä zæHkd©\I00PM:# ­•¢â ã!P89 Ä+Å”j;=:;8#ÀôŽ$ÎED…@@PD¯—!±vpzpr:#ÅGÃC¢h¯–¸ † $v£"H~#`bFH¡ÀЉŽ A‰X†ÀB 1%D…@ÏN€HT£"pLð@ððOPàð@ððO€ðð@ððOWÿÄ-5243 !"1#0$%ÿÚJ[&.Ãa‹°ÅØbì1v»]†.Ãa‹°ÅØbìArSÈSÎ °ÅØbì1v» ]†.Äa‹°ÅØbì1v»\ˆ#©/¸µFB®Ãa‹°ÅØbì1v»]†.Ãa‹°ÅØbì@ë±ÒÕöÂý 8‡èˆL±ÛâŽßvø£·Å¾(íñGoŠ;|QÛâŽßVòL¢ÈœŸn§á’èÉtS"³"ÛâŽßvø ãÇ7{|QÛâŽßvø¢SËnfK¢–W)”ï–°£Iäº2]D&XíñGoЉ ”5Íöø£·Å¾(©¨ãÔr].‰Í¥¦Bý ~× ýÏÔc°˜ër[djmÍ8‹páÝÁ>ÝOÃJ.Òr#ÈBŽòœYrYEQ¾þ³·GÙiß5où§ ë)ân{_ç;ZÖí¥OÀ/ЗípßÚù4¦•ÒÔ˜fkCιf;×ÚE¸pîàŸn§á¥8ϲ¥$„óý–’ZR’Jb‘%—KM²ñ>Bvà(û-;å­ÿ4á½j D§ Øy KˆÒµ»iSð ô%û\7©¼’Wû¬!”$æ“W˜qFñ0‚8¾°â-Çwûu? )('(ĵ d5ÌÜq@¿ƒZ \Q*:Í·DíÀQöZwÍ[þiÃzTž38l&@J)W Ö·m*~ÏB_µÃz›ËJI ²%ò)+sõt7ú<8‹páÝÁ>ÝOÃJ.Òµ“h~SÑPˆë.‘›,ò61—}žK¢và(û-;æ­ÿ4á½$%´L¶˜òZLd³ šn~•­ÛJŸ€_¡/Úá°òí²—-µÌŒÍDG/¬“ðÂ’JM·PÑ’Çn;¸·SðÒ‹´¹ûº”]ÂÜiºJŽÖ“·GÙiß-où§ éýúVý=dØÂdµ VKBµ»iSð ô%û\6%|qÒjK æëˆëJVN­L>J%}œE¸pîà^åOÃJ.Ò^æ¯t¤FE¸ÚNÜe§|Õ¿æœ7¬fxL"DBR:ßQCª Öí¥OÀ/ЗípØ›øiÕó+`™:Ú\y šã_í˘æd#%Ô§ˆ·ÜíÔü4¢í*ýejM–5¸ >ËNùkÍ8l&k¹†Ô‡BÔ–i’ädŸLèç%¨s!ºÖí¥OÀ9èKö¸lIc!¤°ò’DËÆJS­©W9<…)¶Ñ"Ü8wp/r§á¥iZ Ä4á¨ÉæŒIt¹‘r#Q$‘%§ NÜe§|Õ¿æœ6¥©ÙH}Hv]9™gÖ#¿ŸÂ¥º°ÌD¡ÊÖí¥OÀ9èKö¸oRi´©m!aKiûx‹páÝÁ>ÝOÃJ.Ò|ù! dÂFÓ¦¾™ ‚CXy‰Û€£ì´ï–·üÓ†ôu¤<Œ"LyKiÒµ»iS𺡪OYÆb,@™Y^H¼‘y#!w’/$è1y æ4H‘·#ŇÂ÷$¶—Ú飵ÓC6cµy"òB¤!y"ú ^HT¶/$;œ§SO¥¬í1;æz3¹Ú飵ÓDf"Ä’/$^H¼¹B2›'/$= ‡{]4vºh¨+©°^¶sJ¡-j[ 5>]NY%« ÿhæ–£óQJ4ÝÕ>ÛÞA„š‰.š5»Éή³3JÔN,‰9ɵ;Ôm>® Ò•Ñ †Ýøiß2¼¾Ç:ºù›c›‰ŽjéBP]Ãì›ðþB¤´Û9Œ Æc1˜ÀÌ`f03Œ Æø·3Œ Æj%Izc73Œ Æc1˜ÀÌ`f03ŒIŽ´¦Ld'1€ä¶M¸ $¬æ°g˜ÀÌ`f03ŒÈŒàÌ`!ø­ŒÆc1˜ÀÌ`IÓ‹)4â¶1[­ŒVÆ+c±ŠŠØÆlc61›­ŒVÆ+`£ L6¡ŠØÅlb¶1[­ŒVÆ*+c±ŒØÆlb¶1[¨ÂvÌñ[­ŒVÆ+c±ŠØÅ@Ålc61›ÍŒVÆ+c!=gEÑFtQgEÑFtQgEÑFtQ&de¨ßëóŒ°3¢Œè£:(Ί3¢Œè£:(Ί3¢Œè£:(Ί3¢‚–ÂÓËλ%†WgEÑFtQgEÑFtQgEÑFtQ;)ù ô%-e&냇ÒO f±ŠBâ¡)¶µã01˜Ì fXͺ×÷"÷*~\\\–›r˜¦#¥,¢+íYÕŒÀÆ`cÇ\\\Kÿ‡NùkFd.¸.¸.¸.¸.¸.¸.¸.¸.¸.¸.¸.¸.¸* $4èKö‡ é4œÉa…Hul¦:¿ekv;âŸn§á­i%¤Ô‡ 4ì48P}AhÞ¨k`§|µt)ÃÁ–0¥Œ)cXÁ–0eŒcXÁ–0eŒcXÁ–*~~„¿hpØR‰$ñ´Æe\Ê)ÿ޵­ØpïŠ}ºŸ†´]¦Dt’á)ŸÃo¸Ú‘a´Ÿ4ë`§|Ǻ­imMäò´¥~PN))ÿ…OÀ/Зí žÑ· à ýfkZ݇ø§Û©økEÚgÌ(lsY²óÊeµC[·þÈ;;å=ÕöIä!6BzHÓÍKm*_ÜËÊqáSð ô%ûC†Ã†qš…øí7i¡#õÝk[°áßûu? h»Lö$œ®t“±cH¾¶ÁNùu .¤$ù¤Ï‘~êQ(ùý’ J8èSN Ÿ€sЗí B\A°Ãi##-2Š3šV·aþ)öê~Ñv™KKRaj3±¢°i\϶ÁNùuæc¨Ãßê®#‘™¨ùºÜF:ŒTæ.Sed´GÌTüý ~Ðá½åy(J D°ÚäiZ݇ø—·SðÖ´F+ËÑÿós탰S¾SÝt¸®²t‰«kRËŸ/²\ÉLCŠrÅOÀ/ЗíÑæî6Ó¤âÔHC4·¥kv;â^åOÃX)ut$Ëi$ÛÍ;¤‰qú"-K‹öAØ)ß1¥) ’L)¾F×.T})T¦Ò6ÚI)ÑSð ô%ûC†õ”m²µ¾©/õ-@žhòyYÆôŠÖì8wÅ>ÝOÃZ.Ò+%Ê«:ït&ПºÁNùj2ÿ¨¥¨¥¨¥Žÿ$}C,}E,}E,}E,}E,qó?¨¥¨e¨¥ŠŸ€sЗíÕl¶âÓm…6•ƒŠÙŒbHb)¶íkv;â^åOÃZ.Ó"í…GŸ%É Ê*„I?÷AØ)ß5oùÿZŸ€åÕÄQb nÓ"ðL¢R¯ Ã#÷Ê"vð¼Üwe ’‚i¢O¶úR¥Øˆ,D"--¦ðrU²L¢R“#¨¯ÈéGD;¶" ½%ò­¶”刂ÄAb µ®Ü2vÄAn»b ±Xˆ,D L$³I¨+©°^³Ÿ–­ó‰lÒÇ[ý.’Ž\Ôƒ´É/©-+‘6xÉM‡­šeX%è^ãÞZH"6-u¶Dhl™¸ž— M®´¤—Ñø&“£¿ ;æW”‚3iÏË&„ÙIä´®M¶»)GïÑÉ-!Û͵ҹ‰7’Ù¬% Bfü!siÁ¡ÜÁ¡ÜÁ¡ÜÁ¡ÜÁ¡ÜÁ¡—œî àÐi]r]¨5s¸4;ƒC¸4;ƒC¸4;ƒC¸4;ƒC¸4.;eÜÁ¡Ü œÚ‘ Ķ£¨4gÜ9“Á¡ÜÁ¡ÜÁ¡ÜÁ¡Ü —gÜÁ ü¤<Èé.›M‹-‹-‹-‹H[›[[[[›ÐAHJŦŖŖŖŤ ‹-‹ ‹M‹-‹-‹-‹-‹M‚BR ¤(í6,¶,¶,¶- XlYlXlZlYlYlYlYlZl[lÿÄ ÿÚ?4ÿÄ ÿÚ?4ÿÄ>!12"Aq‘’± 3Qa¡Á4Brs‚¢ÑRb“ð#0Cá$SÿÚ?xW·‰^Þ%{x•íâW·‰^Þ%{x•íâW·‰^Þ%{x•íâW·‰^Þ$XÖÕ—šÏÚ¯o½¼Jöñ+Ûįo½¼Jöñ+Ûįo½¼Jöñ+Ûįo2‘ÔUÒðRtñ*öñ+Ûįo½¼Jöñ+Ûįo½¼Jöñ+Ûįo½¼Jöñ*ìmcpµb[ sZ駪ՖŽõÙ}Åv_q]—ÜWe÷Ù}Åv_q]—ÜWe÷Ù}Åv_qMdÖ–OÌ¢"ZÊÁ;YMÖ±y,^JX¬¬ó9™ø®Ëî+²ûŠì¾â˜Øy=`L‹«Ù}Åv_q]—ÜWe÷2k^@Þ±y,¢+­|Ëg²‡8^ªÅä±y(ý8­V¬´w®Ëî+²ûЬè[6 öC°ø•Ù}Åv_q]—ÜTXP³X%!±bòX¼“Ñ!Fž²Ÿ§×¬ %Ó°Uªî{¡~ÆèÖƒêÁ×Yò‡2Ÿò0¬¦ë¦ÞeJ´Ï…ª«&çwžè¤-<ÿ ¥…šá›'\nªÜÙèvΦSó]ÎŒ£ã<…ÕëNSôúÓ ´¤ÖÖ #é½=HÛ9 [®…=e?O¯T²)]ã$FwF‹&Œ{Ã…Ly©2fƪû(gÊÊÊ<Âv²›®œœNUTŸ©´Hª©U@±H]YÜӞ뚉h"FVÑ”ü×s£(øÏ!CõzÓ”ý>´µÐ+À8§)¦Å{RLåri›M¢˜Û9 [®…=e?O­5[7»¹«Ý†7•Z÷~§ZQ°eIí'÷5Jµ½Ò*PáýO°+J¬ÉV«X+I}’ ÛÜ¡ŽŒ7¥µÄºŒ§æ»GÆy «Öœ§éõ¡¹,2kPæSþQæµ”ÝtÁÛ̦Cш¢è­¶5ÂáIkb47A"äáÓyqwôÓ”ü×s£(øÏ!CõzÓ”ý>´å-foFýÂ"u7>®$dñ ýŬF¯oq¢6ÎB–ë£aOYOÓê›ñ…Ÿ©ŠþŒÛ¥XdE £ âNÒÒª? ¶²°ƒÔgÊÊÊ<Â?M×L¼ÊÀ9ž¦UÚZ,×% Íå?5ÜèÊ>3ÈPý^´å?O­9@ˆÖšÏŸŠ0ÛaˆC5Ít@ç9x(O$†F°ë¢6ÎB–ë£aOYOÓê‡Ä·ŽIÝðvü&ÿU0˜×~—z ó7*–›ö Y8c÷j±¹9ú–l(/wsQé,Íœåµ3åe?åa;YM×L¼Êc´8UêD¬d":vwGS)ù®çFQñžB‡êõ§)ú}Sà˜SÕ«zÏÑŽè• ¢.l‹]Y×iF¯þˆsï(Å~8–êî ¬l§;΋6(ÄÓz³¥ºèØSÖSôúª•êø§t®tÄJÕª¦E÷Þ¤ÓÐ$×°—–þ4ÈoÎ2p«çDÌ&Ì©1¡º¨gÊÊÊ<Â?M×L¼ÊªS˜ñžËüU‘oŠlEkÏpR n2 ôe?5ÜèÊ>3ÈPý^´å?OªtvFèÍâ¨] |G ´;ÿUgYR'ÀŠÀÆZ&];–cŒO¤ Ø4IŸ~ ¦yé#þ³è£lä)nº6õ”ý>´Ö h=òYÍ÷©4Hu™ò‡2Ÿò0¬¦ë¦ÞeYz/qa$IA ªj_;&60‡›fnÔ¤Ò×RŽÑT[b™ Ý:2Ÿšîteä(~¯ZrŸ§ÖŠ FñOøM_V3„G‚"±¢Û§Wò¢Ω&“îÕ·œÑlÿú×9£»ÃdÂÊê 3ÉýÝê#³§Q¾ñýÝQñPƽÒ+’Çä±ù,~K’Çä±ù,~K’ÇäºJæ·Œù,~K’Çä‰T‹îXü–?%ÉcòXü–?%ÉcòXü–?%TÄ;&VºÍEcòNö‘ܦnS¯ä±ù,~K’Çä±ù!Y÷éXü‘ªón“2±ù,~K’Çä±ù é™÷Qœ=ò§JÒ´­+JÓײaa–ªt­+JÒ´­=E9S¥iZV•¥iÿ€=Í\ÝÊá¹\ÝÊæîW7r¹»•ÍÜ®•ÍÜ®nåsw+›¹\ÝÈ5­ŸæÕ Á%žÆËR¸nW ÊæîW7r¹»•ÍÜ®nåpÜ®nåsw+›¹\ÝÊæîN,`uQ;–pî’ªö€u+†åpÜ®nåsw+›¹\ÝÊæîW ÊæîW7r¹»•ÍÜ®nå^6Úd —¼¶à@Ö±»zÊ:P*²­ozìað©˜P€øBh†Ø5Þê£4Y<*®Äjé”×c…v0øWc…v0øTf°Õh•ƒPXݽe%Æd)íGYMÖ±»zÆíë·¨.|6¹Æv‘âQqƒCö¡Y#ûB«Ñ­ÝT.Æ ìað®ÆXݽcvõÛÓ]ïÓ;èqËÕcvõÛÖ7oXݽcvõÛÖ7oXݽcvõÛÖ7oXݽcvôДl)ôe?O­Ît6á ÍÊ[–´ ‚cáŒØfnú'Õ³£+ÔßTíe7_RÞe‡ ‹ÂŠÖ͉mOܧ9ó™rl»Ï::G±Á†aç©S¹šÖ4¹Ä\ŠöX߯W²Æþ2½–7ñ•챿Œ¯eüe{,oã+Ùc^ËøÊöX߯W²Æþ2½–7ñ•챿Œ¯eüe7] }OÓê¦âñSlÌ&›%ï&ß0%iŠET7°ÔêFÙÈQ•êoªv²›¯©o2”&Ü;Ô8ϬȂÐ^J²0A¹;zvÈÕ#Í4˜nseV[j‰î¤=Næhf£ê‹œd®çXnfÌø*ÏBβ]ÿð·] }OÓêºh™Æf@û´>@æ™O¾ˆýMôêFÙÈQ•êoªv²›¯©o2«T®]`j›à>&ÌÛ•Z®3²©L¯ £?¥2)só.lìêÃÔîf†j>ªZt#¦V¯zèФ}á׊,ªÛ¨nº6ú2Ÿ§Õ> ¶å½Ú‘|vþäÖwPØß¢ýZz‘¶rez›ê¬¦ëêAŲ̂P]9¹Ö¡D|QžPÞíY5^Ñ­p™Ðð­xÄ:Ðõ;™¡š­w„ Òõ' î#ª[P–K½0µµkX[ßCuѰ§Ñ”ý>¨µÂ`¡“D°ÿë7+)í”íl®ÕLmœ…^¦ú§k)ºúvó+'{Ì…¡E.iâÖ& ndJÙ½Å=ÍaeVJDJþ´=Næhf£ê†jÀï$á)iU´ ”ë$Ó °}ËšÀï%ÞJcAvSâ¼5¯k¤Ô°›®…>Œ§éõ¢ î™o’“Z<)‰¶nkì;1¶rez›ê¬¦ëêAú¹”r§{ÖCðm,£ µu¡êw3C5ZIsÝ4÷JÄÑ6­³&jÛú¯ÊÄGµÃ:W‚¡ºqs[¸V ×FŸFSôúÑ!c¯Åq¸ŽãAq¸Z³±8Ö4ÆÙÈQ•êoª?M×Ô‚ÈCíÑX ×ƒÁâHôqé_#DHU«¾R¨Ý*p!Ò¶}XzÌÐÍGÕVcäTæIñ4L¶Z•›z„ÈJv—~*Ñx¸«}Û¨nº6ú2Ÿ§Ö–G÷Á¸i ðòxŽìçÜ&³…¦¯JÞé.ћъûå;‘„çBœ®iQ¶rez›ê¬¦ëêAÛÌÑ™1`¹::S ¤M³7+ѳ­S¹š:f\Ñ¥vpwÊìàî?•ÙÁÜ+±ÉøOåvp7Êìàî?•ÙÁÜ+³ƒ¸þWgqü©ô<þù]œÇò»('ò»8;å7] }OÓëMg°Þ³ ³›5ïoF£Ü'¹8ϺÅg!FW©¾¨üE7_RÞe? —KîÍ@|XpYQáÆFÕþTÂÖÕSï'˜¹1ƒ+¦oëCÔîf‡êõÿ™ºèÜU¹$#­¡{EŒõD–ð€È° Ú†Ñ9¡­¤ýÞ°¬*³òhNqÒZ?àC™uPÚ‚gû$á Zú¢IÚÊmq0-’ö8<{½ŽUY 5£@XPÌ.$È¥<à2;§ê§P‹ej‹ª!9ÑŒ†2™Ì/cƒÀ±Áà Ìc°Pã~Œë—±Áà Øàðìpx ÿ ¢s¨‡þNýÒ½ŽFøpf8÷Bö8<{½Ž^Ç€'ÖÈ¡µµ‹º0¦rMð,jƆ§ ¸Y{oUD*£¤nÔ¢ÙhÿÅ¡Ÿé-`¶®¾©µáÿ¦NªÒ.·ùØžâÒè](Í—€ÎL%‡:3ë|9ÞW&µÐóCŸŠxÙ›©dõæ!â{óVd'67@æ¹ò”ßfŸU•Umއ ÖÂ,¶Ý õXê„2îù™žJt1[¥wû;ìt‚ƒ^o÷>öèÎÿÊÄVÊ\ ö6~K&i…&×3h‘þíP‰k¥+¬áœ›”’ýÏ$9· ïüOqit.”fËÀg(Ms ºw“«9: CšãÒU:m‹,k ts‚$Áõw'ÄèÄê6N–º_ðšµ`œœÓ¸…ÎkÚ×Ff‹ešŸš[¤›Ñ.ý:æ ޤ¡»†Å™ ÍÐ9®|¥7Ù§Õe“dš£¶Þõ „a´µžíZÖ™£ XÂÆÕ—Å!©4E´3:~'úï% õ cõíÎò¹DŠ`ÖmúïŸ÷ÁeY•§JÍ9Ê«Þà‡ÅCa™“à°½azÂõ…ë Ö¬/X^°½azÂôbF¹½ÕDÖ¬/EÃI*çw,/X^°½azÂõ…ë Ö¬/R‡´w5 ,/X^°½8IÖ„^ã`X^°½ZÇ‹ Ö¬/X^°½azÂõ…é¥Ð‰-¸–‹¬/A :ý4U6¬+ °¬+ °¬+ °¬+ ­ °¬+ °¬+ °¬+ ¦™ °¬+ °¬+ °¬+ °ù¯ÿÄ(!1ÑðAQañ q¡±Á‘á0ÿÚ?!Ï‚åÕ–ªËUeª²ÕYj¬µVÊ«%U–ªËUeª²ÕmÊ«¥S‡™b˜˜‰gÕeª²ÕYj¬µVZ«-U²ªÉUeª²ÕYj¬µ[r¨´N@%0î‡!.$Ã$M¦™ú¬µVZ«-U–ªËUeª¶UY*¬µVZ«-U–«nU†ôX«©öM6Áf 2]ôlº+•ÊŠåEr¢¹Q\¨®TW*+•ʈdy18êtDÝä ‹€þx(\G'Õl°XÀ b+•ÊŠåE#ųW*+•ÊŠåDÖñì 2¶ PÁƒ!åYØ£"Â1K`­‚ï£`x¥Ñ\¨®TN<ÎÀ‘,€téË©«•ÊŠåDx51œ*Ø+`™d‘Å6…O²kÔô9¼˜t)²óºÉ8 øN8‰£Î|øˆ#Ê@ƒ#+À}äzò³ñ¬iÈuy&‚gùwq|<  ‡dœ±!,ƒ’Ûˆfu ðß`$hÕ‰‹Câ_ï÷„û&½OC›Àè&/E¡l °È# 8P$æ`ž .;¼g!Œ$ÆË”x¼D€€LH €·"+uŽEŠd-¯Ú0,'(w.¡ÂÛˆ`žäW€åüV<@q4Ëì¸9M.s=à>¨åáO²kÔô9=±bíÔÈ&b:-¡åACž""˜ŒÃQø?Qxò˜Îz¡âK° "Ì@ùå AÞï%y I¿Q4Dùw¯ÆE] ™N bL“'€e¡=, —|T¹Š@ßï n!Ž!r+Àrü»p~#ÀMXÉž†@é;GOå‹$1Øùæ{À}PS,šõ=>EÉL"Äò}A‚ƒÀv vE„ƒ/àö®Ï” äÞ}DÁûï”x¼Kór¡”""86ƒÊ1g"X"`A€†l±xØ2t8ƒ‰YN!ùÂÛˆ`šäW€åûo P “ˆ“º{‡dÌL^rZ^‘ëQ@%É-$OÌ÷€ú˜©öMzž‡09?L<¦FDã#‡{@@ÀFH†,aÔšì=™±dAÀÔ@ùDC@P„p@»‚«±†0ÈB0ÊðyÐÈy´‡éð†×qŽÆe‡Îk&Gœ= b$ù¸Øsq ob¼/ÈÄ2(f- fa(¨7PgdN."ŽÀÂ)ÌþdW¼ÕÝO²kÔô8yA2.ö/ñ\²ÊfÂ'¢ â"ƒAý@Ìf$$g±WŠÂüÄ]5^ï#Ãù0™¬ÑműêÜl9¸†š.Exo¶úG ÄåÑ1`S¤1ÏFAé¢L… y^ðxO²kÔô8y»Ëà¨HÏõbª$úÈ[$Á ä^E÷$»4õ0P%ebh˜Î©áþ"™ÄËþÜHµj¼ÞGµÛ>³y/™Œ³ä°æâ¥¹à9>PH¹4ߪbØQÈahOˆ>P~–7ä4c8d@øaýCë#p@h7gÈ÷€ú˜©–Mzž‡#"7vÀ¨Í ÖdÄ3DˆIAWø‰½”±¹ˆÿˆ¬&QOƒÈ`{)ˆ£GbÓD†lä Béªðy0pdDÁÀ¦¢0á'H„@‰0aŠéÖj€À‰IÁÈៅ‡7Á¹à9>ùâ/ú€Z8QЈDâö1Cé"p$ƒ»Â3MÞØ`ymî~e:™ È÷€ûÂe“^§¡Éúg‰‚!Ýú™Ÿ(­W€ûÈôDAÔ@oÍPï š@‡Jh›âgúЏ›õ7B.ä:Ï…‡7Óo¼/ÈC: êz”p±À¤üÔš€æ{À}Ll"ø-ÔéÞdü+®sšS:£Ç˜‚ÇÈZ  šFD@`ý… šÞD3+A"É:¤$‰‘üMDµÇTðtKÐîtWMTŸŒáıas#ÙËâV‚h ãBLIaä­‰&fkA"t$QòZ梣4rÇBˆ@ö&è]dÊèPãÔè§^Hä–wpx–-€×9Í)V‚h&‚h#:#HbÁÌ5ÊFkA20`Ø%‹ÐòϺb¼Úñ¹!ˆ6n®yöNcˆ3 Ö$ƒð›Ü„1Âi3âècðY< àOuAì“þ¢Ÿ^A8râñøÃºhÞ”"Cúa hD ‚AFAw@I”b¦b Òt] YIàÂorÇ ¤Ï‹¨*âqLɱ9h>"ÂàxuÈ ³b0‘šnÈt™.&C˜™‘‚¿ àÌ»§Ù@ØEw‘ P›‡m4@(ñ #¢áâJM‰Ì @„‚ zd xÃM3-S`…ɘB rìÃñÈœyFaÝ]2S/¼÷,͈ÂFiºlH)0"&%ŸŠL›Rw¥Üï¢+‘Ûâq-$¢Ëh ;rø/E:LJ:¶tVΊÙÑ[:+gElè­³¢¶tVΊd\@ ճ¢¶tVΈ…»˜ VΊÙÑ[:+gElè­³¢¶tVΊÙÑ]ú"†˜‚-Ÿ $Fp$ö(—梶tVΊÙÑ[:+gDH@Å€ÄDJjÙÑFDÌïúb­³¢¶tVΊÙÑLNf¨"͈1Z'ˆ—J¸Ü0e¤V‘Zeh PiÄfЦH‘c¢x‰t«ÃfZEi¦VZæŒÁÈÍ"¥·@ƒ­ÄK¥\n2Ò+H­2´ Ð(â¬tLDw$u[æ‹}Ñoš-óE¾h·Íù¢ßt[æ‹|Ñoš-óE¾h¥ ú(ó)ºŽÅ¾è·Ýù¢ß4[æ‹|Ñoš-÷E¾h·Íù¢ß4[æŠ0˜IñSò1VC-÷E¾è·Íù¢ß4[æ‹|Ñoº-óE¾h·Íù¢ß4Yð]bàû& «ÜëC¨Áܶ**bPz Ð„sXBÌl‹b­Š¶*بí¡'`4–çO7=Dí`ßUá>­Î·:Üê?lŽIÖL!aYH1xuM >"lU±Q8^nu¹Ð‰ñ ɘ‡ÄÜŠq„D.ç[nu¹Öç[nu¹Öç[nu¹ÖçCœˆ…AO²kÔô9<±q @pýMA°ÍšÃñàep3º€Š ¸8ÿƒÈ«À}åxˆ2Ã<Æct#Ò#@×2&ƒ?¾¡„BÝùrÙØ¡÷Ã>'¡ZŸVžÖž©ñZŸ©ñZŸ©ñZŸ©ñZŸ©ñZŸ€ú›B§Ù5êz}V$Á€†Ç1LG<p ÅÀpC‰åixnw‘dex¼¯Dr‚dDAG¦­'r&P.œ×™1Ž2'ކÙò` ,4åÊίáàÆzdšÞE"#™Ú„ÓÆ«ÐÄ÷ÿ÷„û&½OC×f@ÐÂ|ö,[âì_?ÁäUà>ò¼(NXz•ƒœcðsD"s…åÚ-2ìÈØÔàh` Ý 1NdgÍ”'¹ EÄr€¦1ŒG‚TN šb;`asd:b‡€ú£—…>ɯSÐãç¨ Ì³Ra0w`Ù¡Á™Äð“_&}‡² ¸8󼋼ÞWšÌä†,J‹¬ËþΰŃŸJmò4çÊq ‘âÆ¹kà@pÉB‚Œ1SÁ‘(®¢¤Œxxª e“^§¡ÇØ ˜„å¸HQn£#N ČӳèÑO™äUà>ò¼/õÄbiwî\¨"Ñ™ ˆõL ¸—çÊ\æœØˆ-ʤDQ0Çú颥nYÎãOuˆò[ °rÔ(½K~©Œq©À¶ˆïYÀ¶,OTdËÀ}LTû&½OC“ÅÈ‚d>¿ÂÒ:-b(ÆÃÈá•à>òB”Á2ôï?Î$×!ï±ì}óå·±ä`@È5ªb äB91 Dê a‚-.XïŽÐ@” Š´KS@ððWu>ɯSÐäòÌ’ -d.`˜á%uÉä pr'œÏ#tÕx¼ƒ`](3ª6H È¢€FCŒ¤k!Î"A@O€,al³EÈð`HÍY2*z†$§Æ»š9Gq™A¹D`rŒ…„zàƒÉÌ|-Ñn@<Þìšõ=_7K "hiñ5Œ 8ìÈ|T@n`Ž1tRCv£HpB”×mï¶|#jÕx¼¯Mæ $Ã"› #˜ aÏ”¥¹Y 0‰#ï"Å‹#¨×-,X±ÃÔp ]€üÏõ1S,šõ=_ †"È¡$Ìʰµbèû@€4Kþcxôäy¦«À}å{FÚ.…ë x›‚Ý&HÅÕ ñÍÏ”#7"¼û|Þ sD»¢Y”œƒúB½>!éŒøÎŒ•âÇ"çW:-˜Ì€Í> .›0 |+\èž}ݓȎe>p‘‰Š:IßZµ_0&3W§Åz|W§Ä/Àì®tœ93ã Œ•âÇ!úld,êçSkÓ$ècdK³õc'W§Åz|DÙâ <ÛÀ§~ò,w’½>+Óâ½>"9Œ‘hK_%6[Zéñ¥6[FZ•éñ^Ÿéñ^Ÿ¢D€ÑÓò¡9Ïã…š©…çÕ$1‚† èbOÙ‰‹É0 0&N1y¤@ô8:Ô)BLÀ“]‰±¨%„ðF8n1‹ˆ¬É#Ý4ÙµŸƒ€ аü8æ=TÖ'~h»äÈÍ6£¶ ¹1脎æfq²ÌC ‰&d´ƒ:bs‰ÿ‡ã…ÓU'ˆˆ„ÇÆD"Fc'D#6f20: vbÉ$ÉŒ˜hƒÁ1qѶ“]‰±¨%„ðO%Z¬f…ô.:¾©º Äx@†Ð"Ñ8qNˆ÷û÷Cq1èÞ8Ý2S¯¼òqÊrÅˈ :÷E0Uʼn ‚1h˜EY8cy‚ÄÖ'~h»äÈÍÑï,aˆwˆŽƒ(G¤ dÅ¡ÃBœåÒDáô.LnqtYiÛLédTâ à~“ÅE$ÀÀIˆˆ21Æ&š.§8:ËÂH,ð^Šb†èNE° ­€Ul«`[ªØVÀ*¶U° ­€Ul¨ W[ªØPe#’~€ok`[ªØVÀ*¶U° ­€Ul«`Gæ"ìý[ªØVÀ*WÈ$*„°NòŠ ÍVÀ*ƒ°§!1ŠØVÀ*¶U° ­€Ul«`[ª-dsZF `[ª!ŠŒ V…Eh`´ L­ž¤jZE¥pð!¨ã¦Ì´(›ú+C Zeh”óý RÒ(•+‡€Ð ñ R§F.IÕhQ7ôV† @´ÊÑ)çú@¥¤Q*W¡Aâ‹Ó'ÿÚ €€"&I$’H€I ’H"I’"I$€€ @@ €$@$’@H$Œ€$@H$’È€@$@€@$H€€ @QH€$’@ ‚H$€€@@$‚€@‚@‚$’@ ’ ’$HII$’ I$’’I$I$_,²[d²_,²[d¶_,²[d³€I$I&I$I€I$I&’H$II$’I€"$‚" $’I  $‚   ) H& @  " € A@"€ H @€  IH ’H& €  ’ €$€I$A" @"€$’‚ $‚ @I%–Ù,–É%–Ù,’É%–Ù,’ÿÄ@€!PÿÚ?ª¯j™ŽX_ÿÄ@Pp!`ÿÚ?¿` @ ¥?6±`Π0À€(€,AX3`½ÿÄ(!1AQ aqð‘¡ÁÑñ±0áÿÚ?i×Ë‘ vàX¯ÂWð•ü¥ _ÊWð•¿>Ö·fî&5ü%T!‹¢¿„¯å¡ `Œ¸&m½êì(eÁ." IW+2Ë+uU•ÌÓÀ·_1ff°åìhªØçKÔ¶AFPÓ'“ÂÌNYb(컸q@ªuj5®ˆ-lçÜš8 9\à“ƒµ ÀèñÚ6©eÜü<1±¨k.±<Ä¥r…—/•Â…Þ¨™‡›Ž„¨N ¬Éå$òáÔÐDd¬hu¨1VE&dm—¦•/IÕ ÀLœìsýZíxÈ–£Ì&ÈÂs+Ѓs‹xô„Km=Ji{$0s=”h[‚ÅØÒ¡d[”ÊÿZZAíH$äݰ¨‰¤h”'gW#)`FúöÙwpä‘|ª›ì·¡``-ˆæ= ´.'äØ(+½·«6",»@˜çÄwhÚ¡ ûÿÊí»pFÉjóÚŠ Eô"ôQº€ð9ä,-„ϯö˜ÙU;,êúòfÂèŒ.P< @²ºÌÑ™9Ûc9½ÚípNk0¼Žn*[(¢@±mHÓ6š">©a€$ çIâBÖ-RuøcPw yÒFT–Wn™ÂîÑ0J.¨p3y¡µ—wx! i"‰/ERŽ lu"¹jÐo Þ@$ZšîD+Ä*³m“~#»FÕä>•Öý>1²ë®†îÃÍ‘¢®d]\úÓB0MÒ >HÐgR —ØZš%ÅÚcçð(ñh'‰J Èšy:ËΉV±#,‡.U[à&M$S'«]£n ÄaÉ´0n ÖÉà`&V±+Ì4£cÀNñÍP\æ1¥KååÃK‚$è<@ŒÎs‰·¹ñ]—w=pÈHÐd{`„О0eÛ’bΔڀæ›I©Nâ©êNL1ÑÛ„îѵ`ÙVÝŸ§Æ6±1 ˆÂñ7 Hã@ô}-1ZzÌx¶£q6ZN…r•÷ k `ÛfBÂ|Ù`Áhu4‰O.œDÉ™¥v¸'‘!‡Y‡þÉÒa3Õz,¡/¬ñ2ô‘š;.î,½Á`,+7]oDÌ#—BÊ]P“ʆ PË*t»Ò”áƒDBuÍ»ÂwhÛÃzöÇŒlØšÍðIç!ý¨Ð”@2ˆo” ƒᦖ9•‘‰¦Ý€fåDݹ”¦ \)‘ÜcÚœ$/;ý© ,šê’j»P  "+Ë1xÀø“&ƒ5ã<éÚ6à|d}çò=S‚z“’æ xÀŒ”µŒÑÙwpfpXhõ«XõŠg u¤²R•›iMJ`£¾«Vn-ºGgšÔôã¤bk–=t œbmKº0³ÀwhÚ¼‡Ò»nÞ1±Õ¶̓l/8¡W’ÄQ ˜ÌBò¬!0àaÒ‰ŽÀ‘TRÎðDa¦ÖadF$5 º„EvÄâÃ-Íàð}ìÙTåc^t¼êDóà&L¶t¥Ú6àœâI  Lƒ¸ƒåVÞ)-ê¡¶Bñ •±{´dc† ôXŽ’éAp`` Gz^Í£Pt-Øð‚2[ŒQÙwpa•VÝw31FAÖÐÌ‘¡¯˜©²DÉÁæÒ…U»ê!P°[ÐÉÁI2M%z>UÀ­ÄîX “ìYàäåv¼=·nØ™~ϫ͡JB°/ ¬Á—ww›þÉ‚þmúÓ´mÁ;ÆÜé<¨Wá …H$¹]u¡íM2R áVü¶¥)E€ÆÍÒïB¥Öƒi“Ýh'6@q7LJÂDÅ36=H¢cw™Ñág|çGeÝל6DÂ%ÄܨS[OÚ@齂éD@¥²^åÝè™#»FÕ Ó·J×oÁ10˜Ö”Ú J 6Ð+Þ^±«ˆ–7©zæÙvWÙ*ü3î¿ û¯Ã>ê:¯(S‹>·Zü3î¿ û¦ì±AÎDGdkðϺ“.]AÄ6N ¡[U+Ö”=nKE!LJœ»Kê)9‘‘ÆM‹çôð;#û+º-ÕÍ~÷_†}Ô=sn³+n~÷MÔ*‚ÄA½˜G¢o_†}Ö9õÃ=¶gd–ÜÊü3;VK.…£jz¯ÞDY‚#&ha!XQÀô¥bh-9Ìźæmà8w¼½cW,o_†}×áŸuøgÝ~÷Y}àJÁvÆ”Ð.K¡e‹"Q F¿ û­‡öX°ñ8ïŠòJ÷% ŠÆ¢p§öSHÄ©lU-n!t‡$’ôÔ Ý0ó¬ ÂÀ—4¥bvF“ºe EVZ0,­ƒÎh‹×6jð%§Á€±(ØéD&¸,’¤+î €’ ‚6$,£áÈÞšZöoëàÜBéH!%騺W[ܶ&¢p¥D—ðÆ NXAœ¥ºRݨÅ ÀUaÖa5 ¹VÌb »bq 0j¼Š û`yp %|,âQ€ÔÊ$þHT\<ŒªvÃ:½hCn@1MÓµfÔ½‡ß ë`’EØRcа2†2—We®ÁºÍØ£´oÃ-Ò–íF(˜ nª¾%17’ACdÄi"M`’Pl€ÄXba×ÈÚø.)˜D*MDÞ$ ¥Õx@u=(À+”  6¿³þuUUUUUUU,JÁ7%È’@aÜÏUU?ó¨‰u¢ú0ˆŽRB$˜òÿ:ªªªªªªªÙË‚f hÕë6 YUIUUYUVW¨0„ŽTCJ½¥ @\zkV„‘ŒsĪªª¨ëCƒ<Œ0É!kxU4„¦´& ð%‚`UÕ⪪ªª'À† CrºZ™w¨qåC‚;nT„>¹õA²‹”‘ü¥H€u'ùAÆW›ª‡__ÒµfNb#ùYc¨ŸU||«Gòƒf^J}W­ÎOªº/FHþR¬ÃÈOªBã6·Õ.Âd{UËÉ uµèpGmʇ×>¨6Qr’?”©¤ÿ(8ÊóqõPëëúV¬ÉÌD+,uꯕhþPlËÉOªõ¹ÉõWEèÉÊU˜y õM\FƒU/ ËX‹ÒÌ="‡vÜ©}sêƒe)#ùJ‘êOòƒŒ¯7U¾¿¥jÌœÄGò²ÇQ>ªøùVå̼”ú¯[œŸUt^Œ‘ü¥Y‡ŸUzLзÕ3X·UÊBVN±Q¶¢ÍÄÖ­zµj¾x›Õ«V­Vˆ@^¨¨2줬³^«B ·fÐ-¨±µ }Ž)Ý÷jJ8o|KR\.Ue©vX™ô@<Ú‰2*æðrÍbЊb .mæM_RH Í zNh¨LÉDï¥`:O’‚>´LÑ)l‰¼Ù%ï6¨™gX•`çZ\’:ýJ×hÚ¼‡Òºß§†6B¿á‘Y$ë:¹‘˜óo‰° S8ouÌëÂw}Ú‰ ™=ZípX•’µ3Í‹xK—‰£Æ3®Bz/EÇsœM½ÏŠì›xÌP@Ńi_ZfqÀ@D&OB§U¥L¨LÞÖN•‰¹íbtá2ÓíÄX;´¢Ì1$‚!%µ7ðíV •mÙúxca)A°É]$¿*F‘ª_@!ðé0fmΓ˜žfLúòpßv¡šWhÛ‚‡\#«›i¾ô;ý@D4ˆ&ZîÉJP «I³ —ˆˆE}ª.âÒLˆïçÅé#4vMª8íFh81&ú&<…h[-8šØ<‰“€° óùÀn‹3 Z=ÁI,‰»V !×$’ëÖ(,”™@L26éðíxo^Øâ…bþ‡jƒ3¥“G!!’ÌGÍ0…jk FÂg­eàÈLu&Õûˆ™ðf%¨X3¦To£o»îÔAšñžtípÎ@"Ùï\¸bMP*uÄŽ®$¼‹Š‚³¦¶1Ç¥¬f‹×­K•G ^çϪԸ·ÀpãçÏŸ“5Œ¶<'ÓI\ Ï€ÿhÚ¼‡Ò»nÜQ±þ\š“·*.½ m9е…„z sÊ’!^ù55FK{FÔé$˜r‰ž§‰Ý÷jΔ»FÜ3™`…¬ò&ni4ânÄIqµ ©¦Ú£Í °G”UÆ.Œ¢‹zñÀ-Æ(컿۴má]R%!† s¤D˜K¨ ”+WÀþ…އÌLúµÙù Ù*Ë”9®ÏÍv~jã–+˜$Å–àÔØ¦”¸ §œÁÑ®ÏÍv~j#åk` Rl•_`–i*“ P«xÑY³ľ­þmúÓ´& —ÇŸŸ?5êŠNU€Au|ë³ó[ù@€„]1¼leÊœÖ2™2ØŒ1#¨v~kSÀVdÁ\ô ˆÀdD!‚çÓÿ‡NUk|çBƒñdA&uåh¼øŸ>~CÖ-ø$à·¦Å0¦À€ªwLä)°d Ó'S„ùóçãYN}h$ÔM•1ò”.Eã̲æ´;™Ò„véS»9Ž´uhMWˆ°Ò˜µ#¦Â¸¶¯JÌ@‚BúÔ‰“°% œ*=9šÚ`L{tNUÇ ]3S«[E-‚×"Œ¤_d 0ò04…‡ä@™UÆlRôRHŒ„ÉÔªD,d• ò²a`Q W‡AL° 6¨=6V\Y)`H ‘¯>E`²Y'²ôxN]¥õìß×ÅQ™8°`Uà2„™6Ê´@æ©ë+ÉÁbÀšÄ$n±e--D.R‹!mFL{tNUÇ ]3S¬#]{2ABÀ0@!q.&XÁF±oƒ,’$Ø],õ˜gŽl·˜ƒhñì©Xš;FôÔÓe%`]D`•ˆµ0[/DåechB¶ €ˆ»%'›ŠCÈ¢ŠI™8b"R•H€‡:…nÄ %•,½Ñ<,JÒÈ*hMƒ,ˆd,À˜5«A™Z3›’vy¸,+…²FL¶”È’A"¨#î:eÄYp®×’¦ø0³`,]_‡Òš…ŽLL¤e·MÿÑbÅ‹,X±bÅ‘atVn%Co‹% b Š[ûRKð¢o7ÿ%‹,X±bÅ’ue0 Àzp,X°ÿƬR‰H8Õµ(dJÇ„XL€#Á¾B ²â±bÅ‹,Y{«´!”ÜÆÇŠÅƒ]–€ˆMzêzSr^g+yÍ ¦+,|ƒæ‡ 2ý×é4ûP`—›}•+aŒ¾è"a¤£ûYµù´#9ºqçΖfÉ}Õ¤:ÊÔÓ7-—î «7}¯Vò•“1ëFBÒºG¥ ¦+,|ƒæ‡ 2ý×é4ûP`—›}•+aŒ¾è"a¤£ûYµù´#9ºqçΖfÉ}Õ¤:ÊÔÓ7-—î «7}¯Qr2¿|è–_|¨e0±Ycä4<€a—î¿I È÷Úƒ¼Ûì©[ e÷A %Úͯ͠ÁÍÓ>t³0Kî­ ÖV¦™¹l¿uX‰»ízRH'uÿÙwebmagick-2.02.orig/doc/fig/thumbnail-sample-framed.jpg0100644000175000017500000002214307306037341022671 0ustar arafunearafuneÿØÿàJFIFÿþ: Image generated by Aladdin Ghostscript (device=pnmraw) ÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀïðÿÄÿÄU!1AQT’"257aqt²³Òð#6CUu‚„‘“¡ÁÑRSr”±á$34Bb¢Óñ%DsƒÂÿÄÿÄÿÚ ?™ F(­¯B’`+kk€¡ æ`)|®`+qhs€:ë ÀP`*Qµké)ÀW½œÛH]ì :˜[9Þ¶î I€­­®B„€/™€¥ò¹€­Å  Î@ë¬/@A€©FÕ¯¤¤\g^öp6Ò€i™ÊQK¦Sœ£556ÎÒö•´¯Ö#@b¶óÃÿ³û×C%‡‰¹oï\wž"ÛŸÞ¸óÃÿ³û×C%‡Ž­ƒã\w¦ýAÎ\7¦ýO÷/ó€o<=îÇ9œ­é@ýŸÞ¸QMç‡ÿgþåÀ7¦µ¶Ö¸PÞ˜özàÓÚÛzáCzaý6>õÀSyáïÔÓýKüà+½0ýúÏ÷.½0ÿìþõÀPÉáâsoýË€®ôÃÄ[cï\yáïÔû×C%‡N­­pÞ˜{õ9pÞ˜{õ?ܿμðõÿ»åþp·¥özáE7žýŸû—Ä5ª,„órlYC7ßVÝ-pá'/ÝGÉ.!ÖÂÐn“¡€ ,’÷¤ßˈ0z»Y4ÍL6óˆ+³@¥øHâ€Áô¤òYï³O¥é…Iä³ßfŸJÓ “Ég¾Í>”¦'’Ï}š}( tĤ ·¼÷1>”¦-#“Îóé@:bR9<ï1>”¦%“Îóé@:bQù<ï1>”¦%“Îóé@:bQù<ï1”¦%“Îóé@:bR9<ï1>”¦%#“Îóé@:bQù<ï1>”¦%“Îóé@:bQù<ï1>”¦%“Îóé@:bQù<ï1>”¦%#“Îóé@W¦+’Ïsé@:aR¹,÷1>”¦+’Ïsé@:aRy,÷Ù§Ò€ÎRj©¬IoÆe&Y–*)mÇÒrÚìØ›Ç ĉÛÄÓ)&×(ù¢=NJSOh$Y ¼qEÈÐ_( lŸ½6ûçÎDÌgØv|!>J 9®­Qžn³<„NÌ! ˜q)J]P€€³öR¡Ëæ¾Ù_œÙJ‡/šûe~pe*¾kí•ùÀu/BE2¥Ð¶9?N”›šswÛyöRâÕgœê"ç ßÚÝâ:gðþPktˆé¿Â7ù@=­Ð~#¦ßåö·AøŽ™ü#”ÚÝâ:oðþPktˆé¿Â7ù@aë(Âôw•zJn¢úIbJ^I ZíÂr²SÝ9@|ð›4lIBð¥:IÂòÛ,–_Zmp œà3žÖè?Ó?„oò€{[ |GMþ¿Êínƒñ3øFÿ(µºÄtÏáü ÖèÓ„oò€{[ üGLþ¿Ê Œ¨4il ˆf%é2 ¾Õ6eÆÜnY RQ.0}ì¥C—Í}²¿8²•_5öÊüàÊT9|×Û+ó€{)P·øù£ÿîWçÛv›a©VšB[m )J,²SbSlM2M­t^ÿº 3´óÿŽhÞâÄýæ(¼MˆñÀJå=é·ãó‘3öŸO’¨c¬öv£áNyFÇë€}p»è)Ú†…ô>äú€@ IQ ™'AœÅK›¼¶•UJ`¯sTÊðxJ—Ãn!‚ª´¼6Á“L´â¦jJ Ÿ¯-½¤6ƒ×f.SlÀÀk6‘ù 3UæSOe îØÙÙ%Zxà0¢5Úý>™+'=0ÔóŠi¹ä5fJ’.lIº‡ÐÈ€Àãž×¸›ä©¯4¨$à€}p®t€îZçÀ|ïÂQbo|“Y Q¯î¦=N?ØÊÚÅcX dŸ½&ü~r †c>ñá òUÌužÎÔ|%Ï(ÀXúéõÒ×};Pо‘çÜ€Ÿ@aç±f¦¸[œ­H´à6(ÝPøËãl/2Hj¿!¹Ûx#Ê´ÇÛsu¦ð䓵eƒ³»¤îré=׿4¥~V±‹kï19Xb›‡i*J*2í:¤ªaE!G€u9€/˜¥â9<%)NVœ[ju[Œ«]çAQM­ž–ÖGG®Ê×6Ûl>˲®nS L $‘|ìH9q~™!‡ B­W˜(¡$‡¤0²Ró¼dXjmÔŒ <à'ê8º}ª§,Ĭ¼³k–a @ž©Y÷,/± Ž{^âo’¦¼Ò 8’ë¤t€îZçÀ|ïÂPâ|SwÿG 3Ôë&žÕõÎÖáŠ.’x ðÀK¥=é·ãó‘3öO’¨c¬öv£á.yFÇ×X®°»è)Ú†…ô>äËÍ=Ž+ræeæ0ì’Ë 8Rg]p*„$ån <—MHL•:Y‹6’ØÚ6ã:ŸÞjFNyr’ó âu°±÷ˆ IHÊS¥„´Œ«2ÌHm”$nr³Xz=PLüÕ.Ué´ÚÏ-°U–—ã€ÃWèU¬M+W‘“¦ÎnRûŠQ:H +hÑ6ç1Ťb…IU&Ehyàüãî)ù—‚vBÜV¶h #(B©„ægßRM©hS®„§üÆÚa#ÃŒµ/†)m²lJ¶E†·H$øÉ¼N€@ 08çµî&ù*kÍ*‰8 ºÀ Hå®|Îü 5'ËÍkª4ýÁ §¼ñçÇœQr„„÷øà%²~ôÛñùÈ‚ŒûÇ„'ÉT1Ö{;Pð§<£cõÀ º@uçA>ÔT/¤y÷ 2]XÃÓòݤ'¦eÞ· ƒªWòP€•À 1’.Ö—W¨"zZQºj6DšÛY./hh8 2pw¼XÀu•reʵîTB Í5“-J’`’ÓAVH0Zö&’¢ajp-/µ&…ä“×-&Û?^PZF1Åuú\¥Ué:{ 0™ª›ª ‡O¹4 ´U­ÝÎj`sÚ÷|•5æ•Äžº@ Ò`;–¹ð;ð€ÔX”„âI’EÀ(Ë©Lvœ ª{g¸œQvœÅÁ€–I_Ú“w"ùéÿÒ †ã>ñá òUÌužÎÔ|%Ï(ÀXúé€zë×};Pо‘çÜ€ÊTX›Ãu©Šì„º¦ióa>ÈJ´›¸…$X<×\56¼†F¡'S—È̶û|h7·pŽs€Z3VƲR¯š}%µUêÇ$ËJõA=Õ¬d‘÷ÀIPTP’´ì¨€T›ÞÇŠð^ˆ«¶qœÿ´L0ÎCÄþPËgh Zþ-¨Öju •LJ± -.ž½¢²‚«p›f -©“S)¦×ðíAAl&¢Ë Z­r—Û‡ýªú >ïKÑ1Cè©TªjfZRy/¿-±Ô=²e¼³QJlHüÐ|9‹©X¯[‹q2n†œR@¹H9}ãÅœ€Àãž×¸›ä©¯4¨$€@ Hå®|Îü 5%ÏÌŽê<”Àg©ÂÔæõ:ÿ3\rÙÊ_%ïI¿œˆ!˜Ï°ìxB|•@sg³µ sÊ0>ºÀ>¸]ôíCBúGŸr}šÂ·ŸvfSw§MºI[ÒN–Ê#ñ™”­R¥™öÌ‚ÃCiFrU$%=ôØ“gIV3«Ó7ÓÓÒIt’Ȥ¯cFæÀmh ·0‰¨\V«U ô.ÊThÛ(€ÍÈSd©RÂZŸ*Ô³#ü­¦ß_Ôc¨¿TÃtà­Ú PÿKi*9qg(¾p"WÎVL®Äñ™ßÌ¥vÚfÛ{6á± ó[µMqéá0ËD5P“—y’¥ä·v6Vµg’BJ‰'Ž%‡Ž¢ËÖË)~}™vVò¦\¹SŠQ²¶‰¹µ¸|QG¡[® Fõ‘¦–)¨qÇšw"ûª:68†„ž( ‰Ç=¯q7ÉS^iPIÁáþÒ¹kŸó¿ E‰rij:ê5ëSŸ§(*A¢4Îß\Qr/~ä²Día&Èã>r †ã>ñá òUÌužÎÔ<)Ï(ÀXÀ=t€zé×};Pо‘çÜ€Ÿ@ õê»øƒy¼Tªm1i.´s94¡t2MÁ=Ýt€ŠUz$b!Yšr¿ €'BwŒºžÙm„ æ£lÉÎþ( îŃÑÜšRCÍ9°°ÍËyæ,N°h:¬Â[談ç¾Êä¦l’l¯zö0—D 8Åj€ôÎì™i©6Ôâ#"e*î oMÄu5G­:ü†õC%æÚ$äµm n@Èx¢‰(—«IR\‘£ÈÕ4òCjÝäÃl¥?æ¶}vQ¿ Z+ä%$©Ò´Ú%>B^É;N­Åêtá9øÌA::À`qÏkÜMòTךT@ ¤r×>ç~‹b9­5FG÷D~Cü ZhtïÅ)IÏ(*]'ïM¿œˆˆf3ì;Ÿ%PÇYìíGÂ\òŒŒ×X®°wÐSµ é}È ô7UÑB¡MÔT¥4‹4×p䔸ÉŒ;…e0䱩TfVüðBž}÷•t¶¢.â“Å|ó b¼%Pè1/W’,ÊI2Ñi¤M íL‹“´-Ö¤Þk‚póxr‚™dÉ'nã!ýÕ Œ®“Ä`$p¦=iLÓ©õ¦öC”©Æß%Zndì¯î0°B€RH)"à ³è©érTÇ0ÛS;uÛ!io0Ú/Õm–|3Oœ/L’JBw)tí¦ÑWÞLZæ 9í{‰¾JšóJ€âH×HÒ¹kŸó¿ G‰8šd n‹sSÊI·Š.ŽÐëm~ì¶OÞ›~?9C1ŸaØð„ù*€æ:Ïgj>ç”`,`\®ú v¡¡}#Ϲ>€‹VöjØÎDZ6˜•Aª?~“°Øç~l¬JËõšÕ.¹8iÏmÌϬ‹l¶N–RŽcˆ@I’”¡!HJR,@V€¶¨HJÕ)ó­e¦P⊠֗—Haš­U¹ ‘*™“°á·rOtRÂÑñ4ªäæÌœå·d ’ÛwŒ®¬øÄçÃÊ R@IÐê Í"E´4°B’-•ÁÎÐØŽ{^âo’¦¼Ò 8@=u€zë:å®|Îü 5%¿¶I­›ß¨µ¿t@gä/¼[½´?Î(¸ã+-’Úö¤ÞÕ¯žŸý"n3ì;Ÿ%PÇYìíCœòŒŒ×H®wÐSµ é}È ôRˆ÷D|VúÉ÷äåÛÏD쟽P¸€¨Ö ‡•‰«ÌTXš«¦U™Iç¥vÚhW²[A‘µÄ“H§Mtpši„¤È¤­n’âœt‹¢xFÒOŠi³-/.¥©‰vš+7YBv»öÖë€@`qÏkÜMòTךT@ \éܵπùß„¢Ä×öÉ3cct[š˜ ô•÷ƒw#C]„‹,’Â-Žÿœˆ!¸Ï°ìøB|•@sg³µ sÊ0<]`ºÀußANÔ4/¤y÷ 'Ð<2Øcc6ö®W5.ï[k0‘ãëL²€@ *5€‹`·›,bÁ÷/f&Tm@Ù¹€Žt+z¯Škn7î““I!Â8:¬¾­ˆ —€@ 08çµî&ù*kÍ*‰8 Ò¹kŸó¿ G‰}òÌ÷Ñä¦7&»I4o–QUvJÜ0DºOÞ›~?9C1ŸaØð„ù*€æ:Ïgjï”`,}t€@ :ï §jÒ<ûèªBi½VIRQX§&Ùä§YQ½»» Tª€@ >s ÊJ½2ò¶Ze qgˆsÂ23].TZl¢v ‡æ]6êœ*)=Áb“÷è{†çp¶E> ãK›S…Ç fâöÿæU€@ 08çµî&ù*kÍ*‰=t€@ Hå®|Îü 5#Äó<Ê4ýÔÀg¤rl“ ?Î(ºIî@K$óÂmß»ç"f3ì;Ÿ%PÅYìíGÂ]òŒ”ë¤]ôíCBúGŸr}ƲO®™/W’onzŽð›mfⳈñ¦þ0 3²3ÌTéòóÒ« ba°â8ˆþp'f<™,3,I™©¸7P?É.“u¨ýV€•!´4Úm!(BBR‘À Ž{^âo’¦¼Ò 8“‚€ ;–¹ð;ð€ÔX˜ÛM‘b5ëSŸ§’d½ø¢à 36Ù/zMß»ç"n3ì;Ÿ%PÇYìíGÂ]òŒŒë€@ußANÔ4/¤y÷ 'Ðj pëÛ¥ý­Í:\J‚IÞ.¨æ ¾ “—0-6—ZV… ¥I7qƒêm?P•¥Ê©ÇCm/ª”M‚@á$ÀGðkj¨µ1‰fÉTäúÔ„$üIQH@ñ¦çŽS€@|ì²§•"—f’ÑMƒr”Þן%PÇYìíGÂ]òŒŒ×H]ôíCBúGŸr}€µªH±S¤ÍÈÍî )µ•`×>-`0æef0d‹R‰m(”Ú•Xo­ÛA!DwÎ~8 }Xž°åU^ØšiµePà…u)µ³¸ã€»ÂÎUf+u¥NTÜž“aÄË´TÒ[N螾ɀ嬭]„âüYì:])’¤%/¾´ý“ýØîìŒüpôŠ„ÆŸ™”¨£fMÇ6Ü)Ü–uq#RÚ­sú¦tÓ­¾Ò]eÄ8ÒÅÒ´‚;„@z±â€ŽbÚ•]–¦aùråRvéKÊç,€3q_pŒÀkæä+0줽VZuõ$™Êêiµ»Âv6’T;¶"gé¯Ê¦bdUhs-¬ÙÔReÂS´[JÛ&ã>( Œö½Äß%My¥@q$×Xè`;–¹ð;ð€Ôx‘!xše$Úåÿ4@g©ÉJií‹$üâ‹‘ ¾PÙ?zm÷Ïœˆ!˜Ï°ìxB|•@sg³µ sÊ00]ôíCBúGŸr}€†UpÍf¨äÜæ#›u‚é[Rn6 -Œ²Ù¸ÚÓ†!'@¬È±¸KâZh¥¶©­¡)ñ”¤Ò›¤Ê:Ò[޾êßyâ+qZ›h;Ð*f®Ðå+MÄÅ‚âÜfCm[J$›¨8/õ@[Má*¬ËÊšW°éžW]7(‡e]'Œ©*UÏ| ênª¿L\¶%Ÿbmæ×yY‰tlºÐµ³U¬£âφð•`YùGÖäƒÒÉ*7Û—}é5œ¸B ‘}sØ€=Š€TÝEhÓe¬‡q €áº\Õ9®q¢‡\ÙÌÔ]›'¾\Þ!Ä8Z·9^™Ÿ]Þ‘¾Ú•Q µ´Ø+G/k ácDãN™t®ËRAl> tuµ\Â0¨ 9í{‰¾JšóJ€âN×€ ;–¹ð;ð€ÔxÛÌ“k]¾h€ÎÓÏþ9£{‚ ûÌQx›/〕Ê{ÓGˈ"X¢RbzFRVU¥:ó“) Bxz•}BZÔ?üzųu)©–ê@‡ž[‰ yÛ€I9ûœ¿èåŒ>2¡ý»ßñ@?G,añ•íÝÿŠú9㌨n÷üPסæœÂX›CŸq‡&ew]µ°¢¤§V±b@:(p@I¬x 8{òc”;Ï0Ë®2†%Ÿ]Q jiILºÌÅ’éPêBMó¿ .wÜÇ(wž`òc”;Ï0 ÷1Êç˜û˜åóÌ}Ìr‡yæ¾æ9C¼óáo8å·G»i´oh oŠ=ñMßý@€ÏS¬š{V7×;[†(ºIà$Ã.”÷¤—cŒ ¯Ôj’ÓÕ§%g÷)”¦ç’Îä•nŽ]ì”H¾ÁÇKÃÓÕZ•)Ú”»Ó)›[LJ¾[A)`¼âгdüv¬I6ꀫµ9éYÅQÄêŸl¼ÓF¬¤"ìn‰ZŠTØÛê°ꋃ¨ÕrJžÄöÁ5UȪx4•ní‰u¸TZ6Im ån¦L¨Õ Ý5Ù™ýÝ©š”Í;rÜR‘°ÐzÎ3.йM[Ãᙹ÷$©ŒJM"QsuÉÙg\C>æ•L…­µÔ~<Íó¸|3•dáÅ9R˜aÖêóRÅÖRÝÕ¹¥ô¤‘´B3°ª9i`¹b£Tj‘;Wz|½³:ô«l–Re±2[ÝWa´­„‚N`lŒóÎÅRaôË¿MzeSÈ–ž¦­3Š %s(%µl€¤€@d´åÂC)Jy¶«x…+q [µ4¥´¨Ø­[Ñ•Xq›mÜ0Œ;Yšž­I4íUé•LS˜œ”SH•|)¡¹‚)ÛP)Q$e}`>T†¦'g°tÎþv^ô5:¦˜m ƒbÁ"Ûµck[dZÙÀMà€×xŸß×}~è€S€Þ øóãÎ(¹BB{üpÙOzHñùq8ÀR€@ %%žÝ·Yv—»¶wiîˆêUÆ:¥eÝ0Ã-–ðiÅ !kÙREì áç.逶2’T§eS$Òd…mË4ÆÒJNj ß<€ÎÊJ¡Nš¡1P“§<¦%œ[r²é–Ùq*J”Õ’“mެvβSò“3O4×dµ©¹ß¹…íÔ) REÎè ½õ¾¹…)µdëo8$÷šdçv¾[Kguq!AiȬ=Ãe]Dx´ð¤&™6ÌÄ«S9y‰f¥÷k-D/6Ò ¹* Ó†ð%êrþÁJOHSfnu!楘m!Gtdªä%:’I#>逴j£Lbš‰6hŽ6â&à ¥!¦‚’øNì-ÕnwÙwÚûò€¿§='QSÏo ï6ÄÍÞmä#tmíÌII ’Ú“˜'#nä¦)Aª¢êNLM=²´4 e ©)ÙH¸;)ÍW=NºÀ]7),Îã¹K´Á²Ó[(sAµÒž!Ô§.à€û@ ¯1) Ä“D‹€PmóS§(*žÙîç]§1p`%’Wö¢‹Øœôýøƒ`)€@  Øƒ‚‘EB‘‡¦Ê)ëšœSNµ,‡’à[ëR:¢l” á·w( 9zCõvg›ªS§CÈ}É•s»…l &î$!$Ü$ŒÉ¹€ðբĵ}·VíES³¬©…L–Óa°ÒKÝ@IacîbÖ&ðŠ4£òMβú6—¾¡4OU4 AÛVfÄu–Ó¨È`ÎB^z‚érK§½0óRmK̰ÄÀmÔûžÉØUÀ¸6ÿ0á ßP²b”ót™Ö‘6ënN‡š—ß3'sJ ·]¼×´«aµòÙ€Èašk´öj-‰‰tÍÍîí³51»:„îhGV½¥\ÝލäGz9€@ ¯1.x–dwQä¦=N§7©×ù˜¢à–ÎPé?zHñùq<ÀR€@  ˆý–Þò~Äï¿ñ?Úwžãºî[ ëwn§®ØîÚãNß“ôטMZ ÄË33+ši‚û=@PBJ¹æ U{+"FG@°qúüÅ5µSæ'æ¥ÓP)LܺeÒûò»‘ê€p{ ¤/{£•Y–i¶ª…Qïýï6·™esL ĸÚAJïÔ‚ˆJ•¥²UgN›uÍÌ™z¬£L­h Ì:‚ã$¥i²vI*RlBn›‘ÒêÏo¶æ%ÐÄÌ£û‹ÈmÍÑ(JÆÊ¬.6Vžûðð€@  y‰rij:ê5ëSŸ§(*A¢4Îß\Qr/~ä²HíaÝó‘8À €@ -§¤Õ8ÊP‰¹™G­¤=.¡´š(¨XœˆÑá,Fâï|Ç=_Í3ôÑ>—¾¾E`Ò´p§ÔÒ&‰“/¦ñ< Ë–¤ãWm}§¬]:’i-q˜A &Êe_³ZEÀSÄiNV54‰ÛQùˆ’ d–Ý ©lÆl-¤$¤èOhâí¢o´õ‹¡¦ª#[=ªÄÝOä-È¢•®~‘Av<=2gMùh2¯ÇÀ”ž[}§k=¥Ñ'£ðïÐD¾Š¦šÊ–?v¨  -²aH·ø“g¦0¦µõš,Àô­k±7ÚzÅÑÒXýUU¬WiÀTKX­Æ,v3%Zè:©j·gM‰žÓÖ.Ž™î_úíô÷š:Tÿ˜ìÌöž±t8þ¬°-ª˜f³ÜÂ)5mrkM™žÓÖ.‰}!s’j}8Àe5dI^ÜÓoáÆŒ†S}§¬]:—?÷lxylTš=)¸àƒÀlSŽ™¾ÓÖ.—”Ù0‰yᯌL´IÜr¸Ö&¬ËmL7|`tu4 ¾ÇÏ„S0Rpò:BËKæ¿dA£ÓOjÃAùÁÖ PÔ,tMöž±tŸŽ¢]pQ„X‹!Gã S¼ÌXÁZJ|kRÄ~ÐÓ]ŽÙÙ2µüàÿª¯ÀŽ>±D/OºÀò1œÏø×ûÁišÊýûhbeÒ_¯íCD8‘˜>š&ûX/jR;ÎF;ÎF;ÎF;ÎF;ÎF;ÎF;ÎF;|ŒwœŒwœŒwœŒwœŒvùï9p§ÚÏo(Ê2Œ£(ÊéÂ*c(g#+)ˆŒ¢¶5I 1”eu²îZ­­éÂÚ‡iFâ~l3„¬£ë «þcŒŠD²ËE¥8ãé U)I‹o´çE3Wÿ11u{¢` S†§8œÈ¶·Ù’2Ý7VŒ£VA‹Cµ¤î¨ÃÔIJPWXwüp1.ùuø¯˜áÐæUVå4¾QIŒ§ eË’† 3ãý ÙkÂ+º¤ygFG¥7×/ðC-èô¡ªEáEÇ>‰0ƒ‹úaf˜§=ÜáÚ]¨JÐQrƒC»á ¿LKWñ¬3^/4 ;Ç >‹m@Ägë–X•ÿ™CRÙhÖÑHÃ?8yv¥w; JÔå%mTø]•ËŒ23]€?¯Ñˆ"±f­mð¤²ÔpUQBœÅ ª¢…9€"ˆ¡}òlúÓ×ÿÿÄ(!1 AQðaq‘±¡ÑÁ0áñÿÚ?!Áe® Å\n‹”N¸®¸œ<ž§yÂS„§ Nœä΀-åI'A¬£‰ ‚'93„§ Nœ%8JêÒÙÚ p²=Âi^Ǽɉ9B²=vƒÚ’|ìŽô€ß:˜Øé dET+Ð=IƒÔUáÜ)¬U|íîË_¹í  Æ+Ú ¾Ç¸A´‘x3Z|Æ8-5íÜoÝÅ @î¼J­ƒ·ÄÔŠ¡¦ÄùÍÍm•9ý¯q´ VúžiñÈýÔ'JÇÖ$JuÃ¯âæ¶›¸Ü(w•×Äâü§å8¿)ÅùN/Ês~R“·–“‹òœ_”âü§å8)ÅùGÿK´&WX²w¼æ7¸c¯<§ Èp…«­<Ë ’PÂUª‰l -Œy?Ì0{DÛ’~€œ#oòÅ`ÛAž‰Sž¦¯šC½í3±íéºÕ ×qŠÒ”0ä#°ÂzšÈ!”5)NÙ´b—àø‡"6ÿºã¬+lVoù@r-Tîo]X©ÑhœŽË[KP7 ¥vˆ†º/[}g?âñ"" XnºíŒÞ(¸-éÚ%Ò]Vu0DPÀ S°~<ˆXºŠH"?O¤€Ú)eSÔk®’ÓŽ…WK¾à7Îgzyƒàp$ N¢1°>m¨Å«-Ë'аó ª×ìx‚r`ÕKëOzÀ  ê(UÓ”+ Í™ÜëñEÔîq®@ňÉ׈Jc› ]m Ž*øŠÐ׫ÌLÊjfhØnÁFX‰F•…iOÛîÔ7evøÐ@éã©^ÎÔÿ±,qY!Q$Á€/ X@,ˆ£ñ(hÐùK}Aeº €ºfÒ°“¼«ýûEþ(À´×Û qèɯ¶â2ÿÿÚ K-²Éd²I-²É%–ÒH¢JH"Ù$¶Y@@$²{$ € :Oe¶Ò ‰%²Ëi€€L¾I$”hK/’NA‚  &—[lì –Y<¶€‚Y%óÉA I d–Ílà6Imš@@@¼¶Y ¶Ëm¸€&Ï,²Úl—I%@²[$¶€DÙ$¶Ya$ $t²{d¾[d¶Km’Om¶Ée²I-–É%²Ëd¾[,’Ûd¾I$²K,¶K$²K/’K$–I%’K&—[d–Kl–Ûd–Y|¶Ùd’I<¶Ù%“Û$–Jä³Û%¶_ÿÄ`0@€ÿÚ?k·Å-aÖÁçÿÄ@`P€ÿÚ?á`Á‚Š(£Ÿ|Y˽·¶ößÁ%ÿÄ'!1AQaq‘ð Ñ¡±ÁáñÿÚ?4cþJñs(2ÅêåâÝÁ+™~âÔû¸œvˆDÖeš†Ú/–Rç&%x™A–(Wé̼[¸%cs/ÜCu¸#÷rŽÐÓ,y…÷œbMÆÒ‰¿Œ5i>"û·Ó¼ú?d³èþçÑû'Ýû§Ñû%(—áâ&ÖMD[” y˜ëê÷ŸGì—Wg×sèý“èý’æþyuÞMU'¼±ÖzTËtÂWx#ÌI¦ïXPm%š\ÂÈr%B}/ÊŽØfF®`÷¼øŒBŽÊœ½­w =.çÊò¶ÁðT’ìJ¿}ëòú~ùu­‡NÅC3-vefþ&Ó´G…#eb0CÚs¨\¼ôû^]-iüÆStÓâ3#íçÈþA57hl¡2T»£m•¨ô3•È‹ZŽ{J Wî±¼o4Tiä­ªQIKòûþ_ßCŸðèÛ¾aK¼²ùâ6à|ÿȬÎù‰6C%ؽÉVn}(Éü©P]œW.Éd¶”(ï±~„§:ªî|Ñ”áÖŠJ·•Ìeb,`Q[N11{Q·ª§5Zƒ@¬.ƒÈ(Žšˆ+äÅqñ @º¹@¯Ëù}ß|È7‹ÇŒŒfn¢A{¹GhKqIÑ/Ò ä1>§”°.éuûWZ. vÝÖÅ¿7O3Î?ÙN]d7€t)æe1G›Ä-{fEd=Ýû~ï¾]È×µK£´Pf•×þ’ÍE¾“õáËYˆ2·*×IÌúQѸig`-á;@Ö‹Ãø^>qâ¿Ó‰ª@y ®À$ÙyGDÑÃsnmÙ³\‘ˆÖë‹E<;B%"Â.‹§-Y-û²ðÿ}>ß¾ ãŒ×kü–”RàGÈÛQîKÄüQ¡Jë;ˆýÕbÿoáôýð(Ê^3ü»—7Ž%kÄö8{ÄYuÔKÓï õ<º8jÝnÛSý?VgerˆÃ¼®“ñú~ù@Áwþ.*ok) 6ù™™íô\©|Ì ÙëÀ{L•eÏ©åÑŠÕyË*ü€x¸Gñ‰%à¿hc9SGçñú~øÕ uìJ JíO€ê"‚eG2¸ <@£Äß4@+ôè¸×°5?`'°?ŠXב‡¼ñ$Räl®¹ýðÛgqƳ5›Ï0+»å–öe½¢Øª¨D³q²'7¾çÐòèe…@±;3 Gá‰Û:®NÌqø#µÐF. °/Ôü(9Ê/šï]²uÏíç.Ýj…ûBë9a¿Ö"­ÿ6™‰|Íeqgý—oßìêu—7ÃÃìÓí0mI+¼ßµB³È¶ð1€C°±jÔ” Ö¿]¾"Û‘V¦m|•­i¾©±ao`rËÆðO3 ­ºRv×Ü m×O»ï™–¬X8€LEÿ±î€yÿ³0Ó.<ÌòÆë/&ãiDú]sÙÉÛœöIJ$.Z¶ªå^ð…:KGÑÍ—¨LUKï(™C(FøVàÂV+ø­x·ÂDÀÄ]`žX+zíªö#àgñ-‰ \•¶šµbðv˜ÈxØ™TGº˜4 U¸%'Wv*R8ü±ÿºÊ­–M=Dâ+NåÀ yB œ½ØÆÑ§š- ø›•úê˜+Í»õ&cïÀº 4°R"¥•ÊÜWå‰0¾ì'ZÖ¼ômß0¥Þ |ñp>äV¸“d2]‹Ü•|Ê©xÆeœÓR 4éAæÛ0CÑÍ^ÛTZÑ`V#bX—m{kidå wó62…vÍà‘¡WÐÒ]”¼ÝÔAÒlÄä °Õ»MêºÀ˜NÑ•TŽ$ÈÂðÑØÝQ€B‚ÅÝE}£mW)¾Ô/c10̪†"……P,ȉ!œ€Å³fý—Ñ K±{ʾeT㛨^îQÚÜRtKô‚¹ J—F ¼+©}åœe–FÜÏÝ·¾šÉtÚ«”Ö…*Àx % æ°0bÔ¶­Ã:cxZ7𳆆ÍÂ63l+Ã@¿ôa˜¥T[Ðâ˜O|«9¹°Îï† ¶°`,aÙ0|º%úA\†%K£´Pf•×þ’ÍE¾“õáËYˆ2·*×IÎâk´ÌC0kË(w2N=ÑS²Êo³uæbO –Ì¢tb€ PÂnHåcÍä