]> git.ipfire.org Git - thirdparty/cups.git/commitdiff
Load cups into easysw/current.
authorjlovell <jlovell@a1ca3aef-8c08-0410-bb20-df032aa958be>
Mon, 20 Mar 2006 21:11:41 +0000 (21:11 +0000)
committerjlovell <jlovell@a1ca3aef-8c08-0410-bb20-df032aa958be>
Mon, 20 Mar 2006 21:11:41 +0000 (21:11 +0000)
git-svn-id: svn+ssh://src.apple.com/svn/cups/easysw/current@92 a1ca3aef-8c08-0410-bb20-df032aa958be

235 files changed:
CHANGES.txt
CREDITS.txt
INSTALL.txt
Makedefs.in
Makefile
README.txt
backend/ipp.c
backend/usb-unix.c
cgi-bin/admin.c
config-scripts/cups-common.m4
config-scripts/cups-compiler.m4
config-scripts/cups-defaults.m4
config-scripts/cups-directories.m4
config-scripts/cups-image.m4
config-scripts/cups-pdf.m4 [new file with mode: 0644]
config-scripts/cups-ssl.m4
configure.in
cups/Dependencies
cups/Makefile
cups/adminutil.c
cups/array.c
cups/array.h
cups/emit.c
cups/globals.c
cups/globals.h
cups/http.c
cups/http.h
cups/i18n.h
cups/libcups_s.exp
cups/normalize.c [deleted file]
cups/normalize.h [deleted file]
cups/ppd.c
cups/string.c
cups/test.ppd
cups/testarray.c
cups/testhttp.c
cups/testi18n.c
cups/testppd.c
cups/transcode.c
cups/transcode.h
data/Makefile
data/i18n_sdd.txt [deleted file]
data/uni-comb.txt [deleted file]
data/uni-fold.txt [deleted file]
data/uni-full.txt [deleted file]
data/uni-line.txt [deleted file]
data/uni-nfc.txt [deleted file]
data/uni-nfd.txt [deleted file]
data/uni-nfkd.txt [deleted file]
data/uni-prop.txt [deleted file]
data/unibreak.txt [deleted file]
desktop/cups-128.png [new file with mode: 0644]
desktop/cups-16.png [new file with mode: 0644]
desktop/cups-32.png [new file with mode: 0644]
desktop/cups-64.png [new file with mode: 0644]
desktop/cups.desktop [new file with mode: 0644]
doc/Makefile
doc/cups-printable.css
doc/cups.css
doc/es/images/button-accept-jobs.gif [new file with mode: 0644]
doc/es/images/button-add-class.gif [new file with mode: 0644]
doc/es/images/button-add-printer.gif [new file with mode: 0644]
doc/es/images/button-add-this-printer.gif [new file with mode: 0644]
doc/es/images/button-cancel-all-jobs.gif [new file with mode: 0644]
doc/es/images/button-cancel-job.gif [new file with mode: 0644]
doc/es/images/button-change-settings.gif [new file with mode: 0644]
doc/es/images/button-clean-print-heads.gif [new file with mode: 0644]
doc/es/images/button-clear.gif [new file with mode: 0644]
doc/es/images/button-continue.gif [new file with mode: 0644]
doc/es/images/button-delete-class.gif [new file with mode: 0644]
doc/es/images/button-delete-printer.gif [new file with mode: 0644]
doc/es/images/button-edit-configuration-file.gif [new file with mode: 0644]
doc/es/images/button-export-samba.gif [new file with mode: 0644]
doc/es/images/button-help.gif [new file with mode: 0644]
doc/es/images/button-hold-job.gif [new file with mode: 0644]
doc/es/images/button-manage-classes.gif [new file with mode: 0644]
doc/es/images/button-manage-jobs.gif [new file with mode: 0644]
doc/es/images/button-manage-printers.gif [new file with mode: 0644]
doc/es/images/button-manage-server.gif [new file with mode: 0644]
doc/es/images/button-modify-class.gif [new file with mode: 0644]
doc/es/images/button-modify-printer.gif [new file with mode: 0644]
doc/es/images/button-move-job.gif [new file with mode: 0644]
doc/es/images/button-move-jobs.gif [new file with mode: 0644]
doc/es/images/button-print-self-test-page.gif [new file with mode: 0644]
doc/es/images/button-print-test-page.gif [new file with mode: 0644]
doc/es/images/button-publish-printer.gif [new file with mode: 0644]
doc/es/images/button-reject-jobs.gif [new file with mode: 0644]
doc/es/images/button-release-job.gif [new file with mode: 0644]
doc/es/images/button-restart-job.gif [new file with mode: 0644]
doc/es/images/button-save-changes.gif [new file with mode: 0644]
doc/es/images/button-search.gif [new file with mode: 0644]
doc/es/images/button-set-allowed-users.gif [new file with mode: 0644]
doc/es/images/button-set-as-default.gif [new file with mode: 0644]
doc/es/images/button-set-printer-options.gif [new file with mode: 0644]
doc/es/images/button-show-active.gif [new file with mode: 0644]
doc/es/images/button-show-all.gif [new file with mode: 0644]
doc/es/images/button-show-completed.gif [new file with mode: 0644]
doc/es/images/button-show-next.gif [new file with mode: 0644]
doc/es/images/button-show-previous.gif [new file with mode: 0644]
doc/es/images/button-sort-ascending.gif [new file with mode: 0644]
doc/es/images/button-sort-descending.gif [new file with mode: 0644]
doc/es/images/button-start-class.gif [new file with mode: 0644]
doc/es/images/button-start-printer.gif [new file with mode: 0644]
doc/es/images/button-stop-class.gif [new file with mode: 0644]
doc/es/images/button-stop-printer.gif [new file with mode: 0644]
doc/es/images/button-unpublish-printer.gif [new file with mode: 0644]
doc/es/images/button-use-default-config.gif [new file with mode: 0644]
doc/es/images/button-view-access-log.gif [new file with mode: 0644]
doc/es/images/button-view-error-log.gif [new file with mode: 0644]
doc/es/images/button-view-page-log.gif [new file with mode: 0644]
doc/es/images/button-view-printable-version.gif [new file with mode: 0644]
doc/es/index.html.in [new file with mode: 0644]
doc/help/network.html
doc/help/security.html
doc/help/spec-cmp.html
doc/help/spec-design.html
filter/Dependencies
filter/Makefile
filter/libcupsimage_s.exp [new file with mode: 0644]
filter/rastertolabel.c
filter/testimage.c
init/cups-lpd.in [new file with mode: 0644]
locale/Makefile
locale/cups.pot
locale/cups_es.po [new file with mode: 0644]
locale/cups_ja.po
locale/translate.c
man/backend.man
man/cancel.man
man/cups-lpd.man.in
man/lpoptions.man.in
man/lppasswd.man
man/mime.convs.man
packaging/WELCOME.rtf
packaging/cups.list.in
packaging/cups.spec.in
ppd/zebracpl.ppd
scheduler/auth.c
scheduler/auth.h
scheduler/banners.c
scheduler/banners.h
scheduler/cert.c
scheduler/client.c
scheduler/client.h
scheduler/conf.c
scheduler/cups-polld.c
scheduler/cupsd.h
scheduler/dirsvc.c
scheduler/dirsvc.h
scheduler/env.c
scheduler/ipp.c
scheduler/job.c
scheduler/job.h
scheduler/main.c
scheduler/printers.c
scheduler/printers.h
scheduler/quotas.c
scheduler/server.c
scheduler/subscriptions.c
scheduler/subscriptions.h
scheduler/sysman.c
scheduler/testdirsvc.c
scheduler/testspeed.c
scheduler/util.c
templates/Makefile
templates/choose-uri.tmpl
templates/es/add-class.tmpl [new file with mode: 0644]
templates/es/add-printer.tmpl [new file with mode: 0644]
templates/es/admin.tmpl [new file with mode: 0644]
templates/es/choose-device.tmpl [new file with mode: 0644]
templates/es/choose-make.tmpl [new file with mode: 0644]
templates/es/choose-model.tmpl [new file with mode: 0644]
templates/es/choose-serial.tmpl [new file with mode: 0644]
templates/es/choose-uri.tmpl [new file with mode: 0644]
templates/es/class-added.tmpl [new file with mode: 0644]
templates/es/class-confirm.tmpl [new file with mode: 0644]
templates/es/class-deleted.tmpl [new file with mode: 0644]
templates/es/class-jobs-header.tmpl [new file with mode: 0644]
templates/es/class-modified.tmpl [new file with mode: 0644]
templates/es/classes-header.tmpl [new file with mode: 0644]
templates/es/classes.tmpl [new file with mode: 0644]
templates/es/edit-config.tmpl.in [new file with mode: 0644]
templates/es/error-op.tmpl [new file with mode: 0644]
templates/es/error.tmpl [new file with mode: 0644]
templates/es/header.tmpl.in [new file with mode: 0644]
templates/es/help-header.tmpl [new file with mode: 0644]
templates/es/help-printable.tmpl [new file with mode: 0644]
templates/es/job-cancel.tmpl [new file with mode: 0644]
templates/es/job-hold.tmpl [new file with mode: 0644]
templates/es/job-move.tmpl [new file with mode: 0644]
templates/es/job-moved.tmpl [new file with mode: 0644]
templates/es/job-release.tmpl [new file with mode: 0644]
templates/es/job-restart.tmpl [new file with mode: 0644]
templates/es/jobs-header.tmpl [new file with mode: 0644]
templates/es/jobs.tmpl [new file with mode: 0644]
templates/es/maintenance.tmpl [new file with mode: 0644]
templates/es/modify-class.tmpl [new file with mode: 0644]
templates/es/modify-printer.tmpl [new file with mode: 0644]
templates/es/option-boolean.tmpl [new file with mode: 0644]
templates/es/option-conflict.tmpl [new file with mode: 0644]
templates/es/option-header.tmpl [new file with mode: 0644]
templates/es/option-pickmany.tmpl [new file with mode: 0644]
templates/es/option-pickone.tmpl [new file with mode: 0644]
templates/es/option-trailer.tmpl [new file with mode: 0644]
templates/es/pager.tmpl [new file with mode: 0644]
templates/es/printer-accept.tmpl [new file with mode: 0644]
templates/es/printer-added.tmpl [new file with mode: 0644]
templates/es/printer-configured.tmpl [new file with mode: 0644]
templates/es/printer-confirm.tmpl [new file with mode: 0644]
templates/es/printer-default.tmpl [new file with mode: 0644]
templates/es/printer-deleted.tmpl [new file with mode: 0644]
templates/es/printer-jobs-header.tmpl [new file with mode: 0644]
templates/es/printer-modified.tmpl [new file with mode: 0644]
templates/es/printer-purge.tmpl [new file with mode: 0644]
templates/es/printer-reject.tmpl [new file with mode: 0644]
templates/es/printer-start.tmpl [new file with mode: 0644]
templates/es/printer-stop.tmpl [new file with mode: 0644]
templates/es/printers-header.tmpl [new file with mode: 0644]
templates/es/printers.tmpl [new file with mode: 0644]
templates/es/restart.tmpl [new file with mode: 0644]
templates/es/samba-export.tmpl [new file with mode: 0644]
templates/es/samba-exported.tmpl [new file with mode: 0644]
templates/es/search.tmpl [new file with mode: 0644]
templates/es/set-printer-options-header.tmpl [new file with mode: 0644]
templates/es/set-printer-options-trailer.tmpl [new file with mode: 0644]
templates/es/test-page.tmpl [new file with mode: 0644]
templates/es/trailer.tmpl [new file with mode: 0644]
templates/es/users.tmpl [new file with mode: 0644]
templates/ja/admin.tmpl
templates/ja/choose-uri.tmpl
templates/ja/maintenance.tmpl [new file with mode: 0644]
test/run-stp-tests.sh
tools/makesrcdist
tools/testosx
tools/testrpm

index e684a4d2afb833589c84e2018a64a33cb628acd5..9d80240a837d67d44bc1cbb00c522519fc8c3f17 100644 (file)
@@ -1,7 +1,59 @@
-CHANGES.txt - 02/25/2006
+CHANGES.txt - 2006-03-20
 ------------------------
 
-CHANGES IN CUPS V1.2.0b1
+CHANGES IN CUPS V1.2rc1
+
+       - Documentation updates (STR #1497)
+       - Added KDE/GNOME icons and a Manage Printers menu item.
+       - Added --enable-image and --enable-pdftops configure
+         options to control whether the image and PDF filters
+         are built and installed (default = yes for all
+         platforms but MacOS X)
+       - Fixed a minor memory leak in the PPD API.
+       - Fixed transcoding issues (STR #1493)
+       - The scheduler now enforces a minimum job cost of 100
+         when doing FilterLimit checks.
+       - The scheduler would leak file descriptors when printing
+         to raw queues (STR #1491)
+       - The IPv6 support did not compile on Tru64 UNIX (STR
+         #1488)
+       - ppdOpen2() now converts the NickName and all UI text to
+         UTF-8 (STR #1475)
+       - The Set Allows Users web page did not work (STR #1486)
+       - When the default policy was not set or set to a non-
+         existing policy, the scheduler did not set the default
+         policy name to "default" (STR #1484)
+       - The Zebra CPCL driver did not use the correct righthand
+         margin for the 4" wide label sizes.
+       - Fixed a problem with the parsing of fractional real
+         numbers in PPD files.
+       - Added Spanish localization files (STR #1480)
+       - Fixed localization of a few scheduler messages (STR
+         #1478)
+       - Fixed support for HEAD requests in the scheduler (STR
+         #1481)
+
+
+CHANGES IN CUPS V1.2b2
+
+       - Updated the CUPS design description.
+       - Added --enable-32bit and --enable-64bit configure
+         options to allow building of separate 32/64-bit
+         libraries on systems that support both environments
+         (STR #1472)
+       - Various compiler warning fixes.
+       - Fixes for Solaris 10 builds against old GNU TLS and
+         LDAP libraries.
+       - Added a cupsArrayUserData() function to retrieve the
+         user data pointer for an array (useful for typing
+         arrays)
+       - The ppdEmitString() function did not compute the
+         required buffer size properly, leading to dropped
+         characters on the end of the printer commands in pstops
+         and imagetops (STR #1470)
+
+
+CHANGES IN CUPS V1.2b1
 
        - The serial backend now supports Equinox 8-port serial
          hubs (STR #526)
index 00d3fa4485efb85856a5c804d38f262a58d77742..fec1c02140363a8d7b8069c30bab67fb331de7bb 100644 (file)
@@ -1,37 +1,41 @@
-CREDITS.txt - 02/23/2006
+CREDITS.txt - 2006-02-23
 ------------------------
 
 Few projects are completed by one person, and CUPS is no exception.  We'd
 like to thank the following individuals for their contributions:
 
-    Nathaniel Barbour   - Lots of testing and feedback.
-    N. Becker           - setsid().
-    Jean-Eric Cuendet   - GhostScript filters for CUPS.
-    Van Dang            - HTTP and IPP policeman.
-    L. Peter Deutsch    - MD5 code.
-    Dr. ZP Han          - setgid()/setuid().
-    Guy Harris          - *BSD shared libraries and lots of other fixes.
-    Bjoern Jacke        - I18N stuff.
-    Wang Jian           - CUPS RPM corrections.
-    Roderick Johnstone  - Beta tester of the millenium.
-    Till Kamppeter      - Bug fixes, beta testing, evangelism.
-    Kenshi Muto         - Japanese localization, patches, and testing.
-    Kiko                - Bug fixes.
-    Sergey V. Kovalyov  - ESP Print Pro and CUPS beta tester.
-    Mark Lawrence       - Microsoft interoperability testing.
-    Jeff Licquia        - Bug fixes, beta testing, evangelism.
-    Jason McMullan      - Original CUPS RPM distributions.
-    Wes Morgan          - *BSD fixes.
-    Ulrich Oldendorf    - German locale.
-    Giulio Orsero       - Bug fixes and testing.
-    Kurt Pfeifle        - Bug fixes, beta testing, evangelism.
-    Gilles QUERRET      - French man pages.
-    Petter Reinholdtsen - HP-UX compiler stuff.
-    Stuart Stevens      - HP JetDirect IPP information.
-    Andrea Suatoni      - IRIX desktop integration and testing.
-    Tomohiro Kato       - Japanese localization.
-    Tim Waugh           - Lots of patches, testing, and Linux integration.
-    Yugami              - LDAP browsing support.
+    Nathaniel Barbour              - Lots of testing and feedback.
+    N. Becker                      - setsid().
+    Jean-Eric Cuendet              - GhostScript filters for CUPS.
+    Van Dang                       - HTTP and IPP policeman.
+    L. Peter Deutsch               - MD5 code.
+    Dr. ZP Han                     - setgid()/setuid().
+    Guy Harris                     - *BSD shared libraries and lots of other
+                                     fixes.
+    Bjoern Jacke                   - I18N stuff.
+    Wang Jian                      - CUPS RPM corrections.
+    Roderick Johnstone             - Beta tester of the millenium.
+    Till Kamppeter                 - Bug fixes, beta testing, evangelism.
+    Kenshi Muto                    - Japanese localization, patches, and
+                                     testing.
+    Kiko                           - Bug fixes.
+    Sergey V. Kovalyov             - ESP Print Pro and CUPS beta tester.
+    Mark Lawrence                  - Microsoft interoperability testing.
+    Jeff Licquia                   - Bug fixes, beta testing, evangelism.
+    Jason McMullan                 - Original CUPS RPM distributions.
+    Wes Morgan                     - *BSD fixes.
+    Ulrich Oldendorf               - German locale.
+    Giulio Orsero                  - Bug fixes and testing.
+    Kurt Pfeifle                   - Bug fixes, beta testing, evangelism.
+    Gilles QUERRET                 - French man pages.
+    Petter Reinholdtsen            - HP-UX compiler stuff.
+    Juan Pablo González Riopedre   - Spanish localization
+    Stuart Stevens                 - HP JetDirect IPP information.
+    Andrea Suatoni                 - IRIX desktop integration and testing.
+    Tomohiro Kato                  - Japanese localization.
+    Tim Waugh                      - Lots of patches, testing, and Linux
+                                     integration.
+    Yugami                         - LDAP browsing support.
 
 If I've missed someone, please let me know by sending an email to
 "mike@easysw.com".
index 86b6c66aab8e28e9625a39d3e08bceb0e01647b6..a030491fff4396d23f2f58c509e4f026480ffc09 100644 (file)
@@ -1,4 +1,4 @@
-INSTALL - CUPS v1.2b1 - 2006-03-03
+INSTALL - CUPS v1.2b2 - 2006-03-09
 ----------------------------------
 
 This file describes how to compile and install CUPS from source
index fc84a5354d946fa86988835326c0a54c468f01c6..7875a5f1bade4cf32b83033d63293272e009b939 100644 (file)
@@ -1,5 +1,5 @@
 #
-# "$Id: Makedefs.in 5229 2006-03-05 16:48:12Z mike $"
+# "$Id: Makedefs.in 5314 2006-03-20 19:06:50Z mike $"
 #
 #   Common makefile definitions for the Common UNIX Printing System (CUPS).
 #
@@ -73,6 +73,12 @@ CUPS_PRIMARY_SYSTEM_GROUP =  @CUPS_PRIMARY_SYSTEM_GROUP@
 CUPS_CONFIG_FILE_PERM = @CUPS_CONFIG_FILE_PERM@
 CUPS_LOG_FILE_PERM = @CUPS_LOG_FILE_PERM@
 
+#
+# Languages to install...
+#
+
+LANGUAGES      =       @LANGUAGES@
+
 #
 # Libraries...
 #
@@ -97,11 +103,19 @@ INSTALLSTATIC      =       @INSTALLSTATIC@
 #
 # Program options...
 #
-# OPTIM   defines the common compiler optimization/debugging options.
-# OPTIONS defines other compile-time options (currently only -dDEBUG for
-#         extra debug info)
+# ARCHFLAGS     Defines the default architecture build options, used
+#               when compiling separate 32/64-bit libraries.
+# ARCH32FLAGS   Defines the 32-bit architecture build options, used
+#               when compiling separate 32/64-bit libraries.
+# ARCH64FLAGS   Defines the 64-bit architecture build options, used
+#               when compiling separate 32/64-bit libraries.
+# OPTIM         Defines the common compiler optimization/debugging options
+#               for all architectures.
+# OPTIONS       Defines other compile-time options (currently only -DDEBUG
+#               for extra debug info)
 #
 
+ARCHFLAGS      =       @ARCHFLAGS@
 ARFLAGS                =       @ARFLAGS@
 BACKLIBS       =       @BACKLIBS@
 CFLAGS         =       -I.. $(RC_CFLAGS) $(SSLFLAGS) @CPPFLAGS@ @CFLAGS@ \
@@ -114,6 +128,7 @@ CXXLIBS             =       @CXXLIBS@
 DSOFLAGS       =       @DSOFLAGS@
 DSOLIBS                =       @DSOLIBS@ $(COMMONLIBS)
 IMGLIBS                =       @IMGLIBS@ -lm
+IMGFILTERS     =       @IMGFILTERS@
 LDFLAGS                =       -L../cups -L../filter $(RC_CFLAGS) @LDFLAGS@ $(OPTIM)
 LINKCUPS       =       @LINKCUPS@ $(SSLLIBS)
 LINKCUPSIMAGE  =       @LINKCUPSIMAGE@
@@ -121,11 +136,30 @@ LIBS              =       $(LINKCUPS) $(COMMONLIBS)
 OPTIM          =       @OPTIM@
 OPTIONS                =
 PAMLIBS                =       @PAMLIBS@
+PDFTOPS                =       @PDFTOPS@
 PHPDIR         =       @PHPDIR@
 SSLFLAGS       =       @SSLFLAGS@
 SSLLIBS                =       @SSLLIBS@
 LAUNCHDLIBS    =       @LAUNCHDLIBS@
 
+#
+# Separate 32/64-bit library support...
+#
+
+ARCH32FLAGS    =       @ARCH32FLAGS@
+INSTALL32      =       @INSTALL32@
+LIB32CUPS      =       @LIB32CUPS@
+LIB32CUPSIMAGE =       @LIB32CUPSIMAGE@
+LIB32DIR       =       $(BUILDROOT)@LIB32DIR@
+UNINSTALL32    =       @UNINSTALL32@
+
+ARCH64FLAGS    =       @ARCH64FLAGS@
+INSTALL64      =       @INSTALL64@
+LIB64CUPS      =       @LIB64CUPS@
+LIB64CUPSIMAGE =       @LIB64CUPSIMAGE@
+LIB64DIR       =       $(BUILDROOT)@LIB64DIR@
+UNINSTALL64    =       @UNINSTALL64@
+
 #
 # Directories...
 #
@@ -175,6 +209,7 @@ SBINDIR             =       $(BUILDROOT)@sbindir@
 SERVERBIN      =       $(BUILDROOT)@CUPS_SERVERBIN@
 SERVERROOT     =       $(BUILDROOT)@CUPS_SERVERROOT@
 STATEDIR       =       $(BUILDROOT)@CUPS_STATEDIR@
+XINETD         =       @XINETD@
 
 MAN1EXT                =       @MAN1EXT@
 MAN5EXT                =       @MAN5EXT@
@@ -194,15 +229,23 @@ DBUSDIR           =       @DBUSDIR@
 #
 
 .SILENT:
-.SUFFIXES:     .1 .1.gz .1m .1m.gz .5 .5.gz .7 .7.gz .8 .8.gz .a .c .cxx .h .man .o .gz
+.SUFFIXES:     .1 .1.gz .1m .1m.gz .5 .5.gz .7 .7.gz .8 .8.gz .a .c .cxx .h .man .o .32.o .64.o .gz
 
 .c.o:
        echo Compiling $<...
-       $(CC) $(OPTIM) $(CFLAGS) -c $<
+       $(CC) $(ARCHFLAGS) $(OPTIM) $(CFLAGS) -c $<
+
+.c.32.o:
+       echo Compiling 32-bit $<...
+       $(CC) $(ARCH32FLAGS) $(OPTIM) $(CFLAGS) -c -o $@ $<
+
+.c.64.o:
+       echo Compiling 64-bit $<...
+       $(CC) $(ARCH64FLAGS) $(OPTIM) $(CFLAGS) -c -o $@ $<
 
 .cxx.o:
        echo Compiling $<...
-       $(CXX) $(OPTIM) $(CXXFLAGS) -c $<
+       $(CXX) $(ARCHFLAGS) $(OPTIM) $(CXXFLAGS) -c $<
 
 .man.1 .man.1m .man.5 .man.7 .man.8:
        echo Linking $<...
@@ -216,5 +259,5 @@ DBUSDIR             =       @DBUSDIR@
 
 
 #
-# End of "$Id: Makedefs.in 5229 2006-03-05 16:48:12Z mike $"
+# End of "$Id: Makedefs.in 5314 2006-03-20 19:06:50Z mike $"
 #
index 2913b9831634570d51459b65041e4f2389791dac..8393bf217a925bb202effcee264dc19b7fee6e06 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,5 +1,5 @@
 #
-# "$Id: Makefile 5229 2006-03-05 16:48:12Z mike $"
+# "$Id: Makefile 5314 2006-03-20 19:06:50Z mike $"
 #
 #   Top-level Makefile for the Common UNIX Printing System (CUPS).
 #
@@ -29,7 +29,7 @@ include Makedefs
 #
 
 DIRS   =       cups backend berkeley cgi-bin filter locale man monitor \
-               notifier pdftops scheduler systemv test \
+               notifier $(PDFTOPS) scheduler systemv test \
                $(PHPDIR) \
                conf data doc fonts ppd templates
 
@@ -81,7 +81,7 @@ install:      installhdrs
        $(INSTALL_DIR) -m 755 $(BINDIR)
        $(INSTALL_SCRIPT) cups-config $(BINDIR)/cups-config
        echo Installing startup script...
-       if test "x$(INITDIR)" != "x"; then \
+       if test "x$(INITDIR)" != x; then \
                $(INSTALL_DIR) -m 755 $(BUILDROOT)$(INITDIR)/init.d; \
                $(INSTALL_SCRIPT) init/cups.sh $(BUILDROOT)$(INITDIR)/init.d/cups; \
                $(INSTALL_DIR) -m 755 $(BUILDROOT)$(INITDIR)/rc0.d; \
@@ -93,7 +93,7 @@ install:      installhdrs
                $(INSTALL_DIR) -m 755 $(BUILDROOT)$(INITDIR)/rc5.d; \
                $(INSTALL_SCRIPT) init/cups.sh $(BUILDROOT)$(INITDIR)/rc5.d/S99cups; \
        fi
-       if test "x$(INITDIR)" = "x" -a "x$(INITDDIR)" != "x"; then \
+       if test "x$(INITDIR)" = x -a "x$(INITDDIR)" != x; then \
                $(INSTALL_DIR) $(BUILDROOT)$(INITDDIR); \
                if test "$(INITDDIR)" = "/System/Library/StartupItems/PrintingServices"; then \
                        $(INSTALL_SCRIPT) init/PrintingServices $(BUILDROOT)$(INITDDIR)/PrintingServices; \
@@ -106,11 +106,29 @@ install:  installhdrs
                        $(INSTALL_SCRIPT) init/cups.sh $(BUILDROOT)$(INITDDIR)/cups; \
                fi \
        fi
-       if test "x$(DBUSDIR)" != "x"; then \
+       if test "x$(DBUSDIR)" != x; then \
                echo Installing cups.conf in $(DBUSDIR)...;\
                $(INSTALL_DIR) -m 755 $(BUILDROOT)$(DBUSDIR); \
                $(INSTALL_DATA) packaging/cups-dbus.conf $(BUILDROOT)$(DBUSDIR)/cups.conf; \
        fi
+       if test "x$(XINETD)" != x; then \
+               echo Installing xinetd configuration file for cups-lpd...; \
+               $(INSTALL_DIR) -m 755 $(BUILDROOT)$(XINETD); \
+               $(INSTALL_DATA) init/cups-lpd $(BUILDROOT)$(XINETD)/cups-lpd; \
+       fi
+       if test -d /usr/share/applications; then \
+               echo Installing desktop icons...; \
+               $(INSTALL_DIR) -m 755 $(BUILDROOT)/usr/share/applications; \
+               $(INSTALL_DATA) desktop/cups.desktop $(BUILDROOT)/usr/share/applications; \
+               $(INSTALL_DIR) -m 755 $(BUILDROOT)/usr/share/icons/hicolor/16x16/apps; \
+               $(INSTALL_DATA) desktop/cups-16.png $(BUILDROOT)/usr/share/icons/hicolor/16x16/apps/cups.png; \
+               $(INSTALL_DIR) -m 755 $(BUILDROOT)/usr/share/icons/hicolor/32x32/apps; \
+               $(INSTALL_DATA) desktop/cups-32.png $(BUILDROOT)/usr/share/icons/hicolor/32x32/apps/cups.png; \
+               $(INSTALL_DIR) -m 755 $(BUILDROOT)/usr/share/icons/hicolor/64x64/apps; \
+               $(INSTALL_DATA) desktop/cups-64.png $(BUILDROOT)/usr/share/icons/hicolor/64x64/apps/cups.png; \
+               $(INSTALL_DIR) -m 755 $(BUILDROOT)/usr/share/icons/hicolor/128x128/apps; \
+               $(INSTALL_DATA) desktop/cups-128.png $(BUILDROOT)/usr/share/icons/hicolor/128x128/apps/cups.png; \
+       fi
 
 
 #
@@ -138,7 +156,7 @@ uninstall:
        $(RM) $(BINDIR)/cups-config
        -$(RMDIR) $(BINDIR)
        echo Uninstalling startup script...
-       if test "x$(INITDIR)" != "x"; then \
+       if test "x$(INITDIR)" != x; then \
                $(RM) $(BUILDROOT)$(INITDIR)/init.d/cups; \
                $(RMDIR) $(BUILDROOT)$(INITDIR)/init.d; \
                $(RM)  $(BUILDROOT)$(INITDIR)/rc0.d/K00cups; \
@@ -150,7 +168,7 @@ uninstall:
                $(RM) $(BUILDROOT)$(INITDIR)/rc5.d/S99cups; \
                $(RMDIR) $(BUILDROOT)$(INITDIR)/rc5.d; \
        fi
-       if test "x$(INITDIR)" = "x" -a "x$(INITDDIR)" != "x"; then \
+       if test "x$(INITDIR)" = x -a "x$(INITDDIR)" != x; then \
                if test "$(INITDDIR)" = "/System/Library/StartupItems/PrintingServices"; then \
                        $(RM) $(BUILDROOT)$(INITDDIR)/PrintingServices; \
                        $(RM) $(BUILDROOT)$(INITDDIR)/StartupParameters.plist; \
@@ -163,11 +181,17 @@ uninstall:
                fi \
                $(RMDIR) $(BUILDROOT)$(INITDDIR); \
        fi
-       if test "x$(DBUSDIR)" != "x"; then \
+       if test "x$(DBUSDIR)" != x; then \
                echo Uninstalling cups.conf in $(DBUSDIR)...;\
                $(RM) $(BUILDROOT)$(DBUSDIR)/cups.conf; \
                $(RMDIR) $(BUILDROOT)$(DBUSDIR); \
        fi
+       $(RM) $(BUILDROOT)/etc/xinetd.d/cups-lpd
+       $(RM) $(BUILDROOT)/usr/share/applications/cups.desktop
+       $(RM) $(BUILDROOT)/usr/share/icons/hicolor/16x16/apps/cups.png
+       $(RM) $(BUILDROOT)/usr/share/icons/hicolor/32x32/apps/cups.png
+       $(RM) $(BUILDROOT)/usr/share/icons/hicolor/64x64/apps/cups.png
+       $(RM) $(BUILDROOT)/usr/share/icons/hicolor/128x128/apps/cups.png
 
 
 #
@@ -193,5 +217,5 @@ epm:
 
 
 #
-# End of "$Id: Makefile 5229 2006-03-05 16:48:12Z mike $".
+# End of "$Id: Makefile 5314 2006-03-20 19:06:50Z mike $".
 #
index 28c192d368ca2d1d8c650c0d0c0320facb7a1b2d..36395f6cc5c63c9dfa758c823738638f5e5d37e0 100644 (file)
@@ -1,4 +1,4 @@
-README - CUPS v1.2b1 - 2006-03-03
+README - CUPS v1.2b2 - 2006-03-09
 ---------------------------------
 
 Looking for compile instructions?  Read the file "INSTALL.txt"
index 878f634e1f3999c2e1131f18293e858fcd79d2f3..c3b3e7176fa516e9e41c631f47a05df8072fb039 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: ipp.c 5241 2006-03-07 22:07:44Z mike $"
+ * "$Id: ipp.c 5261 2006-03-09 20:47:49Z mike $"
  *
  *   IPP backend for the Common UNIX Printing System (CUPS).
  *
@@ -1263,7 +1263,8 @@ compress_files(int  num_files,            /* I - Number of files */
       fprintf(stderr,
               "DEBUG: File %d compressed to %.1f%% of original size, "
              CUPS_LLFMT " bytes...\n",
-              i + 1, 100.0 * outinfo.st_size / total, outinfo.st_size);
+              i + 1, 100.0 * outinfo.st_size / total,
+             CUPS_LLCAST outinfo.st_size);
   }
 }
 #endif /* HAVE_LIBZ */
@@ -1618,5 +1619,5 @@ sigterm_handler(int sig)          /* I - Signal */
 
 
 /*
- * End of "$Id: ipp.c 5241 2006-03-07 22:07:44Z mike $".
+ * End of "$Id: ipp.c 5261 2006-03-09 20:47:49Z mike $".
  */
index e034a0a2c81eda7db6f4b191638dbe44dfb5e0a2..ae302a0962fc48b904fa87d1057dba56a198f235 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: usb-unix.c 5241 2006-03-07 22:07:44Z mike $"
+ * "$Id: usb-unix.c 5259 2006-03-09 19:22:36Z mike $"
  *
  *   USB port backend for the Common UNIX Printing System (CUPS).
  *
@@ -374,7 +374,6 @@ list_devices(void)
        device_id[1024],        /* Device ID string */
        device_uri[1024],       /* Device URI string */
        make_model[1024];       /* Make and model */
-  struct ecpp_device_id did;   /* Device ID buffer */
 
 
  /*
@@ -545,7 +544,6 @@ open_device(const char *uri)                /* I - Device URI */
                device_id[1024],        /* Device ID string */
                make_model[1024],       /* Make and model */
                device_uri[1024];       /* Device URI string */
-    struct ecpp_device_id did;         /* Device ID buffer */
 
 
    /*
@@ -620,5 +618,5 @@ open_device(const char *uri)                /* I - Device URI */
 
 
 /*
- * End of "$Id: usb-unix.c 5241 2006-03-07 22:07:44Z mike $".
+ * End of "$Id: usb-unix.c 5259 2006-03-09 19:22:36Z mike $".
  */
index 3d7c4ed7d1726f07cae02b8c2e12d920d9e3f5ac..e50a20797ef8b6914488e5d02ac99dbb76325660 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: admin.c 5251 2006-03-08 18:34:07Z mike $"
+ * "$Id: admin.c 5290 2006-03-14 21:43:57Z mike $"
  *
  *   Administration CGI for the Common UNIX Printing System (CUPS).
  *
@@ -2624,11 +2624,11 @@ do_set_allowed_users(http_t *http)      /* I - HTTP connection */
                 NULL, uri);
 
     if (num_users == 0)
-      ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME,
+      ippAddString(request, IPP_TAG_PRINTER, IPP_TAG_NAME,
                    "requesting-user-name-allowed", NULL, "all");
     else
     {
-      attr = ippAddStrings(request, IPP_TAG_OPERATION, IPP_TAG_NAME,
+      attr = ippAddStrings(request, IPP_TAG_PRINTER, IPP_TAG_NAME,
                            type, num_users, NULL, NULL);
 
       for (i = 0, ptr = (char *)users; *ptr; i ++)
@@ -2859,5 +2859,5 @@ match_string(const char *a,               /* I - First string */
 
     
 /*
- * End of "$Id: admin.c 5251 2006-03-08 18:34:07Z mike $".
+ * End of "$Id: admin.c 5290 2006-03-14 21:43:57Z mike $".
  */
index ccc3b460b2aa8e9ce559b354c73640f456233e6f..d726af567bc65a2a020b46320e9f86dd1fd4defc 100644 (file)
@@ -1,5 +1,5 @@
 dnl
-dnl "$Id: cups-common.m4 5229 2006-03-05 16:48:12Z mike $"
+dnl "$Id: cups-common.m4 5288 2006-03-14 02:38:07Z mike $"
 dnl
 dnl   Common configuration stuff for the Common UNIX Printing System (CUPS).
 dnl
@@ -63,7 +63,7 @@ AC_PATH_PROG(LD,ld)
 AC_PATH_PROG(LN,ln)
 AC_PATH_PROG(MV,mv)
 AC_PATH_PROG(RM,rm)
-AC_PATH_PROG(RM,rmdir)
+AC_PATH_PROG(RMDIR,rmdir)
 AC_PATH_PROG(SED,sed)
 AC_PATH_PROG(STRIP,strip)
 
@@ -264,5 +264,5 @@ AC_SUBST(DEFAULT_IPP_PORT)
 AC_DEFINE_UNQUOTED(CUPS_DEFAULT_IPP_PORT,$DEFAULT_IPP_PORT)
 
 dnl
-dnl End of "$Id: cups-common.m4 5229 2006-03-05 16:48:12Z mike $".
+dnl End of "$Id: cups-common.m4 5288 2006-03-14 02:38:07Z mike $".
 dnl
index 1bf262dbcfe1f09690cf118b5b15d9a0d080d88a..a7f99169f873acb4a83e2ed5be32dcf616d6e448 100644 (file)
@@ -1,5 +1,5 @@
 dnl
-dnl "$Id: cups-compiler.m4 4953 2006-01-19 20:30:48Z mike $"
+dnl "$Id: cups-compiler.m4 5288 2006-03-14 02:38:07Z mike $"
 dnl
 dnl   Compiler stuff for the Common UNIX Printing System (CUPS).
 dnl
@@ -24,16 +24,55 @@ dnl
 
 dnl Clear the debugging and non-shared library options unless the user asks
 dnl for them...
+ARCHFLAGS=""
 OPTIM=""
+AC_SUBST(ARCHFLAGS)
 AC_SUBST(OPTIM)
 
 AC_ARG_WITH(optim, [  --with-optim="flags"    set optimization flags ])
+AC_ARG_WITH(archflags, [  --with-arch="flags"     set default architecture flags ])
 
 AC_ARG_ENABLE(debug, [  --enable-debug          turn on debugging, default=no],
        [if test x$enable_debug = xyes; then
                OPTIM="-g"
        fi])
 
+dnl Setup support for separate 32/64-bit library generation...
+AC_ARG_ENABLE(32bit, [  --enable-32bit          generate 32-bit libraries on 32/64-bit systems, default=no])
+AC_ARG_WITH(arch32flags, [  --with-arch32="flags"   specifies 32-bit architecture flags])
+
+ARCH32FLAGS=""
+INSTALL32=""
+LIB32CUPS=""
+LIB32CUPSIMAGE=""
+LIB32DIR=""
+UNINSTALL32=""
+
+AC_SUBST(ARCH32FLAGS)
+AC_SUBST(INSTALL32)
+AC_SUBST(LIB32CUPS)
+AC_SUBST(LIB32CUPSIMAGE)
+AC_SUBST(LIB32DIR)
+AC_SUBST(UNINSTALL32)
+
+AC_ARG_ENABLE(64bit, [  --enable-64bit          generate 64-bit libraries on 32/64-bit systems, default=no])
+AC_ARG_WITH(arch64flags, [  --with-arch64="flags"   specifies 64-bit architecture flags])
+
+ARCH64FLAGS=""
+INSTALL64=""
+LIB64CUPS=""
+LIB64CUPSIMAGE=""
+LIB64DIR=""
+UNINSTALL64=""
+
+AC_SUBST(ARCH64FLAGS)
+AC_SUBST(INSTALL64)
+AC_SUBST(LIB64CUPS)
+AC_SUBST(LIB64CUPSIMAGE)
+AC_SUBST(LIB64DIR)
+AC_SUBST(UNINSTALL64)
+
+dnl Position-Independent Executable support on Linux and *BSD...
 AC_ARG_ENABLE(pie, [  --enable-pie            use GCC -fpie option, default=no])
 
 dnl Update compiler options...
@@ -55,16 +94,6 @@ if test -n "$GCC"; then
        fi
 
        case $uname in
-               Darwin*)
-                       if test "x$with_optim" = x; then
-                               if test "x`uname -m`" = xi386; then
-                                       # Build universal binaries for OSX on Intel...
-                                       OPTIM="-arch i386 -arch ppc $OPTIM"
-                                       DSOFLAGS="-arch i386 -arch ppc $DSOFLAGS"
-                               fi
-                       fi
-                       ;;
-
                Linux*)
                        if test x$enable_pie = xyes; then
                                OPTIM="$OPTIM -fpie"
@@ -79,6 +108,175 @@ if test -n "$GCC"; then
                # Additional warning options for alpha testing...
                OPTIM="-Wshadow -Wunused $OPTIM"
        fi
+
+       case "$uname" in
+               Darwin*)
+                       if test -z "$with_archflags"; then
+                               if test "x`uname -m`" = xi386; then
+                                       # Build universal binaries for OSX on Intel...
+                                       ARCHFLAGS="-arch i386 -arch ppc"
+                               fi
+                       else
+                               ARCHFLAGS="$with_archflags"
+                       fi
+                       ;;
+
+               IRIX)
+                       if test "x$enable_32bit" = xyes; then
+                               # Build 32-bit libraries, 64-bit base...
+                               if test -z "$with_arch32flags"; then
+                                       ARCH32FLAGS="-n32 -mips3"
+                               else
+                                       ARCH32FLAGS="$with_arch32flags"
+                               fi
+                               INSTALL32="install32bit"
+                               LIB32CUPS="libcups.32.so.2"
+                               LIB32CUPSIMAGE="libcupsimage.32.so.2"
+                               LIB32DIR="$prefix/lib32"
+                               UNINSTALL32="uninstall32bit"
+
+                               if test -z "$with_archflags"; then
+                                       if test -z "$with_arch64flags"; then
+                                               ARCHFLAGS="-64 -mips4"
+                                       else
+                                               ARCHFLAGS="$with_arch64flags"
+                                       fi
+                               else
+                                       ARCHFLAGS="$with_archflags"
+                               fi
+                       fi
+
+                       if test "x$enable_64bit" = xyes; then
+                               # Build 64-bit libraries, 32-bit base...
+                               if test -z "$with_arch64flags"; then
+                                       ARCH64FLAGS="-64 -mips4"
+                               else
+                                       ARCH64FLAGS="$with_arch64flags"
+                               fi
+                               INSTALL64="install64bit"
+                               LIB64CUPS="libcups.64.so.2"
+                               LIB64CUPSIMAGE="libcupsimage.64.so.2"
+                               LIB64DIR="$prefix/lib64"
+                               UNINSTALL64="uninstall64bit"
+
+                               if test -z "$with_archflags"; then
+                                       if test -z "$with_arch32flags"; then
+                                               ARCHFLAGS="-n32 -mips3"
+                                       else
+                                               ARCHFLAGS="$with_arch32flags"
+                                       fi
+                               else
+                                       ARCHFLAGS="$with_archflags"
+                               fi
+                       fi
+                       ;;
+
+               Linux*)
+                       if test "x$enable_32bit" = xyes; then
+                               # Build 32-bit libraries, 64-bit base...
+                               if test -z "$with_arch32flags"; then
+                                       ARCH32FLAGS="-m32"
+                               else
+                                       ARCH32FLAGS="$with_arch32flags"
+                               fi
+                               INSTALL32="install32bit"
+                               LIB32CUPS="libcups.32.so.2"
+                               LIB32CUPSIMAGE="libcupsimage.32.so.2"
+                               LIB32DIR="$exec_prefix/lib"
+                               if test -d /usr/lib32; then
+                                       LIB32DIR="${LIB32DIR}32"
+                               fi
+                               UNINSTALL32="uninstall32bit"
+
+                               if test -z "$with_archflags"; then
+                                       if test -z "$with_arch64flags"; then
+                                               ARCHFLAGS="-m64"
+                                       else
+                                               ARCHFLAGS="$with_arch64flags"
+                                       fi
+                               else
+                                       ARCHFLAGS="$with_archflags"
+                               fi
+                       fi
+
+                       if test "x$enable_64bit" = xyes; then
+                               # Build 64-bit libraries, 32-bit base...
+                               if test -z "$with_arch64flags"; then
+                                       ARCH64FLAGS="-m64"
+                               else
+                                       ARCH64FLAGS="$with_arch64flags"
+                               fi
+                               INSTALL64="install64bit"
+                               LIB64CUPS="libcups.64.so.2"
+                               LIB64CUPSIMAGE="libcupsimage.64.so.2"
+                               LIB64DIR="$exec_prefix/lib"
+                               if test -d /usr/lib64; then
+                                       LIB64DIR="${LIB64DIR}64"
+                               fi
+                               UNINSTALL64="uninstall64bit"
+
+                               if test -z "$with_archflags"; then
+                                       if test -z "$with_arch32flags"; then
+                                               ARCHFLAGS="-m32"
+                                       else
+                                               ARCHFLAGS="$with_arch32flags"
+                                       fi
+                               else
+                                       ARCHFLAGS="$with_archflags"
+                               fi
+                       fi
+                       ;;
+
+               SunOS*)
+                       if test "x$enable_32bit" = xyes; then
+                               # Build 32-bit libraries, 64-bit base...
+                               if test -z "$with_arch32flags"; then
+                                       ARCH32FLAGS="-m32"
+                               else
+                                       ARCH32FLAGS="$with_arch32flags"
+                               fi
+                               INSTALL32="install32bit"
+                               LIB32CUPS="libcups.32.so.2"
+                               LIB32CUPSIMAGE="libcupsimage.32.so.2"
+                               LIB32DIR="$exec_prefix/lib/32"
+                               UNINSTALL32="uninstall32bit"
+
+                               if test -z "$with_archflags"; then
+                                       if test -z "$with_arch64flags"; then
+                                               ARCHFLAGS="-m64"
+                                       else
+                                               ARCHFLAGS="$with_arch64flags"
+                                       fi
+                               else
+                                       ARCHFLAGS="$with_archflags"
+                               fi
+                       fi
+
+                       if test "x$enable_64bit" = xyes; then
+                               # Build 64-bit libraries, 32-bit base...
+                               if test -z "$with_arch64flags"; then
+                                       ARCH64FLAGS="-m64"
+                               else
+                                       ARCH64FLAGS="$with_arch64flags"
+                               fi
+                               INSTALL64="install64bit"
+                               LIB64CUPS="libcups.64.so.2"
+                               LIB64CUPSIMAGE="libcupsimage.64.so.2"
+                               LIB64DIR="$exec_prefix/lib/64"
+                               UNINSTALL64="uninstall64bit"
+
+                               if test -z "$with_archflags"; then
+                                       if test -z "$with_arch32flags"; then
+                                               ARCHFLAGS="-m32"
+                                       else
+                                               ARCHFLAGS="$with_arch32flags"
+                                       fi
+                               else
+                                       ARCHFLAGS="$with_archflags"
+                               fi
+                       fi
+                       ;;
+       esac
 else
        case $uname in
                AIX*)
@@ -100,6 +298,9 @@ else
                        fi
 
                        CFLAGS="-Ae $CFLAGS"
+                       # Warning 336 is "empty translation unit"
+                       # Warning 829 is passing constant string as char *
+                       CXXFLAGS="+W336,829 $CXXFLAGS"
 
                        if test "x$with_optim" = x; then
                                OPTIM="+DAportable $OPTIM"
@@ -118,20 +319,55 @@ else
                                fi
                        fi
 
-                       if test $uversion -ge 62 -a "x$with_optim" = x; then
-                               OPTIM="$OPTIM -n32 -mips3"
+                       if test "x$with_optim" = x; then
+                               OPTIM="-fullwarn -woff 1183,1209,1349,1506,3201 $OPTIM"
                        fi
 
-                       if test "x$with_optim" = x; then
-                               # Show most warnings, but suppress the
-                               # ones about arguments not being used,
-                               # string constants assigned to const
-                               # char *'s, etc.  We only set the warning
-                               # options on IRIX 6.2 and higher because
-                               # of limitations in the older SGI compiler
-                               # tools.
-                               if test $uversion -ge 62; then
-                                       OPTIM="-fullwarn -woff 1183,1209,1349,3201 $OPTIM"
+                       if test "x$enable_32bit" = xyes; then
+                               # Build 32-bit libraries, 64-bit base...
+                               if test -z "$with_arch32flags"; then
+                                       ARCH32FLAGS="-n32 -mips3"
+                               else
+                                       ARCH32FLAGS="$with_arch32flags"
+                               fi
+                               INSTALL32="install32bit"
+                               LIB32CUPS="libcups.32.so.2"
+                               LIB32CUPSIMAGE="libcupsimage.32.so.2"
+                               LIB32DIR="$prefix/lib32"
+                               UNINSTALL32="uninstall32bit"
+
+                               if test -z "$with_archflags"; then
+                                       if test -z "$with_arch64flags"; then
+                                               ARCHFLAGS="-64 -mips4"
+                                       else
+                                               ARCHFLAGS="$with_arch64flags"
+                                       fi
+                               else
+                                       ARCHFLAGS="$with_archflags"
+                               fi
+                       fi
+
+                       if test "x$enable_64bit" = xyes; then
+                               # Build 64-bit libraries, 32-bit base...
+                               if test -z "$with_arch64flags"; then
+                                       ARCH64FLAGS="-64 -mips4"
+                               else
+                                       ARCH64FLAGS="$with_arch64flags"
+                               fi
+                               INSTALL64="install64bit"
+                               LIB64CUPS="libcups.64.so.2"
+                               LIB64CUPSIMAGE="libcupsimage.64.so.2"
+                               LIB64DIR="$prefix/lib64"
+                               UNINSTALL64="uninstall64bit"
+
+                               if test -z "$with_archflags"; then
+                                       if test -z "$with_arch32flags"; then
+                                               ARCHFLAGS="-n32 -mips3"
+                                       else
+                                               ARCHFLAGS="$with_arch32flags"
+                                       fi
+                               else
+                                       ARCHFLAGS="$with_archflags"
                                fi
                        fi
                        ;;
@@ -145,15 +381,54 @@ else
                                fi
                        fi
 
-                       if test "x$with_optim" = x; then
-                               # Specify "generic" SPARC output and suppress
-                               # all of Sun's questionable warning messages...
-                               OPTIM="-w $OPTIM -xarch=generic"
-                       fi
-
                        if test $PICFLAG = 1; then
                                OPTIM="-KPIC $OPTIM"
                        fi
+
+                       if test "x$enable_32bit" = xyes; then
+                               # Compiling on a Solaris system, build 64-bit
+                               # binaries with separate 32-bit libraries...
+                               ARCH32FLAGS="-xarch=generic"
+                               INSTALL32="install32bit"
+                               LIB32CUPS="libcups.32.so.2"
+                               LIB32CUPSIMAGE="libcupsimage.32.so.2"
+                               LIB32DIR="$exec_prefix/lib/32"
+                               UNINSTALL32="uninstall32bit"
+
+                               if test "x$with_optim" = x; then
+                                       # Suppress all of Sun's questionable
+                                       # warning messages, and default to
+                                       # 64-bit compiles of everything else...
+                                       OPTIM="-w $OPTIM"
+                                       CFLAGS="-xarch=generic64 $CFLAGS"
+                               fi
+                       else
+                               if test "x$enable_64bit" = xyes; then
+                                       # Build 64-bit libraries...
+                                       ARCH64FLAGS="-xarch=generic64"
+                                       INSTALL64="install64bit"
+                                       LIB64CUPS="libcups.64.so.2"
+                                       LIB64CUPSIMAGE="libcupsimage.64.so.2"
+                                       LIB64DIR="$exec_prefix/lib/64"
+                                       UNINSTALL64="uninstall64bit"
+
+                                       if test "x$with_optim" = x; then
+                                               # Suppress all of Sun's questionable
+                                               # warning messages, and default to
+                                               # 32-bit compiles of everything else...
+                                               OPTIM="-w $OPTIM"
+                                               CFLAGS="-xarch=generic $CFLAGS"
+                                       fi
+                               else
+                                       if test "x$with_optim" = x; then
+                                               # Suppress all of Sun's questionable
+                                               # warning messages, and default to
+                                               # 32-bit compiles of everything else...
+                                               OPTIM="-w $OPTIM"
+                                               CFLAGS="-xarch=generic $CFLAGS"
+                                       fi
+                               fi
+                       fi
                        ;;
                UNIX_SVR*)
                        # UnixWare
@@ -192,5 +467,5 @@ if test $uname = HP-UX; then
 fi
 
 dnl
-dnl End of "$Id: cups-compiler.m4 4953 2006-01-19 20:30:48Z mike $".
+dnl End of "$Id: cups-compiler.m4 5288 2006-03-14 02:38:07Z mike $".
 dnl
index 9a53517798376f347cc62be425950f259b3aff39..3a6f251095199dc875f947b4eb6b8e2a0c6c5b7e 100644 (file)
@@ -23,6 +23,12 @@ dnl       EMail: cups-info@cups.org
 dnl         WWW: http://www.cups.org
 dnl
 
+dnl Default langugages...
+AC_ARG_WITH(languages, [  --with-languages        set installed languages, default="es ja" ],
+       LANGUAGES="$withval",
+       LANGUAGES="es ja")
+AC_SUBST(LANGUAGES)
+
 dnl Default ConfigFilePerm
 AC_ARG_WITH(config_perm, [  --with-config-file-perm set default ConfigFilePerm value, default=0640],
        CUPS_CONFIG_FILE_PERM="$withval",
index 7418740254512202f7ef5b1be6bcb1bbf29b9a52..a4db002b90b10381a7490f5522ab18a4230ba760 100644 (file)
@@ -1,9 +1,9 @@
 dnl
-dnl "$Id: cups-directories.m4 5023 2006-01-29 14:39:44Z mike $"
+dnl "$Id: cups-directories.m4 5314 2006-03-20 19:06:50Z mike $"
 dnl
 dnl   Directory stuff for the Common UNIX Printing System (CUPS).
 dnl
-dnl   Copyright 1997-2005 by Easy Software Products, all rights reserved.
+dnl   Copyright 1997-2006 by Easy Software Products, all rights reserved.
 dnl
 dnl   These coded instructions, statements, and computer programs are the
 dnl   property of Easy Software Products and are protected by Federal
@@ -99,10 +99,14 @@ fi
 
 dnl Fix "libdir" variable for IRIX 6.x...
 if test "$libdir" = "\${exec_prefix}/lib"; then
-       if test "$uname" = "IRIX" -a $uversion -ge 62; then
+       if test "$uname" = "IRIX"; then
                libdir="$exec_prefix/lib32"
        else
-               libdir="$exec_prefix/lib"
+               if test "$uname" = Linux -a -d /usr/lib64; then
+                       libdir="$exec_prefix/lib64"
+               else
+                       libdir="$exec_prefix/lib"
+               fi
        fi
 fi
 
@@ -174,6 +178,17 @@ fi
 AC_SUBST(INITDIR)
 AC_SUBST(INITDDIR)
 
+dnl Xinetd support...
+XINETD=""
+for dir in /private/etc/xinetd.d /etc/xinetd.d /usr/local/etc/xinetd.d; do
+       if test -d $dir; then
+               XINETD="$dir"
+               break
+       fi
+done
+
+AC_SUBST(XINETD)
+
 dnl Setup default locations...
 # Cache data...
 AC_ARG_WITH(cachedir, [  --with-cachedir         set path for cache files],cachedir="$withval",cachedir="")
@@ -266,7 +281,7 @@ case "$uname" in
        *)
                # All others
                INSTALL_SYSV="install-sysv"
-               CUPS_SERVERBIN="$libdir/cups"
+               CUPS_SERVERBIN="$exec_prefix/lib/cups"
                ;;
 esac
 
@@ -285,5 +300,5 @@ AC_DEFINE_UNQUOTED(CUPS_STATEDIR, "$localstatedir/run/cups")
 AC_SUBST(CUPS_STATEDIR)
 
 dnl
-dnl End of "$Id: cups-directories.m4 5023 2006-01-29 14:39:44Z mike $".
+dnl End of "$Id: cups-directories.m4 5314 2006-03-20 19:06:50Z mike $".
 dnl
index 940b0bbdde64a6437a5f0923824a0bf7aa65d4e2..2d5607fcd5d0522fc5ec566a71ee39065924aee0 100644 (file)
@@ -1,9 +1,9 @@
 dnl
-dnl "$Id: cups-image.m4 4644 2005-09-15 18:43:06Z mike $"
+dnl "$Id: cups-image.m4 5311 2006-03-19 13:21:42Z mike $"
 dnl
-dnl   Image library stuff for the Common UNIX Printing System (CUPS).
+dnl   Image library/filter stuff for the Common UNIX Printing System (CUPS).
 dnl
-dnl   Copyright 1997-2005 by Easy Software Products, all rights reserved.
+dnl   Copyright 1997-2006 by Easy Software Products, all rights reserved.
 dnl
 dnl   These coded instructions, statements, and computer programs are the
 dnl   property of Easy Software Products and are protected by Federal
@@ -22,6 +22,22 @@ dnl       EMail: cups-info@cups.org
 dnl         WWW: http://www.cups.org
 dnl
 
+dnl See if we want the image filters included at all...
+AC_ARG_ENABLE(image, [  --enable-image          turn on image filters, default=auto])
+
+IMGFILTERS=""
+if test "x$enable_image" != xno; then
+        AC_MSG_CHECKING(whether to build image filters)
+        if test "x$enable_image" = xyes -o $uname != Darwin; then
+               IMGFILTERS="imagetops imagetoraster"
+                AC_MSG_RESULT(yes)
+        else
+                AC_MSG_RESULT(no)
+        fi
+fi
+
+AC_SUBST(IMGFILTERS)
+
 dnl Save the current libraries since we don't want the image libraries
 dnl included with every program...
 SAVELIBS="$LIBS"
@@ -94,5 +110,5 @@ AC_SUBST(EXPORT_LIBZ)
 AC_CHECK_HEADER(stdlib.h,AC_DEFINE(HAVE_STDLIB_H))
 
 dnl
-dnl End of "$Id: cups-image.m4 4644 2005-09-15 18:43:06Z mike $".
+dnl End of "$Id: cups-image.m4 5311 2006-03-19 13:21:42Z mike $".
 dnl
diff --git a/config-scripts/cups-pdf.m4 b/config-scripts/cups-pdf.m4
new file mode 100644 (file)
index 0000000..d905ada
--- /dev/null
@@ -0,0 +1,43 @@
+dnl
+dnl "$Id$"
+dnl
+dnl   PDF filter configuration stuff for the Common UNIX Printing System (CUPS).
+dnl
+dnl   Copyright 2006 by Easy Software Products, all rights reserved.
+dnl
+dnl   These coded instructions, statements, and computer programs are the
+dnl   property of Easy Software Products and are protected by Federal
+dnl   copyright law.  Distribution and use rights are outlined in the file
+dnl   "LICENSE.txt" which should have been included with this file.  If this
+dnl   file is missing or damaged please contact Easy Software Products
+dnl   at:
+dnl
+dnl       Attn: CUPS Licensing Information
+dnl       Easy Software Products
+dnl       44141 Airport View Drive, Suite 204
+dnl       Hollywood, Maryland 20636 USA
+dnl
+dnl       Voice: (301) 373-9600
+dnl       EMail: cups-info@cups.org
+dnl         WWW: http://www.cups.org
+dnl
+
+AC_ARG_ENABLE(pdftops, [  --enable-pdftops        build pdftops filter, default=auto ])
+
+PDFTOPS=""
+
+if test "x$enable_pdftops" != xno; then
+       AC_MSG_CHECKING(whether to build pdftops filter)
+       if test "x$enable_pdftops" = xyes -o $uname != Darwin; then
+               PDFTOPS="pdftops"
+               AC_MSG_RESULT(yes)
+       else
+               AC_MSG_RESULT(no)
+       fi
+fi
+
+AC_SUBST(PDFTOPS)
+
+dnl
+dnl End of "$Id$".
+dnl
index 166ca589741fcb60f45795e3d9b7d07b20523086..ebffe0ef66b661fc14ad0a868a58364b4c69b060 100644 (file)
@@ -1,5 +1,5 @@
 dnl
-dnl "$Id: cups-ssl.m4 4800 2005-10-18 18:06:20Z mike $"
+dnl "$Id: cups-ssl.m4 5264 2006-03-10 01:10:36Z mike $"
 dnl
 dnl   OpenSSL/GNUTLS stuff for the Common UNIX Printing System (CUPS).
 dnl
@@ -55,7 +55,7 @@ if test x$enable_ssl != xno; then
            dnl included...
            SAVELIBS="$LIBS"
 
-           AC_CHECK_LIB(gnutls, gnutls_init,
+           AC_CHECK_LIB(gnutls, gnutls_x509_crt_set_dn_by_oid,
                [SSLLIBS="-lgnutls"
                 AC_DEFINE(HAVE_SSL)
                 AC_DEFINE(HAVE_GNUTLS)])
@@ -105,5 +105,5 @@ AC_SUBST(EXPORT_SSLLIBS)
 
 
 dnl
-dnl End of "$Id: cups-ssl.m4 4800 2005-10-18 18:06:20Z mike $".
+dnl End of "$Id: cups-ssl.m4 5264 2006-03-10 01:10:36Z mike $".
 dnl
index 6942e28a43777fde44a9085e257ba44459db4957..15654e7b352c763127e253e8335ca47a412bd6c9 100644 (file)
@@ -1,5 +1,5 @@
 dnl
-dnl "$Id: configure.in 5182 2006-02-26 04:10:27Z mike $"
+dnl "$Id: configure.in 5310 2006-03-19 03:23:34Z mike $"
 dnl
 dnl   Configuration script for the Common UNIX Printing System (CUPS).
 dnl
@@ -43,22 +43,21 @@ sinclude(config-scripts/cups-pam.m4)
 sinclude(config-scripts/cups-threads.m4)
 sinclude(config-scripts/cups-largefile.m4)
 sinclude(config-scripts/cups-launchd.m4)
-
-MAKEDEFS="../Makedefs"
-AC_SUBST(MAKEDEFS)
-
+sinclude(config-scripts/cups-pdf.m4)
 sinclude(config-scripts/cups-scripting.m4)
 
-AC_OUTPUT(Makedefs packaging/cups.list init/cups.sh cups-config
-          conf/cupsd.conf conf/pam.std doc/index.html doc/ja/index.html
-         doc/help/standard.html man/client.conf.man man/cups-deviced.man
-         man/cups-driverd.man man/cups-lpd.man man/cupsaddsmb.man
-         man/cupsd.man man/cupsd.conf.man man/lpoptions.man
+AC_OUTPUT(Makedefs packaging/cups.list init/cups.sh init/cups-lpd cups-config
+         conf/cupsd.conf conf/pam.std doc/index.html
+         doc/es/index.html doc/ja/index.html
+         doc/help/standard.html man/client.conf.man
+         man/cups-deviced.man man/cups-driverd.man
+         man/cups-lpd.man man/cupsaddsmb.man man/cupsd.man
+         man/cupsd.conf.man man/lpoptions.man
          templates/edit-config.tmpl templates/header.tmpl
-         templates/ja/header.tmpl)
+         templates/es/header.tmpl templates/ja/header.tmpl)
 
 chmod +x cups-config
 
 dnl
-dnl End of "$Id: configure.in 5182 2006-02-26 04:10:27Z mike $".
+dnl End of "$Id: configure.in 5310 2006-03-19 03:23:34Z mike $".
 dnl
index e979f03717970cdd990d84c138a542f56a49e8ba..e6ff413afb1539691e1ca179e0274f1d008a7d0f 100644 (file)
@@ -1,18 +1,18 @@
 # DO NOT DELETE
 
 adminutil.o: adminutil.h cups.h ipp.h http.h md5.h ppd.h array.h file.h
-adminutil.o: language.h globals.h string.h ../config.h i18n.h normalize.h
-adminutil.o: transcode.h debug.h
+adminutil.o: language.h globals.h string.h ../config.h i18n.h transcode.h
+adminutil.o: debug.h
 array.o: array.h string.h ../config.h debug.h
 attr.o: ppd.h array.h file.h debug.h string.h ../config.h
 auth.o: globals.h string.h ../config.h cups.h ipp.h http.h md5.h ppd.h
-auth.o: array.h file.h language.h i18n.h normalize.h transcode.h debug.h
+auth.o: array.h file.h language.h i18n.h transcode.h debug.h
 backchannel.o: cups.h ipp.h http.h md5.h ppd.h array.h file.h language.h
 backend.o: backend.h string.h ../config.h
 custom.o: globals.h string.h ../config.h cups.h ipp.h http.h md5.h ppd.h
-custom.o: array.h file.h language.h i18n.h normalize.h transcode.h debug.h
+custom.o: array.h file.h language.h i18n.h transcode.h debug.h
 dest.o: globals.h string.h ../config.h cups.h ipp.h http.h md5.h ppd.h
-dest.o: array.h file.h language.h i18n.h normalize.h transcode.h
+dest.o: array.h file.h language.h i18n.h transcode.h
 dir.o: dir.h string.h ../config.h debug.h
 emit.o: ppd.h array.h file.h string.h ../config.h
 encode.o: cups.h ipp.h http.h md5.h ppd.h array.h file.h language.h
@@ -23,63 +23,221 @@ getputfile.o: cups.h ipp.h http.h md5.h ppd.h array.h file.h language.h
 getputfile.o: string.h ../config.h debug.h
 globals.o: http-private.h ../config.h http.h md5.h ipp-private.h ipp.h
 globals.o: globals.h string.h cups.h ppd.h array.h file.h language.h i18n.h
-globals.o: normalize.h transcode.h
+globals.o: transcode.h
 http.o: http-private.h ../config.h http.h md5.h ipp-private.h ipp.h globals.h
-http.o: string.h cups.h ppd.h array.h file.h language.h i18n.h normalize.h
-http.o: transcode.h debug.h
+http.o: string.h cups.h ppd.h array.h file.h language.h i18n.h transcode.h
+http.o: debug.h
 http-addr.o: globals.h string.h ../config.h cups.h ipp.h http.h md5.h ppd.h
-http-addr.o: array.h file.h language.h i18n.h normalize.h transcode.h debug.h
+http-addr.o: array.h file.h language.h i18n.h transcode.h debug.h
 http-addrlist.o: http-private.h ../config.h http.h md5.h ipp-private.h ipp.h
 http-addrlist.o: globals.h string.h cups.h ppd.h array.h file.h language.h
-http-addrlist.o: i18n.h normalize.h transcode.h debug.h
+http-addrlist.o: i18n.h transcode.h debug.h
 http-support.o: debug.h globals.h string.h ../config.h cups.h ipp.h http.h
-http-support.o: md5.h ppd.h array.h file.h language.h i18n.h normalize.h
-http-support.o: transcode.h
+http-support.o: md5.h ppd.h array.h file.h language.h i18n.h transcode.h
 ipp.o: http-private.h ../config.h http.h md5.h ipp-private.h ipp.h globals.h
-ipp.o: string.h cups.h ppd.h array.h file.h language.h i18n.h normalize.h
-ipp.o: transcode.h debug.h
+ipp.o: string.h cups.h ppd.h array.h file.h language.h i18n.h transcode.h
+ipp.o: debug.h
 ipp-support.o: globals.h string.h ../config.h cups.h ipp.h http.h md5.h ppd.h
-ipp-support.o: array.h file.h language.h i18n.h normalize.h transcode.h
-ipp-support.o: debug.h
+ipp-support.o: array.h file.h language.h i18n.h transcode.h debug.h
 langprintf.o: globals.h string.h ../config.h cups.h ipp.h http.h md5.h ppd.h
-langprintf.o: array.h file.h language.h i18n.h normalize.h transcode.h
+langprintf.o: array.h file.h language.h i18n.h transcode.h
 language.o: globals.h string.h ../config.h cups.h ipp.h http.h md5.h ppd.h
-language.o: array.h file.h language.h i18n.h normalize.h transcode.h debug.h
+language.o: array.h file.h language.h i18n.h transcode.h debug.h
 localize.o: globals.h string.h ../config.h cups.h ipp.h http.h md5.h ppd.h
-localize.o: array.h file.h language.h i18n.h normalize.h transcode.h debug.h
+localize.o: array.h file.h language.h i18n.h transcode.h debug.h
 mark.o: cups.h ipp.h http.h md5.h ppd.h array.h file.h language.h string.h
 mark.o: ../config.h debug.h
 md5.o: md5.h string.h ../config.h
 md5passwd.o: http.h md5.h string.h ../config.h
-normalize.o: globals.h string.h ../config.h cups.h ipp.h http.h md5.h ppd.h
-normalize.o: array.h file.h language.h i18n.h normalize.h transcode.h debug.h
 notify.o: globals.h string.h ../config.h cups.h ipp.h http.h md5.h ppd.h
-notify.o: array.h file.h language.h i18n.h normalize.h transcode.h
+notify.o: array.h file.h language.h i18n.h transcode.h
 options.o: cups.h ipp.h http.h md5.h ppd.h array.h file.h language.h string.h
 options.o: ../config.h debug.h
 page.o: ppd.h array.h file.h string.h ../config.h
 ppd.o: globals.h string.h ../config.h cups.h ipp.h http.h md5.h ppd.h array.h
-ppd.o: file.h language.h i18n.h normalize.h transcode.h debug.h
+ppd.o: file.h language.h i18n.h transcode.h debug.h
 request.o: globals.h string.h ../config.h cups.h ipp.h http.h md5.h ppd.h
-request.o: array.h file.h language.h i18n.h normalize.h transcode.h debug.h
+request.o: array.h file.h language.h i18n.h transcode.h debug.h
 snprintf.o: string.h ../config.h
 string.o: debug.h string.h ../config.h globals.h cups.h ipp.h http.h md5.h
-string.o: ppd.h array.h file.h language.h i18n.h normalize.h transcode.h
+string.o: ppd.h array.h file.h language.h i18n.h transcode.h
 tempfile.o: globals.h string.h ../config.h cups.h ipp.h http.h md5.h ppd.h
-tempfile.o: array.h file.h language.h i18n.h normalize.h transcode.h debug.h
+tempfile.o: array.h file.h language.h i18n.h transcode.h debug.h
 transcode.o: globals.h string.h ../config.h cups.h ipp.h http.h md5.h ppd.h
-transcode.o: array.h file.h language.h i18n.h normalize.h transcode.h
+transcode.o: array.h file.h language.h i18n.h transcode.h debug.h
 usersys.o: http-private.h ../config.h http.h md5.h ipp-private.h ipp.h
 usersys.o: globals.h string.h cups.h ppd.h array.h file.h language.h i18n.h
-usersys.o: normalize.h transcode.h
+usersys.o: transcode.h
 util.o: globals.h string.h ../config.h cups.h ipp.h http.h md5.h ppd.h
-util.o: array.h file.h language.h i18n.h normalize.h transcode.h debug.h
+util.o: array.h file.h language.h i18n.h transcode.h debug.h
 testadmin.o: adminutil.h cups.h ipp.h http.h md5.h ppd.h array.h file.h
 testadmin.o: language.h string.h ../config.h
 testarray.o: ../cups/string.h ../config.h string.h array.h dir.h debug.h
 testfile.o: string.h ../config.h file.h debug.h
 testhttp.o: http.h md5.h string.h ../config.h
-testi18n.o: language.h array.h string.h ../config.h transcode.h normalize.h
+testi18n.o: i18n.h transcode.h language.h array.h string.h ../config.h
 testipp.o: ../cups/string.h ../config.h string.h ipp.h http.h md5.h
-testlang.o: i18n.h language.h array.h
+testlang.o: i18n.h transcode.h language.h array.h
 testppd.o: ../cups/string.h ../config.h string.h ppd.h array.h file.h
+# DO NOT DELETE
+
+adminutil.32.o: adminutil.c  adminutil.h cups.h ipp.h http.h md5.h ppd.h array.h file.h
+adminutil.32.o: adminutil.c  language.h globals.h string.h ../config.h i18n.h transcode.h
+adminutil.32.o: adminutil.c  debug.h
+array.32.o: array.c  array.h string.h ../config.h debug.h
+attr.32.o: attr.c  ppd.h array.h file.h debug.h string.h ../config.h
+auth.32.o: auth.c  globals.h string.h ../config.h cups.h ipp.h http.h md5.h ppd.h
+auth.32.o: auth.c  array.h file.h language.h i18n.h transcode.h debug.h
+backchannel.32.o: backchannel.c  cups.h ipp.h http.h md5.h ppd.h array.h file.h language.h
+backend.32.o: backend.c  backend.h string.h ../config.h
+custom.32.o: custom.c  globals.h string.h ../config.h cups.h ipp.h http.h md5.h ppd.h
+custom.32.o: custom.c  array.h file.h language.h i18n.h transcode.h debug.h
+dest.32.o: dest.c  globals.h string.h ../config.h cups.h ipp.h http.h md5.h ppd.h
+dest.32.o: dest.c  array.h file.h language.h i18n.h transcode.h
+dir.32.o: dir.c  dir.h string.h ../config.h debug.h
+emit.32.o: emit.c  ppd.h array.h file.h string.h ../config.h
+encode.32.o: encode.c  cups.h ipp.h http.h md5.h ppd.h array.h file.h language.h
+encode.32.o: encode.c  ipp-private.h string.h ../config.h debug.h
+file.32.o: file.c  http-private.h ../config.h http.h md5.h ipp-private.h ipp.h string.h
+file.32.o: file.c  ../cups/debug.h file.h
+getputfile.32.o: getputfile.c  cups.h ipp.h http.h md5.h ppd.h array.h file.h language.h
+getputfile.32.o: getputfile.c  string.h ../config.h debug.h
+globals.32.o: globals.c  http-private.h ../config.h http.h md5.h ipp-private.h ipp.h
+globals.32.o: globals.c  globals.h string.h cups.h ppd.h array.h file.h language.h i18n.h
+globals.32.o: globals.c  transcode.h
+http.32.o: http.c  http-private.h ../config.h http.h md5.h ipp-private.h ipp.h globals.h
+http.32.o: http.c  string.h cups.h ppd.h array.h file.h language.h i18n.h transcode.h
+http.32.o: http.c  debug.h
+http-addr.32.o: http-addr.c  globals.h string.h ../config.h cups.h ipp.h http.h md5.h ppd.h
+http-addr.32.o: http-addr.c  array.h file.h language.h i18n.h transcode.h debug.h
+http-addrlist.32.o: http-addrlist.c  http-private.h ../config.h http.h md5.h ipp-private.h ipp.h
+http-addrlist.32.o: http-addrlist.c  globals.h string.h cups.h ppd.h array.h file.h language.h
+http-addrlist.32.o: http-addrlist.c  i18n.h transcode.h debug.h
+http-support.32.o: http-support.c  debug.h globals.h string.h ../config.h cups.h ipp.h http.h
+http-support.32.o: http-support.c  md5.h ppd.h array.h file.h language.h i18n.h transcode.h
+ipp.32.o: ipp.c  http-private.h ../config.h http.h md5.h ipp-private.h ipp.h globals.h
+ipp.32.o: ipp.c  string.h cups.h ppd.h array.h file.h language.h i18n.h transcode.h
+ipp.32.o: ipp.c  debug.h
+ipp-support.32.o: ipp-support.c  globals.h string.h ../config.h cups.h ipp.h http.h md5.h ppd.h
+ipp-support.32.o: ipp-support.c  array.h file.h language.h i18n.h transcode.h debug.h
+langprintf.32.o: langprintf.c  globals.h string.h ../config.h cups.h ipp.h http.h md5.h ppd.h
+langprintf.32.o: langprintf.c  array.h file.h language.h i18n.h transcode.h
+language.32.o: language.c  globals.h string.h ../config.h cups.h ipp.h http.h md5.h ppd.h
+language.32.o: language.c  array.h file.h language.h i18n.h transcode.h debug.h
+localize.32.o: localize.c  globals.h string.h ../config.h cups.h ipp.h http.h md5.h ppd.h
+localize.32.o: localize.c  array.h file.h language.h i18n.h transcode.h debug.h
+mark.32.o: mark.c  cups.h ipp.h http.h md5.h ppd.h array.h file.h language.h string.h
+mark.32.o: mark.c  ../config.h debug.h
+md5.32.o: md5.c  md5.h string.h ../config.h
+md5passwd.32.o: md5passwd.c  http.h md5.h string.h ../config.h
+notify.32.o: notify.c  globals.h string.h ../config.h cups.h ipp.h http.h md5.h ppd.h
+notify.32.o: notify.c  array.h file.h language.h i18n.h transcode.h
+options.32.o: options.c  cups.h ipp.h http.h md5.h ppd.h array.h file.h language.h string.h
+options.32.o: options.c  ../config.h debug.h
+page.32.o: page.c  ppd.h array.h file.h string.h ../config.h
+ppd.32.o: ppd.c  globals.h string.h ../config.h cups.h ipp.h http.h md5.h ppd.h array.h
+ppd.32.o: ppd.c  file.h language.h i18n.h transcode.h debug.h
+request.32.o: request.c  globals.h string.h ../config.h cups.h ipp.h http.h md5.h ppd.h
+request.32.o: request.c  array.h file.h language.h i18n.h transcode.h debug.h
+snprintf.32.o: snprintf.c  string.h ../config.h
+string.32.o: string.c  debug.h string.h ../config.h globals.h cups.h ipp.h http.h md5.h
+string.32.o: string.c  ppd.h array.h file.h language.h i18n.h transcode.h
+tempfile.32.o: tempfile.c  globals.h string.h ../config.h cups.h ipp.h http.h md5.h ppd.h
+tempfile.32.o: tempfile.c  array.h file.h language.h i18n.h transcode.h debug.h
+transcode.32.o: transcode.c  globals.h string.h ../config.h cups.h ipp.h http.h md5.h ppd.h
+transcode.32.o: transcode.c  array.h file.h language.h i18n.h transcode.h debug.h
+usersys.32.o: usersys.c  http-private.h ../config.h http.h md5.h ipp-private.h ipp.h
+usersys.32.o: usersys.c  globals.h string.h cups.h ppd.h array.h file.h language.h i18n.h
+usersys.32.o: usersys.c  transcode.h
+util.32.o: util.c  globals.h string.h ../config.h cups.h ipp.h http.h md5.h ppd.h
+util.32.o: util.c  array.h file.h language.h i18n.h transcode.h debug.h
+testadmin.32.o: testadmin.c  adminutil.h cups.h ipp.h http.h md5.h ppd.h array.h file.h
+testadmin.32.o: testadmin.c  language.h string.h ../config.h
+testarray.32.o: testarray.c  ../cups/string.h ../config.h string.h array.h dir.h debug.h
+testfile.32.o: testfile.c  string.h ../config.h file.h debug.h
+testhttp.32.o: testhttp.c  http.h md5.h string.h ../config.h
+testi18n.32.o: testi18n.c  i18n.h transcode.h language.h array.h string.h ../config.h
+testipp.32.o: testipp.c  ../cups/string.h ../config.h string.h ipp.h http.h md5.h
+testlang.32.o: testlang.c  i18n.h transcode.h language.h array.h
+testppd.32.o: testppd.c  ../cups/string.h ../config.h string.h ppd.h array.h file.h
+# DO NOT DELETE
+
+adminutil.64.o: adminutil.c  adminutil.h cups.h ipp.h http.h md5.h ppd.h array.h file.h
+adminutil.64.o: adminutil.c  language.h globals.h string.h ../config.h i18n.h transcode.h
+adminutil.64.o: adminutil.c  debug.h
+array.64.o: array.c  array.h string.h ../config.h debug.h
+attr.64.o: attr.c  ppd.h array.h file.h debug.h string.h ../config.h
+auth.64.o: auth.c  globals.h string.h ../config.h cups.h ipp.h http.h md5.h ppd.h
+auth.64.o: auth.c  array.h file.h language.h i18n.h transcode.h debug.h
+backchannel.64.o: backchannel.c  cups.h ipp.h http.h md5.h ppd.h array.h file.h language.h
+backend.64.o: backend.c  backend.h string.h ../config.h
+custom.64.o: custom.c  globals.h string.h ../config.h cups.h ipp.h http.h md5.h ppd.h
+custom.64.o: custom.c  array.h file.h language.h i18n.h transcode.h debug.h
+dest.64.o: dest.c  globals.h string.h ../config.h cups.h ipp.h http.h md5.h ppd.h
+dest.64.o: dest.c  array.h file.h language.h i18n.h transcode.h
+dir.64.o: dir.c  dir.h string.h ../config.h debug.h
+emit.64.o: emit.c  ppd.h array.h file.h string.h ../config.h
+encode.64.o: encode.c  cups.h ipp.h http.h md5.h ppd.h array.h file.h language.h
+encode.64.o: encode.c  ipp-private.h string.h ../config.h debug.h
+file.64.o: file.c  http-private.h ../config.h http.h md5.h ipp-private.h ipp.h string.h
+file.64.o: file.c  ../cups/debug.h file.h
+getputfile.64.o: getputfile.c  cups.h ipp.h http.h md5.h ppd.h array.h file.h language.h
+getputfile.64.o: getputfile.c  string.h ../config.h debug.h
+globals.64.o: globals.c  http-private.h ../config.h http.h md5.h ipp-private.h ipp.h
+globals.64.o: globals.c  globals.h string.h cups.h ppd.h array.h file.h language.h i18n.h
+globals.64.o: globals.c  transcode.h
+http.64.o: http.c  http-private.h ../config.h http.h md5.h ipp-private.h ipp.h globals.h
+http.64.o: http.c  string.h cups.h ppd.h array.h file.h language.h i18n.h transcode.h
+http.64.o: http.c  debug.h
+http-addr.64.o: http-addr.c  globals.h string.h ../config.h cups.h ipp.h http.h md5.h ppd.h
+http-addr.64.o: http-addr.c  array.h file.h language.h i18n.h transcode.h debug.h
+http-addrlist.64.o: http-addrlist.c  http-private.h ../config.h http.h md5.h ipp-private.h ipp.h
+http-addrlist.64.o: http-addrlist.c  globals.h string.h cups.h ppd.h array.h file.h language.h
+http-addrlist.64.o: http-addrlist.c  i18n.h transcode.h debug.h
+http-support.64.o: http-support.c  debug.h globals.h string.h ../config.h cups.h ipp.h http.h
+http-support.64.o: http-support.c  md5.h ppd.h array.h file.h language.h i18n.h transcode.h
+ipp.64.o: ipp.c  http-private.h ../config.h http.h md5.h ipp-private.h ipp.h globals.h
+ipp.64.o: ipp.c  string.h cups.h ppd.h array.h file.h language.h i18n.h transcode.h
+ipp.64.o: ipp.c  debug.h
+ipp-support.64.o: ipp-support.c  globals.h string.h ../config.h cups.h ipp.h http.h md5.h ppd.h
+ipp-support.64.o: ipp-support.c  array.h file.h language.h i18n.h transcode.h debug.h
+langprintf.64.o: langprintf.c  globals.h string.h ../config.h cups.h ipp.h http.h md5.h ppd.h
+langprintf.64.o: langprintf.c  array.h file.h language.h i18n.h transcode.h
+language.64.o: language.c  globals.h string.h ../config.h cups.h ipp.h http.h md5.h ppd.h
+language.64.o: language.c  array.h file.h language.h i18n.h transcode.h debug.h
+localize.64.o: localize.c  globals.h string.h ../config.h cups.h ipp.h http.h md5.h ppd.h
+localize.64.o: localize.c  array.h file.h language.h i18n.h transcode.h debug.h
+mark.64.o: mark.c  cups.h ipp.h http.h md5.h ppd.h array.h file.h language.h string.h
+mark.64.o: mark.c  ../config.h debug.h
+md5.64.o: md5.c  md5.h string.h ../config.h
+md5passwd.64.o: md5passwd.c  http.h md5.h string.h ../config.h
+notify.64.o: notify.c  globals.h string.h ../config.h cups.h ipp.h http.h md5.h ppd.h
+notify.64.o: notify.c  array.h file.h language.h i18n.h transcode.h
+options.64.o: options.c  cups.h ipp.h http.h md5.h ppd.h array.h file.h language.h string.h
+options.64.o: options.c  ../config.h debug.h
+page.64.o: page.c  ppd.h array.h file.h string.h ../config.h
+ppd.64.o: ppd.c  globals.h string.h ../config.h cups.h ipp.h http.h md5.h ppd.h array.h
+ppd.64.o: ppd.c  file.h language.h i18n.h transcode.h debug.h
+request.64.o: request.c  globals.h string.h ../config.h cups.h ipp.h http.h md5.h ppd.h
+request.64.o: request.c  array.h file.h language.h i18n.h transcode.h debug.h
+snprintf.64.o: snprintf.c  string.h ../config.h
+string.64.o: string.c  debug.h string.h ../config.h globals.h cups.h ipp.h http.h md5.h
+string.64.o: string.c  ppd.h array.h file.h language.h i18n.h transcode.h
+tempfile.64.o: tempfile.c  globals.h string.h ../config.h cups.h ipp.h http.h md5.h ppd.h
+tempfile.64.o: tempfile.c  array.h file.h language.h i18n.h transcode.h debug.h
+transcode.64.o: transcode.c  globals.h string.h ../config.h cups.h ipp.h http.h md5.h ppd.h
+transcode.64.o: transcode.c  array.h file.h language.h i18n.h transcode.h debug.h
+usersys.64.o: usersys.c  http-private.h ../config.h http.h md5.h ipp-private.h ipp.h
+usersys.64.o: usersys.c  globals.h string.h cups.h ppd.h array.h file.h language.h i18n.h
+usersys.64.o: usersys.c  transcode.h
+util.64.o: util.c  globals.h string.h ../config.h cups.h ipp.h http.h md5.h ppd.h
+util.64.o: util.c  array.h file.h language.h i18n.h transcode.h debug.h
+testadmin.64.o: testadmin.c  adminutil.h cups.h ipp.h http.h md5.h ppd.h array.h file.h
+testadmin.64.o: testadmin.c  language.h string.h ../config.h
+testarray.64.o: testarray.c  ../cups/string.h ../config.h string.h array.h dir.h debug.h
+testfile.64.o: testfile.c  string.h ../config.h file.h debug.h
+testhttp.64.o: testhttp.c  http.h md5.h string.h ../config.h
+testi18n.64.o: testi18n.c  i18n.h transcode.h language.h array.h string.h ../config.h
+testipp.64.o: testipp.c  ../cups/string.h ../config.h string.h ipp.h http.h md5.h
+testlang.64.o: testlang.c  i18n.h transcode.h language.h array.h
+testppd.64.o: testppd.c  ../cups/string.h ../config.h string.h ppd.h array.h file.h
index 750b80bc92071dc9194484a9504fe5c47d489c07..92a78cfccc3f81b7ece81833a424d4699e1df123 100644 (file)
@@ -1,5 +1,5 @@
 #
-# "$Id: Makefile 5240 2006-03-07 21:55:29Z mike $"
+# "$Id: Makefile 5303 2006-03-18 01:05:59Z mike $"
 #
 #   API library Makefile for the Common UNIX Printing System (CUPS).
 #
@@ -57,7 +57,6 @@ LIBOBJS       =       \
                mark.o \
                md5.o \
                md5passwd.o \
-               normalize.o \
                notify.o \
                options.o \
                page.o \
@@ -69,8 +68,12 @@ LIBOBJS      =       \
                transcode.o \
                usersys.o \
                util.o
+LIB32OBJS      = $(LIBOBJS:.o=.32.o)
+LIB64OBJS      = $(LIBOBJS:.o=.64.o)
 OBJS   =       \
                $(LIBOBJS) \
+               $(LIB32OBJS) \
+               $(LIB64OBJS) \
                testadmin.o \
                testarray.o \
                testfile.o \
@@ -97,7 +100,6 @@ HEADERS      =       \
                ipp.h \
                language.h \
                md5.h \
-               normalize.h \
                ppd.h \
                transcode.h
 
@@ -108,6 +110,8 @@ HEADERS     =       \
 
 TARGETS        =       \
                $(LIBCUPS) \
+               $(LIB32CUPS) \
+               $(LIB64CUPS) \
                libcups.a \
                testadmin \
                testarray \
@@ -131,7 +135,8 @@ all:        $(TARGETS)
 #
 
 clean:
-       $(RM) $(OBJS) $(TARGETS) `basename $(LIBCUPS) .2` libcups.dylib
+       $(RM) $(OBJS) $(TARGETS)
+       $(RM) libcups.so libcups.sl libcups.dylib libcups.32.so libcups.64.so
 
 
 #
@@ -139,14 +144,20 @@ clean:
 #
 
 depend:
-       makedepend -Y -I.. -fDependencies $(OBJS:.o=.c) >/dev/null 2>&1
+       touch Dependencies.tmp
+       makedepend -Y -I.. -fDependencies.tmp $(OBJS:.o=.c) >/dev/null 2>&1
+       $(RM) Dependencies
+       cp Dependencies.tmp Dependencies
+       sed -r -e '1,$$s/^([^.]+)\.o:/\1\.32.o: \1\.c /' Dependencies.tmp >>Dependencies
+       sed -r -e '1,$$s/^([^.]+)\.o:/\1\.64.o: \1\.c /' Dependencies.tmp >>Dependencies
+       $(RM) Dependencies.tmp
 
 
 #
 # Install object and target files...
 #
 
-install:       all installhdrs $(INSTALLSTATIC)
+install:       all installhdrs $(INSTALLSTATIC) $(INSTALL32) $(INSTALL64)
        $(INSTALL_DIR) -m 755 $(LIBDIR)
        $(INSTALL_LIB) $(LIBCUPS) $(LIBDIR)
        if test $(LIBCUPS) = "libcups.so.2" -o $(LIBCUPS) = "libcups.sl.2"; then \
@@ -172,12 +183,22 @@ installhdrs:
                $(INSTALL_DATA) $$file $(INCLUDEDIR)/cups; \
        done
 
+install32bit:
+       $(INSTALL_DIR) -m 755 $(LIB32DIR)
+       $(INSTALL_LIB) libcups.32.so.2 $(LIB32DIR)/libcups.so.2
+       $(LN) libcups.so $(LIB32DIR)/libcups.so.2
+
+install64bit:
+       $(INSTALL_DIR) -m 755 $(LIB64DIR)
+       $(INSTALL_LIB) libcups.64.so.2 $(LIB64DIR)/libcups.so.2
+       $(LN) libcups.so $(LIB64DIR)/libcups.so.2
+
 
 #
 # Uninstall object and target files...
 #
 
-uninstall:
+uninstall: $(UNINSTALL32) $(UNINSTALL64)
        $(RM) $(LIBDIR)/libcups.2.dylib
        $(RM) $(LIBDIR)/libcups.a
        $(RM) $(LIBDIR)/libcups.dylib
@@ -192,6 +213,16 @@ uninstall:
        done
        -$(RMDIR) $(INCLUDEDIR)/cups
 
+uninstall32bit:
+       $(RM) $(LIB32DIR)/libcups.so
+       $(RM) $(LIB32DIR)/libcups.so.2
+       -$(RMDIR) $(LIB32DIR)
+
+uninstall64bit:
+       $(RM) $(LIB64DIR)/libcups.so
+       $(RM) $(LIB64DIR)/libcups.so.2
+       -$(RMDIR) $(LIB64DIR)
+
 
 #
 # libcups.so.2, libcups.sl.2
@@ -199,18 +230,36 @@ uninstall:
 
 libcups.so.2 libcups.sl.2:     $(LIBOBJS)
        echo Linking $@...
-       $(DSO) $(DSOFLAGS) -o $@ $(LIBOBJS) $(SSLLIBS) $(COMMONLIBS) $(LIBZ)
+       $(DSO) $(ARCHFLAGS) $(DSOFLAGS) -o $@ $(LIBOBJS) $(SSLLIBS) $(COMMONLIBS) $(LIBZ)
        $(RM) `basename $@ .2`
        $(LN) $@ `basename $@ .2`
 
 
+#
+# libcups.32.so.2
+#
+
+libcups.32.so.2:       $(LIB32OBJS)
+       echo Linking 32-bit $@...
+       $(DSO) $(ARCH32FLAGS) $(DSOFLAGS) -o $@ $(LIB32OBJS) $(SSLLIBS) $(COMMONLIBS) $(LIBZ)
+
+
+#
+# libcups.64.so.2
+#
+
+libcups.64.so.2:       $(LIB64OBJS)
+       echo Linking 64-bit $@...
+       $(DSO) $(ARCH64FLAGS) $(DSOFLAGS) -o $@ $(LIB64OBJS) $(SSLLIBS) $(COMMONLIBS) $(LIBZ)
+
+
 #
 # libcups.2.dylib
 #
 
 libcups.2.dylib:       $(LIBOBJS)
        echo Linking $@...
-       $(DSO) $(DSOFLAGS) -o $@ \
+       $(DSO) $(ARCHFLAGS) $(DSOFLAGS) -o $@ \
                -install_name $(libdir)/$@ \
                -current_version 2.7.0 \
                -compatibility_version 2.0.0 \
@@ -236,7 +285,7 @@ libcups_s.a:        $(LIBOBJS)
 
 libcups.la:    $(LIBOBJS)
        echo Linking $@...
-       $(CC) $(DSOFLAGS) -o $@ $(LIBOBJS:.o=.lo) -rpath $(LIBDIR) \
+       $(CC) $(ARCHFLAGS) $(DSOFLAGS) -o $@ $(LIBOBJS:.o=.lo) -rpath $(LIBDIR) \
                -version-info 2:7 $(SSLLIBS) $(COMMONLIBS) $(LIBZ)
 
 
@@ -394,5 +443,5 @@ include Dependencies
 
 
 #
-# End of "$Id: Makefile 5240 2006-03-07 21:55:29Z mike $".
+# End of "$Id: Makefile 5303 2006-03-18 01:05:59Z mike $".
 #
index b58f71d2955a51f49a844d4d5d49b529a2e4ee9e..0f32446f8f586f65941354449736f7686429b3b4 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: adminutil.c 5251 2006-03-08 18:34:07Z mike $"
+ * "$Id: adminutil.c 5288 2006-03-14 02:38:07Z mike $"
  *
  *   Administration utility API definitions for the Common UNIX Printing
  *   System (CUPS).
@@ -168,7 +168,7 @@ cupsAdminCreateWindowsPPD(
   * Create a temporary output file using the destination buffer...
   */
 
-  if ((dstfp = cupsTempFile2(buffer, bufsize)) < 0)
+  if ((dstfp = cupsTempFile2(buffer, bufsize)) == NULL)
   {
     cupsFileClose(srcfp);
 
@@ -1927,5 +1927,5 @@ write_option(cups_file_t     *dstfp,      /* I - PPD file */
 
 
 /*
- * End of "$Id: adminutil.c 5251 2006-03-08 18:34:07Z mike $".
+ * End of "$Id: adminutil.c 5288 2006-03-14 02:38:07Z mike $".
  */
index 65003b8aaef9c2c8a58e3b60350ef46835c43c05..f301b5c2458060153bcf0518c2be7ba36621a693 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: array.c 5119 2006-02-16 15:52:06Z mike $"
+ * "$Id: array.c 5258 2006-03-09 15:40:56Z mike $"
  *
  *   Sorted array routines for the Common UNIX Printing System (CUPS).
  *
  *
  * Contents:
  *
- *   cupsArrayAdd()     - Add an element to the array.
- *   cupsArrayClear()   - Clear the array.
- *   cupsArrayCount()   - Get the number of elements in the array.
- *   cupsArrayCurrent() - Return the current element in the array.
- *   cupsArrayDelete()  - Free all memory used by the array.
- *   cupsArrayDup()     - Duplicate the array.
- *   cupsArrayFind()    - Find an element in the array.
- *   cupsArrayFirst()   - Get the first element in the array.
- *   cupsArrayIndex()   - Get the N-th element in the array.
- *   cupsArrayInsert()  - Insert an element in the array.
- *   cupsArrayLast()    - Get the last element in the array.
- *   cupsArrayNew()     - Create a new array.
- *   cupsArrayNext()    - Get the next element in the array.
- *   cupsArrayPrev()    - Get the previous element in the array.
- *   cupsArrayRemove()  - Remove an element from the array.
- *   cupsArrayRestore() - Reset the current element to the last cupsArraySave.
- *   cupsArraySave()    - Mark the current element for a later cupsArrayRestore.
- *   cups_array_find()  - Find an element in the array...
+ *   cupsArrayAdd()      - Add an element to the array.
+ *   cupsArrayClear()    - Clear the array.
+ *   cupsArrayCount()    - Get the number of elements in the array.
+ *   cupsArrayCurrent()  - Return the current element in the array.
+ *   cupsArrayDelete()   - Free all memory used by the array.
+ *   cupsArrayDup()      - Duplicate the array.
+ *   cupsArrayFind()     - Find an element in the array.
+ *   cupsArrayFirst()    - Get the first element in the array.
+ *   cupsArrayIndex()    - Get the N-th element in the array.
+ *   cupsArrayInsert()   - Insert an element in the array.
+ *   cupsArrayLast()     - Get the last element in the array.
+ *   cupsArrayNew()      - Create a new array.
+ *   cupsArrayNext()     - Get the next element in the array.
+ *   cupsArrayPrev()     - Get the previous element in the array.
+ *   cupsArrayRemove()   - Remove an element from the array.
+ *   cupsArrayRestore()  - Reset the current element to the last cupsArraySave.
+ *   cupsArraySave()     - Mark the current element for a later
+ *                         cupsArrayRestore.
+ *   cupsArrayUserData() - Return the user data for an array.
+ *   cups_array_add()    - Insert or append an element to the array...
+ *   cups_array_find()   - Find an element in the array...
  */
 
 /*
@@ -638,6 +641,20 @@ cupsArraySave(cups_array_t *a)             /* I - Array */
 }
 
 
+/*
+ * 'cupsArrayUserData()' - Return the user data for an array.
+ */
+
+void *                                 /* O - User data */
+cupsArrayUserData(cups_array_t *a)     /* I - Array */
+{
+  if (a)
+    return (a->data);
+  else
+    return (NULL);
+}
+
+
 /*
  * 'cups_array_add()' - Insert or append an element to the array...
  */
@@ -942,5 +959,5 @@ cups_array_find(cups_array_t *a,    /* I - Array */
 
 
 /*
- * End of "$Id: array.c 5119 2006-02-16 15:52:06Z mike $".
+ * End of "$Id: array.c 5258 2006-03-09 15:40:56Z mike $".
  */
index 3c7509237f4ab1a6cc38239a062fac23826e821c..137dd87a22cee09bf1a0db0f3e93f05f56551a79 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: array.h 4970 2006-01-24 14:05:45Z mike $"
+ * "$Id: array.h 5258 2006-03-09 15:40:56Z mike $"
  *
  *   Sorted array definitions for the Common UNIX Printing System (CUPS).
  *
@@ -73,6 +73,7 @@ extern void           *cupsArrayPrev(cups_array_t *a);
 extern int             cupsArrayRemove(cups_array_t *a, void *e);
 extern void            *cupsArrayRestore(cups_array_t *a);
 extern int             cupsArraySave(cups_array_t *a);
+extern void            *cupsArrayUserData(cups_array_t *a);
 
 #  ifdef __cplusplus
 }
@@ -80,5 +81,5 @@ extern int            cupsArraySave(cups_array_t *a);
 #endif /* !_CUPS_ARRAY_H_ */
 
 /*
- * End of "$Id: array.h 4970 2006-01-24 14:05:45Z mike $".
+ * End of "$Id: array.h 5258 2006-03-09 15:40:56Z mike $".
  */
index 2aeda011484b5fa7b99bdd78a12dcec9364edefb..6f4dc78de8ffdcc39600192baf93e5d1d4b9c81f 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: emit.c 5238 2006-03-07 04:41:42Z mike $"
+ * "$Id: emit.c 5257 2006-03-09 15:27:27Z mike $"
  *
  *   PPD code emission routines for the Common UNIX Printing System (CUPS).
  *
@@ -527,7 +527,7 @@ ppdEmitString(ppd_file_t    *ppd,   /* I - PPD file record */
            !strcasecmp(choices[i]->option->keyword, "PageRegion")) &&
           !strcasecmp(choices[i]->choice, "Custom"))
       {
-        bufsize += 37;                 /* %%BeginFeature: *CustomPageSize True */
+        bufsize += 37;                 /* %%BeginFeature: *CustomPageSize True\n */
         bufsize += 50;                 /* Five 9-digit numbers + newline */
       }
       else if (!strcasecmp(choices[i]->choice, "Custom") &&
@@ -535,8 +535,8 @@ ppdEmitString(ppd_file_t    *ppd,   /* I - PPD file record */
                                              choices[i]->option->keyword))
                   != NULL)
       {
-        bufsize += 23 + strlen(choices[i]->option->keyword);
-                                       /* %%BeginFeature: *keyword True */
+        bufsize += 17 + strlen(choices[i]->option->keyword) + 6;
+                                       /* %%BeginFeature: *keyword True\n */
 
         
         for (cparam = (ppd_cparam_t *)cupsArrayFirst(coption->params);
@@ -562,16 +562,16 @@ ppdEmitString(ppd_file_t    *ppd, /* I - PPD file record */
        }
       }
       else
-        bufsize += 19 + strlen(choices[i]->option->keyword) +
-                  strlen(choices[i]->choice);
-                                       /* %%BeginFeature: *keyword choice */
+        bufsize += 17 + strlen(choices[i]->option->keyword) + 1 +
+                  strlen(choices[i]->choice) + 1;
+                                       /* %%BeginFeature: *keyword choice\n */
 
       bufsize += 13;                   /* %%EndFeature\n */
       bufsize += 22;                   /* } stopped cleartomark\n */
     }
 
     if (choices[i]->code)
-      bufsize += strlen(choices[i]->code);
+      bufsize += strlen(choices[i]->code) + 1;
     else
       bufsize += strlen(ppd_custom_code);
   }
@@ -917,5 +917,5 @@ ppd_sort(ppd_choice_t **c1, /* I - First choice */
 
 
 /*
- * End of "$Id: emit.c 5238 2006-03-07 04:41:42Z mike $".
+ * End of "$Id: emit.c 5257 2006-03-09 15:27:27Z mike $".
  */
index 98d5cf1caf4694836ac38a33a655f3aa5cb58bad..2920da0f2991bbeaabf51177bf290bdd32dadb98 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: globals.c 5235 2006-03-06 13:02:23Z mike $"
+ * "$Id: globals.c 5294 2006-03-15 21:09:32Z mike $"
  *
  *   Global variable access routines for the Common UNIX Printing System (CUPS).
  *
@@ -163,7 +163,6 @@ globals_destructor(void *value)             /* I - Data to free */
   _cupsStrFlush(cg);
   _cupsLangFlush(cg);
   _cupsCharmapFlush(cg);
-  _cupsNormalizeMapsFlush(cg);
 
   cupsFreeOptions(cg->cupsd_num_settings, cg->cupsd_settings);
 
@@ -213,5 +212,5 @@ _cupsGlobals(void)
 
 
 /*
- * End of "$Id: globals.c 5235 2006-03-06 13:02:23Z mike $".
+ * End of "$Id: globals.c 5294 2006-03-15 21:09:32Z mike $".
  */
index 15661d587389369b2e42a51088a2d1dfb0aefaf8..1fb98863db239d0342817ae534c56c391a15b167 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: globals.h 5235 2006-03-06 13:02:23Z mike $"
+ * "$Id: globals.h 5294 2006-03-15 21:09:32Z mike $"
  *
  *   Global variable definitions for the Common UNIX Printing System (CUPS).
  *
@@ -34,8 +34,6 @@
 #  include "string.h"
 #  include "cups.h"
 #  include "i18n.h"
-#  include "normalize.h"
-#  include "transcode.h"
 
 #  ifdef HAVE_PTHREAD_H
 #    include <pthread.h>
@@ -93,13 +91,6 @@ typedef struct _cups_globals_s               /**** CUPS global state data ****/
   char                 ipp_unknown[255];
                                        /* Unknown error statuses */
 
-  /* normalize.c */
-  _cups_norm_map_t     *normmap_cache; /* Normalize Map cache */
-  _cups_fold_map_t     *foldmap_cache; /* Case Fold cache */
-  _cups_prop_map_t     *propmap_cache; /* Char Prop Map Cache */
-  _cups_comb_map_t     *combmap_cache; /* Comb Class Map Cache */
-  _cups_break_map_t    *breakmap_cache;/* Line Break Map Cache */
-
   /* language.c */
   cups_lang_t          *lang_cache;    /* Language string cache */
   cups_lang_t          *lang_default;  /* Default language */
@@ -150,11 +141,10 @@ typedef struct _cups_globals_s            /**** CUPS global state data ****/
  * Prototypes...
  */
 
+extern void            _cupsCharmapFlush(_cups_globals_t *cg);
 extern const char      *_cupsGetPassword(const char *prompt);
 extern _cups_globals_t *_cupsGlobals(void);
 extern void            _cupsLangFlush(_cups_globals_t *cg);
-extern void            _cupsCharmapFlush(_cups_globals_t *cg);
-extern void            _cupsNormalizeMapsFlush(_cups_globals_t *cg);
 extern void            _cupsSetError(ipp_status_t status, const char *message);
 extern void            _cupsStrFlush(_cups_globals_t *cg);
 
@@ -169,5 +159,5 @@ extern void         _cupsStrFlush(_cups_globals_t *cg);
 #endif /* !_CUPS_GLOBALS_H_ */
 
 /*
- * End of "$Id: globals.h 5235 2006-03-06 13:02:23Z mike $".
+ * End of "$Id: globals.h 5294 2006-03-15 21:09:32Z mike $".
  */
index 2e380988ea63ad8c0110f833213a617685cbaed3..59a402339d10d0369d4f07ed254e860f434f5f52 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: http.c 5226 2006-03-04 22:03:18Z mike $"
+ * "$Id: http.c 5282 2006-03-13 12:10:33Z mike $"
  *
  *   HTTP routines for the Common UNIX Printing System (CUPS).
  *
@@ -1692,6 +1692,7 @@ httpUpdate(http_t *http)          /* I - HTTP connection */
        case HTTP_PUT :
            http->state ++;
        case HTTP_POST_SEND :
+       case HTTP_HEAD :
            break;
 
        default :
@@ -2280,7 +2281,8 @@ http_setup_ssl(http_t *http)              /* I - HTTP connection */
   gnutls_init(&(conn->session), GNUTLS_CLIENT);
   gnutls_set_default_priority(conn->session);
   gnutls_credentials_set(conn->session, GNUTLS_CRD_CERTIFICATE, *credentials);
-  gnutls_transport_set_ptr(conn->session, (gnutls_transport_ptr)http->fd);
+  gnutls_transport_set_ptr(conn->session,
+                           (gnutls_transport_ptr)((long)http->fd));
 
   if ((gnutls_handshake(conn->session)) != GNUTLS_E_SUCCESS)
   {
@@ -2756,5 +2758,5 @@ http_write_ssl(http_t     *http,  /* I - HTTP connection */
 
 
 /*
- * End of "$Id: http.c 5226 2006-03-04 22:03:18Z mike $".
+ * End of "$Id: http.c 5282 2006-03-13 12:10:33Z mike $".
  */
index 1c520b9320607e7d9551cbccd839ab0c59b1878a..721fc9a65ab3ed2b40851ad2cbff1b56ddd14c45 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: http.h 5235 2006-03-06 13:02:23Z mike $"
+ * "$Id: http.h 5295 2006-03-15 21:16:05Z mike $"
  *
  *   Hyper-Text Transport Protocol definitions for the Common UNIX Printing
  *   System (CUPS).
@@ -39,6 +39,9 @@
 #    include <winsock2.h>
 #    include <ws2tcpip.h>
 #  else
+#    ifdef __sgi /* IRIX needs this for IPv6 support!?! */
+#      define INET6
+#    endif /* __sgi */
 #    include <unistd.h>
 #    include <sys/time.h>
 #    include <sys/socket.h>
@@ -97,6 +100,8 @@ extern "C" {
 #    define s6_addr32  _S6_un._S6_u32
 #  elif defined(__FreeBSD__) || defined(__APPLE__)
 #    define s6_addr32  __u6_addr.__u6_addr32
+#  elif defined(__osf__)
+#    define s6_addr32  s6_un.sa6_laddr
 #  elif defined(WIN32)
 /*
  * Windows only defines byte and 16-bit word members of the union and
@@ -491,5 +496,5 @@ extern ssize_t              httpWrite2(http_t *http, const char *buffer,
 #endif /* !_CUPS_HTTP_H_ */
 
 /*
- * End of "$Id: http.h 5235 2006-03-06 13:02:23Z mike $".
+ * End of "$Id: http.h 5295 2006-03-15 21:16:05Z mike $".
  */
index e5658f2399ca3f9dbc584335d2a4c9e3cb17b63e..4d38ceece77fe3f046339031e286399377b9bed1 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: i18n.h 5238 2006-03-07 04:41:42Z mike $"
+ * "$Id: i18n.h 5294 2006-03-15 21:09:32Z mike $"
  *
  *   (Private) localization support for the Common UNIX Printing System (CUPS).
  *
@@ -31,7 +31,7 @@
  * Include necessary headers...
  */
 
-#  include "language.h"
+#  include "transcode.h"
 
 #  ifdef __cplusplus
 extern "C" {
@@ -55,12 +55,43 @@ typedef struct _cups_message_s              /**** Message catalog entry ****/
        *str;                           /* Localized string */
 } _cups_message_t;
 
+typedef struct _cups_cmap_s            /**** SBCS Charmap Struct ****/
+{
+  struct _cups_cmap_s  *next;          /* Next charmap in cache */
+  int                  used;           /* Number of times entry used */
+  cups_encoding_t      encoding;       /* Legacy charset encoding */
+  cups_ucs2_t          char2uni[256];  /* Map Legacy SBCS -> UCS-2 */
+  cups_sbcs_t          *uni2char[256]; /* Map UCS-2 -> Legacy SBCS */
+} _cups_cmap_t;
+
+typedef struct _cups_wide2uni_s                /**** Wide to Unicode ****/
+{
+  cups_vbcs_t          widechar;       /* VBCS 32-bit Char (EUC) */
+  cups_ucs2_t          unichar;        /* UCS-2 Char */
+} _cups_wide2uni_t;
+
+typedef struct _cups_vmap_s            /**** VBCS Charmap Struct ****/
+{
+  struct _cups_vmap_s  *next;          /* Next charmap in cache */
+  int                  used;           /* Number of times entry used */
+  cups_encoding_t      encoding;       /* Legacy charset encoding */
+  cups_ucs2_t          *char2uni[256]; /* Map 16-bit Char -> UCS-2 */
+  int                  charcount;      /* Count of 16-bit VBCS Chars */
+  _cups_wide2uni_t     *wide2uni;      /* Map 32-bit Char -> UCS-2 */
+  int                  widecount;      /* Count of 32-bit VBCS Chars */
+  cups_vbcs_t          *uni2char[256]; /* Map UCS-2 -> 32-bit VBCS */
+  cups_sbcs_t          lead2char[256]; /* Legacy Lead Char - 2-byte */
+  cups_sbcs_t          lead3char[256]; /* Legacy Lead Char - 3-byte */
+  cups_sbcs_t          lead4char[256]; /* Legacy Lead Char - 4-byte */
+} _cups_vmap_t;
+
 
 /*
  * Prototypes...
  */
 
-/**** New in CUPS 1.2 ****/
+extern void            _cupsCharmapFree(const cups_encoding_t encoding);
+extern void            *_cupsCharmapGet(const cups_encoding_t encoding);
 extern const char      *_cupsEncodingName(cups_encoding_t encoding);
 extern int             _cupsLangPrintf(FILE *fp, const char *message, ...)
 #    ifdef __GNUC__
@@ -80,5 +111,5 @@ extern const char    *_cupsMessageLookup(cups_array_t *a, const char *m);
 #endif /* !_CUPS_I18N_H_ */
 
 /*
- * End of "$Id: i18n.h 5238 2006-03-07 04:41:42Z mike $".
+ * End of "$Id: i18n.h 5294 2006-03-15 21:09:32Z mike $".
  */
index bcf6d564b7aa1277f6a5790b61682a74ff45e5fa..6eccb4d655f6a2c075c014ed42d23ef73147b1db 100644 (file)
@@ -1,6 +1,8 @@
 _cupsAdminGetServerSettings
 _cupsAdminSetServerSettings
 _cupsCharmapFlush
+_cupsCharmapFree
+_cupsCharmapGet
 _cupsEncodingName
 _cupsGetPassword
 _cupsGlobals
@@ -14,14 +16,15 @@ _cupsMD5Init
 _cupsMessageFree
 _cupsMessageLoad
 _cupsMessageLookup
-_cupsNormalizeMapsFlush
 _cupsSetError
 _cupsStrAlloc
-_cups_strcpy
 _cupsStrFlush
+_cupsStrFormatd
 _cupsStrFree
+_cupsStrScand
+_cupsStrStatistics
+_cups_strcpy
 _cups_strlcat
 _cups_strlcpy
-_cupsStrStatistics
 _ippAddAttr
 _ippFreeAttr
diff --git a/cups/normalize.c b/cups/normalize.c
deleted file mode 100644 (file)
index 35e7730..0000000
+++ /dev/null
@@ -1,2188 +0,0 @@
-/*
- * "$Id: normalize.c 4967 2006-01-24 03:42:15Z mike $"
- *
- *   Unicode normalization for the Common UNIX Printing System (CUPS).
- *
- *   Copyright 1997-2006 by Easy Software Products.
- *
- *   These coded instructions, statements, and computer programs are
- *   the property of Easy Software Products and are protected by Federal
- *   copyright law.  Distribution and use rights are outlined in the
- *   file "LICENSE.txt" which should have been included with this file.
- *   If this file is missing or damaged please contact Easy Software
- *   Products at:
- *
- *       Attn: CUPS Licensing Information
- *       Easy Software Products
- *       44141 Airport View Drive, Suite 204
- *       Hollywood, Maryland 20636 USA
- *
- *       Voice: (301) 373-9600
- *       EMail: cups-info@cups.org
- *         WWW: http://www.cups.org
- *
- * Contents:
- *
- *   cupsNormalizeMapsGet()       - Get all norm maps to cache.
- *   cupsNormalizeMapsFree()      - Free all norm maps in cache.
- *   cupsNormalizeMapsFlush()     - Flush all norm maps in cache.
- *   _cupsNormalizeMapsFlush()    - Flush all normalization maps in cache.
- *   cupsUTF8Normalize()          - Normalize UTF-8 string.
- *   cupsUTF32Normalize()         - Normalize UTF-32 string.
- *   cupsUTF8CaseFold()           - Case fold UTF-8 string.
- *   cupsUTF32CaseFold()          - Case fold UTF-32 string.
- *   cupsUTF8CompareCaseless()    - Compare case folded UTF-8 strings.
- *   cupsUTF32CompareCaseless()   - Compare case folded UTF-32 strings.
- *   cupsUTF8CompareIdentifier()  - Compare folded NFKC UTF-8 strings.
- *   cupsUTF32CompareIdentifier() - Compare folded NFKC UTF-32 strings.
- *   cupsUTF32CharacterProperty() - Get UTF-32 character property.
- *   get_general_category()       - Get UTF-32 Char General Category.
- *   get_bidi_category()          - Get UTF-32 Char Bidi Category.
- *   get_combining_class()        - Get UTF-32 Char Combining Class.
- *   get_break_class()            - Get UTF-32 Char Line Break Class.
- *   get_map_count()              - Count lines in a map file.
- *   get_normmap()                - Get Unicode norm map to cache.
- *   get_foldmap()                - Get Unicode casefold map to cache.
- *   get_propmap()                - Get Unicode property map to cache.
- *   get_combmap()                - Get Unicode combining map to cache.
- *   get_breakmap()               - Get Unicode break map to cache.
- *   compare_compose()            - Compare key for compose match.
- *   compare_decompose()          - Compare key for decompose match.
- *   compare_foldchar()           - Compare key for case fold match.
- *   compare_combchar()           - Compare key for combining match.
- *   compare_breakchar()          - Compare key for line break match.
- *   compare_propchar()           - Compare key for property char match.
- */
-
-/*
- * Include necessary headers...
- */
-
-#include "globals.h"
-#include "debug.h"
-#include <stdlib.h>
-#include <errno.h>
-#include <time.h>
-
-
-typedef struct                         /**** General Category Index Struct****/
-{
-  cups_gencat_t        gencat;                 /* General Category Value */
-  const char   *str;                   /* General Category String */
-} gencat_t;
-
-static const gencat_t gencat_index[] = /* General Category Index */
-{
-  { CUPS_GENCAT_LU, "Lu" },            /* Letter, Uppercase */
-  { CUPS_GENCAT_LL, "Ll" },            /* Letter, Lowercase */
-  { CUPS_GENCAT_LT, "Lt" },            /* Letter, Titlecase */
-  { CUPS_GENCAT_LM, "Lm" },            /* Letter, Modifier */
-  { CUPS_GENCAT_LO, "Lo" },            /* Letter, Other */
-  { CUPS_GENCAT_MN, "Mn" },            /* Mark, Non-Spacing */
-  { CUPS_GENCAT_MC, "Mc" },            /* Mark, Spacing Combining */
-  { CUPS_GENCAT_ME, "Me" },            /* Mark, Enclosing */
-  { CUPS_GENCAT_ND, "Nd" },            /* Number, Decimal Digit */
-  { CUPS_GENCAT_NL, "Nl" },            /* Number, Letter */
-  { CUPS_GENCAT_NO, "No" },            /* Number, Other */
-  { CUPS_GENCAT_PC, "Pc" },            /* Punctuation, Connector */
-  { CUPS_GENCAT_PD, "Pd" },            /* Punctuation, Dash */
-  { CUPS_GENCAT_PS, "Ps" },            /* Punctuation, Open (start) */
-  { CUPS_GENCAT_PE, "Pe" },            /* Punctuation, Close (end) */
-  { CUPS_GENCAT_PI, "Pi" },            /* Punctuation, Initial Quote */
-  { CUPS_GENCAT_PF, "Pf" },            /* Punctuation, Final Quote */
-  { CUPS_GENCAT_PO, "Po" },            /* Punctuation, Other */
-  { CUPS_GENCAT_SM, "Sm" },            /* Symbol, Math */
-  { CUPS_GENCAT_SC, "Sc" },            /* Symbol, Currency */
-  { CUPS_GENCAT_SK, "Sk" },            /* Symbol, Modifier */
-  { CUPS_GENCAT_SO, "So" },            /* Symbol, Other */
-  { CUPS_GENCAT_ZS, "Zs" },            /* Separator, Space */
-  { CUPS_GENCAT_ZL, "Zl" },            /* Separator, Line */
-  { CUPS_GENCAT_ZP, "Zp" },            /* Separator, Paragraph */
-  { CUPS_GENCAT_CC, "Cc" },            /* Other, Control */
-  { CUPS_GENCAT_CF, "Cf" },            /* Other, Format */
-  { CUPS_GENCAT_CS, "Cs" },            /* Other, Surrogate */
-  { CUPS_GENCAT_CO, "Co" },            /* Other, Private Use */
-  { CUPS_GENCAT_CN, "Cn" },            /* Other, Not Assigned */
-  { 0, NULL }
-};
-
-static const char * const bidicat_index[] =
-                                       /* Bidi Category Index */
-{
-  "L",                                 /* Left-to-Right (Alpha, Syllabic, Ideographic) */
-  "LRE",                               /* Left-to-Right Embedding (explicit) */
-  "LRO",                               /* Left-to-Right Override (explicit) */
-  "R",                                 /* Right-to-Left (Hebrew alphabet and most punct) */
-  "AL",                                        /* Right-to-Left Arabic (Arabic, Thaana, Syriac) */
-  "RLE",                               /* Right-to-Left Embedding (explicit) */
-  "RLO",                               /* Right-to-Left Override (explicit) */
-  "PDF",                               /* Pop Directional Format */
-  "EN",                                        /* Euro Number (Euro and East Arabic-Indic digits) */
-  "ES",                                        /* Euro Number Separator (Slash) */
-  "ET",                                        /* Euro Number Termintor (Plus, Minus, Degree, etc) */
-  "AN",                                        /* Arabic Number (Arabic-Indic digits, separators) */
-  "CS",                                        /* Common Number Separator (Colon, Comma, Dot, etc) */
-  "NSM",                               /* Non-Spacing Mark (category Mn / Me in UCD) */
-  "BN",                                        /* Boundary Neutral (Formatting / Control chars) */
-  "B",                                 /* Paragraph Separator */
-  "S",                                 /* Segment Separator (Tab) */
-  "WS",                                        /* Whitespace Space (Space, Line Separator, etc) */
-  "ON",                                        /* Other Neutrals */
-  NULL
-};
-
-typedef struct                         /**** Line Break Class Index Struct****/
-{
-  cups_break_class_t   breakclass;     /* Line Break Class Value */
-  const char           *str;           /* Line Break Class String */
-} _cups_break_t;
-
-static const _cups_break_t break_index[] =     /* Line Break Class Index */
-{
-  { CUPS_BREAK_AI, "AI" },             /* Ambiguous (Alphabetic or Ideograph) */
-  { CUPS_BREAK_AL, "AL" },             /* Ordinary Alpha/Symbol Chars (XP) */
-  { CUPS_BREAK_BA, "BA" },             /* Break Opportunity After Chars (A) */
-  { CUPS_BREAK_BB, "BB" },             /* Break Opportunities Before Chars (B) */
-  { CUPS_BREAK_B2, "B2" },             /* Break Opportunity Either (B/A/XP) */
-  { CUPS_BREAK_BK, "BK" },             /* Mandatory Break (A) (norm) */
-  { CUPS_BREAK_CB, "CB" },             /* Contingent Break (B/A) (norm) */
-  { CUPS_BREAK_CL, "CL" },             /* Closing Punctuation (XB) */
-  { CUPS_BREAK_CM, "CM" },             /* Attached/Combining (XB) (norm) */
-  { CUPS_BREAK_CR, "CR" },             /* Carriage Return (A) (norm) */
-  { CUPS_BREAK_EX, "EX" },             /* Exclamation / Interrogation (XB) */
-  { CUPS_BREAK_GL, "GL" },             /* Non-breaking ("Glue") (XB/XA) (norm) */
-  { CUPS_BREAK_HY, "HY" },             /* Hyphen (XA) */
-  { CUPS_BREAK_ID, "ID" },             /* Ideographic (B/A) */
-  { CUPS_BREAK_IN, "IN" },             /* Inseparable chars (XP) */
-  { CUPS_BREAK_IS, "IS" },             /* Numeric Separator (Infix) (XB) */
-  { CUPS_BREAK_LF, "LF" },             /* Line Feed (A) (norm) */
-  { CUPS_BREAK_NS, "NS" },             /* Non-starters (XB) */
-  { CUPS_BREAK_NU, "NU" },             /* Numeric (XP) */
-  { CUPS_BREAK_OP, "OP" },             /* Opening Punctuation (XA) */
-  { CUPS_BREAK_PO, "PO" },             /* Postfix (Numeric) (XB) */
-  { CUPS_BREAK_PR, "PR" },             /* Prefix (Numeric) (XA) */
-  { CUPS_BREAK_QU, "QU" },             /* Ambiguous Quotation (XB/XA) */
-  { CUPS_BREAK_SA, "SA" },             /* Context Dependent (SE Asian) (P) */
-  { CUPS_BREAK_SG, "SG" },             /* Surrogates (XP) (norm) */
-  { CUPS_BREAK_SP, "SP" },             /* Space (A) (norm) */
-  { CUPS_BREAK_SY, "SY" },             /* Symbols Allowing Break After (A) */
-  { CUPS_BREAK_XX, "XX" },             /* Unknown (XP) */
-  { CUPS_BREAK_ZW, "ZW" },             /* Zero Width Space (A) (norm) */
-  { 0, NULL }
-};
-
-/*
- * Prototypes...
- */
-
-static int compare_breakchar(const void *k1, const void *k2);
-static int compare_combchar(const void *k1, const void *k2);
-static int compare_compose(const void *k1, const void *k2);
-static int compare_decompose(const void *k1, const void *k2);
-static int compare_foldchar(const void *k1, const void *k2);
-static int compare_propchar(const void *k1, const void *k2);
-static int get_bidi_category(const cups_utf32_t ch);
-static int get_break_class(const cups_utf32_t ch);
-static int get_breakmap(void);
-static int get_combining_class(const cups_utf32_t ch);
-static int get_combmap(void);
-static int get_foldmap(const cups_folding_t fold);
-static int get_general_category(const cups_utf32_t ch);
-static int get_map_count(const char *filename);
-static int get_normmap(const cups_normalize_t normalize);
-static int get_propmap(void);
-
-
-/*
- * 'cupsNormalizeMapsGet()' - Get all normalization maps to cache.
- */
-
-int                                    /* O - Zero or -1 on error */
-cupsNormalizeMapsGet(void)
-{
-  _cups_norm_map_t     *nmap;          /* Unicode Normalization Map */
-  _cups_fold_map_t     *fmap;          /* Unicode Case Folding Map */
-  _cups_globals_t      *cg = _cupsGlobals();
-                                       /* Pointer to library globals */
-
-
- /*
-  * See if we already have normalization maps loaded...
-  */
-
-  if (cg->normmap_cache)
-  {
-    for (nmap = cg->normmap_cache; nmap != NULL; nmap = nmap->next)
-      nmap->used ++;
-
-    for (fmap = cg->foldmap_cache; fmap != NULL; fmap = fmap->next)
-      fmap->used ++;
-
-    if (cg->combmap_cache)
-      cg->combmap_cache->used ++;
-
-    if (cg->propmap_cache)
-      cg->propmap_cache->used ++;
-
-    if (cg->breakmap_cache)
-      cg->breakmap_cache->used ++;
-
-    return (0);
-  }
-
- /*
-  * Get normalization maps...
-  */
-
-  if (get_normmap(CUPS_NORM_NFD) < 0)
-    return (-1);
-
-  if (get_normmap(CUPS_NORM_NFKD) < 0)
-    return (-1);
-
-  if (get_normmap(CUPS_NORM_NFC) < 0)
-    return (-1);
-
- /*
-  * Get case folding, combining class, character property maps...
-  */
-
-  if (get_foldmap(CUPS_FOLD_SIMPLE) < 0)
-    return (-1);
-
-  if (get_foldmap(CUPS_FOLD_FULL) < 0)
-    return (-1);
-
-  if (get_propmap() < 0)
-    return (-1);
-
-  if (get_combmap() < 0)
-    return (-1);
-
-  if (get_breakmap() < 0)
-    return (-1);
-
-  return (0);
-}
-
-
-/*
- * 'cupsNormalizeMapsFree()' - Free all normalization maps in cache.
- *
- * This does not actually free; use 'cupsNormalizeMapsFlush()' for that.
- */
-
-int                                    /* O - Zero or -1 on error */
-cupsNormalizeMapsFree(void)
-{
-  _cups_norm_map_t     *nmap;          /* Unicode Normalization Map */
-  _cups_fold_map_t     *fmap;          /* Unicode Case Folding Map */
-  _cups_globals_t      *cg = _cupsGlobals();
-                                       /* Pointer to library globals */
-
-
- /*
-  * See if we already have normalization maps loaded...
-  */
-
-  if (cg->normmap_cache == NULL)
-    return (-1);
-
-  for (nmap = cg->normmap_cache; nmap != NULL; nmap = nmap->next)
-    if (nmap->used > 0)
-      nmap->used --;
-
-  for (fmap = cg->foldmap_cache; fmap != NULL; fmap = fmap->next)
-    if (fmap->used > 0)
-      fmap->used --;
-
-  if (cg->propmap_cache && (cg->propmap_cache->used > 0))
-    cg->propmap_cache->used --;
-
-  if (cg->combmap_cache && (cg->combmap_cache->used > 0))
-    cg->combmap_cache->used --;
-
-  if (cg->breakmap_cache && (cg->breakmap_cache->used > 0))
-    cg->breakmap_cache->used --;
-
-  return (0);
-}
-
-
-/*
- * 'cupsNormalizeMapsFlush()' - Flush all normalization maps in cache.
- */
-
-void
-cupsNormalizeMapsFlush(void)
-{
-  _cupsNormalizeMapsFlush(_cupsGlobals());
-}
-
-
-/*
- * '_cupsNormalizeMapsFlush()' - Flush all normalization maps in cache.
- */
-
-void
-_cupsNormalizeMapsFlush(
-    _cups_globals_t *cg)               /* I - Global data */
-{
-  _cups_norm_map_t     *nmap;          /* Unicode Normalization Map */
-  _cups_norm_map_t     *nextnorm;      /* Next Unicode Normalization Map */
-  _cups_fold_map_t     *fmap;          /* Unicode Case Folding Map */
-  _cups_fold_map_t     *nextfold;      /* Next Unicode Case Folding Map */
-
-
- /*
-  * Flush all normalization maps...
-  */
-
-  for (nmap = cg->normmap_cache; nmap != NULL; nmap = nextnorm)
-  {
-    free(nmap->uni2norm);
-    nextnorm = nmap->next;
-    free(nmap);
-  }
-
-  cg->normmap_cache = NULL;
-
-  for (fmap = cg->foldmap_cache; fmap != NULL; fmap = nextfold)
-  {
-    free(fmap->uni2fold);
-    nextfold = fmap->next;
-    free(fmap);
-  }
-
-  cg->foldmap_cache = NULL;
-
-  if (cg->propmap_cache)
-  {
-    free(cg->propmap_cache->uni2prop);
-    free(cg->propmap_cache);
-    cg->propmap_cache = NULL;
-  }
-
-  if (cg->combmap_cache)
-  {
-    free(cg->combmap_cache->uni2comb);
-    free(cg->combmap_cache);
-    cg->combmap_cache = NULL;
-  }
-
-  if (cg->breakmap_cache)
-  {
-    free(cg->breakmap_cache->uni2break);
-    free(cg->breakmap_cache);
-    cg->breakmap_cache = NULL;
-  }
-}
-
-
-/*
- * 'cupsUTF8Normalize()' - Normalize UTF-8 string.
- *
- * Normalize UTF-8 string to Unicode UAX-15 Normalization Form
- * Note - Compatibility Normalization Forms (NFKD/NFKC) are
- * unsafe for subsequent transcoding to legacy charsets
- */
-
-int                                    /* O - Count or -1 on error */
-cupsUTF8Normalize(
-    cups_utf8_t            *dest,      /* O - Target string */
-    const cups_utf8_t      *src,       /* I - Source string */
-    const int              maxout,     /* I - Max output */
-    const cups_normalize_t normalize)  /* I - Normalization */
-{
-  int          len;                    /* String length */
-  cups_utf32_t work1[CUPS_MAX_USTRING];/* First internal UCS-4 string */
-  cups_utf32_t work2[CUPS_MAX_USTRING];/* Second internal UCS-4 string */
-
-
- /*
-  * Check for valid arguments and clear output...
-  */
-
-  if (!dest || !src || maxout < 1 || maxout > CUPS_MAX_USTRING)
-    return (-1);
-
-  *dest = 0;
-
- /*
-  * Convert input UTF-8 to internal UCS-4 (and insert BOM)...
-  */
-
-  len = cupsUTF8ToUTF32(work1, src, CUPS_MAX_USTRING);
-
-  if (len < 0)
-    return (-1);
-
- /*
-  * Normalize internal UCS-4 to second internal UCS-4...
-  */
-
-  len = cupsUTF32Normalize(work2, work1, CUPS_MAX_USTRING, normalize);
-
-  if (len < 0)
-    return (-1);
-
- /*
-  * Convert internal UCS-4 to output UTF-8 (and delete BOM)...
-  */
-
-  len = cupsUTF32ToUTF8(dest, work2, maxout);
-
-  return (len);
-}
-
-
-/*
- * 'cupsUTF32Normalize()' - Normalize UTF-32 string.
- *
- * Normalize UTF-32 string to Unicode UAX-15 Normalization Form
- * Note - Compatibility Normalization Forms (NFKD/NFKC) are
- * unsafe for subsequent transcoding to legacy charsets
- */
-
-int                                    /* O - Count or -1 on error */
-cupsUTF32Normalize(
-    cups_utf32_t           *dest,      /* O - Target string */
-    const cups_utf32_t     *src,       /* I - Source string */
-    const int              maxout,     /* I - Max output */
-    const cups_normalize_t normalize)  /* I - Normalization */
-{
-  int                  i;              /* Looping variable */
-  int                  result;         /* Result Value */
-  cups_ucs2_t          *mp;            /* Map char pointer */
-  int                  pass;           /* Pass count for each transform */
-  int                  hit;            /* Hit count from binary search */
-  cups_utf32_t         unichar1;       /* Unicode character value */
-  cups_utf32_t         unichar2;       /* Unicode character value */
-  _cups_comb_class_t   class1;         /* First Combining Class */
-  _cups_comb_class_t   class2;         /* Second Combining Class */
-  int                  len;            /* String length */
-  cups_utf32_t         work1[CUPS_MAX_USTRING];
-                                       /* First internal UCS-4 string */
-  cups_utf32_t         work2[CUPS_MAX_USTRING];
-                                       /* Second internal UCS-4 string */
-  cups_utf32_t         *p1;            /* First UCS-4 string pointer */
-  cups_utf32_t         *p2;            /* Second UCS-4 string pointer */
-  _cups_norm_map_t     *nmap;          /* Unicode Normalization Map */
-  cups_normalize_t     decompose;      /* Decomposition Type */
-  _cups_globals_t      *cg = _cupsGlobals();
-                                       /* Pointer to library globals */
-
-
- /*
-  * Check for valid arguments and clear output...
-  */
-
-  if (!dest || !src || maxout < 1 || maxout > CUPS_MAX_USTRING)
-    return (-1);
-
-  *dest = 0;
-
-  result = cupsNormalizeMapsGet();
-
-  if (result < 0)
-    return (-1);
-
- /*
-  * Find decomposition map...
-  */
-
-  switch (normalize)
-  {
-    case CUPS_NORM_NFD:
-    case CUPS_NORM_NFC:
-       decompose = CUPS_NORM_NFD;
-       break;
-
-    case CUPS_NORM_NFKD:
-    case CUPS_NORM_NFKC:
-       decompose = CUPS_NORM_NFKD;
-       break;
-
-    default:
-       return (-1);
-  }
-
-  for (nmap = cg->normmap_cache; nmap != NULL; nmap = nmap->next)
-    if (nmap->normalize == decompose)
-      break;
-
-  if (nmap == NULL)
-    return (-1);
-
- /*
-  * Copy input to internal buffer...
-  */
-
-  p1 = &work1[0];
-
-  for (i = 0; i < CUPS_MAX_USTRING; i ++)
-  {
-    if (*src == 0)
-      break;
-
-    *p1 ++ = *src ++;
-  }
-
-  *p1 = 0;
-  len = i;
-
- /*
-  * Decompose until no further decomposition...
-  */
-
-  for (pass = 0; pass < 20; pass ++)
-  {
-    p1 = &work1[0];
-    p2 = &work2[0];
-
-    for (hit = 0; *p1 != 0; p1 ++)
-    {
-     /*
-      * Check for decomposition defined...
-      */
-
-      mp = (cups_ucs2_t *)bsearch(p1, nmap->uni2norm, nmap->normcount,
-                                  (sizeof(cups_ucs2_t) * 3), compare_decompose);
-      if (mp == NULL)
-      {
-        *p2 ++ = *p1;
-        continue;
-      }
-
-     /*
-      * Decompose input character to one or two output characters...
-      */
-
-      hit ++;
-      mp ++;
-      *p2 ++ = (cups_utf32_t) *mp ++;
-
-      if (*mp != 0)
-        *p2 ++ = (cups_utf32_t) *mp;
-    }
-
-    *p2 = 0;
-    len = (int)(p2 - &work2[0]);
-
-   /*
-    * Check for decomposition finished...
-    */
-    if (hit == 0)
-      break;
-    memcpy (work1, work2, sizeof(cups_utf32_t) * (len + 1));
-  }
-
- /*
-  * Canonical reorder until no further reordering...
-  */
-
-  for (pass = 0; pass < 20; pass ++)
-  {
-    p1 = &work1[0];
-
-    for (hit = 0; *p1 != 0; p1 ++)
-    {
-     /*
-      * Check for combining characters to reorder...
-      */
-
-      unichar1 = *p1;
-      unichar2 = *(p1 + 1);
-
-      if (unichar2 == 0)
-        break;
-
-      class1 = get_combining_class(unichar1);
-      class2 = get_combining_class(unichar2);
-
-      if ((class1 < 0) || (class2 < 0))
-        return (-1);
-
-      if ((class1 == 0) || (class2 == 0))
-        continue;
-
-      if (class1 <= class2)
-        continue;
-
-     /*
-      * Swap two combining characters...
-      */
-
-      *p1 = unichar2;
-      p1 ++;
-      *p1 = unichar1;
-      hit ++;
-    }
-
-    if (hit == 0)
-      break;
-  }
-
- /*
-  * Check for decomposition only...
-  */
-
-  if (normalize == CUPS_NORM_NFD || normalize == CUPS_NORM_NFKD)
-  {
-    memcpy(dest, work1, sizeof(cups_utf32_t) * (len + 1));
-    return (len);
-  }
-
- /*
-  * Find composition map...
-  */
-
-  for (nmap = cg->normmap_cache; nmap != NULL; nmap = nmap->next)
-    if (nmap->normalize == CUPS_NORM_NFC)
-      break;
-
-  if (nmap == NULL)
-    return (-1);
-
- /*
-  * Compose until no further composition...
-  */
-
-  for (pass = 0; pass < 20; pass ++)
-  {
-    p1 = &work1[0];
-    p2 = &work2[0];
-
-    for (hit = 0; *p1 != 0; p1 ++)
-    {
-     /*
-      * Check for composition defined...
-      */
-
-      unichar1 = *p1;
-      unichar2 = *(p1 + 1);
-
-      if (unichar2 == 0)
-      {
-        *p2 ++ = unichar1;
-        break;
-      }
-
-      mp = (cups_ucs2_t *)bsearch(p1, nmap->uni2norm, nmap->normcount,
-                                  (sizeof(cups_ucs2_t) * 3), compare_compose);
-      if (mp == NULL)
-      {
-        *p2 ++ = *p1;
-        continue;
-      }
-
-     /*
-      * Compose two input characters to one output character...
-      */
-
-      hit ++;
-      mp += 2;
-      *p2 ++ = (cups_utf32_t) *mp;
-      p1 ++;
-    }
-
-    *p2 = 0;
-    len = (int) (p2 - &work2[0]);
-
-   /*
-    * Check for composition finished...
-    */
-
-    if (hit == 0)
-      break;
-
-    memcpy (work1, work2, sizeof(cups_utf32_t) * (len + 1));
-  }
-
-  memcpy (dest, work1, sizeof(cups_utf32_t) * (len + 1));
-
-  cupsNormalizeMapsFree();
-
-  return (len);
-}
-
-
-/*
- * 'cupsUTF8CaseFold()' - Case fold UTF-8 string.
- *
- * Case Fold UTF-8 string per Unicode UAX-21 Section 2.3
- * Note - Case folding output is
- * unsafe for subsequent transcoding to legacy charsets
- */
-
-int                                    /* O - Count or -1 on error */
-cupsUTF8CaseFold(
-    cups_utf8_t          *dest,                /* O - Target string */
-    const cups_utf8_t    *src,         /* I - Source string */
-    const int            maxout,       /* I - Max output */
-    const cups_folding_t fold)         /* I - Fold Mode */
-{
-  int          len;                    /* String length */
-  cups_utf32_t work1[CUPS_MAX_USTRING];/* First internal UCS-4 string */
-  cups_utf32_t work2[CUPS_MAX_USTRING];/* Second internal UCS-4 string */
-
-
- /*
-  * Check for valid arguments and clear output...
-  */
-
-  if (!dest || !src || maxout < 1 || maxout > CUPS_MAX_USTRING)
-    return (-1);
-
-  *dest = 0;
-
-  if (fold != CUPS_FOLD_SIMPLE && fold != CUPS_FOLD_FULL)
-    return (-1);
-
- /*
-  * Convert input UTF-8 to internal UCS-4 (and insert BOM)...
-  */
-
-  len = cupsUTF8ToUTF32(work1, src, CUPS_MAX_USTRING);
-
-  if (len < 0)
-    return (-1);
-
- /*
-  * Case Fold internal UCS-4 to second internal UCS-4...
-  */
-
-  len = cupsUTF32CaseFold(work2, work1, CUPS_MAX_USTRING, fold);
-
-  if (len < 0)
-    return (-1);
-
- /*
-  * Convert internal UCS-4 to output UTF-8 (and delete BOM)...
-  */
-
-  len = cupsUTF32ToUTF8(dest, work2, maxout);
-
-  return (len);
-}
-
-
-/*
- * 'cupsUTF32CaseFold()' - Case fold UTF-32 string.
- *
- * Case Fold UTF-32 string per Unicode UAX-21 Section 2.3
- * Note - Case folding output is
- * unsafe for subsequent transcoding to legacy charsets
- */
-
-int                                    /* O - Count or -1 on error */
-cupsUTF32CaseFold(
-    cups_utf32_t         *dest,                /* O - Target string */
-    const cups_utf32_t   *src,         /* I - Source string */
-    const int            maxout,       /* I - Max output */
-    const cups_folding_t fold)         /* I - Fold Mode */
-{
-  cups_utf32_t         *start = dest;  /* Start of destination string */
-  int                  i;              /* Looping variable */
-  int                  result;         /* Result Value */
-  cups_ucs2_t          *mp;            /* Map char pointer */
-  _cups_fold_map_t     *fmap;          /* Unicode Case Folding Map */
-  _cups_globals_t      *cg = _cupsGlobals();
-                                       /* Pointer to library globals */
-
-
- /*
-  * Check for valid arguments and clear output...
-  */
-
-  if (!dest || !src || maxout < 1 || maxout > CUPS_MAX_USTRING)
-    return (-1);
-
-  *dest = 0;
-
-  if (fold != CUPS_FOLD_SIMPLE && fold != CUPS_FOLD_FULL)
-    return (-1);
-
- /*
-  * Find case folding map...
-  */
-
-  result = cupsNormalizeMapsGet();
-
-  if (result < 0)
-    return (-1);
-
-  for (fmap = cg->foldmap_cache; fmap != NULL; fmap = fmap->next)
-    if (fmap->fold == fold)
-      break;
-
-  if (fmap == NULL)
-    return (-1);
-
- /*
-  * Case fold input string to output string...
-  */
-
-  for (i = 0; i < (maxout - 1); i ++, src ++)
-  {
-   /*
-    * Check for case folding defined...
-    */
-
-    mp = (cups_ucs2_t *)bsearch(src, fmap->uni2fold, fmap->foldcount,
-                                (sizeof(cups_ucs2_t) * 4), compare_foldchar);
-    if (mp == NULL)
-    {
-      *dest ++ = *src;
-      continue;
-    }
-
-   /*
-    * Case fold input character to one or two output characters...
-    */
-
-    mp ++;
-    *dest ++ = (cups_utf32_t) *mp ++;
-
-    if (*mp != 0 && fold == CUPS_FOLD_FULL)
-    {
-      i ++;
-      if (i >= (maxout - 1))
-        break;
-
-      *dest ++ = (cups_utf32_t) *mp;
-    }
-  }
-
-  *dest = 0;
-
-  cupsNormalizeMapsFree();
-
-  return ((int)(dest - start));
-}
-
-
-/*
- * 'cupsUTF8CompareCaseless()' - Compare case folded UTF-8 strings.
- */
-
-int                                    /* O - Difference of strings */
-cupsUTF8CompareCaseless(
-    const cups_utf8_t *s1,             /* I - String1 */
-    const cups_utf8_t *s2)             /* I - String2 */
-{
-  int          difference;             /* Difference of two strings */
-  int          len;                    /* String length */
-  cups_utf32_t work1[CUPS_MAX_USTRING];/* First internal UCS-4 string */
-  cups_utf32_t work2[CUPS_MAX_USTRING];/* Second internal UCS-4 string */
-
-
- /*
-  * Check for valid arguments...
-  */
-
-  if (!s1 || !s2)
-    return (-1);
-
- /*
-  * Convert input UTF-8 to internal UCS-4 (and insert BOM)...
-  */
-
-  len = cupsUTF8ToUTF32(work1, s1, CUPS_MAX_USTRING);
-
-  if (len < 0)
-    return (-1);
-
-  len = cupsUTF8ToUTF32(work2, s2, CUPS_MAX_USTRING);
-
-  if (len < 0)
-    return (-1);
-
- /*
-  * Compare first internal UCS-4 to second internal UCS-4...
-  */
-
-  difference = cupsUTF32CompareCaseless(work1, work2);
-
-  return (difference);
-}
-
-
-/*
- * 'cupsUTF32CompareCaseless()' - Compare case folded UTF-32 strings.
- */
-
-int                                    /* O - Difference of strings */
-cupsUTF32CompareCaseless(
-    const cups_utf32_t *s1,            /* I - String1 */
-    const cups_utf32_t *s2)            /* I - String2 */
-{
-  int                  difference;     /* Difference of two strings */
-  int                  len;            /* String length */
-  cups_folding_t       fold = CUPS_FOLD_FULL;
-                                       /* Case folding mode */
-  cups_utf32_t         fold1[CUPS_MAX_USTRING];
-                                       /* First UCS-4 folded string */
-  cups_utf32_t         fold2[CUPS_MAX_USTRING];
-                                       /* Second UCS-4 folded string */
-  cups_utf32_t         *p1;            /* First UCS-4 string pointer */
-  cups_utf32_t         *p2;            /* Second UCS-4 string pointer */
-
-
- /*
-  * Check for valid arguments...
-  */
-
-  if (!s1 || !s2)
-    return (-1);
-
- /*
-  * Case Fold input UTF-32 strings to internal UCS-4 strings...
-  */
-
-  len = cupsUTF32CaseFold(fold1, s1, CUPS_MAX_USTRING, fold);
-
-  if (len < 0)
-    return (-1);
-
-  len = cupsUTF32CaseFold(fold2, s2, CUPS_MAX_USTRING, fold);
-
-  if (len < 0)
-    return (-1);
-
- /*
-  * Compare first internal UCS-4 to second internal UCS-4...
-  */
-
-  p1 = &fold1[0];
-  p2 = &fold2[0];
-
-  for (;; p1 ++, p2 ++)
-  {
-    difference = (int) (*p1 - *p2);
-
-    if (difference != 0)
-      break;
-
-    if ((*p1 == 0) && (*p2 == 0))
-      break;
-  }
-
-  return (difference);
-}
-
-
-/*
- * 'cupsUTF8CompareIdentifier()' - Compare folded NFKC UTF-8 strings.
- */
-
-int                                    /* O - Result of comparison */
-cupsUTF8CompareIdentifier(
-    const cups_utf8_t *s1,             /* I - String1 */
-    const cups_utf8_t *s2)             /* I - String2 */
-{
-  int          difference;             /* Difference of two strings */
-  int          len;                    /* String length */
-  cups_utf32_t work1[CUPS_MAX_USTRING];/* First internal UCS-4 string */
-  cups_utf32_t work2[CUPS_MAX_USTRING];/* Second internal UCS-4 string */
-
-
- /*
-  * Check for valid arguments...
-  */
-
-  if (!s1 || !s2)
-    return (-1);
-
- /*
-  * Convert input UTF-8 to internal UCS-4 (and insert BOM)...
-  */
-
-  len = cupsUTF8ToUTF32(work1, s1, CUPS_MAX_USTRING);
-
-  if (len < 0)
-    return (-1);
-
-  len = cupsUTF8ToUTF32(work2, s2, CUPS_MAX_USTRING);
-
-  if (len < 0)
-    return (-1);
-
- /*
-  * Compare first internal UCS-4 to second internal UCS-4...
-  */
-
-  difference = cupsUTF32CompareIdentifier(work1, work2);
-
-  return (difference);
-}
-
-
-/*
- * 'cupsUTF32CompareIdentifier()' - Compare folded NFKC UTF-32 strings.
- */
-
-int                                    /* O - Result of comparison */
-cupsUTF32CompareIdentifier(
-    const cups_utf32_t *s1,            /* I - String1 */
-    const cups_utf32_t *s2)            /* I - String2 */
-{
-  int                  difference;     /* Difference of two strings */
-  int                  len;            /* String length */
-  cups_folding_t       fold = CUPS_FOLD_FULL;
-                                       /* Case folding mode */
-  cups_utf32_t         fold1[CUPS_MAX_USTRING];
-                                       /* First UCS-4 folded string */
-  cups_utf32_t         fold2[CUPS_MAX_USTRING];
-                                       /* Second UCS-4 folded string */
-  cups_normalize_t     normalize = CUPS_NORM_NFKC;
-                                       /* Normalization form */
-  cups_utf32_t         norm1[CUPS_MAX_USTRING];
-                                       /* First UCS-4 normalized string */
-  cups_utf32_t         norm2[CUPS_MAX_USTRING];
-                                       /* Second UCS-4 normalized string */
-  cups_utf32_t         *p1;            /* First UCS-4 string pointer */
-  cups_utf32_t         *p2;            /* Second UCS-4 string pointer */
-
-
- /*
-  * Check for valid arguments...
-  */
-
-  if (!s1 || !s2)
-    return (-1);
-
- /*
-  * Case Fold input UTF-32 strings to internal UCS-4 strings...
-  */
-
-  len = cupsUTF32CaseFold(fold1, s1, CUPS_MAX_USTRING, fold);
-
-  if (len < 0)
-    return (-1);
-
-  len = cupsUTF32CaseFold(fold2, s2, CUPS_MAX_USTRING, fold);
-
-  if (len < 0)
-    return (-1);
-
- /*
-  * Normalize internal UCS-4 strings to NFKC...
-  */
-
-  len = cupsUTF32Normalize(norm1, fold1, CUPS_MAX_USTRING, normalize);
-
-  if (len < 0)
-    return (-1);
-
-  len = cupsUTF32Normalize(norm2, fold2, CUPS_MAX_USTRING, normalize);
-
-  if (len < 0)
-    return (-1);
-
- /*
-  * Compare first internal UCS-4 to second internal UCS-4...
-  */
-
-  p1 = &norm1[0];
-  p2 = &norm2[0];
-
-  for (;; p1 ++, p2 ++)
-  {
-    difference = (int) (*p1 - *p2);
-
-    if (difference != 0)
-      break;
-
-    if ((*p1 == 0) && (*p2 == 0))
-      break;
-  }
-
-  return (difference);
-}
-
-
-/*
- * 'cupsUTF32CharacterProperty()' - Get UTF-32 character property.
- */
-
-int                                    /* O - Result of comparison */
-cupsUTF32CharacterProperty(
-    const cups_utf32_t    ch,          /* I - Source char */
-    const cups_property_t prop)                /* I - Char Property */
-{
-  int  result;                         /* Result Value */
-
-
- /*
-  * Check for valid arguments...
-  */
-
-  if (ch == 0)
-    return (-1);
-
- /*
-  * Find character property...
-  */
-
-  switch (prop)
-  {
-    case CUPS_PROP_GENERAL_CATEGORY:
-       result = (get_general_category(ch));
-       break;
-
-    case CUPS_PROP_BIDI_CATEGORY:
-       result = (get_bidi_category(ch));
-       break;
-
-    case CUPS_PROP_COMBINING_CLASS:
-       result = (get_combining_class(ch));
-       break;
-    case CUPS_PROP_BREAK_CLASS:
-       result = (get_break_class(ch));
-       break;
-
-    default:
-        return (-1);
-  }
-
-  return (result);
-}
-
-
-/*
- * 'get_general_category()' - Get UTF-32 Character General Category.
- */
-
-static int                             /* O - Class or -1 on error */
-get_general_category(
-    const cups_utf32_t ch)             /* I - Source char */
-{
-  int                  result;         /* Result Value */
-  cups_gencat_t                gencat;         /* General Category Value */
-  _cups_prop_map_t     *pmap;          /* Unicode Property Map */
-  _cups_prop_t         *uni2prop;      /* Unicode Char -> Properties */
-  _cups_globals_t      *cg = _cupsGlobals();
-                                       /* Pointer to library globals */
-
-
- /*
-  * Check for valid argument...
-  */
-
-  if (ch == 0)
-    return (-1);
-
- /*
-  * Find property map...
-  */
-
-  result = cupsNormalizeMapsGet();
-
-  if (result < 0)
-    return (-1);
-
-  pmap = cg->propmap_cache;
-
-  if (pmap == NULL)
-    return (-1);
-
- /*
-  * Find character in map...
-  */
-
-  uni2prop = (_cups_prop_t *)bsearch(&ch, pmap->uni2prop, pmap->propcount,
-                                    (sizeof(_cups_prop_t)), compare_propchar);
-
-  cupsNormalizeMapsFree();
-
-  if (uni2prop == NULL)
-    gencat = CUPS_GENCAT_CN;            /* Other, Not Assigned */
-  else
-    gencat = (cups_gencat_t)uni2prop->gencat;
-
-  result = (int)gencat;
-
-  return (result);
-}
-
-
-/*
- * 'get_bidi_category()' - Get UTF-32 Character Bidi Category.
- */
-
-static int                             /* O - Class or -1 on error */
-get_bidi_category(const cups_utf32_t ch)/* I - Source char */
-{
-  int                  result;         /* Result Value */
-  cups_bidi_t  bidicat;        /* Bidi Category Value */
-  _cups_prop_map_t     *pmap;          /* Unicode Property Map */
-  _cups_prop_t         *uni2prop;      /* Unicode Char -> Properties */
-  _cups_globals_t      *cg = _cupsGlobals();
-                                       /* Pointer to library globals */
-
-
- /*
-  * Check for valid argument...
-  */
-
-  if (ch == 0)
-    return (-1);
-
- /*
-  * Find property map...
-  */
-
-  result = cupsNormalizeMapsGet();
-
-  if (result < 0)
-    return (-1);
-
-  pmap = cg->propmap_cache;
-
-  if (pmap == NULL)
-    return (-1);
-
- /*
-  * Find character in map...
-  */
-
-  uni2prop = (_cups_prop_t *)bsearch(&ch, pmap->uni2prop, pmap->propcount,
-                                    (sizeof(_cups_prop_t)), compare_propchar);
-
-  cupsNormalizeMapsFree();
-
-  if (uni2prop == NULL)
-    bidicat = CUPS_BIDI_ON;             /* Other Neutral */
-  else
-    bidicat = (cups_bidi_t)uni2prop->bidicat;
-
-  result = (int)bidicat;
-
-  return (result);
-}
-
-/*
- * 'get_combining_class()' - Get UTF-32 Character Combining Class.
- *
- * Note - Zero is non-combining (base character)
- */
-
-static int                             /* O - Class or -1 on error */
-get_combining_class(
-    const cups_utf32_t ch)             /* I - Source char */
-{
-  int                  result;         /* Result Value */
-  _cups_comb_map_t     *cmap;          /* Unicode Combining Class Map */
-  _cups_comb_class_t   combclass;      /* Unicode Combining Class */
-  _cups_comb_t         *uni2comb;      /* Unicode Char -> Combining Class */
-  _cups_globals_t      *cg = _cupsGlobals();
-                                       /* Pointer to library globals */
-
-
- /*
-  * Check for valid argument...
-  */
-
-  if (ch == 0)
-    return (-1);
-
- /*
-  * Find combining class map...
-  */
-
-  result = cupsNormalizeMapsGet();
-
-  if (result < 0)
-    return (-1);
-
-  cmap = cg->combmap_cache;
-
-  if (cmap == NULL)
-    return (-1);
-
- /*
-  * Find combining character in map...
-  */
-
-  uni2comb = (_cups_comb_t *)bsearch(&ch, cmap->uni2comb, cmap->combcount,
-                                    (sizeof(_cups_comb_t)), compare_combchar);
-
-  cupsNormalizeMapsFree();
-
-  if (uni2comb == NULL)
-    combclass = 0;
-  else
-    combclass = (_cups_comb_class_t)uni2comb->combclass;
-
-  result = (int)combclass;
-
-  return (result);
-}
-
-
-/*
- * 'get_break_class()' - Get UTF-32 Character Line Break Class.
- */
-
-static int                             /* O - Class or -1 on error */
-get_break_class(const cups_utf32_t ch) /* I - Source char */
-{
-  int                  result;         /* Result Value */
-  _cups_break_map_t    *bmap;          /* Unicode Line Break Class Map */
-  cups_break_class_t   breakclass;     /* Unicode Line Break Class */
-  cups_ucs2_t          *uni2break;     /* Unicode -> Line Break Class */
-  _cups_globals_t      *cg = _cupsGlobals();
-                                       /* Pointer to library globals */
-
-
- /*
-  * Check for valid argument...
-  */
-
-  if (ch == 0)
-    return (-1);
-
- /*
-  * Find line break class map...
-  */
-
-  result = cupsNormalizeMapsGet();
-
-  if (result < 0)
-    return (-1);
-
-  bmap = cg->breakmap_cache;
-
-  if (bmap == NULL)
-    return (-1);
-
- /*
-  * Find line break character in map...
-  */
-
-  uni2break = (cups_ucs2_t *)bsearch(&ch, bmap->uni2break, bmap->breakcount,
-                                     (sizeof(cups_ucs2_t) * 3),
-                                    compare_breakchar);
-
-  cupsNormalizeMapsFree();
-
-  if (uni2break == NULL)
-    breakclass = CUPS_BREAK_AI;
-  else
-    breakclass = (cups_break_class_t)*(uni2break + 2);
-
-  result = (int)breakclass;
-
-  return (result);
-}
-
-
-/*
- * 'get_map_count()' - Count lines in a map file.
- */
-
-static int                             /* O - Count or -1 on error */
-get_map_count(const char *filename)    /* I - Map Filename */
-{
-  int          i;                      /* Looping variable */
-  cups_file_t  *fp;                    /* Map input file pointer */
-  char         *s;                     /* Line parsing pointer */
-  char         line[256];              /* Line from input map file */
-  cups_utf32_t unichar;                /* Unicode character value */
-
-
- /*
-  * Open map input file...
-  */
-
-  if (!filename || !*filename)
-    return (-1);
-
-  fp = cupsFileOpen(filename, "r");
-  if (fp == NULL)
-    return (-1);
-
- /*
-  * Count lines in map input file...
-  */
-
-  for (i = 0; i < 50000;)
-  {
-    s = cupsFileGets(fp, line, sizeof(line));
-    if (s == NULL)
-      break;
-    if ((*s == '#') || (*s == '\n') || (*s == '\0'))
-      continue;
-    if (strncmp (s, "0x", 2) == 0)
-      s += 2;
-    if (sscanf(s, "%lx", &unichar) != 1)
-      break;
-    if (unichar > 0xffff)
-      break;
-    i ++;
-  }
-  if (i == 0)
-    i = -1;
-
- /*
-  * Close file and return map count (non-comment line count)...
-  */
-
-  cupsFileClose(fp);
-
-  return (i);
-}
-
-
-/*
- * 'get_normmap()' - Get Unicode normalization map to cache.
- */
-
-static int                             /* O - Zero or -1 on error */
-get_normmap(
-    const cups_normalize_t normalize)  /* I - Normalization Form */
-{
-  int                  i;              /* Looping variable */
-  cups_utf32_t         unichar1;       /* Unicode character value */
-  cups_utf32_t         unichar2;       /* Unicode character value */
-  cups_utf32_t         unichar3;       /* Unicode character value */
-  _cups_norm_map_t     *nmap;          /* Unicode Normalization Map */
-  int                  normcount;      /* Count of Unicode Source Chars */
-  cups_ucs2_t          *uni2norm;      /* Unicode Char -> Normalization */
-  char                 *mapname;       /* Normalization map name */
-  char                 filename[1024]; /* Filename for charset map file */
-  cups_file_t          *fp;            /* Normalization map file pointer */
-  char                 *s;             /* Line parsing pointer */
-  char                 line[256];      /* Line from input map file */
-  _cups_globals_t      *cg = _cupsGlobals();
-                                       /* Pointer to library globals */
-
-
- /*
-  * See if we already have this normalization map loaded...
-  */
-
-  for (nmap = cg->normmap_cache; nmap != NULL; nmap = nmap->next)
-    if (nmap->normalize == normalize)
-      return (0);
-
- /*
-  * Get the mapping name...
-  */
-
-  switch (normalize)
-  {
-    case CUPS_NORM_NFD:         /* Canonical Decomposition */
-       mapname = "uni-nfd.txt";
-       break;
-
-    case CUPS_NORM_NFKD:        /* Compatibility Decomposition */
-       mapname = "uni-nfkd.txt";
-       break;
-
-    case CUPS_NORM_NFC:         /* Canonical Composition */
-       mapname = "uni-nfc.txt";
-       break;
-
-    case CUPS_NORM_NFKC:        /* no such map file... */
-    default:
-        return (-1);
-  }
-
- /*
-  * Open normalization map input file...
-  */
-
-  snprintf(filename, sizeof(filename), "%s/charmaps/%s",
-           cg->cups_datadir, mapname);
-  if ((normcount = get_map_count(filename)) <= 0)
-    return (-1);
-
-  fp = cupsFileOpen(filename, "r");
-  if (fp == NULL)
-    return (-1);
-
- /*
-  * Allocate memory for normalization map and add to cache...
-  */
-
-  nmap = (_cups_norm_map_t *)calloc(1, sizeof(_cups_norm_map_t));
-  if (nmap == NULL)
-  {
-    cupsFileClose(fp);
-    return (-1);
-  }
-
-  uni2norm = (cups_ucs2_t *)calloc(1, sizeof(cups_ucs2_t) * 3 * normcount);
-  if (uni2norm == NULL)
-  {
-    free(nmap);
-    cupsFileClose(fp);
-    return (-1);
-  }
-  nmap->next = cg->normmap_cache;
-  cg->normmap_cache = nmap;
-  nmap->used ++;
-  nmap->normalize = normalize;
-  nmap->normcount = normcount;
-  nmap->uni2norm = uni2norm;
-
- /*
-  * Save normalization map into memory for later use...
-  */
-  for (i = 0; i < normcount; )
-  {
-    s = cupsFileGets(fp, line, sizeof(line));
-    if (s == NULL)
-      break;
-    if ((*s == '#') || (*s == '\n') || (*s == '\0'))
-      continue;
-    if (sscanf(s, "%lx %lx %lx", &unichar1, &unichar2, &unichar3) != 3)
-       break;
-    if ((unichar1 > 0xffff)
-    || (unichar2 > 0xffff)
-    || (unichar3 > 0xffff))
-      break;
-    *uni2norm ++ = (cups_ucs2_t) unichar1;
-    *uni2norm ++ = (cups_ucs2_t) unichar2;
-    *uni2norm ++ = (cups_ucs2_t) unichar3;
-    i ++;
-  }
-  if (i < normcount)
-    nmap->normcount = i;
-  cupsFileClose(fp);
-  return (0);
-}
-
-
-/*
- * 'get_foldmap()' - Get Unicode case folding map to cache.
- */
-
-static int                             /* O - Zero or -1 on error */
-get_foldmap(const cups_folding_t fold) /* I - Case folding type */
-{
-  int                  i;              /* Looping variable */
-  cups_utf32_t         unichar1;       /* Unicode character value */
-  cups_utf32_t         unichar2;       /* Unicode character value */
-  cups_utf32_t         unichar3;       /* Unicode character value */
-  cups_utf32_t         unichar4;       /* Unicode character value */
-  _cups_fold_map_t     *fmap;          /* Unicode Case Folding Map */
-  int                  foldcount;      /* Count of Unicode Source Chars */
-  cups_ucs2_t          *uni2fold;      /* Unicode -> Folded Char(s) */
-  char                 *mapname;       /* Case Folding map name */
-  char                 filename[1024]; /* Filename for charset map file */
-  cups_file_t          *fp;            /* Case Folding map file pointer */
-  char                 *s;             /* Line parsing pointer */
-  char                 line[256];      /* Line from input map file */
-  _cups_globals_t      *cg = _cupsGlobals();
-                                       /* Pointer to library globals */
-
-
- /*
-  * See if we already have this case folding map loaded...
-  */
-
-  for (fmap = cg->foldmap_cache; fmap != NULL; fmap = fmap->next)
-    if (fmap->fold == fold)
-      return (0);
-
- /*
-  * Get the mapping name...
-  */
-
-  switch (fold)
-  {
-    case CUPS_FOLD_SIMPLE:      /* Simple case folding */
-       mapname = "uni-fold.txt";
-       break;
-    case CUPS_FOLD_FULL:        /* Full case folding */
-       mapname = "uni-full.txt";
-       break;
-    default:
-       return (-1);
-  }
-
- /*
-  * Open case folding map input file...
-  */
-
-  snprintf(filename, sizeof(filename), "%s/charmaps/%s",
-           cg->cups_datadir, mapname);
-  if ((foldcount = get_map_count(filename)) <= 0)
-    return (-1);
-  fp = cupsFileOpen(filename, "r");
-  if (fp == NULL)
-    return (-1);
-
- /*
-  * Allocate memory for case folding map and add to cache...
-  */
-  fmap = (_cups_fold_map_t *)calloc(1, sizeof(_cups_fold_map_t));
-  if (fmap == NULL)
-  {
-    cupsFileClose(fp);
-    return (-1);
-  }
-  uni2fold = (cups_ucs2_t *)calloc(1, sizeof(cups_ucs2_t) * 4 * foldcount);
-  if (uni2fold == NULL)
-  {
-    free(fmap);
-    cupsFileClose(fp);
-    return (-1);
-  }
-  fmap->next = cg->foldmap_cache;
-  cg->foldmap_cache = fmap;
-  fmap->used ++;
-  fmap->fold = fold;
-  fmap->foldcount = foldcount;
-  fmap->uni2fold = uni2fold;
-
- /*
-  * Save case folding map into memory for later use...
-  */
-
-  for (i = 0; i < foldcount; )
-  {
-    s = cupsFileGets(fp, line, sizeof(line));
-    if (s == NULL)
-      break;
-    if ((*s == '#') || (*s == '\n') || (*s == '\0'))
-      continue;
-    unichar1 = unichar2 = unichar3 = unichar4 = 0;
-    if ((fold == CUPS_FOLD_SIMPLE)
-    && (sscanf(s, "%lx %lx", &unichar1, &unichar2) != 2))
-      break;
-    if ((fold == CUPS_FOLD_FULL)
-    && (sscanf(s, "%lx %lx %lx %lx",
-               &unichar1, &unichar2, &unichar3, &unichar4) != 4))
-      break;
-    if ((unichar1 > 0xffff)
-    || (unichar2 > 0xffff)
-    || (unichar3 > 0xffff)
-    || (unichar4 > 0xffff))
-      break;
-    *uni2fold ++ = (cups_ucs2_t) unichar1;
-    *uni2fold ++ = (cups_ucs2_t) unichar2;
-    *uni2fold ++ = (cups_ucs2_t) unichar3;
-    *uni2fold ++ = (cups_ucs2_t) unichar4;
-    i ++;
-  }
-  if (i < foldcount)
-    fmap->foldcount = i;
-  cupsFileClose(fp);
-  return (0);
-}
-
-/*
- * 'get_propmap()' - Get Unicode character property map to cache.
- */
-
-static int                             /* O - Zero or -1 on error */
-get_propmap(void)
-{
-  int                  i, j;           /* Looping variables */
-  size_t               len;            /* String length */
-  cups_utf32_t         unichar;        /* Unicode character value */
-  cups_gencat_t                gencat;         /* General Category Value */
-  cups_bidi_t  bidicat;        /* Bidi Category Value */
-  _cups_prop_map_t     *pmap;          /* Unicode Char Property Map */
-  int                  propcount;      /* Count of Unicode Source Chars */
-  _cups_prop_t         *uni2prop;      /* Unicode Char -> Properties */
-  char                 *mapname;       /* Char Property map name */
-  char                 filename[1024]; /* Filename for charset map file */
-  cups_file_t          *fp;            /* Char Property map file pointer */
-  char                 *s;             /* Line parsing pointer */
-  char                 line[256];      /* Line from input map file */
-  _cups_globals_t      *cg = _cupsGlobals();
-                                       /* Pointer to library globals */
-
-
- /*
-  * See if we already have this char properties map loaded...
-  */
-
-  if ((pmap = cg->propmap_cache) != NULL)
-    return (0);
-
- /*
-  * Get the mapping name...
-  */
-
-  mapname = "uni-prop.txt";
-
- /*
-  * Open char properties map input file...
-  */
-  snprintf(filename, sizeof(filename), "%s/charmaps/%s",
-           cg->cups_datadir, mapname);
-  if ((propcount = get_map_count(filename)) <= 0)
-    return (-1);
-  fp = cupsFileOpen(filename, "r");
-  if (fp == NULL)
-    return (-1);
-
- /*
-  * Allocate memory for char properties map and add to cache...
-  */
-  pmap = (_cups_prop_map_t *)calloc(1, sizeof(_cups_prop_map_t));
-  if (pmap == NULL)
-  {
-    cupsFileClose(fp);
-    return (-1);
-  }
-  uni2prop = (_cups_prop_t *)calloc(1, sizeof(_cups_prop_t) * propcount);
-  if (uni2prop == NULL)
-  {
-    free(pmap);
-    cupsFileClose(fp);
-    return (-1);
-  }
-  cg->propmap_cache = pmap;
-  pmap->used ++;
-  pmap->propcount = propcount;
-  pmap->uni2prop = uni2prop;
-
- /*
-  * Save char properties map into memory for later use...
-  */
-  for (i = 0; i < propcount; )
-  {
-    s = cupsFileGets(fp, line, sizeof(line));
-    if (s == NULL)
-      break;
-    if (strlen(s) > 0)
-      *(s + strlen(s) - 1) = '\0';
-    if ((*s == '#') || (*s == '\n') || (*s == '\0'))
-      continue;
-    if (sscanf(s, "%lx", &unichar) != 1)
-       break;
-    if (unichar > 0xffff)
-      break;
-    while ((*s != '\0') && (*s != ';'))
-      s ++;
-    if (*s != ';')
-      break;
-    s ++;
-    for (j = 0; gencat_index[j].str != NULL; j ++)
-    {
-      len = strlen(gencat_index[j].str);
-      if (strncmp (s, gencat_index[j].str, len) == 0)
-        break;
-    }
-    if (gencat_index[j].str == NULL)
-      return (-1);
-    gencat = gencat_index[j].gencat;
-    while ((*s != '\0') && (*s != ';'))
-      s ++;
-    if (*s != ';')
-      break;
-    s ++;
-    for (j = 0; bidicat_index[j] != NULL; j ++)
-    {
-      len = strlen(bidicat_index[j]);
-      if (strncmp (s, bidicat_index[j], len) == 0)
-        break;
-    }
-    if (bidicat_index[j] == NULL)
-      return (-1);
-    bidicat = (cups_bidi_t) j;
-    uni2prop->ch = (cups_ucs2_t) unichar;
-    uni2prop->gencat = (unsigned char) gencat;
-    uni2prop->bidicat = (unsigned char) bidicat;
-    uni2prop ++;
-    i ++;
-  }
-  if (i < propcount)
-    pmap->propcount = i;
-  cupsFileClose(fp);
-  return (0);
-}
-
-
-/*
- * 'get_combmap()' - Get Unicode combining class map to cache.
- */
-
-static int                             /* O - Zero or -1 on error */
-get_combmap(void)
-{
-  int                  i;              /* Looping variable */
-  cups_utf32_t         unichar;        /* Unicode character value */
-  int                  combclass;      /* Unicode char combining class */
-  _cups_comb_map_t     *cmap;          /* Unicode Comb Class Map */
-  int                  combcount;      /* Count of Unicode Source Chars */
-  _cups_comb_t         *uni2comb;      /* Unicode Char -> Combining Class */
-  char                 *mapname;       /* Comb Class map name */
-  char                 filename[1024]; /* Filename for charset map file */
-  cups_file_t          *fp;            /* Comb Class map file pointer */
-  char                 *s;             /* Line parsing pointer */
-  char                 line[256];      /* Line from input map file */
-  _cups_globals_t      *cg = _cupsGlobals();
-                                       /* Pointer to library globals */
-
-
- /*
-  * See if we already have this combining class map loaded...
-  */
-
-  if ((cmap = cg->combmap_cache) != NULL)
-    return (0);
-
- /*
-  * Get the mapping name...
-  */
-
-  mapname = "uni-comb.txt";
-
- /*
-  * Open combining class map input file...
-  */
-
-  snprintf(filename, sizeof(filename), "%s/charmaps/%s",
-           cg->cups_datadir, mapname);
-  if ((combcount = get_map_count(filename)) <= 0)
-    return (-1);
-  fp = cupsFileOpen(filename, "r");
-  if (fp == NULL)
-    return (-1);
-
- /*
-  * Allocate memory for combining class map and add to cache...
-  */
-
-  cmap = (_cups_comb_map_t *)calloc(1, sizeof(_cups_comb_map_t));
-  if (cmap == NULL)
-  {
-    cupsFileClose(fp);
-    return (-1);
-  }
-
-  uni2comb = (_cups_comb_t *)calloc(1, sizeof(_cups_comb_t) * combcount);
-  if (uni2comb == NULL)
-  {
-    free(cmap);
-    cupsFileClose(fp);
-    return (-1);
-  }
-  cg->combmap_cache = cmap;
-  cmap->used ++;
-  cmap->combcount = combcount;
-  cmap->uni2comb = uni2comb;
-
- /*
-  * Save combining class map into memory for later use...
-  */
-  for (i = 0; i < combcount; )
-  {
-    s = cupsFileGets(fp, line, sizeof(line));
-    if (s == NULL)
-      break;
-    if ((*s == '#') || (*s == '\n') || (*s == '\0'))
-      continue;
-    if (sscanf(s, "%lx", &unichar) != 1)
-       break;
-    if (unichar > 0xffff)
-      break;
-    while ((*s != '\0') && (*s != ';'))
-      s ++;
-    if (*s != ';')
-      break;
-    s ++;
-    if (sscanf(s, "%d", &combclass) != 1)
-       break;
-    uni2comb->ch = (cups_ucs2_t) unichar;
-    uni2comb->combclass = (unsigned char) combclass;
-    uni2comb ++;
-    i ++;
-  }
-  if (i < combcount)
-    cmap->combcount = i;
-  cupsFileClose(fp);
-  return (0);
-}
-
-
-/*
- * 'get_breakmap()' - Get Unicode line break class map to cache.
- */
-
-static int                             /* O - Zero or -1 on error */
-get_breakmap(void)
-{
-  int                  i, j;           /* Looping variables */
-  int                  len;            /* String length */
-  cups_utf32_t         unichar1;       /* Unicode character value */
-  cups_utf32_t         unichar2;       /* Unicode character value */
-  cups_break_class_t   breakclass;     /* Unicode char line break class */
-  _cups_break_map_t    *bmap;          /* Unicode Line Break Class Map */
-  int                  breakcount;     /* Count of Unicode Source Chars */
-  cups_ucs2_t          *uni2break;     /* Unicode -> Line Break Class */
-  char                 *mapname;       /* Comb Class map name */
-  char                 filename[1024]; /* Filename for charset map file */
-  cups_file_t          *fp;            /* Comb Class map file pointer */
-  char                 *s;             /* Line parsing pointer */
-  char                 line[256];      /* Line from input map file */
-  _cups_globals_t      *cg = _cupsGlobals();
-                                       /* Pointer to library globals */
-
-
- /*
-  * See if we already have this line break class map loaded...
-  */
-
-  if ((bmap = cg->breakmap_cache) != NULL)
-    return (0);
-
- /*
-  * Get the mapping name...
-  */
-
-  mapname = "uni-line.txt";
-
- /*
-  * Open line break class map input file...
-  */
-
-  snprintf(filename, sizeof(filename), "%s/charmaps/%s",
-           cg->cups_datadir, mapname);
-  if ((breakcount = get_map_count(filename)) <= 0)
-    return (-1);
-  fp = cupsFileOpen(filename, "r");
-  if (fp == NULL)
-    return (-1);
-
- /*
-  * Allocate memory for line break class map and add to cache...
-  */
-
-  bmap = (_cups_break_map_t *)calloc(1, sizeof(_cups_break_map_t));
-  if (bmap == NULL)
-  {
-    cupsFileClose(fp);
-    return (-1);
-  }
-
-  uni2break = (cups_ucs2_t *)calloc(1, sizeof(cups_ucs2_t) * 3 * breakcount);
-  if (uni2break == NULL)
-  {
-    free(bmap);
-    cupsFileClose(fp);
-    return (-1);
-  }
-  cg->breakmap_cache = bmap;
-  bmap->used ++;
-  bmap->breakcount = breakcount;
-  bmap->uni2break = uni2break;
-
- /*
-  * Save line break class map into memory for later use...
-  */
-  for (i = 0; i < breakcount; )
-  {
-    s = cupsFileGets(fp, line, sizeof(line));
-    if (s == NULL)
-      break;
-    if (strlen(s) > 0)
-      *(s + strlen(s) - 1) = '\0';
-    if ((*s == '#') || (*s == '\n') || (*s == '\0'))
-      continue;
-    if (sscanf(s, "%lx %lx", &unichar1, &unichar2) != 2)
-       break;
-    if ((unichar1 > 0xffff)
-    || (unichar2 > 0xffff))
-      break;
-    while ((*s != '\0') && (*s != ';'))
-      s ++;
-    if (*s != ';')
-      break;
-    s ++;
-    for (j = 0; break_index[j].str != NULL; j ++)
-    {
-      len = strlen (break_index[j].str);
-      if (strncmp (s, break_index[j].str, len) == 0)
-        break;
-    }
-    if (break_index[j].str == NULL)
-      return (-1);
-    breakclass = break_index[j].breakclass;
-    *uni2break ++ = (cups_ucs2_t) unichar1;
-    *uni2break ++ = (cups_ucs2_t) unichar2;
-    *uni2break ++ = (cups_ucs2_t) breakclass;
-    i ++;
-  }
-  if (i < breakcount)
-    bmap->breakcount = i;
-  cupsFileClose(fp);
-  return (0);
-}
-
-
-/*
- * 'compare_compose()' - Compare key for compose match.
- *
- * Note - This function cannot be easily modified for 32-bit Unicode.
- */
-
-static int                             /* O - Result of comparison */
-compare_compose(const void *k1,                /* I - Key char */
-               const void *k2)         /* I - Map char */
-{
-  cups_utf32_t *kp = (cups_utf32_t *)k1;
-                                       /* Key char pointer */
-  cups_ucs2_t  *mp = (cups_ucs2_t *)k2;/* Map char pointer */
-  unsigned long        key;                    /* Pair of key characters */
-  unsigned long        map;                    /* Pair of map characters */
-  int          result;                 /* Result Value */
-
-
-  key = (*kp << 16);
-  key |= *(kp + 1);
-  map = (unsigned long) (*mp << 16);
-  map |= (unsigned long) *(mp + 1);
-
-  if (key >= map)
-    result = (int) (key - map);
-  else
-    result = -1 * ((int) (map - key));
-
-  return (result);
-}
-
-
-/*
- * 'compare_decompose()' - Compare key for decompose match.
- */
-
-static int                             /* O - Result of comparison */
-compare_decompose(const void *k1,      /* I - Key char */
-                 const void *k2)       /* I - Map char */
-{
-  cups_utf32_t *kp = (cups_utf32_t *)k1;
-                                       /* Key char pointer */
-  cups_ucs2_t  *mp = (cups_ucs2_t *)k2;/* Map char pointer */
-  cups_ucs2_t  ch;                     /* Key char as UCS-2 */
-  int          result;                 /* Result Value */
-
-
-  ch = (cups_ucs2_t) *kp;
-
-  if (ch >= *mp)
-    result = (int) (ch - *mp);
-  else
-    result = -1 * ((int) (*mp - ch));
-
-  return (result);
-}
-
-
-/*
- * 'compare_foldchar()' - Compare key for case fold match.
- */
-
-static int                             /* O - Result of comparison */
-compare_foldchar(const void *k1,       /* I - Key char */
-                const void *k2)        /* I - Map char */
-{
-  cups_utf32_t *kp = (cups_utf32_t *)k1;
-                                       /* Key char pointer */
-  cups_ucs2_t  *mp = (cups_ucs2_t *)k2;/* Map char pointer */
-  cups_ucs2_t  ch;                     /* Key char as UCS-2 */
-  int          result;                 /* Result Value */
-
-
-  ch = (cups_ucs2_t) *kp;
-
-  if (ch >= *mp)
-    result = (int) (ch - *mp);
-  else
-    result = -1 * ((int) (*mp - ch));
-
-  return (result);
-}
-
-
-/*
- * 'compare_combchar()' - Compare key for combining char match.
- */
-
-static int                             /* O - Result of comparison */
-compare_combchar(const void *k1,       /* I - Key char */
-                 const void *k2)       /* I - Map char */
-{
-  cups_utf32_t *kp = (cups_utf32_t *)k1;
-                                       /* Key char pointer */
-  _cups_comb_t *cp = (_cups_comb_t *)k2;/* Combining map row pointer */
-  cups_ucs2_t  ch;                     /* Key char as UCS-2 */
-  int          result;                 /* Result Value */
-
-
-  ch = (cups_ucs2_t) *kp;
-
-  if (ch >= cp->ch)
-    result = (int) (ch - cp->ch);
-  else
-    result = -1 * ((int) (cp->ch - ch));
-
-  return (result);
-}
-
-
-/*
- * 'compare_breakchar()' - Compare key for line break char match.
- */
-
-static int                             /* O - Result of comparison */
-compare_breakchar(const void *k1,      /* I - Key char */
-                  const void *k2)      /* I - Map char */
-{
-  cups_utf32_t *kp = (cups_utf32_t *)k1;
-                                       /* Key char pointer */
-  cups_ucs2_t  *mp = (cups_ucs2_t *)k2;/* Map char pointer */
-  cups_ucs2_t  ch;                     /* Key char as UCS-2 */
-  int          result;                 /* Result Value */
-
-
-  ch = (cups_ucs2_t) *kp;
-
-  if (ch < *mp)
-    result = -1 * (int) (*mp - ch);
-  else if (ch > *(mp + 1))
-    result = (int) (ch - *(mp + 1));
-  else
-    result = 0;
-
-  return (result);
-}
-
-
-/*
- * 'compare_propchar()' - Compare key for property char match.
- */
-
-static int                             /* O - Result of comparison */
-compare_propchar(const void *k1,       /* I - Key char */
-                const void *k2)        /* I - Map char */
-{
-  cups_utf32_t *kp = (cups_utf32_t *)k1;
-                                       /* Key char pointer */
-  _cups_prop_t *pp = (_cups_prop_t *)k2;/* Property map row pointer */
-  cups_ucs2_t  ch;                     /* Key char as UCS-2 */
-  int          result;                 /* Result Value */
-
-
-  ch = (cups_ucs2_t) *kp;
-
-  if (ch >= pp->ch)
-    result = (int) (ch - pp->ch);
-  else
-    result = -1 * ((int) (pp->ch - ch));
-
-  return (result);
-}
-
-
-/*
- * End of "$Id: normalize.c 4967 2006-01-24 03:42:15Z mike $"
- */
diff --git a/cups/normalize.h b/cups/normalize.h
deleted file mode 100644 (file)
index e1a3da8..0000000
+++ /dev/null
@@ -1,334 +0,0 @@
-/*
- * "$Id: normalize.h 4684 2005-09-22 02:15:56Z mike $"
- *
- *   Unicode normalization for the Common UNIX Printing System (CUPS).
- *
- *   Copyright 1997-2005 by Easy Software Products.
- *
- *   These coded instructions, statements, and computer programs are
- *   the property of Easy Software Products and are protected by Federal
- *   copyright law.  Distribution and use rights are outlined in the
- *   file "LICENSE.txt" which should have been included with this file.
- *   If this file is missing or damaged please contact Easy Software
- *   Products at:
- *
- *       Attn: CUPS Licensing Information
- *       Easy Software Products
- *       44141 Airport View Drive, Suite 204
- *       Hollywood, Maryland 20636 USA
- *
- *       Voice: (301) 373-9600
- *       EMail: cups-info@cups.org
- *         WWW: http://www.cups.org
- */
-
-#ifndef _CUPS_NORMALIZE_H_
-#  define _CUPS_NORMALIZE_H_
-
-/*
- * Include necessary headers...
- */
-
-#include "transcode.h"
-
-#  ifdef __cplusplus
-extern "C" {
-#  endif /* __cplusplus */
-
-
-/*
- * Types...
- */
-
-typedef enum                    /**** Normalizataion Types ****/
-{
-  CUPS_NORM_NFD,                /* Canonical Decomposition */
-  CUPS_NORM_NFKD,               /* Compatibility Decomposition */
-  CUPS_NORM_NFC,                /* NFD, them Canonical Composition */
-  CUPS_NORM_NFKC                /* NFKD, them Canonical Composition */
-} cups_normalize_t;
-
-typedef enum                    /**** Case Folding Types ****/
-{
-  CUPS_FOLD_SIMPLE,             /* Simple - no expansion in size */
-  CUPS_FOLD_FULL                /* Full - possible expansion in size */
-} cups_folding_t;
-
-typedef enum                    /**** Unicode Char Property Types ****/
-{
-  CUPS_PROP_GENERAL_CATEGORY,   /* See 'cups_gencat_t' enum */
-  CUPS_PROP_BIDI_CATEGORY,      /* See 'cups_bidi_t' enum */
-  CUPS_PROP_COMBINING_CLASS,    /* See '_cups_comb_class_t' type */
-  CUPS_PROP_BREAK_CLASS         /* See 'cups_break_class_t' enum */
-} cups_property_t;
-
-
-/*
- * Note - Use major classes for logic optimizations (by mask).
- */
-
-typedef enum                    /**** Unicode General Category ****/
-{
-  CUPS_GENCAT_L  = 0x10,        /* Letter major class */
-  CUPS_GENCAT_LU = 0x11,        /* Lu Letter, Uppercase */
-  CUPS_GENCAT_LL = 0x12,        /* Ll Letter, Lowercase */
-  CUPS_GENCAT_LT = 0x13,        /* Lt Letter, Titlecase */
-  CUPS_GENCAT_LM = 0x14,        /* Lm Letter, Modifier */
-  CUPS_GENCAT_LO = 0x15,        /* Lo Letter, Other */
-  CUPS_GENCAT_M  = 0x20,        /* Mark major class */
-  CUPS_GENCAT_MN = 0x21,        /* Mn Mark, Non-Spacing */
-  CUPS_GENCAT_MC = 0x22,        /* Mc Mark, Spacing Combining */
-  CUPS_GENCAT_ME = 0x23,        /* Me Mark, Enclosing */
-  CUPS_GENCAT_N  = 0x30,        /* Number major class */
-  CUPS_GENCAT_ND = 0x31,        /* Nd Number, Decimal Digit */
-  CUPS_GENCAT_NL = 0x32,        /* Nl Number, Letter */
-  CUPS_GENCAT_NO = 0x33,        /* No Number, Other */
-  CUPS_GENCAT_P  = 0x40,        /* Punctuation major class */
-  CUPS_GENCAT_PC = 0x41,        /* Pc Punctuation, Connector */
-  CUPS_GENCAT_PD = 0x42,        /* Pd Punctuation, Dash */
-  CUPS_GENCAT_PS = 0x43,        /* Ps Punctuation, Open (start) */
-  CUPS_GENCAT_PE = 0x44,        /* Pe Punctuation, Close (end) */
-  CUPS_GENCAT_PI = 0x45,        /* Pi Punctuation, Initial Quote */
-  CUPS_GENCAT_PF = 0x46,        /* Pf Punctuation, Final Quote */
-  CUPS_GENCAT_PO = 0x47,        /* Po Punctuation, Other */
-  CUPS_GENCAT_S  = 0x50,        /* Symbol major class */
-  CUPS_GENCAT_SM = 0x51,        /* Sm Symbol, Math */
-  CUPS_GENCAT_SC = 0x52,        /* Sc Symbol, Currency */
-  CUPS_GENCAT_SK = 0x53,        /* Sk Symbol, Modifier */
-  CUPS_GENCAT_SO = 0x54,        /* So Symbol, Other */
-  CUPS_GENCAT_Z  = 0x60,        /* Separator major class */
-  CUPS_GENCAT_ZS = 0x61,        /* Zs Separator, Space */
-  CUPS_GENCAT_ZL = 0x62,        /* Zl Separator, Line */
-  CUPS_GENCAT_ZP = 0x63,        /* Zp Separator, Paragraph */
-  CUPS_GENCAT_C  = 0x70,        /* Other (miscellaneous) major class */
-  CUPS_GENCAT_CC = 0x71,        /* Cc Other, Control */
-  CUPS_GENCAT_CF = 0x72,        /* Cf Other, Format */
-  CUPS_GENCAT_CS = 0x73,        /* Cs Other, Surrogate */
-  CUPS_GENCAT_CO = 0x74,        /* Co Other, Private Use */
-  CUPS_GENCAT_CN = 0x75         /* Cn Other, Not Assigned */
-} cups_gencat_t;
-
-typedef enum                    /**** Unicode Bidi Category ****/
-{
-  CUPS_BIDI_L,                  /* Left-to-Right (Alpha, Ideographic) */
-  CUPS_BIDI_LRE,                /* Left-to-Right Embedding (explicit) */
-  CUPS_BIDI_LRO,                /* Left-to-Right Override (explicit) */
-  CUPS_BIDI_R,                  /* Right-to-Left (Hebrew alpha/punct) */
-  CUPS_BIDI_AL,                 /* Right-to-Left Arabic (Arabic, etc) */
-  CUPS_BIDI_RLE,                /* Right-to-Left Embedding (explicit) */
-  CUPS_BIDI_RLO,                /* Right-to-Left Override (explicit) */
-  CUPS_BIDI_PDF,                /* Pop Directional Format */
-  CUPS_BIDI_EN,                 /* Euro Number (Euro & Indic digits) */
-  CUPS_BIDI_ES,                 /* Euro Number Separator (Slash) */
-  CUPS_BIDI_ET,                 /* Euro Number Terminator */
-  CUPS_BIDI_AN,                 /* Arabic Number (digits, separators) */
-  CUPS_BIDI_CS,                 /* Common Number Separator */
-  CUPS_BIDI_NSM,                /* Non-Spacing Mark (Mn/Me in UCD) */
-  CUPS_BIDI_BN,                 /* Boundary Neutral (formatting, etc) */
-  CUPS_BIDI_B,                  /* Paragraph Separator */
-  CUPS_BIDI_S,                  /* Segment Separator (Tab) */
-  CUPS_BIDI_WS,                 /* Whitespace Space (Space, etc) */
-  CUPS_BIDI_ON                  /* Other Neutrals */
-} cups_bidi_t;
-
-/*
- * Note - add state table from UAX-14, section 7.3.
- * Remember to do BK and SP in outer loop (not in state table).
- * Consider optimization for CM (combining mark).
- * See 'LineBreak.txt' (12,875) and 'DerivedLineBreak.txt' (1,350).
- */
-
-typedef enum                    /**** Unicode Line Break Class ****/
-{
- /*
-  * (A) - Allow Break AFTER
-  * (XA) - Prevent Break AFTER
-  * (B) - Allow Break BEFORE
-  * (XB) - Prevent Break BEFORE
-  * (P) - Allow Break For Pair
-  * (XP) - Prevent Break For Pair
-  */
-  CUPS_BREAK_AI,                /* Ambiguous Alphabetic or Ideograph */
-  CUPS_BREAK_AL,                /* Ordinary Alpha/Symbol Chars (XP) */
-  CUPS_BREAK_BA,                /* Break Opportunity After Chars (A) */
-  CUPS_BREAK_BB,                /* Break Opportunity Before Chars (B) */
-  CUPS_BREAK_B2,                /* Break Opportunity Either (B/A/XP) */
-  CUPS_BREAK_BK,                /* Mandatory Break (A) (norm) */
-  CUPS_BREAK_CB,                /* Contingent Break (B/A) (norm) */
-  CUPS_BREAK_CL,                /* Closing Punctuation (XB) */
-  CUPS_BREAK_CM,                /* Attached/Combining (XB) (norm) */
-  CUPS_BREAK_CR,                /* Carriage Return (A) (norm) */
-  CUPS_BREAK_EX,                /* Exclamation/Interrogation (XB) */
-  CUPS_BREAK_GL,                /* Non-breaking "Glue" (XB/XA) (norm) */
-  CUPS_BREAK_HY,                /* Hyphen (XA) */
-  CUPS_BREAK_ID,                /* Ideographic (B/A) */
-  CUPS_BREAK_IN,                /* Inseparable chars (XP) */
-  CUPS_BREAK_IS,                /* Numeric Separator (Infix) (XB) */
-  CUPS_BREAK_LF,                /* Line Feed (A) (norm) */
-  CUPS_BREAK_NS,                /* Non-starters (XB) */
-  CUPS_BREAK_NU,                /* Numeric (XP) */
-  CUPS_BREAK_OP,                /* Opening Punctuation (XA) */
-  CUPS_BREAK_PO,                /* Postfix (Numeric) (XB) */
-  CUPS_BREAK_PR,                /* Prefix (Numeric) (XA) */
-  CUPS_BREAK_QU,                /* Ambiguous Quotation (XB/XA) */
-  CUPS_BREAK_SA,                /* Context Dependent (SE Asian) (P) */
-  CUPS_BREAK_SG,                /* Surrogates (XP) (norm) */
-  CUPS_BREAK_SP,                /* Space (A) (norm) */
-  CUPS_BREAK_SY,                /* Symbols Allowing Break After (A) */
-  CUPS_BREAK_XX,                /* Unknown (XP) */
-  CUPS_BREAK_ZW                 /* Zero Width Space (A) (norm) */
-} cups_break_class_t;
-
-typedef int _cups_comb_class_t;   /**** Unicode Combining Class ****/
-                                /* 0=base, 1..254=combining char */
-
-/*
- * Structures...
- */
-
-typedef struct _cups_normmap_s         /**** Normalize Map Cache Struct ****/
-{
-  struct _cups_normmap_s *next;        /* Next normalize in cache */
-  int                   used;           /* Number of times entry used */
-  cups_normalize_t      normalize;      /* Normalization type */
-  int                   normcount;      /* Count of Source Chars */
-  cups_ucs2_t           *uni2norm;      /* Char -> Normalization */
-                                        /* ...only supports UCS-2 */
-} _cups_norm_map_t;
-
-typedef struct _cups_foldmap_s         /**** Case Fold Map Cache Struct ****/
-{
-  struct _cups_foldmap_s *next;        /* Next case fold in cache */
-  int                   used;           /* Number of times entry used */
-  cups_folding_t        fold;           /* Case folding type */
-  int                   foldcount;      /* Count of Source Chars */
-  cups_ucs2_t           *uni2fold;      /* Char -> Folded Char(s) */
-                                        /* ...only supports UCS-2 */
-} _cups_fold_map_t;
-
-typedef struct _cups_prop_s            /**** Char Property Struct ****/
-{
-  cups_ucs2_t           ch;             /* Unicode Char as UCS-2 */
-  unsigned char         gencat;         /* General Category */
-  unsigned char         bidicat;        /* Bidirectional Category */
-} _cups_prop_t;
-
-typedef struct _cups_prop_map_s                /**** Char Property Map Struct ****/
-{
-  int                   used;           /* Number of times entry used */
-  int                   propcount;      /* Count of Source Chars */
-  _cups_prop_t           *uni2prop;      /* Char -> Properties */
-} _cups_prop_map_t;
-
-typedef struct _cups_break_map_s       /**** Line Break Class Map Struct ****/
-{
-  int                   used;           /* Number of times entry used */
-  int                   breakcount;     /* Count of Source Chars */
-  cups_ucs2_t           *uni2break;     /* Char -> Line Break Class */
-} _cups_break_map_t;
-
-typedef struct _cups_comb_s            /**** Char Combining Class Struct ****/
-{
-  cups_ucs2_t           ch;             /* Unicode Char as UCS-2 */
-  unsigned char         combclass;      /* Combining Class */
-  unsigned char         reserved;       /* Reserved for alignment */
-} _cups_comb_t;
-
-typedef struct _cups_comb_map_s                /**** Combining Class Map Struct ****/
-{
-  int                   used;           /* Number of times entry used */
-  int                   combcount;      /* Count of Source Chars */
-  _cups_comb_t           *uni2comb;      /* Char -> Combining Class */
-} _cups_comb_map_t;
-
-/*
- * Prototypes...
- */
-
-/*
- * Utility functions for normalization module
- */
-extern int      cupsNormalizeMapsGet(void);
-extern int      cupsNormalizeMapsFree(void);
-extern void     cupsNormalizeMapsFlush(void);
-
-/*
- * Normalize UTF-8 string to Unicode UAX-15 Normalization Form
- * Note - Compatibility Normalization Forms (NFKD/NFKC) are
- * unsafe for subsequent transcoding to legacy charsets
- */
-extern int      cupsUTF8Normalize(cups_utf8_t *dest,
-                                  const cups_utf8_t *src,
-                                  const int maxout,
-                                  const cups_normalize_t normalize);
-
-/*
- * Normalize UTF-32 string to Unicode UAX-15 Normalization Form
- * Note - Compatibility Normalization Forms (NFKD/NFKC) are
- * unsafe for subsequent transcoding to legacy charsets
- */
-extern int      cupsUTF32Normalize(cups_utf32_t *dest,
-                                   const cups_utf32_t *src,
-                                   const int maxout,
-                                   const cups_normalize_t normalize);
-
-/*
- * Case Fold UTF-8 string per Unicode UAX-21 Section 2.3
- * Note - Case folding output is
- * unsafe for subsequent transcoding to legacy charsets
- */
-extern int      cupsUTF8CaseFold(cups_utf8_t *dest,
-                                 const cups_utf8_t *src,
-                                 const int maxout,
-                                 const cups_folding_t fold);
-
-/*
- * Case Fold UTF-32 string per Unicode UAX-21 Section 2.3
- * Note - Case folding output is
- * unsafe for subsequent transcoding to legacy charsets
- */
-extern int      cupsUTF32CaseFold(cups_utf32_t *dest,
-                                  const cups_utf32_t *src,
-                                  const int maxout,
-                                  const cups_folding_t fold);
-
-/*
- * Compare UTF-8 strings after case folding
- */
-extern int      cupsUTF8CompareCaseless(const cups_utf8_t *s1,
-                                        const cups_utf8_t *s2);
-
-/*
- * Compare UTF-32 strings after case folding
- */
-extern int      cupsUTF32CompareCaseless(const cups_utf32_t *s1,
-                                         const cups_utf32_t *s2);
-
-/*
- * Compare UTF-8 strings after case folding and NFKC normalization
- */
-extern int      cupsUTF8CompareIdentifier(const cups_utf8_t *s1,
-                                          const cups_utf8_t *s2);
-
-/*
- * Compare UTF-32 strings after case folding and NFKC normalization
- */
-extern int      cupsUTF32CompareIdentifier(const cups_utf32_t *s1,
-                                           const cups_utf32_t *s2);
-
-/*
- * Get UTF-32 character property
- */
-extern int      cupsUTF32CharacterProperty(const cups_utf32_t ch,
-                                           const cups_property_t prop);
-
-#  ifdef __cplusplus
-}
-#  endif /* __cplusplus */
-
-#endif /* !_CUPS_NORMALIZE_H_ */
-
-
-/*
- * End of "$Id: normalize.h 4684 2005-09-22 02:15:56Z mike $"
- */
index f55f8865d561db38cfda828000608996e4506443..d4cb32a736b2c54806a9deecea3fc74652adccfd 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: ppd.c 5238 2006-03-07 04:41:42Z mike $"
+ * "$Id: ppd.c 5302 2006-03-18 00:49:17Z mike $"
  *
  *   PPD file routines for the Common UNIX Printing System (CUPS).
  *
@@ -54,6 +54,8 @@
  *   ppd_free_option()      - Free a single option.
  *   ppd_get_coption()      - Get a custom option record.
  *   ppd_get_cparam()       - Get a custom parameter record.
+ *   ppd_get_encoding()     - Get the CUPS encoding value for the given
+ *                            LanguageEncoding.
  *   ppd_get_group()        - Find or create the named group as needed.
  *   ppd_get_option()       - Find or create the named option as needed.
  *   ppd_read()             - Read a line from a PPD file, skipping comment
@@ -110,8 +112,10 @@ static ppd_coption_t       *ppd_get_coption(ppd_file_t *ppd, const char *name);
 static ppd_cparam_t    *ppd_get_cparam(ppd_coption_t *opt,
                                        const char *param,
                                        const char *text);
+static cups_encoding_t ppd_get_encoding(const char *name);
 static ppd_group_t     *ppd_get_group(ppd_file_t *ppd, const char *name,
-                                      const char *text, _cups_globals_t *cg);
+                                      const char *text, _cups_globals_t *cg,
+                                      cups_encoding_t encoding);
 static ppd_option_t    *ppd_get_option(ppd_group_t *group, const char *name);
 static int             ppd_read(cups_file_t *fp, char *keyword, char *option,
                                 char *text, char **string, int ignoreblank,
@@ -146,6 +150,8 @@ ppdClose(ppd_file_t *ppd)           /* I - PPD file record */
   * Free all strings at the top level...
   */
 
+  ppd_free(ppd->lang_encoding);
+  ppd_free(ppd->nickname);
   ppd_free(ppd->patches);
   ppd_free(ppd->jcl_begin);
   ppd_free(ppd->jcl_end);
@@ -421,6 +427,7 @@ ppdOpen2(cups_file_t *fp)           /* I - File to read from */
   cups_lang_t          *language;      /* Default language */
   struct lconv         *loc;           /* Locale data */
   int                  ui_keyword;     /* Is this line a UI keyword? */
+  cups_encoding_t      encoding;       /* Encoding of PPD file */
   _cups_globals_t      *cg = _cupsGlobals();
                                        /* Global data */
   static const char * const ui_keywords[] =
@@ -565,6 +572,7 @@ ppdOpen2(cups_file_t *fp)           /* I - File to read from */
   option     = NULL;
   choice     = NULL;
   ui_keyword = 0;
+  encoding   = CUPS_ISO8859_1;
 
   while ((mask = ppd_read(fp, keyword, name, text, &string, 1, cg)) != 0)
   {
@@ -643,7 +651,8 @@ ppdOpen2(cups_file_t *fp)           /* I - File to read from */
 
         if (!group)
        {
-          if ((group = ppd_get_group(ppd, "General", _("General"), cg)) == NULL)
+          if ((group = ppd_get_group(ppd, "General", _("General"), cg,
+                                    encoding)) == NULL)
            goto error;
 
           DEBUG_printf(("Adding to group %s...\n", group->text));
@@ -706,7 +715,14 @@ ppdOpen2(cups_file_t *fp)          /* I - File to read from */
     if (!strcmp(keyword, "LanguageLevel"))
       ppd->language_level = atoi(string);
     else if (!strcmp(keyword, "LanguageEncoding"))
-      ppd->lang_encoding = string;
+    {
+     /*
+      * Say all PPD files are UTF-8, since we convert to UTF-8...
+      */
+
+      ppd->lang_encoding = strdup("UTF-8");
+      encoding           = ppd_get_encoding(string);
+    }
     else if (!strcmp(keyword, "LanguageVersion"))
       ppd->lang_version = string;
     else if (!strcmp(keyword, "Manufacturer"))
@@ -718,7 +734,18 @@ ppdOpen2(cups_file_t *fp)          /* I - File to read from */
     else if (!strcmp(keyword, "PCFileName"))
       ppd->pcfilename = string;
     else if (!strcmp(keyword, "NickName"))
-      ppd->nickname = string;
+    {
+      if (encoding != CUPS_UTF8)
+      {
+        cups_utf8_t    utf8[256];      /* UTF-8 version of NickName */
+
+
+        cupsCharsetToUTF8(utf8, string, sizeof(utf8), encoding);
+       ppd->nickname = strdup((char *)utf8);
+      }
+      else
+        ppd->nickname = strdup(string);
+    }
     else if (!strcmp(keyword, "Product"))
       ppd->product = string;
     else if (!strcmp(keyword, "ShortNickName"))
@@ -954,9 +981,6 @@ ppdOpen2(cups_file_t *fp)           /* I - File to read from */
     }
     else if (!strncmp(keyword, "Custom", 6) && !strcmp(name, "True"))
     {
-      ppd_coption_t    *coption;       /* Custom option */
-
-
       DEBUG_puts("Processing Custom option...");
 
      /*
@@ -970,7 +994,8 @@ ppdOpen2(cups_file_t *fp)           /* I - File to read from */
 
         DEBUG_printf(("%s option not found for %s...\n", keyword + 6, keyword));
 
-       if ((gtemp = ppd_get_group(ppd, "General", _("General"), cg)) == NULL)
+       if ((gtemp = ppd_get_group(ppd, "General", _("General"), cg,
+                                  encoding)) == NULL)
        {
          DEBUG_puts("Unable to get general group!");
 
@@ -987,7 +1012,7 @@ ppdOpen2(cups_file_t *fp)          /* I - File to read from */
        }
       }
 
-      if ((coption = ppd_get_coption(ppd, keyword + 6)) == NULL)
+      if (!ppd_get_coption(ppd, keyword + 6))
       {
         cg->ppd_status = PPD_ALLOC_ERROR;
 
@@ -1135,7 +1160,8 @@ ppdOpen2(cups_file_t *fp)         /* I - File to read from */
         option = ppd_get_option(subgroup, name);
       else if (group == NULL)
       {
-       if ((group = ppd_get_group(ppd, "General", _("General"), cg)) == NULL)
+       if ((group = ppd_get_group(ppd, "General", _("General"), cg,
+                                  encoding)) == NULL)
          goto error;
 
         DEBUG_printf(("Adding to group %s...\n", group->text));
@@ -1184,7 +1210,8 @@ ppdOpen2(cups_file_t *fp)         /* I - File to read from */
        }
 
       if (text[0])
-        strlcpy(option->text, text, sizeof(option->text));
+        cupsCharsetToUTF8((cups_utf8_t *)option->text, text,
+                          sizeof(option->text), encoding);
       else
       {
         if (!strcmp(name, "PageSize"))
@@ -1223,7 +1250,7 @@ ppdOpen2(cups_file_t *fp)         /* I - File to read from */
       * Find the JCL group, and add if needed...
       */
 
-      group = ppd_get_group(ppd, "JCL", _("JCL"), cg);
+      group = ppd_get_group(ppd, "JCL", _("JCL"), cg, encoding);
 
       if (group == NULL)
        goto error;
@@ -1273,7 +1300,11 @@ ppdOpen2(cups_file_t *fp)                /* I - File to read from */
          break;
        }
 
-      strlcpy(option->text, text, sizeof(option->text));
+      if (text[0])
+        cupsCharsetToUTF8((cups_utf8_t *)option->text, text,
+                          sizeof(option->text), encoding);
+      else
+        strlcpy(option->text, name, sizeof(option->text));
 
       option->section = PPD_ORDER_JCL;
       group = NULL;
@@ -1327,7 +1358,7 @@ ppdOpen2(cups_file_t *fp)         /* I - File to read from */
       * Find/add the group...
       */
 
-      group = ppd_get_group(ppd, string, sptr, cg);
+      group = ppd_get_group(ppd, string, sptr, cg, encoding);
 
       if (group == NULL)
        goto error;
@@ -1616,8 +1647,9 @@ ppdOpen2(cups_file_t *fp)         /* I - File to read from */
 
       choice = ppd_add_choice(option, name);
 
-      if (mask & PPD_TEXT)
-        strlcpy(choice->text, text, sizeof(choice->text));
+      if (text[0])
+        cupsCharsetToUTF8((cups_utf8_t *)choice->text, text,
+                          sizeof(choice->text), encoding);
       else if (!strcmp(name, "True"))
         strcpy(choice->text, _("Yes"));
       else if (!strcmp(name, "False"))
@@ -2222,15 +2254,41 @@ ppd_get_cparam(ppd_coption_t *opt,      /* I - PPD file */
 }
 
 
+/*
+ * 'ppd_get_encoding()' - Get the CUPS encoding value for the given
+ *                        LanguageEncoding.
+ */
+
+static cups_encoding_t                 /* O - CUPS encoding value */
+ppd_get_encoding(const char *name)     /* I - LanguageEncoding string */
+{
+  if (!strcasecmp(name, "ISOLatin1"))
+    return (CUPS_ISO8859_1);
+  else if (!strcasecmp(name, "ISOLatin2"))
+    return (CUPS_ISO8859_2);
+  else if (!strcasecmp(name, "ISOLatin5"))
+    return (CUPS_ISO8859_5);
+  else if (!strcasecmp(name, "JIS83-RKSJ"))
+    return (CUPS_WINDOWS_932);
+  else if (!strcasecmp(name, "MacStandard"))
+    return (CUPS_MAC_ROMAN);
+  else if (!strcasecmp(name, "WindowsANSI"))
+    return (CUPS_WINDOWS_1252);
+  else
+    return (CUPS_UTF8);
+}
+
+
 /*
  * 'ppd_get_group()' - Find or create the named group as needed.
  */
 
 static ppd_group_t *                   /* O - Named group */
-ppd_get_group(ppd_file_t     *ppd,     /* I - PPD file */
-              const char     *name,    /* I - Name of group */
-             const char     *text,     /* I - Text for group */
-              _cups_globals_t *cg)     /* I - Global data */
+ppd_get_group(ppd_file_t      *ppd,    /* I - PPD file */
+              const char      *name,   /* I - Name of group */
+             const char      *text,    /* I - Text for group */
+              _cups_globals_t *cg,     /* I - Global data */
+             cups_encoding_t encoding) /* I - Encoding of text */
 {
   int          i;                      /* Looping var */
   ppd_group_t  *group;                 /* Group */
@@ -2273,7 +2331,9 @@ ppd_get_group(ppd_file_t     *ppd,        /* I - PPD file */
 
     memset(group, 0, sizeof(ppd_group_t));
     strlcpy(group->name, name, sizeof(group->name));
-    strlcpy(group->text, text, sizeof(group->text));
+
+    cupsCharsetToUTF8((cups_utf8_t *)group->text, text,
+                      sizeof(group->text), encoding);
   }
 
   return (group);
@@ -2879,5 +2939,5 @@ ppd_read(cups_file_t    *fp,              /* I - File to read from */
 
 
 /*
- * End of "$Id: ppd.c 5238 2006-03-07 04:41:42Z mike $".
+ * End of "$Id: ppd.c 5302 2006-03-18 00:49:17Z mike $".
  */
index b92773da320bc8f92456958a12bd0a4df7712976..79ea73b0505a5d23baaf72d552cea1bb2154e8d0 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: string.c 5238 2006-03-07 04:41:42Z mike $"
+ * "$Id: string.c 5286 2006-03-13 16:32:28Z mike $"
  *
  *   String functions for the Common UNIX Printing System (CUPS).
  *
@@ -343,6 +343,12 @@ _cupsStrScand(const char   *buf,   /* I - Pointer to number */
 
   if (*buf == '.')
   {
+   /*
+    * Read fractional portion of number...
+    */
+
+    buf ++;
+
     if (loc && loc->decimal_point)
     {
       strlcpy(tempptr, loc->decimal_point, sizeof(temp) - (tempptr - temp));
@@ -628,5 +634,5 @@ compare_sp_items(_cups_sp_item_t *a,        /* I - First item */
 
 
 /*
- * End of "$Id: string.c 5238 2006-03-07 04:41:42Z mike $".
+ * End of "$Id: string.c 5286 2006-03-13 16:32:28Z mike $".
  */
index 5f1768cac3ca54920401a097e7c7d474f541b011..33b7a0df6bf6d3f8e23fa63c25004532149fdb41 100644 (file)
@@ -1,6 +1,6 @@
 *PPD-Adobe: "4.3"
 *%
-*% "$Id: test.ppd 4939 2006-01-17 18:54:33Z mike $"
+*% "$Id: test.ppd 5257 2006-03-09 15:27:27Z mike $"
 *%
 *%   Test PPD file for the Common UNIX Printing System (CUPS).
 *%
 *StringOption bar: "StringOption=bar"
 *CloseUI: *StringOption
 
-*CustomStringOption True/Custom Stringeger: "StringOption=Custom"
-*ParamCustomStringOption String: 1 string * **********
+*CustomStringOption True/Custom String: "StringOption=Custom"
+*ParamCustomStringOption String: 1 string 1 10
 
 *CloseGroup: Extended
 
 *Font ZapfChancery-MediumItalic: Standard "(001.007S)" Standard ROM
 *Font ZapfDingbats: Special "(001.004S)" Standard ROM
 *%
-*% End of "$Id: test.ppd 4939 2006-01-17 18:54:33Z mike $".
+*% End of "$Id: test.ppd 5257 2006-03-09 15:27:27Z mike $".
 *%
index 8dcbf7a376ac58ab62d6a57a05555dd676727321..912035d517a6bcb3179a5c088defaf2cce08c451 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: testarray.c 4903 2006-01-10 20:02:46Z mike $"
+ * "$Id: testarray.c 5258 2006-03-09 15:40:56Z mike $"
  *
  *   Array test program for the Common UNIX Printing System (CUPS).
  *
@@ -70,6 +70,7 @@ main(int  argc,                               /* I - Number of command-line arguments */
   cups_dir_t   *dir;                   /* Current directory */
   cups_dentry_t        *dent;                  /* Directory entry */
   char         *saved[32];             /* Saved entries */
+  void         *data;                  /* User data for arrays */
 
 
  /*
@@ -84,7 +85,8 @@ main(int  argc,                               /* I - Number of command-line arguments */
 
   fputs("cupsArrayNew: ", stdout);
 
-  array = cupsArrayNew((cups_array_func_t)strcmp, NULL);
+  data  = (void *)"testarray";
+  array = cupsArrayNew((cups_array_func_t)strcmp, data);
 
   if (array)
     puts("PASS");
@@ -94,6 +96,20 @@ main(int  argc,                              /* I - Number of command-line arguments */
     status ++;
   }
 
+ /*
+  * cupsArrayUserData()
+  */
+
+  fputs("cupsArrayUserData: ", stdout);
+  if (cupsArrayUserData(array) == data)
+    puts("PASS");
+  else
+  {
+    printf("FAIL (returned %p instead of %p!)\n", cupsArrayUserData(array),
+           data);
+    status ++;
+  }
+
  /*
   * cupsArrayAdd()
   */
@@ -509,5 +525,5 @@ load_words(const char   *filename,  /* I - File to load */
 
 
 /*
- * End of "$Id: testarray.c 4903 2006-01-10 20:02:46Z mike $".
+ * End of "$Id: testarray.c 5258 2006-03-09 15:40:56Z mike $".
  */
index 3fcffc65910d82f7e0e4183821379e6ecd00bbbb..e3053e13621854f2c589315296b3ec58973e9158 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: testhttp.c 5235 2006-03-06 13:02:23Z mike $"
+ * "$Id: testhttp.c 5261 2006-03-09 20:47:49Z mike $"
  *
  *   HTTP test program for the Common UNIX Printing System (CUPS).
  *
@@ -497,8 +497,8 @@ main(int  argc,                             /* I - Number of command-line arguments */
         current = time(NULL);
         if (current == start) current ++;
         printf("\r" CUPS_LLFMT "/" CUPS_LLFMT " bytes ("
-              CUPS_LLFMT " bytes/sec)      ", total, length,
-               total / (current - start));
+              CUPS_LLFMT " bytes/sec)      ", CUPS_LLCAST total,
+              CUPS_LLCAST length, CUPS_LLCAST (total / (current - start)));
         fflush(stdout);
       }
     }
@@ -515,5 +515,5 @@ main(int  argc,                             /* I - Number of command-line arguments */
 
 
 /*
- * End of "$Id: testhttp.c 5235 2006-03-06 13:02:23Z mike $".
+ * End of "$Id: testhttp.c 5261 2006-03-09 20:47:49Z mike $".
  */
index 8b0fbad2f6c5dd6470601f2579066cca01ed97e5..8392a65fe3a01a0c9f8f972f0aabd70cb30be847 100644 (file)
@@ -1,9 +1,9 @@
 /*
- * "$Id: testi18n.c 5195 2006-02-27 21:05:46Z mike $"
+ * "$Id: testi18n.c 5294 2006-03-15 21:09:32Z mike $"
  *
  *   Internationalization test for Common UNIX Printing System (CUPS).
  *
- *   Copyright 1997-2005 by Easy Software Products.
+ *   Copyright 1997-2006 by Easy Software Products.
  *
  *   These coded instructions, statements, and computer programs are
  *   the property of Easy Software Products and are protected by Federal
  *
  * Contents:
  *
- *   main()           - Main entry for internationalization test module.
- *   print_synopsis() - Print program synopsis (help).
- *   print_utf8()     - Print UTF-8 string with (optional) message.
- *   print_utf16()    - Print UTF-16 string with (optional) message.
- *   print_utf32()    - Print UTF-32 string with (optional) message.
- *   test_transcode() - Test 'transcode.c' module.
- *   test_normalize() - Test 'normalize.c' module.
+ *   main()        - Main entry for internationalization test module.
+ *   print_utf8()  - Print UTF-8 string with (optional) message.
+ *   print_utf32() - Print UTF-32 string with (optional) message.
  */
 
 /*
 #include <errno.h>
 #include <time.h>
 
-#include "language.h"
+#include "i18n.h"
 #include "string.h"
-#include "transcode.h"
-#include "normalize.h"
-
-
-/*
- * Local Globals...
- */
-
-static const char *program_synopsis[] = /* Program help */
-{
-  "testi18n [-vh]",
-  "         -v  verbose (print each called function and result)",
-  "         -h  help (print this synopsis)",
-  "",
-  "'testi18n' is a utility to test CUPS internationalization",
-  "Copyright 1997-2005 by Easy Software Products.",
-  NULL
-};
-static int     error_count = 0;        /* Total error count */
 
 
 /*
  * Local functions...
  */
 
-static void    print_synopsis(void);
 static void    print_utf8(const char *msg, const cups_utf8_t *src);
-static void    print_utf16(const char *msg, const cups_utf16_t *src);
 static void    print_utf32(const char *msg, const cups_utf32_t *src);
-static int     test_transcode(const int verbose);
-static int     test_normalize(const int verbose);
 
 
 /*
@@ -83,140 +56,16 @@ static int test_normalize(const int verbose);
 int                                    /* O - Exit code */
 main(int  argc,                                /* I - Argument Count */
      char *argv[])                     /* I - Arguments */
-{
-  int          ai;                     /* Argument index */
-  char         *ap;                    /* Argument pointer */
-  int          verbose;                /* Verbose flag */
-  int          errors;                 /* Error count */
-
-
- /*
-  * Check for switches...
-  */
-
-  verbose = 0;
-
-  for (ai = 1; ai < argc; ai ++)
-  {
-    ap = argv[ai];
-    if (*ap != '-')
-      break;
-
-    for (ap ++; *ap != '\0'; ap ++)
-    {
-      switch (*ap)
-      {
-       case 'v':                       /* verbose */
-         verbose = 1;
-         break;
-
-       case 'h':                       /* help */
-         print_synopsis();
-         return (0);
-
-       default:
-         print_synopsis();
-         return (1);
-      }
-    }
-  }
-
- /*
-  * Test all internationalization modules and functions...
-  */
-
-  errors = test_transcode(verbose);
-  error_count += errors;
-  printf("\ntesti18n: %d errors found in 'transcode.c'\n", errors);
-
-  errors = test_normalize(verbose);
-  error_count += errors;
-  printf("\ntesti18n: %d errors found in 'normalize.c'\n", errors);
-
-  return (error_count > 0);
-}
-
-
-/*
- * 'print_synopsis()' - Print program synopsis (help).
- */
-
-static void
-print_synopsis(void)
-{
-  int  i;                              /* Looping variable */
-
-
-  for (i = 0; program_synopsis[i]; i ++)
-    puts(program_synopsis[i]);
-}
-
-
-/*
- * 'print_utf8()' - Print UTF-8 string with (optional) message.
- */
-
-static void
-print_utf8(const char       *msg,      /* I - Message String */
-          const cups_utf8_t *src)      /* I - UTF-8 Source String */
-{
-  if (msg != NULL)
-    printf("%s:", msg);
-
-  for (; *src; src ++)
-    printf(" %02x", *src);
-  printf("\n");
-  return;
-}
-
-
-/*
- * 'print_utf16()' - Print UTF-16 string with (optional) message.
- */
-
-static void
-print_utf16(const char        *msg,    /* I - Message String */
-           const cups_utf16_t *src)    /* I - UTF-16 Source String */
-{
-  if (msg != NULL)
-    printf("%s:", msg);
-  for (; *src; src ++)
-    printf(" %04x", (int) *src);
-  printf("\n");
-  return;
-}
-
-
-/*
- * 'print_utf32()' - Print UTF-32 string with (optional) message.
- */
-
-static void
-print_utf32(const char        *msg,    /* I - Message String */
-           const cups_utf32_t *src)    /* I - UTF-32 Source String */
-{
-  if (msg != NULL)
-    printf("%s:", msg);
-  for (; *src; src ++)
-    printf(" %04x", (int) *src);
-  printf("\n");
-  return;
-}
-
-
-/*
- * 'test_transcode()' - Test 'transcode.c' module.
- */
-
-static int                             /* O - Zero or error count */
-test_transcode(const int verbose)      /* I - Verbose flag */
 {
   FILE         *fp;                    /* File pointer */
   int          count;                  /* File line counter */
+  int          status,                 /* Status of current test */
+               errors;                 /* Error count */
   char         line[1024];             /* File line source string */
   int          len;                    /* Length (count) of string */
-  char         legsrc[1024];           /* Legacy source string */
-  char         legdest[1024];          /* Legacy destination string */
+  char         legsrc[1024],           /* Legacy source string */
+               legdest[1024],          /* Legacy destination string */
+               *legptr;                /* Pointer into legacy string */
   cups_utf8_t  utf8latin[] =           /* UTF-8 Latin-1 source */
     { 0x41, 0x20, 0x21, 0x3D, 0x20, 0xC3, 0x84, 0x2E, 0x00 };
     /* "A != <A WITH DIAERESIS>." - use ISO 8859-1 */
@@ -225,7 +74,7 @@ test_transcode(const int verbose)    /* I - Verbose flag */
     /* "A <NOT IDENTICAL TO> <A WITH DIAERESIS>." */
   cups_utf8_t  utf8greek[] =           /* UTF-8 Greek source string */
     { 0x41, 0x20, 0x21, 0x3D, 0x20, 0xCE, 0x91, 0x2E, 0x00 };
-    /* "A != <ALHPA>." - use ISO 8859-7 */
+    /* "A != <ALPHA>." - use ISO 8859-7 */
   cups_utf8_t  utf8japan[] =           /* UTF-8 Japanese source */
     { 0x41, 0x20, 0x21, 0x3D, 0x20, 0xEE, 0x9C, 0x80, 0x2E, 0x00 };
     /* "A != <PRIVATE U+E700>." - use Windows 932 or EUC-JP */
@@ -239,256 +88,407 @@ test_transcode(const int verbose)        /* I - Verbose flag */
     { 0x41, 0x20, 0xE2, 0x89, 0xA2, 0x20, 0xF8, 0x84, 0x2E, 0x00 };
     /* "A <NOT IDENTICAL TO> <...bad stuff...>." */
   cups_utf8_t  utf8dest[1024];         /* UTF-8 destination string */
-  cups_utf16_t utf16sur[] =            /* UTF-16 with surrogates */
-    { 0xD800, 0xDC00, 0x20, 0x21, 0x3D, 0x20, 0xC4, 0x2E, 0x00 };
-    /* "<Surrogate pair> != <A WITH DIAERESIS>." */
-  cups_utf16_t utf16src[1024];         /* UTF-16 source string */
-  cups_utf16_t utf16dest[1024];        /* UTF-16 destination string */
   cups_utf32_t utf32src[1024];         /* UTF-32 source string */
   cups_utf32_t utf32dest[1024];        /* UTF-32 destination string */
-  _cups_vmap_t  *vmap;                  /* VBCS charmap pointer */
+  _cups_vmap_t  *vmap;                 /* VBCS charmap pointer */
 
 
  /*
-  * Test with (inserted) and (deleted) leading BOM...
+  * Start with some conversion tests from a UTF-8 test file.
   */
 
-  if (verbose)
+  errors = 0;
+
+  if ((fp = fopen("utf8demo.txt", "r")) == NULL)
   {
-    printf("\ntesti18n: Testing 'transcode.c'...\n");
-    printf(" testing with insert/delete leading BOM...\n");
+    perror("utf8demo.txt");
+    return (1);
   }
 
  /*
-  * Test UTF-8 to UTF-32/EUC-JP on demo file...
+  * cupsUTF8ToUTF32
   */
 
-  if (verbose)
+  fputs("cupsUTF8ToUTF32 of utfdemo.txt: ", stdout);
+
+  for (count = 0, status = 0; fgets(line, sizeof(line), fp);)
   {
-    printf("\ntesti18n: Testing UTF-8 source 'utf8demo.txt'...\n");
-    printf(" testing UTF-8 to UTF-32...\n");
-    printf(" testing UTF-8 to EUC-JP...\n");
+    count ++;
+
+    if (cupsUTF8ToUTF32(utf32dest, (cups_utf8_t *)line, 1024) < 0)
+    {
+      printf("FAIL (UTF-8 to UTF-32 on line %d)\n", count);
+      errors ++;
+      status = 1;
+      break;
+    }
   }
 
-  if ((fp = fopen("utf8demo.txt", "r")) == NULL)
-    return (1);
+  if (!status)
+    puts("PASS");
 
-  for (count = 0;;)
-  {
-    if (fgets(line, 1024, fp) == NULL)
-      break;
+ /*
+  * cupsUTF8ToCharset(CUPS_EUC_JP)
+  */
 
-    count ++;
+  fputs("cupsUTF8ToCharset(CUPS_EUC_JP) of utfdemo.txt: ", stdout);
 
-    len = cupsUTF8ToUTF32(utf32dest, (cups_utf8_t *)line, 1024);
-    if (len < 0)
-      printf(" error line: %d (UTF-8 to UTF-32)\n", count);
+  rewind(fp);
+
+  for (count = 0, status = 0; fgets(line, sizeof(line), fp);)
+  {
+    count ++;
 
     len = cupsUTF8ToCharset(legdest, (cups_utf8_t *)line, 1024, CUPS_EUC_JP);
     if (len < 0)
-      printf(" error line: %d (UTF-8 to EUC-JP)\n", count);
+    {
+      printf("FAIL (UTF-8 to EUC-JP on line %d)\n", count);
+      errors ++;
+      status = 1;
+      break;
+    }
   }
 
+  if (!status)
+    puts("PASS");
+
   fclose(fp);
 
-  if (verbose)
-    printf(" total lines: %d\n", count);
+ /*
+  * Test charmap load for ISO-8859-1...
+  */
+
+  fputs("_cupsCharmapGet(CUPS_ISO8859_1): ", stdout);
+
+  if (!_cupsCharmapGet(CUPS_ISO8859_1))
+  {
+    errors ++;
+    puts("FAIL");
+  }
+  else
+    puts("PASS");
 
  /*
-  * Test VBCS charmap load for EUC-JP...
+  * Test charmap load for Windows-932 (Shift-JIS)...
   */
 
-  if (verbose)
-    printf("\ntesti18n: Loading VBCS charmap EUC-JP (Japanese)...\n");
+  fputs("_cupsCharmapGet(CUPS_WINDOWS_932): ", stdout);
 
-  vmap = (_cups_vmap_t *) cupsCharmapGet(CUPS_EUC_JP);
-  if (vmap == NULL)
-    return (1);
+  if (!_cupsCharmapGet(CUPS_WINDOWS_932))
+  {
+    errors ++;
+    puts("FAIL");
+  }
+  else
+    puts("PASS");
 
-  if (verbose)
+ /*
+  * Test VBCS charmap load for EUC-JP...
+  */
+
+  fputs("_cupsCharmapGet(CUPS_EUC_JP): ", stdout);
+
+  if ((vmap = (_cups_vmap_t *)_cupsCharmapGet(CUPS_EUC_JP)) == NULL)
   {
-    printf(" charcount: %d\n", vmap->charcount);
-    printf(" widecount: %d\n", vmap->widecount);
+    errors ++;
+    puts("FAIL");
   }
+  else
+    puts("PASS");
 
  /*
   * Test VBCS charmap load for EUC-TW...
   */
 
-  if (verbose)
-    printf("\ntesti18n: Loading VBCS charmap EUC-TW (Taiwan)...\n");
-
-  vmap = (_cups_vmap_t *) cupsCharmapGet(CUPS_EUC_TW);
-  if (vmap == NULL)
-    return (1);
+  fputs("_cupsCharmapGet(CUPS_EUC_TW): ", stdout);
 
-  if (verbose)
+  if ((vmap = (_cups_vmap_t *)_cupsCharmapGet(CUPS_EUC_TW)) == NULL)
   {
-    printf(" charcount: %d\n", vmap->charcount);
-    printf(" widecount: %d\n", vmap->widecount);
+    errors ++;
+    puts("FAIL");
   }
+  else
+    puts("PASS");
 
  /*
   * Test UTF-8 to legacy charset (ISO 8859-1)...
   */
 
-  if (verbose)
-    printf("\ntesti18n: Testing UTF-8 to ISO 8859-1 (Latin1)...\n");
+  fputs("cupsUTF8ToCharset(CUPS_ISO8859_1): ", stdout);
 
   legdest[0] = 0;
 
   len = cupsUTF8ToCharset(legdest, utf8latin, 1024, CUPS_ISO8859_1);
   if (len < 0)
-    return (1);
-
-  if (verbose)
   {
-    print_utf8(" utf8latin", utf8latin);
-    print_utf8(" legdest  ", (cups_utf8_t *) legdest);
+    printf("FAIL (len=%d)\n", len);
+    errors ++;
   }
+  else
+    puts("PASS");
 
-  strcpy(legsrc, legdest);
-
-  len = cupsCharsetToUTF8(utf8dest, legsrc, 1024, CUPS_ISO8859_1);
-
-  if (len < 0)
-    return (1);
+ /*
+  * cupsCharsetToUTF8
+  */
 
-  if (len != strlen ((char *) utf8latin))
-    return (1);
+  fputs("cupsCharsetToUTF8(CUPS_ISO8859_1): ", stdout);
 
-  if (memcmp(utf8latin, utf8dest, len) != 0)
-    return (1);
+  strcpy(legsrc, legdest);
 
- /*
-  * Test UTF-8 to Latin-1 (ISO 8859-1) with replacement...
-  */
-  if (verbose)
-    printf("\ntesti18n: Testing UTF-8 to ISO 8859-1 w/ replace...\n");
-  len = cupsUTF8ToCharset(legdest, utf8repla, 1024, CUPS_ISO8859_1);
-  if (len < 0)
-    return (1);
-  if (verbose)
+  len = cupsCharsetToUTF8(utf8dest, legsrc, 1024, CUPS_ISO8859_1);
+  if (len != strlen((char *)utf8latin))
+  {
+    printf("FAIL (len=%d, expected %d)\n", len, strlen((char *)utf8latin));
+    print_utf8("    utf8latin", utf8latin);
+    print_utf8("    utf8dest", utf8dest);
+    errors ++;
+  }
+  else if (memcmp(utf8latin, utf8dest, len))
   {
-    print_utf8(" utf8repla", utf8repla);
-    print_utf8(" legdest  ", (cups_utf8_t *) legdest);
+    puts("FAIL (results do not match)");
+    print_utf8("    utf8latin", utf8latin);
+    print_utf8("    utf8dest", utf8dest);
+    errors ++;
   }
+  else if (cupsUTF8ToCharset(legdest, utf8repla, 1024, CUPS_ISO8859_1) < 0)
+  {
+    puts("FAIL (replacement characters do not work!)");
+    errors ++;
+  }
+  else
+    puts("PASS");
 
  /*
-  * Test UTF-8 to legacy charset (ISO 8859-7)...
+  * Test UTF-8 to/from legacy charset (ISO 8859-7)...
   */
-  if (verbose)
-    printf("\ntesti18n: Testing UTF-8 to ISO 8859-7 (Greek)...\n");
-  legdest[0] = 0;
-  len = cupsUTF8ToCharset(legdest, utf8greek, 1024, CUPS_ISO8859_7);
-  if (len < 0)
-    return (1);
-  if (verbose)
+
+  fputs("cupsUTF8ToCharset(CUPS_ISO8859_7): ", stdout);
+
+  if (cupsUTF8ToCharset(legdest, utf8greek, 1024, CUPS_ISO8859_7) < 0)
   {
-    print_utf8(" utf8greek", utf8greek);
-    print_utf8(" legdest  ", (cups_utf8_t *) legdest);
+    puts("FAIL");
+    errors ++;
   }
+  else
+  {
+    for (legptr = legdest; *legptr && *legptr != '?'; legptr ++);
+
+    if (*legptr)
+    {
+      puts("FAIL (unknown character)");
+      errors ++;
+    }
+    else
+      puts("PASS");
+  }
+
+  fputs("cupsCharsetToUTF8(CUPS_ISO8859_7): ", stdout);
+
   strcpy(legsrc, legdest);
+
   len = cupsCharsetToUTF8(utf8dest, legsrc, 1024, CUPS_ISO8859_7);
-  if (len < 0)
-    return (1);
-  if (len != strlen ((char *) utf8greek))
-    return (1);
-  if (memcmp(utf8greek, utf8dest, len) != 0)
-    return (1);
+  if (len != strlen((char *)utf8greek))
+  {
+    printf("FAIL (len=%d, expected %d)\n", len, strlen((char *)utf8greek));
+    print_utf8("    utf8greek", utf8greek);
+    print_utf8("    utf8dest", utf8dest);
+    errors ++;
+  }
+  else if (memcmp(utf8greek, utf8dest, len))
+  {
+    puts("FAIL (results do not match)");
+    print_utf8("    utf8greek", utf8greek);
+    print_utf8("    utf8dest", utf8dest);
+    errors ++;
+  }
+  else
+    puts("PASS");
 
  /*
-  * Test UTF-8 to legacy charset (Windows 932)...
+  * Test UTF-8 to/from legacy charset (Windows 932)...
   */
-  if (verbose)
-    printf("\ntesti18n: Testing UTF-8 to Windows 932 (Japanese)...\n");
-  legdest[0] = 0;
-  len = cupsUTF8ToCharset(legdest, utf8japan, 1024, CUPS_WINDOWS_932);
-  if (len < 0)
-    return (1);
-  if (verbose)
+
+  fputs("cupsUTF8ToCharset(CUPS_WINDOWS_932): ", stdout);
+
+  if (cupsUTF8ToCharset(legdest, utf8japan, 1024, CUPS_WINDOWS_932) < 0)
   {
-    print_utf8(" utf8japan", utf8japan);
-    print_utf8(" legdest  ", (cups_utf8_t *) legdest);
+    puts("FAIL");
+    errors ++;
   }
+  else
+  {
+    for (legptr = legdest; *legptr && *legptr != '?'; legptr ++);
+
+    if (*legptr)
+    {
+      puts("FAIL (unknown character)");
+      errors ++;
+    }
+    else
+      puts("PASS");
+  }
+
+  fputs("cupsCharsetToUTF8(CUPS_WINDOWS_932): ", stdout);
+
   strcpy(legsrc, legdest);
+
   len = cupsCharsetToUTF8(utf8dest, legsrc, 1024, CUPS_WINDOWS_932);
-  if (len < 0)
-    return (1);
-  if (len != strlen ((char *) utf8japan))
-    return (1);
-  if (memcmp(utf8japan, utf8dest, len) != 0)
-    return (1);
+  if (len != strlen((char *)utf8japan))
+  {
+    printf("FAIL (len=%d, expected %d)\n", len, strlen((char *)utf8japan));
+    print_utf8("    utf8japan", utf8japan);
+    print_utf8("    utf8dest", utf8dest);
+    errors ++;
+  }
+  else if (memcmp(utf8japan, utf8dest, len))
+  {
+    puts("FAIL (results do not match)");
+    print_utf8("    utf8japan", utf8japan);
+    print_utf8("    utf8dest", utf8dest);
+    errors ++;
+  }
+  else
+    puts("PASS");
 
  /*
-  * Test UTF-8 to legacy charset (EUC-JP)...
+  * Test UTF-8 to/from legacy charset (EUC-JP)...
   */
-  if (verbose)
-    printf("\ntesti18n: Testing UTF-8 to EUC-JP (Japanese)...\n");
-  legdest[0] = 0;
-  len = cupsUTF8ToCharset(legdest, utf8japan, 1024, CUPS_EUC_JP);
-  if (len < 0)
-    return (1);
-  if (verbose)
+
+  fputs("cupsUTF8ToCharset(CUPS_EUC_JP): ", stdout);
+
+  if (cupsUTF8ToCharset(legdest, utf8japan, 1024, CUPS_EUC_JP) < 0)
   {
-    print_utf8(" utf8japan", utf8japan);
-    print_utf8(" legdest  ", (cups_utf8_t *) legdest);
+    puts("FAIL");
+    errors ++;
   }
+  else
+  {
+    for (legptr = legdest; *legptr && *legptr != '?'; legptr ++);
+
+    if (*legptr)
+    {
+      puts("FAIL (unknown character)");
+      errors ++;
+    }
+    else
+      puts("PASS");
+  }
+
+  fputs("cupsCharsetToUTF8(CUPS_EUC_JP): ", stdout);
+
   strcpy(legsrc, legdest);
+
   len = cupsCharsetToUTF8(utf8dest, legsrc, 1024, CUPS_EUC_JP);
-  if (len < 0)
-    return (1);
-  if (len != strlen ((char *) utf8japan))
-    return (1);
-  if (memcmp(utf8japan, utf8dest, len) != 0)
-    return (1);
+  if (len != strlen((char *)utf8japan))
+  {
+    printf("FAIL (len=%d, expected %d)\n", len, strlen((char *)utf8japan));
+    print_utf8("    utf8japan", utf8japan);
+    print_utf8("    utf8dest", utf8dest);
+    errors ++;
+  }
+  else if (memcmp(utf8japan, utf8dest, len))
+  {
+    puts("FAIL (results do not match)");
+    print_utf8("    utf8japan", utf8japan);
+    print_utf8("    utf8dest", utf8dest);
+    errors ++;
+  }
+  else
+    puts("PASS");
 
  /*
-  * Test UTF-8 to legacy charset (Windows 950)...
+  * Test UTF-8 to/from legacy charset (Windows 950)...
   */
-  if (verbose)
-    printf("\ntesti18n: Testing UTF-8 to Windows 950 (Chinese)...\n");
-  legdest[0] = 0;
-  len = cupsUTF8ToCharset(legdest, utf8taiwan, 1024, CUPS_WINDOWS_950);
-  if (len < 0)
-    return (1);
-  if (verbose)
+
+  fputs("cupsUTF8ToCharset(CUPS_WINDOWS_950): ", stdout);
+
+  if (cupsUTF8ToCharset(legdest, utf8taiwan, 1024, CUPS_WINDOWS_950) < 0)
+  {
+    puts("FAIL");
+    errors ++;
+  }
+  else
   {
-    print_utf8(" utf8taiwan", utf8taiwan);
-    print_utf8(" legdest   ", (cups_utf8_t *) legdest);
+    for (legptr = legdest; *legptr && *legptr != '?'; legptr ++);
+
+    if (*legptr)
+    {
+      puts("FAIL (unknown character)");
+      errors ++;
+    }
+    else
+      puts("PASS");
   }
+
+  fputs("cupsCharsetToUTF8(CUPS_WINDOWS_950): ", stdout);
+
   strcpy(legsrc, legdest);
+
   len = cupsCharsetToUTF8(utf8dest, legsrc, 1024, CUPS_WINDOWS_950);
-  if (len < 0)
-    return (1);
-  if (len != strlen ((char *) utf8taiwan))
-    return (1);
-  if (memcmp(utf8taiwan, utf8dest, len) != 0)
-    return (1);
+  if (len != strlen((char *)utf8taiwan))
+  {
+    printf("FAIL (len=%d, expected %d)\n", len, strlen((char *)utf8taiwan));
+    print_utf8("    utf8taiwan", utf8taiwan);
+    print_utf8("    utf8dest", utf8dest);
+    errors ++;
+  }
+  else if (memcmp(utf8taiwan, utf8dest, len))
+  {
+    puts("FAIL (results do not match)");
+    print_utf8("    utf8taiwan", utf8taiwan);
+    print_utf8("    utf8dest", utf8dest);
+    errors ++;
+  }
+  else
+    puts("PASS");
 
  /*
-  * Test UTF-8 to legacy charset (EUC-TW)...
+  * Test UTF-8 to/from legacy charset (EUC-TW)...
   */
-  if (verbose)
-    printf("\ntesti18n: Testing UTF-8 to EUC-TW (Chinese)...\n");
-  legdest[0] = 0;
-  len = cupsUTF8ToCharset(legdest, utf8taiwan, 1024, CUPS_EUC_TW);
-  if (len < 0)
-    return (1);
-  if (verbose)
+
+  fputs("cupsUTF8ToCharset(CUPS_EUC_TW): ", stdout);
+
+  if (cupsUTF8ToCharset(legdest, utf8taiwan, 1024, CUPS_EUC_TW) < 0)
+  {
+    puts("FAIL");
+    errors ++;
+  }
+  else
   {
-    print_utf8(" utf8taiwan", utf8taiwan);
-    print_utf8(" legdest   ", (cups_utf8_t *) legdest);
+    for (legptr = legdest; *legptr && *legptr != '?'; legptr ++);
+
+    if (*legptr)
+    {
+      puts("FAIL (unknown character)");
+      errors ++;
+    }
+    else
+      puts("PASS");
   }
+
+  fputs("cupsCharsetToUTF8(CUPS_EUC_TW): ", stdout);
+
   strcpy(legsrc, legdest);
+
   len = cupsCharsetToUTF8(utf8dest, legsrc, 1024, CUPS_EUC_TW);
-  if (len < 0)
-    return (1);
-  if (len != strlen ((char *) utf8taiwan))
-    return (1);
-  if (memcmp(utf8taiwan, utf8dest, len) != 0)
-    return (1);
+  if (len != strlen((char *)utf8taiwan))
+  {
+    printf("FAIL (len=%d, expected %d)\n", len, strlen((char *)utf8taiwan));
+    print_utf8("    utf8taiwan", utf8taiwan);
+    print_utf8("    utf8dest", utf8dest);
+    errors ++;
+  }
+  else if (memcmp(utf8taiwan, utf8dest, len))
+  {
+    puts("FAIL (results do not match)");
+    print_utf8("    utf8taiwan", utf8taiwan);
+    print_utf8("    utf8dest", utf8dest);
+    errors ++;
+  }
+  else
+    puts("PASS");
 
+#if 0
  /*
   * Test UTF-8 (16-bit) to UTF-32 (w/ BOM)...
   */
@@ -523,269 +523,54 @@ test_transcode(const int verbose)        /* I - Verbose flag */
     print_utf8(" utf8bad  ", utf8bad);
 
  /*
-  * Test UTF-8 (16-bit) to UTF-16 (w/ BOM)...
-  */
-  if (verbose)
-    printf("\ntesti18n: Testing UTF-8 to UTF-16 (w/ BOM)...\n");
-  len = cupsUTF8ToUTF16(utf16dest, utf8good, 1024);
-  if (len < 0)
-    return (1);
-  if (verbose)
-  {
-    print_utf8(" utf8good ", utf8good);
-    print_utf16(" utf16dest", utf16dest);
-  }
-  memcpy (utf16src, utf16dest, (len + 1) * sizeof(cups_utf16_t));
-  len = cupsUTF16ToUTF8(utf8dest, utf16src, 1024);
-  if (len < 0)
-    return (1);
-  if (len != strlen ((char *) utf8good))
-    return (1);
-  if (memcmp(utf8good, utf8dest, len) != 0)
-    return (1);
-
- /*
-  * Test UTF-16 to UTF-32 with surrogates...
+  * Test _cupsCharmapFlush()...
   */
   if (verbose)
-    printf("\ntesti18n: Testing UTF-16 to UTF-32 w/ surrogates...\n");
-  len = cupsUTF16ToUTF32(utf32dest, utf16sur, 1024);
-  if (len < 0)
-    return (1);
-  if (verbose)
-  {
-    print_utf16(" utf16sur ", utf16sur);
-    print_utf32(" utf32dest", utf32dest);
-  }
-
- /*
-  * Test cupsCharmapFlush()...
-  */
-  if (verbose)
-    printf("\ntesti18n: Testing cupsCharmapFlush()...\n");
-  cupsCharmapFlush();
+    printf("\ntesti18n: Testing _cupsCharmapFlush()...\n");
+  _cupsCharmapFlush();
   return (0);
+#endif /* 0 */
+
+  return (errors > 0);
 }
 
 
 /*
- * 'test_normalize()' - Test 'normalize.c' module.
+ * 'print_utf8()' - Print UTF-8 string with (optional) message.
  */
 
-static int                             /* O - Zero or error count */
-test_normalize(const int verbose)      /* I - Verbose flag */
+static void
+print_utf8(const char       *msg,      /* I - Message String */
+          const cups_utf8_t *src)      /* I - UTF-8 Source String */
 {
-  FILE         *fp;                    /* File pointer */
-  int          count;                  /* File line counter */
-  char         line[1024];             /* File line source string */
-  int          len;                    /* Length (count) of string */
-  int          diff;                   /* Difference of two strings */
-  int          prop;                   /* Property of a character */
-  int          i;                      /* Looping variable */
-  cups_utf32_t utf32char;              /* UTF-32 character */
-  cups_utf8_t  utf8src[1024];          /* UTF-8 source string */
-  cups_utf8_t  utf8dest[1024];         /* UTF-8 destination string */
-  cups_utf16_t utf16src[] =            /* UTF-16 non-normal source */
-    { 0x0149, 0x20, 0x21, 0x3D, 0x20, 0xC4, 0x2E, 0x00 };
-    /* "<SMALL N PRECEDED BY APOSTROPHE> != <A WITH DIAERESIS>." */
-  cups_utf16_t utf16dest[1024];        /* UTF-16 destination string */
-  cups_utf32_t utf32dest[1024];        /* UTF-32 destination string */
-
-  if (verbose)
-    printf("\ntesti18n: Testing 'normalize.c'...\n");
-
- /*
-  * Test UTF-8 to NFKD/NFC/Properties on demo file...
-  */
-  if (verbose)
-  {
-    printf("\ntesti18n: Testing UTF-8 source 'utf8demo.txt'...\n");
-    printf(" testing UTF-8 to NFKD...\n");
-    printf(" testing UTF-8 to NFC...\n");
-    printf(" testing UTF-8 to Character Properties...\n");
-  }
-  if ((fp = fopen("utf8demo.txt", "r")) == NULL)
-    return (1);
-  for (count = 0;;)
-  {
-    if (fgets(line, 1024, fp) == NULL)
-      break;
-    count ++;
-    len = cupsUTF8Normalize(utf8dest, (cups_utf8_t *)line, 1024, CUPS_NORM_NFKD);
-    if (len < 0)
-      printf(" error line: %d (UTF-8 to NFKD)\n", count);
-    len = cupsUTF8Normalize(utf8dest, (cups_utf8_t *)line, 1024, CUPS_NORM_NFC);
-    if (len < 0)
-      printf(" error line: %d (UTF-8 to NFC)\n", count);
-    len = cupsUTF8ToUTF32(utf32dest, (cups_utf8_t *)line, 1024);
-    if (len < 0)
-    {
-      printf(" error line: %d (UTF-8 to UTF-32)\n", count);
-      continue;
-    }
-    for (i = 0; i < len; i ++)
-    {
-      prop = cupsUTF32CharacterProperty(utf32dest[i],
-                                       CUPS_PROP_GENERAL_CATEGORY);
-      if (prop < 0)
-       printf(" error line: %d (Prop - General Category)\n", count);
-      prop = cupsUTF32CharacterProperty(utf32dest[i],
-                                       CUPS_PROP_BIDI_CATEGORY);
-      if (prop < 0)
-       printf(" error line: %d (Prop - Bidi Category)\n", count);
-      prop = cupsUTF32CharacterProperty(utf32dest[i],
-                                       CUPS_PROP_COMBINING_CLASS);
-      if (prop < 0)
-       printf(" error line: %d (Prop - Combining Class)\n", count);
-      prop = cupsUTF32CharacterProperty(utf32dest[i],
-                                       CUPS_PROP_BREAK_CLASS);
-      if (prop < 0)
-       printf(" error line: %d (Prop - Break Class)\n", count);
-    }
-  }
-  fclose(fp);
-  if (verbose)
-    printf(" total lines: %d\n", count);
-
- /*
-  * Test UTF-8 normalization NFKD...
-  */
-  if (verbose)
-    printf("\ntesti18n: Testing UTF-8 normalization NFKD...\n");
-  len = cupsUTF16ToUTF8(utf8dest, utf16src, 1024);
-  if (len < 0)
-    return (1);
-  strcpy((char *) utf8src, (char *) utf8dest);
-  len = cupsUTF8Normalize(utf8dest, utf8src, 1024, CUPS_NORM_NFKD);
-  if (len < 0)
-    return (1);
-  len = cupsUTF8ToUTF16(utf16dest, utf8dest, 1024);
-  if (len < 0)
-    return (1);
-  if (verbose)
-  {
-    print_utf16(" utf16src ", utf16src);
-    print_utf16(" utf16dest", utf16dest);
-  }
+  if (msg)
+    printf("%s:", msg);
 
- /*
-  * Test UTF-8 normalization NFD...
-  */
-  if (verbose)
-    printf("\ntesti18n: Testing UTF-8 normalization NFD...\n");
-  len = cupsUTF8Normalize(utf8dest, utf8src, 1024, CUPS_NORM_NFD);
-  if (len < 0)
-    return (1);
-  len = cupsUTF8ToUTF16(utf16dest, utf8dest, 1024);
-  if (len < 0)
-    return (1);
-  if (verbose)
-  {
-    print_utf16(" utf16src ", utf16src);
-    print_utf16(" utf16dest", utf16dest);
-  }
+  for (; *src; src ++)
+    printf(" %02x", *src);
 
- /*
-  * Test UTF-8 normalization NFC...
-  */
-  if (verbose)
-    printf("\ntesti18n: Testing UTF-8 normalization NFC...\n");
-  len = cupsUTF8Normalize(utf8dest, utf8src, 1024, CUPS_NORM_NFC);
-  if (len < 0)
-    return (1);
-  len = cupsUTF8ToUTF16(utf16dest, utf8dest, 1024);
-  if (len < 0)
-    return (1);
-  if (verbose)
-  {
-    print_utf16(" utf16src ", utf16src);
-    print_utf16(" utf16dest", utf16dest);
-  }
+  putchar('\n');
+}
 
- /*
-  * Test UTF-8 simple case folding...
-  */
-  if (verbose)
-    printf("\ntesti18n: Testing UTF-8 simple case folding...\n");
-  len = cupsUTF8CaseFold(utf8dest, utf8src, 1024, CUPS_FOLD_SIMPLE);
-  if (len < 0)
-    return (1);
-  len = cupsUTF8ToUTF16(utf16dest, utf8dest, 1024);
-  if (len < 0)
-    return (1);
-  if (verbose)
-  {
-    print_utf16(" utf16src ", utf16src);
-    print_utf16(" utf16dest", utf16dest);
-  }
 
- /*
-  * Test UTF-8 full case folding...
-  */
-  if (verbose)
-    printf("\ntesti18n: Testing UTF-8 full case folding...\n");
-  len = cupsUTF8CaseFold(utf8dest, utf8src, 1024, CUPS_FOLD_FULL);
-  if (len < 0)
-    return (1);
-  len = cupsUTF8ToUTF16(utf16dest, utf8dest, 1024);
-  if (len < 0)
-    return (1);
-  if (verbose)
-  {
-    print_utf16(" utf16src ", utf16src);
-    print_utf16(" utf16dest", utf16dest);
-  }
+/*
+ * 'print_utf32()' - Print UTF-32 string with (optional) message.
+ */
 
- /*
-  * Test UTF-8 caseless comparison...
-  */
-  if (verbose)
-    printf("\ntesti18n: Testing UTF-8 caseless comparison..\n");
-  diff = cupsUTF8CompareCaseless(utf8src, utf8dest);
-  if (verbose)
-    printf(" diff: %d\n", diff);
-  if (verbose)
-    printf("\ntesti18n: Testing UTF-8 identifier comparison..\n");
-  diff = cupsUTF8CompareIdentifier(utf8src, utf8dest);
-  if (verbose)
-    printf(" diff: %d\n", diff);
+static void
+print_utf32(const char        *msg,    /* I - Message String */
+           const cups_utf32_t *src)    /* I - UTF-32 Source String */
+{
+  if (msg)
+    printf("%s:", msg);
 
- /*
-  * Test UTF-32 character properties...
-  */
-  if (verbose)
-    printf("\ntesti18n: Testing UTF-32 character properties..\n");
-  utf32char = 0x02B0;
-  prop = cupsUTF32CharacterProperty (utf32char,
-    CUPS_PROP_GENERAL_CATEGORY);
-  if (verbose)
-    printf(" utf32char: %04lx  general category %d\n", utf32char, prop);
-  utf32char = 0x0621;
-  prop = cupsUTF32CharacterProperty (utf32char,
-    CUPS_PROP_BIDI_CATEGORY);
-  if (verbose)
-    printf(" utf32char: %04lx  bidi category   %d\n", utf32char, prop);
-  utf32char = 0x0308;
-  prop = cupsUTF32CharacterProperty (utf32char,
-    CUPS_PROP_COMBINING_CLASS);
-  if (verbose)
-    printf(" utf32char: %04lx  combining class %d\n", utf32char, prop);
-  utf32char = 0x0009;
-  prop = cupsUTF32CharacterProperty (utf32char,
-    CUPS_PROP_BREAK_CLASS);
-  if (verbose)
-    printf(" utf32char: %04lx  break class     %d\n", utf32char, prop);
+  for (; *src; src ++)
+    printf(" %04x", (int) *src);
 
- /*
-  * Test cupsNormalizeMapsFlush()...
-  */
-  if (verbose)
-    printf("\ntesti18n: Testing cupsNormalizeMapsFlush()...\n");
-  cupsNormalizeMapsFlush();
-  return (0);
+  putchar('\n');
 }
 
 
 /*
- * End of "$Id: testi18n.c 5195 2006-02-27 21:05:46Z mike $"
+ * End of "$Id: testi18n.c 5294 2006-03-15 21:09:32Z mike $"
  */
index 5a66a3d4a81f4f9c91219c3da9ee6f4a3da6d1fa..b2efe3b063a9525e53674f6839f1bf6cd0eba90e 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: testppd.c 4939 2006-01-17 18:54:33Z mike $"
+ * "$Id: testppd.c 5261 2006-03-09 20:47:49Z mike $"
  *
  *   PPD test program for the Common UNIX Printing System (CUPS).
  *
 #endif /* WIN32 */
 
 
+/*
+ * Test data...
+ */
+
+static const char      *default_code =
+                       "[{\n"
+                       "%%BeginFeature: *PageRegion Letter\n"
+                       "PageRegion=Letter\n"
+                       "%%EndFeature\n"
+                       "} stopped cleartomark\n"
+                       "[{\n"
+                       "%%BeginFeature: *InputSlot Tray\n"
+                       "InputSlot=Tray\n"
+                       "%%EndFeature\n"
+                       "} stopped cleartomark\n";
+
+
 /*
  * 'main()' - Main entry.
  */
@@ -55,6 +72,8 @@ main(int  argc,                               /* I - Number of command-line arguments */
 {
   ppd_file_t   *ppd;                   /* PPD file loaded from disk */
   int          status;                 /* Status of tests (0 = success, 1 = fail) */
+  int          conflicts;              /* Number of conflicts */
+  char         *s;                     /* String */
 
 
   status = 0;
@@ -75,6 +94,33 @@ main(int  argc,                              /* I - Number of command-line arguments */
     printf("FAIL (%s on line %d)\n", ppdErrorString(err), line);
   }
 
+  fputs("ppdMarkDefaults: ", stdout);
+  ppdMarkDefaults(ppd);
+
+  if ((conflicts = ppdConflicts(ppd)) == 0)
+    puts("PASS");
+  else
+  {
+    status ++;
+    printf("FAIL (%d conflicts)\n", conflicts);
+  }
+
+  fputs("ppdEmitString: ", stdout);
+  if ((s = ppdEmitString(ppd, PPD_ORDER_ANY, 0.0)) != NULL &&
+      !strcmp(s, default_code))
+    puts("PASS");
+  else
+  {
+    printf("FAIL (%d bytes instead of %d)\n", s ? (int)strlen(s) : 0,
+           (int)strlen(default_code));
+
+    if (s)
+      puts(s);
+  }
+
+  if (s)
+    free(s);
+
   ppdClose(ppd);
 
   return (status);
@@ -82,5 +128,5 @@ main(int  argc,                              /* I - Number of command-line arguments */
 
 
 /*
- * End of "$Id: testppd.c 4939 2006-01-17 18:54:33Z mike $".
+ * End of "$Id: testppd.c 5261 2006-03-09 20:47:49Z mike $".
  */
index 989e28b3ea0b8c990b3013c8aeae334740b44fb8..04f4f8bddffc3e082ce3bcb65ac439aa580bd99b 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: transcode.c 4967 2006-01-24 03:42:15Z mike $"
+ * "$Id: transcode.c 5300 2006-03-17 19:50:14Z mike $"
  *
  *   Transcoding support for the Common UNIX Printing System (CUPS).
  *
  *
  * Contents:
  *
- *   cupsCharmapGet()    - Get a character set map.
- *   cupsCharmapFree()   - Free a character set map.
- *   cupsCharmapFlush()  - Flush all character set maps out of cache.
  *   _cupsCharmapFlush() - Flush all character set maps out of cache.
- *   cupsUTF8ToCharset() - Convert UTF-8 to legacy character set.
+ *   _cupsCharmapFree()  - Free a character set map.
+ *   _cupsCharmapGet()   - Get a character set map.
  *   cupsCharsetToUTF8() - Convert legacy character set to UTF-8.
- *   cupsUTF8ToUTF16()   - Convert UTF-8 to UTF-16.
- *   cupsUTF16ToUTF8()   - Convert UTF-16 to UTF-8.
+ *   cupsUTF8ToCharset() - Convert UTF-8 to legacy character set.
  *   cupsUTF8ToUTF32()   - Convert UTF-8 to UTF-32.
  *   cupsUTF32ToUTF8()   - Convert UTF-32 to UTF-8.
- *   cupsUTF16ToUTF32()  - Convert UTF-16 to UTF-32.
- *   cupsUTF32ToUTF16()  - Convert UTF-32 to UTF-16.
- *   get_charmap_count() - Count lines in a charmap file.
- *   get_sbcs_charmap()  - Get SBCS Charmap.
- *   get_vbcs_charmap()  - Get DBCS/VBCS Charmap.
+ *   compare_wide()      - Compare key for wide (VBCS) match.
+ *   conv_sbcs_to_utf8() - Convert legacy SBCS to UTF-8.
  *   conv_utf8_to_sbcs() - Convert UTF-8 to legacy SBCS.
  *   conv_utf8_to_vbcs() - Convert UTF-8 to legacy DBCS/VBCS.
- *   conv_sbcs_to_utf8() - Convert legacy SBCS to UTF-8.
  *   conv_vbcs_to_utf8() - Convert legacy DBCS/VBCS to UTF-8.
- *   compare_wide()      - Compare key for wide (VBCS) match.
+ *   free_sbcs_charmap() - Free memory used by a single byte character set.
+ *   free_vbcs_charmap() - Free memory used by a variable byte character set.
+ *   get_charmap_count() - Count lines in a charmap file.
+ *   get_sbcs_charmap()  - Get SBCS Charmap.
+ *   get_vbcs_charmap()  - Get DBCS/VBCS Charmap.
  */
 
 /*
  */
 
 #include "globals.h"
+#include "debug.h"
 #include <stdlib.h>
 #include <errno.h>
 #include <time.h>
 
 
 /*
- * Prototypes...
+ * Local functions...
  */
 
-static int get_charmap_count(const char *filename);
-static _cups_cmap_t *get_sbcs_charmap(const cups_encoding_t encoding,
-                                    const char *filename);
-static _cups_vmap_t *get_vbcs_charmap(const cups_encoding_t encoding,
-                                    const char *filename);
-
-static int conv_utf8_to_sbcs(char *dest,
-                            const cups_utf8_t *src,
-                            const int maxout,
-                            const cups_encoding_t encoding);
-static int conv_utf8_to_vbcs(char *dest,
-                            const cups_utf8_t *src,
-                            const int maxout,
-                            const cups_encoding_t encoding);
-
-static int conv_sbcs_to_utf8(cups_utf8_t *dest,
-                            const char *src,
-                            const int maxout,
-                            const cups_encoding_t encoding);
-static int conv_vbcs_to_utf8(cups_utf8_t *dest,
-                            const char *src,
-                            const int maxout,
-                            const cups_encoding_t encoding);
-
-static int compare_wide(const void *k1, const void *k2);
+static int             compare_wide(const void *k1, const void *k2);
+static int             conv_sbcs_to_utf8(cups_utf8_t *dest,
+                                         const cups_sbcs_t *src,
+                                         int maxout,
+                                         const cups_encoding_t encoding);
+static int             conv_utf8_to_sbcs(cups_sbcs_t *dest,
+                                         const cups_utf8_t *src,
+                                         int maxout,
+                                         const cups_encoding_t encoding);
+static int             conv_utf8_to_vbcs(cups_sbcs_t *dest,
+                                         const cups_utf8_t *src,
+                                         int maxout,
+                                         const cups_encoding_t encoding);
+static int             conv_vbcs_to_utf8(cups_utf8_t *dest,
+                                         const cups_sbcs_t *src,
+                                         int maxout,
+                                         const cups_encoding_t encoding);
+static void            free_sbcs_charmap(_cups_cmap_t *sbcs);
+static void            free_vbcs_charmap(_cups_vmap_t *vbcs);
+static int             get_charmap_count(cups_file_t *fp);
+static _cups_cmap_t    *get_sbcs_charmap(const cups_encoding_t encoding,
+                                         const char *filename);
+static _cups_vmap_t    *get_vbcs_charmap(const cups_encoding_t encoding,
+                                         const char *filename);
+
 
 /*
- * 'cupsCharmapGet()' - Get a character set map.
- *
- * This code handles single-byte (SBCS), double-byte (DBCS), and
- * variable-byte (VBCS) character sets _without_ charset escapes...
- * This code does not handle multiple-byte character sets (MBCS)
- * (such as ISO-2022-JP) with charset switching via escapes...
+ * '_cupsCharmapFlush()' - Flush all character set maps out of cache.
  */
 
-void *                                 /* O - Charset map pointer */
-cupsCharmapGet(
-    const cups_encoding_t encoding)    /* I - Encoding */
+void
+_cupsCharmapFlush(_cups_globals_t *cg) /* I - Global data */
 {
-  char          mapname[80];           /* Name of charset map */
-  char         filename[1024];         /* Filename for charset map file */
-  _cups_globals_t *cg = _cupsGlobals();        /* Global data */
+  _cups_cmap_t *cmap,                  /* Legacy SBCS / Unicode Charset Map */
+               *cnext;                 /* Next Legacy SBCS Charset Map */
+  _cups_vmap_t *vmap,                  /* Legacy VBCS / Unicode Charset Map */
+               *vnext;                 /* Next Legacy VBCS Charset Map */
 
 
  /*
-  * Check for valid arguments...
+  * Loop through SBCS charset map cache, free all memory...
   */
 
-  if ((encoding < 0) || (encoding >= CUPS_ENCODING_VBCS_END))
-    return (NULL);
+  for (cmap = cg->cmap_cache; cmap; cmap = cnext)
+  {
+    cnext = cmap->next;
 
- /*
-  * Get the data directory and charset map name...
-  */
+    free_sbcs_charmap(cmap);
+  }
 
-  snprintf(mapname, sizeof(mapname), "%s.txt", _cupsEncodingName(encoding));
-  snprintf(filename, sizeof(filename), "%s/charmaps/%s",
-          cg->cups_datadir, mapname);
+  cg->cmap_cache = NULL;
 
  /*
-  * Read charset map input file into cache...
+  * Loop through DBCS/VBCS charset map cache, free all memory...
   */
 
-  if (encoding < CUPS_ENCODING_SBCS_END)
-    return (get_sbcs_charmap(encoding, filename));
-  else if (encoding < CUPS_ENCODING_VBCS_END)
-    return (get_vbcs_charmap(encoding, filename));
-  else
-    return (NULL);
+  for (vmap = cg->vmap_cache; vmap; vmap = vnext)
+  {
+    vnext = vmap->next;
+
+    free_vbcs_charmap(vmap);
+
+    free(vmap);
+  }
+
+  cg->vmap_cache = NULL;
 }
 
+
 /*
- * 'cupsCharmapFree()' - Free a character set map.
+ * '_cupsCharmapFree()' - Free a character set map.
  *
- * This does not actually free; use 'cupsCharmapFlush()' for that.
+ * This does not actually free; use '_cupsCharmapFlush()' for that.
  */
+
 void
-cupsCharmapFree(const cups_encoding_t encoding)
-                                       /* I - Encoding */
+_cupsCharmapFree(
+    const cups_encoding_t encoding)    /* I - Encoding */
 {
-  _cups_cmap_t   *cmap;          /* Legacy SBCS / Unicode Charset Map */
-  _cups_vmap_t   *vmap;          /* Legacy VBCS / Unicode Charset Map */
-  _cups_globals_t *cg = _cupsGlobals();
-                               /* Pointer to library globals */
+  _cups_cmap_t *cmap;                  /* Legacy SBCS / Unicode Charset Map */
+  _cups_vmap_t *vmap;                  /* Legacy VBCS / Unicode Charset Map */
+  _cups_globals_t *cg = _cupsGlobals(); /* Pointer to library globals */
+
 
  /*
   * See if we already have this SBCS charset map loaded...
   */
-  for (cmap = cg->cmap_cache; cmap != NULL; cmap = cmap->next)
+
+  for (cmap = cg->cmap_cache; cmap; cmap = cmap->next)
   {
     if (cmap->encoding == encoding)
     {
       if (cmap->used > 0)
        cmap->used --;
+
       return;
     }
   }
@@ -160,7 +159,8 @@ cupsCharmapFree(const cups_encoding_t encoding)
  /*
   * See if we already have this DBCS/VBCS charset map loaded...
   */
-  for (vmap = cg->vmap_cache; vmap != NULL; vmap = vmap->next)
+
+  for (vmap = cg->vmap_cache; vmap; vmap = vmap->next)
   {
     if (vmap->encoding == encoding)
     {
@@ -169,96 +169,91 @@ cupsCharmapFree(const cups_encoding_t encoding)
       return;
     }
   }
-  return;
-}
-
-
-/*
- * 'cupsCharmapFlush()' - Flush all character set maps out of cache.
- */
-void
-cupsCharmapFlush(void)
-{
-  _cupsCharmapFlush(_cupsGlobals());
 }
 
 
 /*
- * '_cupsCharmapFlush()' - Flush all character set maps out of cache.
+ * '_cupsCharmapGet()' - Get a character set map.
+ *
+ * This code handles single-byte (SBCS), double-byte (DBCS), and
+ * variable-byte (VBCS) character sets _without_ charset escapes...
+ * This code does not handle multiple-byte character sets (MBCS)
+ * (such as ISO-2022-JP) with charset switching via escapes...
  */
 
-void
-_cupsCharmapFlush(_cups_globals_t *cg) /* I - Global data */
+void *                                 /* O - Charset map pointer */
+_cupsCharmapGet(
+    const cups_encoding_t encoding)    /* I - Encoding */
 {
-  int          i;                      /* Looping variable */
-  _cups_cmap_t *cmap;                  /* Legacy SBCS / Unicode Charset Map */
-  _cups_vmap_t *vmap;                  /* Legacy VBCS / Unicode Charset Map */
-  _cups_cmap_t *cnext;                 /* Next Legacy SBCS Charset Map */
-  _cups_vmap_t *vnext;                 /* Next Legacy VBCS Charset Map */
-  cups_ucs2_t  *crow;                  /* Pointer to UCS-2 row in 'char2uni' */
-  cups_sbcs_t  *srow;                  /* Pointer to SBCS row in 'uni2char' */
-  cups_vbcs_t  *vrow;                  /* Pointer to VBCS row in 'uni2char' */
+  char         filename[1024];         /* Filename for charset map file */
+  _cups_globals_t *cg = _cupsGlobals(); /* Global data */
+
 
+  DEBUG_printf(("_cupsCharmapGet(encoding=%d)\n", encoding));
 
  /*
-  * Loop through SBCS charset map cache, free all memory...
+  * Check for valid arguments...
   */
-  for (cmap = cg->cmap_cache; cmap != NULL; cmap = cnext)
+
+  if (encoding < 0 || encoding >= CUPS_ENCODING_VBCS_END)
   {
-    for (i = 0; i < 256; i ++)
-    {
-      if ((srow = cmap->uni2char[i]) != NULL)
-       free(srow);
-    }
-    cnext = cmap->next;
-    free(cmap);
+    DEBUG_puts("    Bad encoding, returning NULL!");
+    return (NULL);
   }
-  cg->cmap_cache = NULL;
 
  /*
-  * Loop through DBCS/VBCS charset map cache, free all memory...
+  * Get the data directory and charset map name...
   */
-  for (vmap = cg->vmap_cache; vmap != NULL; vmap = vnext)
-  {
-    for (i = 0; i < 256; i ++)
-    {
-      if ((crow = vmap->char2uni[i]) != NULL)
-       free(crow);
-    }
-    for (i = 0; i < 256; i ++)
-    {
-      if ((vrow = vmap->uni2char[i]) != NULL)
-       free(vrow);
-    }
-    if (vmap->wide2uni)
-      free(vmap->wide2uni);
-    vnext = vmap->next;
-    free(vmap);
-  }
-  cg->vmap_cache = NULL;
-  return;
+
+  snprintf(filename, sizeof(filename), "%s/charmaps/%s.txt",
+          cg->cups_datadir, _cupsEncodingName(encoding));
+
+  DEBUG_printf(("    filename=\"%s\"\n", filename));
+
+ /*
+  * Read charset map input file into cache...
+  */
+
+  if (encoding < CUPS_ENCODING_SBCS_END)
+    return (get_sbcs_charmap(encoding, filename));
+  else if (encoding < CUPS_ENCODING_VBCS_END)
+    return (get_vbcs_charmap(encoding, filename));
+  else
+    return (NULL);
 }
 
+
 /*
- * 'cupsUTF8ToCharset()' - Convert UTF-8 to legacy character set.
+ * 'cupsCharsetToUTF8()' - Convert legacy character set to UTF-8.
  *
  * This code handles single-byte (SBCS), double-byte (DBCS), and
  * variable-byte (VBCS) character sets _without_ charset escapes...
  * This code does not handle multiple-byte character sets (MBCS)
  * (such as ISO-2022-JP) with charset switching via escapes...
  */
-int                                     /* O - Count or -1 on error */
-cupsUTF8ToCharset(char *dest,           /* O - Target string */
-    const cups_utf8_t *src,             /* I - Source string */
-    const int maxout,                   /* I - Max output */
-    const cups_encoding_t encoding)     /* I - Encoding */
+
+int                                    /* O - Count or -1 on error */
+cupsCharsetToUTF8(
+    cups_utf8_t *dest,                 /* O - Target string */
+    const char *src,                   /* I - Source string */
+    const int maxout,                  /* I - Max output */
+    const cups_encoding_t encoding)    /* I - Encoding */
 {
  /*
   * Check for valid arguments...
   */
 
+  DEBUG_printf(("cupsCharsetToUTF8(dest=%p, src=\"%s\", maxout=%d, encoding=%d)\n",
+               dest, src, maxout, encoding));
+
+  if (dest)
+    *dest = '\0';
+
   if (!dest || !src || maxout < 1 || maxout > CUPS_MAX_USTRING)
+  {
+    DEBUG_puts("    Bad arguments, returning -1");
     return (-1);
+  }
 
  /*
   * Handle identity conversions...
@@ -267,41 +262,53 @@ cupsUTF8ToCharset(char *dest,           /* O - Target string */
   if (encoding == CUPS_UTF8 ||
       encoding < 0 || encoding >= CUPS_ENCODING_VBCS_END)
   {
-    strlcpy(dest, (char *)src, maxout);
-    return (strlen(dest));
+    strlcpy((char *)dest, src, maxout);
+    return (strlen((char *)dest));
   }
 
  /*
-  * Convert input UTF-8 to legacy charset...
+  * Convert input legacy charset to UTF-8...
   */
+
   if (encoding < CUPS_ENCODING_SBCS_END)
-    return (conv_utf8_to_sbcs(dest, src, maxout, encoding));
+    return (conv_sbcs_to_utf8(dest, (cups_sbcs_t *)src, maxout, encoding));
   else if (encoding < CUPS_ENCODING_VBCS_END)
-    return (conv_utf8_to_vbcs(dest, src, maxout, encoding));
+    return (conv_vbcs_to_utf8(dest, (cups_sbcs_t *)src, maxout, encoding));
   else
+  {
+    puts("    Bad encoding, returning -1");
     return (-1);
+  }
 }
 
+
 /*
- * 'cupsCharsetToUTF8()' - Convert legacy character set to UTF-8.
+ * 'cupsUTF8ToCharset()' - Convert UTF-8 to legacy character set.
  *
  * This code handles single-byte (SBCS), double-byte (DBCS), and
  * variable-byte (VBCS) character sets _without_ charset escapes...
  * This code does not handle multiple-byte character sets (MBCS)
  * (such as ISO-2022-JP) with charset switching via escapes...
  */
-int                                     /* O - Count or -1 on error */
-cupsCharsetToUTF8(cups_utf8_t *dest,    /* O - Target string */
-    const char *src,                    /* I - Source string */
-    const int maxout,                   /* I - Max output */
-    const cups_encoding_t encoding)     /* I - Encoding */
+
+int                                    /* O - Count or -1 on error */
+cupsUTF8ToCharset(
+    char                 *dest,        /* O - Target string */
+    const cups_utf8_t    *src,         /* I - Source string */
+    const int            maxout,       /* I - Max output */
+    const cups_encoding_t encoding)    /* I - Encoding */
 {
  /*
   * Check for valid arguments...
   */
 
   if (!dest || !src || maxout < 1 || maxout > CUPS_MAX_USTRING)
+  {
+    if (dest)
+      *dest = '\0';
+
     return (-1);
+  }
 
  /*
   * Handle identity conversions...
@@ -310,96 +317,22 @@ cupsCharsetToUTF8(cups_utf8_t *dest,    /* O - Target string */
   if (encoding == CUPS_UTF8 ||
       encoding < 0 || encoding >= CUPS_ENCODING_VBCS_END)
   {
-    strlcpy((char *)dest, src, maxout);
-    return (strlen((char *)dest));
+    strlcpy(dest, (char *)src, maxout);
+    return (strlen(dest));
   }
 
  /*
-  * Convert input legacy charset to UTF-8...
+  * Convert input UTF-8 to legacy charset...
   */
+
   if (encoding < CUPS_ENCODING_SBCS_END)
-    return (conv_sbcs_to_utf8(dest, src, maxout, encoding));
+    return (conv_utf8_to_sbcs((cups_sbcs_t *)dest, src, maxout, encoding));
   else if (encoding < CUPS_ENCODING_VBCS_END)
-    return (conv_vbcs_to_utf8(dest, src, maxout, encoding));
+    return (conv_utf8_to_vbcs((cups_sbcs_t *)dest, src, maxout, encoding));
   else
     return (-1);
 }
 
-/*
- * 'cupsUTF8ToUTF16()' - Convert UTF-8 to UTF-16.
- *
- * This code does not support Unicode beyond 16-bits (Plane 0)...
- */
-int                                     /* O - Count or -1 on error */
-cupsUTF8ToUTF16(cups_utf16_t *dest,     /* O - Target string */
-    const cups_utf8_t *src,             /* I - Source string */
-    const int maxout)                   /* I - Max output */
-{
-  int           worklen;        /* Internal UCS-4 string length */
-  cups_utf32_t  work[CUPS_MAX_USTRING];
-                               /* Internal UCS-4 string */
-
- /*
-  * Check for valid arguments and clear output...
-  */
-  if ((dest == NULL)
-  || (src == NULL)
-  || (maxout < 1)
-  || (maxout > CUPS_MAX_USTRING))
-    return (-1);
-  *dest = 0;
-
- /*
-  * Convert input UTF-8 to internal UCS-4 (and insert BOM)...
-  */
-  worklen = cupsUTF8ToUTF32(work, src, CUPS_MAX_USTRING);
-  if (worklen < 0)
-    return (-1);
-
- /*
-  * Convert internal UCS-4 to output UTF-16...
-  */
-  worklen = cupsUTF32ToUTF16(dest, work, maxout);
-  return (worklen);
-}
-
-/*
- * 'cupsUTF16ToUTF8()' - Convert UTF-16 to UTF-8.
- *
- * This code does not support Unicode beyond 16-bits (Plane 0)...
- */
-int                                     /* O - Count or -1 on error */
-cupsUTF16ToUTF8(cups_utf8_t *dest,      /* O - Target string */
-    const cups_utf16_t *src,            /* I - Source string */
-    const int maxout)                   /* I - Max output */
-{
-  int           worklen;        /* Internal UCS-4 string length */
-  cups_utf32_t  work[CUPS_MAX_USTRING];
-                               /* Internal UCS-4 string */
-
- /*
-  * Check for valid arguments and clear output...
-  */
-  if ((dest == NULL)
-  || (src == NULL)
-  || (maxout < 1)
-  || (maxout > CUPS_MAX_USTRING))
-    return (-1);
-  *dest = 0;
-
- /*
-  * Convert input UTF-16 to internal UCS-4 (and byte-swap)...
-  */
-  worklen = cupsUTF16ToUTF32(work, src, CUPS_MAX_USTRING);
-  if (worklen < 0)
-    return (-1);
-
- /*
-  * Convert internal UCS-4 to output UTF-8 (and delete BOM)...
-  */
-  worklen = cupsUTF32ToUTF8(dest, work, maxout);
-  return (worklen);
-}
 
 /*
  * 'cupsUTF8ToUTF32()' - Convert UTF-8 to UTF-32.
@@ -408,154 +341,165 @@ cupsUTF16ToUTF8(cups_utf8_t *dest,      /* O - Target string */
  *
  *   UTF-32 char     UTF-8 char(s)
  *   --------------------------------------------------
- *        0 to 127 = 0xxxxxxx (US-ASCII)
+ *       0 to 127 = 0xxxxxxx (US-ASCII)
  *     128 to 2047 = 110xxxxx 10yyyyyy
  *   2048 to 65535 = 1110xxxx 10yyyyyy 10zzzzzz
- *         > 65535 = 11110xxx 10yyyyyy 10zzzzzz 10xxxxxx
+ *        > 65535 = 11110xxx 10yyyyyy 10zzzzzz 10xxxxxx
  *
  * UTF-32 prohibits chars beyond Plane 16 (> 0x10ffff) in UCS-4,
  * which would convert to five- or six-octet UTF-8 sequences...
- *
- * This code does not support Unicode beyond 16-bits (Plane 0)...
  */
-int                                     /* O - Count or -1 on error */
-cupsUTF8ToUTF32(cups_utf32_t *dest,     /* O - Target string */
-    const cups_utf8_t *src,             /* I - Source string */
-    const int maxout)                   /* I - Max output */
+
+int                                    /* O - Count or -1 on error */
+cupsUTF8ToUTF32(
+    cups_utf32_t      *dest,           /* O - Target string */
+    const cups_utf8_t *src,            /* I - Source string */
+    const int         maxout)          /* I - Max output */
 {
-  cups_utf8_t   *first = (cups_utf8_t *) src;
-  size_t        srclen;         /* Source string length */
-  int           i;              /* Looping variable */
-  cups_utf32_t  ch;             /* Character value */
-  cups_utf32_t  next;           /* Next character value */
-  cups_utf32_t  ch32;           /* UTF-32 character value */
+  size_t       srclen;                 /* Source string length */
+  int          i;                      /* Looping variable */
+  cups_utf8_t  ch;                     /* Character value */
+  cups_utf8_t  next;                   /* Next character value */
+  cups_utf32_t ch32;                   /* UTF-32 character value */
+
 
  /*
   * Check for valid arguments and clear output...
   */
-  if ((dest == NULL)
-  || (src == NULL)
-  || (maxout < 1)
-  || (maxout > CUPS_MAX_USTRING))
+
+  if (dest)
+    *dest = 0;
+
+  if (!dest || !src || maxout < 1 || maxout > CUPS_MAX_USTRING)
     return (-1);
-  *dest = 0;
 
  /*
   * Convert input UTF-8 to output UTF-32 (and insert BOM)...
   */
-  *dest = 0xfeff;
-  dest ++;
-  srclen = strlen((char *) src);
-  for (i = 1; i < (maxout - 1); src ++, dest ++)
+
+  *dest++ = 0xfeff;
+  srclen  = strlen((char *)src);
+
+  for (i = maxout - 1; *src && i > 0; i --)
   {
-    ch = (cups_utf32_t) *src;
-    ch &= 0xff;
-    if (ch == 0)
-      break;
-    i ++;
+    ch = *src++;
 
    /*
     * Convert UTF-8 character(s) to UTF-32 character...
     */
-    if ((ch & 0x7f) == ch)
+
+    if (!(ch & 0x80))
     {
      /*
       * One-octet UTF-8 <= 127 (US-ASCII)...
       */
-      *dest = ch;
+
+      *dest++ = ch;
     }
     else if ((ch & 0xe0) == 0xc0)
     {
      /*
       * Two-octet UTF-8 <= 2047 (Latin-x)...
       */
-      src ++;
-      next = (cups_utf32_t) *src;
-      next &= 0xff;
-      if (next == 0)
+
+      next = *src++;
+      if (!next)
        return (-1);
+
       ch32 = ((ch & 0x1f) << 6) | (next & 0x3f);
 
      /*
       * Check for non-shortest form (invalid UTF-8)...
       */
-      if (ch32 <= 127)
+
+      if (ch32 < 0x80)
        return (-1);
-      *dest = ch32;
+
+      *dest++ = ch32;
     }
     else if ((ch & 0xf0) == 0xe0)
     {
      /*
       * Three-octet UTF-8 <= 65535 (Plane 0 - BMP)...
       */
-      src ++;
-      next = (cups_utf32_t) *src;
-      next &= 0xff;
-      if (next == 0)
+
+      next = *src++;
+      if (!next)
        return (-1);
-      ch32 = ((ch & 0x1f) << 6) | (next & 0x3f);
-      src ++;
-      next = (cups_utf32_t) *src;
-      next &= 0xff;
-      if (next == 0)
+
+      ch32 = ((ch & 0x0f) << 6) | (next & 0x3f);
+
+      next = *src++;
+      if (!next)
        return (-1);
-      ch32 = ((ch32 << 6) | (next & 0x3f));
+
+      ch32 = (ch32 << 6) | (next & 0x3f);
 
      /*
       * Check for non-shortest form (invalid UTF-8)...
       */
-      if (ch32 <= 2047)
+
+      if (ch32 < 0x800)
        return (-1);
-      *dest = ch32;
+
+      *dest++ = ch32;
     }
     else if ((ch & 0xf8) == 0xf0)
     {
      /*
-      * Four-octet UTF-8 to Replacement Character...
+      * Four-octet UTF-8...
       */
-      if (((src - first) + 3) >= srclen)
+
+      next = *src++;
+      if (!next)
        return (-1);
-      src += 3;
-      *dest = 0xfffd;
-    }
-    else if ((ch & 0xfc) == 0xf8)
-    {
-     /*
-      * Five-octet UTF-8 (invalid strict UTF-32)...
-      */
-      return (-1);
-    }
-    else if ((ch & 0xfe) == 0xfc)
-    {
+
+      ch32 = ((ch & 0x07) << 6) | (next & 0x3f);
+
+      next = *src++;
+      if (!next)
+       return (-1);
+
+      ch32 = (ch32 << 6) | (next & 0x3f);
+
+      next = *src++;
+      if (!next)
+       return (-1);
+
+      ch32 = (ch32 << 6) | (next & 0x3f);
+
      /*
-      * Six-octet UTF-8 (invalid strict UTF-32)...
+      * Check for non-shortest form (invalid UTF-8)...
       */
-      return (-1);
+
+      if (ch32 < 0x10000)
+       return (-1);
+
+      *dest++ = ch32;
     }
     else
     {
      /*
-      * More than six-octet (invalid UTF-8 sequence)...
+      * More than 4-octet (invalid UTF-8 sequence)...
       */
+
       return (-1);
     }
 
    /*
     * Check for UTF-16 surrogate (illegal UTF-8)...
     */
-    if ((*dest >= 0xd800) && (*dest <= 0xdfff))
-      return (-1);
 
-   /*
-    * Check for beyond Plane 16 (invalid UTF-8)...
-    */
-    if (*dest > 0x10ffff)
+    if (*dest >= 0xd800 && *dest <= 0xdfff)
       return (-1);
   }
+
   *dest = 0;
+
   return (i);
 }
 
+
 /*
  * 'cupsUTF32ToUTF8()' - Convert UTF-32 to UTF-8.
  *
@@ -563,1118 +507,987 @@ cupsUTF8ToUTF32(cups_utf32_t *dest,     /* O - Target string */
  *
  *   UTF-32 char     UTF-8 char(s)
  *   --------------------------------------------------
- *        0 to 127 = 0xxxxxxx (US-ASCII)
+ *       0 to 127 = 0xxxxxxx (US-ASCII)
  *     128 to 2047 = 110xxxxx 10yyyyyy
  *   2048 to 65535 = 1110xxxx 10yyyyyy 10zzzzzz
- *         > 65535 = 11110xxx 10yyyyyy 10zzzzzz 10xxxxxx
+ *        > 65535 = 11110xxx 10yyyyyy 10zzzzzz 10xxxxxx
  *
  * UTF-32 prohibits chars beyond Plane 16 (> 0x10ffff) in UCS-4,
  * which would convert to five- or six-octet UTF-8 sequences...
- *
- * This code does not support Unicode beyond 16-bits (Plane 0)...
  */
-int                                     /* O - Count or -1 on error */
-cupsUTF32ToUTF8(cups_utf8_t *dest,      /* O - Target string */
-    const cups_utf32_t *src,            /* I - Source string */
-    const int maxout)                   /* I - Max output */
+
+int                                    /* O - Count or -1 on error */
+cupsUTF32ToUTF8(
+    cups_utf8_t        *dest,          /* O - Target string */
+    const cups_utf32_t *src,           /* I - Source string */
+    const int          maxout)         /* I - Max output */
 {
-  cups_utf32_t  *first = (cups_utf32_t *) src;
-                               /* First source char */
-  cups_utf8_t   *start = dest;  /* Start of destination string */
-  int           i;              /* Looping variable */
-  int           swap = 0;       /* Byte-swap input to output */
-  cups_utf32_t  ch;             /* Character value */
+  cups_utf8_t  *start;                 /* Start of destination string */
+  int          i;                      /* Looping variable */
+  int          swap;                   /* Byte-swap input to output */
+  cups_utf32_t ch;                     /* Character value */
+
 
  /*
   * Check for valid arguments and clear output...
   */
-  if ((dest == NULL)
-  || (src == NULL)
-  || (maxout < 1))
+
+  if (dest)
+    *dest = '\0';
+
+  if (!dest || !src || maxout < 1)
     return (-1);
-  *dest = '\0';
 
  /*
   * Check for leading BOM in UTF-32 and inverted BOM...
   */
-  if (*src == 0xfffe0000)
-    swap = 1;
+
+  start = dest;
+  swap  = *src == 0xfffe0000;
+
+  if (*src == 0xfffe0000 || *src == 0xfeff)
+    src ++;
 
  /*
   * Convert input UTF-32 to output UTF-8...
   */
-  for (i = 0; i < (maxout - 1); src ++)
+
+  for (i = maxout - 1; *src && i > 0;)
   {
-    ch = *src;
-    if (ch == 0)
-      break;
+    ch = *src++;
 
    /*
     * Byte swap input UTF-32, if necessary...
+    * (only byte-swapping 24 of 32 bits)
     */
+
     if (swap)
       ch = ((ch >> 24) | ((ch >> 8) & 0xff00) | ((ch << 8) & 0xff0000));
 
    /*
-    * Check for leading BOM (and delete from output)...
+    * Check for beyond Plane 16 (invalid UTF-32)...
     */
-    if ((src == first) && (ch == 0xfeff))
-      continue;
 
-   /*
-    * Check for beyond Plane 16 (invalid UTF-32)...
-    */
     if (ch > 0x10ffff)
       return (-1);
 
-   /*
-    * Convert beyond Plane 0 (BMP) to Replacement Character...
-    */
-    if (ch > 0xffff)
-      ch = 0xfffd;
-
    /*
     * Convert UTF-32 character to UTF-8 character(s)...
     */
-    if (ch <= 0x7f)
+
+    if (ch < 0x80)
     {
      /*
       * One-octet UTF-8 <= 127 (US-ASCII)...
       */
-      *dest = (cups_utf8_t) ch;
-      dest ++;
-      i ++;
+
+      *dest++ = (cups_utf8_t)ch;
+      i --;
     }
-    else if (ch <= 0x7ff)
+    else if (ch < 0x800)
     {
      /*
       * Two-octet UTF-8 <= 2047 (Latin-x)...
       */
-      if (i > (maxout - 2))
-       break;
-      *dest = (cups_utf8_t) (0xc0 | ((ch >> 6) & 0x1f));
-      dest ++;
-      i ++;
-      *dest = (cups_utf8_t) (0x80 | (ch & 0x3f));
-      dest ++;
-      i ++;
+
+      if (i < 2)
+        return (-1);
+
+      *dest++ = (cups_utf8_t)(0xc0 | ((ch >> 6) & 0x1f));
+      *dest++ = (cups_utf8_t)(0x80 | (ch & 0x3f));
+      i -= 2;
     }
-    else
+    else if (ch < 0x10000)
     {
      /*
       * Three-octet UTF-8 <= 65535 (Plane 0 - BMP)...
       */
-      if (i > (maxout - 3))
-       break;
-      *dest = (cups_utf8_t) (0xe0 | ((ch >> 12) & 0x0f));
-      dest ++;
-      i ++;
-      *dest = (cups_utf8_t) (0x80 | ((ch >> 6) & 0x3f));
-      dest ++;
-      i ++;
-      *dest = (cups_utf8_t) (0x80 | (ch & 0x3f));
-      dest ++;
-      i ++;
+
+      if (i < 3)
+        return (-1);
+
+      *dest++ = (cups_utf8_t)(0xe0 | ((ch >> 12) & 0x0f));
+      *dest++ = (cups_utf8_t)(0x80 | ((ch >> 6) & 0x3f));
+      *dest++ = (cups_utf8_t)(0x80 | (ch & 0x3f));
+      i -= 3;
+    }
+    else
+    {
+     /*
+      * Four-octet UTF-8...
+      */
+
+      if (i < 4)
+        return (-1);
+
+      *dest++ = (cups_utf8_t)(0xf0 | ((ch >> 18) & 0x07));
+      *dest++ = (cups_utf8_t)(0x80 | ((ch >> 12) & 0x3f));
+      *dest++ = (cups_utf8_t)(0x80 | ((ch >> 6) & 0x3f));
+      *dest++ = (cups_utf8_t)(0x80 | (ch & 0x3f));
+      i -= 4;
     }
   }
+
   *dest = '\0';
-  i = (int) (dest - start);
-  return (i);
+
+  return ((int)(dest - start));
 }
 
+
 /*
- * 'cupsUTF16ToUTF32()' - Convert UTF-16 to UTF-32.
- *
- * This code does not support Unicode beyond 16-bits (Plane 0)...
+ * 'compare_wide()' - Compare key for wide (VBCS) match.
+ */
+
+static int
+compare_wide(const void *k1,           /* I - Key char */
+             const void *k2)           /* I - Map char */
+{
+  cups_vbcs_t  key;                    /* Legacy key character */
+  cups_vbcs_t  map;                    /* Legacy map character */
+
+
+  key = *((cups_vbcs_t *)k1);
+  map = ((_cups_wide2uni_t *)k2)->widechar;
+
+  return ((int)(key - map));
+}
+
+
+/*
+ * 'conv_sbcs_to_utf8()' - Convert legacy SBCS to UTF-8.
  */
-int                                     /* O - Count or -1 on error */
-cupsUTF16ToUTF32(cups_utf32_t *dest,    /* O - Target string */
-    const cups_utf16_t *src,            /* I - Source string */
-    const int maxout)                   /* I - Max output */
+
+static int                             /* O - Count or -1 on error */
+conv_sbcs_to_utf8(
+    cups_utf8_t           *dest,       /* O - Target string */
+    const cups_sbcs_t     *src,                /* I - Source string */
+    int                   maxout,      /* I - Max output */
+    const cups_encoding_t encoding)    /* I - Encoding */
 {
-  int           i;              /* Looping variable */
-  int           swap = 0;       /* Byte-swap input to output */
-  int           surrogate = 0;  /* Expecting low-half surrogate */
-  cups_utf32_t  ch;             /* Character value */
+  _cups_cmap_t *cmap;                  /* Legacy SBCS / Unicode Charset Map */
+  cups_ucs2_t  *crow;                  /* Pointer to UCS-2 row in 'char2uni' */
+  cups_sbcs_t  legchar;                /* Legacy character value */
+  cups_utf32_t work[CUPS_MAX_USTRING], /* Internal UCS-4 string */
+               *workptr;               /* Pointer into string */
+
 
  /*
-  * Check for valid arguments and clear output...
+  * Find legacy charset map in cache...
   */
-  if ((dest == NULL)
-  || (src == NULL)
-  || (maxout < 1)
-  || (maxout > CUPS_MAX_USTRING))
+
+  if ((cmap = (_cups_cmap_t *)_cupsCharmapGet(encoding)) == NULL)
     return (-1);
-  *dest = 0;
 
  /*
-  * Check for leading BOM in UTF-16 and inverted BOM...
+  * Convert input legacy charset to internal UCS-4 (and insert BOM)...
   */
-  if (*src == 0xfffe)
-    swap = 1;
 
- /*
-  * Convert input UTF-16 to output UTF-32...
-  */
-  for (i = 0; i < (maxout - 1); src ++)
+  work[0] = 0xfeff;
+  for (workptr = work + 1; *src && workptr < (work + CUPS_MAX_USTRING - 1);)
   {
-    ch = (cups_utf32_t) (*src & 0xffff);
-    if (ch == 0)
-      break;
-    i ++;
+    legchar = *src++;
 
    /*
-    * Byte swap input UTF-16, if necessary...
+    * Convert ASCII verbatim (optimization)...
     */
-    if (swap)
-      ch = (cups_utf32_t) ((ch << 8) | (ch >> 8));
 
-   /*
-    * Discard expected UTF-16 low-half surrogate...
-    */
-    if ((ch >= 0xdc00) && (ch <= 0xdfff))
+    if (legchar < 0x80)
+      *workptr++ = (cups_utf32_t)legchar;
+    else
     {
-      if (surrogate == 0)
-       return (-1);
-      surrogate = 0;
-      continue;
-    }
+     /*
+      * Convert unknown character to Replacement Character...
+      */
 
-   /*
-    * Convert UTF-16 high-half surrogate to Replacement Character...
-    */
-    if ((ch >= 0xd800) && (ch <= 0xdbff))
-    {
-      if (surrogate == 1)
-       return (-1);
-      surrogate = 1;
-      ch = 0xfffd;
+      crow = cmap->char2uni + legchar;
+
+      if (!*crow)
+       *workptr++ = 0xfffd;
+      else
+       *workptr++ = (cups_utf32_t)*crow;
     }
-    *dest = ch;
-    dest ++;
   }
-  *dest = 0;
-  return (i);
+
+  *workptr = 0;
+
+ /*
+  * Convert internal UCS-4 to output UTF-8 (and delete BOM)...
+  */
+
+  _cupsCharmapFree(encoding);
+
+  return (cupsUTF32ToUTF8(dest, work, maxout));
 }
 
+
 /*
- * 'cupsUTF32ToUTF16()' - Convert UTF-32 to UTF-16.
- *
- * This code does not support Unicode beyond 16-bits (Plane 0)...
+ * 'conv_utf8_to_sbcs()' - Convert UTF-8 to legacy SBCS.
  */
-int                                     /* O - Count or -1 on error */
-cupsUTF32ToUTF16(cups_utf16_t *dest,    /* O - Target string */
-    const cups_utf32_t *src,            /* I - Source string */
-    const int maxout)                   /* I - Max output */
+
+static int                             /* O - Count or -1 on error */
+conv_utf8_to_sbcs(
+    cups_sbcs_t           *dest,       /* O - Target string */
+    const cups_utf8_t     *src,                /* I - Source string */
+    int                   maxout,      /* I - Max output */
+    const cups_encoding_t encoding)    /* I - Encoding */
 {
-  int           i;              /* Looping variable */
-  int           swap = 0;       /* Byte-swap input to output */
-  cups_utf32_t  ch;             /* Character value */
+  cups_sbcs_t  *start;                 /* Start of destination string */
+  _cups_cmap_t *cmap;                  /* Legacy SBCS / Unicode Charset Map */
+  cups_sbcs_t  *srow;                  /* Pointer to SBCS row in 'uni2char' */
+  cups_utf32_t unichar;                /* Character value */
+  cups_utf32_t work[CUPS_MAX_USTRING], /* Internal UCS-4 string */
+               *workptr;               /* Pointer into string */
+
 
  /*
-  * Check for valid arguments and clear output...
+  * Find legacy charset map in cache...
   */
-  if ((dest == NULL)
-  || (src == NULL)
-  || (maxout < 1)
-  || (maxout > CUPS_MAX_USTRING))
+
+  if ((cmap = (_cups_cmap_t *) _cupsCharmapGet(encoding)) == NULL)
     return (-1);
-  *dest = 0;
 
  /*
-  * Check for leading BOM in UTF-32 and inverted BOM...
+  * Convert input UTF-8 to internal UCS-4 (and insert BOM)...
   */
-  if (*src == 0xfffe0000)
-    swap = 1;
+
+  if (cupsUTF8ToUTF32(work, src, CUPS_MAX_USTRING) < 0)
+    return (-1);
 
  /*
-  * Convert input UTF-32 to output UTF-16 (w/out surrogate pairs)...
+  * Convert internal UCS-4 to SBCS legacy charset (and delete BOM)...
   */
-  for (i = 0; i < (maxout - 1); src ++, dest ++)
+
+  for (workptr = work + 1, start = dest; *workptr && maxout > 1; maxout --)
   {
-    ch = *src;
-    if (ch == 0)
+    unichar = *workptr++;
+    if (!unichar)
       break;
-    i ++;
-
-   /*
-    * Byte swap input UTF-32, if necessary...
-    */
-    if (swap)
-      ch = ((ch >> 24) | ((ch >> 8) & 0xff00) | ((ch << 8) & 0xff0000));
 
    /*
-    * Check for UTF-16 surrogate (illegal UTF-32)...
+    * Convert ASCII verbatim (optimization)...
     */
-    if ((ch >= 0xd800) && (ch <= 0xdfff))
-      return (-1);
 
-   /*
-    * Check for beyond Plane 16 (invalid UTF-32)...
-    */
-    if (ch > 0x10ffff)
-      return (-1);
+    if (unichar < 0x80)
+    {
+      *dest++ = (cups_sbcs_t)unichar;
+      continue;
+    }
 
    /*
-    * Convert beyond Plane 0 (BMP) to Replacement Character...
+    * Convert unknown character to visible replacement...
     */
-    if (ch > 0xffff)
-      ch = 0xfffd;
-    *dest = (cups_utf16_t) ch;
-  }
-  *dest = 0;
-  return (i);
-}
 
-/*
- * 'get_charmap_count()' - Count lines in a charmap file.
- */
-static int                              /* O - Count or -1 on error */
-get_charmap_count(const char *filename) /* I - Charmap Filename */
-{
-  int           i;              /* Looping variable */
-  cups_file_t   *fp;            /* Map input file pointer */
-  char          *s;             /* Line parsing pointer */
-  char          line[256];      /* Line from input map file */
-  cups_utf32_t  unichar;        /* Unicode character value */
+    srow = cmap->uni2char[(int)((unichar >> 8) & 0xff)];
 
- /*
-  * Open map input file...
-  */
-  if ((filename == NULL) || (*filename == '\0'))
-    return (-1);
-  fp = cupsFileOpen(filename, "r");
-  if (fp == NULL)
-    return (-1);
+    if (srow)
+      srow += (int)(unichar & 0xff);
 
- /*
-  * Count lines in map input file...
-  */
-  for (i = 0; i < CUPS_MAX_CHARMAP_LINES;)
-  {
-    s = cupsFileGets(fp, line, sizeof(line));
-    if (s == NULL)
-      break;
-    if ((*s == '#') || (*s == '\n') || (*s == '\0'))
-      continue;
-    while ((*s != 0) && (*s != ' ') && (*s != '\t'))
-       s ++;
-    while ((*s == ' ') || (*s == '\t'))
-       s ++;
-    if (strncmp (s, "0x", 2) == 0)
-      s += 2;
-    if ((sscanf(s, "%lx", &unichar) != 1)
-    || (unichar > 0xffff))
-    {
-      cupsFileClose(fp);
-      return (-1);
-    }
-    i ++;
+    if (!srow || !*srow)
+      *dest++ = '?';
+    else
+      *dest++ = *srow;
   }
-  if (i == 0)
-    i = -1;
 
- /*
-  * Close file and return charmap count (non-comment line count)...
-  */
-  cupsFileClose(fp);
-  return (i);
+  *dest = '\0';
+
+  _cupsCharmapFree(encoding);
+
+  return ((int)(dest - start));
 }
 
+
 /*
- * 'get_sbcs_charmap()' - Get SBCS Charmap.
+ * 'conv_utf8_to_vbcs()' - Convert UTF-8 to legacy DBCS/VBCS.
  */
-static _cups_cmap_t *                    /* O - Charmap or 0 on error */
-get_sbcs_charmap(const cups_encoding_t encoding,
-                                       /* I - Charmap Encoding */
-                const char *filename)  /* I - Charmap Filename */
+
+static int                             /* O - Count or -1 on error */
+conv_utf8_to_vbcs(
+    cups_sbcs_t           *dest,       /* O - Target string */
+    const cups_utf8_t     *src,                /* I - Source string */
+    int                   maxout,      /* I - Max output */
+    const cups_encoding_t encoding)    /* I - Encoding */
 {
-  int           i;              /* Loop variable */
-  unsigned long legchar;        /* Legacy character value */
-  cups_utf32_t  unichar;        /* Unicode character value */
-  _cups_cmap_t   *cmap;          /* Legacy SBCS / Unicode Charset Map */
-  cups_file_t   *fp;            /* Charset map file pointer */
-  char          *s;             /* Line parsing pointer */
-  cups_ucs2_t   *crow;          /* Pointer to UCS-2 row in 'char2uni' */
-  cups_sbcs_t   *srow;          /* Pointer to SBCS row in 'uni2char' */
-  char          line[256];      /* Line from charset map file */
-  _cups_globals_t *cg = _cupsGlobals();
-                               /* Pointer to library globals */
+  cups_sbcs_t  *start;                 /* Start of destination string */
+  _cups_vmap_t *vmap;                  /* Legacy DBCS / Unicode Charset Map */
+  cups_vbcs_t  *vrow;                  /* Pointer to VBCS row in 'uni2char' */
+  cups_utf32_t unichar;                /* Character value */
+  cups_vbcs_t  legchar;                /* Legacy character value */
+  cups_utf32_t work[CUPS_MAX_USTRING], /* Internal UCS-4 string */
+               *workptr;               /* Pointer into string */
 
- /*
-  * Check for valid arguments...
-  */
-  if ((encoding < 0) || (filename == NULL))
-    return (NULL);
 
  /*
-  * See if we already have this SBCS charset map loaded...
+  * Find legacy charset map in cache...
   */
-  for (cmap = cg->cmap_cache; cmap != NULL; cmap = cmap->next)
-  {
-    if (cmap->encoding == encoding)
-    {
-      cmap->used ++;
-      return ((void *) cmap);
-    }
-  }
 
- /*
-  * Open SBCS charset map input file...
-  */
-  fp = cupsFileOpen(filename, "r");
-  if (fp == NULL)
-    return (NULL);
+  if ((vmap = (_cups_vmap_t *)_cupsCharmapGet(encoding)) == NULL)
+    return (-1);
 
  /*
-  * Allocate memory for SBCS charset map and add to cache...
+  * Convert input UTF-8 to internal UCS-4 (and insert BOM)...
   */
-  cmap = (_cups_cmap_t *) calloc(1, sizeof(_cups_cmap_t));
-  if (cmap == NULL)
-  {
-    cupsFileClose(fp);
-    return (NULL);
-  }
-  cmap->next = cg->cmap_cache;
-  cg->cmap_cache = cmap;
-  cmap->used ++;
-  cmap->encoding = encoding;
+
+  if (cupsUTF8ToUTF32(work, src, CUPS_MAX_USTRING) < 0)
+    return (-1);
 
  /*
-  * Save SBCS charset map into memory for transcoding...
+  * Convert internal UCS-4 to VBCS legacy charset (and delete BOM)...
   */
-  for (i = 0; i < CUPS_MAX_CHARMAP_LINES;)
+
+  for (start = dest, workptr = work + 1; *workptr && maxout > 1; maxout --)
   {
-    s = cupsFileGets(fp, line, sizeof(line));
-    if (s == NULL)
+    unichar = *workptr++;
+    if (!unichar)
       break;
-    if ((*s == '#') || (*s == '\n') || (*s == '\0'))
-      continue;
-    if (strncmp (s, "0x", 2) == 0)
-      s += 2;
-    if ((sscanf(s, "%lx", &legchar) != 1)
-    || (legchar > 0xff))
-    {
-      cupsFileClose(fp);
-      cupsCharmapFlush();
-      return (NULL);
-    }
-    while ((*s != 0) && (*s != ' ') && (*s != '\t'))
-      s ++;
-    while ((*s == ' ') || (*s == '\t'))
-      s ++;
-    if (strncmp (s, "0x", 2) == 0)
-      s += 2;
-    if (sscanf(s, "%lx", &unichar) != 1)
-    {
-      cupsFileClose(fp);
-      cupsCharmapFlush();
-      return (NULL);
-    }
-    i ++;
 
    /*
-    * Convert beyond Plane 0 (BMP) to Replacement Character...
+    * Convert ASCII verbatim (optimization)...
     */
-    if (unichar > 0xffff)
-      unichar = 0xfffd;
+
+    if (unichar < 0x80)
+    {
+      *dest++ = (cups_vbcs_t)unichar;
+      continue;
+    }
 
    /*
-    * Save legacy to Unicode mapping in direct lookup table...
+    * Convert unknown character to visible replacement...
     */
-    crow = &cmap->char2uni[(int) legchar];
-    *crow = (cups_ucs2_t) (unichar & 0xffff);
+
+    vrow = vmap->uni2char[(int)((unichar >> 8) & 0xff)];
+
+    if (vrow)
+      vrow += (int)(unichar & 0xff);
+
+    if (!vrow || !*vrow)
+      legchar = (cups_vbcs_t)'?';
+    else
+      legchar = (cups_vbcs_t)*vrow;
 
    /*
-    * Save Unicode to legacy mapping in indirect lookup table...
+    * Save n-byte legacy character...
     */
-    srow = cmap->uni2char[(int) ((unichar >> 8) & 0xff)];
-    if (srow == NULL)
+
+    if (legchar > 0xffffff)
     {
-      srow = (cups_sbcs_t *) calloc(256, sizeof(cups_sbcs_t));
-      if (srow == NULL)
-      {
-       cupsFileClose(fp);
-       cupsCharmapFlush();
-       return (NULL);
-      }
-      cmap->uni2char[(int) ((unichar >> 8) & 0xff)] = srow;
+      if (maxout < 5)
+        return (-1);
+
+      *dest++ = (cups_sbcs_t)(legchar >> 24);
+      *dest++ = (cups_sbcs_t)(legchar >> 16);
+      *dest++ = (cups_sbcs_t)(legchar >> 8);
+      *dest++ = (cups_sbcs_t)legchar;
+
+      maxout -= 3;
     }
-    srow += (int) (unichar & 0xff);
+    else if (legchar > 0xffff)
+    {
+      if (maxout < 4)
+        return (-1);
 
-   /*
-    * Convert Replacement Character to visible replacement...
-    */
-    if (unichar == 0xfffd)
-      legchar = (unsigned long) '?';
+      *dest++ = (cups_sbcs_t)(legchar >> 16);
+      *dest++ = (cups_sbcs_t)(legchar >> 8);
+      *dest++ = (cups_sbcs_t)legchar;
 
-   /*
-    * First (oldest) legacy character uses Unicode mapping cell...
-    */
-    if (*srow == 0)
-      *srow = (cups_sbcs_t) legchar;
+      maxout -= 2;
+    }
+    else if (legchar > 0xff)
+    {
+      *dest++ = (cups_sbcs_t)(legchar >> 8);
+      *dest++ = (cups_sbcs_t)legchar;
+
+      maxout --;
+    }
   }
-  cupsFileClose(fp);
-  return (cmap);
+
+  *dest = '\0';
+
+  _cupsCharmapFree(encoding);
+
+  return ((int)(dest - start));
 }
 
+
 /*
- * 'get_vbcs_charmap()' - Get DBCS/VBCS Charmap.
+ * 'conv_vbcs_to_utf8()' - Convert legacy DBCS/VBCS to UTF-8.
  */
-static _cups_vmap_t *                    /* O - Charmap or 0 on error */
-get_vbcs_charmap(const cups_encoding_t encoding,
-                                       /* I - Charmap Encoding */
-                const char *filename)  /* I - Charmap Filename */
+
+static int                             /* O - Count or -1 on error */
+conv_vbcs_to_utf8(
+    cups_utf8_t           *dest,       /* O - Target string */
+    const cups_sbcs_t     *src,                /* I - Source string */
+    int                   maxout,      /* I - Max output */
+    const cups_encoding_t encoding)    /* I - Encoding */
 {
-  _cups_vmap_t       *vmap;      /* Legacy VBCS / Unicode Charset Map */
-  cups_ucs2_t       *crow;      /* Pointer to UCS-2 row in 'char2uni' */
-  cups_vbcs_t       *vrow;      /* Pointer to VBCS row in 'uni2char' */
-  _cups_wide2uni_t   *wide2uni;  /* Pointer to row in 'wide2uni' */
-  cups_sbcs_t       leadchar;   /* Lead char of 2-byte legacy char */
-  unsigned long     legchar;    /* Legacy character value */
-  cups_utf32_t      unichar;    /* Unicode character value */
-  int               mapcount;   /* Count of lines in charmap file */
-  cups_file_t       *fp;        /* Charset map file pointer */
-  char              *s;         /* Line parsing pointer */
-  char              line[256];  /* Line from charset map file */
-  int               i;          /* Loop variable */
-  int               wide;       /* 32-bit legacy char */
-  _cups_globals_t    *cg = _cupsGlobals();
-                               /* Pointer to library globals */
+  _cups_vmap_t *vmap;                  /* Legacy VBCS / Unicode Charset Map */
+  cups_ucs2_t  *crow;                  /* Pointer to UCS-2 row in 'char2uni' */
+  _cups_wide2uni_t *wide2uni;          /* Pointer to row in 'wide2uni' */
+  cups_sbcs_t  leadchar;               /* Lead char of n-byte legacy char */
+  cups_vbcs_t  legchar;                /* Legacy character value */
+  cups_utf32_t work[CUPS_MAX_USTRING], /* Internal UCS-4 string */
+               *workptr;               /* Pointer into string */
 
- /*
-  * Check for valid arguments...
-  */
-  if ((encoding < 0) || (filename == NULL))
-    return (NULL);
 
  /*
-  * See if we already have this DBCS/VBCS charset map loaded...
+  * Find legacy charset map in cache...
   */
-  for (vmap = cg->vmap_cache; vmap != NULL; vmap = vmap->next)
-  {
-    if (vmap->encoding == encoding)
-    {
-      vmap->used ++;
-      return ((void *) vmap);
-    }
-  }
 
- /*
-  * Count lines in charmap file...
-  */
-  mapcount = get_charmap_count(filename);
-  if (mapcount <= 0)
-    return (NULL);
+  if ((vmap = (_cups_vmap_t *)_cupsCharmapGet(encoding)) == NULL)
+    return (-1);
 
  /*
-  * Open VBCS charset map input file...
+  * Convert input legacy charset to internal UCS-4 (and insert BOM)...
   */
-  fp = cupsFileOpen(filename, "r");
-  if (fp == NULL)
-    return (NULL);
 
- /*
-  * Allocate memory for DBCS/VBCS charset map and add to cache...
-  */
-  vmap = (_cups_vmap_t *) calloc(1, sizeof(_cups_vmap_t));
-  if (vmap == NULL)
+  work[0] = 0xfeff;
+  for (workptr = work + 1; *src && workptr < (work + CUPS_MAX_USTRING - 1);)
   {
-    cupsFileClose(fp);
-    return (NULL);
-  }
-  vmap->next = cg->vmap_cache;
-  cg->vmap_cache = vmap;
-  vmap->used ++;
-  vmap->encoding = encoding;
-
- /*
-  * Save DBCS/VBCS charset map into memory for transcoding...
-  */
-  leadchar = 0;
-  wide2uni = NULL;
-
-  for (i = 0, wide = 0; i < mapcount; )
-  {
-    s = cupsFileGets(fp, line, sizeof(line));
-    if (s == NULL)
-      break;
-    if ((*s == '#') || (*s == '\n') || (*s == '\0'))
-      continue;
-    if (strncmp (s, "0x", 2) == 0)
-      s += 2;
-    if ((sscanf(s, "%lx", &legchar) != 1)
-    || ((legchar > 0xffff) && (encoding < CUPS_ENCODING_DBCS_END)))
-    {
-      cupsFileClose(fp);
-      cupsCharmapFlush();
-      return (NULL);
-    }
-    while ((*s != 0) && (*s != ' ') && (*s != '\t'))
-      s ++;
-    while ((*s == ' ') || (*s == '\t'))
-      s ++;
-    if (strncmp (s, "0x", 2) == 0)
-      s += 2;
-    if (sscanf(s, "%lx", &unichar) != 1)
-    {
-      cupsFileClose(fp);
-      cupsCharmapFlush();
-      return (NULL);
-    }
-    i ++;
+    legchar  = *src++;
+    leadchar = (cups_sbcs_t)legchar;
 
    /*
-    * Convert beyond Plane 0 (BMP) to Replacement Character...
+    * Convert ASCII verbatim (optimization)...
     */
-    if (unichar > 0xffff)
-      unichar = 0xfffd;
 
-   /*
-    * Save lead char of 2/3/4-byte legacy char...
-    */
-    if ((legchar > 0xff) && (legchar <= 0xffff))
-    {
-      leadchar = (cups_sbcs_t) (legchar >> 8);
-      vmap->lead2char[leadchar] = leadchar;
-    }
-    if ((legchar > 0xffff) && (legchar <= 0xffffff))
+    if (legchar < 0x80)
     {
-      leadchar = (cups_sbcs_t) (legchar >> 16);
-      vmap->lead3char[leadchar] = leadchar;
-    }
-    if (legchar > 0xffffff)
-    {
-      leadchar = (cups_sbcs_t) (legchar >> 24);
-      vmap->lead4char[leadchar] = leadchar;
+      *workptr++ = (cups_utf32_t)legchar;
+      continue;
     }
 
    /*
-    * Save Legacy to Unicode mapping...
+    * Convert 2-byte legacy character...
     */
-    if (legchar <= 0xffff)
-    {
-     /*
-      * Save DBCS 16-bit to Unicode mapping in indirect lookup table...
-      */
-      crow = vmap->char2uni[(int) leadchar];
-      if (crow == NULL)
-      {
-       crow = (cups_ucs2_t *) calloc(256, sizeof(cups_ucs2_t));
-       if (crow == NULL)
-       {
-         cupsFileClose(fp);
-         cupsCharmapFlush();
-         return (NULL);
-       }
-       vmap->char2uni[(int) leadchar] = crow;
-      }
-      crow += (int) (legchar & 0xff);
-      *crow = (cups_ucs2_t) unichar;
-    }
-    else
+
+    if (vmap->lead2char[(int)leadchar] == leadchar)
     {
+      if (!*src)
+       return (-1);
+
+      legchar = (legchar << 8) | *src++;
+  
      /*
-      * Save VBCS 32-bit to Unicode mapping in sorted list table...
+      * Convert unknown character to Replacement Character...
       */
-      if (wide == 0)
-      {
-       wide = 1;
-       vmap->widecount = (mapcount - i + 1);
-       wide2uni = (_cups_wide2uni_t *)
-         calloc(vmap->widecount, sizeof(_cups_wide2uni_t));
-       if (wide2uni == NULL)
-       {
-         cupsFileClose(fp);
-         cupsCharmapFlush();
-         return (NULL);
-       }
-       vmap->wide2uni = wide2uni;
-      }
-      wide2uni->widechar = (cups_vbcs_t) legchar;
-      wide2uni->unichar = (cups_ucs2_t)unichar;
-      wide2uni ++;
+
+      crow = vmap->char2uni[(int)((legchar >> 8) & 0xff)];
+      if (crow)
+       crow += (int) (legchar & 0xff);
+
+      if (!crow || !*crow)
+       *workptr++ = 0xfffd;
+      else
+       *workptr++ = (cups_utf32_t)*crow;
+      continue;
     }
 
    /*
-    * Save Unicode to legacy mapping in indirect lookup table...
+    * Fetch 3-byte or 4-byte legacy character...
     */
-    vrow = vmap->uni2char[(int) ((unichar >> 8) & 0xff)];
-    if (vrow == NULL)
+
+    if (vmap->lead3char[(int)leadchar] == leadchar)
     {
-      vrow = (cups_vbcs_t *) calloc(256, sizeof(cups_vbcs_t));
-      if (vrow == NULL)
-      {
-       cupsFileClose(fp);
-       cupsCharmapFlush();
-       return (NULL);
-      }
-      vmap->uni2char[(int) ((unichar >> 8) & 0xff)] = vrow;
+      if (!*src || !src[1])
+       return (-1);
+
+      legchar = (legchar << 8) | *src++;
+      legchar = (legchar << 8) | *src++;
     }
-    vrow += (int) (unichar & 0xff);
+    else if (vmap->lead4char[(int)leadchar] == leadchar)
+    {
+      if (!*src || !src[1] || !src[2])
+       return (-1);
+
+      legchar = (legchar << 8) | *src++;
+      legchar = (legchar << 8) | *src++;
+      legchar = (legchar << 8) | *src++;
+    }
+    else
+      return (-1);
 
    /*
-    * Convert Replacement Character to visible replacement...
+    * Find 3-byte or 4-byte legacy character...
     */
-    if (unichar == 0xfffd)
-      legchar = (unsigned long) '?';
+
+    wide2uni = (_cups_wide2uni_t *)bsearch(&legchar,
+                                          vmap->wide2uni,
+                                          vmap->widecount,
+                                          sizeof(_cups_wide2uni_t),
+                                          compare_wide);
 
    /*
-    * First (oldest) legacy character uses Unicode mapping cell...
+    * Convert unknown character to Replacement Character...
     */
-    if (*vrow == 0)
-      *vrow = (cups_vbcs_t) legchar;
+
+    if (!wide2uni || !wide2uni->unichar)
+      *workptr++ = 0xfffd;
+    else
+      *workptr++ = wide2uni->unichar;
   }
-  vmap->charcount = (i - vmap->widecount);
-  cupsFileClose(fp);
-  return (vmap);
+
+  *workptr = 0;
+
+  _cupsCharmapFree(encoding);
+
+ /*
+  * Convert internal UCS-4 to output UTF-8 (and delete BOM)...
+  */
+
+  return (cupsUTF32ToUTF8(dest, work, maxout));
 }
 
+
 /*
- * 'conv_utf8_to_sbcs()' - Convert UTF-8 to legacy SBCS.
+ * 'free_sbcs_charmap()' - Free memory used by a single byte character set.
  */
-static int                              /* O - Count or -1 on error */
-conv_utf8_to_sbcs(char *dest,           /* O - Target string */
-    const cups_utf8_t *src,             /* I - Source string */
-    const int maxout,                   /* I - Max output */
-    const cups_encoding_t encoding)     /* I - Encoding */
+
+static void
+free_sbcs_charmap(_cups_cmap_t *cmap)  /* I - Character set */
 {
-  char          *start = dest;  /* Start of destination string */
-  _cups_cmap_t   *cmap;          /* Legacy SBCS / Unicode Charset Map */
-  cups_sbcs_t   *srow;          /* Pointer to SBCS row in 'uni2char' */
-  cups_utf32_t  unichar;        /* Character value */
-  int           worklen;        /* Internal UCS-4 string length */
-  cups_utf32_t  work[CUPS_MAX_USTRING];
-                               /* Internal UCS-4 string */
-  int           i;              /* Looping variable */
+  int          i;                      /* Looping variable */
 
- /*
-  * Check for valid arguments and clear output...
-  */
-  if ((dest == NULL)
-  || (src == NULL)
-  || (maxout < 1)
-  || (maxout > CUPS_MAX_USTRING)
-  || (encoding == CUPS_UTF8))
-    return (-1);
-  *dest = '\0';
 
- /*
-  * Find legacy charset map in cache...
-  */
-  cmap = (_cups_cmap_t *) cupsCharmapGet(encoding);
-  if (cmap == NULL)
-    return (-1);
+  for (i = 0; i < 256; i ++)
+    if (cmap->uni2char[i])
+      free(cmap->uni2char[i]);
+
+  free(cmap);
+}
+
+
+/*
+ * 'free_vbcs_charmap()' - Free memory used by a variable byte character set.
+ */
+
+static void
+free_vbcs_charmap(_cups_vmap_t *vmap)  /* I - Character set */
+{
+  int          i;                      /* Looping variable */
+
+
+  for (i = 0; i < 256; i ++)
+    if (vmap->char2uni[i])
+      free(vmap->char2uni[i]);
+
+  for (i = 0; i < 256; i ++)
+    if (vmap->uni2char[i])
+      free(vmap->uni2char[i]);
+
+  if (vmap->wide2uni)
+    free(vmap->wide2uni);
+
+  free(vmap);
+}
+
+
+/*
+ * 'get_charmap_count()' - Count lines in a charmap file.
+ */
+
+static int                             /* O - Count or -1 on error */
+get_charmap_count(cups_file_t *fp)     /* I - File to read from */
+{
+  int  count;                          /* Number of lines */
+  char line[256];                      /* Line from input map file */
 
- /*
-  * Convert input UTF-8 to internal UCS-4 (and insert BOM)...
-  */
-  worklen = cupsUTF8ToUTF32(work, src, CUPS_MAX_USTRING);
-  if (worklen < 0)
-    return (-1);
 
  /*
-  * Convert internal UCS-4 to SBCS legacy charset (and delete BOM)...
+  * Count lines in map input file...
   */
-  for (i = 0; i < worklen;)
-  {
-    unichar = work[i];
-    if (unichar == 0)
-      break;
-    i ++;
 
-   /*
-    * Check for leading BOM (and delete from output)...
-    */
-    if ((i == 1) && (unichar == 0xfeff))
-      continue;
+  count = 0;
 
-   /*
-    * Convert ASCII verbatim (optimization)...
-    */
-    if (unichar <= 0x7f)
-    {
-      *dest = (char) unichar;
-      dest ++;
-      continue;
-    }
+  while (cupsFileGets(fp, line, sizeof(line)))
+    if (line[0] == '0')
+      count ++;
 
-   /*
-    * Convert unknown character to visible replacement...
-    */
-    srow = cmap->uni2char[(int) ((unichar >> 8) & 0xff)];
-    if (srow)
-      srow += (int) (unichar & 0xff);
-    if ((srow == NULL) || (*srow == 0))
-      *dest = '?';
-    else
-      *dest = (char) (*srow);
-    dest ++;
-  }
-  *dest = '\0';
-  worklen = (int) (dest - start);
-  cupsCharmapFree(encoding);
-  return (worklen);
+ /*
+  * Return the number of lines...
+  */
+
+  if (count > 0)
+    return (count);
+  else
+    return (-1);
 }
 
+
 /*
- * 'conv_utf8_to_vbcs()' - Convert UTF-8 to legacy DBCS/VBCS.
+ * 'get_sbcs_charmap()' - Get SBCS Charmap.
  */
-static int                              /* O - Count or -1 on error */
-conv_utf8_to_vbcs(char *dest,           /* O - Target string */
-    const cups_utf8_t *src,             /* I - Source string */
-    const int maxout,                   /* I - Max output */
-    const cups_encoding_t encoding)     /* I - Encoding */
+
+static _cups_cmap_t *                   /* O - Charmap or 0 on error */
+get_sbcs_charmap(
+    const cups_encoding_t encoding,    /* I - Charmap Encoding */
+    const char            *filename)   /* I - Charmap Filename */
 {
-  char          *start = dest;  /* Start of destination string */
-  _cups_vmap_t   *vmap;          /* Legacy DBCS / Unicode Charset Map */
-  cups_vbcs_t   *vrow;          /* Pointer to VBCS row in 'uni2char' */
-  cups_utf32_t  unichar;        /* Character value */
-  cups_vbcs_t   legchar;        /* Legacy character value */
-  int           worklen;        /* Internal UCS-4 string length */
-  cups_utf32_t  work[CUPS_MAX_USTRING];
-                               /* Internal UCS-4 string */
-  int           i;              /* Looping variable */
+  unsigned long legchar;               /* Legacy character value */
+  cups_utf32_t unichar;                /* Unicode character value */
+  _cups_cmap_t  *cmap;                 /* Legacy SBCS / Unicode Charset Map */
+  cups_file_t  *fp;                    /* Charset map file pointer */
+  char         *s;                     /* Line parsing pointer */
+  cups_ucs2_t  *crow;                  /* Pointer to UCS-2 row in 'char2uni' */
+  cups_sbcs_t  *srow;                  /* Pointer to SBCS row in 'uni2char' */
+  char         line[256];              /* Line from charset map file */
+  _cups_globals_t *cg = _cupsGlobals();        /* Pointer to library globals */
+
 
  /*
-  * Check for valid arguments and clear output...
+  * See if we already have this SBCS charset map loaded...
   */
-  if ((dest == NULL)
-  || (src == NULL)
-  || (maxout < 1)
-  || (maxout > CUPS_MAX_USTRING)
-  || (encoding == CUPS_UTF8))
-    return (-1);
-  *dest = '\0';
+
+  for (cmap = cg->cmap_cache; cmap; cmap = cmap->next)
+  {
+    if (cmap->encoding == encoding)
+    {
+      cmap->used ++;
+      DEBUG_printf(("    returning existing cmap=%p\n", cmap));
+      return ((void *)cmap);
+    }
+  }
 
  /*
-  * Find legacy charset map in cache...
+  * Open SBCS charset map input file...
   */
-  vmap = (_cups_vmap_t *) cupsCharmapGet(encoding);
-  if (vmap == NULL)
-    return (-1);
+
+  if ((fp = cupsFileOpen(filename, "r")) == NULL)
+    return (NULL);
 
  /*
-  * Convert input UTF-8 to internal UCS-4 (and insert BOM)...
+  * Allocate memory for SBCS charset map...
   */
-  worklen = cupsUTF8ToUTF32(work, src, CUPS_MAX_USTRING);
-  if (worklen < 0)
-    return (-1);
+
+  if ((cmap = (_cups_cmap_t *)calloc(1, sizeof(_cups_cmap_t))) == NULL)
+  {
+    cupsFileClose(fp);
+    DEBUG_puts("    Unable to allocate memory!");
+    return (NULL);
+  }
+
+  cmap->used ++;
+  cmap->encoding = encoding;
 
  /*
-  * Convert internal UCS-4 to VBCS legacy charset (and delete BOM)...
+  * Save SBCS charset map into memory for transcoding...
   */
-  for (i = 0; i < worklen;)
+
+  while (cupsFileGets(fp, line, sizeof(line)))
   {
-    unichar = work[i];
-    if (unichar == 0)
-      break;
-    i ++;
+    if (line[0] != '0')
+      continue;
+
+    legchar = strtol(line, &s, 16);
+    if (legchar < 0 || legchar > 0xff)
+      goto sbcs_error;
+
+    unichar = strtol(s, NULL, 16);
+    if (unichar < 0 || unichar > 0xffff)
+      goto sbcs_error;
 
    /*
-    * Check for leading BOM (and delete from output)...
+    * Save legacy to Unicode mapping in direct lookup table...
     */
-    if ((i == 1) && (unichar == 0xfeff))
-      continue;
+
+    crow  = cmap->char2uni + legchar;
+    *crow = (cups_ucs2_t)(unichar & 0xffff);
 
    /*
-    * Convert ASCII verbatim (optimization)...
+    * Save Unicode to legacy mapping in indirect lookup table...
     */
-    if (unichar <= 0x7f)
+
+    srow = cmap->uni2char[(unichar >> 8) & 0xff];
+    if (!srow)
     {
-      *dest = (char) unichar;
-      dest ++;
-      continue;
+      srow = (cups_sbcs_t *)calloc(256, sizeof(cups_sbcs_t));
+      if (!srow)
+        goto sbcs_error;
+
+      cmap->uni2char[(unichar >> 8) & 0xff] = srow;
     }
 
+    srow += unichar & 0xff;
+
    /*
-    * Convert unknown character to visible replacement...
+    * Convert Replacement Character to visible replacement...
     */
-    vrow = vmap->uni2char[(int) ((unichar >> 8) & 0xff)];
-    if (vrow)
-      vrow += (int) (unichar & 0xff);
-    if ((vrow == NULL) || (*vrow == 0))
-      legchar = (cups_vbcs_t) '?';
-    else
-      legchar = (cups_vbcs_t) *vrow;
+
+    if (unichar == 0xfffd)
+      legchar = (unsigned long)'?';
 
    /*
-    * Save n-byte legacy character...
+    * First (oldest) legacy character uses Unicode mapping cell...
     */
-    if (legchar > 0xffffff)
-    {
-      *dest = (char) ((legchar >> 24) & 0xff);
-      dest++;
-    }
-    if (legchar > 0xffff)
-    {
-      *dest = (char) ((legchar >> 16) & 0xff);
-      dest++;
-    }
-    if (legchar > 0xff)
-    {
-      *dest = (char) ((legchar >> 8) & 0xff);
-      dest++;
-    }
-    *dest = (char) (legchar & 0xff);
-    dest ++;
-  }
-  *dest = '\0';
-  worklen = (int) (dest - start);
-  cupsCharmapFree(encoding);
-  return (worklen);
-}
 
-/*
- * 'conv_sbcs_to_utf8()' - Convert legacy SBCS to UTF-8.
- */
-static int                              /* O - Count or -1 on error */
-conv_sbcs_to_utf8(cups_utf8_t *dest,    /* O - Target string */
-    const char *src,                    /* I - Source string */
-    const int maxout,                   /* I - Max output */
-    const cups_encoding_t encoding)     /* I - Encoding */
-{
-  _cups_cmap_t   *cmap;          /* Legacy SBCS / Unicode Charset Map */
-  cups_ucs2_t   *crow;          /* Pointer to UCS-2 row in 'char2uni' */
-  unsigned long legchar;        /* Legacy character value */
-  cups_utf32_t  unichar;        /* Unicode character value */
-  int           worklen;        /* Internal UCS-4 string length */
-  cups_utf32_t  work[CUPS_MAX_USTRING];
-                               /* Internal UCS-4 string */
-  int           i;              /* Looping variable */
+    if (!*srow)
+      *srow = (cups_sbcs_t)legchar;
+  }
 
+  cupsFileClose(fp);
+      
  /*
-  * Check for valid arguments and clear output...
+  * Add it to the cache and return...
   */
-  if ((dest == NULL)
-  || (src == NULL)
-  || (maxout < 1)
-  || (maxout > CUPS_MAX_USTRING)
-  || (encoding == CUPS_UTF8))
-    return (-1);
-  *dest = '\0';
+
+  cmap->next     = cg->cmap_cache;
+  cg->cmap_cache = cmap;
+
+  DEBUG_printf(("    returning new cmap=%p\n", cmap));
+
+  return (cmap);
 
  /*
-  * Find legacy charset map in cache...
+  * If we get here, there was an error in the cmap file...
   */
-  cmap = (_cups_cmap_t *) cupsCharmapGet(encoding);
-  if (cmap == NULL)
-    return (-1);
+
+  sbcs_error:
+
+  free_sbcs_charmap(cmap);
+
+  cupsFileClose(fp);
+
+  DEBUG_puts("    Error, returning NULL!");
+
+  return (NULL);
+}
+
+
+/*
+ * 'get_vbcs_charmap()' - Get DBCS/VBCS Charmap.
+ */
+
+static _cups_vmap_t *                  /* O - Charmap or 0 on error */
+get_vbcs_charmap(
+    const cups_encoding_t encoding,    /* I - Charmap Encoding */
+    const char            *filename)   /* I - Charmap Filename */
+{
+  _cups_vmap_t *vmap;                  /* Legacy VBCS / Unicode Charset Map */
+  cups_ucs2_t  *crow;                  /* Pointer to UCS-2 row in 'char2uni' */
+  cups_vbcs_t  *vrow;                  /* Pointer to VBCS row in 'uni2char' */
+  _cups_wide2uni_t *wide2uni;          /* Pointer to row in 'wide2uni' */
+  cups_sbcs_t  leadchar;               /* Lead char of 2-byte legacy char */
+  unsigned long        legchar;                /* Legacy character value */
+  cups_utf32_t unichar;                /* Unicode character value */
+  int          mapcount;               /* Count of lines in charmap file */
+  cups_file_t  *fp;                    /* Charset map file pointer */
+  char         *s;                     /* Line parsing pointer */
+  char         line[256];              /* Line from charset map file */
+  int          i;                      /* Loop variable */
+  int          wide;                   /* 32-bit legacy char */
+  _cups_globals_t *cg = _cupsGlobals();        /* Pointer to library globals */
+
+
+  DEBUG_printf(("get_vbcs_charmap(encoding=%d, filename=\"%s\")\n",
+                encoding, filename));
 
  /*
-  * Convert input legacy charset to internal UCS-4 (and insert BOM)...
+  * See if we already have this DBCS/VBCS charset map loaded...
   */
-  work[0] = 0xfeff;
-  for (i = 1; i < (CUPS_MAX_USTRING - 1); src ++)
-  {
-    if (*src == '\0')
-      break;
-    legchar = (unsigned long) *src;
 
-   /*
-    * Convert ASCII verbatim (optimization)...
-    */
-    if (legchar <= 0x7f)
+  for (vmap = cg->vmap_cache; vmap; vmap = vmap->next)
+  {
+    if (vmap->encoding == encoding)
     {
-      work[i] = (cups_utf32_t) legchar;
-      i ++;
-      continue;
+      vmap->used ++;
+      DEBUG_printf(("    returning existing vmap=%p\n", vmap));
+      return ((void *)vmap);
     }
-
-   /*
-    * Convert unknown character to Replacement Character...
-    */
-    crow = &cmap->char2uni[0];
-    crow += (int) legchar;
-    if (*crow == 0)
-      unichar = 0xfffd;
-    else
-      unichar = (cups_utf32_t) *crow;
-    work[i] = unichar;
-    i ++;
   }
-  work[i] = 0;
 
  /*
-  * Convert internal UCS-4 to output UTF-8 (and delete BOM)...
+  * Open VBCS charset map input file...
   */
-  worklen = cupsUTF32ToUTF8(dest, work, maxout);
-  cupsCharmapFree(encoding);
-  return (worklen);
-}
 
-
-/*
- * 'conv_vbcs_to_utf8()' - Convert legacy DBCS/VBCS to UTF-8.
- */
-static int                              /* O - Count or -1 on error */
-conv_vbcs_to_utf8(cups_utf8_t *dest,    /* O - Target string */
-    const char *src,                    /* I - Source string */
-    const int maxout,                   /* I - Max output */
-    const cups_encoding_t encoding)     /* I - Encoding */
-{
-  _cups_vmap_t       *vmap;      /* Legacy VBCS / Unicode Charset Map */
-  cups_ucs2_t       *crow;      /* Pointer to UCS-2 row in 'char2uni' */
-  _cups_wide2uni_t   *wide2uni;  /* Pointer to row in 'wide2uni' */
-  cups_sbcs_t       leadchar;   /* Lead char of n-byte legacy char */
-  cups_vbcs_t       legchar;    /* Legacy character value */
-  cups_utf32_t      unichar;    /* Unicode character value */
-  int               i;          /* Looping variable */
-  int               worklen;    /* Internal UCS-4 string length */
-  cups_utf32_t      work[CUPS_MAX_USTRING];
-                               /* Internal UCS-4 string */
+  if ((fp = cupsFileOpen(filename, "r")) == NULL)
+  {
+    DEBUG_printf(("    Unable to open file: %s\n", strerror(errno)));
+    return (NULL);
+  }
 
  /*
-  * Check for valid arguments and clear output...
+  * Count lines in charmap file...
   */
-  if ((dest == NULL)
-  || (src == NULL)
-  || (maxout < 1)
-  || (maxout > CUPS_MAX_USTRING)
-  || (encoding == CUPS_UTF8))
-    return (-1);
-  *dest = '\0';
+
+  if ((mapcount = get_charmap_count(fp)) <= 0)
+  {
+    DEBUG_puts("    Unable to get charmap count!");
+    return (NULL);
+  }
+
+  DEBUG_printf(("    mapcount=%d\n", mapcount));
 
  /*
-  * Find legacy charset map in cache...
+  * Allocate memory for DBCS/VBCS charset map...
   */
-  vmap = (_cups_vmap_t *) cupsCharmapGet(encoding);
-  if (vmap == NULL)
-    return (-1);
+
+  if ((vmap = (_cups_vmap_t *)calloc(1, sizeof(_cups_vmap_t))) == NULL)
+  {
+    cupsFileClose(fp);
+    DEBUG_puts("    Unable to allocate memory!");
+    return (NULL);
+  }
+
+  vmap->used ++;
+  vmap->encoding = encoding;
 
  /*
-  * Convert input legacy charset to internal UCS-4 (and insert BOM)...
+  * Save DBCS/VBCS charset map into memory for transcoding...
   */
-  work[0] = 0xfeff;
-  for (i = 1; i < (CUPS_MAX_USTRING - 1); src ++)
+
+  leadchar = 0;
+  wide2uni = NULL;
+
+  cupsFileRewind(fp);
+
+  i    = 0;
+  wide = 0;
+
+  while (cupsFileGets(fp, line, sizeof(line)))
   {
-    if (*src == '\0')
-      break;
-    legchar = (cups_vbcs_t) *src;
-    leadchar = (cups_sbcs_t) *src;
+    if (line[0] != '0')
+      continue;
+
+    legchar = strtoul(line, &s, 16);
+    if (legchar == ULONG_MAX)
+      goto vbcs_error;
+
+    unichar = strtol(s, NULL, 16);
+    if (unichar < 0 || unichar > 0xffff)
+      goto vbcs_error;
+
+    i ++;
+
+/*    DEBUG_printf(("    i=%d, legchar=0x%08lx, unichar=0x%04x\n", i,
+                  legchar, (unsigned)unichar)); */
 
    /*
-    * Convert ASCII verbatim (optimization)...
+    * Save lead char of 2/3/4-byte legacy char...
     */
-    if (legchar <= 0x7f)
+
+    if (legchar > 0xff && legchar <= 0xffff)
     {
-      work[i] = (cups_utf32_t) legchar;
-      i ++;
-      continue;
+      leadchar                  = (cups_sbcs_t)(legchar >> 8);
+      vmap->lead2char[leadchar] = leadchar;
+    }
+
+    if (legchar > 0xffff && legchar <= 0xffffff)
+    {
+      leadchar                  = (cups_sbcs_t)(legchar >> 16);
+      vmap->lead3char[leadchar] = leadchar;
+    }
+
+    if (legchar > 0xffffff)
+    {
+      leadchar                  = (cups_sbcs_t)(legchar >> 24);
+      vmap->lead4char[leadchar] = leadchar;
     }
 
    /*
-    * Convert 2-byte legacy character...
+    * Save Legacy to Unicode mapping...
     */
-    if (vmap->lead2char[(int) leadchar] == leadchar)
+
+    if (legchar <= 0xffff)
     {
-      src ++;
-      if (*src == '\0')
-       return (-1);
-      legchar = (legchar << 8) | (cups_vbcs_t) *src;
-  
      /*
-      * Convert unknown character to Replacement Character...
+      * Save DBCS 16-bit to Unicode mapping in indirect lookup table...
       */
-      crow = vmap->char2uni[(int) ((legchar >> 8) & 0xff)];
-      if (crow)
-       crow += (int) (legchar & 0xff);
-      if ((crow == NULL) || (*crow == 0))
-       unichar = 0xfffd;
-      else
-       unichar = (cups_utf32_t) *crow;
-      work[i] = unichar;
-      i ++;
-      continue;
+
+      crow = vmap->char2uni[(int)leadchar];
+      if (!crow)
+      {
+       crow = (cups_ucs2_t *)calloc(256, sizeof(cups_ucs2_t));
+       if (!crow)
+          goto vbcs_error;
+
+       vmap->char2uni[(int)leadchar] = crow;
+      }
+
+      crow[(int)(legchar & 0xff)] = (cups_ucs2_t)unichar;
+    }
+    else
+    {
+     /*
+      * Save VBCS 32-bit to Unicode mapping in sorted list table...
+      */
+
+      if (!wide)
+      {
+       wide            = 1;
+       vmap->widecount = (mapcount - i + 1);
+       wide2uni        = (_cups_wide2uni_t *)calloc(vmap->widecount,
+                                                    sizeof(_cups_wide2uni_t));
+       if (!wide2uni)
+          goto vbcs_error;
+
+       vmap->wide2uni = wide2uni;
+      }
+
+      wide2uni->widechar = (cups_vbcs_t)legchar;
+      wide2uni->unichar  = (cups_ucs2_t)unichar;
+      wide2uni ++;
     }
 
    /*
-    * Fetch 3-byte or 4-byte legacy character...
+    * Save Unicode to legacy mapping in indirect lookup table...
     */
-    if (vmap->lead3char[(int) leadchar] == leadchar)
-    {
-      src ++;
-      if (*src == '\0')
-       return (-1);
-      legchar = (legchar << 8) | (cups_vbcs_t) *src;
-      src ++;
-      if (*src == '\0')
-       return (-1);
-      legchar = (legchar << 8) | (cups_vbcs_t) *src;
-    }
-    else if (vmap->lead4char[(int) leadchar] == leadchar)
+
+    vrow = vmap->uni2char[(int)((unichar >> 8) & 0xff)];
+    if (!vrow)
     {
-      src ++;
-      if (*src == '\0')
-       return (-1);
-      legchar = (legchar << 8) | (cups_vbcs_t) *src;
-      src ++;
-      if (*src == '\0')
-       return (-1);
-      legchar = (legchar << 8) | (cups_vbcs_t) *src;
-      src ++;
-      if (*src == '\0')
-       return (-1);
-      legchar = (legchar << 8) | (cups_vbcs_t) *src;
+      vrow = (cups_vbcs_t *)calloc(256, sizeof(cups_vbcs_t));
+      if (!vrow)
+        goto vbcs_error;
+
+      vmap->uni2char[(int) ((unichar >> 8) & 0xff)] = vrow;
     }
-    else
-      return (-1);
+
+    vrow += (int)(unichar & 0xff);
 
    /*
-    * Find 3-byte or 4-byte legacy character...
+    * Convert Replacement Character to visible replacement...
     */
-    wide2uni = vmap->wide2uni;
-    wide2uni = (_cups_wide2uni_t *) bsearch(&legchar,
-                                          vmap->wide2uni,
-                                          vmap->widecount,
-                                          sizeof(_cups_wide2uni_t),
-                                          compare_wide);
+
+    if (unichar == 0xfffd)
+      legchar = (unsigned long)'?';
 
    /*
-    * Convert unknown character to Replacement Character...
+    * First (oldest) legacy character uses Unicode mapping cell...
     */
-    if ((wide2uni == NULL) || (wide2uni->unichar == 0))
-      unichar = 0xfffd;
-    else
-      unichar = wide2uni->unichar;
-    work[i] = unichar;
-    i ++;
+
+    if (!*vrow)
+      *vrow = (cups_vbcs_t)legchar;
   }
-  work[i] = 0;
+
+  vmap->charcount = (i - vmap->widecount);
+
+  cupsFileClose(fp);
 
  /*
-  * Convert internal UCS-4 to output UTF-8 (and delete BOM)...
+  * Add it to the cache and return...
   */
-  worklen = cupsUTF32ToUTF8(dest, work, maxout);
-  cupsCharmapFree(encoding);
-  return (worklen);
-}
 
-/*
- * 'compare_wide()' - Compare key for wide (VBCS) match.
- */
-static int
-compare_wide(const void *k1,            /* I - Key char */
-    const void *k2)                     /* I - Map char */
-{
-  cups_vbcs_t       *kp = (cups_vbcs_t *) k1;
-                               /* Key char pointer */
-  _cups_wide2uni_t   *mp = (_cups_wide2uni_t *) k2;
-                               /* Map char pointer */
-  cups_vbcs_t       key;        /* Legacy key character */
-  cups_vbcs_t       map;        /* Legacy map character */
-  int               result;     /* Result Value */
-
-  key = *kp;
-  map = mp->widechar;
-  if (key >= map)
-    result = (int) (key - map);
-  else
-    result = -1 * ((int) (map - key));
-  return (result);
+  vmap->next     = cg->vmap_cache;
+  cg->vmap_cache = vmap;
+
+  DEBUG_printf(("    returning new vmap=%p\n", vmap));
+
+  return (vmap);
+
+ /*
+  * If we get here, the file contains errors...
+  */
+
+  vbcs_error:
+
+  free_vbcs_charmap(vmap);
+
+  cupsFileClose(fp);
+
+  DEBUG_puts("    Error, returning NULL!");
+
+  return (NULL);
 }
 
 
 /*
- * End of "$Id: transcode.c 4967 2006-01-24 03:42:15Z mike $"
+ * End of "$Id: transcode.c 5300 2006-03-17 19:50:14Z mike $"
  */
index 5ed8fd8aa1328f4fb9df0e449acdb4df931a824f..c867b37e2ba570ee486deef04cdebf5889f5ecad 100644 (file)
@@ -1,7 +1,7 @@
 /*
- * "$Id: transcode.h 4903 2006-01-10 20:02:46Z mike $"
+ * "$Id: transcode.h 5294 2006-03-15 21:09:32Z mike $"
  *
- *   Transcoding support for the Common UNIX Printing System (CUPS).
+ *   Transcoding definitions for the Common UNIX Printing System (CUPS).
  *
  *   Copyright 1997-2006 by Easy Software Products.
  *
@@ -36,116 +36,45 @@ extern "C" {
 #  endif /* __cplusplus */
 
 
-/*
- * Types...
- */
-
-typedef unsigned char  cups_utf8_t;  /* UTF-8 Unicode/ISO-10646 unit */
-typedef unsigned short cups_utf16_t; /* UTF-16 Unicode/ISO-10646 unit */
-typedef unsigned long  cups_utf32_t; /* UTF-32 Unicode/ISO-10646 unit */
-typedef unsigned short cups_ucs2_t;  /* UCS-2 Unicode/ISO-10646 unit */
-typedef unsigned long  cups_ucs4_t;  /* UCS-4 Unicode/ISO-10646 unit */
-typedef unsigned char  cups_sbcs_t;  /* SBCS Legacy 8-bit unit */
-typedef unsigned short cups_dbcs_t;  /* DBCS Legacy 16-bit unit */
-typedef unsigned long  cups_vbcs_t;  /* VBCS Legacy 32-bit unit */
-                                     /* EUC uses 8, 16, 24, 32-bit */
-
-
-/*
- * Structures...
- */
-
-typedef struct _cups_cmap_s            /**** SBCS Charmap Struct ****/
-{
-  struct _cups_cmap_s  *next;          /* Next charmap in cache */
-  int                   used;           /* Number of times entry used */
-  cups_encoding_t       encoding;       /* Legacy charset encoding */
-  cups_ucs2_t           char2uni[256];  /* Map Legacy SBCS -> UCS-2 */
-  cups_sbcs_t           *uni2char[256]; /* Map UCS-2 -> Legacy SBCS */
-} _cups_cmap_t;
-
-typedef struct _cups_wide2uni_s                /**** Wide to Unicode ****/
-{
-  cups_vbcs_t           widechar;       /* VBCS 32-bit Char (EUC) */
-  cups_ucs2_t           unichar;        /* UCS-2 Char */
-} _cups_wide2uni_t;
-
-typedef struct _cups_vmap_s            /**** VBCS Charmap Struct ****/
-{
-  struct _cups_vmap_s  *next;          /* Next charmap in cache */
-  int                   used;           /* Number of times entry used */
-  cups_encoding_t       encoding;       /* Legacy charset encoding */
-  cups_ucs2_t           *char2uni[256]; /* Map 16-bit Char -> UCS-2 */
-  int                   charcount;      /* Count of 16-bit VBCS Chars */
-  _cups_wide2uni_t       *wide2uni;      /* Map 32-bit Char -> UCS-2 */
-  int                   widecount;      /* Count of 32-bit VBCS Chars */
-  cups_vbcs_t           *uni2char[256]; /* Map UCS-2 -> 32-bit VBCS */
-  cups_sbcs_t           lead2char[256]; /* Legacy Lead Char - 2-byte */
-  cups_sbcs_t           lead3char[256]; /* Legacy Lead Char - 3-byte */
-  cups_sbcs_t           lead4char[256]; /* Legacy Lead Char - 4-byte */
-} _cups_vmap_t;
-
-
 /*
  * Constants...
  */
 
-#  define CUPS_MAX_USTRING             8192    /* Max size of Unicode string */
-#  define CUPS_MAX_CHARMAP_LINES       100000  /* Max lines in charmap file */
+#  define CUPS_MAX_USTRING     8192    /* Max size of Unicode string */
 
 
 /*
- * Prototypes...
+ * Types...
  */
 
-/*
- * Utility functions for character set maps
- */
-extern void     *cupsCharmapGet(const cups_encoding_t encoding);
-extern void     cupsCharmapFree(const cups_encoding_t encoding);
-extern void     cupsCharmapFlush(void);
+typedef unsigned char  cups_utf8_t;    /* UTF-8 Unicode/ISO-10646 unit */
+typedef unsigned long  cups_utf32_t;   /* UTF-32 Unicode/ISO-10646 unit */
+typedef unsigned short cups_ucs2_t;    /* UCS-2 Unicode/ISO-10646 unit */
+typedef unsigned long  cups_ucs4_t;    /* UCS-4 Unicode/ISO-10646 unit */
+typedef unsigned char  cups_sbcs_t;    /* SBCS Legacy 8-bit unit */
+typedef unsigned short cups_dbcs_t;    /* DBCS Legacy 16-bit unit */
+typedef unsigned long  cups_vbcs_t;    /* VBCS Legacy 32-bit unit */
+                                       /* EUC uses 8, 16, 24, 32-bit */
 
-/*
- * Convert UTF-8 to and from legacy character set
- */
-extern int      cupsUTF8ToCharset(char *dest,
-                                  const cups_utf8_t *src,
-                                  const int maxout,
-                                  const cups_encoding_t encoding);
-extern int      cupsCharsetToUTF8(cups_utf8_t *dest,
-                                  const char *src,
-                                  const int maxout,
-                                  const cups_encoding_t encoding);
 
 /*
- * Convert UTF-8 to and from UTF-16
- */
-extern int      cupsUTF8ToUTF16(cups_utf16_t *dest,
-                                const cups_utf8_t *src,
-                                const int maxout);
-extern int      cupsUTF16ToUTF8(cups_utf8_t *dest,
-                                const cups_utf16_t *src,
-                                const int maxout);
-
-/*
- * Convert UTF-8 to and from UTF-32
+ * Prototypes...
  */
-extern int      cupsUTF8ToUTF32(cups_utf32_t *dest,
-                                const cups_utf8_t *src,
-                                const int maxout);
-extern int      cupsUTF32ToUTF8(cups_utf8_t *dest,
-                                const cups_utf32_t *src,
-                                const int maxout);
 
-/*
- * Convert UTF-16 to and from UTF-32
- */
-extern int      cupsUTF16ToUTF32(cups_utf32_t *dest,
-                                 const cups_utf16_t *src,
-                                 const int maxout);
-extern int      cupsUTF32ToUTF16(cups_utf16_t *dest,
-                                 const cups_utf32_t *src,
-                                 const int maxout);
+extern int     cupsCharsetToUTF8(cups_utf8_t *dest,
+                                 const char *src,
+                                 const int maxout,
+                                 const cups_encoding_t encoding);
+extern int     cupsUTF8ToCharset(char *dest,
+                                 const cups_utf8_t *src,
+                                 const int maxout,
+                                 const cups_encoding_t encoding);
+extern int     cupsUTF8ToUTF32(cups_utf32_t *dest,
+                               const cups_utf8_t *src,
+                               const int maxout);
+extern int     cupsUTF32ToUTF8(cups_utf8_t *dest,
+                               const cups_utf32_t *src,
+                               const int maxout);
 
 #  ifdef __cplusplus
 }
@@ -155,5 +84,5 @@ extern int      cupsUTF32ToUTF16(cups_utf16_t *dest,
 
 
 /*
- * End of "$Id: transcode.h 4903 2006-01-10 20:02:46Z mike $"
+ * End of "$Id: transcode.h 5294 2006-03-15 21:09:32Z mike $"
  */
index 6910a11432ccdb06f5f2c1c20b1de5e78ea9933d..29a7aa0e708d67f589746b25d4e578a8decd8682 100644 (file)
@@ -1,5 +1,5 @@
 #
-# "$Id: Makefile 5229 2006-03-05 16:48:12Z mike $"
+# "$Id: Makefile 5310 2006-03-19 03:23:34Z mike $"
 #
 #   Datafile makefile for the Common UNIX Printing System (CUPS).
 #
@@ -41,7 +41,6 @@ CHARMAPS =    \
                euc-jp.txt \
                euc-kr.txt \
                euc-tw.txt \
-               i18n_sdd.txt \
                iso-8859-10.txt \
                iso-8859-11.txt \
                iso-8859-13.txt \
@@ -60,15 +59,6 @@ CHARMAPS =   \
                koi8-r.txt \
                koi8-u.txt \
                mac-roman.txt \
-               unibreak.txt \
-               uni-comb.txt \
-               uni-fold.txt \
-               uni-full.txt \
-               uni-line.txt \
-               uni-nfc.txt \
-               uni-nfd.txt \
-               uni-nfkd.txt \
-               uni-prop.txt \
                windows-1250.txt \
                windows-1251.txt \
                windows-1252.txt \
@@ -190,5 +180,5 @@ uninstall:
 
 
 #
-# End of "$Id: Makefile 5229 2006-03-05 16:48:12Z mike $".
+# End of "$Id: Makefile 5310 2006-03-19 03:23:34Z mike $".
 #
diff --git a/data/i18n_sdd.txt b/data/i18n_sdd.txt
deleted file mode 100644 (file)
index 5c6cbce..0000000
+++ /dev/null
@@ -1,2337 +0,0 @@
-
-    
-    WORKING DRAFT                                               Ira McDonald
-    <i18n_sdd.txt>                                            High North Inc
-    
-                      Common UNIX Printing System ("CUPS")
-             Internationalization Software Design Description v0.3
-    
-       Copyright (C) Easy Software Products (2002) - All Rights Reserved
-    
-    
-    Status of this Document 
-    
-    This document is an unapproved working draft and is incomplete in some
-    sections (see 'Ed Note:' comments).  
-    
-    
-    Abstract 
-    
-    This document provides general information and high-level design for the
-    Internationalization extensions for the Common UNIX Printing System
-    ("CUPS") Version 1.2.  This document also provides C language header
-    files and high-level pseudo-code for all new modules and external
-    functions.  
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-    McDonald                     June 20, 2002                      [Page 1]
-\f
-           CUPS Internationalization Software Design Description v0.3       
-
-                               Table of Contents
-    
-    1.  Scope ......................................................       4
-      1.1.  Identification .........................................       4
-      1.2.  System Overview ........................................       4
-      1.3.  Document Overview ......................................       4
-    2.  References .................................................       5
-      2.1.  CUPS References ........................................       5
-      2.2.  Other Documents ........................................       5
-    3.  Design Overview ............................................       7
-      3.1.  Transcoding - New ......................................       7
-        3.1.1.  transcode.h - Transcoding header ...................       7
-          3.1.1.1.  cups_cmap_t - SBCS Charmap Structure ...........      10
-          3.1.1.2.  cups_dmap_t - DBCS Charmap Structure ...........      11
-        3.1.2.  transcode.c - Transcoding module ...................      11
-          3.1.2.1.  cupsUtf8ToCharset() ............................      11
-          3.1.2.2.  cupsCharsetToUtf8() ............................      12
-          3.1.2.3.  cupsUtf8ToUtf16() ..............................      12
-          3.1.2.4.  cupsUtf16ToUtf8() ..............................      12
-          3.1.2.5.  cupsUtf8ToUtf32() ..............................      12
-          3.1.2.6.  cupsUtf32ToUtf8() ..............................      13
-          3.1.2.7.  cupsUtf16ToUtf32() .............................      13
-          3.1.2.8.  cupsUtf32ToUtf16() .............................      13
-          3.1.2.9.  Transcoding Utility Functions ..................      13
-            3.1.2.9.1.  cupsCharmapGet() ...........................      14
-            3.1.2.9.2.  cupsCharmapFree() ..........................      14
-            3.1.2.9.3.  cupsCharmapFlush() .........................      14
-      3.2.  Normalization - New ....................................      15
-        3.2.1.  normalize.h - Normalization header .................      15
-          3.2.1.1.  cups_normmap_t - Normalize Map Structure .......      22
-          3.2.1.2.  cups_foldmap_t - Case Fold Map Structure .......      22
-          3.2.1.3.  cups_propmap_t - Char Property Map Structure ...      23
-          3.2.1.4.  cups_prop_t - Char Property Structure ..........      23
-          3.2.1.5.  cups_breakmap_t - Line Break Map Structure .....      23
-          3.2.1.6.  cups_combmap_t - Combining Class Map Structure .      24
-          3.2.1.7.  cups_comb_t - Combining Class Structure ........      24
-        3.2.2.  normalize.c - Normalization module .................      24
-          3.2.2.1.  cupsUtf8Normalize() ............................      24
-          3.2.2.2.  cupsUtf32Normalize() ...........................      25
-          3.2.2.3.  cupsUtf8CaseFold() .............................      25
-          3.2.2.4.  cupsUtf32CaseFold() ............................      26
-          3.2.2.5.  cupsUtf8CompareCaseless() ......................      26
-          3.2.2.6.  cupsUtf32CompareCaseless() .....................      26
-          3.2.2.7.  cupsUtf8CompareIdentifier() ....................      27
-          3.2.2.8.  cupsUtf32CompareIdentifier() ...................      27
-          3.2.2.9.  cupsUtf32CharacterProperty() ...................      27
-          3.2.2.10.  Normalization Utility Functions ...............      28
-            3.2.2.10.1.  cupsNormalizeMapsGet() ....................      28
-            3.2.2.10.2.  cupsNormalizeMapsFree() ...................      28
-            3.2.2.10.3.  cupsNormalizeMapsFlush() ..................      28
-      3.3.  Language - Existing ....................................      29
-        3.3.1.  language.h - Language header .......................      29
-
-    McDonald                     June 20, 2002                      [Page 2]
-\f
-           CUPS Internationalization Software Design Description v0.3       
-
-        3.3.2.  language.c - Language module .......................      29
-          3.3.2.1.  cupsLangEncoding() - Existing ..................      29
-          3.3.2.2.  cupsLangFlush() - Existing .....................      29
-          3.3.2.3.  cupsLangFree() - Existing ......................      29
-          3.3.2.4.  cupsLangGet() - Existing .......................      30
-          3.3.2.5.  cupsLangPrintf() - New .........................      30
-          3.3.2.6.  cupsLangPuts() - New ...........................      30
-          3.3.2.7.  cupsEncodingName() - New .......................      31
-      3.4.  Common Text Filter - Existing ..........................      31
-        3.4.1.  textcommon.h - Common text filter header ...........      31
-          3.4.1.1.  lchar_t - Character/Attribute Structure ........      31
-        3.4.2.  textcommon.c - Common text filter ..................      32
-          3.4.2.1.  TextMain() - Existing ..........................      32
-          3.4.2.2.  compare_keywords() - Existing ..................      33
-          3.4.2.3.  getutf8() - Existing ...........................      33
-      3.5.  Text to PostScript Filter - Existing ...................      33
-        3.5.1.  texttops.c - Text to PostScript filter .............      33
-          3.5.1.1.  main() - Existing ..............................      33
-          3.5.1.2.  WriteEpilogue () - Existing ....................      34
-          3.5.1.3.  WritePage () - Existing ........................      34
-          3.5.1.4.  WriteProlog () - Existing ......................      34
-          3.5.1.5.  write_line() - Existing ........................      34
-          3.5.1.6.  write_string() - Existing ......................      34
-          3.5.1.7.  write_text() - Existing ........................      35
-    A.  Glossary ...................................................   A-1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-    McDonald                     June 20, 2002                      [Page 3]
-\f
-           CUPS Internationalization Software Design Description v0.3       
-
-    
-    
-    1.  Scope
-    
-    
-    
-    1.1.  Identification
-    
-    This document provides general information and high-level design for the
-    Internationalization extensions for the Common UNIX Printing System
-    ("CUPS") Version 1.2.  This document also provides C language header
-    files and high-level pseudo-code for all new modules and external
-    functions.  
-    
-    
-    1.2.  System Overview
-    
-    The CUPS Internationalization extensions provide multilingual support
-    via Unicode 3.2:2002 [UNICODE3.2] / ISO-10646-1:2000 [ISO10646-1] and a 
-    suite of local character sets (including all adopted parts of ISO-8859
-    and many MS Windows code pages) for CUPS 1.2.  
-    
-    The CUPS Internationalization extensions support UTF-8 [RFC2279] as the 
-    common stream-oriented representation of all character data.  UTF-8 is
-    defined in [ISO10646-1] and is further constrained (for integrity and
-    security) by [UNICODE3.2].  
-    
-    UTF-8 is the native character set of LDAPv3 [RFC2251], SLPv2 [RFC2608], 
-    IPP/1.1 [RFC2910] [RFC2911], and many other Internet protocols.  
-    
-    
-    1.3.  Document Overview
-    
-    
-    This software design description document is organized into the
-    following sections:  
-    
-    o   1 - Scope 
-    o   2 - References 
-    o   3 - Design Overview 
-    o   A - Glossary 
-
-
-
-
-
-
-
-
-
-
-
-
-    McDonald                     June 20, 2002                      [Page 4]
-\f
-           CUPS Internationalization Software Design Description v0.3       
-
-    
-    
-    2.  References
-    
-    
-    
-    2.1.  CUPS References
-    
-    See:  Section 2.1 'CUPS Documentation' of CUPS Software Design
-    Description.  
-    
-    
-    2.2.  Other Documents
-    
-    The following non-CUPS documents are referenced by this document.  
-    
-    [ANSI-X3.4] ANSI Coded Character Set - 7-bit American National Standard 
-    Code for Information Interchange, ANSI X3.4, 1986 (aka US-ASCII).  
-    
-    [GB2312] Code of Chinese Graphic Character Set for Information
-    Interchange, Primary Set, GB 2312, 1980.  
-    
-    [ISO639-1] Codes for the Representation of Names of Languages -- Part 1:
-    Alpha-2 Code, ISO/IEC 639-1, 2000.  
-    
-    [ISO639-2] Codes for the Representation of Names of Languages -- Part 2:
-    Alpha-3 Code, ISO/IEC 639-2, 1998.  
-    
-    [ISO646] Information Technology - ISO 7-bit Coded Character Set for
-    Information Interchange, ISO/IEC 646, 1991.  
-    
-    [ISO2022] Information Processing - ISO 7-bit and 8-bit Coded Character
-    Sets - Code Extension Techniques, ISO/IEC 2022, 1994.  (Technically
-    identical to ECMA-35.) 
-    
-    [ISO3166-1] Codes for the Representation of Names of Countries and their
-    Subdivisions, Part 1:  Country Codes, ISO/ISO 3166-1, 1997.  
-    
-    [ISO8859] Information Processing - 8-bit Single-Byte Code Graphic
-    Character Sets, ISO/IEC 8859-n, 1987-2001.  
-    
-    [ISO10646-1] Information Technology - Universal Multiple-Octet Code
-    Character Set (UCS) - Part 1:  Architecture and Basic Multilingual
-    Plane, ISO/IEC 10646-1, September 2000.  
-    
-    [ISO10646-2] Information Technology - Universal Multiple-Octet Code
-    Character Set (UCS) - Part 2:  Supplemental Planes, ISO/IEC 10646-2,
-    January 2001.  
-    
-    [RFC2119] Bradner.  Key words for use in RFCs to Indicate Requirement
-    Levels, RFC 2119, March 1997.  
-
-
-    McDonald                     June 20, 2002                      [Page 5]
-\f
-           CUPS Internationalization Software Design Description v0.3       
-
-    
-    [RFC2251] Whal, Howes, Kille.  Lightweight Directory Access Protocol
-    Version 3 (LDAPv3), RFC 2251, December 1997.  
-    
-    [RFC2277] Alvestrand.  IETF Policy on Character Sets and Languages, RFC
-    2277, January 1998.  
-    
-    [RFC2279] Yergeau.  UTF-8, a Transformation Format of ISO 10646, RFC
-    2279, January 1998.  
-    
-    [RFC2608] Guttman, Perkins, Veizades, Day.  Service Location Protocol
-    Version 2 (SLPv2), RFC 2608, June 1999.  
-    
-    [RFC2910] Herriot, Butler, Moore, Turner, Wenn.  Internet Printing
-    Protocol/1.1:  Encoding and Transport, RFC 2910, September 2000.  
-    
-    [RFC2911] Hastings, Herriot, deBry, Isaacson, Powell.  Internet Printing
-    Protocol/1.1:  Model and Semantics, RFC 2911, September 2000.  
-    
-    [UNICODE3.0] Unicode Consortium, Unicode Standard Version 3.0,
-    Addison-Wesley Developers Press, ISBN 0-201-61633-5, 2000.  
-    
-    [UNICODE3.1] Unicode Consortium, Unicode Standard Version 3.1 (UAX-27), 
-    May 2001.  
-    
-    [UNICODE3.2] Unicode Consortium, Unicode Standard Version 3.2 (UAX-28), 
-    March 2002.  
-    
-    [US-ASCII] See [ANSI-X3.4] above.  
-    
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-    McDonald                     June 20, 2002                      [Page 6]
-\f
-           CUPS Internationalization Software Design Description v0.3       
-
-    
-    
-    3.  Design Overview
-    
-    The CUPS Internationalization extensions are composed of several header 
-    files and modules which extend the Language functions in the existing
-    CUPS Application Programmers Interface (API).  
-    
-    
-    3.1.  Transcoding - New
-    
-    Initially, the CUPS Internationalization extensions will only support
-    SBCS (single-byte character set) transcoding.  But the design allows
-    future support for DBCS (double-byte character set) transcoding for CJK
-    (Chinese/Japanese/Korean) languages and the MBCS (multiple-byte
-    character set) compound sets that use escapes for charset switching.  
-    
-    In order to reduce code size and increase performance all conventional
-    'mapping files' (tables of values in legacy characters sets with their
-    corresponding Unicode scalar values) will ALSO be sorted and stored in
-    memory as reverse maps (for efficient conversion from Unicode scalar
-    values to their corresponding legacy character set values).  Transcoding
-    will be done directly by 2-level lookup (without any searching or
-    sorting).  
-    
-    [Ed Note:  CJK languages will be fairly costly in mapping table sizes,
-    because they have thousands (or tens of thousands) of codepoints.] 
-    
-    
-    
-    3.1.1.  transcode.h - Transcoding header
-    
-    /*
-     * "$Id: i18n_sdd.txt 2678 2002-08-19 01:15:26Z mike $"
-     *
-     *   Transcoding support for the Common UNIX Printing System (CUPS).
-     *
-     *   Copyright 1997-2002 by Easy Software Products.
-     *
-     *   These coded instructions, statements, and computer programs are
-     *   the property of Easy Software Products and are protected by Federal
-     *   copyright law.  Distribution and use rights are outlined in the
-     *   file "LICENSE.txt" which should have been included with this file.
-     *   If this file is missing or damaged please contact Easy Software
-     *   Products at:
-     *
-     *       Attn: CUPS Licensing Information
-     *       Easy Software Products
-     *       44141 Airport View Drive, Suite 204
-     *       Hollywood, Maryland 20636-3111 USA
-     *
-     *       Voice: (301) 373-9603
-
-    McDonald                     June 20, 2002                      [Page 7]
-\f
-           CUPS Internationalization Software Design Description v0.3       
-
-     *       EMail: cups-info@cups.org
-     *         WWW: http://www.cups.org
-     */
-    
-    #ifndef _CUPS_TRANSCODE_H_
-    #  define _CUPS_TRANSCODE_H_
-    
-    /*
-     * Include necessary headers...
-     */
-    
-    #  include "cups/language.h"
-    
-    #  ifdef __cplusplus
-    extern "C" {
-    #  endif /* __cplusplus */
-    
-    /*
-     * Types...
-     */
-    
-    typedef unsigned char  utf8_t;  /* UTF-8 Unicode/ISO-10646 code unit */
-    typedef unsigned short utf16_t; /* UTF-16 Unicode/ISO-10646 code unit */
-    typedef unsigned long  utf32_t; /* UTF-32 Unicode/ISO-10646 code unit */
-    typedef unsigned short ucs2_t;  /* UCS-2 Unicode/ISO-10646 code unit */
-    typedef unsigned long  ucs4_t;  /* UCS-4 Unicode/ISO-10646 code unit */
-    typedef unsigned char  sbcs_t;  /* SBCS Legacy 8-bit code unit */
-    typedef unsigned short dbcs_t;  /* DBCS Legacy 16-bit code unit */
-    
-    /*
-     * Structures...
-     */
-    
-    typedef struct cups_cmap_str    /**** SBCS Charmap Cache Structure ****/
-    {
-      struct cups_cmap_str  *next;          /* Next charmap in cache */
-      int                   used;           /* Number of times entry used */
-      cups_encoding_t       encoding;       /* Legacy charset encoding */
-      ucs2_t                char2uni[256];  /* Map Legacy SBCS -> UCS-2 */
-      sbcs_t                *uni2char[256]; /* Map UCS-2 -> Legacy SBCS */
-    } cups_cmap_t;
-    
-    #if 0
-    typedef struct cups_dmap_str    /**** DBCS Charmap Cache Structure ****/
-    {
-      struct cups_dmap_str  *next;          /* Next charmap in cache */
-      int                   used;           /* Number of times entry used */
-      cups_encoding_t       encoding;       /* Legacy charset encoding */
-      ucs2_t                *char2uni[256]; /* Map Legacy DBCS -> UCS-2 */
-      dbcs_t                *uni2char[256]; /* Map UCS-2 -> Legacy DBCS */
-    } cups_dmap_t;
-    #endif
-
-    McDonald                     June 20, 2002                      [Page 8]
-\f
-           CUPS Internationalization Software Design Description v0.3       
-
-    
-    /*
-     * Constants...
-     */
-    #define CUPS_MAX_USTRING    1024    /* Maximum size of Unicode string */
-    
-    /*
-     * Globals...
-     */
-    
-    extern int      TcFixMapNames;  /* Fix map names to Unicode names */
-    extern int      TcStrictUtf8;   /* Non-shortest-form is illegal */
-    extern int      TcStrictUtf16;  /* Invalid surrogate pair is illegal */
-    extern int      TcStrictUtf32;  /* Greater than 0x10FFFF is illegal */
-    extern int      TcRequireBOM;   /* Require BOM for little/big-endian */
-    extern int      TcSupportBOM;   /* Support BOM for little/big-endian */
-    extern int      TcSupport8859;  /* Support ISO 8859-x repertoires */
-    extern int      TcSupportWin;   /* Support Windows-x repertoires */
-    extern int      TcSupportCJK;   /* Support CJK (Asian) repertoires */
-    
-    /*
-     * Prototypes...
-     */
-    
-    /*
-     * Utility functions for character set maps
-     */
-    extern void     *cupsCharmapGet(const cups_encoding_t encoding);
-                                                    /* I - Encoding */
-    extern void     cupsCharmapFree(const cups_encoding_t encoding);
-                                                    /* I - Encoding */
-    extern void     cupsCharmapFlush(void);
-    
-    /*
-     * Convert UTF-8 to and from legacy character set
-     */
-    extern int      cupsUtf8ToCharset(char *dest,   /* O - Target string */
-                        const utf8_t *src,          /* I - Source string */
-                        const int maxout,           /* I - Max output */
-                        cups_encoding_t encoding);  /* I - Encoding */
-    extern int      cupsCharsetToUtf8(utf8_t *dest, /* O - Target string */
-                        const char *src,            /* I - Source string */
-                        const int maxout,           /* I - Max output */
-                        cups_encoding_t encoding);  /* I - Encoding */
-    
-    /*
-     * Convert UTF-8 to and from UTF-16
-     */
-    extern int      cupsUtf8ToUtf16(utf16_t *dest,  /* O - Target string */
-                        const utf8_t *src,          /* I - Source string */
-                        const int maxout);          /* I - Max output */
-    extern int      cupsUtf16ToUtf8(utf8_t *dest,   /* O - Target string */
-
-    McDonald                     June 20, 2002                      [Page 9]
-\f
-           CUPS Internationalization Software Design Description v0.3       
-
-                        const utf16_t *src,         /* I - Source string */
-                        const int maxout);          /* I - Max output */
-    
-    /*
-     * Convert UTF-8 to and from UTF-32
-     */
-    extern int      cupsUtf8ToUtf32(utf32_t *dest,  /* O - Target string */
-                        const utf8_t *src,          /* I - Source string */
-                        const int maxout);          /* I - Max output */
-    extern int      cupsUtf32ToUtf8(utf8_t *dest,   /* O - Target string */
-                        const utf32_t *src,         /* I - Source string */
-                        const int maxout);          /* I - Max output */
-    
-    /*
-     * Convert UTF-16 to and from UTF-32
-     */
-    extern int      cupsUtf16ToUtf32(utf32_t *dest, /* O - Target string */
-                        const utf16_t *src,         /* I - Source string */
-                        const int maxout);          /* I - Max output */
-    extern int      cupsUtf32ToUtf16(utf16_t *dest, /* O - Target string */
-                        const utf32_t *src,         /* I - Source string */
-                        const int maxout);          /* I - Max output */
-    
-    #  ifdef __cplusplus
-    }
-    #  endif /* __cplusplus */
-    
-    #endif /* !_CUPS_TRANSCODE_H_ */
-    
-    /*
-     * End of "$Id: i18n_sdd.txt 2678 2002-08-19 01:15:26Z mike $"
-     */
-    
-    
-    
-    3.1.1.1.  cups_cmap_t - SBCS Charmap Structure
-    
-    typedef struct cups_cmap_str    /**** SBCS Charmap Cache Structure ****/
-    {
-      struct cups_cmap_str  *next;          /* Next charset map in cache */
-      int                   used;           /* Number of times entry used */
-      cups_encoding_t       encoding;       /* Legacy charset encoding */
-      ucs2_t                char2uni[256];  /* Map Legacy SBCS -> UCS-2 */
-      sbcs_t                *uni2char[256]; /* Map UCS-2 -> Legacy SBCS */
-    } cups_cmap_t;
-    
-    'char2uni[]' is a (complete) array of UCS-2 values that supports direct 
-    one-level lookup from an input SBCS legacy charset code point, for use
-    by 'cupsCharsetToUtf8()'.  
-    
-    'uni2char[]' is a (sparse) array of pointers to arrays of (256 each)
-    SBCS values, that supports direct two-level lookup from an input UCS-2
-
-    McDonald                     June 20, 2002                     [Page 10]
-\f
-           CUPS Internationalization Software Design Description v0.3       
-
-    code point, for use by 'cupsUtf8ToCharset()'.  
-    
-    
-    
-    3.1.1.2.  cups_dmap_t - DBCS Charmap Structure
-    
-    typedef struct cups_dmap_str    /**** DBCS Charmap Cache Structure ****/
-    {
-      struct cups_dmap_str  *next;          /* Next charset map in cache */
-      int                   used;           /* Number of times entry used */
-      cups_encoding_t       encoding;       /* Legacy charset encoding */
-      ucs2_t                *char2uni[256]; /* Map Legacy DBCS -> UCS-2 */
-      dbcs_t                *uni2char[256]; /* Map UCS-2 -> Legacy DBCS */
-    } cups_dmap_t;
-    
-    'char2uni[]' is a (sparse) array of pointers to arrays of (256 each)
-    UCS-2 values that supports direct two-level lookup from an input DBCS
-    legacy charset code point, for (future) use by 'cupsCharsetToUtf8()'.  
-    
-    'uni2char[]' is a (sparse) array of pointers to arrays of (256 each)
-    DBCS values, that supports direct two-level lookup from an input UCS-2
-    code point, for (future) use by 'cupsUtf8ToCharset()'.  
-    
-    
-    
-    3.1.2.  transcode.c - Transcoding module
-    
-    All of the transcoding functions are modelled on the C standard library 
-    function 'strncpy()', except that they return the count of output, like
-    'strlen()', rather than the (redundant) pointer to the output.  
-    
-    If the transcoding functions detect invalid input parameters or they
-    detect an encoding error in their input, then they return '-1', rather
-    than the count of output.  
-    
-    All of the transcoding functions take an input parameter indicating the 
-    maximum output units (for safe operation).  The functions that return
-    16-bit (UTF-16) or 32-bit (UTF-32/UCS-4) output always return the output
-    string count (not including the final null) and NOT the memory size in
-    bytes.  
-    
-    
-    
-    3.1.2.1.  cupsUtf8ToCharset()
-    
-    extern int      cupsUtf8ToCharset(char *dest,   /* O - Target string */
-                        const utf8_t *src,          /* I - Source string */
-                        const int maxout,           /* I - Max output */
-                        cups_encoding_t encoding);  /* I - Encoding */
-    
-    <Find charset map by calling 'cupsCharmapGet()'>
-    <Convert input UTF-8 to internal UCS-4 by calling 'cupsUtf8ToUtf32()'>
-
-    McDonald                     June 20, 2002                     [Page 11]
-\f
-           CUPS Internationalization Software Design Description v0.3       
-
-    <Convert internal UCS-4 to legacy charset via charset map>
-    <Release charset map by calling 'cupsCharmapFree()'>
-    <Return length of output legacy charset string -- size in butes>
-    
-    
-    
-    3.1.2.2.  cupsCharsetToUtf8()
-    
-    extern int      cupsCharsetToUtf8(utf8_t *dest, /* O - Target string */
-                        const char *src,            /* I - Source string */
-                        const int maxout,           /* I - Max output */
-                        cups_encoding_t encoding);  /* I - Encoding */
-    
-    <Find charset map by calling 'cupsCharmapGet()'>
-    <Convert input legacy charset to internal UCS-4 via charset map>
-    <Convert internal UCS-4 to UTF-8 by calling 'cupsUtf32ToUtf8()'>
-    <Release charset map by calling 'cupsCharmapFree()'>
-    <Return length of output UTF-8 string -- size in bytes>
-    
-    
-    
-    3.1.2.3.  cupsUtf8ToUtf16()
-    
-    extern int      cupsUtf8ToUtf16(utf16_t *dest,  /* O - Target string */
-                        const utf8_t *src,          /* I - Source string */
-                        const int maxout);          /* I - Max output */
-    
-    <...to avoid duplicate code to handle surrogate pairs...>
-    <Convert input UTF-8 to internal UCS-4 by calling 'cupsUtf8ToUtf32()'>
-    <Convert internal UCS-4 to UTF-16 by calling 'cupsUtf32ToUtf16()'>
-    <Return count of output UTF-16 string -- NOT memory size in bytes>
-    
-    
-    
-    3.1.2.4.  cupsUtf16ToUtf8()
-    
-    extern int      cupsUtf16ToUtf8(utf8_t *dest,   /* O - Target string */
-                        const utf16_t *src,         /* I - Source string */
-                        const int maxout);          /* I - Max output */
-    
-    <...to avoid duplicate code to handle surrogate pairs...>
-    <Convert input UTF-16 to internal UCS-4 by calling 'cupsUtf16ToUtf32()'>
-    <Convert internal UCS-4 to UTF-8 by calling 'cupsUtf32ToUtf8()'>
-    <Return length of output UTF-8 string -- size in bytes>
-    
-    
-    
-    3.1.2.5.  cupsUtf8ToUtf32()
-    
-    extern int      cupsUtf8ToUtf32(utf32_t *dest,  /* O - Target string */
-                        const utf8_t *src,          /* I - Source string */
-                        const int maxout);          /* I - Max output */
-
-    McDonald                     June 20, 2002                     [Page 12]
-\f
-           CUPS Internationalization Software Design Description v0.3       
-
-    
-    <Convert input UTF-8 directly to output UCS-4...>
-    <...checking for valid range, shortest-form, etc.>
-    <Return count of output UTF-32 string -- NOT memory size in bytes>
-    
-    
-    
-    3.1.2.6.  cupsUtf32ToUtf8()
-    
-    extern int      cupsUtf32ToUtf8(utf8_t *dest,   /* O - Target string */
-                        const utf32_t *src,         /* I - Source string */
-                        const int maxout);          /* I - Max output */
-    
-    <Convert input UCS-4 directly to output UTF-8...>
-    <...checking for valid range, etc.>
-    <Return length of output UTF-8 string -- size in bytes>
-    
-    
-    
-    3.1.2.7.  cupsUtf16ToUtf32()
-    
-    extern int      cupsUtf16ToUtf32(utf32_t *dest, /* O - Target string */
-                        const utf16_t *src,         /* I - Source string */
-                        const int maxout);          /* I - Max output */
-    
-    <Convert input UTF-16 directly to output UCS-4...>
-    <...handling surrogate pairs decoding from UTF-16>
-    <Return count of output UTF-32 string -- NOT memory size in bytes>
-    
-    
-    
-    3.1.2.8.  cupsUtf32ToUtf16()
-    
-    extern int      cupsUtf32ToUtf16(utf16_t *dest, /* O - Target string */
-                        const utf32_t *src,         /* I - Source string */
-                        const int maxout);          /* I - Max output */
-    
-    <Convert input UCS-4 directly to output UTF-16...>
-    <...handling surrogate pairs encoding to UTF-16>
-    <Return count of output UTF-16 string -- NOT memory size in bytes>
-    
-    
-    
-    3.1.2.9.  Transcoding Utility Functions
-    
-    The transcoding utility functions are used to load (from a file into
-    memory), free (logically, without freeing memory), and flush (actually
-    free memory) character maps for SBCS (single-byte character set) and
-    (future) DBCS (double-byte character set) transcoding to and from UTF-8.
-    
-
-
-
-    McDonald                     June 20, 2002                     [Page 13]
-\f
-           CUPS Internationalization Software Design Description v0.3       
-
-    
-    
-    3.1.2.9.1.  cupsCharmapGet()
-    
-    extern void     *cupsCharmapGet(const cups_encoding_t encoding);
-                                                    /* I - Encoding */
-    
-    <Find SBSC or DBCS charset map in cache>
-    <...If found, increment 'used'>
-    <...and return pointer to SBCS or DBCS charset map>
-    <Get charset map file name by calling 'cupsEncodingName()'>
-    <Open charset map file>
-    <...If not found, return void>
-    <Allocate memory for SBCS or DBCS charset map in cache>
-    <...If no memory, return void>
-    <Add to SBCS or DBCS cache by assigning 'next' field>
-    <Assign 'encoding' field>
-    <Increment 'used' field>
-    <Read charset map file into memory in loop...>
-    <If SBCS, then 'char2uni[]' is an array of 'ucs2_t' values>
-    <...and 'uni2char[]' is an array of pointers to 'sbcs_t' arrays>
-    <If DBCS, then char2uni[]' is an array of pointers to 'ucs2_t' arrays>
-    <...and 'uni2char[]' is an array of pointers to 'dbcs_t' arrays>
-    <Close charset map file>
-    <Return pointer to SBCS or DBCS charset map>
-    
-    
-    
-    3.1.2.9.2.  cupsCharmapFree()
-    
-    extern void     cupsCharmapFree(const cups_encoding_t encoding);
-                                                    /* I - Encoding */
-    
-    <Find SBSC or DBCS charset map in cache>
-    <...If found, decrement 'used'>
-    <Return void>
-    
-    
-    
-    3.1.2.9.3.  cupsCharmapFlush()
-    
-    extern void     cupsCharmapFlush(void);
-    
-    <Loop through SBCS charset map cache...>
-    <...Free 'uni2char[]' memory>
-    <...Free SBCS charset map memory>
-    <Loop through DBCS charset map cache...>
-    <...Free 'char2uni[]' memory>
-    <...Free 'uni2char[]' memory>
-    <...Free DBCS charset map memory>
-    <Return void>
-
-
-    McDonald                     June 20, 2002                     [Page 14]
-\f
-           CUPS Internationalization Software Design Description v0.3       
-
-    
-    
-    
-    3.2.  Normalization - New
-    
-    
-    
-    3.2.1.  normalize.h - Normalization header
-    
-    /*
-     * "$Id: i18n_sdd.txt 2678 2002-08-19 01:15:26Z mike $"
-     *
-     *   Unicode normalization for the Common UNIX Printing System (CUPS).
-     *
-     *   Copyright 1997-2002 by Easy Software Products.
-     *
-     *   These coded instructions, statements, and computer programs are
-     *   the property of Easy Software Products and are protected by Federal
-     *   copyright law.  Distribution and use rights are outlined in the
-     *   file "LICENSE.txt" which should have been included with this file.
-     *   If this file is missing or damaged please contact Easy Software
-     *   Products at:
-     *
-     *       Attn: CUPS Licensing Information
-     *       Easy Software Products
-     *       44141 Airport View Drive, Suite 204
-     *       Hollywood, Maryland 20636-3111 USA
-     *
-     *       Voice: (301) 373-9603
-     *       EMail: cups-info@cups.org
-     *         WWW: http://www.cups.org
-     */
-    
-    #ifndef _CUPS_NORMALIZE_H_
-    #  define _CUPS_NORMALIZE_H_
-    
-    /*
-     * Include necessary headers...
-     */
-    
-    #  include "transcod.h"
-    
-    #  ifdef __cplusplus
-    extern "C" {
-    #  endif /* __cplusplus */
-    
-    /*
-     * Types...
-     */
-    
-    typedef enum                    /**** Normalizataion Types ****/
-    {
-
-    McDonald                     June 20, 2002                     [Page 15]
-\f
-           CUPS Internationalization Software Design Description v0.3       
-
-      CUPS_NORM_NFD,                /* Canonical Decomposition */
-      CUPS_NORM_NFKD,               /* Compatibility Decomposition */
-      CUPS_NORM_NFC,                /* NFD, them Canonical Composition */
-      CUPS_NORM_NFKC                /* NFKD, them Canonical Composition */
-    } cups_normalize_t;
-    
-    typedef enum                    /**** Case Folding Types ****/
-    {
-      CUPS_FOLD_SIMPLE,             /* Simple - no expansion in size */
-      CUPS_FOLD_FULL                /* Full - possible expansion in size */
-    } cups_folding_t;
-    
-    typedef enum                    /**** Unicode Char Property Types ****/
-    {
-      CUPS_PROP_GENERAL_CATEGORY,   /* See 'cups_gencat_t' enum */
-      CUPS_PROP_BIDI_CATEGORY,      /* See 'cups_bidicat_t' enum */
-      CUPS_PROP_COMBINING_CLASS,    /* See 'cups_combclass_t' type */
-      CUPS_PROP_BREAK_CLASS         /* See 'cups_breakclass_t' enum */
-    } cups_property_t;
-    
-    /*
-     * Note - parse Unicode char general category from 'UnicodeData.txt'
-     * into sparse local table in 'normalize.c'.
-     * Use major classes for logic optimizations throughout (by mask).
-     */
-    
-    typedef enum                    /**** Unicode General Category ****/
-    {
-      CUPS_GENCAT_L  = 0x10, /* Letter major class */
-      CUPS_GENCAT_LU = 0x11, /* Lu Letter, Uppercase */
-      CUPS_GENCAT_LL = 0x12, /* Ll Letter, Lowercase */
-      CUPS_GENCAT_LT = 0x13, /* Lt Letter, Titlecase */
-      CUPS_GENCAT_LM = 0x14, /* Lm Letter, Modifier */
-      CUPS_GENCAT_LO = 0x15, /* Lo Letter, Other */
-      CUPS_GENCAT_M  = 0x20, /* Mark major class */
-      CUPS_GENCAT_MN = 0x21, /* Mn Mark, Non-Spacing */
-      CUPS_GENCAT_MC = 0x22, /* Mc Mark, Spacing Combining */
-      CUPS_GENCAT_ME = 0x23, /* Me Mark, Enclosing */
-      CUPS_GENCAT_N  = 0x30, /* Number major class */
-      CUPS_GENCAT_ND = 0x31, /* Nd Number, Decimal Digit */
-      CUPS_GENCAT_NL = 0x32, /* Nl Number, Letter */
-      CUPS_GENCAT_NO = 0x33, /* No Number, Other */
-      CUPS_GENCAT_P  = 0x40, /* Punctuation major class */
-      CUPS_GENCAT_PC = 0x41, /* Pc Punctuation, Connector */
-      CUPS_GENCAT_PD = 0x42, /* Pd Punctuation, Dash */
-      CUPS_GENCAT_PS = 0x43, /* Ps Punctuation, Open (start) */
-      CUPS_GENCAT_PE = 0x44, /* Pe Punctuation, Close (end) */
-      CUPS_GENCAT_PI = 0x45, /* Pi Punctuation, Initial Quote */
-      CUPS_GENCAT_PF = 0x46, /* Pf Punctuation, Final Quote */
-      CUPS_GENCAT_PO = 0x47, /* Po Punctuation, Other */
-      CUPS_GENCAT_S  = 0x50, /* Symbol major class */
-      CUPS_GENCAT_SM = 0x51, /* Sm Symbol, Math */
-
-    McDonald                     June 20, 2002                     [Page 16]
-\f
-           CUPS Internationalization Software Design Description v0.3       
-
-      CUPS_GENCAT_SC = 0x52, /* Sc Symbol, Currency */
-      CUPS_GENCAT_SK = 0x53, /* Sk Symbol, Modifier */
-      CUPS_GENCAT_SO = 0x54, /* So Symbol, Other */
-      CUPS_GENCAT_Z  = 0x60, /* Separator major class */
-      CUPS_GENCAT_ZS = 0x61, /* Zs Separator, Space */
-      CUPS_GENCAT_ZL = 0x62, /* Zl Separator, Line */
-      CUPS_GENCAT_ZP = 0x63, /* Zp Separator, Paragraph */
-      CUPS_GENCAT_C  = 0x70, /* Other (miscellaneous) major class */
-      CUPS_GENCAT_CC = 0x71, /* Cc Other, Control */
-      CUPS_GENCAT_CF = 0x72, /* Cf Other, Format */
-      CUPS_GENCAT_CS = 0x73, /* Cs Other, Surrogate */
-      CUPS_GENCAT_CO = 0x74, /* Co Other, Private Use */
-      CUPS_GENCAT_CN = 0x75  /* Cn Other, Not Assigned */
-    } cups_gencat_t;
-    
-    /*
-     * Note - parse Unicode char bidi category from 'UnicodeData.txt'
-     * into sparse local table in 'normalize.c'.
-     * Add bidirectional support to 'textcommon.c' - per Mike
-     */
-    
-    typedef enum                    /**** Unicode Bidi Category ****/
-    {
-      CUPS_BIDI_L,   /* Left-to-Right (Alpha, Syllabic, Ideographic) */
-      CUPS_BIDI_LRE, /* Left-to-Right Embedding (explicit) */
-      CUPS_BIDI_LRO, /* Left-to-Right Override (explicit) */
-      CUPS_BIDI_R,   /* Right-to-Left (Hebrew alphabet and most punct) */
-      CUPS_BIDI_AL,  /* Right-to-Left Arabic (Arabic, Thaana, Syriac) */
-      CUPS_BIDI_RLE, /* Right-to-Left Embedding (explicit) */
-      CUPS_BIDI_RLO, /* Right-to-Left Override (explicit) */
-      CUPS_BIDI_PDF, /* Pop Directional Format */
-      CUPS_BIDI_EN,  /* Euro Number (Euro and East Arabic-Indic digits) */
-      CUPS_BIDI_ES,  /* Euro Number Separator (Slash) */
-      CUPS_BIDI_ET,  /* Euro Number Termintor (Plus, Minus, Degree, etc) */
-      CUPS_BIDI_AN,  /* Arabic Number (Arabic-Indic digits, separators) */
-      CUPS_BIDI_CS,  /* Common Number Separator (Colon, Comma, Dot, etc) */
-      CUPS_BIDI_NSM, /* Non-Spacing Mark (category Mn / Me in UCD) */
-      CUPS_BIDI_BN,  /* Boundary Neutral (Formatting / Control chars) */
-      CUPS_BIDI_B,   /* Paragraph Separator */
-      CUPS_BIDI_S,   /* Segment Separator (Tab) */
-      CUPS_BIDI_WS,  /* Whitespace Space (Space, Line Separator, etc) */
-      CUPS_BIDI_ON   /* Other Neutrals */
-    } cups_bidicat_t;
-    
-    /*
-     * Note - parse Unicode line break class from 'DerivedLineBreak.txt'
-     * into sparse local table (list of class ranges) in 'normalize.c'.
-     * Note - add state table from UAX-14, section 7.3 - Ira
-     * Remember to do BK and SP in outer loop (not in state table).
-     * Consider optimization for CM (combining mark).
-     * See 'LineBreak.txt' (12,875) and 'DerivedLineBreak.txt' (1,350).
-     */
-
-    McDonald                     June 20, 2002                     [Page 17]
-\f
-           CUPS Internationalization Software Design Description v0.3       
-
-    
-    typedef enum                    /**** Unicode Line Break Class ****/
-    {
-     /*
-      * (A) - Allow Break AFTER
-      * (XA) - Prevent Break AFTER
-      * (B) - Allow Break BEFORE
-      * (XB) - Prevent Break BEFORE
-      * (P) - Allow Break For Pair
-      * (XP) - Prevent Break For Pair
-      */
-      CUPS_BREAK_AI, /* Ambiguous (Alphabetic or Ideograph) */
-      CUPS_BREAK_AL, /* Ordinary Alphabetic / Symbol Chars (XP) */
-      CUPS_BREAK_BA, /* Break Opportunity After Chars (A) */
-      CUPS_BREAK_BB, /* Break Opportunities Before Chars (B) */
-      CUPS_BREAK_B2, /* Break Opportunity Before / After (B/A/XP) */
-      CUPS_BREAK_BK, /* Mandatory Break (A) (normative) */
-      CUPS_BREAK_CB, /* Contingent Break (B/A) (normative) */
-      CUPS_BREAK_CL, /* Closing Punctuation (XB) */
-      CUPS_BREAK_CM, /* Attached Chars / Combining (XB) (normative) */
-      CUPS_BREAK_CR, /* Carriage Return (A) (normative) */
-      CUPS_BREAK_EX, /* Exclamation / Interrogation (XB) */
-      CUPS_BREAK_GL, /* Non-breaking ("Glue") (XB/XA) (normative) */
-      CUPS_BREAK_HY, /* Hyphen (XA) */
-      CUPS_BREAK_ID, /* Ideographic (B/A) */
-      CUPS_BREAK_IN, /* Inseparable chars (XP) */
-      CUPS_BREAK_IS, /* Numeric Separator (Infix) (XB) */
-      CUPS_BREAK_LF, /* Line Feed (A) (normative) */
-      CUPS_BREAK_NS, /* Non-starters (XB) */
-      CUPS_BREAK_NU, /* Numeric (XP) */
-      CUPS_BREAK_OP, /* Opening Punctuation (XA) */
-      CUPS_BREAK_PO, /* Postfix (Numeric) (XB) */
-      CUPS_BREAK_PR, /* Prefix (Numeric) (XA) */
-      CUPS_BREAK_QU, /* Ambiguous Quotation (XB/XA) */
-      CUPS_BREAK_SA, /* Context Dependent (South East Asian) (P) */
-      CUPS_BREAK_SG, /* Surrogates (XP) (normative) */
-      CUPS_BREAK_SP, /* Space (A) (normative) */
-      CUPS_BREAK_SY, /* Symbols Allowing Break After (A) */
-      CUPS_BREAK_XX, /* Unknown (XP) */
-      CUPS_BREAK_ZW  /* Zero Width Space (A) (normative) */
-    } cups_breakclass_t;
-    
-    typedef int cups_combclass_t;   /**** Unicode Combining Class ****/
-                                    /* 0=base / 1..254=combining char */
-    
-    /*
-     * Structures...
-     */
-    
-    typedef struct cups_normmap_str /**** Normalize Map Cache Struct ****/
-    {
-      struct cups_normmap_str *next;        /* Next normalize in cache */
-
-    McDonald                     June 20, 2002                     [Page 18]
-\f
-           CUPS Internationalization Software Design Description v0.3       
-
-      int                   used;           /* Number of times entry used */
-      cups_normalize_t      normalize;      /* Normalization type */
-      int                   normcount;      /* Count of Source Chars */
-      ucs2_t                *uni2norm;      /* Char -> Normalization */
-                                            /* ...only supports UCS-2 */
-    } cups_normmap_t;
-    
-    typedef struct cups_foldmap_str /**** Case Fold Map Cache Struct ****/
-    {
-      struct cups_foldmap_str *next;        /* Next case fold in cache */
-      int                   used;           /* Number of times entry used */
-      cups_folding_t        fold;           /* Case folding type */
-      int                   foldcount;      /* Count of Source Chars */
-      ucs2_t                *uni2fold;      /* Char -> Folded Char(s) */
-                                            /* ...only supports UCS-2 */
-    } cups_foldmap_t;
-    
-    typedef struct cups_prop_str    /**** Char Property Struct ****/
-    {
-      ucs2_t                ch;             /* Unicode Char as UCS-2 */
-      unsigned char         gencat;         /* General Category */
-      unsigned char         bidicat;        /* Bidirectional Category */
-    } cups_prop_t;
-    
-    typedef struct                  /**** Char Property Map Struct ****/
-    {
-      int                   used;           /* Number of times entry used */
-      int                   propcount;      /* Count of Source Chars */
-      cups_prop_t           *uni2prop;      /* Char -> Properties */
-    } cups_propmap_t;
-    
-    typedef struct                  /**** Line Break Class Map Struct ****/
-    {
-      int                   used;           /* Number of times entry used */
-      int                   breakcount;     /* Count of Source Chars */
-      ucs2_t                *uni2break;     /* Char -> Line Break Class */
-    } cups_breakmap_t;
-    
-    typedef struct cups_comb_str    /**** Char Combining Class Struct ****/
-    {
-      ucs2_t                ch;             /* Unicode Char as UCS-2 */
-      unsigned char         combclass;      /* Combining Class */
-      unsigned char         reserved;       /* Reserved for alignment */
-    } cups_comb_t;
-    
-    typedef struct                  /**** Combining Class Map Struct ****/
-    {
-      int                   used;           /* Number of times entry used */
-      int                   combcount;      /* Count of Source Chars */
-      cups_comb_t           *uni2comb;      /* Char -> Combining Class */
-    } cups_combmap_t;
-
-
-    McDonald                     June 20, 2002                     [Page 19]
-\f
-           CUPS Internationalization Software Design Description v0.3       
-
-    
-    /*
-     * Globals...
-     */
-    
-    extern int      NzSupportUcs2;  /* Support UCS-2 (16-bit) mapping */
-    extern int      NzSupportUcs4;  /* Support UCS-4 (32-bit) mapping */
-    
-    /*
-     * Prototypes...
-     */
-    
-    /*
-     * Utility functions for normalization module
-     */
-    extern int      cupsNormalizeMapsGet(void);
-    extern int      cupsNormalizeMapsFree(void);
-    extern void     cupsNormalizeMapsFlush(void);
-    
-    /*
-     * Normalize UTF-8 string to Unicode UAX-15 Normalization Form
-     * Note - Compatibility Normalization Forms (NFKD/NFKC) are
-     * unsafe for subsequent transcoding to legacy charsets
-     */
-    extern int      cupsUtf8Normalize(utf8_t *dest, /* O - Target string */
-                        const utf8_t *src,          /* I - Source string */
-                        const int maxout,           /* I - Max output */
-                        const cups_normalize_t normalize);
-                                                    /* I - Normalization */
-    
-    /*
-     * Normalize UTF-32 string to Unicode UAX-15 Normalization Form
-     * Note - Compatibility Normalization Forms (NFKD/NFKC) are
-     * unsafe for subsequent transcoding to legacy charsets
-     */
-    extern int      cupsUtf32Normalize(utf32_t *dest,
-                                                    /* O - Target string */
-                        const utf32_t *src,         /* I - Source string */
-                        const int maxout,           /* I - Max output */
-                        const cups_normalize_t normalize);
-                                                    /* I - Normalization */
-    
-    /*
-     * Case Fold UTF-8 string per Unicode UAX-21 Section 2.3
-     * Note - Case folding output is
-     * unsafe for subsequent transcoding to legacy charsets
-     */
-    extern int      cupsUtf8CaseFold(utf8_t *dest,  /* O - Target string */
-                        const utf8_t *src,          /* I - Source string */
-                        const int maxout,           /* I - Max output */
-                        const cups_folding_t fold); /* I - Fold Mode */
-
-
-    McDonald                     June 20, 2002                     [Page 20]
-\f
-           CUPS Internationalization Software Design Description v0.3       
-
-    
-    /*
-     * Case Fold UTF-32 string per Unicode UAX-21 Section 2.3
-     * Note - Case folding output is
-     * unsafe for subsequent transcoding to legacy charsets
-     */
-    extern int      cupsUtf32CaseFold(utf32_t *dest,/* O - Target string */
-                        const utf32_t *src,         /* I - Source string */
-                        const int maxout,           /* I - Max output */
-                        const cups_folding_t fold); /* I - Fold Mode */
-    
-    /*
-     * Compare UTF-8 strings after case folding
-     */
-    extern int      cupsUtf8CompareCaseless(const utf8_t *s1,
-                                                    /* I - String1 */
-                        const utf8_t *s2);          /* I - String2 */
-    
-    /*
-     * Compare UTF-32 strings after case folding
-     */
-    extern int      cupsUtf32CompareCaseless(const utf32_t *s1,
-                                                    /* I - String1 */
-                        const utf32_t *s2);         /* I - String2 */
-    
-    /*
-     * Compare UTF-8 strings after case folding and NFKC normalization
-     */
-    extern int      cupsUtf8CompareIdentifier(const utf8_t *s1,
-                                                    /* I - String1 */
-                        const utf8_t *s2);          /* I - String2 */
-    
-    /*
-     * Compare UTF-32 strings after case folding and NFKC normalization
-     */
-    extern int      cupsUtf32CompareIdentifier(const utf32_t *s1,
-                                                    /* I - String1 */
-                        const utf32_t *s2);         /* I - String2 */
-    
-    /*
-     * Get UTF-32 character property
-     */
-    extern int      cupsUtf32CharacterProperty(const utf32_t ch,
-                                                    /* I - Source char */
-                        const cups_property_t property);
-                                                    /* I - Char Property */
-    
-    #  ifdef __cplusplus
-    }
-    #  endif /* __cplusplus */
-    
-    #endif /* !_CUPS_NORMALIZE_H_ */
-
-    McDonald                     June 20, 2002                     [Page 21]
-\f
-           CUPS Internationalization Software Design Description v0.3       
-
-    
-    /*
-     * End of "$Id: i18n_sdd.txt 2678 2002-08-19 01:15:26Z mike $"
-     */
-    
-    
-    
-    3.2.1.1.  cups_normmap_t - Normalize Map Structure
-    
-    typedef struct cups_normmap_str /**** Normalize Map Cache Struct ****/
-    {
-      struct cups_normmap_str *next;        /* Next normalize in cache */
-      int                   used;           /* Number of times entry used */
-      cups_normalize_t      normalize;      /* Normalization type */
-      int                   normcount;      /* Count of Source Chars */
-      ucs2_t                *uni2norm;      /* Char -> Normalization */
-                                            /* ...only supports UCS-2 */
-    } cups_normmap_t;
-    
-    'uni2norm' is a pointer to an array of _triplets_ of UCS-2 values.
-    'normcount' is a count of _triplets_ in the 'uni2norm[]' array.  
-    
-    For decompositions (NFD and NFKD), the triplets are:  composed base
-    character, decomposed base character, and decomposed accent character.  
-    These are used by 'cupsUtf8Normalize()' and 'cupsUtf32Normalize()' in
-    performing canonical (NFD) or compatibility (NFKD) decomposition.  
-    
-    For compositions (NFC and NFKC), the triplets are:  decomposed base
-    character, decomposed accent character, and composed base character.
-    These are used by 'cupsUtf8Normalize()' and 'cupsUtf32Normalize()' in
-    performing canonical composition (for NFC or NFKC).  
-    
-    
-    
-    3.2.1.2.  cups_foldmap_t - Case Fold Map Structure
-    
-    typedef struct cups_foldmap_str /**** Case Fold Map Cache Struct ****/
-    {
-      int                   used;           /* Number of times entry used */
-      cups_folding_t        fold;           /* Case folding type */
-      int                   foldcount;      /* Count of Source Chars */
-      ucs2_t                *uni2fold;      /* Char -> Folded Char(s) */
-                                            /* ...only supports UCS-2 */
-    } cups_foldmap_t;
-    
-    'uni2fold' is a pointer to an array of _quadruplets_ of UCS-2 values.
-    'foldcount' is a count of _quadruplets_ in the 'uni2fold[]' array.  
-    
-    For simple case folding (without expansion of the size of the output
-    string), the quadruplets are:  input base character, output case folded 
-    character, zero (unused), and zero (unused).  
-
-
-    McDonald                     June 20, 2002                     [Page 22]
-\f
-           CUPS Internationalization Software Design Description v0.3       
-
-    
-    For full case folding (with possible expansion of the size of the output
-    string), the quadruplets are:  input base character, output case folded 
-    character, second output character or zero, third output character or
-    zero.  
-    
-    
-    
-    3.2.1.3.  cups_propmap_t - Char Property Map Structure
-    
-    typedef struct                  /**** Char Property Map Struct ****/
-    {
-      int                   used;           /* Number of times entry used */
-      int                   propcount;      /* Count of Source Chars */
-      cups_prop_t           *uni2prop;      /* Char -> Properties */
-    } cups_propmap_t;
-    
-    'uni2prop' is a pointer to an array of 'cups_prop_t' (see below).
-    'propcount' is a count of elements in the 'uni2prop[]' array.  
-    
-    
-    
-    3.2.1.4.  cups_prop_t - Char Property Structure
-    
-    typedef struct cups_prop_str    /**** Char Property Struct ****/
-    {
-      ucs2_t                ch;             /* Unicode Char as UCS-2 */
-      unsigned char         gencat;         /* General Category */
-      unsigned char         bidicat;        /* Bidirectional Category */
-    } cups_prop_t;
-    
-    
-    
-    3.2.1.5.  cups_breakmap_t - Line Break Map Structure
-    
-    typedef struct                  /**** Line Break Class Map Struct ****/
-    {
-      int                   used;           /* Number of times entry used */
-      int                   breakcount;     /* Count of Source Chars */
-      ucs2_t                *uni2break;     /* Char -> Line Break Class */
-    } cups_breakmap_t;
-    
-    'uni2break' is a pointer to an array of _triplets_ of UCS-2 values.
-    'breakcount' is a count of _triplets_ in the 'uni2break[]' array.  
-    
-    The triplets in 'uni2break' are:  first UCS-2 value in a range, last
-    UCS-2 value in a range, and line break class stored as UCS-2.  
-    
-
-
-
-
-
-    McDonald                     June 20, 2002                     [Page 23]
-\f
-           CUPS Internationalization Software Design Description v0.3       
-
-    
-    
-    3.2.1.6.  cups_combmap_t - Combining Class Map Structure
-    
-    typedef struct                  /**** Combining Class Map Struct ****/
-    {
-      int                   used;           /* Number of times entry used */
-      int                   combcount;      /* Count of Source Chars */
-      cups_comb_t           *uni2comb;      /* Char -> Combining Class */
-    } cups_combmap_t;
-    
-    'uni2comb' is a pointer to an array of 'cups_comb_t' (see below).
-    'combcount' is a count of elements in the 'uni2comb[]' array.  
-    
-    
-    
-    3.2.1.7.  cups_comb_t - Combining Class Structure
-    
-    typedef struct cups_comb_str    /**** Char Combining Class Struct ****/
-    {
-      unsigned short        ch;             /* Unicode Char as UCS-2 */
-      unsigned char         combclass;      /* Combining Class */
-      unsigned char         reserved;       /* Reserved for alignment */
-    } cups_comb_t;
-    
-    
-    
-    3.2.2.  normalize.c - Normalization module
-    
-    The normalization function 'cupsUtf8Normalize()' and the case folding
-    function 'cupsUtf8CaseFold()' are modelled on the C standard library
-    function 'strncpy()', except that they return the count of the output,
-    like 'strlen()', rather than the (redundant) pointer to the output.  
-    
-    If the normalization or case folding functions detect invalid input
-    parameters or they detect an encoding error in their input, then they
-    return '-1', rather than the count of output.  
-    
-    The normalization and case folding functions take an input parameter
-    indicating the maximum output units (for safe operation).  
-    
-    
-    
-    3.2.2.1.  cupsUtf8Normalize()
-    
-    /*
-     * Normalize UTF-8 string to Unicode UAX-15 Normalization Form
-     * Note - Compatibility Normalization Forms (NFKD/NFKC) are
-     * unsafe for subsequent transcoding to legacy charsets
-     */
-    extern int      cupsUtf8Normalize(utf8_t *dest, /* O - Target string */
-                        const utf8_t *src,          /* I - Source string */
-
-    McDonald                     June 20, 2002                     [Page 24]
-\f
-           CUPS Internationalization Software Design Description v0.3       
-
-                        const int maxout,           /* I - Max output */
-                        const cups_normalize_t normalize);
-                                                    /* I - Normalization */
-    
-    <Convert input UTF-8 to internal UCS-4 by calling 'cupsUtf8ToUtf32()'>
-    <Normalize by calling 'cupsUtf32Normalize()'>
-    <Convert normalized UCS-4 to UTF-8 by calling 'cupsUtf32ToUtf8()>
-    <Return length of output UTF-8 string -- size in butes>
-    
-    
-    
-    3.2.2.2.  cupsUtf32Normalize()
-    
-    extern int      cupsUtf32Normalize(utf32_t *dest,
-                                                    /* O - Target string */
-                        const utf32_t *src,         /* I - Source string */
-                        const int maxout,           /* I - Max output */
-                        const cups_normalize_t normalize);
-                                                    /* I - Normalization */
-    
-    <Find normalize maps by calling 'cupsNormalizeMapsGet()'>
-    <...if not found, return '-1'>
-    <Repeatedly traverse internal UCS-4, decomposing (NFD or NFKD)...>
-    <...with 'bsearch()' of 'uni2norm[]' using local 'compare_decompose()'>
-    <...until one pass yields no further decomposition>
-    <Repeatedly traverse internal UCS-4, doing canonical reordering>
-    <...with 'bsearch()' of 'uni2comb[]' using local 'compare_combchar()'>
-    <...until one pass yields no further canonical reordering>
-    <If 'normalize' requests composition (NFC or NFKC)...>
-    <...repeatedly traverse internal UCS-4, composing (NFC or NFKC)...>
-    <...with 'bsearch()' of 'uni2norm[]' using local 'compare_compose()'>
-    <...until one pass yields no further composition>
-    <Release normalize maps by calling 'cupsNormalizeMapsFree()'>
-    <Return count of output UTF-32 string -- NOT memory size in butes>
-    
-    
-    
-    3.2.2.3.  cupsUtf8CaseFold()
-    
-    /*
-     * Case Fold UTF-8 string per Unicode UAX-21 Section 2.3
-     * Note - Case folding output is
-     * unsafe for subsequent transcoding to legacy charsets
-     */
-    extern int      cupsUtf8CaseFold(utf8_t *dest,  /* O - Target string */
-                        const utf8_t *src,          /* I - Source string */
-                        const int maxout,           /* I - Max output */
-                        const cups_folding_t fold); /* I - Fold Mode */
-    
-    <Find normalize maps by calling 'cupsNormalizeMapsGet()'>
-    <...if not found, return '-1'>
-    <Convert input UTF-8 to internal UCS-4 by calling 'cupsUtf8ToUtf32()'>
-
-    McDonald                     June 20, 2002                     [Page 25]
-\f
-           CUPS Internationalization Software Design Description v0.3       
-
-    <Case fold internal UCS-4 by calling 'cupsUtf32CaseFold()'>
-    <Convert internal UCS-4 to output UTF-8 by calling 'cupsUtf32ToUtf8()>
-    <Release normalize maps by calling 'cupsNormalizeMapsFree()'>
-    <Return length of output UTF-8 string -- size in butes>
-    
-    
-    
-    3.2.2.4.  cupsUtf32CaseFold()
-    
-    /*
-     * Case Fold UTF-32 string per Unicode UAX-21 Section 2.3
-     * Note - Case folding output is
-     * unsafe for subsequent transcoding to legacy charsets
-     */
-    extern int      cupsUtf32CaseFold(utf32_t *dest,    /* Target string */
-                        const utf32_t *src,            /* Source string */
-                        const int maxout);            /* Max output units */
-    
-    <Find case fold maps by calling 'cupsNormalizeMapsGet()'>
-    <...if not found, return '-1'>
-    <Traverse internal UCS-4 once, performing case folding...>
-    <...with 'bsearch()' of 'uni2fold[]' using local 'compare_foldchar()'>
-    <Copy internal UCS-4 to output UTF-32 string>
-    <Release normalize maps by calling 'cupsNormalizeMapsFree()'>
-    <Return count of output UTF-32 string -- NOT memory size in bytes>
-    
-    
-    
-    3.2.2.5.  cupsUtf8CompareCaseless()
-    
-    /*
-     * Compare UTF-8 strings after case folding
-     */
-    extern int      cupsUtf8CompareCaseless(const utf8_t *s1,
-                                                    /* I - String1 */
-                        const utf8_t *s2);          /* I - String2 */
-    
-    <Case fold both input UTF-8 strings by calling 'cupsUtf8CaseFold()'>
-    <Return compare of case folded first and second strings>
-    
-    
-    
-    3.2.2.6.  cupsUtf32CompareCaseless()
-    
-    /*
-     * Compare UTF-32 strings after case folding
-     */
-    extern int      cupsUtf32CompareCaseless(const utf32_t *s1,
-                                                    /* I - String1 */
-                        const utf32_t *s2);         /* I - String2 */
-    
-    <Case fold both input UTF-32 strings by calling 'cupsUtf32CaseFold()'>
-
-    McDonald                     June 20, 2002                     [Page 26]
-\f
-           CUPS Internationalization Software Design Description v0.3       
-
-    <Return compare of case folded first and second strings>
-    
-    
-    
-    3.2.2.7.  cupsUtf8CompareIdentifier()
-    
-    /*
-     * Compare UTF-8 strings after case folding and NFKC normalization
-     */
-    extern int      cupsUtf8CompareIdentifier(const utf8_t *s1,
-                                                    /* I - String1 */
-                        const utf8_t *s2);          /* I - String2 */
-    
-    <Convert input UTF-8 to internal UCS-4 by calling 'cupsUtf8ToUtf32()'>
-    <Case fold both strings by calling 'cupsUtf32CaseFold()'>
-    <Normalize both strings to NFKC by calling 'cupsUtf32Normalize()'>
-    <Return compare of case folded/normalized first and second strings>
-    
-    
-    
-    3.2.2.8.  cupsUtf32CompareIdentifier()
-    
-    /*
-     * Compare UTF-32 strings after case folding and NFKC normalization
-     */
-    extern int      cupsUtf32CompareIdentifier(const utf32_t *s1,
-                                                    /* I - String1 */
-                        const utf32_t *s2);         /* I - String2 */
-    
-    <Case fold both strings by calling 'cupsUtf32CaseFold()'>
-    <Normalize both strings to NFKC by calling 'cupsUtf32Normalize()'>
-    <Return compare of case folded/normalized first and second strings>
-    
-    
-    
-    3.2.2.9.  cupsUtf32CharacterProperty()
-    
-    /*
-     * Get UTF-32 character property
-     */
-    extern int      cupsUtf32CharacterProperty(const utf32_t ch,
-                                                    /* I - Source char */
-                        const cups_property_t property);
-                                                    /* I - Char Property */
-    
-    <Lookup UTF-32 character property in appropriate map...> <...internal
-    functions for each different map lookup> 
-    
-
-
-
-
-
-    McDonald                     June 20, 2002                     [Page 27]
-\f
-           CUPS Internationalization Software Design Description v0.3       
-
-    
-    
-    3.2.2.10.  Normalization Utility Functions
-    
-    
-    
-    
-    3.2.2.10.1.  cupsNormalizeMapsGet()
-    
-    extern void     cupsNormalizeMapsMapsGet(void);
-    
-    <Find normalize maps in cache>
-    <...If found, increment 'used'>
-    <...and return void>
-    <For each map (normalization, case fold, combining class, etc.)...>
-    <Open (preprocessed form of) Unicode data file...>
-    <...If not found, return void>
-    <Count lines in preprocessed form, for mapping memory alloc>
-    <...Close (preprocessed form of) Unicode data file>
-    <Open (preprocessed form of) Unicode data file...>
-    <...If not found, return void>
-    <Allocate memory for approriate map in cache...>
-    <...If no memory, return void>
-    <Add to appropriate cache by assigning 'next' field>
-    <Assign map type field and count field>
-    <Increment 'used' field>
-    <Read normalize map into memory in loop...>
-    <...Add values to 'uni2xxx[]' array>
-    <Close (preprocessed form of) Unicode data file>
-    <Return void>
-    
-    
-    
-    3.2.2.10.2.  cupsNormalizeMapsFree()
-    
-    extern void     cupsNormalizeMapsFree(void);
-    
-    <Find normalize maps in cache>
-    <...If found, decrement 'used'>
-    <Return void>
-    
-    
-    
-    3.2.2.10.3.  cupsNormalizeMapsFlush()
-    
-    extern void     cupsNormalizeMapsFlush(void);
-    
-    <Loop through normalize maps cache...>
-    <...Free 'uni2norm[]' memory>
-    <...Free normalize map memory>
-    <Loop through case folding cache...>
-    <...Free 'uni2fold[]' memory>
-
-    McDonald                     June 20, 2002                     [Page 28]
-\f
-           CUPS Internationalization Software Design Description v0.3       
-
-    <...Free case folding memory>
-    <Loop through char property map cache...>
-    <...Free 'uni2prop[]' memory>
-    <...Free char property map memory>
-    <Loop through line break class map cache...>
-    <...Free 'uni2break[]' memory>
-    <...Free line break class map memory>
-    <Loop through combining class map cache...>
-    <...Free 'uni2comb[]' memory>
-    <...Free combining class map memory>
-    <Return void>
-    
-    
-    
-    3.3.  Language - Existing
-    
-    
-    
-    3.3.1.  language.h - Language header
-    
-    Required Changes:  
-    
-    (1) Change definition of 'cups_lang_t' to correct length of 'language[]'
-        to 32 characters per [RFC3066] and [ISO639-2] and [ISO3166-1].  
-    
-    
-    
-    3.3.2.  language.c - Language module
-    
-    
-    
-    3.3.2.1.  cupsLangEncoding() - Existing
-    
-    [No Change] 
-    
-    
-    
-    3.3.2.2.  cupsLangFlush() - Existing
-    
-    [No Change] 
-    
-    
-    
-    3.3.2.3.  cupsLangFree() - Existing
-    
-    [No Change] 
-    
-
-
-
-
-
-
-    McDonald                     June 20, 2002                     [Page 29]
-\f
-           CUPS Internationalization Software Design Description v0.3       
-
-    
-    
-    3.3.2.4.  cupsLangGet() - Existing
-    
-    Required Changes:  
-    
-    (1) Change length of 'langname[]' and 'real[]' to 64 characters per
-        [RFC3066] and potential length of encoding (charset) names; 
-    (2) Change language string normalization to support:  
-        (a) 8-character language codes per [RFC3066] and 3-character
-        language codes per [ISO639-2]; 
-        (b) 8-character country codes per [RFC3066] and 3-character country 
-        codes per [ISO3166-1]; 
-        (c) Support for 'i' (IANA registered) and 'x' (private) language
-        prefixes per [RFC3066]; 
-        (d) Invariant use of 'utf-8' for encoding in message catalog, but
-        save actual requested encoding name for later use.  
-    (3) Correct broken do/while statement for message catalog lookup (while
-        condition is _never_ satisfied).  
-    
-    
-    
-    3.3.2.5.  cupsLangPrintf() - New
-    
-    extern  int     cupsLangPrintf(FILE *fp,        /* I - File to write */
-                        const cups_lang_t *lang,    /* I - Language/locale*/
-                        const cups_msg_t msg,       /* I - Msg to format */
-                        ...);                       /* I - Args to format */
-    
-    <Set up variable args by calling 'va_start()'>
-    <Format CUPS message with variable args by calling 'vsnprintf()'>
-    <Clean up variable args by calling 'va_end()'>
-    <Transcode CUPS message by calling 'cupsUtf8ToCharset()'>
-    <Write CUPS message by calling 'fputs()'>
-    <Return transcoded output CUPS message length>
-    
-    
-    
-    3.3.2.6.  cupsLangPuts() - New
-    
-    extern  int     cupsLangPuts(FILE *fp,          /* I - File to write */
-                        const cups_lang_t *lang,    /* I - Language/locale*/
-                        const cups_msg_t msg);      /* I - Msg to write */
-    
-    <Transcode CUPS message by calling 'cupsUtf8ToCharset()'>
-    <Write CUPS message by calling 'fputs()'>
-    <Return transcoded output CUPS message length>
-    
-
-
-
-
-
-    McDonald                     June 20, 2002                     [Page 30]
-\f
-           CUPS Internationalization Software Design Description v0.3       
-
-    
-    
-    3.3.2.7.  cupsEncodingName() - New
-    
-    extern  char    *cupsEncodingName(cups_encoding_t encoding);
-    
-    <Lookup encoding name in static 'lang_encodings[]' array>
-    <Return pointer to encoding name (charset map file name)>
-    
-    
-    
-    3.4.  Common Text Filter - Existing
-    
-    
-    
-    3.4.1.  textcommon.h - Common text filter header
-    
-    Required changes:  
-    
-    (1) Revise 'lchar_t' as specified below, adding 'attrx' bit-mask for
-        selected Unicode character properties; 
-    (2) Revise 'lchar_t' as specified below, adding 'comblen' and 'combch[]'
-        for Unicode combining/attached chars (accents); 
-    (3) Add 'COMBLEN_MAX' limit as specified below; 
-    (4) Add 'ATTRX_...' selected Unicode character properties as specified
-        below.  
-    
-    
-    
-    3.4.1.1.  lchar_t - Character/Attribute Structure
-    
-    typedef struct lchar_str    /**** Character / Attribute Structure ****/
-    {
-      unsigned short        ch;             /* Unicode Char as UCS-2 */
-                                            /* or 8/16-bit Legacy Char */
-      unsigned short        attr;           /* Attributes of Char */
-      unsigned short        attrx;          /* Extended Attributes */
-      unsigned short        comblen;        /* Combining Char Count */
-      unsigned short        combch[8];      /* Combining Chars as UCS-2 */
-    } lchar_t;
-    
-    'ch' is a 16-bit UCS-2 character or a 8/16-bit legacy char.  'attr' is
-    the character attributes defined for the existing 'lchar_t' structure
-    (defined in 'textcommon.h').  'attrx' is the extended character
-    attributes defined for future selected Unicode character properties (see
-    below).  'comblen' is the number of attached/combining characters.
-    'combch' is an array of 16-bit UCS-2 attached/combining characters.  
-    
-    Add to 'textcommon.h' constants:  
-    
-    COMBLEN_MAX 8
-
-
-    McDonald                     June 20, 2002                     [Page 31]
-\f
-           CUPS Internationalization Software Design Description v0.3       
-
-    
-    ATTRX_RIGHT2LEFT 0x0001
-    
-    
-    
-    3.4.2.  textcommon.c - Common text filter
-    
-    Required Changes:  
-    
-    (1) Revise 'TextMain()' function as described below.  
-    
-    
-    
-    3.4.2.1.  TextMain() - Existing
-    
-    Required Changes:  
-    
-    [Ed Note:  Pseudo code below needs more work on bidi handling.] 
-    
-    (1) In main loop at the _beginning_ of the 'default' clause, add the
-        following code for combining marks:  
-        lchar_t *cp;
-        
-        cp = Page[line];
-        cp += column;
-        /*
-         * Check for Unicode combining mark (accent)
-         */
-        if (UTF-8 && cupsUtf32CombiningClass(ch) > 0)
-        {
-        
-         /*
-          * Save Unicode combining mark in SAME character
-          */
-          if (cp->comblen > COMBLEN_MAX)
-            break;
-          cp->combch[cp->comblen] = ch;
-          cp->comblen ++;
-          break;
-        }
-        
-    (2) In main loop _after_ combining chars section in 'default' clause,
-        add the following code for Unicode bidi control characters 
-        cups_bidicat_t bidicat;
-        
-        /*
-         * Check for Unicode bidi control character
-         */
-        if (UTF-8)
-        {
-          bidicat = (cups_bidicat_t)
-            cupsUtf32CharacterProperty(ch, CUPS_PROP_BIDI_CATEGORY);
-
-    McDonald                     June 20, 2002                     [Page 32]
-\f
-           CUPS Internationalization Software Design Description v0.3       
-
-          if ((bidicat == CUPS_BIDI_LRE)        /* Left-to-Right Embedding *
-          || (bidicat == CUPS_BIDI_LRO)         /* Left-to-Right Override */
-          || (bidicat == CUPS_BIDI_RLE)         /* Right-to-Left Embedding *
-          || (bidicat == CUPS_BIDI_RLO)         /* Right-to-Left Override */
-          || (bidicat == CUPS_BIDI_PDF))        /* Pop Directional Format */
-          {
-            /* Do bidi stuff here with memory for NEXT char's direction
-            /* Discard bidi control character and break */
-          }
-          if ((bidicat == CUPS_BIDI_R)           /* Right-to-Left Hebrew */
-          || (bidicat == CUPS_BIDI_AL))          /* Right-to-Left Arabic */
-          {
-            /* Set attrx for right-to-left */
-            cp->attrx |= ATTRX_RIGHT2LEFT
-          }
-        }
-    
-    
-    
-    3.4.2.2.  compare_keywords() - Existing
-    
-    [No Change] 
-    
-    
-    
-    3.4.2.3.  getutf8() - Existing
-    
-    [No Change] 
-    
-    [Ed Note:  Future - allow 20-bit UTF-32 code points - requires updates
-    in both 'textcommon.c' and 'texttops.c' for extended PostScript.] 
-    
-    
-    
-    3.5.  Text to PostScript Filter - Existing
-    
-    
-    
-    3.5.1.  texttops.c - Text to PostScript filter
-    
-    Required Changes:  
-    
-    (1) Revise local 'write_string()' function as described below.  
-    
-    
-    
-    3.5.1.1.  main() - Existing
-    
-    [No Change] 
-    
-
-
-
-    McDonald                     June 20, 2002                     [Page 33]
-\f
-           CUPS Internationalization Software Design Description v0.3       
-
-    
-    
-    3.5.1.2.  WriteEpilogue () - Existing
-    
-    [No Change] 
-    
-    
-    
-    3.5.1.3.  WritePage () - Existing
-    
-    [No Change] 
-    
-    
-    
-    3.5.1.4.  WriteProlog () - Existing
-    
-    [No Change] 
-    
-    
-    
-    3.5.1.5.  write_line() - Existing
-    
-    [No Change] 
-    
-    
-    
-    3.5.1.6.  write_string() - Existing
-    
-    Required Changes:  
-    
-    (1) At the _beginning_ of Multiple Fonts section, _replace_ the while() 
-        loop and surrounding 'putchar()' calls with the following code:  
-        
-        for (; len > 0; len --, s ++)
-        {
-          utf32_t decstr[COMBLEN_MAX * 2];
-          utf32_t cmpstr[COMBLEN_MAX * 2];
-          int     cmplen;
-          int     i;
-        
-          if (s->comblen == 0)
-          {
-            printf("<%04x>", Chars[s->ch]);
-            continue;
-          }
-        
-         /*
-          * Normalize decomposed Unicode character to NFKC
-          * (compatibility decomposition, then canonical composition)
-          */
-          decstr[0] = (utf32_t) s->ch;
-          for (i = 0; i < s->comblen; i ++)
-
-    McDonald                     June 20, 2002                     [Page 34]
-\f
-           CUPS Internationalization Software Design Description v0.3       
-
-            decstr[i + 1] = (utf32_t) s->combch[i];
-          decstr[i] = 0;
-          cmplen = cupsUtf32Normalize (&cmpstr[0],
-                       &decstr[0], COMBLEN_MAX * 2, CUPS_NORM_NFKC);
-          if (cmplen < 1)
-            continue;
-        
-         /*
-          * Write combining chars, then composed base, to same location
-          */
-          for (i = 1; i < cmplen; i ++)
-          {
-            printf("<%04x>", Chars[(int) cmpstr[i]);
-           /*
-            * Superimpose glyphs by backing up one column width
-            */
-            printf (" -%.3f ", (72.0f / (float) CharsPerInch));
-          }
-          printf("<%04x>", Chars[(int) cmpstr[0]);
-        }
-    
-    [Ed Note:  Future - Bidi support - When writing Unicode characters
-    (checking for explicit bidi) convert input string (lchar_t) to display
-    order???] 
-    
-    
-    
-    3.5.1.7.  write_text() - Existing
-    
-    [No Change] 
-    
-    
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-    McDonald                     June 20, 2002                     [Page 35]
-\f
-           CUPS Internationalization Software Design Description v0.3       
-                                   APPENDIX A                               
-                                    Glossary                                
-
-    
-    
-    A.  Glossary
-    
-    Abstract Character:  A unit of information used for the organization,
-    control, or representation of textual data.  
-    
-    Accent Mark:  A mark placed above, below, or to the side of a character 
-    to alter its phonetic value (also 'diacritic').  
-    
-    Alphabet:  A collection of symbols that, in the context of a particular 
-    written language, represent the sounds of that language.  
-    
-    Base Character:  A character that does not graphically combine with
-    preceding characters, and that is neither a control nor a format
-    character.  
-    
-    Basic Multilingual Plane:  The Unicode (or UCS) code values 0x0000
-    through 0xFFFF, specified by [ISO10646] (also 'Plane 0').  
-    
-    BIDI:  Abbreviation for Bidirectional, in reference to mixed
-    left-to-right and right-to-left text.  
-    
-    Bidirectional Display:  The process or result of mixing left-to-right
-    oriented text and right-to-left oriented text in a single line.  
-    
-    Big-endian:  A computer architecture that stores multiple-byte numerical
-    values with the most significant byte (MSB) values first.  
-    
-    BMP:  Abbreviation for Basic Multilingual Plane.  
-    
-    BOM:  Acronym for byte order mark (also 'ZWNBSP').  
-    
-    Byte Order Mark:  The Unicode character U+FEFF Zero Width No-Break Space
-    (ZWNBSP) when used to indicate the byte order of text.  
-    
-    Canonical:  (1) Conforming to the general rules for encoding -- that is,
-    not compressed, compacted, or in any other form specified by a higher
-    protocol.  (2) Characteristic of a normative mapping and form of
-    equivalence.  
-    
-    Canonical Decomposition:  The decomposition of a character that results 
-    from recursively applying the canonical mappings defined in the Unicode 
-    Character Database until no characters can be further decomposed, then
-    reordering nonspacing marks according to section 3.10 of [UNICODE3.2].  
-    
-    Canonical Equivalent:  Two characters are canonical equivalents if their
-    full canonical decompositions are identical.  
-    
-    Case:  (1) Feature of certain alphabets wheere the letters have two
-
-    McDonald                    June 20, 2002                     [Page A-1]
-\f
-           CUPS Internationalization Software Design Description v0.3       
-                                   APPENDIX A                               
-                                    Glossary                                
-
-    distinct forms.  These variants are called the 'uppercase' letter (also 
-    known as 'capital' or 'majuscule') and the 'lowercase' letter (also
-    known as 'small' or 'minuscule').  (2) Normative property of Unicode
-    characters, consisting of uppercase, lowercase, and titlecase.  
-    
-    Character:  (1) The smallest component of written language that has
-    semantic value; refers to the abstract meaning and/or shape, rather than
-    a specific shape (see also 'glyph').  (2) Synonym for 'abstract
-    character'.  (3) The basic unit of encoding for the Unicode character
-    encoding.  (4) The English name for the ideographic written elements of 
-    Chinese origin (see 'ideograph').  
-    
-    Character Encoding Form (CEF):  Mapping from a character set definition 
-    to the actual bits used to represent the data.  
-    
-    Character Encoding Scheme (CES):  A 'character encoding form' plus byte 
-    serialization.  [UNICODE3.2] defines seven character encoding schemes:  
-    UTF-8, UTF-16, UTF-16BE, UTF-16LE, UTF-32, UTF-32BE, and UTF32-LE.  
-    
-    Character Properties:  A set of property names and property values
-    associated with individual characters defined in [UNICODE3.2].  
-    
-    Character Repertoire:  (1) The collection of characters included in a
-    character set.  (2) The SUBSET of characters included in a large
-    character set, e.g., [UNICODE3.2], that are necessary to support a
-    complete mapping to another smaller character set, e.g., ISO8859-1 (also
-    called 'Latin-1').  
-    
-    Character Set:  A collection of elements used to represent textual
-    information.  
-    
-    Coded Character Set:  A character set in which each character is
-    assigned a numeric code value.  Frequently abbreviated as 'character
-    set', 'charset', or 'code set'.  
-    
-    Code Point:  (1) A numerical index (or position) in an encoding table
-    used for encoding characters.  (2) Synonym for 'Unicode scalar value'.  
-    
-    Collation:  The process of ordering units of textual information.
-    Collation is usually specific to a particular language.  Also known as
-    'alphabetizing' or 'alphabetic sorting'.  
-    
-    Combining Character:  A character that graphically combines with a
-    preceding 'base character'.  The combining character is said to 'apply' 
-    to that base character.  (See also 'nonspacing mark'.) 
-    
-    Compatibility:  (1) Consistency with existing practice or preexisting
-    character encoding standards.  (2) Characterisitic of a normative
-    mapping and form of equivalence (see 'compatibility decomposition').  
-
-
-    McDonald                    June 20, 2002                     [Page A-2]
-\f
-           CUPS Internationalization Software Design Description v0.3       
-                                   APPENDIX A                               
-                                    Glossary                                
-
-    
-    Compatibility Character:  A character that has a compatibility
-    decomposition.  
-    
-    Compatibility Decomposition:  The decomposition of a character that
-    results from recursively applying BOTH the compatibility mappings AND
-    the canonical mappings found in the Unicode Character Database until no
-    characters can be further decomposed, then reordering nonspacing marks
-    according to section 3.10 of [UNICODE3.2].  
-    
-    Compatibility Equivalent:  Two characters are compatibility equivalents 
-    if their full compatibility decompositions are identical.  
-    
-    Composed Character:  (See 'descomposable character'.) 
-    
-    DBCS:  Acronym for 'double-byte character set'.  
-    
-    Decomposable Character:  A character that is equivalent to a sequence of
-    one or more other characters, according to the decomposition mappings
-    found in [UNICODE3.2].  It may also be known as a 'precomposed
-    character' or a 'composite character'.  
-    
-    Decomposition:  (1) The process of separating or analyzing a text
-    element into component units.  (2) A sequence of one or more characters 
-    that is equivalent to a 'decomposable character'.  
-    
-    Diacritic:  (See 'accent mark'.) 
-    
-    Double-Byte Character Set (DBCS):  One of a number of character sets
-    defined for representing Chinese, Japanese, or Korean text (for example,
-    JIS X 0208-1990).  These character sets are often encoded in such a way 
-    as to allow double-byte character encodings to be mixed with single-byte
-    character encodings.  (See also 'multiple-byte character set'.) 
-    
-    Font:  A collection of glyphs used for visual depication of character
-    data.  
-    
-    FSS-UTF:  Abbreviation for 'File System Safe UCS Transformation Format',
-    originally published by X/Open.  Now called 'UTF-8'.  
-    
-    Fullwidth:  Characters of East Asian character sets whose glyph image
-    extends across the entire character display cell.  In legacy character
-    sets, fullwidth characters are normally encoded in two or three bytes.  
-    
-    Glyph:  (1) An abstract form that represents one or more glyph images.  
-    (2) A synonym for 'glyph image'.  
-    
-    Glyph Image:  The actual, concrete image of a glyph representation
-    having been rasterized or otherwise images onto some display surface.  
-
-
-    McDonald                    June 20, 2002                     [Page A-3]
-\f
-           CUPS Internationalization Software Design Description v0.3       
-                                   APPENDIX A                               
-                                    Glossary                                
-
-    
-    Halfwidth:  Characters of East Asian character sets whose glyph image
-    occupies half of the character display cell.  In legacy character sets, 
-    halfwidth characters are normally encoded in a single byte.  
-    
-    Han Characters:  Ideographic characters of Chinese origin.  
-    
-    Hangul:  The name of the script used to write the Korean language.  
-    
-    High-Surrogate:  A Unicode code value in the range U+D800 to U+DBFF.  
-    
-    Hiragana:  One of two standard syllabaries associated with the Japanese 
-    writing system.  Use to write particles, grammatical affixes, and words 
-    that have no 'kanji' form.  
-    
-    IANA:  Internet Assigned Numbers Authority.  
-    
-    Ideograph:  (1) Any symbol that denotes an idea (or meaning) in contrast
-    to a sound or pronunciation (for example, a 'smiley face').  (2) A
-    common term used to refer to Han characters.  
-    
-    IPA:  International Phonetic Alphabet.  
-    
-    IRG:  Abbreviation for Ideographic Rapporteur Group, a subgroup of
-    ISO/IEC JTC1/SC2/WG2 (who work on Han unification and submission of new 
-    Han characters for inclusion in revised versions of Unicode/ISO 10646).
-    
-    Jamo:  The Korean name for a single letter of the Hangul script.  Jamos 
-    are used to form Hangul syllables.  
-    
-    Joiner:  An invisible character that affects the joining behavior of
-    surrounding characters.  
-    
-    JTC1:  Abbreviation for Joint Technical Committee 1 of ISO/IEC,
-    responsible for information technology standardization.  
-    
-    Kana:  The name of a primarily syllabic script used by the Japanese
-    writing system, composed of 'hiragana' and 'katakana'.  
-    
-    Kanji:  The Japanese name for Han characters; derived from the Chinese
-    word 'hanzi'.  Also romanized as 'kanzi'.  
-    
-    Katakana:  One of two standard syllabaries associated with the Japanese 
-    writing system, typically used in representation of borrowed vocabulary.
-    
-    Ligature:  A glyph representing a combination of two or more characters,
-    for example in the Latin script the ligature between 'f' and 'i' as
-    'fi'.  
-    
-    Logical Order:  The order in which text is typed on a keyboard.  For the
-
-    McDonald                    June 20, 2002                     [Page A-4]
-\f
-           CUPS Internationalization Software Design Description v0.3       
-                                   APPENDIX A                               
-                                    Glossary                                
-
-    most part, logical order corresponds to phonetic order.  
-    
-    Lowercase:  (See 'case'.) 
-    
-    Low-Surrogate:  A Unicode code value in the range U+DC00 to U+DFFF.  
-    
-    MBCS:  Acronym for 'multiple-byte character set'.  
-    
-    Multiple-Byte Character Set (MBCS):  A character set encoded with a
-    variable number of bytes per character.  Many large character sets have 
-    been defined as MBCS so as to keep strict compatibility with the
-    US-ASCII subset and/or [ISO2022].  
-    
-    Normalization:  Transformation of data to a normal form.  
-    
-    Plain Text:  Computer-encoded text that consists ONLY of a sequence of
-    code values from a given standard, with no other formatting or
-    structural information.  
-    
-    Precomposed Character:  (See 'decomposable character'.) 
-    
-    Rendering:  (1) The process of selecting and laying out glyphs for the
-    purpose of depicting characters.  (2) The process of making glyphs
-    visible on a display device.  
-    
-    Repertoire:  (See 'character repertoire'.) 
-    
-    Replacement Character:  A character used as a substitute for an
-    uninterpretable character from another encoding.  [UNICODE3.2] defines
-    U+FFFD REPLACEMENT CHARACTER for this function.  
-    
-    Rich Text:  The result of adding information such as font data, color,
-    formatting, phonetic annotations, etc. to 'plain text' (e.g., HTML).  
-    
-    SBCS:  Acronym for 'single-byte character set'.  
-    
-    Scalar Value:  (See 'Unicode scalar value'.) 
-    
-    Script:  A collection of symbols used to represent textual information
-    in one or more writing systems.  
-    
-    Single-Byte Character Set (SBCS):  One of a number of one-byte character
-    sets defined for representing (mostly) Western languages (for example,
-    ISO 8859-1 'Latin-1').  These character sets are often encoded in such a
-    way as to be strict supersets of 7-bit [US-ASCII].  
-    
-    Sorting:  (See 'collation'.) 
-    
-    Transcoding:  Conversion of character data between different character
-    sets.  
-
-    McDonald                    June 20, 2002                     [Page A-5]
-\f
-           CUPS Internationalization Software Design Description v0.3       
-                                   APPENDIX A                               
-                                    Glossary                                
-
-    
-    Transformation Format:  A mapping from a coded character sequence to a
-    unique sequence of code values (typically octets).  
-    
-    UCS:  Abbreviation for Universal Character Set, specified by [ISO10646].
-    
-    UCS-2:  UCS encoded in 2 octets, specified by [ISO10646].  
-    
-    UCS-4:  UCS encoded in 4 octets, specified by [ISO10646].  
-    
-    Unicode Scalar Value:  A number between 0 to 0x10FFFF.  
-    
-    Uppercase:  (See 'case'.) 
-    
-    UTF:  Abbreviation for Unicode (or UCS) Transformation Format.  
-    
-    UTF-8:  Unicode (or UCS) Transformation Format, 8-bit encoding form.
-    Serializes a Unicode (or UCS) scalar value (code point) as a sequence of
-    one to four octets.  Does NOT suffer from byte-ordering ambiguities.  
-    
-    UTF-16:  Unicode (or UCS) Transformation Format, 16-bit encoding form.  
-    Serializes a Unicode (or UCS) scalar value (code point) as a sequence of
-    two octets, in either big-endian or little-endian format.  Uses an
-    (optional) prefix of BOM to disambiguate byte-ordering.  
-    
-    UTF-32:  Unicode (or UCS) Transformation Format, 32-bit encoding form.  
-    Serializes a Unicode (or UCS) scalar value (code point) as a sequence of
-    four octets, in either big-endian or little-endian format.  Uses an
-    (optional) prefix of BOM to disambiguate byte-ordering.  
-    
-    Zero Width:  Characteristic of some spaces or format control characters 
-    that do not advance text along the horizontal baseline.  
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-    McDonald                    June 20, 2002                     [Page A-6]
diff --git a/data/uni-comb.txt b/data/uni-comb.txt
deleted file mode 100644 (file)
index 1e20217..0000000
+++ /dev/null
@@ -1,299 +0,0 @@
-# uni-comb.txt - Unicode combining class
-0300;230;NSM;
-0301;230;NSM;
-0302;230;NSM;
-0303;230;NSM;
-0304;230;NSM;
-0305;230;NSM;
-0306;230;NSM;
-0307;230;NSM;
-0308;230;NSM;
-0309;230;NSM;
-030A;230;NSM;
-030B;230;NSM;
-030C;230;NSM;
-030D;230;NSM;
-030E;230;NSM;
-030F;230;NSM;
-0310;230;NSM;
-0311;230;NSM;
-0312;230;NSM;
-0313;230;NSM;
-0314;230;NSM;
-0315;232;NSM;
-0316;220;NSM;
-0317;220;NSM;
-0318;220;NSM;
-0319;220;NSM;
-031A;232;NSM;
-031B;216;NSM;
-031C;220;NSM;
-031D;220;NSM;
-031E;220;NSM;
-031F;220;NSM;
-0320;220;NSM;
-0321;202;NSM;
-0322;202;NSM;
-0323;220;NSM;
-0324;220;NSM;
-0325;220;NSM;
-0326;220;NSM;
-0327;202;NSM;
-0328;202;NSM;
-0329;220;NSM;
-032A;220;NSM;
-032B;220;NSM;
-032C;220;NSM;
-032D;220;NSM;
-032E;220;NSM;
-032F;220;NSM;
-0330;220;NSM;
-0331;220;NSM;
-0332;220;NSM;
-0333;220;NSM;
-0334;1;NSM;
-0335;1;NSM;
-0336;1;NSM;
-0337;1;NSM;
-0338;1;NSM;
-0339;220;NSM;
-033A;220;NSM;
-033B;220;NSM;
-033C;220;NSM;
-033D;230;NSM;
-033E;230;NSM;
-033F;230;NSM;
-0340;230;NSM;
-0341;230;NSM;
-0342;230;NSM;
-0343;230;NSM;
-0344;230;NSM;
-0345;240;NSM;
-0346;230;NSM;
-0347;220;NSM;
-0348;220;NSM;
-0349;220;NSM;
-034A;230;NSM;
-034B;230;NSM;
-034C;230;NSM;
-034D;220;NSM;
-034E;220;NSM;
-0360;234;NSM;
-0361;234;NSM;
-0362;233;NSM;
-0483;230;NSM;
-0484;230;NSM;
-0485;230;NSM;
-0486;230;NSM;
-0591;220;NSM;
-0592;230;NSM;
-0593;230;NSM;
-0594;230;NSM;
-0595;230;NSM;
-0596;220;NSM;
-0597;230;NSM;
-0598;230;NSM;
-0599;230;NSM;
-059A;222;NSM;
-059B;220;NSM;
-059C;230;NSM;
-059D;230;NSM;
-059E;230;NSM;
-059F;230;NSM;
-05A0;230;NSM;
-05A1;230;NSM;
-05A3;220;NSM;
-05A4;220;NSM;
-05A5;220;NSM;
-05A6;220;NSM;
-05A7;220;NSM;
-05A8;230;NSM;
-05A9;230;NSM;
-05AA;220;NSM;
-05AB;230;NSM;
-05AC;230;NSM;
-05AD;222;NSM;
-05AE;228;NSM;
-05AF;230;NSM;
-05B0;10;NSM;
-05B1;11;NSM;
-05B2;12;NSM;
-05B3;13;NSM;
-05B4;14;NSM;
-05B5;15;NSM;
-05B6;16;NSM;
-05B7;17;NSM;
-05B8;18;NSM;
-05B9;19;NSM;
-05BB;20;NSM;
-05BC;21;NSM;
-05BD;22;NSM;
-05BF;23;NSM;
-05C1;24;NSM;
-05C2;25;NSM;
-05C4;230;NSM;
-064B;27;NSM;
-064C;28;NSM;
-064D;29;NSM;
-064E;30;NSM;
-064F;31;NSM;
-0650;32;NSM;
-0651;33;NSM;
-0652;34;NSM;
-0653;230;NSM;
-0654;230;NSM;
-0655;220;NSM;
-0670;35;NSM;
-06D6;230;NSM;
-06D7;230;NSM;
-06D8;230;NSM;
-06D9;230;NSM;
-06DA;230;NSM;
-06DB;230;NSM;
-06DC;230;NSM;
-06DF;230;NSM;
-06E0;230;NSM;
-06E1;230;NSM;
-06E2;230;NSM;
-06E3;220;NSM;
-06E4;230;NSM;
-06E7;230;NSM;
-06E8;230;NSM;
-06EA;220;NSM;
-06EB;230;NSM;
-06EC;230;NSM;
-06ED;220;NSM;
-0711;36;NSM;
-0730;230;NSM;
-0731;220;NSM;
-0732;230;NSM;
-0733;230;NSM;
-0734;220;NSM;
-0735;230;NSM;
-0736;230;NSM;
-0737;220;NSM;
-0738;220;NSM;
-0739;220;NSM;
-073A;230;NSM;
-073B;220;NSM;
-073C;220;NSM;
-073D;230;NSM;
-073E;220;NSM;
-073F;230;NSM;
-0740;230;NSM;
-0741;230;NSM;
-0742;220;NSM;
-0743;230;NSM;
-0744;220;NSM;
-0745;230;NSM;
-0746;220;NSM;
-0747;230;NSM;
-0748;220;NSM;
-0749;230;NSM;
-074A;230;NSM;
-093C;7;NSM;
-094D;9;NSM;
-0951;230;NSM;
-0952;220;NSM;
-0953;230;NSM;
-0954;230;NSM;
-09BC;7;NSM;
-09CD;9;NSM;
-0A3C;7;NSM;
-0A4D;9;NSM;
-0ABC;7;NSM;
-0ACD;9;NSM;
-0B3C;7;NSM;
-0B4D;9;NSM;
-0BCD;9;NSM;
-0C4D;9;NSM;
-0C55;84;NSM;
-0C56;91;NSM;
-0CCD;9;NSM;
-0D4D;9;NSM;
-0DCA;9;NSM;
-0E38;103;NSM;
-0E39;103;NSM;
-0E3A;9;NSM;
-0E48;107;NSM;
-0E49;107;NSM;
-0E4A;107;NSM;
-0E4B;107;NSM;
-0EB8;118;NSM;
-0EB9;118;NSM;
-0EC8;122;NSM;
-0EC9;122;NSM;
-0ECA;122;NSM;
-0ECB;122;NSM;
-0F18;220;NSM;
-0F19;220;NSM;
-0F35;220;NSM;
-0F37;220;NSM;
-0F39;216;NSM;
-0F71;129;NSM;
-0F72;130;NSM;
-0F74;132;NSM;
-0F7A;130;NSM;
-0F7B;130;NSM;
-0F7C;130;NSM;
-0F7D;130;NSM;
-0F80;130;NSM;
-0F82;230;NSM;
-0F83;230;NSM;
-0F84;9;NSM;
-0F86;230;NSM;
-0F87;230;NSM;
-0FC6;220;NSM;
-1037;7;NSM;
-1039;9;NSM;
-17D2;9;NSM;
-18A9;228;NSM;
-20D0;230;NSM;
-20D1;230;NSM;
-20D2;1;NSM;
-20D3;1;NSM;
-20D4;230;NSM;
-20D5;230;NSM;
-20D6;230;NSM;
-20D7;230;NSM;
-20D8;1;NSM;
-20D9;1;NSM;
-20DA;1;NSM;
-20DB;230;NSM;
-20DC;230;NSM;
-20E1;230;NSM;
-302A;218;NSM;
-302B;228;NSM;
-302C;232;NSM;
-302D;222;NSM;
-302E;224;NSM;
-302F;224;NSM;
-3099;8;NSM;
-309A;8;NSM;
-FB1E;26;NSM;
-FE20;230;NSM;
-FE21;230;NSM;
-FE22;230;NSM;
-FE23;230;NSM;
-1D167;1;NSM;
-1D168;1;NSM;
-1D169;1;NSM;
-1D17B;220;NSM;
-1D17C;220;NSM;
-1D17D;220;NSM;
-1D17E;220;NSM;
-1D17F;220;NSM;
-1D180;220;NSM;
-1D181;220;NSM;
-1D182;220;NSM;
-1D185;230;NSM;
-1D186;230;NSM;
-1D187;230;NSM;
-1D188;230;NSM;
-1D189;230;NSM;
-1D18A;220;NSM;
-1D18B;220;NSM;
-1D1AA;230;NSM;
-1D1AB;230;NSM;
-1D1AC;230;NSM;
-1D1AD;230;NSM;
diff --git a/data/uni-fold.txt b/data/uni-fold.txt
deleted file mode 100644 (file)
index df75af8..0000000
+++ /dev/null
@@ -1,713 +0,0 @@
-# uni-fold.txt - Unicode simple case folding
-0041 0061;C;
-0042 0062;C;
-0043 0063;C;
-0044 0064;C;
-0045 0065;C;
-0046 0066;C;
-0047 0067;C;
-0048 0068;C;
-0049 0069;C;
-004A 006A;C;
-004B 006B;C;
-004C 006C;C;
-004D 006D;C;
-004E 006E;C;
-004F 006F;C;
-0050 0070;C;
-0051 0071;C;
-0052 0072;C;
-0053 0073;C;
-0054 0074;C;
-0055 0075;C;
-0056 0076;C;
-0057 0077;C;
-0058 0078;C;
-0059 0079;C;
-005A 007A;C;
-00B5 03BC;C;
-00C0 00E0;C;
-00C1 00E1;C;
-00C2 00E2;C;
-00C3 00E3;C;
-00C4 00E4;C;
-00C5 00E5;C;
-00C6 00E6;C;
-00C7 00E7;C;
-00C8 00E8;C;
-00C9 00E9;C;
-00CA 00EA;C;
-00CB 00EB;C;
-00CC 00EC;C;
-00CD 00ED;C;
-00CE 00EE;C;
-00CF 00EF;C;
-00D0 00F0;C;
-00D1 00F1;C;
-00D2 00F2;C;
-00D3 00F3;C;
-00D4 00F4;C;
-00D5 00F5;C;
-00D6 00F6;C;
-00D8 00F8;C;
-00D9 00F9;C;
-00DA 00FA;C;
-00DB 00FB;C;
-00DC 00FC;C;
-00DD 00FD;C;
-00DE 00FE;C;
-0100 0101;C;
-0102 0103;C;
-0104 0105;C;
-0106 0107;C;
-0108 0109;C;
-010A 010B;C;
-010C 010D;C;
-010E 010F;C;
-0110 0111;C;
-0112 0113;C;
-0114 0115;C;
-0116 0117;C;
-0118 0119;C;
-011A 011B;C;
-011C 011D;C;
-011E 011F;C;
-0120 0121;C;
-0122 0123;C;
-0124 0125;C;
-0126 0127;C;
-0128 0129;C;
-012A 012B;C;
-012C 012D;C;
-012E 012F;C;
-0130 0069;I;
-0131 0069;I;
-0132 0133;C;
-0134 0135;C;
-0136 0137;C;
-0139 013A;C;
-013B 013C;C;
-013D 013E;C;
-013F 0140;C;
-0141 0142;C;
-0143 0144;C;
-0145 0146;C;
-0147 0148;C;
-014A 014B;C;
-014C 014D;C;
-014E 014F;C;
-0150 0151;C;
-0152 0153;C;
-0154 0155;C;
-0156 0157;C;
-0158 0159;C;
-015A 015B;C;
-015C 015D;C;
-015E 015F;C;
-0160 0161;C;
-0162 0163;C;
-0164 0165;C;
-0166 0167;C;
-0168 0169;C;
-016A 016B;C;
-016C 016D;C;
-016E 016F;C;
-0170 0171;C;
-0172 0173;C;
-0174 0175;C;
-0176 0177;C;
-0178 00FF;C;
-0179 017A;C;
-017B 017C;C;
-017D 017E;C;
-017F 0073;C;
-0181 0253;C;
-0182 0183;C;
-0184 0185;C;
-0186 0254;C;
-0187 0188;C;
-0189 0256;C;
-018A 0257;C;
-018B 018C;C;
-018E 01DD;C;
-018F 0259;C;
-0190 025B;C;
-0191 0192;C;
-0193 0260;C;
-0194 0263;C;
-0196 0269;C;
-0197 0268;C;
-0198 0199;C;
-019C 026F;C;
-019D 0272;C;
-019F 0275;C;
-01A0 01A1;C;
-01A2 01A3;C;
-01A4 01A5;C;
-01A6 0280;C;
-01A7 01A8;C;
-01A9 0283;C;
-01AC 01AD;C;
-01AE 0288;C;
-01AF 01B0;C;
-01B1 028A;C;
-01B2 028B;C;
-01B3 01B4;C;
-01B5 01B6;C;
-01B7 0292;C;
-01B8 01B9;C;
-01BC 01BD;C;
-01C4 01C6;C;
-01C5 01C6;C;
-01C7 01C9;C;
-01C8 01C9;C;
-01CA 01CC;C;
-01CB 01CC;C;
-01CD 01CE;C;
-01CF 01D0;C;
-01D1 01D2;C;
-01D3 01D4;C;
-01D5 01D6;C;
-01D7 01D8;C;
-01D9 01DA;C;
-01DB 01DC;C;
-01DE 01DF;C;
-01E0 01E1;C;
-01E2 01E3;C;
-01E4 01E5;C;
-01E6 01E7;C;
-01E8 01E9;C;
-01EA 01EB;C;
-01EC 01ED;C;
-01EE 01EF;C;
-01F1 01F3;C;
-01F2 01F3;C;
-01F4 01F5;C;
-01F6 0195;C;
-01F7 01BF;C;
-01F8 01F9;C;
-01FA 01FB;C;
-01FC 01FD;C;
-01FE 01FF;C;
-0200 0201;C;
-0202 0203;C;
-0204 0205;C;
-0206 0207;C;
-0208 0209;C;
-020A 020B;C;
-020C 020D;C;
-020E 020F;C;
-0210 0211;C;
-0212 0213;C;
-0214 0215;C;
-0216 0217;C;
-0218 0219;C;
-021A 021B;C;
-021C 021D;C;
-021E 021F;C;
-0222 0223;C;
-0224 0225;C;
-0226 0227;C;
-0228 0229;C;
-022A 022B;C;
-022C 022D;C;
-022E 022F;C;
-0230 0231;C;
-0232 0233;C;
-0345 03B9;C;
-0386 03AC;C;
-0388 03AD;C;
-0389 03AE;C;
-038A 03AF;C;
-038C 03CC;C;
-038E 03CD;C;
-038F 03CE;C;
-0391 03B1;C;
-0392 03B2;C;
-0393 03B3;C;
-0394 03B4;C;
-0395 03B5;C;
-0396 03B6;C;
-0397 03B7;C;
-0398 03B8;C;
-0399 03B9;C;
-039A 03BA;C;
-039B 03BB;C;
-039C 03BC;C;
-039D 03BD;C;
-039E 03BE;C;
-039F 03BF;C;
-03A0 03C0;C;
-03A1 03C1;C;
-03A3 03C3;C;
-03A4 03C4;C;
-03A5 03C5;C;
-03A6 03C6;C;
-03A7 03C7;C;
-03A8 03C8;C;
-03A9 03C9;C;
-03AA 03CA;C;
-03AB 03CB;C;
-03C2 03C3;C;
-03D0 03B2;C;
-03D1 03B8;C;
-03D5 03C6;C;
-03D6 03C0;C;
-03DA 03DB;C;
-03DC 03DD;C;
-03DE 03DF;C;
-03E0 03E1;C;
-03E2 03E3;C;
-03E4 03E5;C;
-03E6 03E7;C;
-03E8 03E9;C;
-03EA 03EB;C;
-03EC 03ED;C;
-03EE 03EF;C;
-03F0 03BA;C;
-03F1 03C1;C;
-03F2 03C3;C;
-03F4 03B8;C;
-03F5 03B5;C;
-0400 0450;C;
-0401 0451;C;
-0402 0452;C;
-0403 0453;C;
-0404 0454;C;
-0405 0455;C;
-0406 0456;C;
-0407 0457;C;
-0408 0458;C;
-0409 0459;C;
-040A 045A;C;
-040B 045B;C;
-040C 045C;C;
-040D 045D;C;
-040E 045E;C;
-040F 045F;C;
-0410 0430;C;
-0411 0431;C;
-0412 0432;C;
-0413 0433;C;
-0414 0434;C;
-0415 0435;C;
-0416 0436;C;
-0417 0437;C;
-0418 0438;C;
-0419 0439;C;
-041A 043A;C;
-041B 043B;C;
-041C 043C;C;
-041D 043D;C;
-041E 043E;C;
-041F 043F;C;
-0420 0440;C;
-0421 0441;C;
-0422 0442;C;
-0423 0443;C;
-0424 0444;C;
-0425 0445;C;
-0426 0446;C;
-0427 0447;C;
-0428 0448;C;
-0429 0449;C;
-042A 044A;C;
-042B 044B;C;
-042C 044C;C;
-042D 044D;C;
-042E 044E;C;
-042F 044F;C;
-0460 0461;C;
-0462 0463;C;
-0464 0465;C;
-0466 0467;C;
-0468 0469;C;
-046A 046B;C;
-046C 046D;C;
-046E 046F;C;
-0470 0471;C;
-0472 0473;C;
-0474 0475;C;
-0476 0477;C;
-0478 0479;C;
-047A 047B;C;
-047C 047D;C;
-047E 047F;C;
-0480 0481;C;
-048C 048D;C;
-048E 048F;C;
-0490 0491;C;
-0492 0493;C;
-0494 0495;C;
-0496 0497;C;
-0498 0499;C;
-049A 049B;C;
-049C 049D;C;
-049E 049F;C;
-04A0 04A1;C;
-04A2 04A3;C;
-04A4 04A5;C;
-04A6 04A7;C;
-04A8 04A9;C;
-04AA 04AB;C;
-04AC 04AD;C;
-04AE 04AF;C;
-04B0 04B1;C;
-04B2 04B3;C;
-04B4 04B5;C;
-04B6 04B7;C;
-04B8 04B9;C;
-04BA 04BB;C;
-04BC 04BD;C;
-04BE 04BF;C;
-04C1 04C2;C;
-04C3 04C4;C;
-04C7 04C8;C;
-04CB 04CC;C;
-04D0 04D1;C;
-04D2 04D3;C;
-04D4 04D5;C;
-04D6 04D7;C;
-04D8 04D9;C;
-04DA 04DB;C;
-04DC 04DD;C;
-04DE 04DF;C;
-04E0 04E1;C;
-04E2 04E3;C;
-04E4 04E5;C;
-04E6 04E7;C;
-04E8 04E9;C;
-04EA 04EB;C;
-04EC 04ED;C;
-04EE 04EF;C;
-04F0 04F1;C;
-04F2 04F3;C;
-04F4 04F5;C;
-04F8 04F9;C;
-0531 0561;C;
-0532 0562;C;
-0533 0563;C;
-0534 0564;C;
-0535 0565;C;
-0536 0566;C;
-0537 0567;C;
-0538 0568;C;
-0539 0569;C;
-053A 056A;C;
-053B 056B;C;
-053C 056C;C;
-053D 056D;C;
-053E 056E;C;
-053F 056F;C;
-0540 0570;C;
-0541 0571;C;
-0542 0572;C;
-0543 0573;C;
-0544 0574;C;
-0545 0575;C;
-0546 0576;C;
-0547 0577;C;
-0548 0578;C;
-0549 0579;C;
-054A 057A;C;
-054B 057B;C;
-054C 057C;C;
-054D 057D;C;
-054E 057E;C;
-054F 057F;C;
-0550 0580;C;
-0551 0581;C;
-0552 0582;C;
-0553 0583;C;
-0554 0584;C;
-0555 0585;C;
-0556 0586;C;
-1E00 1E01;C;
-1E02 1E03;C;
-1E04 1E05;C;
-1E06 1E07;C;
-1E08 1E09;C;
-1E0A 1E0B;C;
-1E0C 1E0D;C;
-1E0E 1E0F;C;
-1E10 1E11;C;
-1E12 1E13;C;
-1E14 1E15;C;
-1E16 1E17;C;
-1E18 1E19;C;
-1E1A 1E1B;C;
-1E1C 1E1D;C;
-1E1E 1E1F;C;
-1E20 1E21;C;
-1E22 1E23;C;
-1E24 1E25;C;
-1E26 1E27;C;
-1E28 1E29;C;
-1E2A 1E2B;C;
-1E2C 1E2D;C;
-1E2E 1E2F;C;
-1E30 1E31;C;
-1E32 1E33;C;
-1E34 1E35;C;
-1E36 1E37;C;
-1E38 1E39;C;
-1E3A 1E3B;C;
-1E3C 1E3D;C;
-1E3E 1E3F;C;
-1E40 1E41;C;
-1E42 1E43;C;
-1E44 1E45;C;
-1E46 1E47;C;
-1E48 1E49;C;
-1E4A 1E4B;C;
-1E4C 1E4D;C;
-1E4E 1E4F;C;
-1E50 1E51;C;
-1E52 1E53;C;
-1E54 1E55;C;
-1E56 1E57;C;
-1E58 1E59;C;
-1E5A 1E5B;C;
-1E5C 1E5D;C;
-1E5E 1E5F;C;
-1E60 1E61;C;
-1E62 1E63;C;
-1E64 1E65;C;
-1E66 1E67;C;
-1E68 1E69;C;
-1E6A 1E6B;C;
-1E6C 1E6D;C;
-1E6E 1E6F;C;
-1E70 1E71;C;
-1E72 1E73;C;
-1E74 1E75;C;
-1E76 1E77;C;
-1E78 1E79;C;
-1E7A 1E7B;C;
-1E7C 1E7D;C;
-1E7E 1E7F;C;
-1E80 1E81;C;
-1E82 1E83;C;
-1E84 1E85;C;
-1E86 1E87;C;
-1E88 1E89;C;
-1E8A 1E8B;C;
-1E8C 1E8D;C;
-1E8E 1E8F;C;
-1E90 1E91;C;
-1E92 1E93;C;
-1E94 1E95;C;
-1E9B 1E61;C;
-1EA0 1EA1;C;
-1EA2 1EA3;C;
-1EA4 1EA5;C;
-1EA6 1EA7;C;
-1EA8 1EA9;C;
-1EAA 1EAB;C;
-1EAC 1EAD;C;
-1EAE 1EAF;C;
-1EB0 1EB1;C;
-1EB2 1EB3;C;
-1EB4 1EB5;C;
-1EB6 1EB7;C;
-1EB8 1EB9;C;
-1EBA 1EBB;C;
-1EBC 1EBD;C;
-1EBE 1EBF;C;
-1EC0 1EC1;C;
-1EC2 1EC3;C;
-1EC4 1EC5;C;
-1EC6 1EC7;C;
-1EC8 1EC9;C;
-1ECA 1ECB;C;
-1ECC 1ECD;C;
-1ECE 1ECF;C;
-1ED0 1ED1;C;
-1ED2 1ED3;C;
-1ED4 1ED5;C;
-1ED6 1ED7;C;
-1ED8 1ED9;C;
-1EDA 1EDB;C;
-1EDC 1EDD;C;
-1EDE 1EDF;C;
-1EE0 1EE1;C;
-1EE2 1EE3;C;
-1EE4 1EE5;C;
-1EE6 1EE7;C;
-1EE8 1EE9;C;
-1EEA 1EEB;C;
-1EEC 1EED;C;
-1EEE 1EEF;C;
-1EF0 1EF1;C;
-1EF2 1EF3;C;
-1EF4 1EF5;C;
-1EF6 1EF7;C;
-1EF8 1EF9;C;
-1F08 1F00;C;
-1F09 1F01;C;
-1F0A 1F02;C;
-1F0B 1F03;C;
-1F0C 1F04;C;
-1F0D 1F05;C;
-1F0E 1F06;C;
-1F0F 1F07;C;
-1F18 1F10;C;
-1F19 1F11;C;
-1F1A 1F12;C;
-1F1B 1F13;C;
-1F1C 1F14;C;
-1F1D 1F15;C;
-1F28 1F20;C;
-1F29 1F21;C;
-1F2A 1F22;C;
-1F2B 1F23;C;
-1F2C 1F24;C;
-1F2D 1F25;C;
-1F2E 1F26;C;
-1F2F 1F27;C;
-1F38 1F30;C;
-1F39 1F31;C;
-1F3A 1F32;C;
-1F3B 1F33;C;
-1F3C 1F34;C;
-1F3D 1F35;C;
-1F3E 1F36;C;
-1F3F 1F37;C;
-1F48 1F40;C;
-1F49 1F41;C;
-1F4A 1F42;C;
-1F4B 1F43;C;
-1F4C 1F44;C;
-1F4D 1F45;C;
-1F59 1F51;C;
-1F5B 1F53;C;
-1F5D 1F55;C;
-1F5F 1F57;C;
-1F68 1F60;C;
-1F69 1F61;C;
-1F6A 1F62;C;
-1F6B 1F63;C;
-1F6C 1F64;C;
-1F6D 1F65;C;
-1F6E 1F66;C;
-1F6F 1F67;C;
-1F88 1F80;S;
-1F89 1F81;S;
-1F8A 1F82;S;
-1F8B 1F83;S;
-1F8C 1F84;S;
-1F8D 1F85;S;
-1F8E 1F86;S;
-1F8F 1F87;S;
-1F98 1F90;S;
-1F99 1F91;S;
-1F9A 1F92;S;
-1F9B 1F93;S;
-1F9C 1F94;S;
-1F9D 1F95;S;
-1F9E 1F96;S;
-1F9F 1F97;S;
-1FA8 1FA0;S;
-1FA9 1FA1;S;
-1FAA 1FA2;S;
-1FAB 1FA3;S;
-1FAC 1FA4;S;
-1FAD 1FA5;S;
-1FAE 1FA6;S;
-1FAF 1FA7;S;
-1FB8 1FB0;C;
-1FB9 1FB1;C;
-1FBA 1F70;C;
-1FBB 1F71;C;
-1FBC 1FB3;S;
-1FBE 03B9;C;
-1FC8 1F72;C;
-1FC9 1F73;C;
-1FCA 1F74;C;
-1FCB 1F75;C;
-1FCC 1FC3;S;
-1FD8 1FD0;C;
-1FD9 1FD1;C;
-1FDA 1F76;C;
-1FDB 1F77;C;
-1FE8 1FE0;C;
-1FE9 1FE1;C;
-1FEA 1F7A;C;
-1FEB 1F7B;C;
-1FEC 1FE5;C;
-1FF8 1F78;C;
-1FF9 1F79;C;
-1FFA 1F7C;C;
-1FFB 1F7D;C;
-1FFC 1FF3;S;
-2126 03C9;C;
-212A 006B;C;
-212B 00E5;C;
-2160 2170;C;
-2161 2171;C;
-2162 2172;C;
-2163 2173;C;
-2164 2174;C;
-2165 2175;C;
-2166 2176;C;
-2167 2177;C;
-2168 2178;C;
-2169 2179;C;
-216A 217A;C;
-216B 217B;C;
-216C 217C;C;
-216D 217D;C;
-216E 217E;C;
-216F 217F;C;
-24B6 24D0;C;
-24B7 24D1;C;
-24B8 24D2;C;
-24B9 24D3;C;
-24BA 24D4;C;
-24BB 24D5;C;
-24BC 24D6;C;
-24BD 24D7;C;
-24BE 24D8;C;
-24BF 24D9;C;
-24C0 24DA;C;
-24C1 24DB;C;
-24C2 24DC;C;
-24C3 24DD;C;
-24C4 24DE;C;
-24C5 24DF;C;
-24C6 24E0;C;
-24C7 24E1;C;
-24C8 24E2;C;
-24C9 24E3;C;
-24CA 24E4;C;
-24CB 24E5;C;
-24CC 24E6;C;
-24CD 24E7;C;
-24CE 24E8;C;
-24CF 24E9;C;
-FF21 FF41;C;
-FF22 FF42;C;
-FF23 FF43;C;
-FF24 FF44;C;
-FF25 FF45;C;
-FF26 FF46;C;
-FF27 FF47;C;
-FF28 FF48;C;
-FF29 FF49;C;
-FF2A FF4A;C;
-FF2B FF4B;C;
-FF2C FF4C;C;
-FF2D FF4D;C;
-FF2E FF4E;C;
-FF2F FF4F;C;
-FF30 FF50;C;
-FF31 FF51;C;
-FF32 FF52;C;
-FF33 FF53;C;
-FF34 FF54;C;
-FF35 FF55;C;
-FF36 FF56;C;
-FF37 FF57;C;
-FF38 FF58;C;
-FF39 FF59;C;
-FF3A FF5A;C;
diff --git a/data/uni-full.txt b/data/uni-full.txt
deleted file mode 100644 (file)
index 30e57ee..0000000
+++ /dev/null
@@ -1,788 +0,0 @@
-# uni-full.txt - Unicode full case folding
-0041 0061 0000 0000;C;
-0042 0062 0000 0000;C;
-0043 0063 0000 0000;C;
-0044 0064 0000 0000;C;
-0045 0065 0000 0000;C;
-0046 0066 0000 0000;C;
-0047 0067 0000 0000;C;
-0048 0068 0000 0000;C;
-0049 0069 0000 0000;C;
-004A 006A 0000 0000;C;
-004B 006B 0000 0000;C;
-004C 006C 0000 0000;C;
-004D 006D 0000 0000;C;
-004E 006E 0000 0000;C;
-004F 006F 0000 0000;C;
-0050 0070 0000 0000;C;
-0051 0071 0000 0000;C;
-0052 0072 0000 0000;C;
-0053 0073 0000 0000;C;
-0054 0074 0000 0000;C;
-0055 0075 0000 0000;C;
-0056 0076 0000 0000;C;
-0057 0077 0000 0000;C;
-0058 0078 0000 0000;C;
-0059 0079 0000 0000;C;
-005A 007A 0000 0000;C;
-00B5 03BC 0000 0000;C;
-00C0 00E0 0000 0000;C;
-00C1 00E1 0000 0000;C;
-00C2 00E2 0000 0000;C;
-00C3 00E3 0000 0000;C;
-00C4 00E4 0000 0000;C;
-00C5 00E5 0000 0000;C;
-00C6 00E6 0000 0000;C;
-00C7 00E7 0000 0000;C;
-00C8 00E8 0000 0000;C;
-00C9 00E9 0000 0000;C;
-00CA 00EA 0000 0000;C;
-00CB 00EB 0000 0000;C;
-00CC 00EC 0000 0000;C;
-00CD 00ED 0000 0000;C;
-00CE 00EE 0000 0000;C;
-00CF 00EF 0000 0000;C;
-00D0 00F0 0000 0000;C;
-00D1 00F1 0000 0000;C;
-00D2 00F2 0000 0000;C;
-00D3 00F3 0000 0000;C;
-00D4 00F4 0000 0000;C;
-00D5 00F5 0000 0000;C;
-00D6 00F6 0000 0000;C;
-00D8 00F8 0000 0000;C;
-00D9 00F9 0000 0000;C;
-00DA 00FA 0000 0000;C;
-00DB 00FB 0000 0000;C;
-00DC 00FC 0000 0000;C;
-00DD 00FD 0000 0000;C;
-00DE 00FE 0000 0000;C;
-00DF 0073 0073 0000;F;
-0100 0101 0000 0000;C;
-0102 0103 0000 0000;C;
-0104 0105 0000 0000;C;
-0106 0107 0000 0000;C;
-0108 0109 0000 0000;C;
-010A 010B 0000 0000;C;
-010C 010D 0000 0000;C;
-010E 010F 0000 0000;C;
-0110 0111 0000 0000;C;
-0112 0113 0000 0000;C;
-0114 0115 0000 0000;C;
-0116 0117 0000 0000;C;
-0118 0119 0000 0000;C;
-011A 011B 0000 0000;C;
-011C 011D 0000 0000;C;
-011E 011F 0000 0000;C;
-0120 0121 0000 0000;C;
-0122 0123 0000 0000;C;
-0124 0125 0000 0000;C;
-0126 0127 0000 0000;C;
-0128 0129 0000 0000;C;
-012A 012B 0000 0000;C;
-012C 012D 0000 0000;C;
-012E 012F 0000 0000;C;
-0130 0069 0000 0000;I;
-0131 0069 0000 0000;I;
-0132 0133 0000 0000;C;
-0134 0135 0000 0000;C;
-0136 0137 0000 0000;C;
-0139 013A 0000 0000;C;
-013B 013C 0000 0000;C;
-013D 013E 0000 0000;C;
-013F 0140 0000 0000;C;
-0141 0142 0000 0000;C;
-0143 0144 0000 0000;C;
-0145 0146 0000 0000;C;
-0147 0148 0000 0000;C;
-0149 02BC 006E 0000;F;
-014A 014B 0000 0000;C;
-014C 014D 0000 0000;C;
-014E 014F 0000 0000;C;
-0150 0151 0000 0000;C;
-0152 0153 0000 0000;C;
-0154 0155 0000 0000;C;
-0156 0157 0000 0000;C;
-0158 0159 0000 0000;C;
-015A 015B 0000 0000;C;
-015C 015D 0000 0000;C;
-015E 015F 0000 0000;C;
-0160 0161 0000 0000;C;
-0162 0163 0000 0000;C;
-0164 0165 0000 0000;C;
-0166 0167 0000 0000;C;
-0168 0169 0000 0000;C;
-016A 016B 0000 0000;C;
-016C 016D 0000 0000;C;
-016E 016F 0000 0000;C;
-0170 0171 0000 0000;C;
-0172 0173 0000 0000;C;
-0174 0175 0000 0000;C;
-0176 0177 0000 0000;C;
-0178 00FF 0000 0000;C;
-0179 017A 0000 0000;C;
-017B 017C 0000 0000;C;
-017D 017E 0000 0000;C;
-017F 0073 0000 0000;C;
-0181 0253 0000 0000;C;
-0182 0183 0000 0000;C;
-0184 0185 0000 0000;C;
-0186 0254 0000 0000;C;
-0187 0188 0000 0000;C;
-0189 0256 0000 0000;C;
-018A 0257 0000 0000;C;
-018B 018C 0000 0000;C;
-018E 01DD 0000 0000;C;
-018F 0259 0000 0000;C;
-0190 025B 0000 0000;C;
-0191 0192 0000 0000;C;
-0193 0260 0000 0000;C;
-0194 0263 0000 0000;C;
-0196 0269 0000 0000;C;
-0197 0268 0000 0000;C;
-0198 0199 0000 0000;C;
-019C 026F 0000 0000;C;
-019D 0272 0000 0000;C;
-019F 0275 0000 0000;C;
-01A0 01A1 0000 0000;C;
-01A2 01A3 0000 0000;C;
-01A4 01A5 0000 0000;C;
-01A6 0280 0000 0000;C;
-01A7 01A8 0000 0000;C;
-01A9 0283 0000 0000;C;
-01AC 01AD 0000 0000;C;
-01AE 0288 0000 0000;C;
-01AF 01B0 0000 0000;C;
-01B1 028A 0000 0000;C;
-01B2 028B 0000 0000;C;
-01B3 01B4 0000 0000;C;
-01B5 01B6 0000 0000;C;
-01B7 0292 0000 0000;C;
-01B8 01B9 0000 0000;C;
-01BC 01BD 0000 0000;C;
-01C4 01C6 0000 0000;C;
-01C5 01C6 0000 0000;C;
-01C7 01C9 0000 0000;C;
-01C8 01C9 0000 0000;C;
-01CA 01CC 0000 0000;C;
-01CB 01CC 0000 0000;C;
-01CD 01CE 0000 0000;C;
-01CF 01D0 0000 0000;C;
-01D1 01D2 0000 0000;C;
-01D3 01D4 0000 0000;C;
-01D5 01D6 0000 0000;C;
-01D7 01D8 0000 0000;C;
-01D9 01DA 0000 0000;C;
-01DB 01DC 0000 0000;C;
-01DE 01DF 0000 0000;C;
-01E0 01E1 0000 0000;C;
-01E2 01E3 0000 0000;C;
-01E4 01E5 0000 0000;C;
-01E6 01E7 0000 0000;C;
-01E8 01E9 0000 0000;C;
-01EA 01EB 0000 0000;C;
-01EC 01ED 0000 0000;C;
-01EE 01EF 0000 0000;C;
-01F0 006A 030C 0000;F;
-01F1 01F3 0000 0000;C;
-01F2 01F3 0000 0000;C;
-01F4 01F5 0000 0000;C;
-01F6 0195 0000 0000;C;
-01F7 01BF 0000 0000;C;
-01F8 01F9 0000 0000;C;
-01FA 01FB 0000 0000;C;
-01FC 01FD 0000 0000;C;
-01FE 01FF 0000 0000;C;
-0200 0201 0000 0000;C;
-0202 0203 0000 0000;C;
-0204 0205 0000 0000;C;
-0206 0207 0000 0000;C;
-0208 0209 0000 0000;C;
-020A 020B 0000 0000;C;
-020C 020D 0000 0000;C;
-020E 020F 0000 0000;C;
-0210 0211 0000 0000;C;
-0212 0213 0000 0000;C;
-0214 0215 0000 0000;C;
-0216 0217 0000 0000;C;
-0218 0219 0000 0000;C;
-021A 021B 0000 0000;C;
-021C 021D 0000 0000;C;
-021E 021F 0000 0000;C;
-0222 0223 0000 0000;C;
-0224 0225 0000 0000;C;
-0226 0227 0000 0000;C;
-0228 0229 0000 0000;C;
-022A 022B 0000 0000;C;
-022C 022D 0000 0000;C;
-022E 022F 0000 0000;C;
-0230 0231 0000 0000;C;
-0232 0233 0000 0000;C;
-0345 03B9 0000 0000;C;
-0386 03AC 0000 0000;C;
-0388 03AD 0000 0000;C;
-0389 03AE 0000 0000;C;
-038A 03AF 0000 0000;C;
-038C 03CC 0000 0000;C;
-038E 03CD 0000 0000;C;
-038F 03CE 0000 0000;C;
-0390 03B9 0308 0301;F;
-0391 03B1 0000 0000;C;
-0392 03B2 0000 0000;C;
-0393 03B3 0000 0000;C;
-0394 03B4 0000 0000;C;
-0395 03B5 0000 0000;C;
-0396 03B6 0000 0000;C;
-0397 03B7 0000 0000;C;
-0398 03B8 0000 0000;C;
-0399 03B9 0000 0000;C;
-039A 03BA 0000 0000;C;
-039B 03BB 0000 0000;C;
-039C 03BC 0000 0000;C;
-039D 03BD 0000 0000;C;
-039E 03BE 0000 0000;C;
-039F 03BF 0000 0000;C;
-03A0 03C0 0000 0000;C;
-03A1 03C1 0000 0000;C;
-03A3 03C3 0000 0000;C;
-03A4 03C4 0000 0000;C;
-03A5 03C5 0000 0000;C;
-03A6 03C6 0000 0000;C;
-03A7 03C7 0000 0000;C;
-03A8 03C8 0000 0000;C;
-03A9 03C9 0000 0000;C;
-03AA 03CA 0000 0000;C;
-03AB 03CB 0000 0000;C;
-03B0 03C5 0308 0301;F;
-03C2 03C3 0000 0000;C;
-03D0 03B2 0000 0000;C;
-03D1 03B8 0000 0000;C;
-03D5 03C6 0000 0000;C;
-03D6 03C0 0000 0000;C;
-03DA 03DB 0000 0000;C;
-03DC 03DD 0000 0000;C;
-03DE 03DF 0000 0000;C;
-03E0 03E1 0000 0000;C;
-03E2 03E3 0000 0000;C;
-03E4 03E5 0000 0000;C;
-03E6 03E7 0000 0000;C;
-03E8 03E9 0000 0000;C;
-03EA 03EB 0000 0000;C;
-03EC 03ED 0000 0000;C;
-03EE 03EF 0000 0000;C;
-03F0 03BA 0000 0000;C;
-03F1 03C1 0000 0000;C;
-03F2 03C3 0000 0000;C;
-03F4 03B8 0000 0000;C;
-03F5 03B5 0000 0000;C;
-0400 0450 0000 0000;C;
-0401 0451 0000 0000;C;
-0402 0452 0000 0000;C;
-0403 0453 0000 0000;C;
-0404 0454 0000 0000;C;
-0405 0455 0000 0000;C;
-0406 0456 0000 0000;C;
-0407 0457 0000 0000;C;
-0408 0458 0000 0000;C;
-0409 0459 0000 0000;C;
-040A 045A 0000 0000;C;
-040B 045B 0000 0000;C;
-040C 045C 0000 0000;C;
-040D 045D 0000 0000;C;
-040E 045E 0000 0000;C;
-040F 045F 0000 0000;C;
-0410 0430 0000 0000;C;
-0411 0431 0000 0000;C;
-0412 0432 0000 0000;C;
-0413 0433 0000 0000;C;
-0414 0434 0000 0000;C;
-0415 0435 0000 0000;C;
-0416 0436 0000 0000;C;
-0417 0437 0000 0000;C;
-0418 0438 0000 0000;C;
-0419 0439 0000 0000;C;
-041A 043A 0000 0000;C;
-041B 043B 0000 0000;C;
-041C 043C 0000 0000;C;
-041D 043D 0000 0000;C;
-041E 043E 0000 0000;C;
-041F 043F 0000 0000;C;
-0420 0440 0000 0000;C;
-0421 0441 0000 0000;C;
-0422 0442 0000 0000;C;
-0423 0443 0000 0000;C;
-0424 0444 0000 0000;C;
-0425 0445 0000 0000;C;
-0426 0446 0000 0000;C;
-0427 0447 0000 0000;C;
-0428 0448 0000 0000;C;
-0429 0449 0000 0000;C;
-042A 044A 0000 0000;C;
-042B 044B 0000 0000;C;
-042C 044C 0000 0000;C;
-042D 044D 0000 0000;C;
-042E 044E 0000 0000;C;
-042F 044F 0000 0000;C;
-0460 0461 0000 0000;C;
-0462 0463 0000 0000;C;
-0464 0465 0000 0000;C;
-0466 0467 0000 0000;C;
-0468 0469 0000 0000;C;
-046A 046B 0000 0000;C;
-046C 046D 0000 0000;C;
-046E 046F 0000 0000;C;
-0470 0471 0000 0000;C;
-0472 0473 0000 0000;C;
-0474 0475 0000 0000;C;
-0476 0477 0000 0000;C;
-0478 0479 0000 0000;C;
-047A 047B 0000 0000;C;
-047C 047D 0000 0000;C;
-047E 047F 0000 0000;C;
-0480 0481 0000 0000;C;
-048C 048D 0000 0000;C;
-048E 048F 0000 0000;C;
-0490 0491 0000 0000;C;
-0492 0493 0000 0000;C;
-0494 0495 0000 0000;C;
-0496 0497 0000 0000;C;
-0498 0499 0000 0000;C;
-049A 049B 0000 0000;C;
-049C 049D 0000 0000;C;
-049E 049F 0000 0000;C;
-04A0 04A1 0000 0000;C;
-04A2 04A3 0000 0000;C;
-04A4 04A5 0000 0000;C;
-04A6 04A7 0000 0000;C;
-04A8 04A9 0000 0000;C;
-04AA 04AB 0000 0000;C;
-04AC 04AD 0000 0000;C;
-04AE 04AF 0000 0000;C;
-04B0 04B1 0000 0000;C;
-04B2 04B3 0000 0000;C;
-04B4 04B5 0000 0000;C;
-04B6 04B7 0000 0000;C;
-04B8 04B9 0000 0000;C;
-04BA 04BB 0000 0000;C;
-04BC 04BD 0000 0000;C;
-04BE 04BF 0000 0000;C;
-04C1 04C2 0000 0000;C;
-04C3 04C4 0000 0000;C;
-04C7 04C8 0000 0000;C;
-04CB 04CC 0000 0000;C;
-04D0 04D1 0000 0000;C;
-04D2 04D3 0000 0000;C;
-04D4 04D5 0000 0000;C;
-04D6 04D7 0000 0000;C;
-04D8 04D9 0000 0000;C;
-04DA 04DB 0000 0000;C;
-04DC 04DD 0000 0000;C;
-04DE 04DF 0000 0000;C;
-04E0 04E1 0000 0000;C;
-04E2 04E3 0000 0000;C;
-04E4 04E5 0000 0000;C;
-04E6 04E7 0000 0000;C;
-04E8 04E9 0000 0000;C;
-04EA 04EB 0000 0000;C;
-04EC 04ED 0000 0000;C;
-04EE 04EF 0000 0000;C;
-04F0 04F1 0000 0000;C;
-04F2 04F3 0000 0000;C;
-04F4 04F5 0000 0000;C;
-04F8 04F9 0000 0000;C;
-0531 0561 0000 0000;C;
-0532 0562 0000 0000;C;
-0533 0563 0000 0000;C;
-0534 0564 0000 0000;C;
-0535 0565 0000 0000;C;
-0536 0566 0000 0000;C;
-0537 0567 0000 0000;C;
-0538 0568 0000 0000;C;
-0539 0569 0000 0000;C;
-053A 056A 0000 0000;C;
-053B 056B 0000 0000;C;
-053C 056C 0000 0000;C;
-053D 056D 0000 0000;C;
-053E 056E 0000 0000;C;
-053F 056F 0000 0000;C;
-0540 0570 0000 0000;C;
-0541 0571 0000 0000;C;
-0542 0572 0000 0000;C;
-0543 0573 0000 0000;C;
-0544 0574 0000 0000;C;
-0545 0575 0000 0000;C;
-0546 0576 0000 0000;C;
-0547 0577 0000 0000;C;
-0548 0578 0000 0000;C;
-0549 0579 0000 0000;C;
-054A 057A 0000 0000;C;
-054B 057B 0000 0000;C;
-054C 057C 0000 0000;C;
-054D 057D 0000 0000;C;
-054E 057E 0000 0000;C;
-054F 057F 0000 0000;C;
-0550 0580 0000 0000;C;
-0551 0581 0000 0000;C;
-0552 0582 0000 0000;C;
-0553 0583 0000 0000;C;
-0554 0584 0000 0000;C;
-0555 0585 0000 0000;C;
-0556 0586 0000 0000;C;
-0587 0565 0582 0000;F;
-1E00 1E01 0000 0000;C;
-1E02 1E03 0000 0000;C;
-1E04 1E05 0000 0000;C;
-1E06 1E07 0000 0000;C;
-1E08 1E09 0000 0000;C;
-1E0A 1E0B 0000 0000;C;
-1E0C 1E0D 0000 0000;C;
-1E0E 1E0F 0000 0000;C;
-1E10 1E11 0000 0000;C;
-1E12 1E13 0000 0000;C;
-1E14 1E15 0000 0000;C;
-1E16 1E17 0000 0000;C;
-1E18 1E19 0000 0000;C;
-1E1A 1E1B 0000 0000;C;
-1E1C 1E1D 0000 0000;C;
-1E1E 1E1F 0000 0000;C;
-1E20 1E21 0000 0000;C;
-1E22 1E23 0000 0000;C;
-1E24 1E25 0000 0000;C;
-1E26 1E27 0000 0000;C;
-1E28 1E29 0000 0000;C;
-1E2A 1E2B 0000 0000;C;
-1E2C 1E2D 0000 0000;C;
-1E2E 1E2F 0000 0000;C;
-1E30 1E31 0000 0000;C;
-1E32 1E33 0000 0000;C;
-1E34 1E35 0000 0000;C;
-1E36 1E37 0000 0000;C;
-1E38 1E39 0000 0000;C;
-1E3A 1E3B 0000 0000;C;
-1E3C 1E3D 0000 0000;C;
-1E3E 1E3F 0000 0000;C;
-1E40 1E41 0000 0000;C;
-1E42 1E43 0000 0000;C;
-1E44 1E45 0000 0000;C;
-1E46 1E47 0000 0000;C;
-1E48 1E49 0000 0000;C;
-1E4A 1E4B 0000 0000;C;
-1E4C 1E4D 0000 0000;C;
-1E4E 1E4F 0000 0000;C;
-1E50 1E51 0000 0000;C;
-1E52 1E53 0000 0000;C;
-1E54 1E55 0000 0000;C;
-1E56 1E57 0000 0000;C;
-1E58 1E59 0000 0000;C;
-1E5A 1E5B 0000 0000;C;
-1E5C 1E5D 0000 0000;C;
-1E5E 1E5F 0000 0000;C;
-1E60 1E61 0000 0000;C;
-1E62 1E63 0000 0000;C;
-1E64 1E65 0000 0000;C;
-1E66 1E67 0000 0000;C;
-1E68 1E69 0000 0000;C;
-1E6A 1E6B 0000 0000;C;
-1E6C 1E6D 0000 0000;C;
-1E6E 1E6F 0000 0000;C;
-1E70 1E71 0000 0000;C;
-1E72 1E73 0000 0000;C;
-1E74 1E75 0000 0000;C;
-1E76 1E77 0000 0000;C;
-1E78 1E79 0000 0000;C;
-1E7A 1E7B 0000 0000;C;
-1E7C 1E7D 0000 0000;C;
-1E7E 1E7F 0000 0000;C;
-1E80 1E81 0000 0000;C;
-1E82 1E83 0000 0000;C;
-1E84 1E85 0000 0000;C;
-1E86 1E87 0000 0000;C;
-1E88 1E89 0000 0000;C;
-1E8A 1E8B 0000 0000;C;
-1E8C 1E8D 0000 0000;C;
-1E8E 1E8F 0000 0000;C;
-1E90 1E91 0000 0000;C;
-1E92 1E93 0000 0000;C;
-1E94 1E95 0000 0000;C;
-1E96 0068 0331 0000;F;
-1E97 0074 0308 0000;F;
-1E98 0077 030A 0000;F;
-1E99 0079 030A 0000;F;
-1E9A 0061 02BE 0000;F;
-1E9B 1E61 0000 0000;C;
-1EA0 1EA1 0000 0000;C;
-1EA2 1EA3 0000 0000;C;
-1EA4 1EA5 0000 0000;C;
-1EA6 1EA7 0000 0000;C;
-1EA8 1EA9 0000 0000;C;
-1EAA 1EAB 0000 0000;C;
-1EAC 1EAD 0000 0000;C;
-1EAE 1EAF 0000 0000;C;
-1EB0 1EB1 0000 0000;C;
-1EB2 1EB3 0000 0000;C;
-1EB4 1EB5 0000 0000;C;
-1EB6 1EB7 0000 0000;C;
-1EB8 1EB9 0000 0000;C;
-1EBA 1EBB 0000 0000;C;
-1EBC 1EBD 0000 0000;C;
-1EBE 1EBF 0000 0000;C;
-1EC0 1EC1 0000 0000;C;
-1EC2 1EC3 0000 0000;C;
-1EC4 1EC5 0000 0000;C;
-1EC6 1EC7 0000 0000;C;
-1EC8 1EC9 0000 0000;C;
-1ECA 1ECB 0000 0000;C;
-1ECC 1ECD 0000 0000;C;
-1ECE 1ECF 0000 0000;C;
-1ED0 1ED1 0000 0000;C;
-1ED2 1ED3 0000 0000;C;
-1ED4 1ED5 0000 0000;C;
-1ED6 1ED7 0000 0000;C;
-1ED8 1ED9 0000 0000;C;
-1EDA 1EDB 0000 0000;C;
-1EDC 1EDD 0000 0000;C;
-1EDE 1EDF 0000 0000;C;
-1EE0 1EE1 0000 0000;C;
-1EE2 1EE3 0000 0000;C;
-1EE4 1EE5 0000 0000;C;
-1EE6 1EE7 0000 0000;C;
-1EE8 1EE9 0000 0000;C;
-1EEA 1EEB 0000 0000;C;
-1EEC 1EED 0000 0000;C;
-1EEE 1EEF 0000 0000;C;
-1EF0 1EF1 0000 0000;C;
-1EF2 1EF3 0000 0000;C;
-1EF4 1EF5 0000 0000;C;
-1EF6 1EF7 0000 0000;C;
-1EF8 1EF9 0000 0000;C;
-1F08 1F00 0000 0000;C;
-1F09 1F01 0000 0000;C;
-1F0A 1F02 0000 0000;C;
-1F0B 1F03 0000 0000;C;
-1F0C 1F04 0000 0000;C;
-1F0D 1F05 0000 0000;C;
-1F0E 1F06 0000 0000;C;
-1F0F 1F07 0000 0000;C;
-1F18 1F10 0000 0000;C;
-1F19 1F11 0000 0000;C;
-1F1A 1F12 0000 0000;C;
-1F1B 1F13 0000 0000;C;
-1F1C 1F14 0000 0000;C;
-1F1D 1F15 0000 0000;C;
-1F28 1F20 0000 0000;C;
-1F29 1F21 0000 0000;C;
-1F2A 1F22 0000 0000;C;
-1F2B 1F23 0000 0000;C;
-1F2C 1F24 0000 0000;C;
-1F2D 1F25 0000 0000;C;
-1F2E 1F26 0000 0000;C;
-1F2F 1F27 0000 0000;C;
-1F38 1F30 0000 0000;C;
-1F39 1F31 0000 0000;C;
-1F3A 1F32 0000 0000;C;
-1F3B 1F33 0000 0000;C;
-1F3C 1F34 0000 0000;C;
-1F3D 1F35 0000 0000;C;
-1F3E 1F36 0000 0000;C;
-1F3F 1F37 0000 0000;C;
-1F48 1F40 0000 0000;C;
-1F49 1F41 0000 0000;C;
-1F4A 1F42 0000 0000;C;
-1F4B 1F43 0000 0000;C;
-1F4C 1F44 0000 0000;C;
-1F4D 1F45 0000 0000;C;
-1F50 03C5 0313 0000;F;
-1F52 03C5 0313 0300;F;
-1F54 03C5 0313 0301;F;
-1F56 03C5 0313 0342;F;
-1F59 1F51 0000 0000;C;
-1F5B 1F53 0000 0000;C;
-1F5D 1F55 0000 0000;C;
-1F5F 1F57 0000 0000;C;
-1F68 1F60 0000 0000;C;
-1F69 1F61 0000 0000;C;
-1F6A 1F62 0000 0000;C;
-1F6B 1F63 0000 0000;C;
-1F6C 1F64 0000 0000;C;
-1F6D 1F65 0000 0000;C;
-1F6E 1F66 0000 0000;C;
-1F6F 1F67 0000 0000;C;
-1F80 1F00 03B9 0000;F;
-1F81 1F01 03B9 0000;F;
-1F82 1F02 03B9 0000;F;
-1F83 1F03 03B9 0000;F;
-1F84 1F04 03B9 0000;F;
-1F85 1F05 03B9 0000;F;
-1F86 1F06 03B9 0000;F;
-1F87 1F07 03B9 0000;F;
-1F88 1F00 03B9 0000;F;
-1F89 1F01 03B9 0000;F;
-1F8A 1F02 03B9 0000;F;
-1F8B 1F03 03B9 0000;F;
-1F8C 1F04 03B9 0000;F;
-1F8D 1F05 03B9 0000;F;
-1F8E 1F06 03B9 0000;F;
-1F8F 1F07 03B9 0000;F;
-1F90 1F20 03B9 0000;F;
-1F91 1F21 03B9 0000;F;
-1F92 1F22 03B9 0000;F;
-1F93 1F23 03B9 0000;F;
-1F94 1F24 03B9 0000;F;
-1F95 1F25 03B9 0000;F;
-1F96 1F26 03B9 0000;F;
-1F97 1F27 03B9 0000;F;
-1F98 1F20 03B9 0000;F;
-1F99 1F21 03B9 0000;F;
-1F9A 1F22 03B9 0000;F;
-1F9B 1F23 03B9 0000;F;
-1F9C 1F24 03B9 0000;F;
-1F9D 1F25 03B9 0000;F;
-1F9E 1F26 03B9 0000;F;
-1F9F 1F27 03B9 0000;F;
-1FA0 1F60 03B9 0000;F;
-1FA1 1F61 03B9 0000;F;
-1FA2 1F62 03B9 0000;F;
-1FA3 1F63 03B9 0000;F;
-1FA4 1F64 03B9 0000;F;
-1FA5 1F65 03B9 0000;F;
-1FA6 1F66 03B9 0000;F;
-1FA7 1F67 03B9 0000;F;
-1FA8 1F60 03B9 0000;F;
-1FA9 1F61 03B9 0000;F;
-1FAA 1F62 03B9 0000;F;
-1FAB 1F63 03B9 0000;F;
-1FAC 1F64 03B9 0000;F;
-1FAD 1F65 03B9 0000;F;
-1FAE 1F66 03B9 0000;F;
-1FAF 1F67 03B9 0000;F;
-1FB2 1F70 03B9 0000;F;
-1FB3 03B1 03B9 0000;F;
-1FB4 03AC 03B9 0000;F;
-1FB6 03B1 0342 0000;F;
-1FB7 03B1 0342 03B9;F;
-1FB8 1FB0 0000 0000;C;
-1FB9 1FB1 0000 0000;C;
-1FBA 1F70 0000 0000;C;
-1FBB 1F71 0000 0000;C;
-1FBC 03B1 03B9 0000;F;
-1FBE 03B9 0000 0000;C;
-1FC2 1F74 03B9 0000;F;
-1FC3 03B7 03B9 0000;F;
-1FC4 03AE 03B9 0000;F;
-1FC6 03B7 0342 0000;F;
-1FC7 03B7 0342 03B9;F;
-1FC8 1F72 0000 0000;C;
-1FC9 1F73 0000 0000;C;
-1FCA 1F74 0000 0000;C;
-1FCB 1F75 0000 0000;C;
-1FCC 03B7 03B9 0000;F;
-1FD2 03B9 0308 0300;F;
-1FD3 03B9 0308 0301;F;
-1FD6 03B9 0342 0000;F;
-1FD7 03B9 0308 0342;F;
-1FD8 1FD0 0000 0000;C;
-1FD9 1FD1 0000 0000;C;
-1FDA 1F76 0000 0000;C;
-1FDB 1F77 0000 0000;C;
-1FE2 03C5 0308 0300;F;
-1FE3 03C5 0308 0301;F;
-1FE4 03C1 0313 0000;F;
-1FE6 03C5 0342 0000;F;
-1FE7 03C5 0308 0342;F;
-1FE8 1FE0 0000 0000;C;
-1FE9 1FE1 0000 0000;C;
-1FEA 1F7A 0000 0000;C;
-1FEB 1F7B 0000 0000;C;
-1FEC 1FE5 0000 0000;C;
-1FF2 1F7C 03B9 0000;F;
-1FF3 03C9 03B9 0000;F;
-1FF4 03CE 03B9 0000;F;
-1FF6 03C9 0342 0000;F;
-1FF7 03C9 0342 03B9;F;
-1FF8 1F78 0000 0000;C;
-1FF9 1F79 0000 0000;C;
-1FFA 1F7C 0000 0000;C;
-1FFB 1F7D 0000 0000;C;
-1FFC 03C9 03B9 0000;F;
-2126 03C9 0000 0000;C;
-212A 006B 0000 0000;C;
-212B 00E5 0000 0000;C;
-2160 2170 0000 0000;C;
-2161 2171 0000 0000;C;
-2162 2172 0000 0000;C;
-2163 2173 0000 0000;C;
-2164 2174 0000 0000;C;
-2165 2175 0000 0000;C;
-2166 2176 0000 0000;C;
-2167 2177 0000 0000;C;
-2168 2178 0000 0000;C;
-2169 2179 0000 0000;C;
-216A 217A 0000 0000;C;
-216B 217B 0000 0000;C;
-216C 217C 0000 0000;C;
-216D 217D 0000 0000;C;
-216E 217E 0000 0000;C;
-216F 217F 0000 0000;C;
-24B6 24D0 0000 0000;C;
-24B7 24D1 0000 0000;C;
-24B8 24D2 0000 0000;C;
-24B9 24D3 0000 0000;C;
-24BA 24D4 0000 0000;C;
-24BB 24D5 0000 0000;C;
-24BC 24D6 0000 0000;C;
-24BD 24D7 0000 0000;C;
-24BE 24D8 0000 0000;C;
-24BF 24D9 0000 0000;C;
-24C0 24DA 0000 0000;C;
-24C1 24DB 0000 0000;C;
-24C2 24DC 0000 0000;C;
-24C3 24DD 0000 0000;C;
-24C4 24DE 0000 0000;C;
-24C5 24DF 0000 0000;C;
-24C6 24E0 0000 0000;C;
-24C7 24E1 0000 0000;C;
-24C8 24E2 0000 0000;C;
-24C9 24E3 0000 0000;C;
-24CA 24E4 0000 0000;C;
-24CB 24E5 0000 0000;C;
-24CC 24E6 0000 0000;C;
-24CD 24E7 0000 0000;C;
-24CE 24E8 0000 0000;C;
-24CF 24E9 0000 0000;C;
-FB00 0066 0066 0000;F;
-FB01 0066 0069 0000;F;
-FB02 0066 006C 0000;F;
-FB03 0066 0066 0069;F;
-FB04 0066 0066 006C;F;
-FB05 0073 0074 0000;F;
-FB06 0073 0074 0000;F;
-FB13 0574 0576 0000;F;
-FB14 0574 0565 0000;F;
-FB15 0574 056B 0000;F;
-FB16 057E 0576 0000;F;
-FB17 0574 056D 0000;F;
-FF21 FF41 0000 0000;C;
-FF22 FF42 0000 0000;C;
-FF23 FF43 0000 0000;C;
-FF24 FF44 0000 0000;C;
-FF25 FF45 0000 0000;C;
-FF26 FF46 0000 0000;C;
-FF27 FF47 0000 0000;C;
-FF28 FF48 0000 0000;C;
-FF29 FF49 0000 0000;C;
-FF2A FF4A 0000 0000;C;
-FF2B FF4B 0000 0000;C;
-FF2C FF4C 0000 0000;C;
-FF2D FF4D 0000 0000;C;
-FF2E FF4E 0000 0000;C;
-FF2F FF4F 0000 0000;C;
-FF30 FF50 0000 0000;C;
-FF31 FF51 0000 0000;C;
-FF32 FF52 0000 0000;C;
-FF33 FF53 0000 0000;C;
-FF34 FF54 0000 0000;C;
-FF35 FF55 0000 0000;C;
-FF36 FF56 0000 0000;C;
-FF37 FF57 0000 0000;C;
-FF38 FF58 0000 0000;C;
-FF39 FF59 0000 0000;C;
-FF3A FF5A 0000 0000;C;
diff --git a/data/uni-line.txt b/data/uni-line.txt
deleted file mode 100644 (file)
index 47230cc..0000000
+++ /dev/null
@@ -1,1126 +0,0 @@
-# uni-line.txt - Unicode line break class
-0000 0008;CM
-0009 0009;BA
-000A 000A;LF
-000B 000B;CM
-000C 000C;BK
-000D 000D;CR
-000E 001F;CM
-0020 0020;SP
-0021 0021;EX
-0022 0022;QU
-0023 0023;AL
-0024 0024;PR
-0025 0025;PO
-0026 0026;AL
-0027 0027;QU
-0028 0028;OP
-0029 0029;CL
-002A 002A;AL
-002B 002B;PR
-002C 002C;IS
-002D 002D;HY
-002E 002E;IS
-002F 002F;SY
-0030 0039;NU
-003A 003B;IS
-003C 003E;AL
-003F 003F;EX
-0040 0040;AL
-0041 005A;AL
-005B 005B;OP
-005C 005C;PR
-005D 005D;CL
-005E 005E;AL
-005F 005F;AL
-0060 0060;AL
-0061 007A;AL
-007B 007B;OP
-007C 007C;BA
-007D 007D;CL
-007E 007E;AL
-007F 009F;CM
-00A0 00A0;GL
-00A1 00A1;AI
-00A2 00A2;PO
-00A3 00A5;PR
-00A6 00A6;AL
-00A7 00A7;AI
-00A8 00A8;AI
-00A9 00A9;AL
-00AA 00AA;AI
-00AB 00AB;QU
-00AC 00AC;AL
-00AD 00AD;BA
-00AE 00AE;AL
-00AF 00AF;AL
-00B0 00B0;PO
-00B1 00B1;PR
-00B2 00B3;AI
-00B4 00B4;BB
-00B5 00B5;AL
-00B6 00B6;AI
-00B7 00B7;AI
-00B8 00B8;AI
-00B9 00B9;AI
-00BA 00BA;AI
-00BB 00BB;QU
-00BC 00BE;AI
-00BF 00BF;AI
-00C0 00C5;AL
-00C6 00C6;AI
-00C7 00CF;AL
-00D0 00D0;AI
-00D1 00D6;AL
-00D7 00D7;AI
-00D8 00D8;AI
-00D9 00DD;AL
-00DE 00E1;AI
-00E2 00E5;AL
-00E6 00E6;AI
-00E7 00E7;AL
-00E8 00EA;AI
-00EB 00EB;AL
-00EC 00ED;AI
-00EE 00EF;AL
-00F0 00F0;AI
-00F1 00F1;AL
-00F2 00F3;AI
-00F4 00F6;AL
-00F7 00F7;AI
-00F8 00FA;AI
-00FB 00FB;AL
-00FC 00FC;AI
-00FD 00FD;AL
-00FE 00FE;AI
-00FF 0100;AL
-0101 0101;AI
-0102 0110;AL
-0111 0111;AI
-0112 0112;AL
-0113 0113;AI
-0114 011A;AL
-011B 011B;AI
-011C 0125;AL
-0126 0127;AI
-0128 012A;AL
-012B 012B;AI
-012C 0130;AL
-0131 0133;AI
-0134 0137;AL
-0138 0138;AI
-0139 013E;AL
-013F 0142;AI
-0143 0143;AL
-0144 0144;AI
-0145 0147;AL
-0148 014A;AI
-014B 014C;AL
-014D 014D;AI
-014E 0151;AL
-0152 0153;AI
-0154 0165;AL
-0166 0167;AI
-0168 016A;AL
-016B 016B;AI
-016C 01BA;AL
-01BB 01BB;AL
-01BC 01BF;AL
-01C0 01C3;AL
-01C4 01CD;AL
-01CE 01CE;AI
-01CF 01CF;AL
-01D0 01D0;AI
-01D1 01D1;AL
-01D2 01D2;AI
-01D3 01D3;AL
-01D4 01D4;AI
-01D5 01D5;AL
-01D6 01D6;AI
-01D7 01D7;AL
-01D8 01D8;AI
-01D9 01D9;AL
-01DA 01DA;AI
-01DB 01DB;AL
-01DC 01DC;AI
-01DD 021F;AL
-0222 0233;AL
-0250 0250;AL
-0251 0251;AI
-0252 0260;AL
-0261 0261;AI
-0262 02AD;AL
-02B0 02B8;AL
-02B9 02BA;AL
-02BB 02C1;AL
-02C2 02C6;AL
-02C7 02C7;AI
-02C8 02C8;BB
-02C9 02CB;AI
-02CC 02CC;BB
-02CD 02CD;AI
-02CE 02CF;AL
-02D0 02D0;AI
-02D1 02D1;AL
-02D2 02D7;AL
-02D8 02DB;AI
-02DC 02DC;AL
-02DD 02DD;AI
-02DE 02DF;AL
-02E0 02E4;AL
-02E5 02ED;AL
-02EE 02EE;AL
-0300 034E;CM
-0360 0362;CM
-0374 0375;AL
-037A 037A;AL
-037E 037E;AL
-0384 0385;AL
-0386 0386;AL
-0387 0387;AL
-0388 038A;AL
-038C 038C;AL
-038E 0390;AL
-0391 03A1;AI
-03A3 03A9;AI
-03AA 03B0;AL
-03B1 03C1;AI
-03C2 03C2;AL
-03C3 03C9;AI
-03CA 03CE;AL
-03D0 03D7;AL
-03DA 03F5;AL
-0400 0400;AL
-0401 0401;AI
-0402 040F;AL
-0410 044F;AI
-0450 0450;AL
-0451 0451;AI
-0452 0481;AL
-0482 0482;AL
-0483 0486;CM
-0488 0489;CM
-048C 04C4;AL
-04C7 04C8;AL
-04CB 04CC;AL
-04D0 04F5;AL
-04F8 04F9;AL
-0531 0556;AL
-0559 0559;AL
-055A 055F;AL
-0561 0587;AL
-0589 0589;IS
-058A 058A;BA
-0591 05A1;CM
-05A3 05B9;CM
-05BB 05BD;CM
-05BE 05BE;AL
-05BF 05BF;CM
-05C0 05C0;AL
-05C1 05C2;CM
-05C3 05C3;AL
-05C4 05C4;CM
-05D0 05EA;AL
-05F0 05F2;AL
-05F3 05F4;AL
-060C 060C;AL
-061B 061B;AL
-061F 061F;AL
-0621 063A;AL
-0640 0640;AL
-0641 064A;AL
-064B 0655;CM
-0660 0669;NU
-066A 066D;AL
-0670 0670;CM
-0671 06D3;AL
-06D4 06D4;AL
-06D5 06D5;AL
-06D6 06DC;CM
-06DD 06DE;CM
-06DF 06E4;CM
-06E5 06E6;AL
-06E7 06E8;CM
-06E9 06E9;AL
-06EA 06ED;CM
-06F0 06F9;NU
-06FA 06FC;AL
-06FD 06FE;AL
-0700 070D;AL
-070F 070F;CM
-0710 0710;AL
-0711 0711;CM
-0712 072C;AL
-0730 074A;CM
-0780 07A5;AL
-07A6 07B0;CM
-0901 0902;CM
-0903 0903;CM
-0905 0939;AL
-093C 093C;CM
-093D 093D;AL
-093E 0940;CM
-0941 0948;CM
-0949 094C;CM
-094D 094D;CM
-0950 0950;AL
-0951 0954;CM
-0958 0961;AL
-0962 0963;CM
-0964 0965;AL
-0966 096F;NU
-0970 0970;AL
-0981 0981;CM
-0982 0983;CM
-0985 098C;AL
-098F 0990;AL
-0993 09A8;AL
-09AA 09B0;AL
-09B2 09B2;AL
-09B6 09B9;AL
-09BC 09BC;CM
-09BE 09C0;CM
-09C1 09C4;CM
-09C7 09C8;CM
-09CB 09CC;CM
-09CD 09CD;CM
-09D7 09D7;CM
-09DC 09DD;AL
-09DF 09E1;AL
-09E2 09E3;CM
-09E6 09EF;NU
-09F0 09F1;AL
-09F2 09F3;PR
-09F4 09F9;AL
-09FA 09FA;AL
-0A02 0A02;CM
-0A05 0A0A;AL
-0A0F 0A10;AL
-0A13 0A28;AL
-0A2A 0A30;AL
-0A32 0A33;AL
-0A35 0A36;AL
-0A38 0A39;AL
-0A3C 0A3C;CM
-0A3E 0A40;CM
-0A41 0A42;CM
-0A47 0A48;CM
-0A4B 0A4D;CM
-0A59 0A5C;AL
-0A5E 0A5E;AL
-0A66 0A6F;NU
-0A70 0A71;CM
-0A72 0A74;AL
-0A81 0A82;CM
-0A83 0A83;CM
-0A85 0A8B;AL
-0A8D 0A8D;AL
-0A8F 0A91;AL
-0A93 0AA8;AL
-0AAA 0AB0;AL
-0AB2 0AB3;AL
-0AB5 0AB9;AL
-0ABC 0ABC;CM
-0ABD 0ABD;AL
-0ABE 0AC0;CM
-0AC1 0AC5;CM
-0AC7 0AC8;CM
-0AC9 0AC9;CM
-0ACB 0ACC;CM
-0ACD 0ACD;CM
-0AD0 0AD0;AL
-0AE0 0AE0;AL
-0AE6 0AEF;NU
-0B01 0B01;CM
-0B02 0B03;CM
-0B05 0B0C;AL
-0B0F 0B10;AL
-0B13 0B28;AL
-0B2A 0B30;AL
-0B32 0B33;AL
-0B36 0B39;AL
-0B3C 0B3C;CM
-0B3D 0B3D;AL
-0B3E 0B3E;CM
-0B3F 0B3F;CM
-0B40 0B40;CM
-0B41 0B43;CM
-0B47 0B48;CM
-0B4B 0B4C;CM
-0B4D 0B4D;CM
-0B56 0B56;CM
-0B57 0B57;CM
-0B5C 0B5D;AL
-0B5F 0B61;AL
-0B66 0B6F;NU
-0B70 0B70;AL
-0B82 0B82;CM
-0B83 0B83;CM
-0B85 0B8A;AL
-0B8E 0B90;AL
-0B92 0B95;AL
-0B99 0B9A;AL
-0B9C 0B9C;AL
-0B9E 0B9F;AL
-0BA3 0BA4;AL
-0BA8 0BAA;AL
-0BAE 0BB5;AL
-0BB7 0BB9;AL
-0BBE 0BBF;CM
-0BC0 0BC0;CM
-0BC1 0BC2;CM
-0BC6 0BC8;CM
-0BCA 0BCC;CM
-0BCD 0BCD;CM
-0BD7 0BD7;CM
-0BE7 0BEF;NU
-0BF0 0BF2;AL
-0C01 0C03;CM
-0C05 0C0C;AL
-0C0E 0C10;AL
-0C12 0C28;AL
-0C2A 0C33;AL
-0C35 0C39;AL
-0C3E 0C40;CM
-0C41 0C44;CM
-0C46 0C48;CM
-0C4A 0C4D;CM
-0C55 0C56;CM
-0C60 0C61;AL
-0C66 0C6F;NU
-0C82 0C83;CM
-0C85 0C8C;AL
-0C8E 0C90;AL
-0C92 0CA8;AL
-0CAA 0CB3;AL
-0CB5 0CB9;AL
-0CBE 0CBE;CM
-0CBF 0CBF;CM
-0CC0 0CC4;CM
-0CC6 0CC6;CM
-0CC7 0CC8;CM
-0CCA 0CCB;CM
-0CCC 0CCD;CM
-0CD5 0CD6;CM
-0CDE 0CDE;AL
-0CE0 0CE1;AL
-0CE6 0CEF;NU
-0D02 0D03;CM
-0D05 0D0C;AL
-0D0E 0D10;AL
-0D12 0D28;AL
-0D2A 0D39;AL
-0D3E 0D40;CM
-0D41 0D43;CM
-0D46 0D48;CM
-0D4A 0D4C;CM
-0D4D 0D4D;CM
-0D57 0D57;CM
-0D60 0D61;AL
-0D66 0D6F;NU
-0D82 0D83;CM
-0D85 0D96;AL
-0D9A 0DB1;AL
-0DB3 0DBB;AL
-0DBD 0DBD;AL
-0DC0 0DC6;AL
-0DCA 0DCA;CM
-0DCF 0DD1;CM
-0DD2 0DD4;CM
-0DD6 0DD6;CM
-0DD8 0DDF;CM
-0DF2 0DF3;CM
-0DF4 0DF4;AL
-0E01 0E30;SA
-0E31 0E31;CM
-0E32 0E33;SA
-0E34 0E3A;CM
-0E3F 0E3F;PR
-0E40 0E45;SA
-0E46 0E46;SA
-0E47 0E4E;CM
-0E4F 0E4F;AL
-0E50 0E59;NU
-0E5A 0E5B;NS
-0E81 0E82;SA
-0E84 0E84;SA
-0E87 0E88;SA
-0E8A 0E8A;SA
-0E8D 0E8D;SA
-0E94 0E97;SA
-0E99 0E9F;SA
-0EA1 0EA3;SA
-0EA5 0EA5;SA
-0EA7 0EA7;SA
-0EAA 0EAB;SA
-0EAD 0EB0;SA
-0EB1 0EB1;CM
-0EB2 0EB3;SA
-0EB4 0EB9;CM
-0EBB 0EBC;CM
-0EBD 0EBD;SA
-0EC0 0EC4;SA
-0EC6 0EC6;SA
-0EC8 0ECD;CM
-0ED0 0ED9;NU
-0EDC 0EDD;SA
-0F00 0F00;AL
-0F01 0F03;AL
-0F04 0F0A;AL
-0F0B 0F0B;BA
-0F0C 0F0C;GL
-0F0D 0F12;AL
-0F13 0F17;AL
-0F18 0F19;CM
-0F1A 0F1F;AL
-0F20 0F29;NU
-0F2A 0F33;AL
-0F34 0F34;AL
-0F35 0F35;CM
-0F36 0F36;AL
-0F37 0F37;CM
-0F38 0F38;AL
-0F39 0F39;CM
-0F3A 0F3A;OP
-0F3B 0F3B;CL
-0F3C 0F3C;OP
-0F3D 0F3D;CL
-0F3E 0F3F;CM
-0F40 0F47;AL
-0F49 0F6A;AL
-0F71 0F7E;CM
-0F7F 0F7F;CM
-0F80 0F84;CM
-0F85 0F85;AL
-0F86 0F87;CM
-0F88 0F8B;AL
-0F90 0F97;CM
-0F99 0FBC;CM
-0FBE 0FC5;AL
-0FC6 0FC6;CM
-0FC7 0FCC;AL
-0FCF 0FCF;AL
-1000 1021;SA
-1023 1027;SA
-1029 102A;SA
-102C 102C;CM
-102D 1030;CM
-1031 1031;CM
-1032 1032;CM
-1036 1037;CM
-1038 1038;CM
-1039 1039;CM
-1040 1049;NU
-104A 104F;AL
-1050 1055;SA
-1056 1057;CM
-1058 1059;CM
-10A0 10C5;AL
-10D0 10F6;AL
-10FB 10FB;AL
-1100 1159;ID
-115F 115F;ID
-1160 11A2;CM
-11A8 11F9;CM
-1200 1206;AL
-1208 1246;AL
-1248 1248;AL
-124A 124D;AL
-1250 1256;AL
-1258 1258;AL
-125A 125D;AL
-1260 1286;AL
-1288 1288;AL
-128A 128D;AL
-1290 12AE;AL
-12B0 12B0;AL
-12B2 12B5;AL
-12B8 12BE;AL
-12C0 12C0;AL
-12C2 12C5;AL
-12C8 12CE;AL
-12D0 12D6;AL
-12D8 12EE;AL
-12F0 130E;AL
-1310 1310;AL
-1312 1315;AL
-1318 131E;AL
-1320 1346;AL
-1348 135A;AL
-1361 1361;BA
-1362 1368;AL
-1369 1371;NU
-1372 137C;AL
-13A0 13F4;AL
-1401 166C;AL
-166D 166E;AL
-166F 1676;AL
-1680 1680;BA
-1681 169A;AL
-169B 169B;OP
-169C 169C;CL
-16A0 16EA;AL
-16EB 16ED;AL
-16EE 16F0;AL
-1780 17B3;SA
-17B4 17B6;CM
-17B7 17BD;CM
-17BE 17C5;CM
-17C6 17C6;CM
-17C7 17C8;CM
-17C9 17D3;CM
-17D4 17D4;NS
-17D5 17D5;BA
-17D6 17DA;NS
-17DB 17DB;PR
-17DC 17DC;AL
-17E0 17E9;NU
-1800 1805;AL
-1806 1806;BB
-1807 180A;AL
-180B 180E;CM
-1810 1819;NU
-1820 1842;AL
-1843 1843;AL
-1844 1877;AL
-1880 18A8;AL
-18A9 18A9;CM
-1E00 1E9B;AL
-1EA0 1EF9;AL
-1F00 1F15;AL
-1F18 1F1D;AL
-1F20 1F45;AL
-1F48 1F4D;AL
-1F50 1F57;AL
-1F59 1F59;AL
-1F5B 1F5B;AL
-1F5D 1F5D;AL
-1F5F 1F7D;AL
-1F80 1FB4;AL
-1FB6 1FBC;AL
-1FBD 1FBD;AL
-1FBE 1FBE;AL
-1FBF 1FC1;AL
-1FC2 1FC4;AL
-1FC6 1FCC;AL
-1FCD 1FCF;AL
-1FD0 1FD3;AL
-1FD6 1FDB;AL
-1FDD 1FDF;AL
-1FE0 1FEC;AL
-1FED 1FEF;AL
-1FF2 1FF4;AL
-1FF6 1FFC;AL
-1FFD 1FFE;AL
-2000 2006;BA
-2007 2007;GL
-2008 200A;BA
-200B 200B;ZW
-200C 200F;CM
-2010 2010;BA
-2011 2011;GL
-2012 2013;BA
-2014 2014;B2
-2015 2015;AI
-2016 2016;AI
-2017 2017;AL
-2018 2018;QU
-2019 2019;QU
-201A 201A;OP
-201B 201C;QU
-201D 201D;QU
-201E 201E;OP
-201F 201F;QU
-2020 2021;AI
-2022 2023;AL
-2024 2026;IN
-2027 2027;BA
-2028 2028;BK
-2029 2029;BK
-202A 202E;CM
-202F 202F;GL
-2030 2037;PO
-2038 2038;AL
-2039 2039;QU
-203A 203A;QU
-203B 203B;AI
-203C 203C;NS
-203D 203E;AL
-203F 2040;AL
-2041 2043;AL
-2044 2044;NS
-2045 2045;OP
-2046 2046;CL
-2048 204D;AL
-206A 206F;CM
-2070 2070;AL
-2074 2074;AI
-2075 2079;AL
-207A 207C;AL
-207D 207D;OP
-207E 207E;CL
-207F 207F;AI
-2080 2080;AL
-2081 2084;AI
-2085 2089;AL
-208A 208C;AL
-208D 208D;OP
-208E 208E;CL
-20A0 20A6;PR
-20A7 20A7;PO
-20A8 20AF;PR
-20D0 20DC;CM
-20DD 20E0;CM
-20E1 20E1;CM
-20E2 20E3;CM
-2100 2101;AL
-2102 2102;AL
-2103 2103;PO
-2104 2104;AL
-2105 2105;AI
-2106 2106;AL
-2107 2107;AL
-2108 2108;AL
-2109 2109;PO
-210A 2112;AL
-2113 2113;AI
-2114 2114;AL
-2115 2115;AL
-2116 2116;PR
-2117 2118;AL
-2119 211D;AL
-211E 2120;AL
-2121 2122;AI
-2123 2123;AL
-2124 2124;AL
-2125 2125;AL
-2126 2126;PO
-2127 2127;AL
-2128 2128;AL
-2129 2129;AL
-212A 212A;AL
-212B 212B;AI
-212C 212D;AL
-212E 212E;AL
-212F 2131;AL
-2132 2132;AL
-2133 2134;AL
-2135 2138;AL
-2139 2139;AL
-213A 213A;AL
-2153 2153;AL
-2154 2155;AI
-2156 215A;AL
-215B 215B;AI
-215C 215D;AL
-215E 215E;AI
-215F 215F;AL
-2160 216B;AI
-216C 216F;AL
-2170 2179;AI
-217A 2183;AL
-2190 2194;AI
-2195 2199;AI
-219A 219B;AL
-219C 219F;AL
-21A0 21A0;AL
-21A1 21A2;AL
-21A3 21A3;AL
-21A4 21A5;AL
-21A6 21A6;AL
-21A7 21AD;AL
-21AE 21AE;AL
-21AF 21CD;AL
-21CE 21CF;AL
-21D0 21D1;AL
-21D2 21D2;AI
-21D3 21D3;AL
-21D4 21D4;AI
-21D5 21F3;AL
-2200 2200;AI
-2201 2201;AL
-2202 2203;AI
-2204 2206;AL
-2207 2208;AI
-2209 220A;AL
-220B 220B;AI
-220C 220E;AL
-220F 220F;AI
-2210 2210;AL
-2211 2211;AI
-2212 2213;PR
-2214 2214;AL
-2215 2215;AI
-2216 2219;AL
-221A 221A;AI
-221B 221C;AL
-221D 2220;AI
-2221 2222;AL
-2223 2223;AI
-2224 2224;AL
-2225 2225;AI
-2226 2226;AL
-2227 222C;AI
-222D 222D;AL
-222E 222E;AI
-222F 2233;AL
-2234 2237;AI
-2238 223B;AL
-223C 223D;AI
-223E 2247;AL
-2248 2248;AI
-2249 224B;AL
-224C 224C;AI
-224D 2251;AL
-2252 2252;AI
-2253 225F;AL
-2260 2261;AI
-2262 2263;AL
-2264 2267;AI
-2268 2269;AL
-226A 226B;AI
-226C 226D;AL
-226E 226F;AI
-2270 2281;AL
-2282 2283;AI
-2284 2285;AL
-2286 2287;AI
-2288 2294;AL
-2295 2295;AI
-2296 2298;AL
-2299 2299;AI
-229A 22A4;AL
-22A5 22A5;AI
-22A6 22BE;AL
-22BF 22BF;AI
-22C0 22F1;AL
-2300 2307;AL
-2308 230B;AL
-230C 2311;AL
-2312 2312;AI
-2313 231F;AL
-2320 2321;AL
-2322 2328;AL
-2329 2329;OP
-232A 232A;CL
-232B 237B;AL
-237D 239A;AL
-2400 2426;AL
-2440 244A;AL
-2460 249B;AI
-249C 24BF;AI
-24C0 24CF;AL
-24D0 24E9;AI
-24EA 24EA;AL
-2500 254B;AI
-254C 254F;AL
-2550 2574;AI
-2575 257F;AL
-2580 258F;AI
-2590 2591;AL
-2592 2595;AI
-25A0 25A1;AI
-25A2 25A2;AL
-25A3 25A9;AI
-25AA 25B1;AL
-25B2 25B3;AI
-25B4 25B5;AL
-25B6 25B6;AI
-25B7 25B7;AI
-25B8 25BB;AL
-25BC 25BD;AI
-25BE 25BF;AL
-25C0 25C0;AI
-25C1 25C1;AI
-25C2 25C5;AL
-25C6 25C8;AI
-25C9 25CA;AL
-25CB 25CB;AI
-25CC 25CD;AL
-25CE 25D1;AI
-25D2 25E1;AL
-25E2 25E5;AI
-25E6 25EE;AL
-25EF 25EF;AI
-25F0 25F7;AL
-2600 2604;AL
-2605 2606;AI
-2607 2608;AL
-2609 2609;AI
-260A 260D;AL
-260E 260F;AI
-2610 2613;AL
-2619 261B;AL
-261C 261C;AI
-261D 261D;AL
-261E 261E;AI
-261F 263F;AL
-2640 2640;AI
-2641 2641;AL
-2642 2642;AI
-2643 265F;AL
-2660 2661;AI
-2662 2662;AL
-2663 2665;AI
-2666 2666;AL
-2667 266A;AI
-266B 266B;AL
-266C 266D;AI
-266E 266E;AL
-266F 266F;AI
-2670 2671;AL
-2701 2704;AL
-2706 2709;AL
-270C 2727;AL
-2729 274B;AL
-274D 274D;AL
-274F 2752;AL
-2756 2756;AL
-2758 275E;AL
-2761 2767;AL
-2776 2793;AL
-2794 2794;AL
-2798 27AF;AL
-27B1 27BE;AL
-2800 28FF;AL
-2E80 2E99;ID
-2E9B 2EF3;ID
-2F00 2FD5;ID
-2FF0 2FFB;ID
-3000 3000;ID
-3001 3002;CL
-3003 3003;ID
-3004 3004;ID
-3005 3005;NS
-3006 3006;ID
-3007 3007;ID
-3008 3008;OP
-3009 3009;CL
-300A 300A;OP
-300B 300B;CL
-300C 300C;OP
-300D 300D;CL
-300E 300E;OP
-300F 300F;CL
-3010 3010;OP
-3011 3011;CL
-3012 3013;ID
-3014 3014;OP
-3015 3015;CL
-3016 3016;OP
-3017 3017;CL
-3018 3018;OP
-3019 3019;CL
-301A 301A;OP
-301B 301B;CL
-301C 301C;NS
-301D 301D;OP
-301E 301F;CL
-3020 3020;ID
-3021 3029;ID
-302A 302F;CM
-3030 3030;ID
-3031 3035;ID
-3036 3037;ID
-3038 303A;ID
-303E 303F;ID
-3041 3041;NS
-3042 3042;ID
-3043 3043;NS
-3044 3044;ID
-3045 3045;NS
-3046 3046;ID
-3047 3047;NS
-3048 3048;ID
-3049 3049;NS
-304A 3062;ID
-3063 3063;NS
-3064 3082;ID
-3083 3083;NS
-3084 3084;ID
-3085 3085;NS
-3086 3086;ID
-3087 3087;NS
-3088 308D;ID
-308E 308E;NS
-308F 3094;ID
-3099 309A;CM
-309B 309C;NS
-309D 309E;NS
-30A1 30A1;NS
-30A2 30A2;ID
-30A3 30A3;NS
-30A4 30A4;ID
-30A5 30A5;NS
-30A6 30A6;ID
-30A7 30A7;NS
-30A8 30A8;ID
-30A9 30A9;NS
-30AA 30C2;ID
-30C3 30C3;NS
-30C4 30E2;ID
-30E3 30E3;NS
-30E4 30E4;ID
-30E5 30E5;NS
-30E6 30E6;ID
-30E7 30E7;NS
-30E8 30ED;ID
-30EE 30EE;NS
-30EF 30F4;ID
-30F5 30F6;NS
-30F7 30FA;ID
-30FB 30FB;NS
-30FC 30FC;ID
-30FD 30FD;NS
-30FE 30FE;ID
-3105 312C;ID
-3131 318E;ID
-3190 3191;ID
-3192 3195;ID
-3196 319F;ID
-31A0 31B7;ID
-3200 321C;ID
-3220 3229;ID
-322A 3243;ID
-3260 327B;ID
-327F 327F;ID
-3280 3289;ID
-328A 32B0;ID
-32C0 32CB;ID
-32D0 32FE;ID
-3300 3376;ID
-337B 33DD;ID
-33E0 33FE;ID
-3400 4DB5;ID
-4E00 9FA5;ID
-A000 A48C;ID
-A490 A4A1;ID
-A4A4 A4B3;ID
-A4B5 A4C0;ID
-A4C2 A4C4;ID
-A4C6 A4C6;ID
-AC00 D7A3;ID
-D800 DFFF;SG
-E000 F8FF;XX
-F900 FA2D;ID
-FB00 FB06;AL
-FB13 FB17;AL
-FB1D FB1D;AL
-FB1E FB1E;CM
-FB1F FB28;AL
-FB29 FB29;AL
-FB2A FB36;AL
-FB38 FB3C;AL
-FB3E FB3E;AL
-FB40 FB41;AL
-FB43 FB44;AL
-FB46 FBB1;AL
-FBD3 FD3D;AL
-FD3E FD3E;OP
-FD3F FD3F;CL
-FD50 FD8F;AL
-FD92 FDC7;AL
-FDF0 FDFB;AL
-FE20 FE23;CM
-FE30 FE30;ID
-FE31 FE32;ID
-FE33 FE34;ID
-FE35 FE35;OP
-FE36 FE36;CL
-FE37 FE37;OP
-FE38 FE38;CL
-FE39 FE39;OP
-FE3A FE3A;CL
-FE3B FE3B;OP
-FE3C FE3C;CL
-FE3D FE3D;OP
-FE3E FE3E;CL
-FE3F FE3F;OP
-FE40 FE40;CL
-FE41 FE41;OP
-FE42 FE42;CL
-FE43 FE43;OP
-FE44 FE44;CL
-FE49 FE4C;ID
-FE4D FE4F;ID
-FE50 FE50;CL
-FE51 FE51;ID
-FE52 FE52;CL
-FE54 FE55;NS
-FE56 FE57;EX
-FE58 FE58;ID
-FE59 FE59;OP
-FE5A FE5A;CL
-FE5B FE5B;OP
-FE5C FE5C;CL
-FE5D FE5D;OP
-FE5E FE5E;CL
-FE5F FE61;ID
-FE62 FE62;ID
-FE63 FE63;ID
-FE64 FE66;ID
-FE68 FE68;ID
-FE69 FE69;PR
-FE6A FE6A;PO
-FE6B FE6B;ID
-FE70 FE72;AL
-FE74 FE74;AL
-FE76 FEFC;AL
-FEFF FEFF;GL
-FF01 FF01;EX
-FF02 FF03;ID
-FF04 FF04;PR
-FF05 FF05;PO
-FF06 FF07;ID
-FF08 FF08;OP
-FF09 FF09;CL
-FF0A FF0A;ID
-FF0B FF0B;ID
-FF0C FF0C;CL
-FF0D FF0D;ID
-FF0E FF0E;CL
-FF0F FF0F;ID
-FF10 FF19;ID
-FF1A FF1B;NS
-FF1C FF1E;ID
-FF1F FF1F;EX
-FF20 FF20;ID
-FF21 FF3A;ID
-FF3B FF3B;OP
-FF3C FF3C;ID
-FF3D FF3D;CL
-FF3E FF3E;ID
-FF3F FF3F;ID
-FF40 FF40;ID
-FF41 FF5A;ID
-FF5B FF5B;OP
-FF5C FF5C;ID
-FF5D FF5D;CL
-FF5E FF5E;ID
-FF61 FF61;CL
-FF62 FF62;OP
-FF63 FF63;CL
-FF64 FF64;CL
-FF65 FF65;NS
-FF66 FF66;AL
-FF67 FF6F;NS
-FF70 FF70;NS
-FF71 FF9D;AL
-FF9E FF9F;NS
-FFA0 FFBE;AL
-FFC2 FFC7;AL
-FFCA FFCF;AL
-FFD2 FFD7;AL
-FFDA FFDC;AL
-FFE0 FFE0;PO
-FFE1 FFE1;PR
-FFE2 FFE2;ID
-FFE3 FFE3;ID
-FFE4 FFE4;ID
-FFE5 FFE6;PR
-FFE8 FFE8;AL
-FFE9 FFEC;AL
-FFED FFEE;AL
-FFF9 FFFB;CM
-FFFC FFFC;CB
-FFFD FFFD;AI
diff --git a/data/uni-nfc.txt b/data/uni-nfc.txt
deleted file mode 100644 (file)
index 4ce77c5..0000000
+++ /dev/null
@@ -1,989 +0,0 @@
-# uni-nfc.txt - Unicode composition mapping
-003C 0338 226E;
-003D 0338 2260;
-003E 0338 226F;
-0041 0300 00C0;
-0041 0301 00C1;
-0041 0302 00C2;
-0041 0303 00C3;
-0041 0304 0100;
-0041 0306 0102;
-0041 0307 0226;
-0041 0308 00C4;
-0041 0309 1EA2;
-0041 030A 00C5;
-0041 030C 01CD;
-0041 030F 0200;
-0041 0311 0202;
-0041 0323 1EA0;
-0041 0325 1E00;
-0041 0328 0104;
-0042 0307 1E02;
-0042 0323 1E04;
-0042 0331 1E06;
-0043 0301 0106;
-0043 0302 0108;
-0043 0307 010A;
-0043 030C 010C;
-0043 0327 00C7;
-0044 0307 1E0A;
-0044 030C 010E;
-0044 0323 1E0C;
-0044 0327 1E10;
-0044 032D 1E12;
-0044 0331 1E0E;
-0045 0300 00C8;
-0045 0301 00C9;
-0045 0302 00CA;
-0045 0303 1EBC;
-0045 0304 0112;
-0045 0306 0114;
-0045 0307 0116;
-0045 0308 00CB;
-0045 0309 1EBA;
-0045 030C 011A;
-0045 030F 0204;
-0045 0311 0206;
-0045 0323 1EB8;
-0045 0327 0228;
-0045 0328 0118;
-0045 032D 1E18;
-0045 0330 1E1A;
-0046 0307 1E1E;
-0047 0301 01F4;
-0047 0302 011C;
-0047 0304 1E20;
-0047 0306 011E;
-0047 0307 0120;
-0047 030C 01E6;
-0047 0327 0122;
-0048 0302 0124;
-0048 0307 1E22;
-0048 0308 1E26;
-0048 030C 021E;
-0048 0323 1E24;
-0048 0327 1E28;
-0048 032E 1E2A;
-0049 0300 00CC;
-0049 0301 00CD;
-0049 0302 00CE;
-0049 0303 0128;
-0049 0304 012A;
-0049 0306 012C;
-0049 0307 0130;
-0049 0308 00CF;
-0049 0309 1EC8;
-0049 030C 01CF;
-0049 030F 0208;
-0049 0311 020A;
-0049 0323 1ECA;
-0049 0328 012E;
-0049 0330 1E2C;
-004A 0302 0134;
-004B 0301 1E30;
-004B 030C 01E8;
-004B 0323 1E32;
-004B 0327 0136;
-004B 0331 1E34;
-004C 0301 0139;
-004C 030C 013D;
-004C 0323 1E36;
-004C 0327 013B;
-004C 032D 1E3C;
-004C 0331 1E3A;
-004D 0301 1E3E;
-004D 0307 1E40;
-004D 0323 1E42;
-004E 0300 01F8;
-004E 0301 0143;
-004E 0303 00D1;
-004E 0307 1E44;
-004E 030C 0147;
-004E 0323 1E46;
-004E 0327 0145;
-004E 032D 1E4A;
-004E 0331 1E48;
-004F 0300 00D2;
-004F 0301 00D3;
-004F 0302 00D4;
-004F 0303 00D5;
-004F 0304 014C;
-004F 0306 014E;
-004F 0307 022E;
-004F 0308 00D6;
-004F 0309 1ECE;
-004F 030B 0150;
-004F 030C 01D1;
-004F 030F 020C;
-004F 0311 020E;
-004F 031B 01A0;
-004F 0323 1ECC;
-004F 0328 01EA;
-0050 0301 1E54;
-0050 0307 1E56;
-0052 0301 0154;
-0052 0307 1E58;
-0052 030C 0158;
-0052 030F 0210;
-0052 0311 0212;
-0052 0323 1E5A;
-0052 0327 0156;
-0052 0331 1E5E;
-0053 0301 015A;
-0053 0302 015C;
-0053 0307 1E60;
-0053 030C 0160;
-0053 0323 1E62;
-0053 0326 0218;
-0053 0327 015E;
-0054 0307 1E6A;
-0054 030C 0164;
-0054 0323 1E6C;
-0054 0326 021A;
-0054 0327 0162;
-0054 032D 1E70;
-0054 0331 1E6E;
-0055 0300 00D9;
-0055 0301 00DA;
-0055 0302 00DB;
-0055 0303 0168;
-0055 0304 016A;
-0055 0306 016C;
-0055 0308 00DC;
-0055 0309 1EE6;
-0055 030A 016E;
-0055 030B 0170;
-0055 030C 01D3;
-0055 030F 0214;
-0055 0311 0216;
-0055 031B 01AF;
-0055 0323 1EE4;
-0055 0324 1E72;
-0055 0328 0172;
-0055 032D 1E76;
-0055 0330 1E74;
-0056 0303 1E7C;
-0056 0323 1E7E;
-0057 0300 1E80;
-0057 0301 1E82;
-0057 0302 0174;
-0057 0307 1E86;
-0057 0308 1E84;
-0057 0323 1E88;
-0058 0307 1E8A;
-0058 0308 1E8C;
-0059 0300 1EF2;
-0059 0301 00DD;
-0059 0302 0176;
-0059 0303 1EF8;
-0059 0304 0232;
-0059 0307 1E8E;
-0059 0308 0178;
-0059 0309 1EF6;
-0059 0323 1EF4;
-005A 0301 0179;
-005A 0302 1E90;
-005A 0307 017B;
-005A 030C 017D;
-005A 0323 1E92;
-005A 0331 1E94;
-0061 0300 00E0;
-0061 0301 00E1;
-0061 0302 00E2;
-0061 0303 00E3;
-0061 0304 0101;
-0061 0306 0103;
-0061 0307 0227;
-0061 0308 00E4;
-0061 0309 1EA3;
-0061 030A 00E5;
-0061 030C 01CE;
-0061 030F 0201;
-0061 0311 0203;
-0061 0323 1EA1;
-0061 0325 1E01;
-0061 0328 0105;
-0062 0307 1E03;
-0062 0323 1E05;
-0062 0331 1E07;
-0063 0301 0107;
-0063 0302 0109;
-0063 0307 010B;
-0063 030C 010D;
-0063 0327 00E7;
-0064 0307 1E0B;
-0064 030C 010F;
-0064 0323 1E0D;
-0064 0327 1E11;
-0064 032D 1E13;
-0064 0331 1E0F;
-0065 0300 00E8;
-0065 0301 00E9;
-0065 0302 00EA;
-0065 0303 1EBD;
-0065 0304 0113;
-0065 0306 0115;
-0065 0307 0117;
-0065 0308 00EB;
-0065 0309 1EBB;
-0065 030C 011B;
-0065 030F 0205;
-0065 0311 0207;
-0065 0323 1EB9;
-0065 0327 0229;
-0065 0328 0119;
-0065 032D 1E19;
-0065 0330 1E1B;
-0066 0307 1E1F;
-0067 0301 01F5;
-0067 0302 011D;
-0067 0304 1E21;
-0067 0306 011F;
-0067 0307 0121;
-0067 030C 01E7;
-0067 0327 0123;
-0068 0302 0125;
-0068 0307 1E23;
-0068 0308 1E27;
-0068 030C 021F;
-0068 0323 1E25;
-0068 0327 1E29;
-0068 032E 1E2B;
-0068 0331 1E96;
-0069 0300 00EC;
-0069 0301 00ED;
-0069 0302 00EE;
-0069 0303 0129;
-0069 0304 012B;
-0069 0306 012D;
-0069 0308 00EF;
-0069 0309 1EC9;
-0069 030C 01D0;
-0069 030F 0209;
-0069 0311 020B;
-0069 0323 1ECB;
-0069 0328 012F;
-0069 0330 1E2D;
-006A 0302 0135;
-006A 030C 01F0;
-006B 0301 1E31;
-006B 030C 01E9;
-006B 0323 1E33;
-006B 0327 0137;
-006B 0331 1E35;
-006C 0301 013A;
-006C 030C 013E;
-006C 0323 1E37;
-006C 0327 013C;
-006C 032D 1E3D;
-006C 0331 1E3B;
-006D 0301 1E3F;
-006D 0307 1E41;
-006D 0323 1E43;
-006E 0300 01F9;
-006E 0301 0144;
-006E 0303 00F1;
-006E 0307 1E45;
-006E 030C 0148;
-006E 0323 1E47;
-006E 0327 0146;
-006E 032D 1E4B;
-006E 0331 1E49;
-006F 0300 00F2;
-006F 0301 00F3;
-006F 0302 00F4;
-006F 0303 00F5;
-006F 0304 014D;
-006F 0306 014F;
-006F 0307 022F;
-006F 0308 00F6;
-006F 0309 1ECF;
-006F 030B 0151;
-006F 030C 01D2;
-006F 030F 020D;
-006F 0311 020F;
-006F 031B 01A1;
-006F 0323 1ECD;
-006F 0328 01EB;
-0070 0301 1E55;
-0070 0307 1E57;
-0072 0301 0155;
-0072 0307 1E59;
-0072 030C 0159;
-0072 030F 0211;
-0072 0311 0213;
-0072 0323 1E5B;
-0072 0327 0157;
-0072 0331 1E5F;
-0073 0301 015B;
-0073 0302 015D;
-0073 0307 1E61;
-0073 030C 0161;
-0073 0323 1E63;
-0073 0326 0219;
-0073 0327 015F;
-0074 0307 1E6B;
-0074 0308 1E97;
-0074 030C 0165;
-0074 0323 1E6D;
-0074 0326 021B;
-0074 0327 0163;
-0074 032D 1E71;
-0074 0331 1E6F;
-0075 0300 00F9;
-0075 0301 00FA;
-0075 0302 00FB;
-0075 0303 0169;
-0075 0304 016B;
-0075 0306 016D;
-0075 0308 00FC;
-0075 0309 1EE7;
-0075 030A 016F;
-0075 030B 0171;
-0075 030C 01D4;
-0075 030F 0215;
-0075 0311 0217;
-0075 031B 01B0;
-0075 0323 1EE5;
-0075 0324 1E73;
-0075 0328 0173;
-0075 032D 1E77;
-0075 0330 1E75;
-0076 0303 1E7D;
-0076 0323 1E7F;
-0077 0300 1E81;
-0077 0301 1E83;
-0077 0302 0175;
-0077 0307 1E87;
-0077 0308 1E85;
-0077 030A 1E98;
-0077 0323 1E89;
-0078 0307 1E8B;
-0078 0308 1E8D;
-0079 0300 1EF3;
-0079 0301 00FD;
-0079 0302 0177;
-0079 0303 1EF9;
-0079 0304 0233;
-0079 0307 1E8F;
-0079 0308 00FF;
-0079 0309 1EF7;
-0079 030A 1E99;
-0079 0323 1EF5;
-007A 0301 017A;
-007A 0302 1E91;
-007A 0307 017C;
-007A 030C 017E;
-007A 0323 1E93;
-007A 0331 1E95;
-00A8 0300 1FED;
-00A8 0301 0385;
-00A8 0342 1FC1;
-00C2 0300 1EA6;
-00C2 0301 1EA4;
-00C2 0303 1EAA;
-00C2 0309 1EA8;
-00C4 0304 01DE;
-00C5 0301 01FA;
-00C6 0301 01FC;
-00C6 0304 01E2;
-00C7 0301 1E08;
-00CA 0300 1EC0;
-00CA 0301 1EBE;
-00CA 0303 1EC4;
-00CA 0309 1EC2;
-00CF 0301 1E2E;
-00D4 0300 1ED2;
-00D4 0301 1ED0;
-00D4 0303 1ED6;
-00D4 0309 1ED4;
-00D5 0301 1E4C;
-00D5 0304 022C;
-00D5 0308 1E4E;
-00D6 0304 022A;
-00D8 0301 01FE;
-00DC 0300 01DB;
-00DC 0301 01D7;
-00DC 0304 01D5;
-00DC 030C 01D9;
-00E2 0300 1EA7;
-00E2 0301 1EA5;
-00E2 0303 1EAB;
-00E2 0309 1EA9;
-00E4 0304 01DF;
-00E5 0301 01FB;
-00E6 0301 01FD;
-00E6 0304 01E3;
-00E7 0301 1E09;
-00EA 0300 1EC1;
-00EA 0301 1EBF;
-00EA 0303 1EC5;
-00EA 0309 1EC3;
-00EF 0301 1E2F;
-00F4 0300 1ED3;
-00F4 0301 1ED1;
-00F4 0303 1ED7;
-00F4 0309 1ED5;
-00F5 0301 1E4D;
-00F5 0304 022D;
-00F5 0308 1E4F;
-00F6 0304 022B;
-00F8 0301 01FF;
-00FC 0300 01DC;
-00FC 0301 01D8;
-00FC 0304 01D6;
-00FC 030C 01DA;
-0102 0300 1EB0;
-0102 0301 1EAE;
-0102 0303 1EB4;
-0102 0309 1EB2;
-0103 0300 1EB1;
-0103 0301 1EAF;
-0103 0303 1EB5;
-0103 0309 1EB3;
-0112 0300 1E14;
-0112 0301 1E16;
-0113 0300 1E15;
-0113 0301 1E17;
-014C 0300 1E50;
-014C 0301 1E52;
-014D 0300 1E51;
-014D 0301 1E53;
-015A 0307 1E64;
-015B 0307 1E65;
-0160 0307 1E66;
-0161 0307 1E67;
-0168 0301 1E78;
-0169 0301 1E79;
-016A 0308 1E7A;
-016B 0308 1E7B;
-017F 0307 1E9B;
-01A0 0300 1EDC;
-01A0 0301 1EDA;
-01A0 0303 1EE0;
-01A0 0309 1EDE;
-01A0 0323 1EE2;
-01A1 0300 1EDD;
-01A1 0301 1EDB;
-01A1 0303 1EE1;
-01A1 0309 1EDF;
-01A1 0323 1EE3;
-01AF 0300 1EEA;
-01AF 0301 1EE8;
-01AF 0303 1EEE;
-01AF 0309 1EEC;
-01AF 0323 1EF0;
-01B0 0300 1EEB;
-01B0 0301 1EE9;
-01B0 0303 1EEF;
-01B0 0309 1EED;
-01B0 0323 1EF1;
-01B7 030C 01EE;
-01EA 0304 01EC;
-01EB 0304 01ED;
-0226 0304 01E0;
-0227 0304 01E1;
-0228 0306 1E1C;
-0229 0306 1E1D;
-022E 0304 0230;
-022F 0304 0231;
-0292 030C 01EF;
-0308 0301 0344;
-0391 0300 1FBA;
-0391 0301 0386;
-0391 0304 1FB9;
-0391 0306 1FB8;
-0391 0313 1F08;
-0391 0314 1F09;
-0391 0345 1FBC;
-0395 0300 1FC8;
-0395 0301 0388;
-0395 0313 1F18;
-0395 0314 1F19;
-0397 0300 1FCA;
-0397 0301 0389;
-0397 0313 1F28;
-0397 0314 1F29;
-0397 0345 1FCC;
-0399 0300 1FDA;
-0399 0301 038A;
-0399 0304 1FD9;
-0399 0306 1FD8;
-0399 0308 03AA;
-0399 0313 1F38;
-0399 0314 1F39;
-039F 0300 1FF8;
-039F 0301 038C;
-039F 0313 1F48;
-039F 0314 1F49;
-03A1 0314 1FEC;
-03A5 0300 1FEA;
-03A5 0301 038E;
-03A5 0304 1FE9;
-03A5 0306 1FE8;
-03A5 0308 03AB;
-03A5 0314 1F59;
-03A9 0300 1FFA;
-03A9 0301 038F;
-03A9 0313 1F68;
-03A9 0314 1F69;
-03A9 0345 1FFC;
-03AC 0345 1FB4;
-03AE 0345 1FC4;
-03B1 0300 1F70;
-03B1 0301 03AC;
-03B1 0304 1FB1;
-03B1 0306 1FB0;
-03B1 0313 1F00;
-03B1 0314 1F01;
-03B1 0342 1FB6;
-03B1 0345 1FB3;
-03B5 0300 1F72;
-03B5 0301 03AD;
-03B5 0313 1F10;
-03B5 0314 1F11;
-03B7 0300 1F74;
-03B7 0301 03AE;
-03B7 0313 1F20;
-03B7 0314 1F21;
-03B7 0342 1FC6;
-03B7 0345 1FC3;
-03B9 0300 1F76;
-03B9 0301 03AF;
-03B9 0304 1FD1;
-03B9 0306 1FD0;
-03B9 0308 03CA;
-03B9 0313 1F30;
-03B9 0314 1F31;
-03B9 0342 1FD6;
-03BF 0300 1F78;
-03BF 0301 03CC;
-03BF 0313 1F40;
-03BF 0314 1F41;
-03C1 0313 1FE4;
-03C1 0314 1FE5;
-03C5 0300 1F7A;
-03C5 0301 03CD;
-03C5 0304 1FE1;
-03C5 0306 1FE0;
-03C5 0308 03CB;
-03C5 0313 1F50;
-03C5 0314 1F51;
-03C5 0342 1FE6;
-03C9 0300 1F7C;
-03C9 0301 03CE;
-03C9 0313 1F60;
-03C9 0314 1F61;
-03C9 0342 1FF6;
-03C9 0345 1FF3;
-03CA 0300 1FD2;
-03CA 0301 0390;
-03CA 0342 1FD7;
-03CB 0300 1FE2;
-03CB 0301 03B0;
-03CB 0342 1FE7;
-03CE 0345 1FF4;
-03D2 0301 03D3;
-03D2 0308 03D4;
-0406 0308 0407;
-0410 0306 04D0;
-0410 0308 04D2;
-0413 0301 0403;
-0415 0300 0400;
-0415 0306 04D6;
-0415 0308 0401;
-0416 0306 04C1;
-0416 0308 04DC;
-0417 0308 04DE;
-0418 0300 040D;
-0418 0304 04E2;
-0418 0306 0419;
-0418 0308 04E4;
-041A 0301 040C;
-041E 0308 04E6;
-0423 0304 04EE;
-0423 0306 040E;
-0423 0308 04F0;
-0423 030B 04F2;
-0427 0308 04F4;
-042B 0308 04F8;
-042D 0308 04EC;
-0430 0306 04D1;
-0430 0308 04D3;
-0433 0301 0453;
-0435 0300 0450;
-0435 0306 04D7;
-0435 0308 0451;
-0436 0306 04C2;
-0436 0308 04DD;
-0437 0308 04DF;
-0438 0300 045D;
-0438 0304 04E3;
-0438 0306 0439;
-0438 0308 04E5;
-043A 0301 045C;
-043E 0308 04E7;
-0443 0304 04EF;
-0443 0306 045E;
-0443 0308 04F1;
-0443 030B 04F3;
-0447 0308 04F5;
-044B 0308 04F9;
-044D 0308 04ED;
-0456 0308 0457;
-0474 030F 0476;
-0475 030F 0477;
-04D8 0308 04DA;
-04D9 0308 04DB;
-04E8 0308 04EA;
-04E9 0308 04EB;
-05D0 05B7 FB2E;
-05D0 05B8 FB2F;
-05D0 05BC FB30;
-05D1 05BC FB31;
-05D1 05BF FB4C;
-05D2 05BC FB32;
-05D3 05BC FB33;
-05D4 05BC FB34;
-05D5 05B9 FB4B;
-05D5 05BC FB35;
-05D6 05BC FB36;
-05D8 05BC FB38;
-05D9 05B4 FB1D;
-05D9 05BC FB39;
-05DA 05BC FB3A;
-05DB 05BC FB3B;
-05DB 05BF FB4D;
-05DC 05BC FB3C;
-05DE 05BC FB3E;
-05E0 05BC FB40;
-05E1 05BC FB41;
-05E3 05BC FB43;
-05E4 05BC FB44;
-05E4 05BF FB4E;
-05E6 05BC FB46;
-05E7 05BC FB47;
-05E8 05BC FB48;
-05E9 05BC FB49;
-05E9 05C1 FB2A;
-05E9 05C2 FB2B;
-05EA 05BC FB4A;
-05F2 05B7 FB1F;
-0627 0653 0622;
-0627 0654 0623;
-0627 0655 0625;
-0648 0654 0624;
-064A 0654 0626;
-06C1 0654 06C2;
-06D2 0654 06D3;
-06D5 0654 06C0;
-0915 093C 0958;
-0916 093C 0959;
-0917 093C 095A;
-091C 093C 095B;
-0921 093C 095C;
-0922 093C 095D;
-0928 093C 0929;
-092B 093C 095E;
-092F 093C 095F;
-0930 093C 0931;
-0933 093C 0934;
-09A1 09BC 09DC;
-09A2 09BC 09DD;
-09AF 09BC 09DF;
-09C7 09BE 09CB;
-09C7 09D7 09CC;
-0A16 0A3C 0A59;
-0A17 0A3C 0A5A;
-0A1C 0A3C 0A5B;
-0A2B 0A3C 0A5E;
-0A32 0A3C 0A33;
-0A38 0A3C 0A36;
-0B21 0B3C 0B5C;
-0B22 0B3C 0B5D;
-0B47 0B3E 0B4B;
-0B47 0B56 0B48;
-0B47 0B57 0B4C;
-0B92 0BD7 0B94;
-0BC6 0BBE 0BCA;
-0BC6 0BD7 0BCC;
-0BC7 0BBE 0BCB;
-0C46 0C56 0C48;
-0CBF 0CD5 0CC0;
-0CC6 0CC2 0CCA;
-0CC6 0CD5 0CC7;
-0CC6 0CD6 0CC8;
-0CCA 0CD5 0CCB;
-0D46 0D3E 0D4A;
-0D46 0D57 0D4C;
-0D47 0D3E 0D4B;
-0DD9 0DCA 0DDA;
-0DD9 0DCF 0DDC;
-0DD9 0DDF 0DDE;
-0DDC 0DCA 0DDD;
-0F40 0FB5 0F69;
-0F42 0FB7 0F43;
-0F4C 0FB7 0F4D;
-0F51 0FB7 0F52;
-0F56 0FB7 0F57;
-0F5B 0FB7 0F5C;
-0F71 0F72 0F73;
-0F71 0F74 0F75;
-0F71 0F80 0F81;
-0F90 0FB5 0FB9;
-0F92 0FB7 0F93;
-0F9C 0FB7 0F9D;
-0FA1 0FB7 0FA2;
-0FA6 0FB7 0FA7;
-0FAB 0FB7 0FAC;
-0FB2 0F80 0F76;
-0FB3 0F80 0F78;
-1025 102E 1026;
-1E36 0304 1E38;
-1E37 0304 1E39;
-1E5A 0304 1E5C;
-1E5B 0304 1E5D;
-1E62 0307 1E68;
-1E63 0307 1E69;
-1EA0 0302 1EAC;
-1EA0 0306 1EB6;
-1EA1 0302 1EAD;
-1EA1 0306 1EB7;
-1EB8 0302 1EC6;
-1EB9 0302 1EC7;
-1ECC 0302 1ED8;
-1ECD 0302 1ED9;
-1F00 0300 1F02;
-1F00 0301 1F04;
-1F00 0342 1F06;
-1F00 0345 1F80;
-1F01 0300 1F03;
-1F01 0301 1F05;
-1F01 0342 1F07;
-1F01 0345 1F81;
-1F02 0345 1F82;
-1F03 0345 1F83;
-1F04 0345 1F84;
-1F05 0345 1F85;
-1F06 0345 1F86;
-1F07 0345 1F87;
-1F08 0300 1F0A;
-1F08 0301 1F0C;
-1F08 0342 1F0E;
-1F08 0345 1F88;
-1F09 0300 1F0B;
-1F09 0301 1F0D;
-1F09 0342 1F0F;
-1F09 0345 1F89;
-1F0A 0345 1F8A;
-1F0B 0345 1F8B;
-1F0C 0345 1F8C;
-1F0D 0345 1F8D;
-1F0E 0345 1F8E;
-1F0F 0345 1F8F;
-1F10 0300 1F12;
-1F10 0301 1F14;
-1F11 0300 1F13;
-1F11 0301 1F15;
-1F18 0300 1F1A;
-1F18 0301 1F1C;
-1F19 0300 1F1B;
-1F19 0301 1F1D;
-1F20 0300 1F22;
-1F20 0301 1F24;
-1F20 0342 1F26;
-1F20 0345 1F90;
-1F21 0300 1F23;
-1F21 0301 1F25;
-1F21 0342 1F27;
-1F21 0345 1F91;
-1F22 0345 1F92;
-1F23 0345 1F93;
-1F24 0345 1F94;
-1F25 0345 1F95;
-1F26 0345 1F96;
-1F27 0345 1F97;
-1F28 0300 1F2A;
-1F28 0301 1F2C;
-1F28 0342 1F2E;
-1F28 0345 1F98;
-1F29 0300 1F2B;
-1F29 0301 1F2D;
-1F29 0342 1F2F;
-1F29 0345 1F99;
-1F2A 0345 1F9A;
-1F2B 0345 1F9B;
-1F2C 0345 1F9C;
-1F2D 0345 1F9D;
-1F2E 0345 1F9E;
-1F2F 0345 1F9F;
-1F30 0300 1F32;
-1F30 0301 1F34;
-1F30 0342 1F36;
-1F31 0300 1F33;
-1F31 0301 1F35;
-1F31 0342 1F37;
-1F38 0300 1F3A;
-1F38 0301 1F3C;
-1F38 0342 1F3E;
-1F39 0300 1F3B;
-1F39 0301 1F3D;
-1F39 0342 1F3F;
-1F40 0300 1F42;
-1F40 0301 1F44;
-1F41 0300 1F43;
-1F41 0301 1F45;
-1F48 0300 1F4A;
-1F48 0301 1F4C;
-1F49 0300 1F4B;
-1F49 0301 1F4D;
-1F50 0300 1F52;
-1F50 0301 1F54;
-1F50 0342 1F56;
-1F51 0300 1F53;
-1F51 0301 1F55;
-1F51 0342 1F57;
-1F59 0300 1F5B;
-1F59 0301 1F5D;
-1F59 0342 1F5F;
-1F60 0300 1F62;
-1F60 0301 1F64;
-1F60 0342 1F66;
-1F60 0345 1FA0;
-1F61 0300 1F63;
-1F61 0301 1F65;
-1F61 0342 1F67;
-1F61 0345 1FA1;
-1F62 0345 1FA2;
-1F63 0345 1FA3;
-1F64 0345 1FA4;
-1F65 0345 1FA5;
-1F66 0345 1FA6;
-1F67 0345 1FA7;
-1F68 0300 1F6A;
-1F68 0301 1F6C;
-1F68 0342 1F6E;
-1F68 0345 1FA8;
-1F69 0300 1F6B;
-1F69 0301 1F6D;
-1F69 0342 1F6F;
-1F69 0345 1FA9;
-1F6A 0345 1FAA;
-1F6B 0345 1FAB;
-1F6C 0345 1FAC;
-1F6D 0345 1FAD;
-1F6E 0345 1FAE;
-1F6F 0345 1FAF;
-1F70 0345 1FB2;
-1F74 0345 1FC2;
-1F7C 0345 1FF2;
-1FB6 0345 1FB7;
-1FBF 0300 1FCD;
-1FBF 0301 1FCE;
-1FBF 0342 1FCF;
-1FC6 0345 1FC7;
-1FF6 0345 1FF7;
-1FFE 0300 1FDD;
-1FFE 0301 1FDE;
-1FFE 0342 1FDF;
-2190 0338 219A;
-2192 0338 219B;
-2194 0338 21AE;
-21D0 0338 21CD;
-21D2 0338 21CF;
-21D4 0338 21CE;
-2203 0338 2204;
-2208 0338 2209;
-220B 0338 220C;
-2223 0338 2224;
-2225 0338 2226;
-223C 0338 2241;
-2243 0338 2244;
-2245 0338 2247;
-2248 0338 2249;
-224D 0338 226D;
-2261 0338 2262;
-2264 0338 2270;
-2265 0338 2271;
-2272 0338 2274;
-2273 0338 2275;
-2276 0338 2278;
-2277 0338 2279;
-227A 0338 2280;
-227B 0338 2281;
-227C 0338 22E0;
-227D 0338 22E1;
-2282 0338 2284;
-2283 0338 2285;
-2286 0338 2288;
-2287 0338 2289;
-2291 0338 22E2;
-2292 0338 22E3;
-22A2 0338 22AC;
-22A8 0338 22AD;
-22A9 0338 22AE;
-22AB 0338 22AF;
-22B2 0338 22EA;
-22B3 0338 22EB;
-22B4 0338 22EC;
-22B5 0338 22ED;
-3046 3099 3094;
-304B 3099 304C;
-304D 3099 304E;
-304F 3099 3050;
-3051 3099 3052;
-3053 3099 3054;
-3055 3099 3056;
-3057 3099 3058;
-3059 3099 305A;
-305B 3099 305C;
-305D 3099 305E;
-305F 3099 3060;
-3061 3099 3062;
-3064 3099 3065;
-3066 3099 3067;
-3068 3099 3069;
-306F 3099 3070;
-306F 309A 3071;
-3072 3099 3073;
-3072 309A 3074;
-3075 3099 3076;
-3075 309A 3077;
-3078 3099 3079;
-3078 309A 307A;
-307B 3099 307C;
-307B 309A 307D;
-309D 3099 309E;
-30A6 3099 30F4;
-30AB 3099 30AC;
-30AD 3099 30AE;
-30AF 3099 30B0;
-30B1 3099 30B2;
-30B3 3099 30B4;
-30B5 3099 30B6;
-30B7 3099 30B8;
-30B9 3099 30BA;
-30BB 3099 30BC;
-30BD 3099 30BE;
-30BF 3099 30C0;
-30C1 3099 30C2;
-30C4 3099 30C5;
-30C6 3099 30C7;
-30C8 3099 30C9;
-30CF 3099 30D0;
-30CF 309A 30D1;
-30D2 3099 30D3;
-30D2 309A 30D4;
-30D5 3099 30D6;
-30D5 309A 30D7;
-30D8 3099 30D9;
-30D8 309A 30DA;
-30DB 3099 30DC;
-30DB 309A 30DD;
-30EF 3099 30F7;
-30F0 3099 30F8;
-30F1 3099 30F9;
-30F2 3099 30FA;
-30FD 3099 30FE;
-FB49 05C1 FB2C;
-FB49 05C2 FB2D;
diff --git a/data/uni-nfd.txt b/data/uni-nfd.txt
deleted file mode 100644 (file)
index 80cef27..0000000
+++ /dev/null
@@ -1,1312 +0,0 @@
-# uni-nfd.txt - Unicode decomposition mapping
-00C0 0041 0300;
-00C1 0041 0301;
-00C2 0041 0302;
-00C3 0041 0303;
-00C4 0041 0308;
-00C5 0041 030A;
-00C7 0043 0327;
-00C8 0045 0300;
-00C9 0045 0301;
-00CA 0045 0302;
-00CB 0045 0308;
-00CC 0049 0300;
-00CD 0049 0301;
-00CE 0049 0302;
-00CF 0049 0308;
-00D1 004E 0303;
-00D2 004F 0300;
-00D3 004F 0301;
-00D4 004F 0302;
-00D5 004F 0303;
-00D6 004F 0308;
-00D9 0055 0300;
-00DA 0055 0301;
-00DB 0055 0302;
-00DC 0055 0308;
-00DD 0059 0301;
-00E0 0061 0300;
-00E1 0061 0301;
-00E2 0061 0302;
-00E3 0061 0303;
-00E4 0061 0308;
-00E5 0061 030A;
-00E7 0063 0327;
-00E8 0065 0300;
-00E9 0065 0301;
-00EA 0065 0302;
-00EB 0065 0308;
-00EC 0069 0300;
-00ED 0069 0301;
-00EE 0069 0302;
-00EF 0069 0308;
-00F1 006E 0303;
-00F2 006F 0300;
-00F3 006F 0301;
-00F4 006F 0302;
-00F5 006F 0303;
-00F6 006F 0308;
-00F9 0075 0300;
-00FA 0075 0301;
-00FB 0075 0302;
-00FC 0075 0308;
-00FD 0079 0301;
-00FF 0079 0308;
-0100 0041 0304;
-0101 0061 0304;
-0102 0041 0306;
-0103 0061 0306;
-0104 0041 0328;
-0105 0061 0328;
-0106 0043 0301;
-0107 0063 0301;
-0108 0043 0302;
-0109 0063 0302;
-010A 0043 0307;
-010B 0063 0307;
-010C 0043 030C;
-010D 0063 030C;
-010E 0044 030C;
-010F 0064 030C;
-0112 0045 0304;
-0113 0065 0304;
-0114 0045 0306;
-0115 0065 0306;
-0116 0045 0307;
-0117 0065 0307;
-0118 0045 0328;
-0119 0065 0328;
-011A 0045 030C;
-011B 0065 030C;
-011C 0047 0302;
-011D 0067 0302;
-011E 0047 0306;
-011F 0067 0306;
-0120 0047 0307;
-0121 0067 0307;
-0122 0047 0327;
-0123 0067 0327;
-0124 0048 0302;
-0125 0068 0302;
-0128 0049 0303;
-0129 0069 0303;
-012A 0049 0304;
-012B 0069 0304;
-012C 0049 0306;
-012D 0069 0306;
-012E 0049 0328;
-012F 0069 0328;
-0130 0049 0307;
-0134 004A 0302;
-0135 006A 0302;
-0136 004B 0327;
-0137 006B 0327;
-0139 004C 0301;
-013A 006C 0301;
-013B 004C 0327;
-013C 006C 0327;
-013D 004C 030C;
-013E 006C 030C;
-0143 004E 0301;
-0144 006E 0301;
-0145 004E 0327;
-0146 006E 0327;
-0147 004E 030C;
-0148 006E 030C;
-014C 004F 0304;
-014D 006F 0304;
-014E 004F 0306;
-014F 006F 0306;
-0150 004F 030B;
-0151 006F 030B;
-0154 0052 0301;
-0155 0072 0301;
-0156 0052 0327;
-0157 0072 0327;
-0158 0052 030C;
-0159 0072 030C;
-015A 0053 0301;
-015B 0073 0301;
-015C 0053 0302;
-015D 0073 0302;
-015E 0053 0327;
-015F 0073 0327;
-0160 0053 030C;
-0161 0073 030C;
-0162 0054 0327;
-0163 0074 0327;
-0164 0054 030C;
-0165 0074 030C;
-0168 0055 0303;
-0169 0075 0303;
-016A 0055 0304;
-016B 0075 0304;
-016C 0055 0306;
-016D 0075 0306;
-016E 0055 030A;
-016F 0075 030A;
-0170 0055 030B;
-0171 0075 030B;
-0172 0055 0328;
-0173 0075 0328;
-0174 0057 0302;
-0175 0077 0302;
-0176 0059 0302;
-0177 0079 0302;
-0178 0059 0308;
-0179 005A 0301;
-017A 007A 0301;
-017B 005A 0307;
-017C 007A 0307;
-017D 005A 030C;
-017E 007A 030C;
-01A0 004F 031B;
-01A1 006F 031B;
-01AF 0055 031B;
-01B0 0075 031B;
-01CD 0041 030C;
-01CE 0061 030C;
-01CF 0049 030C;
-01D0 0069 030C;
-01D1 004F 030C;
-01D2 006F 030C;
-01D3 0055 030C;
-01D4 0075 030C;
-01D5 00DC 0304;
-01D6 00FC 0304;
-01D7 00DC 0301;
-01D8 00FC 0301;
-01D9 00DC 030C;
-01DA 00FC 030C;
-01DB 00DC 0300;
-01DC 00FC 0300;
-01DE 00C4 0304;
-01DF 00E4 0304;
-01E0 0226 0304;
-01E1 0227 0304;
-01E2 00C6 0304;
-01E3 00E6 0304;
-01E6 0047 030C;
-01E7 0067 030C;
-01E8 004B 030C;
-01E9 006B 030C;
-01EA 004F 0328;
-01EB 006F 0328;
-01EC 01EA 0304;
-01ED 01EB 0304;
-01EE 01B7 030C;
-01EF 0292 030C;
-01F0 006A 030C;
-01F4 0047 0301;
-01F5 0067 0301;
-01F8 004E 0300;
-01F9 006E 0300;
-01FA 00C5 0301;
-01FB 00E5 0301;
-01FC 00C6 0301;
-01FD 00E6 0301;
-01FE 00D8 0301;
-01FF 00F8 0301;
-0200 0041 030F;
-0201 0061 030F;
-0202 0041 0311;
-0203 0061 0311;
-0204 0045 030F;
-0205 0065 030F;
-0206 0045 0311;
-0207 0065 0311;
-0208 0049 030F;
-0209 0069 030F;
-020A 0049 0311;
-020B 0069 0311;
-020C 004F 030F;
-020D 006F 030F;
-020E 004F 0311;
-020F 006F 0311;
-0210 0052 030F;
-0211 0072 030F;
-0212 0052 0311;
-0213 0072 0311;
-0214 0055 030F;
-0215 0075 030F;
-0216 0055 0311;
-0217 0075 0311;
-0218 0053 0326;
-0219 0073 0326;
-021A 0054 0326;
-021B 0074 0326;
-021E 0048 030C;
-021F 0068 030C;
-0226 0041 0307;
-0227 0061 0307;
-0228 0045 0327;
-0229 0065 0327;
-022A 00D6 0304;
-022B 00F6 0304;
-022C 00D5 0304;
-022D 00F5 0304;
-022E 004F 0307;
-022F 006F 0307;
-0230 022E 0304;
-0231 022F 0304;
-0232 0059 0304;
-0233 0079 0304;
-0340 0300 0000;
-0341 0301 0000;
-0343 0313 0000;
-0344 0308 0301;
-0374 02B9 0000;
-037E 003B 0000;
-0385 00A8 0301;
-0386 0391 0301;
-0387 00B7 0000;
-0388 0395 0301;
-0389 0397 0301;
-038A 0399 0301;
-038C 039F 0301;
-038E 03A5 0301;
-038F 03A9 0301;
-0390 03CA 0301;
-03AA 0399 0308;
-03AB 03A5 0308;
-03AC 03B1 0301;
-03AD 03B5 0301;
-03AE 03B7 0301;
-03AF 03B9 0301;
-03B0 03CB 0301;
-03CA 03B9 0308;
-03CB 03C5 0308;
-03CC 03BF 0301;
-03CD 03C5 0301;
-03CE 03C9 0301;
-03D3 03D2 0301;
-03D4 03D2 0308;
-0400 0415 0300;
-0401 0415 0308;
-0403 0413 0301;
-0407 0406 0308;
-040C 041A 0301;
-040D 0418 0300;
-040E 0423 0306;
-0419 0418 0306;
-0439 0438 0306;
-0450 0435 0300;
-0451 0435 0308;
-0453 0433 0301;
-0457 0456 0308;
-045C 043A 0301;
-045D 0438 0300;
-045E 0443 0306;
-0476 0474 030F;
-0477 0475 030F;
-04C1 0416 0306;
-04C2 0436 0306;
-04D0 0410 0306;
-04D1 0430 0306;
-04D2 0410 0308;
-04D3 0430 0308;
-04D6 0415 0306;
-04D7 0435 0306;
-04DA 04D8 0308;
-04DB 04D9 0308;
-04DC 0416 0308;
-04DD 0436 0308;
-04DE 0417 0308;
-04DF 0437 0308;
-04E2 0418 0304;
-04E3 0438 0304;
-04E4 0418 0308;
-04E5 0438 0308;
-04E6 041E 0308;
-04E7 043E 0308;
-04EA 04E8 0308;
-04EB 04E9 0308;
-04EC 042D 0308;
-04ED 044D 0308;
-04EE 0423 0304;
-04EF 0443 0304;
-04F0 0423 0308;
-04F1 0443 0308;
-04F2 0423 030B;
-04F3 0443 030B;
-04F4 0427 0308;
-04F5 0447 0308;
-04F8 042B 0308;
-04F9 044B 0308;
-0622 0627 0653;
-0623 0627 0654;
-0624 0648 0654;
-0625 0627 0655;
-0626 064A 0654;
-06C0 06D5 0654;
-06C2 06C1 0654;
-06D3 06D2 0654;
-0929 0928 093C;
-0931 0930 093C;
-0934 0933 093C;
-0958 0915 093C;
-0959 0916 093C;
-095A 0917 093C;
-095B 091C 093C;
-095C 0921 093C;
-095D 0922 093C;
-095E 092B 093C;
-095F 092F 093C;
-09CB 09C7 09BE;
-09CC 09C7 09D7;
-09DC 09A1 09BC;
-09DD 09A2 09BC;
-09DF 09AF 09BC;
-0A33 0A32 0A3C;
-0A36 0A38 0A3C;
-0A59 0A16 0A3C;
-0A5A 0A17 0A3C;
-0A5B 0A1C 0A3C;
-0A5E 0A2B 0A3C;
-0B48 0B47 0B56;
-0B4B 0B47 0B3E;
-0B4C 0B47 0B57;
-0B5C 0B21 0B3C;
-0B5D 0B22 0B3C;
-0B94 0B92 0BD7;
-0BCA 0BC6 0BBE;
-0BCB 0BC7 0BBE;
-0BCC 0BC6 0BD7;
-0C48 0C46 0C56;
-0CC0 0CBF 0CD5;
-0CC7 0CC6 0CD5;
-0CC8 0CC6 0CD6;
-0CCA 0CC6 0CC2;
-0CCB 0CCA 0CD5;
-0D4A 0D46 0D3E;
-0D4B 0D47 0D3E;
-0D4C 0D46 0D57;
-0DDA 0DD9 0DCA;
-0DDC 0DD9 0DCF;
-0DDD 0DDC 0DCA;
-0DDE 0DD9 0DDF;
-0F43 0F42 0FB7;
-0F4D 0F4C 0FB7;
-0F52 0F51 0FB7;
-0F57 0F56 0FB7;
-0F5C 0F5B 0FB7;
-0F69 0F40 0FB5;
-0F73 0F71 0F72;
-0F75 0F71 0F74;
-0F76 0FB2 0F80;
-0F78 0FB3 0F80;
-0F81 0F71 0F80;
-0F93 0F92 0FB7;
-0F9D 0F9C 0FB7;
-0FA2 0FA1 0FB7;
-0FA7 0FA6 0FB7;
-0FAC 0FAB 0FB7;
-0FB9 0F90 0FB5;
-1026 1025 102E;
-1E00 0041 0325;
-1E01 0061 0325;
-1E02 0042 0307;
-1E03 0062 0307;
-1E04 0042 0323;
-1E05 0062 0323;
-1E06 0042 0331;
-1E07 0062 0331;
-1E08 00C7 0301;
-1E09 00E7 0301;
-1E0A 0044 0307;
-1E0B 0064 0307;
-1E0C 0044 0323;
-1E0D 0064 0323;
-1E0E 0044 0331;
-1E0F 0064 0331;
-1E10 0044 0327;
-1E11 0064 0327;
-1E12 0044 032D;
-1E13 0064 032D;
-1E14 0112 0300;
-1E15 0113 0300;
-1E16 0112 0301;
-1E17 0113 0301;
-1E18 0045 032D;
-1E19 0065 032D;
-1E1A 0045 0330;
-1E1B 0065 0330;
-1E1C 0228 0306;
-1E1D 0229 0306;
-1E1E 0046 0307;
-1E1F 0066 0307;
-1E20 0047 0304;
-1E21 0067 0304;
-1E22 0048 0307;
-1E23 0068 0307;
-1E24 0048 0323;
-1E25 0068 0323;
-1E26 0048 0308;
-1E27 0068 0308;
-1E28 0048 0327;
-1E29 0068 0327;
-1E2A 0048 032E;
-1E2B 0068 032E;
-1E2C 0049 0330;
-1E2D 0069 0330;
-1E2E 00CF 0301;
-1E2F 00EF 0301;
-1E30 004B 0301;
-1E31 006B 0301;
-1E32 004B 0323;
-1E33 006B 0323;
-1E34 004B 0331;
-1E35 006B 0331;
-1E36 004C 0323;
-1E37 006C 0323;
-1E38 1E36 0304;
-1E39 1E37 0304;
-1E3A 004C 0331;
-1E3B 006C 0331;
-1E3C 004C 032D;
-1E3D 006C 032D;
-1E3E 004D 0301;
-1E3F 006D 0301;
-1E40 004D 0307;
-1E41 006D 0307;
-1E42 004D 0323;
-1E43 006D 0323;
-1E44 004E 0307;
-1E45 006E 0307;
-1E46 004E 0323;
-1E47 006E 0323;
-1E48 004E 0331;
-1E49 006E 0331;
-1E4A 004E 032D;
-1E4B 006E 032D;
-1E4C 00D5 0301;
-1E4D 00F5 0301;
-1E4E 00D5 0308;
-1E4F 00F5 0308;
-1E50 014C 0300;
-1E51 014D 0300;
-1E52 014C 0301;
-1E53 014D 0301;
-1E54 0050 0301;
-1E55 0070 0301;
-1E56 0050 0307;
-1E57 0070 0307;
-1E58 0052 0307;
-1E59 0072 0307;
-1E5A 0052 0323;
-1E5B 0072 0323;
-1E5C 1E5A 0304;
-1E5D 1E5B 0304;
-1E5E 0052 0331;
-1E5F 0072 0331;
-1E60 0053 0307;
-1E61 0073 0307;
-1E62 0053 0323;
-1E63 0073 0323;
-1E64 015A 0307;
-1E65 015B 0307;
-1E66 0160 0307;
-1E67 0161 0307;
-1E68 1E62 0307;
-1E69 1E63 0307;
-1E6A 0054 0307;
-1E6B 0074 0307;
-1E6C 0054 0323;
-1E6D 0074 0323;
-1E6E 0054 0331;
-1E6F 0074 0331;
-1E70 0054 032D;
-1E71 0074 032D;
-1E72 0055 0324;
-1E73 0075 0324;
-1E74 0055 0330;
-1E75 0075 0330;
-1E76 0055 032D;
-1E77 0075 032D;
-1E78 0168 0301;
-1E79 0169 0301;
-1E7A 016A 0308;
-1E7B 016B 0308;
-1E7C 0056 0303;
-1E7D 0076 0303;
-1E7E 0056 0323;
-1E7F 0076 0323;
-1E80 0057 0300;
-1E81 0077 0300;
-1E82 0057 0301;
-1E83 0077 0301;
-1E84 0057 0308;
-1E85 0077 0308;
-1E86 0057 0307;
-1E87 0077 0307;
-1E88 0057 0323;
-1E89 0077 0323;
-1E8A 0058 0307;
-1E8B 0078 0307;
-1E8C 0058 0308;
-1E8D 0078 0308;
-1E8E 0059 0307;
-1E8F 0079 0307;
-1E90 005A 0302;
-1E91 007A 0302;
-1E92 005A 0323;
-1E93 007A 0323;
-1E94 005A 0331;
-1E95 007A 0331;
-1E96 0068 0331;
-1E97 0074 0308;
-1E98 0077 030A;
-1E99 0079 030A;
-1E9B 017F 0307;
-1EA0 0041 0323;
-1EA1 0061 0323;
-1EA2 0041 0309;
-1EA3 0061 0309;
-1EA4 00C2 0301;
-1EA5 00E2 0301;
-1EA6 00C2 0300;
-1EA7 00E2 0300;
-1EA8 00C2 0309;
-1EA9 00E2 0309;
-1EAA 00C2 0303;
-1EAB 00E2 0303;
-1EAC 1EA0 0302;
-1EAD 1EA1 0302;
-1EAE 0102 0301;
-1EAF 0103 0301;
-1EB0 0102 0300;
-1EB1 0103 0300;
-1EB2 0102 0309;
-1EB3 0103 0309;
-1EB4 0102 0303;
-1EB5 0103 0303;
-1EB6 1EA0 0306;
-1EB7 1EA1 0306;
-1EB8 0045 0323;
-1EB9 0065 0323;
-1EBA 0045 0309;
-1EBB 0065 0309;
-1EBC 0045 0303;
-1EBD 0065 0303;
-1EBE 00CA 0301;
-1EBF 00EA 0301;
-1EC0 00CA 0300;
-1EC1 00EA 0300;
-1EC2 00CA 0309;
-1EC3 00EA 0309;
-1EC4 00CA 0303;
-1EC5 00EA 0303;
-1EC6 1EB8 0302;
-1EC7 1EB9 0302;
-1EC8 0049 0309;
-1EC9 0069 0309;
-1ECA 0049 0323;
-1ECB 0069 0323;
-1ECC 004F 0323;
-1ECD 006F 0323;
-1ECE 004F 0309;
-1ECF 006F 0309;
-1ED0 00D4 0301;
-1ED1 00F4 0301;
-1ED2 00D4 0300;
-1ED3 00F4 0300;
-1ED4 00D4 0309;
-1ED5 00F4 0309;
-1ED6 00D4 0303;
-1ED7 00F4 0303;
-1ED8 1ECC 0302;
-1ED9 1ECD 0302;
-1EDA 01A0 0301;
-1EDB 01A1 0301;
-1EDC 01A0 0300;
-1EDD 01A1 0300;
-1EDE 01A0 0309;
-1EDF 01A1 0309;
-1EE0 01A0 0303;
-1EE1 01A1 0303;
-1EE2 01A0 0323;
-1EE3 01A1 0323;
-1EE4 0055 0323;
-1EE5 0075 0323;
-1EE6 0055 0309;
-1EE7 0075 0309;
-1EE8 01AF 0301;
-1EE9 01B0 0301;
-1EEA 01AF 0300;
-1EEB 01B0 0300;
-1EEC 01AF 0309;
-1EED 01B0 0309;
-1EEE 01AF 0303;
-1EEF 01B0 0303;
-1EF0 01AF 0323;
-1EF1 01B0 0323;
-1EF2 0059 0300;
-1EF3 0079 0300;
-1EF4 0059 0323;
-1EF5 0079 0323;
-1EF6 0059 0309;
-1EF7 0079 0309;
-1EF8 0059 0303;
-1EF9 0079 0303;
-1F00 03B1 0313;
-1F01 03B1 0314;
-1F02 1F00 0300;
-1F03 1F01 0300;
-1F04 1F00 0301;
-1F05 1F01 0301;
-1F06 1F00 0342;
-1F07 1F01 0342;
-1F08 0391 0313;
-1F09 0391 0314;
-1F0A 1F08 0300;
-1F0B 1F09 0300;
-1F0C 1F08 0301;
-1F0D 1F09 0301;
-1F0E 1F08 0342;
-1F0F 1F09 0342;
-1F10 03B5 0313;
-1F11 03B5 0314;
-1F12 1F10 0300;
-1F13 1F11 0300;
-1F14 1F10 0301;
-1F15 1F11 0301;
-1F18 0395 0313;
-1F19 0395 0314;
-1F1A 1F18 0300;
-1F1B 1F19 0300;
-1F1C 1F18 0301;
-1F1D 1F19 0301;
-1F20 03B7 0313;
-1F21 03B7 0314;
-1F22 1F20 0300;
-1F23 1F21 0300;
-1F24 1F20 0301;
-1F25 1F21 0301;
-1F26 1F20 0342;
-1F27 1F21 0342;
-1F28 0397 0313;
-1F29 0397 0314;
-1F2A 1F28 0300;
-1F2B 1F29 0300;
-1F2C 1F28 0301;
-1F2D 1F29 0301;
-1F2E 1F28 0342;
-1F2F 1F29 0342;
-1F30 03B9 0313;
-1F31 03B9 0314;
-1F32 1F30 0300;
-1F33 1F31 0300;
-1F34 1F30 0301;
-1F35 1F31 0301;
-1F36 1F30 0342;
-1F37 1F31 0342;
-1F38 0399 0313;
-1F39 0399 0314;
-1F3A 1F38 0300;
-1F3B 1F39 0300;
-1F3C 1F38 0301;
-1F3D 1F39 0301;
-1F3E 1F38 0342;
-1F3F 1F39 0342;
-1F40 03BF 0313;
-1F41 03BF 0314;
-1F42 1F40 0300;
-1F43 1F41 0300;
-1F44 1F40 0301;
-1F45 1F41 0301;
-1F48 039F 0313;
-1F49 039F 0314;
-1F4A 1F48 0300;
-1F4B 1F49 0300;
-1F4C 1F48 0301;
-1F4D 1F49 0301;
-1F50 03C5 0313;
-1F51 03C5 0314;
-1F52 1F50 0300;
-1F53 1F51 0300;
-1F54 1F50 0301;
-1F55 1F51 0301;
-1F56 1F50 0342;
-1F57 1F51 0342;
-1F59 03A5 0314;
-1F5B 1F59 0300;
-1F5D 1F59 0301;
-1F5F 1F59 0342;
-1F60 03C9 0313;
-1F61 03C9 0314;
-1F62 1F60 0300;
-1F63 1F61 0300;
-1F64 1F60 0301;
-1F65 1F61 0301;
-1F66 1F60 0342;
-1F67 1F61 0342;
-1F68 03A9 0313;
-1F69 03A9 0314;
-1F6A 1F68 0300;
-1F6B 1F69 0300;
-1F6C 1F68 0301;
-1F6D 1F69 0301;
-1F6E 1F68 0342;
-1F6F 1F69 0342;
-1F70 03B1 0300;
-1F71 03AC 0000;
-1F72 03B5 0300;
-1F73 03AD 0000;
-1F74 03B7 0300;
-1F75 03AE 0000;
-1F76 03B9 0300;
-1F77 03AF 0000;
-1F78 03BF 0300;
-1F79 03CC 0000;
-1F7A 03C5 0300;
-1F7B 03CD 0000;
-1F7C 03C9 0300;
-1F7D 03CE 0000;
-1F80 1F00 0345;
-1F81 1F01 0345;
-1F82 1F02 0345;
-1F83 1F03 0345;
-1F84 1F04 0345;
-1F85 1F05 0345;
-1F86 1F06 0345;
-1F87 1F07 0345;
-1F88 1F08 0345;
-1F89 1F09 0345;
-1F8A 1F0A 0345;
-1F8B 1F0B 0345;
-1F8C 1F0C 0345;
-1F8D 1F0D 0345;
-1F8E 1F0E 0345;
-1F8F 1F0F 0345;
-1F90 1F20 0345;
-1F91 1F21 0345;
-1F92 1F22 0345;
-1F93 1F23 0345;
-1F94 1F24 0345;
-1F95 1F25 0345;
-1F96 1F26 0345;
-1F97 1F27 0345;
-1F98 1F28 0345;
-1F99 1F29 0345;
-1F9A 1F2A 0345;
-1F9B 1F2B 0345;
-1F9C 1F2C 0345;
-1F9D 1F2D 0345;
-1F9E 1F2E 0345;
-1F9F 1F2F 0345;
-1FA0 1F60 0345;
-1FA1 1F61 0345;
-1FA2 1F62 0345;
-1FA3 1F63 0345;
-1FA4 1F64 0345;
-1FA5 1F65 0345;
-1FA6 1F66 0345;
-1FA7 1F67 0345;
-1FA8 1F68 0345;
-1FA9 1F69 0345;
-1FAA 1F6A 0345;
-1FAB 1F6B 0345;
-1FAC 1F6C 0345;
-1FAD 1F6D 0345;
-1FAE 1F6E 0345;
-1FAF 1F6F 0345;
-1FB0 03B1 0306;
-1FB1 03B1 0304;
-1FB2 1F70 0345;
-1FB3 03B1 0345;
-1FB4 03AC 0345;
-1FB6 03B1 0342;
-1FB7 1FB6 0345;
-1FB8 0391 0306;
-1FB9 0391 0304;
-1FBA 0391 0300;
-1FBB 0386 0000;
-1FBC 0391 0345;
-1FBE 03B9 0000;
-1FC1 00A8 0342;
-1FC2 1F74 0345;
-1FC3 03B7 0345;
-1FC4 03AE 0345;
-1FC6 03B7 0342;
-1FC7 1FC6 0345;
-1FC8 0395 0300;
-1FC9 0388 0000;
-1FCA 0397 0300;
-1FCB 0389 0000;
-1FCC 0397 0345;
-1FCD 1FBF 0300;
-1FCE 1FBF 0301;
-1FCF 1FBF 0342;
-1FD0 03B9 0306;
-1FD1 03B9 0304;
-1FD2 03CA 0300;
-1FD3 0390 0000;
-1FD6 03B9 0342;
-1FD7 03CA 0342;
-1FD8 0399 0306;
-1FD9 0399 0304;
-1FDA 0399 0300;
-1FDB 038A 0000;
-1FDD 1FFE 0300;
-1FDE 1FFE 0301;
-1FDF 1FFE 0342;
-1FE0 03C5 0306;
-1FE1 03C5 0304;
-1FE2 03CB 0300;
-1FE3 03B0 0000;
-1FE4 03C1 0313;
-1FE5 03C1 0314;
-1FE6 03C5 0342;
-1FE7 03CB 0342;
-1FE8 03A5 0306;
-1FE9 03A5 0304;
-1FEA 03A5 0300;
-1FEB 038E 0000;
-1FEC 03A1 0314;
-1FED 00A8 0300;
-1FEE 0385 0000;
-1FEF 0060 0000;
-1FF2 1F7C 0345;
-1FF3 03C9 0345;
-1FF4 03CE 0345;
-1FF6 03C9 0342;
-1FF7 1FF6 0345;
-1FF8 039F 0300;
-1FF9 038C 0000;
-1FFA 03A9 0300;
-1FFB 038F 0000;
-1FFC 03A9 0345;
-1FFD 00B4 0000;
-2000 2002 0000;
-2001 2003 0000;
-2126 03A9 0000;
-212A 004B 0000;
-212B 00C5 0000;
-219A 2190 0338;
-219B 2192 0338;
-21AE 2194 0338;
-21CD 21D0 0338;
-21CE 21D4 0338;
-21CF 21D2 0338;
-2204 2203 0338;
-2209 2208 0338;
-220C 220B 0338;
-2224 2223 0338;
-2226 2225 0338;
-2241 223C 0338;
-2244 2243 0338;
-2247 2245 0338;
-2249 2248 0338;
-2260 003D 0338;
-2262 2261 0338;
-226D 224D 0338;
-226E 003C 0338;
-226F 003E 0338;
-2270 2264 0338;
-2271 2265 0338;
-2274 2272 0338;
-2275 2273 0338;
-2278 2276 0338;
-2279 2277 0338;
-2280 227A 0338;
-2281 227B 0338;
-2284 2282 0338;
-2285 2283 0338;
-2288 2286 0338;
-2289 2287 0338;
-22AC 22A2 0338;
-22AD 22A8 0338;
-22AE 22A9 0338;
-22AF 22AB 0338;
-22E0 227C 0338;
-22E1 227D 0338;
-22E2 2291 0338;
-22E3 2292 0338;
-22EA 22B2 0338;
-22EB 22B3 0338;
-22EC 22B4 0338;
-22ED 22B5 0338;
-2329 3008 0000;
-232A 3009 0000;
-304C 304B 3099;
-304E 304D 3099;
-3050 304F 3099;
-3052 3051 3099;
-3054 3053 3099;
-3056 3055 3099;
-3058 3057 3099;
-305A 3059 3099;
-305C 305B 3099;
-305E 305D 3099;
-3060 305F 3099;
-3062 3061 3099;
-3065 3064 3099;
-3067 3066 3099;
-3069 3068 3099;
-3070 306F 3099;
-3071 306F 309A;
-3073 3072 3099;
-3074 3072 309A;
-3076 3075 3099;
-3077 3075 309A;
-3079 3078 3099;
-307A 3078 309A;
-307C 307B 3099;
-307D 307B 309A;
-3094 3046 3099;
-309E 309D 3099;
-30AC 30AB 3099;
-30AE 30AD 3099;
-30B0 30AF 3099;
-30B2 30B1 3099;
-30B4 30B3 3099;
-30B6 30B5 3099;
-30B8 30B7 3099;
-30BA 30B9 3099;
-30BC 30BB 3099;
-30BE 30BD 3099;
-30C0 30BF 3099;
-30C2 30C1 3099;
-30C5 30C4 3099;
-30C7 30C6 3099;
-30C9 30C8 3099;
-30D0 30CF 3099;
-30D1 30CF 309A;
-30D3 30D2 3099;
-30D4 30D2 309A;
-30D6 30D5 3099;
-30D7 30D5 309A;
-30D9 30D8 3099;
-30DA 30D8 309A;
-30DC 30DB 3099;
-30DD 30DB 309A;
-30F4 30A6 3099;
-30F7 30EF 3099;
-30F8 30F0 3099;
-30F9 30F1 3099;
-30FA 30F2 3099;
-30FE 30FD 3099;
-F900 8C48 0000;
-F901 66F4 0000;
-F902 8ECA 0000;
-F903 8CC8 0000;
-F904 6ED1 0000;
-F905 4E32 0000;
-F906 53E5 0000;
-F907 9F9C 0000;
-F908 9F9C 0000;
-F909 5951 0000;
-F90A 91D1 0000;
-F90B 5587 0000;
-F90C 5948 0000;
-F90D 61F6 0000;
-F90E 7669 0000;
-F90F 7F85 0000;
-F910 863F 0000;
-F911 87BA 0000;
-F912 88F8 0000;
-F913 908F 0000;
-F914 6A02 0000;
-F915 6D1B 0000;
-F916 70D9 0000;
-F917 73DE 0000;
-F918 843D 0000;
-F919 916A 0000;
-F91A 99F1 0000;
-F91B 4E82 0000;
-F91C 5375 0000;
-F91D 6B04 0000;
-F91E 721B 0000;
-F91F 862D 0000;
-F920 9E1E 0000;
-F921 5D50 0000;
-F922 6FEB 0000;
-F923 85CD 0000;
-F924 8964 0000;
-F925 62C9 0000;
-F926 81D8 0000;
-F927 881F 0000;
-F928 5ECA 0000;
-F929 6717 0000;
-F92A 6D6A 0000;
-F92B 72FC 0000;
-F92C 90CE 0000;
-F92D 4F86 0000;
-F92E 51B7 0000;
-F92F 52DE 0000;
-F930 64C4 0000;
-F931 6AD3 0000;
-F932 7210 0000;
-F933 76E7 0000;
-F934 8001 0000;
-F935 8606 0000;
-F936 865C 0000;
-F937 8DEF 0000;
-F938 9732 0000;
-F939 9B6F 0000;
-F93A 9DFA 0000;
-F93B 788C 0000;
-F93C 797F 0000;
-F93D 7DA0 0000;
-F93E 83C9 0000;
-F93F 9304 0000;
-F940 9E7F 0000;
-F941 8AD6 0000;
-F942 58DF 0000;
-F943 5F04 0000;
-F944 7C60 0000;
-F945 807E 0000;
-F946 7262 0000;
-F947 78CA 0000;
-F948 8CC2 0000;
-F949 96F7 0000;
-F94A 58D8 0000;
-F94B 5C62 0000;
-F94C 6A13 0000;
-F94D 6DDA 0000;
-F94E 6F0F 0000;
-F94F 7D2F 0000;
-F950 7E37 0000;
-F951 96FB 0000;
-F952 52D2 0000;
-F953 808B 0000;
-F954 51DC 0000;
-F955 51CC 0000;
-F956 7A1C 0000;
-F957 7DBE 0000;
-F958 83F1 0000;
-F959 9675 0000;
-F95A 8B80 0000;
-F95B 62CF 0000;
-F95C 6A02 0000;
-F95D 8AFE 0000;
-F95E 4E39 0000;
-F95F 5BE7 0000;
-F960 6012 0000;
-F961 7387 0000;
-F962 7570 0000;
-F963 5317 0000;
-F964 78FB 0000;
-F965 4FBF 0000;
-F966 5FA9 0000;
-F967 4E0D 0000;
-F968 6CCC 0000;
-F969 6578 0000;
-F96A 7D22 0000;
-F96B 53C3 0000;
-F96C 585E 0000;
-F96D 7701 0000;
-F96E 8449 0000;
-F96F 8AAA 0000;
-F970 6BBA 0000;
-F971 8FB0 0000;
-F972 6C88 0000;
-F973 62FE 0000;
-F974 82E5 0000;
-F975 63A0 0000;
-F976 7565 0000;
-F977 4EAE 0000;
-F978 5169 0000;
-F979 51C9 0000;
-F97A 6881 0000;
-F97B 7CE7 0000;
-F97C 826F 0000;
-F97D 8AD2 0000;
-F97E 91CF 0000;
-F97F 52F5 0000;
-F980 5442 0000;
-F981 5973 0000;
-F982 5EEC 0000;
-F983 65C5 0000;
-F984 6FFE 0000;
-F985 792A 0000;
-F986 95AD 0000;
-F987 9A6A 0000;
-F988 9E97 0000;
-F989 9ECE 0000;
-F98A 529B 0000;
-F98B 66C6 0000;
-F98C 6B77 0000;
-F98D 8F62 0000;
-F98E 5E74 0000;
-F98F 6190 0000;
-F990 6200 0000;
-F991 649A 0000;
-F992 6F23 0000;
-F993 7149 0000;
-F994 7489 0000;
-F995 79CA 0000;
-F996 7DF4 0000;
-F997 806F 0000;
-F998 8F26 0000;
-F999 84EE 0000;
-F99A 9023 0000;
-F99B 934A 0000;
-F99C 5217 0000;
-F99D 52A3 0000;
-F99E 54BD 0000;
-F99F 70C8 0000;
-F9A0 88C2 0000;
-F9A1 8AAA 0000;
-F9A2 5EC9 0000;
-F9A3 5FF5 0000;
-F9A4 637B 0000;
-F9A5 6BAE 0000;
-F9A6 7C3E 0000;
-F9A7 7375 0000;
-F9A8 4EE4 0000;
-F9A9 56F9 0000;
-F9AA 5BE7 0000;
-F9AB 5DBA 0000;
-F9AC 601C 0000;
-F9AD 73B2 0000;
-F9AE 7469 0000;
-F9AF 7F9A 0000;
-F9B0 8046 0000;
-F9B1 9234 0000;
-F9B2 96F6 0000;
-F9B3 9748 0000;
-F9B4 9818 0000;
-F9B5 4F8B 0000;
-F9B6 79AE 0000;
-F9B7 91B4 0000;
-F9B8 96B8 0000;
-F9B9 60E1 0000;
-F9BA 4E86 0000;
-F9BB 50DA 0000;
-F9BC 5BEE 0000;
-F9BD 5C3F 0000;
-F9BE 6599 0000;
-F9BF 6A02 0000;
-F9C0 71CE 0000;
-F9C1 7642 0000;
-F9C2 84FC 0000;
-F9C3 907C 0000;
-F9C4 9F8D 0000;
-F9C5 6688 0000;
-F9C6 962E 0000;
-F9C7 5289 0000;
-F9C8 677B 0000;
-F9C9 67F3 0000;
-F9CA 6D41 0000;
-F9CB 6E9C 0000;
-F9CC 7409 0000;
-F9CD 7559 0000;
-F9CE 786B 0000;
-F9CF 7D10 0000;
-F9D0 985E 0000;
-F9D1 516D 0000;
-F9D2 622E 0000;
-F9D3 9678 0000;
-F9D4 502B 0000;
-F9D5 5D19 0000;
-F9D6 6DEA 0000;
-F9D7 8F2A 0000;
-F9D8 5F8B 0000;
-F9D9 6144 0000;
-F9DA 6817 0000;
-F9DB 7387 0000;
-F9DC 9686 0000;
-F9DD 5229 0000;
-F9DE 540F 0000;
-F9DF 5C65 0000;
-F9E0 6613 0000;
-F9E1 674E 0000;
-F9E2 68A8 0000;
-F9E3 6CE5 0000;
-F9E4 7406 0000;
-F9E5 75E2 0000;
-F9E6 7F79 0000;
-F9E7 88CF 0000;
-F9E8 88E1 0000;
-F9E9 91CC 0000;
-F9EA 96E2 0000;
-F9EB 533F 0000;
-F9EC 6EBA 0000;
-F9ED 541D 0000;
-F9EE 71D0 0000;
-F9EF 7498 0000;
-F9F0 85FA 0000;
-F9F1 96A3 0000;
-F9F2 9C57 0000;
-F9F3 9E9F 0000;
-F9F4 6797 0000;
-F9F5 6DCB 0000;
-F9F6 81E8 0000;
-F9F7 7ACB 0000;
-F9F8 7B20 0000;
-F9F9 7C92 0000;
-F9FA 72C0 0000;
-F9FB 7099 0000;
-F9FC 8B58 0000;
-F9FD 4EC0 0000;
-F9FE 8336 0000;
-F9FF 523A 0000;
-FA00 5207 0000;
-FA01 5EA6 0000;
-FA02 62D3 0000;
-FA03 7CD6 0000;
-FA04 5B85 0000;
-FA05 6D1E 0000;
-FA06 66B4 0000;
-FA07 8F3B 0000;
-FA08 884C 0000;
-FA09 964D 0000;
-FA0A 898B 0000;
-FA0B 5ED3 0000;
-FA0C 5140 0000;
-FA0D 55C0 0000;
-FA10 585A 0000;
-FA12 6674 0000;
-FA15 51DE 0000;
-FA16 732A 0000;
-FA17 76CA 0000;
-FA18 793C 0000;
-FA19 795E 0000;
-FA1A 7965 0000;
-FA1B 798F 0000;
-FA1C 9756 0000;
-FA1D 7CBE 0000;
-FA1E 7FBD 0000;
-FA20 8612 0000;
-FA22 8AF8 0000;
-FA25 9038 0000;
-FA26 90FD 0000;
-FA2A 98EF 0000;
-FA2B 98FC 0000;
-FA2C 9928 0000;
-FA2D 9DB4 0000;
-FB1D 05D9 05B4;
-FB1F 05F2 05B7;
-FB2A 05E9 05C1;
-FB2B 05E9 05C2;
-FB2C FB49 05C1;
-FB2D FB49 05C2;
-FB2E 05D0 05B7;
-FB2F 05D0 05B8;
-FB30 05D0 05BC;
-FB31 05D1 05BC;
-FB32 05D2 05BC;
-FB33 05D3 05BC;
-FB34 05D4 05BC;
-FB35 05D5 05BC;
-FB36 05D6 05BC;
-FB38 05D8 05BC;
-FB39 05D9 05BC;
-FB3A 05DA 05BC;
-FB3B 05DB 05BC;
-FB3C 05DC 05BC;
-FB3E 05DE 05BC;
-FB40 05E0 05BC;
-FB41 05E1 05BC;
-FB43 05E3 05BC;
-FB44 05E4 05BC;
-FB46 05E6 05BC;
-FB47 05E7 05BC;
-FB48 05E8 05BC;
-FB49 05E9 05BC;
-FB4A 05EA 05BC;
-FB4B 05D5 05B9;
-FB4C 05D1 05BF;
-FB4D 05DB 05BF;
-FB4E 05E4 05BF;
diff --git a/data/uni-nfkd.txt b/data/uni-nfkd.txt
deleted file mode 100644 (file)
index 8dc828e..0000000
+++ /dev/null
@@ -1,3486 +0,0 @@
-# uni-nfkd.txt - Unicode decomposition mapping
-00A0 0020 0000;<noBreak>;
-00A8 0020 0308;<compat>;
-00AA 0061 0000;<super>;
-00AF 0020 0304;<compat>;
-00B2 0032 0000;<super>;
-00B3 0033 0000;<super>;
-00B4 0020 0301;<compat>;
-00B5 03BC 0000;<compat>;
-00B8 0020 0327;<compat>;
-00B9 0031 0000;<super>;
-00BA 006F 0000;<super>;
-00BC 0031 2044;<fraction>;
-00BD 0031 2044;<fraction>;
-00BE 0033 2044;<fraction>;
-00C0 0041 0300;
-00C1 0041 0301;
-00C2 0041 0302;
-00C3 0041 0303;
-00C4 0041 0308;
-00C5 0041 030A;
-00C7 0043 0327;
-00C8 0045 0300;
-00C9 0045 0301;
-00CA 0045 0302;
-00CB 0045 0308;
-00CC 0049 0300;
-00CD 0049 0301;
-00CE 0049 0302;
-00CF 0049 0308;
-00D1 004E 0303;
-00D2 004F 0300;
-00D3 004F 0301;
-00D4 004F 0302;
-00D5 004F 0303;
-00D6 004F 0308;
-00D9 0055 0300;
-00DA 0055 0301;
-00DB 0055 0302;
-00DC 0055 0308;
-00DD 0059 0301;
-00E0 0061 0300;
-00E1 0061 0301;
-00E2 0061 0302;
-00E3 0061 0303;
-00E4 0061 0308;
-00E5 0061 030A;
-00E7 0063 0327;
-00E8 0065 0300;
-00E9 0065 0301;
-00EA 0065 0302;
-00EB 0065 0308;
-00EC 0069 0300;
-00ED 0069 0301;
-00EE 0069 0302;
-00EF 0069 0308;
-00F1 006E 0303;
-00F2 006F 0300;
-00F3 006F 0301;
-00F4 006F 0302;
-00F5 006F 0303;
-00F6 006F 0308;
-00F9 0075 0300;
-00FA 0075 0301;
-00FB 0075 0302;
-00FC 0075 0308;
-00FD 0079 0301;
-00FF 0079 0308;
-0100 0041 0304;
-0101 0061 0304;
-0102 0041 0306;
-0103 0061 0306;
-0104 0041 0328;
-0105 0061 0328;
-0106 0043 0301;
-0107 0063 0301;
-0108 0043 0302;
-0109 0063 0302;
-010A 0043 0307;
-010B 0063 0307;
-010C 0043 030C;
-010D 0063 030C;
-010E 0044 030C;
-010F 0064 030C;
-0112 0045 0304;
-0113 0065 0304;
-0114 0045 0306;
-0115 0065 0306;
-0116 0045 0307;
-0117 0065 0307;
-0118 0045 0328;
-0119 0065 0328;
-011A 0045 030C;
-011B 0065 030C;
-011C 0047 0302;
-011D 0067 0302;
-011E 0047 0306;
-011F 0067 0306;
-0120 0047 0307;
-0121 0067 0307;
-0122 0047 0327;
-0123 0067 0327;
-0124 0048 0302;
-0125 0068 0302;
-0128 0049 0303;
-0129 0069 0303;
-012A 0049 0304;
-012B 0069 0304;
-012C 0049 0306;
-012D 0069 0306;
-012E 0049 0328;
-012F 0069 0328;
-0130 0049 0307;
-0132 0049 004A;<compat>;
-0133 0069 006A;<compat>;
-0134 004A 0302;
-0135 006A 0302;
-0136 004B 0327;
-0137 006B 0327;
-0139 004C 0301;
-013A 006C 0301;
-013B 004C 0327;
-013C 006C 0327;
-013D 004C 030C;
-013E 006C 030C;
-013F 004C 00B7;<compat>;
-0140 006C 00B7;<compat>;
-0143 004E 0301;
-0144 006E 0301;
-0145 004E 0327;
-0146 006E 0327;
-0147 004E 030C;
-0148 006E 030C;
-0149 02BC 006E;<compat>;
-014C 004F 0304;
-014D 006F 0304;
-014E 004F 0306;
-014F 006F 0306;
-0150 004F 030B;
-0151 006F 030B;
-0154 0052 0301;
-0155 0072 0301;
-0156 0052 0327;
-0157 0072 0327;
-0158 0052 030C;
-0159 0072 030C;
-015A 0053 0301;
-015B 0073 0301;
-015C 0053 0302;
-015D 0073 0302;
-015E 0053 0327;
-015F 0073 0327;
-0160 0053 030C;
-0161 0073 030C;
-0162 0054 0327;
-0163 0074 0327;
-0164 0054 030C;
-0165 0074 030C;
-0168 0055 0303;
-0169 0075 0303;
-016A 0055 0304;
-016B 0075 0304;
-016C 0055 0306;
-016D 0075 0306;
-016E 0055 030A;
-016F 0075 030A;
-0170 0055 030B;
-0171 0075 030B;
-0172 0055 0328;
-0173 0075 0328;
-0174 0057 0302;
-0175 0077 0302;
-0176 0059 0302;
-0177 0079 0302;
-0178 0059 0308;
-0179 005A 0301;
-017A 007A 0301;
-017B 005A 0307;
-017C 007A 0307;
-017D 005A 030C;
-017E 007A 030C;
-017F 0073 0000;<compat>;
-01A0 004F 031B;
-01A1 006F 031B;
-01AF 0055 031B;
-01B0 0075 031B;
-01C4 0044 017D;<compat>;
-01C5 0044 017E;<compat>;
-01C6 0064 017E;<compat>;
-01C7 004C 004A;<compat>;
-01C8 004C 006A;<compat>;
-01C9 006C 006A;<compat>;
-01CA 004E 004A;<compat>;
-01CB 004E 006A;<compat>;
-01CC 006E 006A;<compat>;
-01CD 0041 030C;
-01CE 0061 030C;
-01CF 0049 030C;
-01D0 0069 030C;
-01D1 004F 030C;
-01D2 006F 030C;
-01D3 0055 030C;
-01D4 0075 030C;
-01D5 00DC 0304;
-01D6 00FC 0304;
-01D7 00DC 0301;
-01D8 00FC 0301;
-01D9 00DC 030C;
-01DA 00FC 030C;
-01DB 00DC 0300;
-01DC 00FC 0300;
-01DE 00C4 0304;
-01DF 00E4 0304;
-01E0 0226 0304;
-01E1 0227 0304;
-01E2 00C6 0304;
-01E3 00E6 0304;
-01E6 0047 030C;
-01E7 0067 030C;
-01E8 004B 030C;
-01E9 006B 030C;
-01EA 004F 0328;
-01EB 006F 0328;
-01EC 01EA 0304;
-01ED 01EB 0304;
-01EE 01B7 030C;
-01EF 0292 030C;
-01F0 006A 030C;
-01F1 0044 005A;<compat>;
-01F2 0044 007A;<compat>;
-01F3 0064 007A;<compat>;
-01F4 0047 0301;
-01F5 0067 0301;
-01F8 004E 0300;
-01F9 006E 0300;
-01FA 00C5 0301;
-01FB 00E5 0301;
-01FC 00C6 0301;
-01FD 00E6 0301;
-01FE 00D8 0301;
-01FF 00F8 0301;
-0200 0041 030F;
-0201 0061 030F;
-0202 0041 0311;
-0203 0061 0311;
-0204 0045 030F;
-0205 0065 030F;
-0206 0045 0311;
-0207 0065 0311;
-0208 0049 030F;
-0209 0069 030F;
-020A 0049 0311;
-020B 0069 0311;
-020C 004F 030F;
-020D 006F 030F;
-020E 004F 0311;
-020F 006F 0311;
-0210 0052 030F;
-0211 0072 030F;
-0212 0052 0311;
-0213 0072 0311;
-0214 0055 030F;
-0215 0075 030F;
-0216 0055 0311;
-0217 0075 0311;
-0218 0053 0326;
-0219 0073 0326;
-021A 0054 0326;
-021B 0074 0326;
-021E 0048 030C;
-021F 0068 030C;
-0226 0041 0307;
-0227 0061 0307;
-0228 0045 0327;
-0229 0065 0327;
-022A 00D6 0304;
-022B 00F6 0304;
-022C 00D5 0304;
-022D 00F5 0304;
-022E 004F 0307;
-022F 006F 0307;
-0230 022E 0304;
-0231 022F 0304;
-0232 0059 0304;
-0233 0079 0304;
-02B0 0068 0000;<super>;
-02B1 0266 0000;<super>;
-02B2 006A 0000;<super>;
-02B3 0072 0000;<super>;
-02B4 0279 0000;<super>;
-02B5 027B 0000;<super>;
-02B6 0281 0000;<super>;
-02B7 0077 0000;<super>;
-02B8 0079 0000;<super>;
-02D8 0020 0306;<compat>;
-02D9 0020 0307;<compat>;
-02DA 0020 030A;<compat>;
-02DB 0020 0328;<compat>;
-02DC 0020 0303;<compat>;
-02DD 0020 030B;<compat>;
-02E0 0263 0000;<super>;
-02E1 006C 0000;<super>;
-02E2 0073 0000;<super>;
-02E3 0078 0000;<super>;
-02E4 0295 0000;<super>;
-0340 0300 0000;
-0341 0301 0000;
-0343 0313 0000;
-0344 0308 0301;
-0374 02B9 0000;
-037A 0020 0345;<compat>;
-037E 003B 0000;
-0384 0020 0301;<compat>;
-0385 00A8 0301;
-0386 0391 0301;
-0387 00B7 0000;
-0388 0395 0301;
-0389 0397 0301;
-038A 0399 0301;
-038C 039F 0301;
-038E 03A5 0301;
-038F 03A9 0301;
-0390 03CA 0301;
-03AA 0399 0308;
-03AB 03A5 0308;
-03AC 03B1 0301;
-03AD 03B5 0301;
-03AE 03B7 0301;
-03AF 03B9 0301;
-03B0 03CB 0301;
-03CA 03B9 0308;
-03CB 03C5 0308;
-03CC 03BF 0301;
-03CD 03C5 0301;
-03CE 03C9 0301;
-03D0 03B2 0000;<compat>;
-03D1 03B8 0000;<compat>;
-03D2 03A5 0000;<compat>;
-03D3 03D2 0301;
-03D4 03D2 0308;
-03D5 03C6 0000;<compat>;
-03D6 03C0 0000;<compat>;
-03F0 03BA 0000;<compat>;
-03F1 03C1 0000;<compat>;
-03F2 03C2 0000;<compat>;
-03F4 0398 0000;<compat>;
-03F5 03B5 0000;<compat>;
-0400 0415 0300;
-0401 0415 0308;
-0403 0413 0301;
-0407 0406 0308;
-040C 041A 0301;
-040D 0418 0300;
-040E 0423 0306;
-0419 0418 0306;
-0439 0438 0306;
-0450 0435 0300;
-0451 0435 0308;
-0453 0433 0301;
-0457 0456 0308;
-045C 043A 0301;
-045D 0438 0300;
-045E 0443 0306;
-0476 0474 030F;
-0477 0475 030F;
-04C1 0416 0306;
-04C2 0436 0306;
-04D0 0410 0306;
-04D1 0430 0306;
-04D2 0410 0308;
-04D3 0430 0308;
-04D6 0415 0306;
-04D7 0435 0306;
-04DA 04D8 0308;
-04DB 04D9 0308;
-04DC 0416 0308;
-04DD 0436 0308;
-04DE 0417 0308;
-04DF 0437 0308;
-04E2 0418 0304;
-04E3 0438 0304;
-04E4 0418 0308;
-04E5 0438 0308;
-04E6 041E 0308;
-04E7 043E 0308;
-04EA 04E8 0308;
-04EB 04E9 0308;
-04EC 042D 0308;
-04ED 044D 0308;
-04EE 0423 0304;
-04EF 0443 0304;
-04F0 0423 0308;
-04F1 0443 0308;
-04F2 0423 030B;
-04F3 0443 030B;
-04F4 0427 0308;
-04F5 0447 0308;
-04F8 042B 0308;
-04F9 044B 0308;
-0587 0565 0582;<compat>;
-0622 0627 0653;
-0623 0627 0654;
-0624 0648 0654;
-0625 0627 0655;
-0626 064A 0654;
-0675 0627 0674;<compat>;
-0676 0648 0674;<compat>;
-0677 06C7 0674;<compat>;
-0678 064A 0674;<compat>;
-06C0 06D5 0654;
-06C2 06C1 0654;
-06D3 06D2 0654;
-0929 0928 093C;
-0931 0930 093C;
-0934 0933 093C;
-0958 0915 093C;
-0959 0916 093C;
-095A 0917 093C;
-095B 091C 093C;
-095C 0921 093C;
-095D 0922 093C;
-095E 092B 093C;
-095F 092F 093C;
-09CB 09C7 09BE;
-09CC 09C7 09D7;
-09DC 09A1 09BC;
-09DD 09A2 09BC;
-09DF 09AF 09BC;
-0A33 0A32 0A3C;
-0A36 0A38 0A3C;
-0A59 0A16 0A3C;
-0A5A 0A17 0A3C;
-0A5B 0A1C 0A3C;
-0A5E 0A2B 0A3C;
-0B48 0B47 0B56;
-0B4B 0B47 0B3E;
-0B4C 0B47 0B57;
-0B5C 0B21 0B3C;
-0B5D 0B22 0B3C;
-0B94 0B92 0BD7;
-0BCA 0BC6 0BBE;
-0BCB 0BC7 0BBE;
-0BCC 0BC6 0BD7;
-0C48 0C46 0C56;
-0CC0 0CBF 0CD5;
-0CC7 0CC6 0CD5;
-0CC8 0CC6 0CD6;
-0CCA 0CC6 0CC2;
-0CCB 0CCA 0CD5;
-0D4A 0D46 0D3E;
-0D4B 0D47 0D3E;
-0D4C 0D46 0D57;
-0DDA 0DD9 0DCA;
-0DDC 0DD9 0DCF;
-0DDD 0DDC 0DCA;
-0DDE 0DD9 0DDF;
-0E33 0E4D 0E32;<compat>;
-0EB3 0ECD 0EB2;<compat>;
-0EDC 0EAB 0E99;<compat>;
-0EDD 0EAB 0EA1;<compat>;
-0F0C 0F0B 0000;<noBreak>;
-0F43 0F42 0FB7;
-0F4D 0F4C 0FB7;
-0F52 0F51 0FB7;
-0F57 0F56 0FB7;
-0F5C 0F5B 0FB7;
-0F69 0F40 0FB5;
-0F73 0F71 0F72;
-0F75 0F71 0F74;
-0F76 0FB2 0F80;
-0F77 0FB2 0F81;<compat>;
-0F78 0FB3 0F80;
-0F79 0FB3 0F81;<compat>;
-0F81 0F71 0F80;
-0F93 0F92 0FB7;
-0F9D 0F9C 0FB7;
-0FA2 0FA1 0FB7;
-0FA7 0FA6 0FB7;
-0FAC 0FAB 0FB7;
-0FB9 0F90 0FB5;
-1026 1025 102E;
-1E00 0041 0325;
-1E01 0061 0325;
-1E02 0042 0307;
-1E03 0062 0307;
-1E04 0042 0323;
-1E05 0062 0323;
-1E06 0042 0331;
-1E07 0062 0331;
-1E08 00C7 0301;
-1E09 00E7 0301;
-1E0A 0044 0307;
-1E0B 0064 0307;
-1E0C 0044 0323;
-1E0D 0064 0323;
-1E0E 0044 0331;
-1E0F 0064 0331;
-1E10 0044 0327;
-1E11 0064 0327;
-1E12 0044 032D;
-1E13 0064 032D;
-1E14 0112 0300;
-1E15 0113 0300;
-1E16 0112 0301;
-1E17 0113 0301;
-1E18 0045 032D;
-1E19 0065 032D;
-1E1A 0045 0330;
-1E1B 0065 0330;
-1E1C 0228 0306;
-1E1D 0229 0306;
-1E1E 0046 0307;
-1E1F 0066 0307;
-1E20 0047 0304;
-1E21 0067 0304;
-1E22 0048 0307;
-1E23 0068 0307;
-1E24 0048 0323;
-1E25 0068 0323;
-1E26 0048 0308;
-1E27 0068 0308;
-1E28 0048 0327;
-1E29 0068 0327;
-1E2A 0048 032E;
-1E2B 0068 032E;
-1E2C 0049 0330;
-1E2D 0069 0330;
-1E2E 00CF 0301;
-1E2F 00EF 0301;
-1E30 004B 0301;
-1E31 006B 0301;
-1E32 004B 0323;
-1E33 006B 0323;
-1E34 004B 0331;
-1E35 006B 0331;
-1E36 004C 0323;
-1E37 006C 0323;
-1E38 1E36 0304;
-1E39 1E37 0304;
-1E3A 004C 0331;
-1E3B 006C 0331;
-1E3C 004C 032D;
-1E3D 006C 032D;
-1E3E 004D 0301;
-1E3F 006D 0301;
-1E40 004D 0307;
-1E41 006D 0307;
-1E42 004D 0323;
-1E43 006D 0323;
-1E44 004E 0307;
-1E45 006E 0307;
-1E46 004E 0323;
-1E47 006E 0323;
-1E48 004E 0331;
-1E49 006E 0331;
-1E4A 004E 032D;
-1E4B 006E 032D;
-1E4C 00D5 0301;
-1E4D 00F5 0301;
-1E4E 00D5 0308;
-1E4F 00F5 0308;
-1E50 014C 0300;
-1E51 014D 0300;
-1E52 014C 0301;
-1E53 014D 0301;
-1E54 0050 0301;
-1E55 0070 0301;
-1E56 0050 0307;
-1E57 0070 0307;
-1E58 0052 0307;
-1E59 0072 0307;
-1E5A 0052 0323;
-1E5B 0072 0323;
-1E5C 1E5A 0304;
-1E5D 1E5B 0304;
-1E5E 0052 0331;
-1E5F 0072 0331;
-1E60 0053 0307;
-1E61 0073 0307;
-1E62 0053 0323;
-1E63 0073 0323;
-1E64 015A 0307;
-1E65 015B 0307;
-1E66 0160 0307;
-1E67 0161 0307;
-1E68 1E62 0307;
-1E69 1E63 0307;
-1E6A 0054 0307;
-1E6B 0074 0307;
-1E6C 0054 0323;
-1E6D 0074 0323;
-1E6E 0054 0331;
-1E6F 0074 0331;
-1E70 0054 032D;
-1E71 0074 032D;
-1E72 0055 0324;
-1E73 0075 0324;
-1E74 0055 0330;
-1E75 0075 0330;
-1E76 0055 032D;
-1E77 0075 032D;
-1E78 0168 0301;
-1E79 0169 0301;
-1E7A 016A 0308;
-1E7B 016B 0308;
-1E7C 0056 0303;
-1E7D 0076 0303;
-1E7E 0056 0323;
-1E7F 0076 0323;
-1E80 0057 0300;
-1E81 0077 0300;
-1E82 0057 0301;
-1E83 0077 0301;
-1E84 0057 0308;
-1E85 0077 0308;
-1E86 0057 0307;
-1E87 0077 0307;
-1E88 0057 0323;
-1E89 0077 0323;
-1E8A 0058 0307;
-1E8B 0078 0307;
-1E8C 0058 0308;
-1E8D 0078 0308;
-1E8E 0059 0307;
-1E8F 0079 0307;
-1E90 005A 0302;
-1E91 007A 0302;
-1E92 005A 0323;
-1E93 007A 0323;
-1E94 005A 0331;
-1E95 007A 0331;
-1E96 0068 0331;
-1E97 0074 0308;
-1E98 0077 030A;
-1E99 0079 030A;
-1E9A 0061 02BE;<compat>;
-1E9B 017F 0307;
-1EA0 0041 0323;
-1EA1 0061 0323;
-1EA2 0041 0309;
-1EA3 0061 0309;
-1EA4 00C2 0301;
-1EA5 00E2 0301;
-1EA6 00C2 0300;
-1EA7 00E2 0300;
-1EA8 00C2 0309;
-1EA9 00E2 0309;
-1EAA 00C2 0303;
-1EAB 00E2 0303;
-1EAC 1EA0 0302;
-1EAD 1EA1 0302;
-1EAE 0102 0301;
-1EAF 0103 0301;
-1EB0 0102 0300;
-1EB1 0103 0300;
-1EB2 0102 0309;
-1EB3 0103 0309;
-1EB4 0102 0303;
-1EB5 0103 0303;
-1EB6 1EA0 0306;
-1EB7 1EA1 0306;
-1EB8 0045 0323;
-1EB9 0065 0323;
-1EBA 0045 0309;
-1EBB 0065 0309;
-1EBC 0045 0303;
-1EBD 0065 0303;
-1EBE 00CA 0301;
-1EBF 00EA 0301;
-1EC0 00CA 0300;
-1EC1 00EA 0300;
-1EC2 00CA 0309;
-1EC3 00EA 0309;
-1EC4 00CA 0303;
-1EC5 00EA 0303;
-1EC6 1EB8 0302;
-1EC7 1EB9 0302;
-1EC8 0049 0309;
-1EC9 0069 0309;
-1ECA 0049 0323;
-1ECB 0069 0323;
-1ECC 004F 0323;
-1ECD 006F 0323;
-1ECE 004F 0309;
-1ECF 006F 0309;
-1ED0 00D4 0301;
-1ED1 00F4 0301;
-1ED2 00D4 0300;
-1ED3 00F4 0300;
-1ED4 00D4 0309;
-1ED5 00F4 0309;
-1ED6 00D4 0303;
-1ED7 00F4 0303;
-1ED8 1ECC 0302;
-1ED9 1ECD 0302;
-1EDA 01A0 0301;
-1EDB 01A1 0301;
-1EDC 01A0 0300;
-1EDD 01A1 0300;
-1EDE 01A0 0309;
-1EDF 01A1 0309;
-1EE0 01A0 0303;
-1EE1 01A1 0303;
-1EE2 01A0 0323;
-1EE3 01A1 0323;
-1EE4 0055 0323;
-1EE5 0075 0323;
-1EE6 0055 0309;
-1EE7 0075 0309;
-1EE8 01AF 0301;
-1EE9 01B0 0301;
-1EEA 01AF 0300;
-1EEB 01B0 0300;
-1EEC 01AF 0309;
-1EED 01B0 0309;
-1EEE 01AF 0303;
-1EEF 01B0 0303;
-1EF0 01AF 0323;
-1EF1 01B0 0323;
-1EF2 0059 0300;
-1EF3 0079 0300;
-1EF4 0059 0323;
-1EF5 0079 0323;
-1EF6 0059 0309;
-1EF7 0079 0309;
-1EF8 0059 0303;
-1EF9 0079 0303;
-1F00 03B1 0313;
-1F01 03B1 0314;
-1F02 1F00 0300;
-1F03 1F01 0300;
-1F04 1F00 0301;
-1F05 1F01 0301;
-1F06 1F00 0342;
-1F07 1F01 0342;
-1F08 0391 0313;
-1F09 0391 0314;
-1F0A 1F08 0300;
-1F0B 1F09 0300;
-1F0C 1F08 0301;
-1F0D 1F09 0301;
-1F0E 1F08 0342;
-1F0F 1F09 0342;
-1F10 03B5 0313;
-1F11 03B5 0314;
-1F12 1F10 0300;
-1F13 1F11 0300;
-1F14 1F10 0301;
-1F15 1F11 0301;
-1F18 0395 0313;
-1F19 0395 0314;
-1F1A 1F18 0300;
-1F1B 1F19 0300;
-1F1C 1F18 0301;
-1F1D 1F19 0301;
-1F20 03B7 0313;
-1F21 03B7 0314;
-1F22 1F20 0300;
-1F23 1F21 0300;
-1F24 1F20 0301;
-1F25 1F21 0301;
-1F26 1F20 0342;
-1F27 1F21 0342;
-1F28 0397 0313;
-1F29 0397 0314;
-1F2A 1F28 0300;
-1F2B 1F29 0300;
-1F2C 1F28 0301;
-1F2D 1F29 0301;
-1F2E 1F28 0342;
-1F2F 1F29 0342;
-1F30 03B9 0313;
-1F31 03B9 0314;
-1F32 1F30 0300;
-1F33 1F31 0300;
-1F34 1F30 0301;
-1F35 1F31 0301;
-1F36 1F30 0342;
-1F37 1F31 0342;
-1F38 0399 0313;
-1F39 0399 0314;
-1F3A 1F38 0300;
-1F3B 1F39 0300;
-1F3C 1F38 0301;
-1F3D 1F39 0301;
-1F3E 1F38 0342;
-1F3F 1F39 0342;
-1F40 03BF 0313;
-1F41 03BF 0314;
-1F42 1F40 0300;
-1F43 1F41 0300;
-1F44 1F40 0301;
-1F45 1F41 0301;
-1F48 039F 0313;
-1F49 039F 0314;
-1F4A 1F48 0300;
-1F4B 1F49 0300;
-1F4C 1F48 0301;
-1F4D 1F49 0301;
-1F50 03C5 0313;
-1F51 03C5 0314;
-1F52 1F50 0300;
-1F53 1F51 0300;
-1F54 1F50 0301;
-1F55 1F51 0301;
-1F56 1F50 0342;
-1F57 1F51 0342;
-1F59 03A5 0314;
-1F5B 1F59 0300;
-1F5D 1F59 0301;
-1F5F 1F59 0342;
-1F60 03C9 0313;
-1F61 03C9 0314;
-1F62 1F60 0300;
-1F63 1F61 0300;
-1F64 1F60 0301;
-1F65 1F61 0301;
-1F66 1F60 0342;
-1F67 1F61 0342;
-1F68 03A9 0313;
-1F69 03A9 0314;
-1F6A 1F68 0300;
-1F6B 1F69 0300;
-1F6C 1F68 0301;
-1F6D 1F69 0301;
-1F6E 1F68 0342;
-1F6F 1F69 0342;
-1F70 03B1 0300;
-1F71 03AC 0000;
-1F72 03B5 0300;
-1F73 03AD 0000;
-1F74 03B7 0300;
-1F75 03AE 0000;
-1F76 03B9 0300;
-1F77 03AF 0000;
-1F78 03BF 0300;
-1F79 03CC 0000;
-1F7A 03C5 0300;
-1F7B 03CD 0000;
-1F7C 03C9 0300;
-1F7D 03CE 0000;
-1F80 1F00 0345;
-1F81 1F01 0345;
-1F82 1F02 0345;
-1F83 1F03 0345;
-1F84 1F04 0345;
-1F85 1F05 0345;
-1F86 1F06 0345;
-1F87 1F07 0345;
-1F88 1F08 0345;
-1F89 1F09 0345;
-1F8A 1F0A 0345;
-1F8B 1F0B 0345;
-1F8C 1F0C 0345;
-1F8D 1F0D 0345;
-1F8E 1F0E 0345;
-1F8F 1F0F 0345;
-1F90 1F20 0345;
-1F91 1F21 0345;
-1F92 1F22 0345;
-1F93 1F23 0345;
-1F94 1F24 0345;
-1F95 1F25 0345;
-1F96 1F26 0345;
-1F97 1F27 0345;
-1F98 1F28 0345;
-1F99 1F29 0345;
-1F9A 1F2A 0345;
-1F9B 1F2B 0345;
-1F9C 1F2C 0345;
-1F9D 1F2D 0345;
-1F9E 1F2E 0345;
-1F9F 1F2F 0345;
-1FA0 1F60 0345;
-1FA1 1F61 0345;
-1FA2 1F62 0345;
-1FA3 1F63 0345;
-1FA4 1F64 0345;
-1FA5 1F65 0345;
-1FA6 1F66 0345;
-1FA7 1F67 0345;
-1FA8 1F68 0345;
-1FA9 1F69 0345;
-1FAA 1F6A 0345;
-1FAB 1F6B 0345;
-1FAC 1F6C 0345;
-1FAD 1F6D 0345;
-1FAE 1F6E 0345;
-1FAF 1F6F 0345;
-1FB0 03B1 0306;
-1FB1 03B1 0304;
-1FB2 1F70 0345;
-1FB3 03B1 0345;
-1FB4 03AC 0345;
-1FB6 03B1 0342;
-1FB7 1FB6 0345;
-1FB8 0391 0306;
-1FB9 0391 0304;
-1FBA 0391 0300;
-1FBB 0386 0000;
-1FBC 0391 0345;
-1FBD 0020 0313;<compat>;
-1FBE 03B9 0000;
-1FBF 0020 0313;<compat>;
-1FC0 0020 0342;<compat>;
-1FC1 00A8 0342;
-1FC2 1F74 0345;
-1FC3 03B7 0345;
-1FC4 03AE 0345;
-1FC6 03B7 0342;
-1FC7 1FC6 0345;
-1FC8 0395 0300;
-1FC9 0388 0000;
-1FCA 0397 0300;
-1FCB 0389 0000;
-1FCC 0397 0345;
-1FCD 1FBF 0300;
-1FCE 1FBF 0301;
-1FCF 1FBF 0342;
-1FD0 03B9 0306;
-1FD1 03B9 0304;
-1FD2 03CA 0300;
-1FD3 0390 0000;
-1FD6 03B9 0342;
-1FD7 03CA 0342;
-1FD8 0399 0306;
-1FD9 0399 0304;
-1FDA 0399 0300;
-1FDB 038A 0000;
-1FDD 1FFE 0300;
-1FDE 1FFE 0301;
-1FDF 1FFE 0342;
-1FE0 03C5 0306;
-1FE1 03C5 0304;
-1FE2 03CB 0300;
-1FE3 03B0 0000;
-1FE4 03C1 0313;
-1FE5 03C1 0314;
-1FE6 03C5 0342;
-1FE7 03CB 0342;
-1FE8 03A5 0306;
-1FE9 03A5 0304;
-1FEA 03A5 0300;
-1FEB 038E 0000;
-1FEC 03A1 0314;
-1FED 00A8 0300;
-1FEE 0385 0000;
-1FEF 0060 0000;
-1FF2 1F7C 0345;
-1FF3 03C9 0345;
-1FF4 03CE 0345;
-1FF6 03C9 0342;
-1FF7 1FF6 0345;
-1FF8 039F 0300;
-1FF9 038C 0000;
-1FFA 03A9 0300;
-1FFB 038F 0000;
-1FFC 03A9 0345;
-1FFD 00B4 0000;
-1FFE 0020 0314;<compat>;
-2000 2002 0000;
-2001 2003 0000;
-2002 0020 0000;<compat>;
-2003 0020 0000;<compat>;
-2004 0020 0000;<compat>;
-2005 0020 0000;<compat>;
-2006 0020 0000;<compat>;
-2007 0020 0000;<noBreak>;
-2008 0020 0000;<compat>;
-2009 0020 0000;<compat>;
-200A 0020 0000;<compat>;
-2011 2010 0000;<noBreak>;
-2017 0020 0333;<compat>;
-2024 002E 0000;<compat>;
-2025 002E 002E;<compat>;
-2026 002E 002E;<compat>;
-202F 0020 0000;<noBreak>;
-2033 2032 2032;<compat>;
-2034 2032 2032;<compat>;
-2036 2035 2035;<compat>;
-2037 2035 2035;<compat>;
-203C 0021 0021;<compat>;
-203E 0020 0305;<compat>;
-2048 003F 0021;<compat>;
-2049 0021 003F;<compat>;
-2070 0030 0000;<super>;
-2074 0034 0000;<super>;
-2075 0035 0000;<super>;
-2076 0036 0000;<super>;
-2077 0037 0000;<super>;
-2078 0038 0000;<super>;
-2079 0039 0000;<super>;
-207A 002B 0000;<super>;
-207B 2212 0000;<super>;
-207C 003D 0000;<super>;
-207D 0028 0000;<super>;
-207E 0029 0000;<super>;
-207F 006E 0000;<super>;
-2080 0030 0000;<sub>;
-2081 0031 0000;<sub>;
-2082 0032 0000;<sub>;
-2083 0033 0000;<sub>;
-2084 0034 0000;<sub>;
-2085 0035 0000;<sub>;
-2086 0036 0000;<sub>;
-2087 0037 0000;<sub>;
-2088 0038 0000;<sub>;
-2089 0039 0000;<sub>;
-208A 002B 0000;<sub>;
-208B 2212 0000;<sub>;
-208C 003D 0000;<sub>;
-208D 0028 0000;<sub>;
-208E 0029 0000;<sub>;
-20A8 0052 0073;<compat>;
-2100 0061 002F;<compat>;
-2101 0061 002F;<compat>;
-2102 0043 0000;<font>;
-2103 00B0 0043;<compat>;
-2105 0063 002F;<compat>;
-2106 0063 002F;<compat>;
-2107 0190 0000;<compat>;
-2109 00B0 0046;<compat>;
-210A 0067 0000;<font>;
-210B 0048 0000;<font>;
-210C 0048 0000;<font>;
-210D 0048 0000;<font>;
-210E 0068 0000;<font>;
-210F 0127 0000;<font>;
-2110 0049 0000;<font>;
-2111 0049 0000;<font>;
-2112 004C 0000;<font>;
-2113 006C 0000;<font>;
-2115 004E 0000;<font>;
-2116 004E 006F;<compat>;
-2119 0050 0000;<font>;
-211A 0051 0000;<font>;
-211B 0052 0000;<font>;
-211C 0052 0000;<font>;
-211D 0052 0000;<font>;
-2120 0053 004D;<super>;
-2121 0054 0045;<compat>;
-2122 0054 004D;<super>;
-2124 005A 0000;<font>;
-2126 03A9 0000;
-2128 005A 0000;<font>;
-212A 004B 0000;
-212B 00C5 0000;
-212C 0042 0000;<font>;
-212D 0043 0000;<font>;
-212F 0065 0000;<font>;
-2130 0045 0000;<font>;
-2131 0046 0000;<font>;
-2133 004D 0000;<font>;
-2134 006F 0000;<font>;
-2135 05D0 0000;<compat>;
-2136 05D1 0000;<compat>;
-2137 05D2 0000;<compat>;
-2138 05D3 0000;<compat>;
-2139 0069 0000;<font>;
-2153 0031 2044;<fraction>;
-2154 0032 2044;<fraction>;
-2155 0031 2044;<fraction>;
-2156 0032 2044;<fraction>;
-2157 0033 2044;<fraction>;
-2158 0034 2044;<fraction>;
-2159 0031 2044;<fraction>;
-215A 0035 2044;<fraction>;
-215B 0031 2044;<fraction>;
-215C 0033 2044;<fraction>;
-215D 0035 2044;<fraction>;
-215E 0037 2044;<fraction>;
-215F 0031 2044;<fraction>;
-2160 0049 0000;<compat>;
-2161 0049 0049;<compat>;
-2162 0049 0049;<compat>;
-2163 0049 0056;<compat>;
-2164 0056 0000;<compat>;
-2165 0056 0049;<compat>;
-2166 0056 0049;<compat>;
-2167 0056 0049;<compat>;
-2168 0049 0058;<compat>;
-2169 0058 0000;<compat>;
-216A 0058 0049;<compat>;
-216B 0058 0049;<compat>;
-216C 004C 0000;<compat>;
-216D 0043 0000;<compat>;
-216E 0044 0000;<compat>;
-216F 004D 0000;<compat>;
-2170 0069 0000;<compat>;
-2171 0069 0069;<compat>;
-2172 0069 0069;<compat>;
-2173 0069 0076;<compat>;
-2174 0076 0000;<compat>;
-2175 0076 0069;<compat>;
-2176 0076 0069;<compat>;
-2177 0076 0069;<compat>;
-2178 0069 0078;<compat>;
-2179 0078 0000;<compat>;
-217A 0078 0069;<compat>;
-217B 0078 0069;<compat>;
-217C 006C 0000;<compat>;
-217D 0063 0000;<compat>;
-217E 0064 0000;<compat>;
-217F 006D 0000;<compat>;
-219A 2190 0338;
-219B 2192 0338;
-21AE 2194 0338;
-21CD 21D0 0338;
-21CE 21D4 0338;
-21CF 21D2 0338;
-2204 2203 0338;
-2209 2208 0338;
-220C 220B 0338;
-2224 2223 0338;
-2226 2225 0338;
-222C 222B 222B;<compat>;
-222D 222B 222B;<compat>;
-222F 222E 222E;<compat>;
-2230 222E 222E;<compat>;
-2241 223C 0338;
-2244 2243 0338;
-2247 2245 0338;
-2249 2248 0338;
-2260 003D 0338;
-2262 2261 0338;
-226D 224D 0338;
-226E 003C 0338;
-226F 003E 0338;
-2270 2264 0338;
-2271 2265 0338;
-2274 2272 0338;
-2275 2273 0338;
-2278 2276 0338;
-2279 2277 0338;
-2280 227A 0338;
-2281 227B 0338;
-2284 2282 0338;
-2285 2283 0338;
-2288 2286 0338;
-2289 2287 0338;
-22AC 22A2 0338;
-22AD 22A8 0338;
-22AE 22A9 0338;
-22AF 22AB 0338;
-22E0 227C 0338;
-22E1 227D 0338;
-22E2 2291 0338;
-22E3 2292 0338;
-22EA 22B2 0338;
-22EB 22B3 0338;
-22EC 22B4 0338;
-22ED 22B5 0338;
-2329 3008 0000;
-232A 3009 0000;
-2460 0031 0000;<circle>;
-2461 0032 0000;<circle>;
-2462 0033 0000;<circle>;
-2463 0034 0000;<circle>;
-2464 0035 0000;<circle>;
-2465 0036 0000;<circle>;
-2466 0037 0000;<circle>;
-2467 0038 0000;<circle>;
-2468 0039 0000;<circle>;
-2469 0031 0030;<circle>;
-246A 0031 0031;<circle>;
-246B 0031 0032;<circle>;
-246C 0031 0033;<circle>;
-246D 0031 0034;<circle>;
-246E 0031 0035;<circle>;
-246F 0031 0036;<circle>;
-2470 0031 0037;<circle>;
-2471 0031 0038;<circle>;
-2472 0031 0039;<circle>;
-2473 0032 0030;<circle>;
-2474 0028 0031;<compat>;
-2475 0028 0032;<compat>;
-2476 0028 0033;<compat>;
-2477 0028 0034;<compat>;
-2478 0028 0035;<compat>;
-2479 0028 0036;<compat>;
-247A 0028 0037;<compat>;
-247B 0028 0038;<compat>;
-247C 0028 0039;<compat>;
-247D 0028 0031;<compat>;
-247E 0028 0031;<compat>;
-247F 0028 0031;<compat>;
-2480 0028 0031;<compat>;
-2481 0028 0031;<compat>;
-2482 0028 0031;<compat>;
-2483 0028 0031;<compat>;
-2484 0028 0031;<compat>;
-2485 0028 0031;<compat>;
-2486 0028 0031;<compat>;
-2487 0028 0032;<compat>;
-2488 0031 002E;<compat>;
-2489 0032 002E;<compat>;
-248A 0033 002E;<compat>;
-248B 0034 002E;<compat>;
-248C 0035 002E;<compat>;
-248D 0036 002E;<compat>;
-248E 0037 002E;<compat>;
-248F 0038 002E;<compat>;
-2490 0039 002E;<compat>;
-2491 0031 0030;<compat>;
-2492 0031 0031;<compat>;
-2493 0031 0032;<compat>;
-2494 0031 0033;<compat>;
-2495 0031 0034;<compat>;
-2496 0031 0035;<compat>;
-2497 0031 0036;<compat>;
-2498 0031 0037;<compat>;
-2499 0031 0038;<compat>;
-249A 0031 0039;<compat>;
-249B 0032 0030;<compat>;
-249C 0028 0061;<compat>;
-249D 0028 0062;<compat>;
-249E 0028 0063;<compat>;
-249F 0028 0064;<compat>;
-24A0 0028 0065;<compat>;
-24A1 0028 0066;<compat>;
-24A2 0028 0067;<compat>;
-24A3 0028 0068;<compat>;
-24A4 0028 0069;<compat>;
-24A5 0028 006A;<compat>;
-24A6 0028 006B;<compat>;
-24A7 0028 006C;<compat>;
-24A8 0028 006D;<compat>;
-24A9 0028 006E;<compat>;
-24AA 0028 006F;<compat>;
-24AB 0028 0070;<compat>;
-24AC 0028 0071;<compat>;
-24AD 0028 0072;<compat>;
-24AE 0028 0073;<compat>;
-24AF 0028 0074;<compat>;
-24B0 0028 0075;<compat>;
-24B1 0028 0076;<compat>;
-24B2 0028 0077;<compat>;
-24B3 0028 0078;<compat>;
-24B4 0028 0079;<compat>;
-24B5 0028 007A;<compat>;
-24B6 0041 0000;<circle>;
-24B7 0042 0000;<circle>;
-24B8 0043 0000;<circle>;
-24B9 0044 0000;<circle>;
-24BA 0045 0000;<circle>;
-24BB 0046 0000;<circle>;
-24BC 0047 0000;<circle>;
-24BD 0048 0000;<circle>;
-24BE 0049 0000;<circle>;
-24BF 004A 0000;<circle>;
-24C0 004B 0000;<circle>;
-24C1 004C 0000;<circle>;
-24C2 004D 0000;<circle>;
-24C3 004E 0000;<circle>;
-24C4 004F 0000;<circle>;
-24C5 0050 0000;<circle>;
-24C6 0051 0000;<circle>;
-24C7 0052 0000;<circle>;
-24C8 0053 0000;<circle>;
-24C9 0054 0000;<circle>;
-24CA 0055 0000;<circle>;
-24CB 0056 0000;<circle>;
-24CC 0057 0000;<circle>;
-24CD 0058 0000;<circle>;
-24CE 0059 0000;<circle>;
-24CF 005A 0000;<circle>;
-24D0 0061 0000;<circle>;
-24D1 0062 0000;<circle>;
-24D2 0063 0000;<circle>;
-24D3 0064 0000;<circle>;
-24D4 0065 0000;<circle>;
-24D5 0066 0000;<circle>;
-24D6 0067 0000;<circle>;
-24D7 0068 0000;<circle>;
-24D8 0069 0000;<circle>;
-24D9 006A 0000;<circle>;
-24DA 006B 0000;<circle>;
-24DB 006C 0000;<circle>;
-24DC 006D 0000;<circle>;
-24DD 006E 0000;<circle>;
-24DE 006F 0000;<circle>;
-24DF 0070 0000;<circle>;
-24E0 0071 0000;<circle>;
-24E1 0072 0000;<circle>;
-24E2 0073 0000;<circle>;
-24E3 0074 0000;<circle>;
-24E4 0075 0000;<circle>;
-24E5 0076 0000;<circle>;
-24E6 0077 0000;<circle>;
-24E7 0078 0000;<circle>;
-24E8 0079 0000;<circle>;
-24E9 007A 0000;<circle>;
-24EA 0030 0000;<circle>;
-2E9F 6BCD 0000;<compat>;
-2EF3 9F9F 0000;<compat>;
-2F00 4E00 0000;<compat>;
-2F01 4E28 0000;<compat>;
-2F02 4E36 0000;<compat>;
-2F03 4E3F 0000;<compat>;
-2F04 4E59 0000;<compat>;
-2F05 4E85 0000;<compat>;
-2F06 4E8C 0000;<compat>;
-2F07 4EA0 0000;<compat>;
-2F08 4EBA 0000;<compat>;
-2F09 513F 0000;<compat>;
-2F0A 5165 0000;<compat>;
-2F0B 516B 0000;<compat>;
-2F0C 5182 0000;<compat>;
-2F0D 5196 0000;<compat>;
-2F0E 51AB 0000;<compat>;
-2F0F 51E0 0000;<compat>;
-2F10 51F5 0000;<compat>;
-2F11 5200 0000;<compat>;
-2F12 529B 0000;<compat>;
-2F13 52F9 0000;<compat>;
-2F14 5315 0000;<compat>;
-2F15 531A 0000;<compat>;
-2F16 5338 0000;<compat>;
-2F17 5341 0000;<compat>;
-2F18 535C 0000;<compat>;
-2F19 5369 0000;<compat>;
-2F1A 5382 0000;<compat>;
-2F1B 53B6 0000;<compat>;
-2F1C 53C8 0000;<compat>;
-2F1D 53E3 0000;<compat>;
-2F1E 56D7 0000;<compat>;
-2F1F 571F 0000;<compat>;
-2F20 58EB 0000;<compat>;
-2F21 5902 0000;<compat>;
-2F22 590A 0000;<compat>;
-2F23 5915 0000;<compat>;
-2F24 5927 0000;<compat>;
-2F25 5973 0000;<compat>;
-2F26 5B50 0000;<compat>;
-2F27 5B80 0000;<compat>;
-2F28 5BF8 0000;<compat>;
-2F29 5C0F 0000;<compat>;
-2F2A 5C22 0000;<compat>;
-2F2B 5C38 0000;<compat>;
-2F2C 5C6E 0000;<compat>;
-2F2D 5C71 0000;<compat>;
-2F2E 5DDB 0000;<compat>;
-2F2F 5DE5 0000;<compat>;
-2F30 5DF1 0000;<compat>;
-2F31 5DFE 0000;<compat>;
-2F32 5E72 0000;<compat>;
-2F33 5E7A 0000;<compat>;
-2F34 5E7F 0000;<compat>;
-2F35 5EF4 0000;<compat>;
-2F36 5EFE 0000;<compat>;
-2F37 5F0B 0000;<compat>;
-2F38 5F13 0000;<compat>;
-2F39 5F50 0000;<compat>;
-2F3A 5F61 0000;<compat>;
-2F3B 5F73 0000;<compat>;
-2F3C 5FC3 0000;<compat>;
-2F3D 6208 0000;<compat>;
-2F3E 6236 0000;<compat>;
-2F3F 624B 0000;<compat>;
-2F40 652F 0000;<compat>;
-2F41 6534 0000;<compat>;
-2F42 6587 0000;<compat>;
-2F43 6597 0000;<compat>;
-2F44 65A4 0000;<compat>;
-2F45 65B9 0000;<compat>;
-2F46 65E0 0000;<compat>;
-2F47 65E5 0000;<compat>;
-2F48 66F0 0000;<compat>;
-2F49 6708 0000;<compat>;
-2F4A 6728 0000;<compat>;
-2F4B 6B20 0000;<compat>;
-2F4C 6B62 0000;<compat>;
-2F4D 6B79 0000;<compat>;
-2F4E 6BB3 0000;<compat>;
-2F4F 6BCB 0000;<compat>;
-2F50 6BD4 0000;<compat>;
-2F51 6BDB 0000;<compat>;
-2F52 6C0F 0000;<compat>;
-2F53 6C14 0000;<compat>;
-2F54 6C34 0000;<compat>;
-2F55 706B 0000;<compat>;
-2F56 722A 0000;<compat>;
-2F57 7236 0000;<compat>;
-2F58 723B 0000;<compat>;
-2F59 723F 0000;<compat>;
-2F5A 7247 0000;<compat>;
-2F5B 7259 0000;<compat>;
-2F5C 725B 0000;<compat>;
-2F5D 72AC 0000;<compat>;
-2F5E 7384 0000;<compat>;
-2F5F 7389 0000;<compat>;
-2F60 74DC 0000;<compat>;
-2F61 74E6 0000;<compat>;
-2F62 7518 0000;<compat>;
-2F63 751F 0000;<compat>;
-2F64 7528 0000;<compat>;
-2F65 7530 0000;<compat>;
-2F66 758B 0000;<compat>;
-2F67 7592 0000;<compat>;
-2F68 7676 0000;<compat>;
-2F69 767D 0000;<compat>;
-2F6A 76AE 0000;<compat>;
-2F6B 76BF 0000;<compat>;
-2F6C 76EE 0000;<compat>;
-2F6D 77DB 0000;<compat>;
-2F6E 77E2 0000;<compat>;
-2F6F 77F3 0000;<compat>;
-2F70 793A 0000;<compat>;
-2F71 79B8 0000;<compat>;
-2F72 79BE 0000;<compat>;
-2F73 7A74 0000;<compat>;
-2F74 7ACB 0000;<compat>;
-2F75 7AF9 0000;<compat>;
-2F76 7C73 0000;<compat>;
-2F77 7CF8 0000;<compat>;
-2F78 7F36 0000;<compat>;
-2F79 7F51 0000;<compat>;
-2F7A 7F8A 0000;<compat>;
-2F7B 7FBD 0000;<compat>;
-2F7C 8001 0000;<compat>;
-2F7D 800C 0000;<compat>;
-2F7E 8012 0000;<compat>;
-2F7F 8033 0000;<compat>;
-2F80 807F 0000;<compat>;
-2F81 8089 0000;<compat>;
-2F82 81E3 0000;<compat>;
-2F83 81EA 0000;<compat>;
-2F84 81F3 0000;<compat>;
-2F85 81FC 0000;<compat>;
-2F86 820C 0000;<compat>;
-2F87 821B 0000;<compat>;
-2F88 821F 0000;<compat>;
-2F89 826E 0000;<compat>;
-2F8A 8272 0000;<compat>;
-2F8B 8278 0000;<compat>;
-2F8C 864D 0000;<compat>;
-2F8D 866B 0000;<compat>;
-2F8E 8840 0000;<compat>;
-2F8F 884C 0000;<compat>;
-2F90 8863 0000;<compat>;
-2F91 897E 0000;<compat>;
-2F92 898B 0000;<compat>;
-2F93 89D2 0000;<compat>;
-2F94 8A00 0000;<compat>;
-2F95 8C37 0000;<compat>;
-2F96 8C46 0000;<compat>;
-2F97 8C55 0000;<compat>;
-2F98 8C78 0000;<compat>;
-2F99 8C9D 0000;<compat>;
-2F9A 8D64 0000;<compat>;
-2F9B 8D70 0000;<compat>;
-2F9C 8DB3 0000;<compat>;
-2F9D 8EAB 0000;<compat>;
-2F9E 8ECA 0000;<compat>;
-2F9F 8F9B 0000;<compat>;
-2FA0 8FB0 0000;<compat>;
-2FA1 8FB5 0000;<compat>;
-2FA2 9091 0000;<compat>;
-2FA3 9149 0000;<compat>;
-2FA4 91C6 0000;<compat>;
-2FA5 91CC 0000;<compat>;
-2FA6 91D1 0000;<compat>;
-2FA7 9577 0000;<compat>;
-2FA8 9580 0000;<compat>;
-2FA9 961C 0000;<compat>;
-2FAA 96B6 0000;<compat>;
-2FAB 96B9 0000;<compat>;
-2FAC 96E8 0000;<compat>;
-2FAD 9751 0000;<compat>;
-2FAE 975E 0000;<compat>;
-2FAF 9762 0000;<compat>;
-2FB0 9769 0000;<compat>;
-2FB1 97CB 0000;<compat>;
-2FB2 97ED 0000;<compat>;
-2FB3 97F3 0000;<compat>;
-2FB4 9801 0000;<compat>;
-2FB5 98A8 0000;<compat>;
-2FB6 98DB 0000;<compat>;
-2FB7 98DF 0000;<compat>;
-2FB8 9996 0000;<compat>;
-2FB9 9999 0000;<compat>;
-2FBA 99AC 0000;<compat>;
-2FBB 9AA8 0000;<compat>;
-2FBC 9AD8 0000;<compat>;
-2FBD 9ADF 0000;<compat>;
-2FBE 9B25 0000;<compat>;
-2FBF 9B2F 0000;<compat>;
-2FC0 9B32 0000;<compat>;
-2FC1 9B3C 0000;<compat>;
-2FC2 9B5A 0000;<compat>;
-2FC3 9CE5 0000;<compat>;
-2FC4 9E75 0000;<compat>;
-2FC5 9E7F 0000;<compat>;
-2FC6 9EA5 0000;<compat>;
-2FC7 9EBB 0000;<compat>;
-2FC8 9EC3 0000;<compat>;
-2FC9 9ECD 0000;<compat>;
-2FCA 9ED1 0000;<compat>;
-2FCB 9EF9 0000;<compat>;
-2FCC 9EFD 0000;<compat>;
-2FCD 9F0E 0000;<compat>;
-2FCE 9F13 0000;<compat>;
-2FCF 9F20 0000;<compat>;
-2FD0 9F3B 0000;<compat>;
-2FD1 9F4A 0000;<compat>;
-2FD2 9F52 0000;<compat>;
-2FD3 9F8D 0000;<compat>;
-2FD4 9F9C 0000;<compat>;
-2FD5 9FA0 0000;<compat>;
-3000 0020 0000;<wide>;
-3036 3012 0000;<compat>;
-3038 5341 0000;<compat>;
-3039 5344 0000;<compat>;
-303A 5345 0000;<compat>;
-304C 304B 3099;
-304E 304D 3099;
-3050 304F 3099;
-3052 3051 3099;
-3054 3053 3099;
-3056 3055 3099;
-3058 3057 3099;
-305A 3059 3099;
-305C 305B 3099;
-305E 305D 3099;
-3060 305F 3099;
-3062 3061 3099;
-3065 3064 3099;
-3067 3066 3099;
-3069 3068 3099;
-3070 306F 3099;
-3071 306F 309A;
-3073 3072 3099;
-3074 3072 309A;
-3076 3075 3099;
-3077 3075 309A;
-3079 3078 3099;
-307A 3078 309A;
-307C 307B 3099;
-307D 307B 309A;
-3094 3046 3099;
-309B 0020 3099;<compat>;
-309C 0020 309A;<compat>;
-309E 309D 3099;
-30AC 30AB 3099;
-30AE 30AD 3099;
-30B0 30AF 3099;
-30B2 30B1 3099;
-30B4 30B3 3099;
-30B6 30B5 3099;
-30B8 30B7 3099;
-30BA 30B9 3099;
-30BC 30BB 3099;
-30BE 30BD 3099;
-30C0 30BF 3099;
-30C2 30C1 3099;
-30C5 30C4 3099;
-30C7 30C6 3099;
-30C9 30C8 3099;
-30D0 30CF 3099;
-30D1 30CF 309A;
-30D3 30D2 3099;
-30D4 30D2 309A;
-30D6 30D5 3099;
-30D7 30D5 309A;
-30D9 30D8 3099;
-30DA 30D8 309A;
-30DC 30DB 3099;
-30DD 30DB 309A;
-30F4 30A6 3099;
-30F7 30EF 3099;
-30F8 30F0 3099;
-30F9 30F1 3099;
-30FA 30F2 3099;
-30FE 30FD 3099;
-3131 1100 0000;<compat>;
-3132 1101 0000;<compat>;
-3133 11AA 0000;<compat>;
-3134 1102 0000;<compat>;
-3135 11AC 0000;<compat>;
-3136 11AD 0000;<compat>;
-3137 1103 0000;<compat>;
-3138 1104 0000;<compat>;
-3139 1105 0000;<compat>;
-313A 11B0 0000;<compat>;
-313B 11B1 0000;<compat>;
-313C 11B2 0000;<compat>;
-313D 11B3 0000;<compat>;
-313E 11B4 0000;<compat>;
-313F 11B5 0000;<compat>;
-3140 111A 0000;<compat>;
-3141 1106 0000;<compat>;
-3142 1107 0000;<compat>;
-3143 1108 0000;<compat>;
-3144 1121 0000;<compat>;
-3145 1109 0000;<compat>;
-3146 110A 0000;<compat>;
-3147 110B 0000;<compat>;
-3148 110C 0000;<compat>;
-3149 110D 0000;<compat>;
-314A 110E 0000;<compat>;
-314B 110F 0000;<compat>;
-314C 1110 0000;<compat>;
-314D 1111 0000;<compat>;
-314E 1112 0000;<compat>;
-314F 1161 0000;<compat>;
-3150 1162 0000;<compat>;
-3151 1163 0000;<compat>;
-3152 1164 0000;<compat>;
-3153 1165 0000;<compat>;
-3154 1166 0000;<compat>;
-3155 1167 0000;<compat>;
-3156 1168 0000;<compat>;
-3157 1169 0000;<compat>;
-3158 116A 0000;<compat>;
-3159 116B 0000;<compat>;
-315A 116C 0000;<compat>;
-315B 116D 0000;<compat>;
-315C 116E 0000;<compat>;
-315D 116F 0000;<compat>;
-315E 1170 0000;<compat>;
-315F 1171 0000;<compat>;
-3160 1172 0000;<compat>;
-3161 1173 0000;<compat>;
-3162 1174 0000;<compat>;
-3163 1175 0000;<compat>;
-3164 1160 0000;<compat>;
-3165 1114 0000;<compat>;
-3166 1115 0000;<compat>;
-3167 11C7 0000;<compat>;
-3168 11C8 0000;<compat>;
-3169 11CC 0000;<compat>;
-316A 11CE 0000;<compat>;
-316B 11D3 0000;<compat>;
-316C 11D7 0000;<compat>;
-316D 11D9 0000;<compat>;
-316E 111C 0000;<compat>;
-316F 11DD 0000;<compat>;
-3170 11DF 0000;<compat>;
-3171 111D 0000;<compat>;
-3172 111E 0000;<compat>;
-3173 1120 0000;<compat>;
-3174 1122 0000;<compat>;
-3175 1123 0000;<compat>;
-3176 1127 0000;<compat>;
-3177 1129 0000;<compat>;
-3178 112B 0000;<compat>;
-3179 112C 0000;<compat>;
-317A 112D 0000;<compat>;
-317B 112E 0000;<compat>;
-317C 112F 0000;<compat>;
-317D 1132 0000;<compat>;
-317E 1136 0000;<compat>;
-317F 1140 0000;<compat>;
-3180 1147 0000;<compat>;
-3181 114C 0000;<compat>;
-3182 11F1 0000;<compat>;
-3183 11F2 0000;<compat>;
-3184 1157 0000;<compat>;
-3185 1158 0000;<compat>;
-3186 1159 0000;<compat>;
-3187 1184 0000;<compat>;
-3188 1185 0000;<compat>;
-3189 1188 0000;<compat>;
-318A 1191 0000;<compat>;
-318B 1192 0000;<compat>;
-318C 1194 0000;<compat>;
-318D 119E 0000;<compat>;
-318E 11A1 0000;<compat>;
-3192 4E00 0000;<super>;
-3193 4E8C 0000;<super>;
-3194 4E09 0000;<super>;
-3195 56DB 0000;<super>;
-3196 4E0A 0000;<super>;
-3197 4E2D 0000;<super>;
-3198 4E0B 0000;<super>;
-3199 7532 0000;<super>;
-319A 4E59 0000;<super>;
-319B 4E19 0000;<super>;
-319C 4E01 0000;<super>;
-319D 5929 0000;<super>;
-319E 5730 0000;<super>;
-319F 4EBA 0000;<super>;
-3200 0028 1100;<compat>;
-3201 0028 1102;<compat>;
-3202 0028 1103;<compat>;
-3203 0028 1105;<compat>;
-3204 0028 1106;<compat>;
-3205 0028 1107;<compat>;
-3206 0028 1109;<compat>;
-3207 0028 110B;<compat>;
-3208 0028 110C;<compat>;
-3209 0028 110E;<compat>;
-320A 0028 110F;<compat>;
-320B 0028 1110;<compat>;
-320C 0028 1111;<compat>;
-320D 0028 1112;<compat>;
-320E 0028 1100;<compat>;
-320F 0028 1102;<compat>;
-3210 0028 1103;<compat>;
-3211 0028 1105;<compat>;
-3212 0028 1106;<compat>;
-3213 0028 1107;<compat>;
-3214 0028 1109;<compat>;
-3215 0028 110B;<compat>;
-3216 0028 110C;<compat>;
-3217 0028 110E;<compat>;
-3218 0028 110F;<compat>;
-3219 0028 1110;<compat>;
-321A 0028 1111;<compat>;
-321B 0028 1112;<compat>;
-321C 0028 110C;<compat>;
-3220 0028 4E00;<compat>;
-3221 0028 4E8C;<compat>;
-3222 0028 4E09;<compat>;
-3223 0028 56DB;<compat>;
-3224 0028 4E94;<compat>;
-3225 0028 516D;<compat>;
-3226 0028 4E03;<compat>;
-3227 0028 516B;<compat>;
-3228 0028 4E5D;<compat>;
-3229 0028 5341;<compat>;
-322A 0028 6708;<compat>;
-322B 0028 706B;<compat>;
-322C 0028 6C34;<compat>;
-322D 0028 6728;<compat>;
-322E 0028 91D1;<compat>;
-322F 0028 571F;<compat>;
-3230 0028 65E5;<compat>;
-3231 0028 682A;<compat>;
-3232 0028 6709;<compat>;
-3233 0028 793E;<compat>;
-3234 0028 540D;<compat>;
-3235 0028 7279;<compat>;
-3236 0028 8CA1;<compat>;
-3237 0028 795D;<compat>;
-3238 0028 52B4;<compat>;
-3239 0028 4EE3;<compat>;
-323A 0028 547C;<compat>;
-323B 0028 5B66;<compat>;
-323C 0028 76E3;<compat>;
-323D 0028 4F01;<compat>;
-323E 0028 8CC7;<compat>;
-323F 0028 5354;<compat>;
-3240 0028 796D;<compat>;
-3241 0028 4F11;<compat>;
-3242 0028 81EA;<compat>;
-3243 0028 81F3;<compat>;
-3260 1100 0000;<circle>;
-3261 1102 0000;<circle>;
-3262 1103 0000;<circle>;
-3263 1105 0000;<circle>;
-3264 1106 0000;<circle>;
-3265 1107 0000;<circle>;
-3266 1109 0000;<circle>;
-3267 110B 0000;<circle>;
-3268 110C 0000;<circle>;
-3269 110E 0000;<circle>;
-326A 110F 0000;<circle>;
-326B 1110 0000;<circle>;
-326C 1111 0000;<circle>;
-326D 1112 0000;<circle>;
-326E 1100 1161;<circle>;
-326F 1102 1161;<circle>;
-3270 1103 1161;<circle>;
-3271 1105 1161;<circle>;
-3272 1106 1161;<circle>;
-3273 1107 1161;<circle>;
-3274 1109 1161;<circle>;
-3275 110B 1161;<circle>;
-3276 110C 1161;<circle>;
-3277 110E 1161;<circle>;
-3278 110F 1161;<circle>;
-3279 1110 1161;<circle>;
-327A 1111 1161;<circle>;
-327B 1112 1161;<circle>;
-3280 4E00 0000;<circle>;
-3281 4E8C 0000;<circle>;
-3282 4E09 0000;<circle>;
-3283 56DB 0000;<circle>;
-3284 4E94 0000;<circle>;
-3285 516D 0000;<circle>;
-3286 4E03 0000;<circle>;
-3287 516B 0000;<circle>;
-3288 4E5D 0000;<circle>;
-3289 5341 0000;<circle>;
-328A 6708 0000;<circle>;
-328B 706B 0000;<circle>;
-328C 6C34 0000;<circle>;
-328D 6728 0000;<circle>;
-328E 91D1 0000;<circle>;
-328F 571F 0000;<circle>;
-3290 65E5 0000;<circle>;
-3291 682A 0000;<circle>;
-3292 6709 0000;<circle>;
-3293 793E 0000;<circle>;
-3294 540D 0000;<circle>;
-3295 7279 0000;<circle>;
-3296 8CA1 0000;<circle>;
-3297 795D 0000;<circle>;
-3298 52B4 0000;<circle>;
-3299 79D8 0000;<circle>;
-329A 7537 0000;<circle>;
-329B 5973 0000;<circle>;
-329C 9069 0000;<circle>;
-329D 512A 0000;<circle>;
-329E 5370 0000;<circle>;
-329F 6CE8 0000;<circle>;
-32A0 9805 0000;<circle>;
-32A1 4F11 0000;<circle>;
-32A2 5199 0000;<circle>;
-32A3 6B63 0000;<circle>;
-32A4 4E0A 0000;<circle>;
-32A5 4E2D 0000;<circle>;
-32A6 4E0B 0000;<circle>;
-32A7 5DE6 0000;<circle>;
-32A8 53F3 0000;<circle>;
-32A9 533B 0000;<circle>;
-32AA 5B97 0000;<circle>;
-32AB 5B66 0000;<circle>;
-32AC 76E3 0000;<circle>;
-32AD 4F01 0000;<circle>;
-32AE 8CC7 0000;<circle>;
-32AF 5354 0000;<circle>;
-32B0 591C 0000;<circle>;
-32C0 0031 6708;<compat>;
-32C1 0032 6708;<compat>;
-32C2 0033 6708;<compat>;
-32C3 0034 6708;<compat>;
-32C4 0035 6708;<compat>;
-32C5 0036 6708;<compat>;
-32C6 0037 6708;<compat>;
-32C7 0038 6708;<compat>;
-32C8 0039 6708;<compat>;
-32C9 0031 0030;<compat>;
-32CA 0031 0031;<compat>;
-32CB 0031 0032;<compat>;
-32D0 30A2 0000;<circle>;
-32D1 30A4 0000;<circle>;
-32D2 30A6 0000;<circle>;
-32D3 30A8 0000;<circle>;
-32D4 30AA 0000;<circle>;
-32D5 30AB 0000;<circle>;
-32D6 30AD 0000;<circle>;
-32D7 30AF 0000;<circle>;
-32D8 30B1 0000;<circle>;
-32D9 30B3 0000;<circle>;
-32DA 30B5 0000;<circle>;
-32DB 30B7 0000;<circle>;
-32DC 30B9 0000;<circle>;
-32DD 30BB 0000;<circle>;
-32DE 30BD 0000;<circle>;
-32DF 30BF 0000;<circle>;
-32E0 30C1 0000;<circle>;
-32E1 30C4 0000;<circle>;
-32E2 30C6 0000;<circle>;
-32E3 30C8 0000;<circle>;
-32E4 30CA 0000;<circle>;
-32E5 30CB 0000;<circle>;
-32E6 30CC 0000;<circle>;
-32E7 30CD 0000;<circle>;
-32E8 30CE 0000;<circle>;
-32E9 30CF 0000;<circle>;
-32EA 30D2 0000;<circle>;
-32EB 30D5 0000;<circle>;
-32EC 30D8 0000;<circle>;
-32ED 30DB 0000;<circle>;
-32EE 30DE 0000;<circle>;
-32EF 30DF 0000;<circle>;
-32F0 30E0 0000;<circle>;
-32F1 30E1 0000;<circle>;
-32F2 30E2 0000;<circle>;
-32F3 30E4 0000;<circle>;
-32F4 30E6 0000;<circle>;
-32F5 30E8 0000;<circle>;
-32F6 30E9 0000;<circle>;
-32F7 30EA 0000;<circle>;
-32F8 30EB 0000;<circle>;
-32F9 30EC 0000;<circle>;
-32FA 30ED 0000;<circle>;
-32FB 30EF 0000;<circle>;
-32FC 30F0 0000;<circle>;
-32FD 30F1 0000;<circle>;
-32FE 30F2 0000;<circle>;
-3300 30A2 30D1;<square>;
-3301 30A2 30EB;<square>;
-3302 30A2 30F3;<square>;
-3303 30A2 30FC;<square>;
-3304 30A4 30CB;<square>;
-3305 30A4 30F3;<square>;
-3306 30A6 30A9;<square>;
-3307 30A8 30B9;<square>;
-3308 30A8 30FC;<square>;
-3309 30AA 30F3;<square>;
-330A 30AA 30FC;<square>;
-330B 30AB 30A4;<square>;
-330C 30AB 30E9;<square>;
-330D 30AB 30ED;<square>;
-330E 30AC 30ED;<square>;
-330F 30AC 30F3;<square>;
-3310 30AE 30AC;<square>;
-3311 30AE 30CB;<square>;
-3312 30AD 30E5;<square>;
-3313 30AE 30EB;<square>;
-3314 30AD 30ED;<square>;
-3315 30AD 30ED;<square>;
-3316 30AD 30ED;<square>;
-3317 30AD 30ED;<square>;
-3318 30B0 30E9;<square>;
-3319 30B0 30E9;<square>;
-331A 30AF 30EB;<square>;
-331B 30AF 30ED;<square>;
-331C 30B1 30FC;<square>;
-331D 30B3 30EB;<square>;
-331E 30B3 30FC;<square>;
-331F 30B5 30A4;<square>;
-3320 30B5 30F3;<square>;
-3321 30B7 30EA;<square>;
-3322 30BB 30F3;<square>;
-3323 30BB 30F3;<square>;
-3324 30C0 30FC;<square>;
-3325 30C7 30B7;<square>;
-3326 30C9 30EB;<square>;
-3327 30C8 30F3;<square>;
-3328 30CA 30CE;<square>;
-3329 30CE 30C3;<square>;
-332A 30CF 30A4;<square>;
-332B 30D1 30FC;<square>;
-332C 30D1 30FC;<square>;
-332D 30D0 30FC;<square>;
-332E 30D4 30A2;<square>;
-332F 30D4 30AF;<square>;
-3330 30D4 30B3;<square>;
-3331 30D3 30EB;<square>;
-3332 30D5 30A1;<square>;
-3333 30D5 30A3;<square>;
-3334 30D6 30C3;<square>;
-3335 30D5 30E9;<square>;
-3336 30D8 30AF;<square>;
-3337 30DA 30BD;<square>;
-3338 30DA 30CB;<square>;
-3339 30D8 30EB;<square>;
-333A 30DA 30F3;<square>;
-333B 30DA 30FC;<square>;
-333C 30D9 30FC;<square>;
-333D 30DD 30A4;<square>;
-333E 30DC 30EB;<square>;
-333F 30DB 30F3;<square>;
-3340 30DD 30F3;<square>;
-3341 30DB 30FC;<square>;
-3342 30DB 30FC;<square>;
-3343 30DE 30A4;<square>;
-3344 30DE 30A4;<square>;
-3345 30DE 30C3;<square>;
-3346 30DE 30EB;<square>;
-3347 30DE 30F3;<square>;
-3348 30DF 30AF;<square>;
-3349 30DF 30EA;<square>;
-334A 30DF 30EA;<square>;
-334B 30E1 30AC;<square>;
-334C 30E1 30AC;<square>;
-334D 30E1 30FC;<square>;
-334E 30E4 30FC;<square>;
-334F 30E4 30FC;<square>;
-3350 30E6 30A2;<square>;
-3351 30EA 30C3;<square>;
-3352 30EA 30E9;<square>;
-3353 30EB 30D4;<square>;
-3354 30EB 30FC;<square>;
-3355 30EC 30E0;<square>;
-3356 30EC 30F3;<square>;
-3357 30EF 30C3;<square>;
-3358 0030 70B9;<compat>;
-3359 0031 70B9;<compat>;
-335A 0032 70B9;<compat>;
-335B 0033 70B9;<compat>;
-335C 0034 70B9;<compat>;
-335D 0035 70B9;<compat>;
-335E 0036 70B9;<compat>;
-335F 0037 70B9;<compat>;
-3360 0038 70B9;<compat>;
-3361 0039 70B9;<compat>;
-3362 0031 0030;<compat>;
-3363 0031 0031;<compat>;
-3364 0031 0032;<compat>;
-3365 0031 0033;<compat>;
-3366 0031 0034;<compat>;
-3367 0031 0035;<compat>;
-3368 0031 0036;<compat>;
-3369 0031 0037;<compat>;
-336A 0031 0038;<compat>;
-336B 0031 0039;<compat>;
-336C 0032 0030;<compat>;
-336D 0032 0031;<compat>;
-336E 0032 0032;<compat>;
-336F 0032 0033;<compat>;
-3370 0032 0034;<compat>;
-3371 0068 0050;<square>;
-3372 0064 0061;<square>;
-3373 0041 0055;<square>;
-3374 0062 0061;<square>;
-3375 006F 0056;<square>;
-3376 0070 0063;<square>;
-337B 5E73 6210;<square>;
-337C 662D 548C;<square>;
-337D 5927 6B63;<square>;
-337E 660E 6CBB;<square>;
-337F 682A 5F0F;<square>;
-3380 0070 0041;<square>;
-3381 006E 0041;<square>;
-3382 03BC 0041;<square>;
-3383 006D 0041;<square>;
-3384 006B 0041;<square>;
-3385 004B 0042;<square>;
-3386 004D 0042;<square>;
-3387 0047 0042;<square>;
-3388 0063 0061;<square>;
-3389 006B 0063;<square>;
-338A 0070 0046;<square>;
-338B 006E 0046;<square>;
-338C 03BC 0046;<square>;
-338D 03BC 0067;<square>;
-338E 006D 0067;<square>;
-338F 006B 0067;<square>;
-3390 0048 007A;<square>;
-3391 006B 0048;<square>;
-3392 004D 0048;<square>;
-3393 0047 0048;<square>;
-3394 0054 0048;<square>;
-3395 03BC 2113;<square>;
-3396 006D 2113;<square>;
-3397 0064 2113;<square>;
-3398 006B 2113;<square>;
-3399 0066 006D;<square>;
-339A 006E 006D;<square>;
-339B 03BC 006D;<square>;
-339C 006D 006D;<square>;
-339D 0063 006D;<square>;
-339E 006B 006D;<square>;
-339F 006D 006D;<square>;
-33A0 0063 006D;<square>;
-33A1 006D 00B2;<square>;
-33A2 006B 006D;<square>;
-33A3 006D 006D;<square>;
-33A4 0063 006D;<square>;
-33A5 006D 00B3;<square>;
-33A6 006B 006D;<square>;
-33A7 006D 2215;<square>;
-33A8 006D 2215;<square>;
-33A9 0050 0061;<square>;
-33AA 006B 0050;<square>;
-33AB 004D 0050;<square>;
-33AC 0047 0050;<square>;
-33AD 0072 0061;<square>;
-33AE 0072 0061;<square>;
-33AF 0072 0061;<square>;
-33B0 0070 0073;<square>;
-33B1 006E 0073;<square>;
-33B2 03BC 0073;<square>;
-33B3 006D 0073;<square>;
-33B4 0070 0056;<square>;
-33B5 006E 0056;<square>;
-33B6 03BC 0056;<square>;
-33B7 006D 0056;<square>;
-33B8 006B 0056;<square>;
-33B9 004D 0056;<square>;
-33BA 0070 0057;<square>;
-33BB 006E 0057;<square>;
-33BC 03BC 0057;<square>;
-33BD 006D 0057;<square>;
-33BE 006B 0057;<square>;
-33BF 004D 0057;<square>;
-33C0 006B 03A9;<square>;
-33C1 004D 03A9;<square>;
-33C2 0061 002E;<square>;
-33C3 0042 0071;<square>;
-33C4 0063 0063;<square>;
-33C5 0063 0064;<square>;
-33C6 0043 2215;<square>;
-33C7 0043 006F;<square>;
-33C8 0064 0042;<square>;
-33C9 0047 0079;<square>;
-33CA 0068 0061;<square>;
-33CB 0048 0050;<square>;
-33CC 0069 006E;<square>;
-33CD 004B 004B;<square>;
-33CE 004B 004D;<square>;
-33CF 006B 0074;<square>;
-33D0 006C 006D;<square>;
-33D1 006C 006E;<square>;
-33D2 006C 006F;<square>;
-33D3 006C 0078;<square>;
-33D4 006D 0062;<square>;
-33D5 006D 0069;<square>;
-33D6 006D 006F;<square>;
-33D7 0050 0048;<square>;
-33D8 0070 002E;<square>;
-33D9 0050 0050;<square>;
-33DA 0050 0052;<square>;
-33DB 0073 0072;<square>;
-33DC 0053 0076;<square>;
-33DD 0057 0062;<square>;
-33E0 0031 65E5;<compat>;
-33E1 0032 65E5;<compat>;
-33E2 0033 65E5;<compat>;
-33E3 0034 65E5;<compat>;
-33E4 0035 65E5;<compat>;
-33E5 0036 65E5;<compat>;
-33E6 0037 65E5;<compat>;
-33E7 0038 65E5;<compat>;
-33E8 0039 65E5;<compat>;
-33E9 0031 0030;<compat>;
-33EA 0031 0031;<compat>;
-33EB 0031 0032;<compat>;
-33EC 0031 0033;<compat>;
-33ED 0031 0034;<compat>;
-33EE 0031 0035;<compat>;
-33EF 0031 0036;<compat>;
-33F0 0031 0037;<compat>;
-33F1 0031 0038;<compat>;
-33F2 0031 0039;<compat>;
-33F3 0032 0030;<compat>;
-33F4 0032 0031;<compat>;
-33F5 0032 0032;<compat>;
-33F6 0032 0033;<compat>;
-33F7 0032 0034;<compat>;
-33F8 0032 0035;<compat>;
-33F9 0032 0036;<compat>;
-33FA 0032 0037;<compat>;
-33FB 0032 0038;<compat>;
-33FC 0032 0039;<compat>;
-33FD 0033 0030;<compat>;
-33FE 0033 0031;<compat>;
-F900 8C48 0000;
-F901 66F4 0000;
-F902 8ECA 0000;
-F903 8CC8 0000;
-F904 6ED1 0000;
-F905 4E32 0000;
-F906 53E5 0000;
-F907 9F9C 0000;
-F908 9F9C 0000;
-F909 5951 0000;
-F90A 91D1 0000;
-F90B 5587 0000;
-F90C 5948 0000;
-F90D 61F6 0000;
-F90E 7669 0000;
-F90F 7F85 0000;
-F910 863F 0000;
-F911 87BA 0000;
-F912 88F8 0000;
-F913 908F 0000;
-F914 6A02 0000;
-F915 6D1B 0000;
-F916 70D9 0000;
-F917 73DE 0000;
-F918 843D 0000;
-F919 916A 0000;
-F91A 99F1 0000;
-F91B 4E82 0000;
-F91C 5375 0000;
-F91D 6B04 0000;
-F91E 721B 0000;
-F91F 862D 0000;
-F920 9E1E 0000;
-F921 5D50 0000;
-F922 6FEB 0000;
-F923 85CD 0000;
-F924 8964 0000;
-F925 62C9 0000;
-F926 81D8 0000;
-F927 881F 0000;
-F928 5ECA 0000;
-F929 6717 0000;
-F92A 6D6A 0000;
-F92B 72FC 0000;
-F92C 90CE 0000;
-F92D 4F86 0000;
-F92E 51B7 0000;
-F92F 52DE 0000;
-F930 64C4 0000;
-F931 6AD3 0000;
-F932 7210 0000;
-F933 76E7 0000;
-F934 8001 0000;
-F935 8606 0000;
-F936 865C 0000;
-F937 8DEF 0000;
-F938 9732 0000;
-F939 9B6F 0000;
-F93A 9DFA 0000;
-F93B 788C 0000;
-F93C 797F 0000;
-F93D 7DA0 0000;
-F93E 83C9 0000;
-F93F 9304 0000;
-F940 9E7F 0000;
-F941 8AD6 0000;
-F942 58DF 0000;
-F943 5F04 0000;
-F944 7C60 0000;
-F945 807E 0000;
-F946 7262 0000;
-F947 78CA 0000;
-F948 8CC2 0000;
-F949 96F7 0000;
-F94A 58D8 0000;
-F94B 5C62 0000;
-F94C 6A13 0000;
-F94D 6DDA 0000;
-F94E 6F0F 0000;
-F94F 7D2F 0000;
-F950 7E37 0000;
-F951 96FB 0000;
-F952 52D2 0000;
-F953 808B 0000;
-F954 51DC 0000;
-F955 51CC 0000;
-F956 7A1C 0000;
-F957 7DBE 0000;
-F958 83F1 0000;
-F959 9675 0000;
-F95A 8B80 0000;
-F95B 62CF 0000;
-F95C 6A02 0000;
-F95D 8AFE 0000;
-F95E 4E39 0000;
-F95F 5BE7 0000;
-F960 6012 0000;
-F961 7387 0000;
-F962 7570 0000;
-F963 5317 0000;
-F964 78FB 0000;
-F965 4FBF 0000;
-F966 5FA9 0000;
-F967 4E0D 0000;
-F968 6CCC 0000;
-F969 6578 0000;
-F96A 7D22 0000;
-F96B 53C3 0000;
-F96C 585E 0000;
-F96D 7701 0000;
-F96E 8449 0000;
-F96F 8AAA 0000;
-F970 6BBA 0000;
-F971 8FB0 0000;
-F972 6C88 0000;
-F973 62FE 0000;
-F974 82E5 0000;
-F975 63A0 0000;
-F976 7565 0000;
-F977 4EAE 0000;
-F978 5169 0000;
-F979 51C9 0000;
-F97A 6881 0000;
-F97B 7CE7 0000;
-F97C 826F 0000;
-F97D 8AD2 0000;
-F97E 91CF 0000;
-F97F 52F5 0000;
-F980 5442 0000;
-F981 5973 0000;
-F982 5EEC 0000;
-F983 65C5 0000;
-F984 6FFE 0000;
-F985 792A 0000;
-F986 95AD 0000;
-F987 9A6A 0000;
-F988 9E97 0000;
-F989 9ECE 0000;
-F98A 529B 0000;
-F98B 66C6 0000;
-F98C 6B77 0000;
-F98D 8F62 0000;
-F98E 5E74 0000;
-F98F 6190 0000;
-F990 6200 0000;
-F991 649A 0000;
-F992 6F23 0000;
-F993 7149 0000;
-F994 7489 0000;
-F995 79CA 0000;
-F996 7DF4 0000;
-F997 806F 0000;
-F998 8F26 0000;
-F999 84EE 0000;
-F99A 9023 0000;
-F99B 934A 0000;
-F99C 5217 0000;
-F99D 52A3 0000;
-F99E 54BD 0000;
-F99F 70C8 0000;
-F9A0 88C2 0000;
-F9A1 8AAA 0000;
-F9A2 5EC9 0000;
-F9A3 5FF5 0000;
-F9A4 637B 0000;
-F9A5 6BAE 0000;
-F9A6 7C3E 0000;
-F9A7 7375 0000;
-F9A8 4EE4 0000;
-F9A9 56F9 0000;
-F9AA 5BE7 0000;
-F9AB 5DBA 0000;
-F9AC 601C 0000;
-F9AD 73B2 0000;
-F9AE 7469 0000;
-F9AF 7F9A 0000;
-F9B0 8046 0000;
-F9B1 9234 0000;
-F9B2 96F6 0000;
-F9B3 9748 0000;
-F9B4 9818 0000;
-F9B5 4F8B 0000;
-F9B6 79AE 0000;
-F9B7 91B4 0000;
-F9B8 96B8 0000;
-F9B9 60E1 0000;
-F9BA 4E86 0000;
-F9BB 50DA 0000;
-F9BC 5BEE 0000;
-F9BD 5C3F 0000;
-F9BE 6599 0000;
-F9BF 6A02 0000;
-F9C0 71CE 0000;
-F9C1 7642 0000;
-F9C2 84FC 0000;
-F9C3 907C 0000;
-F9C4 9F8D 0000;
-F9C5 6688 0000;
-F9C6 962E 0000;
-F9C7 5289 0000;
-F9C8 677B 0000;
-F9C9 67F3 0000;
-F9CA 6D41 0000;
-F9CB 6E9C 0000;
-F9CC 7409 0000;
-F9CD 7559 0000;
-F9CE 786B 0000;
-F9CF 7D10 0000;
-F9D0 985E 0000;
-F9D1 516D 0000;
-F9D2 622E 0000;
-F9D3 9678 0000;
-F9D4 502B 0000;
-F9D5 5D19 0000;
-F9D6 6DEA 0000;
-F9D7 8F2A 0000;
-F9D8 5F8B 0000;
-F9D9 6144 0000;
-F9DA 6817 0000;
-F9DB 7387 0000;
-F9DC 9686 0000;
-F9DD 5229 0000;
-F9DE 540F 0000;
-F9DF 5C65 0000;
-F9E0 6613 0000;
-F9E1 674E 0000;
-F9E2 68A8 0000;
-F9E3 6CE5 0000;
-F9E4 7406 0000;
-F9E5 75E2 0000;
-F9E6 7F79 0000;
-F9E7 88CF 0000;
-F9E8 88E1 0000;
-F9E9 91CC 0000;
-F9EA 96E2 0000;
-F9EB 533F 0000;
-F9EC 6EBA 0000;
-F9ED 541D 0000;
-F9EE 71D0 0000;
-F9EF 7498 0000;
-F9F0 85FA 0000;
-F9F1 96A3 0000;
-F9F2 9C57 0000;
-F9F3 9E9F 0000;
-F9F4 6797 0000;
-F9F5 6DCB 0000;
-F9F6 81E8 0000;
-F9F7 7ACB 0000;
-F9F8 7B20 0000;
-F9F9 7C92 0000;
-F9FA 72C0 0000;
-F9FB 7099 0000;
-F9FC 8B58 0000;
-F9FD 4EC0 0000;
-F9FE 8336 0000;
-F9FF 523A 0000;
-FA00 5207 0000;
-FA01 5EA6 0000;
-FA02 62D3 0000;
-FA03 7CD6 0000;
-FA04 5B85 0000;
-FA05 6D1E 0000;
-FA06 66B4 0000;
-FA07 8F3B 0000;
-FA08 884C 0000;
-FA09 964D 0000;
-FA0A 898B 0000;
-FA0B 5ED3 0000;
-FA0C 5140 0000;
-FA0D 55C0 0000;
-FA10 585A 0000;
-FA12 6674 0000;
-FA15 51DE 0000;
-FA16 732A 0000;
-FA17 76CA 0000;
-FA18 793C 0000;
-FA19 795E 0000;
-FA1A 7965 0000;
-FA1B 798F 0000;
-FA1C 9756 0000;
-FA1D 7CBE 0000;
-FA1E 7FBD 0000;
-FA20 8612 0000;
-FA22 8AF8 0000;
-FA25 9038 0000;
-FA26 90FD 0000;
-FA2A 98EF 0000;
-FA2B 98FC 0000;
-FA2C 9928 0000;
-FA2D 9DB4 0000;
-FB00 0066 0066;<compat>;
-FB01 0066 0069;<compat>;
-FB02 0066 006C;<compat>;
-FB03 0066 0066;<compat>;
-FB04 0066 0066;<compat>;
-FB05 017F 0074;<compat>;
-FB06 0073 0074;<compat>;
-FB13 0574 0576;<compat>;
-FB14 0574 0565;<compat>;
-FB15 0574 056B;<compat>;
-FB16 057E 0576;<compat>;
-FB17 0574 056D;<compat>;
-FB1D 05D9 05B4;
-FB1F 05F2 05B7;
-FB20 05E2 0000;<font>;
-FB21 05D0 0000;<font>;
-FB22 05D3 0000;<font>;
-FB23 05D4 0000;<font>;
-FB24 05DB 0000;<font>;
-FB25 05DC 0000;<font>;
-FB26 05DD 0000;<font>;
-FB27 05E8 0000;<font>;
-FB28 05EA 0000;<font>;
-FB29 002B 0000;<font>;
-FB2A 05E9 05C1;
-FB2B 05E9 05C2;
-FB2C FB49 05C1;
-FB2D FB49 05C2;
-FB2E 05D0 05B7;
-FB2F 05D0 05B8;
-FB30 05D0 05BC;
-FB31 05D1 05BC;
-FB32 05D2 05BC;
-FB33 05D3 05BC;
-FB34 05D4 05BC;
-FB35 05D5 05BC;
-FB36 05D6 05BC;
-FB38 05D8 05BC;
-FB39 05D9 05BC;
-FB3A 05DA 05BC;
-FB3B 05DB 05BC;
-FB3C 05DC 05BC;
-FB3E 05DE 05BC;
-FB40 05E0 05BC;
-FB41 05E1 05BC;
-FB43 05E3 05BC;
-FB44 05E4 05BC;
-FB46 05E6 05BC;
-FB47 05E7 05BC;
-FB48 05E8 05BC;
-FB49 05E9 05BC;
-FB4A 05EA 05BC;
-FB4B 05D5 05B9;
-FB4C 05D1 05BF;
-FB4D 05DB 05BF;
-FB4E 05E4 05BF;
-FB4F 05D0 05DC;<compat>;
-FB50 0671 0000;<isolated>;
-FB51 0671 0000;<final>;
-FB52 067B 0000;<isolated>;
-FB53 067B 0000;<final>;
-FB54 067B 0000;<initial>;
-FB55 067B 0000;<medial>;
-FB56 067E 0000;<isolated>;
-FB57 067E 0000;<final>;
-FB58 067E 0000;<initial>;
-FB59 067E 0000;<medial>;
-FB5A 0680 0000;<isolated>;
-FB5B 0680 0000;<final>;
-FB5C 0680 0000;<initial>;
-FB5D 0680 0000;<medial>;
-FB5E 067A 0000;<isolated>;
-FB5F 067A 0000;<final>;
-FB60 067A 0000;<initial>;
-FB61 067A 0000;<medial>;
-FB62 067F 0000;<isolated>;
-FB63 067F 0000;<final>;
-FB64 067F 0000;<initial>;
-FB65 067F 0000;<medial>;
-FB66 0679 0000;<isolated>;
-FB67 0679 0000;<final>;
-FB68 0679 0000;<initial>;
-FB69 0679 0000;<medial>;
-FB6A 06A4 0000;<isolated>;
-FB6B 06A4 0000;<final>;
-FB6C 06A4 0000;<initial>;
-FB6D 06A4 0000;<medial>;
-FB6E 06A6 0000;<isolated>;
-FB6F 06A6 0000;<final>;
-FB70 06A6 0000;<initial>;
-FB71 06A6 0000;<medial>;
-FB72 0684 0000;<isolated>;
-FB73 0684 0000;<final>;
-FB74 0684 0000;<initial>;
-FB75 0684 0000;<medial>;
-FB76 0683 0000;<isolated>;
-FB77 0683 0000;<final>;
-FB78 0683 0000;<initial>;
-FB79 0683 0000;<medial>;
-FB7A 0686 0000;<isolated>;
-FB7B 0686 0000;<final>;
-FB7C 0686 0000;<initial>;
-FB7D 0686 0000;<medial>;
-FB7E 0687 0000;<isolated>;
-FB7F 0687 0000;<final>;
-FB80 0687 0000;<initial>;
-FB81 0687 0000;<medial>;
-FB82 068D 0000;<isolated>;
-FB83 068D 0000;<final>;
-FB84 068C 0000;<isolated>;
-FB85 068C 0000;<final>;
-FB86 068E 0000;<isolated>;
-FB87 068E 0000;<final>;
-FB88 0688 0000;<isolated>;
-FB89 0688 0000;<final>;
-FB8A 0698 0000;<isolated>;
-FB8B 0698 0000;<final>;
-FB8C 0691 0000;<isolated>;
-FB8D 0691 0000;<final>;
-FB8E 06A9 0000;<isolated>;
-FB8F 06A9 0000;<final>;
-FB90 06A9 0000;<initial>;
-FB91 06A9 0000;<medial>;
-FB92 06AF 0000;<isolated>;
-FB93 06AF 0000;<final>;
-FB94 06AF 0000;<initial>;
-FB95 06AF 0000;<medial>;
-FB96 06B3 0000;<isolated>;
-FB97 06B3 0000;<final>;
-FB98 06B3 0000;<initial>;
-FB99 06B3 0000;<medial>;
-FB9A 06B1 0000;<isolated>;
-FB9B 06B1 0000;<final>;
-FB9C 06B1 0000;<initial>;
-FB9D 06B1 0000;<medial>;
-FB9E 06BA 0000;<isolated>;
-FB9F 06BA 0000;<final>;
-FBA0 06BB 0000;<isolated>;
-FBA1 06BB 0000;<final>;
-FBA2 06BB 0000;<initial>;
-FBA3 06BB 0000;<medial>;
-FBA4 06C0 0000;<isolated>;
-FBA5 06C0 0000;<final>;
-FBA6 06C1 0000;<isolated>;
-FBA7 06C1 0000;<final>;
-FBA8 06C1 0000;<initial>;
-FBA9 06C1 0000;<medial>;
-FBAA 06BE 0000;<isolated>;
-FBAB 06BE 0000;<final>;
-FBAC 06BE 0000;<initial>;
-FBAD 06BE 0000;<medial>;
-FBAE 06D2 0000;<isolated>;
-FBAF 06D2 0000;<final>;
-FBB0 06D3 0000;<isolated>;
-FBB1 06D3 0000;<final>;
-FBD3 06AD 0000;<isolated>;
-FBD4 06AD 0000;<final>;
-FBD5 06AD 0000;<initial>;
-FBD6 06AD 0000;<medial>;
-FBD7 06C7 0000;<isolated>;
-FBD8 06C7 0000;<final>;
-FBD9 06C6 0000;<isolated>;
-FBDA 06C6 0000;<final>;
-FBDB 06C8 0000;<isolated>;
-FBDC 06C8 0000;<final>;
-FBDD 0677 0000;<isolated>;
-FBDE 06CB 0000;<isolated>;
-FBDF 06CB 0000;<final>;
-FBE0 06C5 0000;<isolated>;
-FBE1 06C5 0000;<final>;
-FBE2 06C9 0000;<isolated>;
-FBE3 06C9 0000;<final>;
-FBE4 06D0 0000;<isolated>;
-FBE5 06D0 0000;<final>;
-FBE6 06D0 0000;<initial>;
-FBE7 06D0 0000;<medial>;
-FBE8 0649 0000;<initial>;
-FBE9 0649 0000;<medial>;
-FBEA 0626 0627;<isolated>;
-FBEB 0626 0627;<final>;
-FBEC 0626 06D5;<isolated>;
-FBED 0626 06D5;<final>;
-FBEE 0626 0648;<isolated>;
-FBEF 0626 0648;<final>;
-FBF0 0626 06C7;<isolated>;
-FBF1 0626 06C7;<final>;
-FBF2 0626 06C6;<isolated>;
-FBF3 0626 06C6;<final>;
-FBF4 0626 06C8;<isolated>;
-FBF5 0626 06C8;<final>;
-FBF6 0626 06D0;<isolated>;
-FBF7 0626 06D0;<final>;
-FBF8 0626 06D0;<initial>;
-FBF9 0626 0649;<isolated>;
-FBFA 0626 0649;<final>;
-FBFB 0626 0649;<initial>;
-FBFC 06CC 0000;<isolated>;
-FBFD 06CC 0000;<final>;
-FBFE 06CC 0000;<initial>;
-FBFF 06CC 0000;<medial>;
-FC00 0626 062C;<isolated>;
-FC01 0626 062D;<isolated>;
-FC02 0626 0645;<isolated>;
-FC03 0626 0649;<isolated>;
-FC04 0626 064A;<isolated>;
-FC05 0628 062C;<isolated>;
-FC06 0628 062D;<isolated>;
-FC07 0628 062E;<isolated>;
-FC08 0628 0645;<isolated>;
-FC09 0628 0649;<isolated>;
-FC0A 0628 064A;<isolated>;
-FC0B 062A 062C;<isolated>;
-FC0C 062A 062D;<isolated>;
-FC0D 062A 062E;<isolated>;
-FC0E 062A 0645;<isolated>;
-FC0F 062A 0649;<isolated>;
-FC10 062A 064A;<isolated>;
-FC11 062B 062C;<isolated>;
-FC12 062B 0645;<isolated>;
-FC13 062B 0649;<isolated>;
-FC14 062B 064A;<isolated>;
-FC15 062C 062D;<isolated>;
-FC16 062C 0645;<isolated>;
-FC17 062D 062C;<isolated>;
-FC18 062D 0645;<isolated>;
-FC19 062E 062C;<isolated>;
-FC1A 062E 062D;<isolated>;
-FC1B 062E 0645;<isolated>;
-FC1C 0633 062C;<isolated>;
-FC1D 0633 062D;<isolated>;
-FC1E 0633 062E;<isolated>;
-FC1F 0633 0645;<isolated>;
-FC20 0635 062D;<isolated>;
-FC21 0635 0645;<isolated>;
-FC22 0636 062C;<isolated>;
-FC23 0636 062D;<isolated>;
-FC24 0636 062E;<isolated>;
-FC25 0636 0645;<isolated>;
-FC26 0637 062D;<isolated>;
-FC27 0637 0645;<isolated>;
-FC28 0638 0645;<isolated>;
-FC29 0639 062C;<isolated>;
-FC2A 0639 0645;<isolated>;
-FC2B 063A 062C;<isolated>;
-FC2C 063A 0645;<isolated>;
-FC2D 0641 062C;<isolated>;
-FC2E 0641 062D;<isolated>;
-FC2F 0641 062E;<isolated>;
-FC30 0641 0645;<isolated>;
-FC31 0641 0649;<isolated>;
-FC32 0641 064A;<isolated>;
-FC33 0642 062D;<isolated>;
-FC34 0642 0645;<isolated>;
-FC35 0642 0649;<isolated>;
-FC36 0642 064A;<isolated>;
-FC37 0643 0627;<isolated>;
-FC38 0643 062C;<isolated>;
-FC39 0643 062D;<isolated>;
-FC3A 0643 062E;<isolated>;
-FC3B 0643 0644;<isolated>;
-FC3C 0643 0645;<isolated>;
-FC3D 0643 0649;<isolated>;
-FC3E 0643 064A;<isolated>;
-FC3F 0644 062C;<isolated>;
-FC40 0644 062D;<isolated>;
-FC41 0644 062E;<isolated>;
-FC42 0644 0645;<isolated>;
-FC43 0644 0649;<isolated>;
-FC44 0644 064A;<isolated>;
-FC45 0645 062C;<isolated>;
-FC46 0645 062D;<isolated>;
-FC47 0645 062E;<isolated>;
-FC48 0645 0645;<isolated>;
-FC49 0645 0649;<isolated>;
-FC4A 0645 064A;<isolated>;
-FC4B 0646 062C;<isolated>;
-FC4C 0646 062D;<isolated>;
-FC4D 0646 062E;<isolated>;
-FC4E 0646 0645;<isolated>;
-FC4F 0646 0649;<isolated>;
-FC50 0646 064A;<isolated>;
-FC51 0647 062C;<isolated>;
-FC52 0647 0645;<isolated>;
-FC53 0647 0649;<isolated>;
-FC54 0647 064A;<isolated>;
-FC55 064A 062C;<isolated>;
-FC56 064A 062D;<isolated>;
-FC57 064A 062E;<isolated>;
-FC58 064A 0645;<isolated>;
-FC59 064A 0649;<isolated>;
-FC5A 064A 064A;<isolated>;
-FC5B 0630 0670;<isolated>;
-FC5C 0631 0670;<isolated>;
-FC5D 0649 0670;<isolated>;
-FC5E 0020 064C;<isolated>;
-FC5F 0020 064D;<isolated>;
-FC60 0020 064E;<isolated>;
-FC61 0020 064F;<isolated>;
-FC62 0020 0650;<isolated>;
-FC63 0020 0651;<isolated>;
-FC64 0626 0631;<final>;
-FC65 0626 0632;<final>;
-FC66 0626 0645;<final>;
-FC67 0626 0646;<final>;
-FC68 0626 0649;<final>;
-FC69 0626 064A;<final>;
-FC6A 0628 0631;<final>;
-FC6B 0628 0632;<final>;
-FC6C 0628 0645;<final>;
-FC6D 0628 0646;<final>;
-FC6E 0628 0649;<final>;
-FC6F 0628 064A;<final>;
-FC70 062A 0631;<final>;
-FC71 062A 0632;<final>;
-FC72 062A 0645;<final>;
-FC73 062A 0646;<final>;
-FC74 062A 0649;<final>;
-FC75 062A 064A;<final>;
-FC76 062B 0631;<final>;
-FC77 062B 0632;<final>;
-FC78 062B 0645;<final>;
-FC79 062B 0646;<final>;
-FC7A 062B 0649;<final>;
-FC7B 062B 064A;<final>;
-FC7C 0641 0649;<final>;
-FC7D 0641 064A;<final>;
-FC7E 0642 0649;<final>;
-FC7F 0642 064A;<final>;
-FC80 0643 0627;<final>;
-FC81 0643 0644;<final>;
-FC82 0643 0645;<final>;
-FC83 0643 0649;<final>;
-FC84 0643 064A;<final>;
-FC85 0644 0645;<final>;
-FC86 0644 0649;<final>;
-FC87 0644 064A;<final>;
-FC88 0645 0627;<final>;
-FC89 0645 0645;<final>;
-FC8A 0646 0631;<final>;
-FC8B 0646 0632;<final>;
-FC8C 0646 0645;<final>;
-FC8D 0646 0646;<final>;
-FC8E 0646 0649;<final>;
-FC8F 0646 064A;<final>;
-FC90 0649 0670;<final>;
-FC91 064A 0631;<final>;
-FC92 064A 0632;<final>;
-FC93 064A 0645;<final>;
-FC94 064A 0646;<final>;
-FC95 064A 0649;<final>;
-FC96 064A 064A;<final>;
-FC97 0626 062C;<initial>;
-FC98 0626 062D;<initial>;
-FC99 0626 062E;<initial>;
-FC9A 0626 0645;<initial>;
-FC9B 0626 0647;<initial>;
-FC9C 0628 062C;<initial>;
-FC9D 0628 062D;<initial>;
-FC9E 0628 062E;<initial>;
-FC9F 0628 0645;<initial>;
-FCA0 0628 0647;<initial>;
-FCA1 062A 062C;<initial>;
-FCA2 062A 062D;<initial>;
-FCA3 062A 062E;<initial>;
-FCA4 062A 0645;<initial>;
-FCA5 062A 0647;<initial>;
-FCA6 062B 0645;<initial>;
-FCA7 062C 062D;<initial>;
-FCA8 062C 0645;<initial>;
-FCA9 062D 062C;<initial>;
-FCAA 062D 0645;<initial>;
-FCAB 062E 062C;<initial>;
-FCAC 062E 0645;<initial>;
-FCAD 0633 062C;<initial>;
-FCAE 0633 062D;<initial>;
-FCAF 0633 062E;<initial>;
-FCB0 0633 0645;<initial>;
-FCB1 0635 062D;<initial>;
-FCB2 0635 062E;<initial>;
-FCB3 0635 0645;<initial>;
-FCB4 0636 062C;<initial>;
-FCB5 0636 062D;<initial>;
-FCB6 0636 062E;<initial>;
-FCB7 0636 0645;<initial>;
-FCB8 0637 062D;<initial>;
-FCB9 0638 0645;<initial>;
-FCBA 0639 062C;<initial>;
-FCBB 0639 0645;<initial>;
-FCBC 063A 062C;<initial>;
-FCBD 063A 0645;<initial>;
-FCBE 0641 062C;<initial>;
-FCBF 0641 062D;<initial>;
-FCC0 0641 062E;<initial>;
-FCC1 0641 0645;<initial>;
-FCC2 0642 062D;<initial>;
-FCC3 0642 0645;<initial>;
-FCC4 0643 062C;<initial>;
-FCC5 0643 062D;<initial>;
-FCC6 0643 062E;<initial>;
-FCC7 0643 0644;<initial>;
-FCC8 0643 0645;<initial>;
-FCC9 0644 062C;<initial>;
-FCCA 0644 062D;<initial>;
-FCCB 0644 062E;<initial>;
-FCCC 0644 0645;<initial>;
-FCCD 0644 0647;<initial>;
-FCCE 0645 062C;<initial>;
-FCCF 0645 062D;<initial>;
-FCD0 0645 062E;<initial>;
-FCD1 0645 0645;<initial>;
-FCD2 0646 062C;<initial>;
-FCD3 0646 062D;<initial>;
-FCD4 0646 062E;<initial>;
-FCD5 0646 0645;<initial>;
-FCD6 0646 0647;<initial>;
-FCD7 0647 062C;<initial>;
-FCD8 0647 0645;<initial>;
-FCD9 0647 0670;<initial>;
-FCDA 064A 062C;<initial>;
-FCDB 064A 062D;<initial>;
-FCDC 064A 062E;<initial>;
-FCDD 064A 0645;<initial>;
-FCDE 064A 0647;<initial>;
-FCDF 0626 0645;<medial>;
-FCE0 0626 0647;<medial>;
-FCE1 0628 0645;<medial>;
-FCE2 0628 0647;<medial>;
-FCE3 062A 0645;<medial>;
-FCE4 062A 0647;<medial>;
-FCE5 062B 0645;<medial>;
-FCE6 062B 0647;<medial>;
-FCE7 0633 0645;<medial>;
-FCE8 0633 0647;<medial>;
-FCE9 0634 0645;<medial>;
-FCEA 0634 0647;<medial>;
-FCEB 0643 0644;<medial>;
-FCEC 0643 0645;<medial>;
-FCED 0644 0645;<medial>;
-FCEE 0646 0645;<medial>;
-FCEF 0646 0647;<medial>;
-FCF0 064A 0645;<medial>;
-FCF1 064A 0647;<medial>;
-FCF2 0640 064E;<medial>;
-FCF3 0640 064F;<medial>;
-FCF4 0640 0650;<medial>;
-FCF5 0637 0649;<isolated>;
-FCF6 0637 064A;<isolated>;
-FCF7 0639 0649;<isolated>;
-FCF8 0639 064A;<isolated>;
-FCF9 063A 0649;<isolated>;
-FCFA 063A 064A;<isolated>;
-FCFB 0633 0649;<isolated>;
-FCFC 0633 064A;<isolated>;
-FCFD 0634 0649;<isolated>;
-FCFE 0634 064A;<isolated>;
-FCFF 062D 0649;<isolated>;
-FD00 062D 064A;<isolated>;
-FD01 062C 0649;<isolated>;
-FD02 062C 064A;<isolated>;
-FD03 062E 0649;<isolated>;
-FD04 062E 064A;<isolated>;
-FD05 0635 0649;<isolated>;
-FD06 0635 064A;<isolated>;
-FD07 0636 0649;<isolated>;
-FD08 0636 064A;<isolated>;
-FD09 0634 062C;<isolated>;
-FD0A 0634 062D;<isolated>;
-FD0B 0634 062E;<isolated>;
-FD0C 0634 0645;<isolated>;
-FD0D 0634 0631;<isolated>;
-FD0E 0633 0631;<isolated>;
-FD0F 0635 0631;<isolated>;
-FD10 0636 0631;<isolated>;
-FD11 0637 0649;<final>;
-FD12 0637 064A;<final>;
-FD13 0639 0649;<final>;
-FD14 0639 064A;<final>;
-FD15 063A 0649;<final>;
-FD16 063A 064A;<final>;
-FD17 0633 0649;<final>;
-FD18 0633 064A;<final>;
-FD19 0634 0649;<final>;
-FD1A 0634 064A;<final>;
-FD1B 062D 0649;<final>;
-FD1C 062D 064A;<final>;
-FD1D 062C 0649;<final>;
-FD1E 062C 064A;<final>;
-FD1F 062E 0649;<final>;
-FD20 062E 064A;<final>;
-FD21 0635 0649;<final>;
-FD22 0635 064A;<final>;
-FD23 0636 0649;<final>;
-FD24 0636 064A;<final>;
-FD25 0634 062C;<final>;
-FD26 0634 062D;<final>;
-FD27 0634 062E;<final>;
-FD28 0634 0645;<final>;
-FD29 0634 0631;<final>;
-FD2A 0633 0631;<final>;
-FD2B 0635 0631;<final>;
-FD2C 0636 0631;<final>;
-FD2D 0634 062C;<initial>;
-FD2E 0634 062D;<initial>;
-FD2F 0634 062E;<initial>;
-FD30 0634 0645;<initial>;
-FD31 0633 0647;<initial>;
-FD32 0634 0647;<initial>;
-FD33 0637 0645;<initial>;
-FD34 0633 062C;<medial>;
-FD35 0633 062D;<medial>;
-FD36 0633 062E;<medial>;
-FD37 0634 062C;<medial>;
-FD38 0634 062D;<medial>;
-FD39 0634 062E;<medial>;
-FD3A 0637 0645;<medial>;
-FD3B 0638 0645;<medial>;
-FD3C 0627 064B;<final>;
-FD3D 0627 064B;<isolated>;
-FD50 062A 062C;<initial>;
-FD51 062A 062D;<final>;
-FD52 062A 062D;<initial>;
-FD53 062A 062D;<initial>;
-FD54 062A 062E;<initial>;
-FD55 062A 0645;<initial>;
-FD56 062A 0645;<initial>;
-FD57 062A 0645;<initial>;
-FD58 062C 0645;<final>;
-FD59 062C 0645;<initial>;
-FD5A 062D 0645;<final>;
-FD5B 062D 0645;<final>;
-FD5C 0633 062D;<initial>;
-FD5D 0633 062C;<initial>;
-FD5E 0633 062C;<final>;
-FD5F 0633 0645;<final>;
-FD60 0633 0645;<initial>;
-FD61 0633 0645;<initial>;
-FD62 0633 0645;<final>;
-FD63 0633 0645;<initial>;
-FD64 0635 062D;<final>;
-FD65 0635 062D;<initial>;
-FD66 0635 0645;<final>;
-FD67 0634 062D;<final>;
-FD68 0634 062D;<initial>;
-FD69 0634 062C;<final>;
-FD6A 0634 0645;<final>;
-FD6B 0634 0645;<initial>;
-FD6C 0634 0645;<final>;
-FD6D 0634 0645;<initial>;
-FD6E 0636 062D;<final>;
-FD6F 0636 062E;<final>;
-FD70 0636 062E;<initial>;
-FD71 0637 0645;<final>;
-FD72 0637 0645;<initial>;
-FD73 0637 0645;<initial>;
-FD74 0637 0645;<final>;
-FD75 0639 062C;<final>;
-FD76 0639 0645;<final>;
-FD77 0639 0645;<initial>;
-FD78 0639 0645;<final>;
-FD79 063A 0645;<final>;
-FD7A 063A 0645;<final>;
-FD7B 063A 0645;<final>;
-FD7C 0641 062E;<final>;
-FD7D 0641 062E;<initial>;
-FD7E 0642 0645;<final>;
-FD7F 0642 0645;<final>;
-FD80 0644 062D;<final>;
-FD81 0644 062D;<final>;
-FD82 0644 062D;<final>;
-FD83 0644 062C;<initial>;
-FD84 0644 062C;<final>;
-FD85 0644 062E;<final>;
-FD86 0644 062E;<initial>;
-FD87 0644 0645;<final>;
-FD88 0644 0645;<initial>;
-FD89 0645 062D;<initial>;
-FD8A 0645 062D;<initial>;
-FD8B 0645 062D;<final>;
-FD8C 0645 062C;<initial>;
-FD8D 0645 062C;<initial>;
-FD8E 0645 062E;<initial>;
-FD8F 0645 062E;<initial>;
-FD92 0645 062C;<initial>;
-FD93 0647 0645;<initial>;
-FD94 0647 0645;<initial>;
-FD95 0646 062D;<initial>;
-FD96 0646 062D;<final>;
-FD97 0646 062C;<final>;
-FD98 0646 062C;<initial>;
-FD99 0646 062C;<final>;
-FD9A 0646 0645;<final>;
-FD9B 0646 0645;<final>;
-FD9C 064A 0645;<final>;
-FD9D 064A 0645;<initial>;
-FD9E 0628 062E;<final>;
-FD9F 062A 062C;<final>;
-FDA0 062A 062C;<final>;
-FDA1 062A 062E;<final>;
-FDA2 062A 062E;<final>;
-FDA3 062A 0645;<final>;
-FDA4 062A 0645;<final>;
-FDA5 062C 0645;<final>;
-FDA6 062C 062D;<final>;
-FDA7 062C 0645;<final>;
-FDA8 0633 062E;<final>;
-FDA9 0635 062D;<final>;
-FDAA 0634 062D;<final>;
-FDAB 0636 062D;<final>;
-FDAC 0644 062C;<final>;
-FDAD 0644 0645;<final>;
-FDAE 064A 062D;<final>;
-FDAF 064A 062C;<final>;
-FDB0 064A 0645;<final>;
-FDB1 0645 0645;<final>;
-FDB2 0642 0645;<final>;
-FDB3 0646 062D;<final>;
-FDB4 0642 0645;<initial>;
-FDB5 0644 062D;<initial>;
-FDB6 0639 0645;<final>;
-FDB7 0643 0645;<final>;
-FDB8 0646 062C;<initial>;
-FDB9 0645 062E;<final>;
-FDBA 0644 062C;<initial>;
-FDBB 0643 0645;<final>;
-FDBC 0644 062C;<final>;
-FDBD 0646 062C;<final>;
-FDBE 062C 062D;<final>;
-FDBF 062D 062C;<final>;
-FDC0 0645 062C;<final>;
-FDC1 0641 0645;<final>;
-FDC2 0628 062D;<final>;
-FDC3 0643 0645;<initial>;
-FDC4 0639 062C;<initial>;
-FDC5 0635 0645;<initial>;
-FDC6 0633 062E;<final>;
-FDC7 0646 062C;<final>;
-FDF0 0635 0644;<isolated>;
-FDF1 0642 0644;<isolated>;
-FDF2 0627 0644;<isolated>;
-FDF3 0627 0643;<isolated>;
-FDF4 0645 062D;<isolated>;
-FDF5 0635 0644;<isolated>;
-FDF6 0631 0633;<isolated>;
-FDF7 0639 0644;<isolated>;
-FDF8 0648 0633;<isolated>;
-FDF9 0635 0644;<isolated>;
-FDFA 0635 0644;<isolated>;
-FDFB 062C 0644;<isolated>;
-FE30 2025 0000;<vertical>;
-FE31 2014 0000;<vertical>;
-FE32 2013 0000;<vertical>;
-FE33 005F 0000;<vertical>;
-FE34 005F 0000;<vertical>;
-FE35 0028 0000;<vertical>;
-FE36 0029 0000;<vertical>;
-FE37 007B 0000;<vertical>;
-FE38 007D 0000;<vertical>;
-FE39 3014 0000;<vertical>;
-FE3A 3015 0000;<vertical>;
-FE3B 3010 0000;<vertical>;
-FE3C 3011 0000;<vertical>;
-FE3D 300A 0000;<vertical>;
-FE3E 300B 0000;<vertical>;
-FE3F 3008 0000;<vertical>;
-FE40 3009 0000;<vertical>;
-FE41 300C 0000;<vertical>;
-FE42 300D 0000;<vertical>;
-FE43 300E 0000;<vertical>;
-FE44 300F 0000;<vertical>;
-FE49 203E 0000;<compat>;
-FE4A 203E 0000;<compat>;
-FE4B 203E 0000;<compat>;
-FE4C 203E 0000;<compat>;
-FE4D 005F 0000;<compat>;
-FE4E 005F 0000;<compat>;
-FE4F 005F 0000;<compat>;
-FE50 002C 0000;<small>;
-FE51 3001 0000;<small>;
-FE52 002E 0000;<small>;
-FE54 003B 0000;<small>;
-FE55 003A 0000;<small>;
-FE56 003F 0000;<small>;
-FE57 0021 0000;<small>;
-FE58 2014 0000;<small>;
-FE59 0028 0000;<small>;
-FE5A 0029 0000;<small>;
-FE5B 007B 0000;<small>;
-FE5C 007D 0000;<small>;
-FE5D 3014 0000;<small>;
-FE5E 3015 0000;<small>;
-FE5F 0023 0000;<small>;
-FE60 0026 0000;<small>;
-FE61 002A 0000;<small>;
-FE62 002B 0000;<small>;
-FE63 002D 0000;<small>;
-FE64 003C 0000;<small>;
-FE65 003E 0000;<small>;
-FE66 003D 0000;<small>;
-FE68 005C 0000;<small>;
-FE69 0024 0000;<small>;
-FE6A 0025 0000;<small>;
-FE6B 0040 0000;<small>;
-FE70 0020 064B;<isolated>;
-FE71 0640 064B;<medial>;
-FE72 0020 064C;<isolated>;
-FE74 0020 064D;<isolated>;
-FE76 0020 064E;<isolated>;
-FE77 0640 064E;<medial>;
-FE78 0020 064F;<isolated>;
-FE79 0640 064F;<medial>;
-FE7A 0020 0650;<isolated>;
-FE7B 0640 0650;<medial>;
-FE7C 0020 0651;<isolated>;
-FE7D 0640 0651;<medial>;
-FE7E 0020 0652;<isolated>;
-FE7F 0640 0652;<medial>;
-FE80 0621 0000;<isolated>;
-FE81 0622 0000;<isolated>;
-FE82 0622 0000;<final>;
-FE83 0623 0000;<isolated>;
-FE84 0623 0000;<final>;
-FE85 0624 0000;<isolated>;
-FE86 0624 0000;<final>;
-FE87 0625 0000;<isolated>;
-FE88 0625 0000;<final>;
-FE89 0626 0000;<isolated>;
-FE8A 0626 0000;<final>;
-FE8B 0626 0000;<initial>;
-FE8C 0626 0000;<medial>;
-FE8D 0627 0000;<isolated>;
-FE8E 0627 0000;<final>;
-FE8F 0628 0000;<isolated>;
-FE90 0628 0000;<final>;
-FE91 0628 0000;<initial>;
-FE92 0628 0000;<medial>;
-FE93 0629 0000;<isolated>;
-FE94 0629 0000;<final>;
-FE95 062A 0000;<isolated>;
-FE96 062A 0000;<final>;
-FE97 062A 0000;<initial>;
-FE98 062A 0000;<medial>;
-FE99 062B 0000;<isolated>;
-FE9A 062B 0000;<final>;
-FE9B 062B 0000;<initial>;
-FE9C 062B 0000;<medial>;
-FE9D 062C 0000;<isolated>;
-FE9E 062C 0000;<final>;
-FE9F 062C 0000;<initial>;
-FEA0 062C 0000;<medial>;
-FEA1 062D 0000;<isolated>;
-FEA2 062D 0000;<final>;
-FEA3 062D 0000;<initial>;
-FEA4 062D 0000;<medial>;
-FEA5 062E 0000;<isolated>;
-FEA6 062E 0000;<final>;
-FEA7 062E 0000;<initial>;
-FEA8 062E 0000;<medial>;
-FEA9 062F 0000;<isolated>;
-FEAA 062F 0000;<final>;
-FEAB 0630 0000;<isolated>;
-FEAC 0630 0000;<final>;
-FEAD 0631 0000;<isolated>;
-FEAE 0631 0000;<final>;
-FEAF 0632 0000;<isolated>;
-FEB0 0632 0000;<final>;
-FEB1 0633 0000;<isolated>;
-FEB2 0633 0000;<final>;
-FEB3 0633 0000;<initial>;
-FEB4 0633 0000;<medial>;
-FEB5 0634 0000;<isolated>;
-FEB6 0634 0000;<final>;
-FEB7 0634 0000;<initial>;
-FEB8 0634 0000;<medial>;
-FEB9 0635 0000;<isolated>;
-FEBA 0635 0000;<final>;
-FEBB 0635 0000;<initial>;
-FEBC 0635 0000;<medial>;
-FEBD 0636 0000;<isolated>;
-FEBE 0636 0000;<final>;
-FEBF 0636 0000;<initial>;
-FEC0 0636 0000;<medial>;
-FEC1 0637 0000;<isolated>;
-FEC2 0637 0000;<final>;
-FEC3 0637 0000;<initial>;
-FEC4 0637 0000;<medial>;
-FEC5 0638 0000;<isolated>;
-FEC6 0638 0000;<final>;
-FEC7 0638 0000;<initial>;
-FEC8 0638 0000;<medial>;
-FEC9 0639 0000;<isolated>;
-FECA 0639 0000;<final>;
-FECB 0639 0000;<initial>;
-FECC 0639 0000;<medial>;
-FECD 063A 0000;<isolated>;
-FECE 063A 0000;<final>;
-FECF 063A 0000;<initial>;
-FED0 063A 0000;<medial>;
-FED1 0641 0000;<isolated>;
-FED2 0641 0000;<final>;
-FED3 0641 0000;<initial>;
-FED4 0641 0000;<medial>;
-FED5 0642 0000;<isolated>;
-FED6 0642 0000;<final>;
-FED7 0642 0000;<initial>;
-FED8 0642 0000;<medial>;
-FED9 0643 0000;<isolated>;
-FEDA 0643 0000;<final>;
-FEDB 0643 0000;<initial>;
-FEDC 0643 0000;<medial>;
-FEDD 0644 0000;<isolated>;
-FEDE 0644 0000;<final>;
-FEDF 0644 0000;<initial>;
-FEE0 0644 0000;<medial>;
-FEE1 0645 0000;<isolated>;
-FEE2 0645 0000;<final>;
-FEE3 0645 0000;<initial>;
-FEE4 0645 0000;<medial>;
-FEE5 0646 0000;<isolated>;
-FEE6 0646 0000;<final>;
-FEE7 0646 0000;<initial>;
-FEE8 0646 0000;<medial>;
-FEE9 0647 0000;<isolated>;
-FEEA 0647 0000;<final>;
-FEEB 0647 0000;<initial>;
-FEEC 0647 0000;<medial>;
-FEED 0648 0000;<isolated>;
-FEEE 0648 0000;<final>;
-FEEF 0649 0000;<isolated>;
-FEF0 0649 0000;<final>;
-FEF1 064A 0000;<isolated>;
-FEF2 064A 0000;<final>;
-FEF3 064A 0000;<initial>;
-FEF4 064A 0000;<medial>;
-FEF5 0644 0622;<isolated>;
-FEF6 0644 0622;<final>;
-FEF7 0644 0623;<isolated>;
-FEF8 0644 0623;<final>;
-FEF9 0644 0625;<isolated>;
-FEFA 0644 0625;<final>;
-FEFB 0644 0627;<isolated>;
-FEFC 0644 0627;<final>;
-FF01 0021 0000;<wide>;
-FF02 0022 0000;<wide>;
-FF03 0023 0000;<wide>;
-FF04 0024 0000;<wide>;
-FF05 0025 0000;<wide>;
-FF06 0026 0000;<wide>;
-FF07 0027 0000;<wide>;
-FF08 0028 0000;<wide>;
-FF09 0029 0000;<wide>;
-FF0A 002A 0000;<wide>;
-FF0B 002B 0000;<wide>;
-FF0C 002C 0000;<wide>;
-FF0D 002D 0000;<wide>;
-FF0E 002E 0000;<wide>;
-FF0F 002F 0000;<wide>;
-FF10 0030 0000;<wide>;
-FF11 0031 0000;<wide>;
-FF12 0032 0000;<wide>;
-FF13 0033 0000;<wide>;
-FF14 0034 0000;<wide>;
-FF15 0035 0000;<wide>;
-FF16 0036 0000;<wide>;
-FF17 0037 0000;<wide>;
-FF18 0038 0000;<wide>;
-FF19 0039 0000;<wide>;
-FF1A 003A 0000;<wide>;
-FF1B 003B 0000;<wide>;
-FF1C 003C 0000;<wide>;
-FF1D 003D 0000;<wide>;
-FF1E 003E 0000;<wide>;
-FF1F 003F 0000;<wide>;
-FF20 0040 0000;<wide>;
-FF21 0041 0000;<wide>;
-FF22 0042 0000;<wide>;
-FF23 0043 0000;<wide>;
-FF24 0044 0000;<wide>;
-FF25 0045 0000;<wide>;
-FF26 0046 0000;<wide>;
-FF27 0047 0000;<wide>;
-FF28 0048 0000;<wide>;
-FF29 0049 0000;<wide>;
-FF2A 004A 0000;<wide>;
-FF2B 004B 0000;<wide>;
-FF2C 004C 0000;<wide>;
-FF2D 004D 0000;<wide>;
-FF2E 004E 0000;<wide>;
-FF2F 004F 0000;<wide>;
-FF30 0050 0000;<wide>;
-FF31 0051 0000;<wide>;
-FF32 0052 0000;<wide>;
-FF33 0053 0000;<wide>;
-FF34 0054 0000;<wide>;
-FF35 0055 0000;<wide>;
-FF36 0056 0000;<wide>;
-FF37 0057 0000;<wide>;
-FF38 0058 0000;<wide>;
-FF39 0059 0000;<wide>;
-FF3A 005A 0000;<wide>;
-FF3B 005B 0000;<wide>;
-FF3C 005C 0000;<wide>;
-FF3D 005D 0000;<wide>;
-FF3E 005E 0000;<wide>;
-FF3F 005F 0000;<wide>;
-FF40 0060 0000;<wide>;
-FF41 0061 0000;<wide>;
-FF42 0062 0000;<wide>;
-FF43 0063 0000;<wide>;
-FF44 0064 0000;<wide>;
-FF45 0065 0000;<wide>;
-FF46 0066 0000;<wide>;
-FF47 0067 0000;<wide>;
-FF48 0068 0000;<wide>;
-FF49 0069 0000;<wide>;
-FF4A 006A 0000;<wide>;
-FF4B 006B 0000;<wide>;
-FF4C 006C 0000;<wide>;
-FF4D 006D 0000;<wide>;
-FF4E 006E 0000;<wide>;
-FF4F 006F 0000;<wide>;
-FF50 0070 0000;<wide>;
-FF51 0071 0000;<wide>;
-FF52 0072 0000;<wide>;
-FF53 0073 0000;<wide>;
-FF54 0074 0000;<wide>;
-FF55 0075 0000;<wide>;
-FF56 0076 0000;<wide>;
-FF57 0077 0000;<wide>;
-FF58 0078 0000;<wide>;
-FF59 0079 0000;<wide>;
-FF5A 007A 0000;<wide>;
-FF5B 007B 0000;<wide>;
-FF5C 007C 0000;<wide>;
-FF5D 007D 0000;<wide>;
-FF5E 007E 0000;<wide>;
-FF61 3002 0000;<narrow>;
-FF62 300C 0000;<narrow>;
-FF63 300D 0000;<narrow>;
-FF64 3001 0000;<narrow>;
-FF65 30FB 0000;<narrow>;
-FF66 30F2 0000;<narrow>;
-FF67 30A1 0000;<narrow>;
-FF68 30A3 0000;<narrow>;
-FF69 30A5 0000;<narrow>;
-FF6A 30A7 0000;<narrow>;
-FF6B 30A9 0000;<narrow>;
-FF6C 30E3 0000;<narrow>;
-FF6D 30E5 0000;<narrow>;
-FF6E 30E7 0000;<narrow>;
-FF6F 30C3 0000;<narrow>;
-FF70 30FC 0000;<narrow>;
-FF71 30A2 0000;<narrow>;
-FF72 30A4 0000;<narrow>;
-FF73 30A6 0000;<narrow>;
-FF74 30A8 0000;<narrow>;
-FF75 30AA 0000;<narrow>;
-FF76 30AB 0000;<narrow>;
-FF77 30AD 0000;<narrow>;
-FF78 30AF 0000;<narrow>;
-FF79 30B1 0000;<narrow>;
-FF7A 30B3 0000;<narrow>;
-FF7B 30B5 0000;<narrow>;
-FF7C 30B7 0000;<narrow>;
-FF7D 30B9 0000;<narrow>;
-FF7E 30BB 0000;<narrow>;
-FF7F 30BD 0000;<narrow>;
-FF80 30BF 0000;<narrow>;
-FF81 30C1 0000;<narrow>;
-FF82 30C4 0000;<narrow>;
-FF83 30C6 0000;<narrow>;
-FF84 30C8 0000;<narrow>;
-FF85 30CA 0000;<narrow>;
-FF86 30CB 0000;<narrow>;
-FF87 30CC 0000;<narrow>;
-FF88 30CD 0000;<narrow>;
-FF89 30CE 0000;<narrow>;
-FF8A 30CF 0000;<narrow>;
-FF8B 30D2 0000;<narrow>;
-FF8C 30D5 0000;<narrow>;
-FF8D 30D8 0000;<narrow>;
-FF8E 30DB 0000;<narrow>;
-FF8F 30DE 0000;<narrow>;
-FF90 30DF 0000;<narrow>;
-FF91 30E0 0000;<narrow>;
-FF92 30E1 0000;<narrow>;
-FF93 30E2 0000;<narrow>;
-FF94 30E4 0000;<narrow>;
-FF95 30E6 0000;<narrow>;
-FF96 30E8 0000;<narrow>;
-FF97 30E9 0000;<narrow>;
-FF98 30EA 0000;<narrow>;
-FF99 30EB 0000;<narrow>;
-FF9A 30EC 0000;<narrow>;
-FF9B 30ED 0000;<narrow>;
-FF9C 30EF 0000;<narrow>;
-FF9D 30F3 0000;<narrow>;
-FF9E 3099 0000;<narrow>;
-FF9F 309A 0000;<narrow>;
-FFA0 3164 0000;<narrow>;
-FFA1 3131 0000;<narrow>;
-FFA2 3132 0000;<narrow>;
-FFA3 3133 0000;<narrow>;
-FFA4 3134 0000;<narrow>;
-FFA5 3135 0000;<narrow>;
-FFA6 3136 0000;<narrow>;
-FFA7 3137 0000;<narrow>;
-FFA8 3138 0000;<narrow>;
-FFA9 3139 0000;<narrow>;
-FFAA 313A 0000;<narrow>;
-FFAB 313B 0000;<narrow>;
-FFAC 313C 0000;<narrow>;
-FFAD 313D 0000;<narrow>;
-FFAE 313E 0000;<narrow>;
-FFAF 313F 0000;<narrow>;
-FFB0 3140 0000;<narrow>;
-FFB1 3141 0000;<narrow>;
-FFB2 3142 0000;<narrow>;
-FFB3 3143 0000;<narrow>;
-FFB4 3144 0000;<narrow>;
-FFB5 3145 0000;<narrow>;
-FFB6 3146 0000;<narrow>;
-FFB7 3147 0000;<narrow>;
-FFB8 3148 0000;<narrow>;
-FFB9 3149 0000;<narrow>;
-FFBA 314A 0000;<narrow>;
-FFBB 314B 0000;<narrow>;
-FFBC 314C 0000;<narrow>;
-FFBD 314D 0000;<narrow>;
-FFBE 314E 0000;<narrow>;
-FFC2 314F 0000;<narrow>;
-FFC3 3150 0000;<narrow>;
-FFC4 3151 0000;<narrow>;
-FFC5 3152 0000;<narrow>;
-FFC6 3153 0000;<narrow>;
-FFC7 3154 0000;<narrow>;
-FFCA 3155 0000;<narrow>;
-FFCB 3156 0000;<narrow>;
-FFCC 3157 0000;<narrow>;
-FFCD 3158 0000;<narrow>;
-FFCE 3159 0000;<narrow>;
-FFCF 315A 0000;<narrow>;
-FFD2 315B 0000;<narrow>;
-FFD3 315C 0000;<narrow>;
-FFD4 315D 0000;<narrow>;
-FFD5 315E 0000;<narrow>;
-FFD6 315F 0000;<narrow>;
-FFD7 3160 0000;<narrow>;
-FFDA 3161 0000;<narrow>;
-FFDB 3162 0000;<narrow>;
-FFDC 3163 0000;<narrow>;
-FFE0 00A2 0000;<wide>;
-FFE1 00A3 0000;<wide>;
-FFE2 00AC 0000;<wide>;
-FFE3 00AF 0000;<wide>;
-FFE4 00A6 0000;<wide>;
-FFE5 00A5 0000;<wide>;
-FFE6 20A9 0000;<wide>;
-FFE8 2502 0000;<narrow>;
-FFE9 2190 0000;<narrow>;
-FFEA 2191 0000;<narrow>;
-FFEB 2192 0000;<narrow>;
-FFEC 2193 0000;<narrow>;
-FFED 25A0 0000;<narrow>;
-FFEE 25CB 0000;<narrow>;
diff --git a/data/uni-prop.txt b/data/uni-prop.txt
deleted file mode 100644 (file)
index cffd7b9..0000000
+++ /dev/null
@@ -1,10620 +0,0 @@
-# uni-prop.txt - Unicode character properties
-0000;Cc;BN;
-0001;Cc;BN;
-0002;Cc;BN;
-0003;Cc;BN;
-0004;Cc;BN;
-0005;Cc;BN;
-0006;Cc;BN;
-0007;Cc;BN;
-0008;Cc;BN;
-0009;Cc;S;
-000A;Cc;B;
-000B;Cc;S;
-000C;Cc;WS;
-000D;Cc;B;
-000E;Cc;BN;
-000F;Cc;BN;
-0010;Cc;BN;
-0011;Cc;BN;
-0012;Cc;BN;
-0013;Cc;BN;
-0014;Cc;BN;
-0015;Cc;BN;
-0016;Cc;BN;
-0017;Cc;BN;
-0018;Cc;BN;
-0019;Cc;BN;
-001A;Cc;BN;
-001B;Cc;BN;
-001C;Cc;B;
-001D;Cc;B;
-001E;Cc;B;
-001F;Cc;S;
-0020;Zs;WS;
-0021;Po;ON;
-0022;Po;ON;
-0023;Po;ET;
-0024;Sc;ET;
-0025;Po;ET;
-0026;Po;ON;
-0027;Po;ON;
-0028;Ps;ON;
-0029;Pe;ON;
-002A;Po;ON;
-002B;Sm;ET;
-002C;Po;CS;
-002D;Pd;ET;
-002E;Po;CS;
-002F;Po;ES;
-0030;Nd;EN;
-0031;Nd;EN;
-0032;Nd;EN;
-0033;Nd;EN;
-0034;Nd;EN;
-0035;Nd;EN;
-0036;Nd;EN;
-0037;Nd;EN;
-0038;Nd;EN;
-0039;Nd;EN;
-003A;Po;CS;
-003B;Po;ON;
-003C;Sm;ON;
-003D;Sm;ON;
-003E;Sm;ON;
-003F;Po;ON;
-0040;Po;ON;
-0041;Lu;L;
-0042;Lu;L;
-0043;Lu;L;
-0044;Lu;L;
-0045;Lu;L;
-0046;Lu;L;
-0047;Lu;L;
-0048;Lu;L;
-0049;Lu;L;
-004A;Lu;L;
-004B;Lu;L;
-004C;Lu;L;
-004D;Lu;L;
-004E;Lu;L;
-004F;Lu;L;
-0050;Lu;L;
-0051;Lu;L;
-0052;Lu;L;
-0053;Lu;L;
-0054;Lu;L;
-0055;Lu;L;
-0056;Lu;L;
-0057;Lu;L;
-0058;Lu;L;
-0059;Lu;L;
-005A;Lu;L;
-005B;Ps;ON;
-005C;Po;ON;
-005D;Pe;ON;
-005E;Sk;ON;
-005F;Pc;ON;
-0060;Sk;ON;
-0061;Ll;L;
-0062;Ll;L;
-0063;Ll;L;
-0064;Ll;L;
-0065;Ll;L;
-0066;Ll;L;
-0067;Ll;L;
-0068;Ll;L;
-0069;Ll;L;
-006A;Ll;L;
-006B;Ll;L;
-006C;Ll;L;
-006D;Ll;L;
-006E;Ll;L;
-006F;Ll;L;
-0070;Ll;L;
-0071;Ll;L;
-0072;Ll;L;
-0073;Ll;L;
-0074;Ll;L;
-0075;Ll;L;
-0076;Ll;L;
-0077;Ll;L;
-0078;Ll;L;
-0079;Ll;L;
-007A;Ll;L;
-007B;Ps;ON;
-007C;Sm;ON;
-007D;Pe;ON;
-007E;Sm;ON;
-007F;Cc;BN;
-0080;Cc;BN;
-0081;Cc;BN;
-0082;Cc;BN;
-0083;Cc;BN;
-0084;Cc;BN;
-0085;Cc;B;
-0086;Cc;BN;
-0087;Cc;BN;
-0088;Cc;BN;
-0089;Cc;BN;
-008A;Cc;BN;
-008B;Cc;BN;
-008C;Cc;BN;
-008D;Cc;BN;
-008E;Cc;BN;
-008F;Cc;BN;
-0090;Cc;BN;
-0091;Cc;BN;
-0092;Cc;BN;
-0093;Cc;BN;
-0094;Cc;BN;
-0095;Cc;BN;
-0096;Cc;BN;
-0097;Cc;BN;
-0098;Cc;BN;
-0099;Cc;BN;
-009A;Cc;BN;
-009B;Cc;BN;
-009C;Cc;BN;
-009D;Cc;BN;
-009E;Cc;BN;
-009F;Cc;BN;
-00A0;Zs;CS;
-00A1;Po;ON;
-00A2;Sc;ET;
-00A3;Sc;ET;
-00A4;Sc;ET;
-00A5;Sc;ET;
-00A6;So;ON;
-00A7;So;ON;
-00A8;Sk;ON;
-00A9;So;ON;
-00AA;Ll;L;
-00AB;Pi;ON;
-00AC;Sm;ON;
-00AD;Pd;ON;
-00AE;So;ON;
-00AF;Sk;ON;
-00B0;So;ET;
-00B1;Sm;ET;
-00B2;No;EN;
-00B3;No;EN;
-00B4;Sk;ON;
-00B5;Ll;L;
-00B6;So;ON;
-00B7;Po;ON;
-00B8;Sk;ON;
-00B9;No;EN;
-00BA;Ll;L;
-00BB;Pf;ON;
-00BC;No;ON;
-00BD;No;ON;
-00BE;No;ON;
-00BF;Po;ON;
-00C0;Lu;L;
-00C1;Lu;L;
-00C2;Lu;L;
-00C3;Lu;L;
-00C4;Lu;L;
-00C5;Lu;L;
-00C6;Lu;L;
-00C7;Lu;L;
-00C8;Lu;L;
-00C9;Lu;L;
-00CA;Lu;L;
-00CB;Lu;L;
-00CC;Lu;L;
-00CD;Lu;L;
-00CE;Lu;L;
-00CF;Lu;L;
-00D0;Lu;L;
-00D1;Lu;L;
-00D2;Lu;L;
-00D3;Lu;L;
-00D4;Lu;L;
-00D5;Lu;L;
-00D6;Lu;L;
-00D7;Sm;ON;
-00D8;Lu;L;
-00D9;Lu;L;
-00DA;Lu;L;
-00DB;Lu;L;
-00DC;Lu;L;
-00DD;Lu;L;
-00DE;Lu;L;
-00DF;Ll;L;
-00E0;Ll;L;
-00E1;Ll;L;
-00E2;Ll;L;
-00E3;Ll;L;
-00E4;Ll;L;
-00E5;Ll;L;
-00E6;Ll;L;
-00E7;Ll;L;
-00E8;Ll;L;
-00E9;Ll;L;
-00EA;Ll;L;
-00EB;Ll;L;
-00EC;Ll;L;
-00ED;Ll;L;
-00EE;Ll;L;
-00EF;Ll;L;
-00F0;Ll;L;
-00F1;Ll;L;
-00F2;Ll;L;
-00F3;Ll;L;
-00F4;Ll;L;
-00F5;Ll;L;
-00F6;Ll;L;
-00F7;Sm;ON;
-00F8;Ll;L;
-00F9;Ll;L;
-00FA;Ll;L;
-00FB;Ll;L;
-00FC;Ll;L;
-00FD;Ll;L;
-00FE;Ll;L;
-00FF;Ll;L;
-0100;Lu;L;
-0101;Ll;L;
-0102;Lu;L;
-0103;Ll;L;
-0104;Lu;L;
-0105;Ll;L;
-0106;Lu;L;
-0107;Ll;L;
-0108;Lu;L;
-0109;Ll;L;
-010A;Lu;L;
-010B;Ll;L;
-010C;Lu;L;
-010D;Ll;L;
-010E;Lu;L;
-010F;Ll;L;
-0110;Lu;L;
-0111;Ll;L;
-0112;Lu;L;
-0113;Ll;L;
-0114;Lu;L;
-0115;Ll;L;
-0116;Lu;L;
-0117;Ll;L;
-0118;Lu;L;
-0119;Ll;L;
-011A;Lu;L;
-011B;Ll;L;
-011C;Lu;L;
-011D;Ll;L;
-011E;Lu;L;
-011F;Ll;L;
-0120;Lu;L;
-0121;Ll;L;
-0122;Lu;L;
-0123;Ll;L;
-0124;Lu;L;
-0125;Ll;L;
-0126;Lu;L;
-0127;Ll;L;
-0128;Lu;L;
-0129;Ll;L;
-012A;Lu;L;
-012B;Ll;L;
-012C;Lu;L;
-012D;Ll;L;
-012E;Lu;L;
-012F;Ll;L;
-0130;Lu;L;
-0131;Ll;L;
-0132;Lu;L;
-0133;Ll;L;
-0134;Lu;L;
-0135;Ll;L;
-0136;Lu;L;
-0137;Ll;L;
-0138;Ll;L;
-0139;Lu;L;
-013A;Ll;L;
-013B;Lu;L;
-013C;Ll;L;
-013D;Lu;L;
-013E;Ll;L;
-013F;Lu;L;
-0140;Ll;L;
-0141;Lu;L;
-0142;Ll;L;
-0143;Lu;L;
-0144;Ll;L;
-0145;Lu;L;
-0146;Ll;L;
-0147;Lu;L;
-0148;Ll;L;
-0149;Ll;L;
-014A;Lu;L;
-014B;Ll;L;
-014C;Lu;L;
-014D;Ll;L;
-014E;Lu;L;
-014F;Ll;L;
-0150;Lu;L;
-0151;Ll;L;
-0152;Lu;L;
-0153;Ll;L;
-0154;Lu;L;
-0155;Ll;L;
-0156;Lu;L;
-0157;Ll;L;
-0158;Lu;L;
-0159;Ll;L;
-015A;Lu;L;
-015B;Ll;L;
-015C;Lu;L;
-015D;Ll;L;
-015E;Lu;L;
-015F;Ll;L;
-0160;Lu;L;
-0161;Ll;L;
-0162;Lu;L;
-0163;Ll;L;
-0164;Lu;L;
-0165;Ll;L;
-0166;Lu;L;
-0167;Ll;L;
-0168;Lu;L;
-0169;Ll;L;
-016A;Lu;L;
-016B;Ll;L;
-016C;Lu;L;
-016D;Ll;L;
-016E;Lu;L;
-016F;Ll;L;
-0170;Lu;L;
-0171;Ll;L;
-0172;Lu;L;
-0173;Ll;L;
-0174;Lu;L;
-0175;Ll;L;
-0176;Lu;L;
-0177;Ll;L;
-0178;Lu;L;
-0179;Lu;L;
-017A;Ll;L;
-017B;Lu;L;
-017C;Ll;L;
-017D;Lu;L;
-017E;Ll;L;
-017F;Ll;L;
-0180;Ll;L;
-0181;Lu;L;
-0182;Lu;L;
-0183;Ll;L;
-0184;Lu;L;
-0185;Ll;L;
-0186;Lu;L;
-0187;Lu;L;
-0188;Ll;L;
-0189;Lu;L;
-018A;Lu;L;
-018B;Lu;L;
-018C;Ll;L;
-018D;Ll;L;
-018E;Lu;L;
-018F;Lu;L;
-0190;Lu;L;
-0191;Lu;L;
-0192;Ll;L;
-0193;Lu;L;
-0194;Lu;L;
-0195;Ll;L;
-0196;Lu;L;
-0197;Lu;L;
-0198;Lu;L;
-0199;Ll;L;
-019A;Ll;L;
-019B;Ll;L;
-019C;Lu;L;
-019D;Lu;L;
-019E;Ll;L;
-019F;Lu;L;
-01A0;Lu;L;
-01A1;Ll;L;
-01A2;Lu;L;
-01A3;Ll;L;
-01A4;Lu;L;
-01A5;Ll;L;
-01A6;Lu;L;
-01A7;Lu;L;
-01A8;Ll;L;
-01A9;Lu;L;
-01AA;Ll;L;
-01AB;Ll;L;
-01AC;Lu;L;
-01AD;Ll;L;
-01AE;Lu;L;
-01AF;Lu;L;
-01B0;Ll;L;
-01B1;Lu;L;
-01B2;Lu;L;
-01B3;Lu;L;
-01B4;Ll;L;
-01B5;Lu;L;
-01B6;Ll;L;
-01B7;Lu;L;
-01B8;Lu;L;
-01B9;Ll;L;
-01BA;Ll;L;
-01BB;Lo;L;
-01BC;Lu;L;
-01BD;Ll;L;
-01BE;Ll;L;
-01BF;Ll;L;
-01C0;Lo;L;
-01C1;Lo;L;
-01C2;Lo;L;
-01C3;Lo;L;
-01C4;Lu;L;
-01C5;Lt;L;
-01C6;Ll;L;
-01C7;Lu;L;
-01C8;Lt;L;
-01C9;Ll;L;
-01CA;Lu;L;
-01CB;Lt;L;
-01CC;Ll;L;
-01CD;Lu;L;
-01CE;Ll;L;
-01CF;Lu;L;
-01D0;Ll;L;
-01D1;Lu;L;
-01D2;Ll;L;
-01D3;Lu;L;
-01D4;Ll;L;
-01D5;Lu;L;
-01D6;Ll;L;
-01D7;Lu;L;
-01D8;Ll;L;
-01D9;Lu;L;
-01DA;Ll;L;
-01DB;Lu;L;
-01DC;Ll;L;
-01DD;Ll;L;
-01DE;Lu;L;
-01DF;Ll;L;
-01E0;Lu;L;
-01E1;Ll;L;
-01E2;Lu;L;
-01E3;Ll;L;
-01E4;Lu;L;
-01E5;Ll;L;
-01E6;Lu;L;
-01E7;Ll;L;
-01E8;Lu;L;
-01E9;Ll;L;
-01EA;Lu;L;
-01EB;Ll;L;
-01EC;Lu;L;
-01ED;Ll;L;
-01EE;Lu;L;
-01EF;Ll;L;
-01F0;Ll;L;
-01F1;Lu;L;
-01F2;Lt;L;
-01F3;Ll;L;
-01F4;Lu;L;
-01F5;Ll;L;
-01F6;Lu;L;
-01F7;Lu;L;
-01F8;Lu;L;
-01F9;Ll;L;
-01FA;Lu;L;
-01FB;Ll;L;
-01FC;Lu;L;
-01FD;Ll;L;
-01FE;Lu;L;
-01FF;Ll;L;
-0200;Lu;L;
-0201;Ll;L;
-0202;Lu;L;
-0203;Ll;L;
-0204;Lu;L;
-0205;Ll;L;
-0206;Lu;L;
-0207;Ll;L;
-0208;Lu;L;
-0209;Ll;L;
-020A;Lu;L;
-020B;Ll;L;
-020C;Lu;L;
-020D;Ll;L;
-020E;Lu;L;
-020F;Ll;L;
-0210;Lu;L;
-0211;Ll;L;
-0212;Lu;L;
-0213;Ll;L;
-0214;Lu;L;
-0215;Ll;L;
-0216;Lu;L;
-0217;Ll;L;
-0218;Lu;L;
-0219;Ll;L;
-021A;Lu;L;
-021B;Ll;L;
-021C;Lu;L;
-021D;Ll;L;
-021E;Lu;L;
-021F;Ll;L;
-0222;Lu;L;
-0223;Ll;L;
-0224;Lu;L;
-0225;Ll;L;
-0226;Lu;L;
-0227;Ll;L;
-0228;Lu;L;
-0229;Ll;L;
-022A;Lu;L;
-022B;Ll;L;
-022C;Lu;L;
-022D;Ll;L;
-022E;Lu;L;
-022F;Ll;L;
-0230;Lu;L;
-0231;Ll;L;
-0232;Lu;L;
-0233;Ll;L;
-0250;Ll;L;
-0251;Ll;L;
-0252;Ll;L;
-0253;Ll;L;
-0254;Ll;L;
-0255;Ll;L;
-0256;Ll;L;
-0257;Ll;L;
-0258;Ll;L;
-0259;Ll;L;
-025A;Ll;L;
-025B;Ll;L;
-025C;Ll;L;
-025D;Ll;L;
-025E;Ll;L;
-025F;Ll;L;
-0260;Ll;L;
-0261;Ll;L;
-0262;Ll;L;
-0263;Ll;L;
-0264;Ll;L;
-0265;Ll;L;
-0266;Ll;L;
-0267;Ll;L;
-0268;Ll;L;
-0269;Ll;L;
-026A;Ll;L;
-026B;Ll;L;
-026C;Ll;L;
-026D;Ll;L;
-026E;Ll;L;
-026F;Ll;L;
-0270;Ll;L;
-0271;Ll;L;
-0272;Ll;L;
-0273;Ll;L;
-0274;Ll;L;
-0275;Ll;L;
-0276;Ll;L;
-0277;Ll;L;
-0278;Ll;L;
-0279;Ll;L;
-027A;Ll;L;
-027B;Ll;L;
-027C;Ll;L;
-027D;Ll;L;
-027E;Ll;L;
-027F;Ll;L;
-0280;Ll;L;
-0281;Ll;L;
-0282;Ll;L;
-0283;Ll;L;
-0284;Ll;L;
-0285;Ll;L;
-0286;Ll;L;
-0287;Ll;L;
-0288;Ll;L;
-0289;Ll;L;
-028A;Ll;L;
-028B;Ll;L;
-028C;Ll;L;
-028D;Ll;L;
-028E;Ll;L;
-028F;Ll;L;
-0290;Ll;L;
-0291;Ll;L;
-0292;Ll;L;
-0293;Ll;L;
-0294;Ll;L;
-0295;Ll;L;
-0296;Ll;L;
-0297;Ll;L;
-0298;Ll;L;
-0299;Ll;L;
-029A;Ll;L;
-029B;Ll;L;
-029C;Ll;L;
-029D;Ll;L;
-029E;Ll;L;
-029F;Ll;L;
-02A0;Ll;L;
-02A1;Ll;L;
-02A2;Ll;L;
-02A3;Ll;L;
-02A4;Ll;L;
-02A5;Ll;L;
-02A6;Ll;L;
-02A7;Ll;L;
-02A8;Ll;L;
-02A9;Ll;L;
-02AA;Ll;L;
-02AB;Ll;L;
-02AC;Ll;L;
-02AD;Ll;L;
-02B0;Lm;L;
-02B1;Lm;L;
-02B2;Lm;L;
-02B3;Lm;L;
-02B4;Lm;L;
-02B5;Lm;L;
-02B6;Lm;L;
-02B7;Lm;L;
-02B8;Lm;L;
-02B9;Sk;ON;
-02BA;Sk;ON;
-02BB;Lm;L;
-02BC;Lm;L;
-02BD;Lm;L;
-02BE;Lm;L;
-02BF;Lm;L;
-02C0;Lm;L;
-02C1;Lm;L;
-02C2;Sk;ON;
-02C3;Sk;ON;
-02C4;Sk;ON;
-02C5;Sk;ON;
-02C6;Sk;ON;
-02C7;Sk;ON;
-02C8;Sk;ON;
-02C9;Sk;ON;
-02CA;Sk;ON;
-02CB;Sk;ON;
-02CC;Sk;ON;
-02CD;Sk;ON;
-02CE;Sk;ON;
-02CF;Sk;ON;
-02D0;Lm;L;
-02D1;Lm;L;
-02D2;Sk;ON;
-02D3;Sk;ON;
-02D4;Sk;ON;
-02D5;Sk;ON;
-02D6;Sk;ON;
-02D7;Sk;ON;
-02D8;Sk;ON;
-02D9;Sk;ON;
-02DA;Sk;ON;
-02DB;Sk;ON;
-02DC;Sk;ON;
-02DD;Sk;ON;
-02DE;Sk;ON;
-02DF;Sk;ON;
-02E0;Lm;L;
-02E1;Lm;L;
-02E2;Lm;L;
-02E3;Lm;L;
-02E4;Lm;L;
-02E5;Sk;ON;
-02E6;Sk;ON;
-02E7;Sk;ON;
-02E8;Sk;ON;
-02E9;Sk;ON;
-02EA;Sk;ON;
-02EB;Sk;ON;
-02EC;Sk;ON;
-02ED;Sk;ON;
-02EE;Lm;L;
-0300;Mn;NSM;
-0301;Mn;NSM;
-0302;Mn;NSM;
-0303;Mn;NSM;
-0304;Mn;NSM;
-0305;Mn;NSM;
-0306;Mn;NSM;
-0307;Mn;NSM;
-0308;Mn;NSM;
-0309;Mn;NSM;
-030A;Mn;NSM;
-030B;Mn;NSM;
-030C;Mn;NSM;
-030D;Mn;NSM;
-030E;Mn;NSM;
-030F;Mn;NSM;
-0310;Mn;NSM;
-0311;Mn;NSM;
-0312;Mn;NSM;
-0313;Mn;NSM;
-0314;Mn;NSM;
-0315;Mn;NSM;
-0316;Mn;NSM;
-0317;Mn;NSM;
-0318;Mn;NSM;
-0319;Mn;NSM;
-031A;Mn;NSM;
-031B;Mn;NSM;
-031C;Mn;NSM;
-031D;Mn;NSM;
-031E;Mn;NSM;
-031F;Mn;NSM;
-0320;Mn;NSM;
-0321;Mn;NSM;
-0322;Mn;NSM;
-0323;Mn;NSM;
-0324;Mn;NSM;
-0325;Mn;NSM;
-0326;Mn;NSM;
-0327;Mn;NSM;
-0328;Mn;NSM;
-0329;Mn;NSM;
-032A;Mn;NSM;
-032B;Mn;NSM;
-032C;Mn;NSM;
-032D;Mn;NSM;
-032E;Mn;NSM;
-032F;Mn;NSM;
-0330;Mn;NSM;
-0331;Mn;NSM;
-0332;Mn;NSM;
-0333;Mn;NSM;
-0334;Mn;NSM;
-0335;Mn;NSM;
-0336;Mn;NSM;
-0337;Mn;NSM;
-0338;Mn;NSM;
-0339;Mn;NSM;
-033A;Mn;NSM;
-033B;Mn;NSM;
-033C;Mn;NSM;
-033D;Mn;NSM;
-033E;Mn;NSM;
-033F;Mn;NSM;
-0340;Mn;NSM;
-0341;Mn;NSM;
-0342;Mn;NSM;
-0343;Mn;NSM;
-0344;Mn;NSM;
-0345;Mn;NSM;
-0346;Mn;NSM;
-0347;Mn;NSM;
-0348;Mn;NSM;
-0349;Mn;NSM;
-034A;Mn;NSM;
-034B;Mn;NSM;
-034C;Mn;NSM;
-034D;Mn;NSM;
-034E;Mn;NSM;
-0360;Mn;NSM;
-0361;Mn;NSM;
-0362;Mn;NSM;
-0374;Sk;ON;
-0375;Sk;ON;
-037A;Lm;L;
-037E;Po;ON;
-0384;Sk;ON;
-0385;Sk;ON;
-0386;Lu;L;
-0387;Po;ON;
-0388;Lu;L;
-0389;Lu;L;
-038A;Lu;L;
-038C;Lu;L;
-038E;Lu;L;
-038F;Lu;L;
-0390;Ll;L;
-0391;Lu;L;
-0392;Lu;L;
-0393;Lu;L;
-0394;Lu;L;
-0395;Lu;L;
-0396;Lu;L;
-0397;Lu;L;
-0398;Lu;L;
-0399;Lu;L;
-039A;Lu;L;
-039B;Lu;L;
-039C;Lu;L;
-039D;Lu;L;
-039E;Lu;L;
-039F;Lu;L;
-03A0;Lu;L;
-03A1;Lu;L;
-03A3;Lu;L;
-03A4;Lu;L;
-03A5;Lu;L;
-03A6;Lu;L;
-03A7;Lu;L;
-03A8;Lu;L;
-03A9;Lu;L;
-03AA;Lu;L;
-03AB;Lu;L;
-03AC;Ll;L;
-03AD;Ll;L;
-03AE;Ll;L;
-03AF;Ll;L;
-03B0;Ll;L;
-03B1;Ll;L;
-03B2;Ll;L;
-03B3;Ll;L;
-03B4;Ll;L;
-03B5;Ll;L;
-03B6;Ll;L;
-03B7;Ll;L;
-03B8;Ll;L;
-03B9;Ll;L;
-03BA;Ll;L;
-03BB;Ll;L;
-03BC;Ll;L;
-03BD;Ll;L;
-03BE;Ll;L;
-03BF;Ll;L;
-03C0;Ll;L;
-03C1;Ll;L;
-03C2;Ll;L;
-03C3;Ll;L;
-03C4;Ll;L;
-03C5;Ll;L;
-03C6;Ll;L;
-03C7;Ll;L;
-03C8;Ll;L;
-03C9;Ll;L;
-03CA;Ll;L;
-03CB;Ll;L;
-03CC;Ll;L;
-03CD;Ll;L;
-03CE;Ll;L;
-03D0;Ll;L;
-03D1;Ll;L;
-03D2;Lu;L;
-03D3;Lu;L;
-03D4;Lu;L;
-03D5;Ll;L;
-03D6;Ll;L;
-03D7;Ll;L;
-03DA;Lu;L;
-03DB;Ll;L;
-03DC;Lu;L;
-03DD;Ll;L;
-03DE;Lu;L;
-03DF;Ll;L;
-03E0;Lu;L;
-03E1;Ll;L;
-03E2;Lu;L;
-03E3;Ll;L;
-03E4;Lu;L;
-03E5;Ll;L;
-03E6;Lu;L;
-03E7;Ll;L;
-03E8;Lu;L;
-03E9;Ll;L;
-03EA;Lu;L;
-03EB;Ll;L;
-03EC;Lu;L;
-03ED;Ll;L;
-03EE;Lu;L;
-03EF;Ll;L;
-03F0;Ll;L;
-03F1;Ll;L;
-03F2;Ll;L;
-03F3;Ll;L;
-03F4;Lu;L;
-03F5;Ll;L;
-0400;Lu;L;
-0401;Lu;L;
-0402;Lu;L;
-0403;Lu;L;
-0404;Lu;L;
-0405;Lu;L;
-0406;Lu;L;
-0407;Lu;L;
-0408;Lu;L;
-0409;Lu;L;
-040A;Lu;L;
-040B;Lu;L;
-040C;Lu;L;
-040D;Lu;L;
-040E;Lu;L;
-040F;Lu;L;
-0410;Lu;L;
-0411;Lu;L;
-0412;Lu;L;
-0413;Lu;L;
-0414;Lu;L;
-0415;Lu;L;
-0416;Lu;L;
-0417;Lu;L;
-0418;Lu;L;
-0419;Lu;L;
-041A;Lu;L;
-041B;Lu;L;
-041C;Lu;L;
-041D;Lu;L;
-041E;Lu;L;
-041F;Lu;L;
-0420;Lu;L;
-0421;Lu;L;
-0422;Lu;L;
-0423;Lu;L;
-0424;Lu;L;
-0425;Lu;L;
-0426;Lu;L;
-0427;Lu;L;
-0428;Lu;L;
-0429;Lu;L;
-042A;Lu;L;
-042B;Lu;L;
-042C;Lu;L;
-042D;Lu;L;
-042E;Lu;L;
-042F;Lu;L;
-0430;Ll;L;
-0431;Ll;L;
-0432;Ll;L;
-0433;Ll;L;
-0434;Ll;L;
-0435;Ll;L;
-0436;Ll;L;
-0437;Ll;L;
-0438;Ll;L;
-0439;Ll;L;
-043A;Ll;L;
-043B;Ll;L;
-043C;Ll;L;
-043D;Ll;L;
-043E;Ll;L;
-043F;Ll;L;
-0440;Ll;L;
-0441;Ll;L;
-0442;Ll;L;
-0443;Ll;L;
-0444;Ll;L;
-0445;Ll;L;
-0446;Ll;L;
-0447;Ll;L;
-0448;Ll;L;
-0449;Ll;L;
-044A;Ll;L;
-044B;Ll;L;
-044C;Ll;L;
-044D;Ll;L;
-044E;Ll;L;
-044F;Ll;L;
-0450;Ll;L;
-0451;Ll;L;
-0452;Ll;L;
-0453;Ll;L;
-0454;Ll;L;
-0455;Ll;L;
-0456;Ll;L;
-0457;Ll;L;
-0458;Ll;L;
-0459;Ll;L;
-045A;Ll;L;
-045B;Ll;L;
-045C;Ll;L;
-045D;Ll;L;
-045E;Ll;L;
-045F;Ll;L;
-0460;Lu;L;
-0461;Ll;L;
-0462;Lu;L;
-0463;Ll;L;
-0464;Lu;L;
-0465;Ll;L;
-0466;Lu;L;
-0467;Ll;L;
-0468;Lu;L;
-0469;Ll;L;
-046A;Lu;L;
-046B;Ll;L;
-046C;Lu;L;
-046D;Ll;L;
-046E;Lu;L;
-046F;Ll;L;
-0470;Lu;L;
-0471;Ll;L;
-0472;Lu;L;
-0473;Ll;L;
-0474;Lu;L;
-0475;Ll;L;
-0476;Lu;L;
-0477;Ll;L;
-0478;Lu;L;
-0479;Ll;L;
-047A;Lu;L;
-047B;Ll;L;
-047C;Lu;L;
-047D;Ll;L;
-047E;Lu;L;
-047F;Ll;L;
-0480;Lu;L;
-0481;Ll;L;
-0482;So;L;
-0483;Mn;NSM;
-0484;Mn;NSM;
-0485;Mn;NSM;
-0486;Mn;NSM;
-0488;Me;NSM;
-0489;Me;NSM;
-048C;Lu;L;
-048D;Ll;L;
-048E;Lu;L;
-048F;Ll;L;
-0490;Lu;L;
-0491;Ll;L;
-0492;Lu;L;
-0493;Ll;L;
-0494;Lu;L;
-0495;Ll;L;
-0496;Lu;L;
-0497;Ll;L;
-0498;Lu;L;
-0499;Ll;L;
-049A;Lu;L;
-049B;Ll;L;
-049C;Lu;L;
-049D;Ll;L;
-049E;Lu;L;
-049F;Ll;L;
-04A0;Lu;L;
-04A1;Ll;L;
-04A2;Lu;L;
-04A3;Ll;L;
-04A4;Lu;L;
-04A5;Ll;L;
-04A6;Lu;L;
-04A7;Ll;L;
-04A8;Lu;L;
-04A9;Ll;L;
-04AA;Lu;L;
-04AB;Ll;L;
-04AC;Lu;L;
-04AD;Ll;L;
-04AE;Lu;L;
-04AF;Ll;L;
-04B0;Lu;L;
-04B1;Ll;L;
-04B2;Lu;L;
-04B3;Ll;L;
-04B4;Lu;L;
-04B5;Ll;L;
-04B6;Lu;L;
-04B7;Ll;L;
-04B8;Lu;L;
-04B9;Ll;L;
-04BA;Lu;L;
-04BB;Ll;L;
-04BC;Lu;L;
-04BD;Ll;L;
-04BE;Lu;L;
-04BF;Ll;L;
-04C0;Lu;L;
-04C1;Lu;L;
-04C2;Ll;L;
-04C3;Lu;L;
-04C4;Ll;L;
-04C7;Lu;L;
-04C8;Ll;L;
-04CB;Lu;L;
-04CC;Ll;L;
-04D0;Lu;L;
-04D1;Ll;L;
-04D2;Lu;L;
-04D3;Ll;L;
-04D4;Lu;L;
-04D5;Ll;L;
-04D6;Lu;L;
-04D7;Ll;L;
-04D8;Lu;L;
-04D9;Ll;L;
-04DA;Lu;L;
-04DB;Ll;L;
-04DC;Lu;L;
-04DD;Ll;L;
-04DE;Lu;L;
-04DF;Ll;L;
-04E0;Lu;L;
-04E1;Ll;L;
-04E2;Lu;L;
-04E3;Ll;L;
-04E4;Lu;L;
-04E5;Ll;L;
-04E6;Lu;L;
-04E7;Ll;L;
-04E8;Lu;L;
-04E9;Ll;L;
-04EA;Lu;L;
-04EB;Ll;L;
-04EC;Lu;L;
-04ED;Ll;L;
-04EE;Lu;L;
-04EF;Ll;L;
-04F0;Lu;L;
-04F1;Ll;L;
-04F2;Lu;L;
-04F3;Ll;L;
-04F4;Lu;L;
-04F5;Ll;L;
-04F8;Lu;L;
-04F9;Ll;L;
-0531;Lu;L;
-0532;Lu;L;
-0533;Lu;L;
-0534;Lu;L;
-0535;Lu;L;
-0536;Lu;L;
-0537;Lu;L;
-0538;Lu;L;
-0539;Lu;L;
-053A;Lu;L;
-053B;Lu;L;
-053C;Lu;L;
-053D;Lu;L;
-053E;Lu;L;
-053F;Lu;L;
-0540;Lu;L;
-0541;Lu;L;
-0542;Lu;L;
-0543;Lu;L;
-0544;Lu;L;
-0545;Lu;L;
-0546;Lu;L;
-0547;Lu;L;
-0548;Lu;L;
-0549;Lu;L;
-054A;Lu;L;
-054B;Lu;L;
-054C;Lu;L;
-054D;Lu;L;
-054E;Lu;L;
-054F;Lu;L;
-0550;Lu;L;
-0551;Lu;L;
-0552;Lu;L;
-0553;Lu;L;
-0554;Lu;L;
-0555;Lu;L;
-0556;Lu;L;
-0559;Lm;L;
-055A;Po;L;
-055B;Po;L;
-055C;Po;L;
-055D;Po;L;
-055E;Po;L;
-055F;Po;L;
-0561;Ll;L;
-0562;Ll;L;
-0563;Ll;L;
-0564;Ll;L;
-0565;Ll;L;
-0566;Ll;L;
-0567;Ll;L;
-0568;Ll;L;
-0569;Ll;L;
-056A;Ll;L;
-056B;Ll;L;
-056C;Ll;L;
-056D;Ll;L;
-056E;Ll;L;
-056F;Ll;L;
-0570;Ll;L;
-0571;Ll;L;
-0572;Ll;L;
-0573;Ll;L;
-0574;Ll;L;
-0575;Ll;L;
-0576;Ll;L;
-0577;Ll;L;
-0578;Ll;L;
-0579;Ll;L;
-057A;Ll;L;
-057B;Ll;L;
-057C;Ll;L;
-057D;Ll;L;
-057E;Ll;L;
-057F;Ll;L;
-0580;Ll;L;
-0581;Ll;L;
-0582;Ll;L;
-0583;Ll;L;
-0584;Ll;L;
-0585;Ll;L;
-0586;Ll;L;
-0587;Ll;L;
-0589;Po;L;
-058A;Pd;ON;
-0591;Mn;NSM;
-0592;Mn;NSM;
-0593;Mn;NSM;
-0594;Mn;NSM;
-0595;Mn;NSM;
-0596;Mn;NSM;
-0597;Mn;NSM;
-0598;Mn;NSM;
-0599;Mn;NSM;
-059A;Mn;NSM;
-059B;Mn;NSM;
-059C;Mn;NSM;
-059D;Mn;NSM;
-059E;Mn;NSM;
-059F;Mn;NSM;
-05A0;Mn;NSM;
-05A1;Mn;NSM;
-05A3;Mn;NSM;
-05A4;Mn;NSM;
-05A5;Mn;NSM;
-05A6;Mn;NSM;
-05A7;Mn;NSM;
-05A8;Mn;NSM;
-05A9;Mn;NSM;
-05AA;Mn;NSM;
-05AB;Mn;NSM;
-05AC;Mn;NSM;
-05AD;Mn;NSM;
-05AE;Mn;NSM;
-05AF;Mn;NSM;
-05B0;Mn;NSM;
-05B1;Mn;NSM;
-05B2;Mn;NSM;
-05B3;Mn;NSM;
-05B4;Mn;NSM;
-05B5;Mn;NSM;
-05B6;Mn;NSM;
-05B7;Mn;NSM;
-05B8;Mn;NSM;
-05B9;Mn;NSM;
-05BB;Mn;NSM;
-05BC;Mn;NSM;
-05BD;Mn;NSM;
-05BE;Po;R;
-05BF;Mn;NSM;
-05C0;Po;R;
-05C1;Mn;NSM;
-05C2;Mn;NSM;
-05C3;Po;R;
-05C4;Mn;NSM;
-05D0;Lo;R;
-05D1;Lo;R;
-05D2;Lo;R;
-05D3;Lo;R;
-05D4;Lo;R;
-05D5;Lo;R;
-05D6;Lo;R;
-05D7;Lo;R;
-05D8;Lo;R;
-05D9;Lo;R;
-05DA;Lo;R;
-05DB;Lo;R;
-05DC;Lo;R;
-05DD;Lo;R;
-05DE;Lo;R;
-05DF;Lo;R;
-05E0;Lo;R;
-05E1;Lo;R;
-05E2;Lo;R;
-05E3;Lo;R;
-05E4;Lo;R;
-05E5;Lo;R;
-05E6;Lo;R;
-05E7;Lo;R;
-05E8;Lo;R;
-05E9;Lo;R;
-05EA;Lo;R;
-05F0;Lo;R;
-05F1;Lo;R;
-05F2;Lo;R;
-05F3;Po;R;
-05F4;Po;R;
-060C;Po;CS;
-061B;Po;AL;
-061F;Po;AL;
-0621;Lo;AL;
-0622;Lo;AL;
-0623;Lo;AL;
-0624;Lo;AL;
-0625;Lo;AL;
-0626;Lo;AL;
-0627;Lo;AL;
-0628;Lo;AL;
-0629;Lo;AL;
-062A;Lo;AL;
-062B;Lo;AL;
-062C;Lo;AL;
-062D;Lo;AL;
-062E;Lo;AL;
-062F;Lo;AL;
-0630;Lo;AL;
-0631;Lo;AL;
-0632;Lo;AL;
-0633;Lo;AL;
-0634;Lo;AL;
-0635;Lo;AL;
-0636;Lo;AL;
-0637;Lo;AL;
-0638;Lo;AL;
-0639;Lo;AL;
-063A;Lo;AL;
-0640;Lm;AL;
-0641;Lo;AL;
-0642;Lo;AL;
-0643;Lo;AL;
-0644;Lo;AL;
-0645;Lo;AL;
-0646;Lo;AL;
-0647;Lo;AL;
-0648;Lo;AL;
-0649;Lo;AL;
-064A;Lo;AL;
-064B;Mn;NSM;
-064C;Mn;NSM;
-064D;Mn;NSM;
-064E;Mn;NSM;
-064F;Mn;NSM;
-0650;Mn;NSM;
-0651;Mn;NSM;
-0652;Mn;NSM;
-0653;Mn;NSM;
-0654;Mn;NSM;
-0655;Mn;NSM;
-0660;Nd;AN;
-0661;Nd;AN;
-0662;Nd;AN;
-0663;Nd;AN;
-0664;Nd;AN;
-0665;Nd;AN;
-0666;Nd;AN;
-0667;Nd;AN;
-0668;Nd;AN;
-0669;Nd;AN;
-066A;Po;ET;
-066B;Po;AN;
-066C;Po;AN;
-066D;Po;AL;
-0670;Mn;NSM;
-0671;Lo;AL;
-0672;Lo;AL;
-0673;Lo;AL;
-0674;Lo;AL;
-0675;Lo;AL;
-0676;Lo;AL;
-0677;Lo;AL;
-0678;Lo;AL;
-0679;Lo;AL;
-067A;Lo;AL;
-067B;Lo;AL;
-067C;Lo;AL;
-067D;Lo;AL;
-067E;Lo;AL;
-067F;Lo;AL;
-0680;Lo;AL;
-0681;Lo;AL;
-0682;Lo;AL;
-0683;Lo;AL;
-0684;Lo;AL;
-0685;Lo;AL;
-0686;Lo;AL;
-0687;Lo;AL;
-0688;Lo;AL;
-0689;Lo;AL;
-068A;Lo;AL;
-068B;Lo;AL;
-068C;Lo;AL;
-068D;Lo;AL;
-068E;Lo;AL;
-068F;Lo;AL;
-0690;Lo;AL;
-0691;Lo;AL;
-0692;Lo;AL;
-0693;Lo;AL;
-0694;Lo;AL;
-0695;Lo;AL;
-0696;Lo;AL;
-0697;Lo;AL;
-0698;Lo;AL;
-0699;Lo;AL;
-069A;Lo;AL;
-069B;Lo;AL;
-069C;Lo;AL;
-069D;Lo;AL;
-069E;Lo;AL;
-069F;Lo;AL;
-06A0;Lo;AL;
-06A1;Lo;AL;
-06A2;Lo;AL;
-06A3;Lo;AL;
-06A4;Lo;AL;
-06A5;Lo;AL;
-06A6;Lo;AL;
-06A7;Lo;AL;
-06A8;Lo;AL;
-06A9;Lo;AL;
-06AA;Lo;AL;
-06AB;Lo;AL;
-06AC;Lo;AL;
-06AD;Lo;AL;
-06AE;Lo;AL;
-06AF;Lo;AL;
-06B0;Lo;AL;
-06B1;Lo;AL;
-06B2;Lo;AL;
-06B3;Lo;AL;
-06B4;Lo;AL;
-06B5;Lo;AL;
-06B6;Lo;AL;
-06B7;Lo;AL;
-06B8;Lo;AL;
-06B9;Lo;AL;
-06BA;Lo;AL;
-06BB;Lo;AL;
-06BC;Lo;AL;
-06BD;Lo;AL;
-06BE;Lo;AL;
-06BF;Lo;AL;
-06C0;Lo;AL;
-06C1;Lo;AL;
-06C2;Lo;AL;
-06C3;Lo;AL;
-06C4;Lo;AL;
-06C5;Lo;AL;
-06C6;Lo;AL;
-06C7;Lo;AL;
-06C8;Lo;AL;
-06C9;Lo;AL;
-06CA;Lo;AL;
-06CB;Lo;AL;
-06CC;Lo;AL;
-06CD;Lo;AL;
-06CE;Lo;AL;
-06CF;Lo;AL;
-06D0;Lo;AL;
-06D1;Lo;AL;
-06D2;Lo;AL;
-06D3;Lo;AL;
-06D4;Po;AL;
-06D5;Lo;AL;
-06D6;Mn;NSM;
-06D7;Mn;NSM;
-06D8;Mn;NSM;
-06D9;Mn;NSM;
-06DA;Mn;NSM;
-06DB;Mn;NSM;
-06DC;Mn;NSM;
-06DD;Me;NSM;
-06DE;Me;NSM;
-06DF;Mn;NSM;
-06E0;Mn;NSM;
-06E1;Mn;NSM;
-06E2;Mn;NSM;
-06E3;Mn;NSM;
-06E4;Mn;NSM;
-06E5;Lm;AL;
-06E6;Lm;AL;
-06E7;Mn;NSM;
-06E8;Mn;NSM;
-06E9;So;ON;
-06EA;Mn;NSM;
-06EB;Mn;NSM;
-06EC;Mn;NSM;
-06ED;Mn;NSM;
-06F0;Nd;EN;
-06F1;Nd;EN;
-06F2;Nd;EN;
-06F3;Nd;EN;
-06F4;Nd;EN;
-06F5;Nd;EN;
-06F6;Nd;EN;
-06F7;Nd;EN;
-06F8;Nd;EN;
-06F9;Nd;EN;
-06FA;Lo;AL;
-06FB;Lo;AL;
-06FC;Lo;AL;
-06FD;So;AL;
-06FE;So;AL;
-0700;Po;AL;
-0701;Po;AL;
-0702;Po;AL;
-0703;Po;AL;
-0704;Po;AL;
-0705;Po;AL;
-0706;Po;AL;
-0707;Po;AL;
-0708;Po;AL;
-0709;Po;AL;
-070A;Po;AL;
-070B;Po;AL;
-070C;Po;AL;
-070D;Po;AL;
-070F;Cf;BN;
-0710;Lo;AL;
-0711;Mn;NSM;
-0712;Lo;AL;
-0713;Lo;AL;
-0714;Lo;AL;
-0715;Lo;AL;
-0716;Lo;AL;
-0717;Lo;AL;
-0718;Lo;AL;
-0719;Lo;AL;
-071A;Lo;AL;
-071B;Lo;AL;
-071C;Lo;AL;
-071D;Lo;AL;
-071E;Lo;AL;
-071F;Lo;AL;
-0720;Lo;AL;
-0721;Lo;AL;
-0722;Lo;AL;
-0723;Lo;AL;
-0724;Lo;AL;
-0725;Lo;AL;
-0726;Lo;AL;
-0727;Lo;AL;
-0728;Lo;AL;
-0729;Lo;AL;
-072A;Lo;AL;
-072B;Lo;AL;
-072C;Lo;AL;
-0730;Mn;NSM;
-0731;Mn;NSM;
-0732;Mn;NSM;
-0733;Mn;NSM;
-0734;Mn;NSM;
-0735;Mn;NSM;
-0736;Mn;NSM;
-0737;Mn;NSM;
-0738;Mn;NSM;
-0739;Mn;NSM;
-073A;Mn;NSM;
-073B;Mn;NSM;
-073C;Mn;NSM;
-073D;Mn;NSM;
-073E;Mn;NSM;
-073F;Mn;NSM;
-0740;Mn;NSM;
-0741;Mn;NSM;
-0742;Mn;NSM;
-0743;Mn;NSM;
-0744;Mn;NSM;
-0745;Mn;NSM;
-0746;Mn;NSM;
-0747;Mn;NSM;
-0748;Mn;NSM;
-0749;Mn;NSM;
-074A;Mn;NSM;
-0780;Lo;AL;
-0781;Lo;AL;
-0782;Lo;AL;
-0783;Lo;AL;
-0784;Lo;AL;
-0785;Lo;AL;
-0786;Lo;AL;
-0787;Lo;AL;
-0788;Lo;AL;
-0789;Lo;AL;
-078A;Lo;AL;
-078B;Lo;AL;
-078C;Lo;AL;
-078D;Lo;AL;
-078E;Lo;AL;
-078F;Lo;AL;
-0790;Lo;AL;
-0791;Lo;AL;
-0792;Lo;AL;
-0793;Lo;AL;
-0794;Lo;AL;
-0795;Lo;AL;
-0796;Lo;AL;
-0797;Lo;AL;
-0798;Lo;AL;
-0799;Lo;AL;
-079A;Lo;AL;
-079B;Lo;AL;
-079C;Lo;AL;
-079D;Lo;AL;
-079E;Lo;AL;
-079F;Lo;AL;
-07A0;Lo;AL;
-07A1;Lo;AL;
-07A2;Lo;AL;
-07A3;Lo;AL;
-07A4;Lo;AL;
-07A5;Lo;AL;
-07A6;Mn;NSM;
-07A7;Mn;NSM;
-07A8;Mn;NSM;
-07A9;Mn;NSM;
-07AA;Mn;NSM;
-07AB;Mn;NSM;
-07AC;Mn;NSM;
-07AD;Mn;NSM;
-07AE;Mn;NSM;
-07AF;Mn;NSM;
-07B0;Mn;NSM;
-0901;Mn;NSM;
-0902;Mn;NSM;
-0903;Mc;L;
-0905;Lo;L;
-0906;Lo;L;
-0907;Lo;L;
-0908;Lo;L;
-0909;Lo;L;
-090A;Lo;L;
-090B;Lo;L;
-090C;Lo;L;
-090D;Lo;L;
-090E;Lo;L;
-090F;Lo;L;
-0910;Lo;L;
-0911;Lo;L;
-0912;Lo;L;
-0913;Lo;L;
-0914;Lo;L;
-0915;Lo;L;
-0916;Lo;L;
-0917;Lo;L;
-0918;Lo;L;
-0919;Lo;L;
-091A;Lo;L;
-091B;Lo;L;
-091C;Lo;L;
-091D;Lo;L;
-091E;Lo;L;
-091F;Lo;L;
-0920;Lo;L;
-0921;Lo;L;
-0922;Lo;L;
-0923;Lo;L;
-0924;Lo;L;
-0925;Lo;L;
-0926;Lo;L;
-0927;Lo;L;
-0928;Lo;L;
-0929;Lo;L;
-092A;Lo;L;
-092B;Lo;L;
-092C;Lo;L;
-092D;Lo;L;
-092E;Lo;L;
-092F;Lo;L;
-0930;Lo;L;
-0931;Lo;L;
-0932;Lo;L;
-0933;Lo;L;
-0934;Lo;L;
-0935;Lo;L;
-0936;Lo;L;
-0937;Lo;L;
-0938;Lo;L;
-0939;Lo;L;
-093C;Mn;NSM;
-093D;Lo;L;
-093E;Mc;L;
-093F;Mc;L;
-0940;Mc;L;
-0941;Mn;NSM;
-0942;Mn;NSM;
-0943;Mn;NSM;
-0944;Mn;NSM;
-0945;Mn;NSM;
-0946;Mn;NSM;
-0947;Mn;NSM;
-0948;Mn;NSM;
-0949;Mc;L;
-094A;Mc;L;
-094B;Mc;L;
-094C;Mc;L;
-094D;Mn;NSM;
-0950;Lo;L;
-0951;Mn;NSM;
-0952;Mn;NSM;
-0953;Mn;NSM;
-0954;Mn;NSM;
-0958;Lo;L;
-0959;Lo;L;
-095A;Lo;L;
-095B;Lo;L;
-095C;Lo;L;
-095D;Lo;L;
-095E;Lo;L;
-095F;Lo;L;
-0960;Lo;L;
-0961;Lo;L;
-0962;Mn;NSM;
-0963;Mn;NSM;
-0964;Po;L;
-0965;Po;L;
-0966;Nd;L;
-0967;Nd;L;
-0968;Nd;L;
-0969;Nd;L;
-096A;Nd;L;
-096B;Nd;L;
-096C;Nd;L;
-096D;Nd;L;
-096E;Nd;L;
-096F;Nd;L;
-0970;Po;L;
-0981;Mn;NSM;
-0982;Mc;L;
-0983;Mc;L;
-0985;Lo;L;
-0986;Lo;L;
-0987;Lo;L;
-0988;Lo;L;
-0989;Lo;L;
-098A;Lo;L;
-098B;Lo;L;
-098C;Lo;L;
-098F;Lo;L;
-0990;Lo;L;
-0993;Lo;L;
-0994;Lo;L;
-0995;Lo;L;
-0996;Lo;L;
-0997;Lo;L;
-0998;Lo;L;
-0999;Lo;L;
-099A;Lo;L;
-099B;Lo;L;
-099C;Lo;L;
-099D;Lo;L;
-099E;Lo;L;
-099F;Lo;L;
-09A0;Lo;L;
-09A1;Lo;L;
-09A2;Lo;L;
-09A3;Lo;L;
-09A4;Lo;L;
-09A5;Lo;L;
-09A6;Lo;L;
-09A7;Lo;L;
-09A8;Lo;L;
-09AA;Lo;L;
-09AB;Lo;L;
-09AC;Lo;L;
-09AD;Lo;L;
-09AE;Lo;L;
-09AF;Lo;L;
-09B0;Lo;L;
-09B2;Lo;L;
-09B6;Lo;L;
-09B7;Lo;L;
-09B8;Lo;L;
-09B9;Lo;L;
-09BC;Mn;NSM;
-09BE;Mc;L;
-09BF;Mc;L;
-09C0;Mc;L;
-09C1;Mn;NSM;
-09C2;Mn;NSM;
-09C3;Mn;NSM;
-09C4;Mn;NSM;
-09C7;Mc;L;
-09C8;Mc;L;
-09CB;Mc;L;
-09CC;Mc;L;
-09CD;Mn;NSM;
-09D7;Mc;L;
-09DC;Lo;L;
-09DD;Lo;L;
-09DF;Lo;L;
-09E0;Lo;L;
-09E1;Lo;L;
-09E2;Mn;NSM;
-09E3;Mn;NSM;
-09E6;Nd;L;
-09E7;Nd;L;
-09E8;Nd;L;
-09E9;Nd;L;
-09EA;Nd;L;
-09EB;Nd;L;
-09EC;Nd;L;
-09ED;Nd;L;
-09EE;Nd;L;
-09EF;Nd;L;
-09F0;Lo;L;
-09F1;Lo;L;
-09F2;Sc;ET;
-09F3;Sc;ET;
-09F4;No;L;
-09F5;No;L;
-09F6;No;L;
-09F7;No;L;
-09F8;No;L;
-09F9;No;L;
-09FA;So;L;
-0A02;Mn;NSM;
-0A05;Lo;L;
-0A06;Lo;L;
-0A07;Lo;L;
-0A08;Lo;L;
-0A09;Lo;L;
-0A0A;Lo;L;
-0A0F;Lo;L;
-0A10;Lo;L;
-0A13;Lo;L;
-0A14;Lo;L;
-0A15;Lo;L;
-0A16;Lo;L;
-0A17;Lo;L;
-0A18;Lo;L;
-0A19;Lo;L;
-0A1A;Lo;L;
-0A1B;Lo;L;
-0A1C;Lo;L;
-0A1D;Lo;L;
-0A1E;Lo;L;
-0A1F;Lo;L;
-0A20;Lo;L;
-0A21;Lo;L;
-0A22;Lo;L;
-0A23;Lo;L;
-0A24;Lo;L;
-0A25;Lo;L;
-0A26;Lo;L;
-0A27;Lo;L;
-0A28;Lo;L;
-0A2A;Lo;L;
-0A2B;Lo;L;
-0A2C;Lo;L;
-0A2D;Lo;L;
-0A2E;Lo;L;
-0A2F;Lo;L;
-0A30;Lo;L;
-0A32;Lo;L;
-0A33;Lo;L;
-0A35;Lo;L;
-0A36;Lo;L;
-0A38;Lo;L;
-0A39;Lo;L;
-0A3C;Mn;NSM;
-0A3E;Mc;L;
-0A3F;Mc;L;
-0A40;Mc;L;
-0A41;Mn;NSM;
-0A42;Mn;NSM;
-0A47;Mn;NSM;
-0A48;Mn;NSM;
-0A4B;Mn;NSM;
-0A4C;Mn;NSM;
-0A4D;Mn;NSM;
-0A59;Lo;L;
-0A5A;Lo;L;
-0A5B;Lo;L;
-0A5C;Lo;L;
-0A5E;Lo;L;
-0A66;Nd;L;
-0A67;Nd;L;
-0A68;Nd;L;
-0A69;Nd;L;
-0A6A;Nd;L;
-0A6B;Nd;L;
-0A6C;Nd;L;
-0A6D;Nd;L;
-0A6E;Nd;L;
-0A6F;Nd;L;
-0A70;Mn;NSM;
-0A71;Mn;NSM;
-0A72;Lo;L;
-0A73;Lo;L;
-0A74;Lo;L;
-0A81;Mn;NSM;
-0A82;Mn;NSM;
-0A83;Mc;L;
-0A85;Lo;L;
-0A86;Lo;L;
-0A87;Lo;L;
-0A88;Lo;L;
-0A89;Lo;L;
-0A8A;Lo;L;
-0A8B;Lo;L;
-0A8D;Lo;L;
-0A8F;Lo;L;
-0A90;Lo;L;
-0A91;Lo;L;
-0A93;Lo;L;
-0A94;Lo;L;
-0A95;Lo;L;
-0A96;Lo;L;
-0A97;Lo;L;
-0A98;Lo;L;
-0A99;Lo;L;
-0A9A;Lo;L;
-0A9B;Lo;L;
-0A9C;Lo;L;
-0A9D;Lo;L;
-0A9E;Lo;L;
-0A9F;Lo;L;
-0AA0;Lo;L;
-0AA1;Lo;L;
-0AA2;Lo;L;
-0AA3;Lo;L;
-0AA4;Lo;L;
-0AA5;Lo;L;
-0AA6;Lo;L;
-0AA7;Lo;L;
-0AA8;Lo;L;
-0AAA;Lo;L;
-0AAB;Lo;L;
-0AAC;Lo;L;
-0AAD;Lo;L;
-0AAE;Lo;L;
-0AAF;Lo;L;
-0AB0;Lo;L;
-0AB2;Lo;L;
-0AB3;Lo;L;
-0AB5;Lo;L;
-0AB6;Lo;L;
-0AB7;Lo;L;
-0AB8;Lo;L;
-0AB9;Lo;L;
-0ABC;Mn;NSM;
-0ABD;Lo;L;
-0ABE;Mc;L;
-0ABF;Mc;L;
-0AC0;Mc;L;
-0AC1;Mn;NSM;
-0AC2;Mn;NSM;
-0AC3;Mn;NSM;
-0AC4;Mn;NSM;
-0AC5;Mn;NSM;
-0AC7;Mn;NSM;
-0AC8;Mn;NSM;
-0AC9;Mc;L;
-0ACB;Mc;L;
-0ACC;Mc;L;
-0ACD;Mn;NSM;
-0AD0;Lo;L;
-0AE0;Lo;L;
-0AE6;Nd;L;
-0AE7;Nd;L;
-0AE8;Nd;L;
-0AE9;Nd;L;
-0AEA;Nd;L;
-0AEB;Nd;L;
-0AEC;Nd;L;
-0AED;Nd;L;
-0AEE;Nd;L;
-0AEF;Nd;L;
-0B01;Mn;NSM;
-0B02;Mc;L;
-0B03;Mc;L;
-0B05;Lo;L;
-0B06;Lo;L;
-0B07;Lo;L;
-0B08;Lo;L;
-0B09;Lo;L;
-0B0A;Lo;L;
-0B0B;Lo;L;
-0B0C;Lo;L;
-0B0F;Lo;L;
-0B10;Lo;L;
-0B13;Lo;L;
-0B14;Lo;L;
-0B15;Lo;L;
-0B16;Lo;L;
-0B17;Lo;L;
-0B18;Lo;L;
-0B19;Lo;L;
-0B1A;Lo;L;
-0B1B;Lo;L;
-0B1C;Lo;L;
-0B1D;Lo;L;
-0B1E;Lo;L;
-0B1F;Lo;L;
-0B20;Lo;L;
-0B21;Lo;L;
-0B22;Lo;L;
-0B23;Lo;L;
-0B24;Lo;L;
-0B25;Lo;L;
-0B26;Lo;L;
-0B27;Lo;L;
-0B28;Lo;L;
-0B2A;Lo;L;
-0B2B;Lo;L;
-0B2C;Lo;L;
-0B2D;Lo;L;
-0B2E;Lo;L;
-0B2F;Lo;L;
-0B30;Lo;L;
-0B32;Lo;L;
-0B33;Lo;L;
-0B36;Lo;L;
-0B37;Lo;L;
-0B38;Lo;L;
-0B39;Lo;L;
-0B3C;Mn;NSM;
-0B3D;Lo;L;
-0B3E;Mc;L;
-0B3F;Mn;NSM;
-0B40;Mc;L;
-0B41;Mn;NSM;
-0B42;Mn;NSM;
-0B43;Mn;NSM;
-0B47;Mc;L;
-0B48;Mc;L;
-0B4B;Mc;L;
-0B4C;Mc;L;
-0B4D;Mn;NSM;
-0B56;Mn;NSM;
-0B57;Mc;L;
-0B5C;Lo;L;
-0B5D;Lo;L;
-0B5F;Lo;L;
-0B60;Lo;L;
-0B61;Lo;L;
-0B66;Nd;L;
-0B67;Nd;L;
-0B68;Nd;L;
-0B69;Nd;L;
-0B6A;Nd;L;
-0B6B;Nd;L;
-0B6C;Nd;L;
-0B6D;Nd;L;
-0B6E;Nd;L;
-0B6F;Nd;L;
-0B70;So;L;
-0B82;Mn;NSM;
-0B83;Mc;L;
-0B85;Lo;L;
-0B86;Lo;L;
-0B87;Lo;L;
-0B88;Lo;L;
-0B89;Lo;L;
-0B8A;Lo;L;
-0B8E;Lo;L;
-0B8F;Lo;L;
-0B90;Lo;L;
-0B92;Lo;L;
-0B93;Lo;L;
-0B94;Lo;L;
-0B95;Lo;L;
-0B99;Lo;L;
-0B9A;Lo;L;
-0B9C;Lo;L;
-0B9E;Lo;L;
-0B9F;Lo;L;
-0BA3;Lo;L;
-0BA4;Lo;L;
-0BA8;Lo;L;
-0BA9;Lo;L;
-0BAA;Lo;L;
-0BAE;Lo;L;
-0BAF;Lo;L;
-0BB0;Lo;L;
-0BB1;Lo;L;
-0BB2;Lo;L;
-0BB3;Lo;L;
-0BB4;Lo;L;
-0BB5;Lo;L;
-0BB7;Lo;L;
-0BB8;Lo;L;
-0BB9;Lo;L;
-0BBE;Mc;L;
-0BBF;Mc;L;
-0BC0;Mn;NSM;
-0BC1;Mc;L;
-0BC2;Mc;L;
-0BC6;Mc;L;
-0BC7;Mc;L;
-0BC8;Mc;L;
-0BCA;Mc;L;
-0BCB;Mc;L;
-0BCC;Mc;L;
-0BCD;Mn;NSM;
-0BD7;Mc;L;
-0BE7;Nd;L;
-0BE8;Nd;L;
-0BE9;Nd;L;
-0BEA;Nd;L;
-0BEB;Nd;L;
-0BEC;Nd;L;
-0BED;Nd;L;
-0BEE;Nd;L;
-0BEF;Nd;L;
-0BF0;No;L;
-0BF1;No;L;
-0BF2;No;L;
-0C01;Mc;L;
-0C02;Mc;L;
-0C03;Mc;L;
-0C05;Lo;L;
-0C06;Lo;L;
-0C07;Lo;L;
-0C08;Lo;L;
-0C09;Lo;L;
-0C0A;Lo;L;
-0C0B;Lo;L;
-0C0C;Lo;L;
-0C0E;Lo;L;
-0C0F;Lo;L;
-0C10;Lo;L;
-0C12;Lo;L;
-0C13;Lo;L;
-0C14;Lo;L;
-0C15;Lo;L;
-0C16;Lo;L;
-0C17;Lo;L;
-0C18;Lo;L;
-0C19;Lo;L;
-0C1A;Lo;L;
-0C1B;Lo;L;
-0C1C;Lo;L;
-0C1D;Lo;L;
-0C1E;Lo;L;
-0C1F;Lo;L;
-0C20;Lo;L;
-0C21;Lo;L;
-0C22;Lo;L;
-0C23;Lo;L;
-0C24;Lo;L;
-0C25;Lo;L;
-0C26;Lo;L;
-0C27;Lo;L;
-0C28;Lo;L;
-0C2A;Lo;L;
-0C2B;Lo;L;
-0C2C;Lo;L;
-0C2D;Lo;L;
-0C2E;Lo;L;
-0C2F;Lo;L;
-0C30;Lo;L;
-0C31;Lo;L;
-0C32;Lo;L;
-0C33;Lo;L;
-0C35;Lo;L;
-0C36;Lo;L;
-0C37;Lo;L;
-0C38;Lo;L;
-0C39;Lo;L;
-0C3E;Mn;NSM;
-0C3F;Mn;NSM;
-0C40;Mn;NSM;
-0C41;Mc;L;
-0C42;Mc;L;
-0C43;Mc;L;
-0C44;Mc;L;
-0C46;Mn;NSM;
-0C47;Mn;NSM;
-0C48;Mn;NSM;
-0C4A;Mn;NSM;
-0C4B;Mn;NSM;
-0C4C;Mn;NSM;
-0C4D;Mn;NSM;
-0C55;Mn;NSM;
-0C56;Mn;NSM;
-0C60;Lo;L;
-0C61;Lo;L;
-0C66;Nd;L;
-0C67;Nd;L;
-0C68;Nd;L;
-0C69;Nd;L;
-0C6A;Nd;L;
-0C6B;Nd;L;
-0C6C;Nd;L;
-0C6D;Nd;L;
-0C6E;Nd;L;
-0C6F;Nd;L;
-0C82;Mc;L;
-0C83;Mc;L;
-0C85;Lo;L;
-0C86;Lo;L;
-0C87;Lo;L;
-0C88;Lo;L;
-0C89;Lo;L;
-0C8A;Lo;L;
-0C8B;Lo;L;
-0C8C;Lo;L;
-0C8E;Lo;L;
-0C8F;Lo;L;
-0C90;Lo;L;
-0C92;Lo;L;
-0C93;Lo;L;
-0C94;Lo;L;
-0C95;Lo;L;
-0C96;Lo;L;
-0C97;Lo;L;
-0C98;Lo;L;
-0C99;Lo;L;
-0C9A;Lo;L;
-0C9B;Lo;L;
-0C9C;Lo;L;
-0C9D;Lo;L;
-0C9E;Lo;L;
-0C9F;Lo;L;
-0CA0;Lo;L;
-0CA1;Lo;L;
-0CA2;Lo;L;
-0CA3;Lo;L;
-0CA4;Lo;L;
-0CA5;Lo;L;
-0CA6;Lo;L;
-0CA7;Lo;L;
-0CA8;Lo;L;
-0CAA;Lo;L;
-0CAB;Lo;L;
-0CAC;Lo;L;
-0CAD;Lo;L;
-0CAE;Lo;L;
-0CAF;Lo;L;
-0CB0;Lo;L;
-0CB1;Lo;L;
-0CB2;Lo;L;
-0CB3;Lo;L;
-0CB5;Lo;L;
-0CB6;Lo;L;
-0CB7;Lo;L;
-0CB8;Lo;L;
-0CB9;Lo;L;
-0CBE;Mc;L;
-0CBF;Mn;NSM;
-0CC0;Mc;L;
-0CC1;Mc;L;
-0CC2;Mc;L;
-0CC3;Mc;L;
-0CC4;Mc;L;
-0CC6;Mn;NSM;
-0CC7;Mc;L;
-0CC8;Mc;L;
-0CCA;Mc;L;
-0CCB;Mc;L;
-0CCC;Mn;NSM;
-0CCD;Mn;NSM;
-0CD5;Mc;L;
-0CD6;Mc;L;
-0CDE;Lo;L;
-0CE0;Lo;L;
-0CE1;Lo;L;
-0CE6;Nd;L;
-0CE7;Nd;L;
-0CE8;Nd;L;
-0CE9;Nd;L;
-0CEA;Nd;L;
-0CEB;Nd;L;
-0CEC;Nd;L;
-0CED;Nd;L;
-0CEE;Nd;L;
-0CEF;Nd;L;
-0D02;Mc;L;
-0D03;Mc;L;
-0D05;Lo;L;
-0D06;Lo;L;
-0D07;Lo;L;
-0D08;Lo;L;
-0D09;Lo;L;
-0D0A;Lo;L;
-0D0B;Lo;L;
-0D0C;Lo;L;
-0D0E;Lo;L;
-0D0F;Lo;L;
-0D10;Lo;L;
-0D12;Lo;L;
-0D13;Lo;L;
-0D14;Lo;L;
-0D15;Lo;L;
-0D16;Lo;L;
-0D17;Lo;L;
-0D18;Lo;L;
-0D19;Lo;L;
-0D1A;Lo;L;
-0D1B;Lo;L;
-0D1C;Lo;L;
-0D1D;Lo;L;
-0D1E;Lo;L;
-0D1F;Lo;L;
-0D20;Lo;L;
-0D21;Lo;L;
-0D22;Lo;L;
-0D23;Lo;L;
-0D24;Lo;L;
-0D25;Lo;L;
-0D26;Lo;L;
-0D27;Lo;L;
-0D28;Lo;L;
-0D2A;Lo;L;
-0D2B;Lo;L;
-0D2C;Lo;L;
-0D2D;Lo;L;
-0D2E;Lo;L;
-0D2F;Lo;L;
-0D30;Lo;L;
-0D31;Lo;L;
-0D32;Lo;L;
-0D33;Lo;L;
-0D34;Lo;L;
-0D35;Lo;L;
-0D36;Lo;L;
-0D37;Lo;L;
-0D38;Lo;L;
-0D39;Lo;L;
-0D3E;Mc;L;
-0D3F;Mc;L;
-0D40;Mc;L;
-0D41;Mn;NSM;
-0D42;Mn;NSM;
-0D43;Mn;NSM;
-0D46;Mc;L;
-0D47;Mc;L;
-0D48;Mc;L;
-0D4A;Mc;L;
-0D4B;Mc;L;
-0D4C;Mc;L;
-0D4D;Mn;NSM;
-0D57;Mc;L;
-0D60;Lo;L;
-0D61;Lo;L;
-0D66;Nd;L;
-0D67;Nd;L;
-0D68;Nd;L;
-0D69;Nd;L;
-0D6A;Nd;L;
-0D6B;Nd;L;
-0D6C;Nd;L;
-0D6D;Nd;L;
-0D6E;Nd;L;
-0D6F;Nd;L;
-0D82;Mc;L;
-0D83;Mc;L;
-0D85;Lo;L;
-0D86;Lo;L;
-0D87;Lo;L;
-0D88;Lo;L;
-0D89;Lo;L;
-0D8A;Lo;L;
-0D8B;Lo;L;
-0D8C;Lo;L;
-0D8D;Lo;L;
-0D8E;Lo;L;
-0D8F;Lo;L;
-0D90;Lo;L;
-0D91;Lo;L;
-0D92;Lo;L;
-0D93;Lo;L;
-0D94;Lo;L;
-0D95;Lo;L;
-0D96;Lo;L;
-0D9A;Lo;L;
-0D9B;Lo;L;
-0D9C;Lo;L;
-0D9D;Lo;L;
-0D9E;Lo;L;
-0D9F;Lo;L;
-0DA0;Lo;L;
-0DA1;Lo;L;
-0DA2;Lo;L;
-0DA3;Lo;L;
-0DA4;Lo;L;
-0DA5;Lo;L;
-0DA6;Lo;L;
-0DA7;Lo;L;
-0DA8;Lo;L;
-0DA9;Lo;L;
-0DAA;Lo;L;
-0DAB;Lo;L;
-0DAC;Lo;L;
-0DAD;Lo;L;
-0DAE;Lo;L;
-0DAF;Lo;L;
-0DB0;Lo;L;
-0DB1;Lo;L;
-0DB3;Lo;L;
-0DB4;Lo;L;
-0DB5;Lo;L;
-0DB6;Lo;L;
-0DB7;Lo;L;
-0DB8;Lo;L;
-0DB9;Lo;L;
-0DBA;Lo;L;
-0DBB;Lo;L;
-0DBD;Lo;L;
-0DC0;Lo;L;
-0DC1;Lo;L;
-0DC2;Lo;L;
-0DC3;Lo;L;
-0DC4;Lo;L;
-0DC5;Lo;L;
-0DC6;Lo;L;
-0DCA;Mn;NSM;
-0DCF;Mc;L;
-0DD0;Mc;L;
-0DD1;Mc;L;
-0DD2;Mn;NSM;
-0DD3;Mn;NSM;
-0DD4;Mn;NSM;
-0DD6;Mn;NSM;
-0DD8;Mc;L;
-0DD9;Mc;L;
-0DDA;Mc;L;
-0DDB;Mc;L;
-0DDC;Mc;L;
-0DDD;Mc;L;
-0DDE;Mc;L;
-0DDF;Mc;L;
-0DF2;Mc;L;
-0DF3;Mc;L;
-0DF4;Po;L;
-0E01;Lo;L;
-0E02;Lo;L;
-0E03;Lo;L;
-0E04;Lo;L;
-0E05;Lo;L;
-0E06;Lo;L;
-0E07;Lo;L;
-0E08;Lo;L;
-0E09;Lo;L;
-0E0A;Lo;L;
-0E0B;Lo;L;
-0E0C;Lo;L;
-0E0D;Lo;L;
-0E0E;Lo;L;
-0E0F;Lo;L;
-0E10;Lo;L;
-0E11;Lo;L;
-0E12;Lo;L;
-0E13;Lo;L;
-0E14;Lo;L;
-0E15;Lo;L;
-0E16;Lo;L;
-0E17;Lo;L;
-0E18;Lo;L;
-0E19;Lo;L;
-0E1A;Lo;L;
-0E1B;Lo;L;
-0E1C;Lo;L;
-0E1D;Lo;L;
-0E1E;Lo;L;
-0E1F;Lo;L;
-0E20;Lo;L;
-0E21;Lo;L;
-0E22;Lo;L;
-0E23;Lo;L;
-0E24;Lo;L;
-0E25;Lo;L;
-0E26;Lo;L;
-0E27;Lo;L;
-0E28;Lo;L;
-0E29;Lo;L;
-0E2A;Lo;L;
-0E2B;Lo;L;
-0E2C;Lo;L;
-0E2D;Lo;L;
-0E2E;Lo;L;
-0E2F;Lo;L;
-0E30;Lo;L;
-0E31;Mn;NSM;
-0E32;Lo;L;
-0E33;Lo;L;
-0E34;Mn;NSM;
-0E35;Mn;NSM;
-0E36;Mn;NSM;
-0E37;Mn;NSM;
-0E38;Mn;NSM;
-0E39;Mn;NSM;
-0E3A;Mn;NSM;
-0E3F;Sc;ET;
-0E40;Lo;L;
-0E41;Lo;L;
-0E42;Lo;L;
-0E43;Lo;L;
-0E44;Lo;L;
-0E45;Lo;L;
-0E46;Lm;L;
-0E47;Mn;NSM;
-0E48;Mn;NSM;
-0E49;Mn;NSM;
-0E4A;Mn;NSM;
-0E4B;Mn;NSM;
-0E4C;Mn;NSM;
-0E4D;Mn;NSM;
-0E4E;Mn;NSM;
-0E4F;Po;L;
-0E50;Nd;L;
-0E51;Nd;L;
-0E52;Nd;L;
-0E53;Nd;L;
-0E54;Nd;L;
-0E55;Nd;L;
-0E56;Nd;L;
-0E57;Nd;L;
-0E58;Nd;L;
-0E59;Nd;L;
-0E5A;Po;L;
-0E5B;Po;L;
-0E81;Lo;L;
-0E82;Lo;L;
-0E84;Lo;L;
-0E87;Lo;L;
-0E88;Lo;L;
-0E8A;Lo;L;
-0E8D;Lo;L;
-0E94;Lo;L;
-0E95;Lo;L;
-0E96;Lo;L;
-0E97;Lo;L;
-0E99;Lo;L;
-0E9A;Lo;L;
-0E9B;Lo;L;
-0E9C;Lo;L;
-0E9D;Lo;L;
-0E9E;Lo;L;
-0E9F;Lo;L;
-0EA1;Lo;L;
-0EA2;Lo;L;
-0EA3;Lo;L;
-0EA5;Lo;L;
-0EA7;Lo;L;
-0EAA;Lo;L;
-0EAB;Lo;L;
-0EAD;Lo;L;
-0EAE;Lo;L;
-0EAF;Lo;L;
-0EB0;Lo;L;
-0EB1;Mn;NSM;
-0EB2;Lo;L;
-0EB3;Lo;L;
-0EB4;Mn;NSM;
-0EB5;Mn;NSM;
-0EB6;Mn;NSM;
-0EB7;Mn;NSM;
-0EB8;Mn;NSM;
-0EB9;Mn;NSM;
-0EBB;Mn;NSM;
-0EBC;Mn;NSM;
-0EBD;Lo;L;
-0EC0;Lo;L;
-0EC1;Lo;L;
-0EC2;Lo;L;
-0EC3;Lo;L;
-0EC4;Lo;L;
-0EC6;Lm;L;
-0EC8;Mn;NSM;
-0EC9;Mn;NSM;
-0ECA;Mn;NSM;
-0ECB;Mn;NSM;
-0ECC;Mn;NSM;
-0ECD;Mn;NSM;
-0ED0;Nd;L;
-0ED1;Nd;L;
-0ED2;Nd;L;
-0ED3;Nd;L;
-0ED4;Nd;L;
-0ED5;Nd;L;
-0ED6;Nd;L;
-0ED7;Nd;L;
-0ED8;Nd;L;
-0ED9;Nd;L;
-0EDC;Lo;L;
-0EDD;Lo;L;
-0F00;Lo;L;
-0F01;So;L;
-0F02;So;L;
-0F03;So;L;
-0F04;Po;L;
-0F05;Po;L;
-0F06;Po;L;
-0F07;Po;L;
-0F08;Po;L;
-0F09;Po;L;
-0F0A;Po;L;
-0F0B;Po;L;
-0F0C;Po;L;
-0F0D;Po;L;
-0F0E;Po;L;
-0F0F;Po;L;
-0F10;Po;L;
-0F11;Po;L;
-0F12;Po;L;
-0F13;So;L;
-0F14;So;L;
-0F15;So;L;
-0F16;So;L;
-0F17;So;L;
-0F18;Mn;NSM;
-0F19;Mn;NSM;
-0F1A;So;L;
-0F1B;So;L;
-0F1C;So;L;
-0F1D;So;L;
-0F1E;So;L;
-0F1F;So;L;
-0F20;Nd;L;
-0F21;Nd;L;
-0F22;Nd;L;
-0F23;Nd;L;
-0F24;Nd;L;
-0F25;Nd;L;
-0F26;Nd;L;
-0F27;Nd;L;
-0F28;Nd;L;
-0F29;Nd;L;
-0F2A;No;L;
-0F2B;No;L;
-0F2C;No;L;
-0F2D;No;L;
-0F2E;No;L;
-0F2F;No;L;
-0F30;No;L;
-0F31;No;L;
-0F32;No;L;
-0F33;No;L;
-0F34;So;L;
-0F35;Mn;NSM;
-0F36;So;L;
-0F37;Mn;NSM;
-0F38;So;L;
-0F39;Mn;NSM;
-0F3A;Ps;ON;
-0F3B;Pe;ON;
-0F3C;Ps;ON;
-0F3D;Pe;ON;
-0F3E;Mc;L;
-0F3F;Mc;L;
-0F40;Lo;L;
-0F41;Lo;L;
-0F42;Lo;L;
-0F43;Lo;L;
-0F44;Lo;L;
-0F45;Lo;L;
-0F46;Lo;L;
-0F47;Lo;L;
-0F49;Lo;L;
-0F4A;Lo;L;
-0F4B;Lo;L;
-0F4C;Lo;L;
-0F4D;Lo;L;
-0F4E;Lo;L;
-0F4F;Lo;L;
-0F50;Lo;L;
-0F51;Lo;L;
-0F52;Lo;L;
-0F53;Lo;L;
-0F54;Lo;L;
-0F55;Lo;L;
-0F56;Lo;L;
-0F57;Lo;L;
-0F58;Lo;L;
-0F59;Lo;L;
-0F5A;Lo;L;
-0F5B;Lo;L;
-0F5C;Lo;L;
-0F5D;Lo;L;
-0F5E;Lo;L;
-0F5F;Lo;L;
-0F60;Lo;L;
-0F61;Lo;L;
-0F62;Lo;L;
-0F63;Lo;L;
-0F64;Lo;L;
-0F65;Lo;L;
-0F66;Lo;L;
-0F67;Lo;L;
-0F68;Lo;L;
-0F69;Lo;L;
-0F6A;Lo;L;
-0F71;Mn;NSM;
-0F72;Mn;NSM;
-0F73;Mn;NSM;
-0F74;Mn;NSM;
-0F75;Mn;NSM;
-0F76;Mn;NSM;
-0F77;Mn;NSM;
-0F78;Mn;NSM;
-0F79;Mn;NSM;
-0F7A;Mn;NSM;
-0F7B;Mn;NSM;
-0F7C;Mn;NSM;
-0F7D;Mn;NSM;
-0F7E;Mn;NSM;
-0F7F;Mc;L;
-0F80;Mn;NSM;
-0F81;Mn;NSM;
-0F82;Mn;NSM;
-0F83;Mn;NSM;
-0F84;Mn;NSM;
-0F85;Po;L;
-0F86;Mn;NSM;
-0F87;Mn;NSM;
-0F88;Lo;L;
-0F89;Lo;L;
-0F8A;Lo;L;
-0F8B;Lo;L;
-0F90;Mn;NSM;
-0F91;Mn;NSM;
-0F92;Mn;NSM;
-0F93;Mn;NSM;
-0F94;Mn;NSM;
-0F95;Mn;NSM;
-0F96;Mn;NSM;
-0F97;Mn;NSM;
-0F99;Mn;NSM;
-0F9A;Mn;NSM;
-0F9B;Mn;NSM;
-0F9C;Mn;NSM;
-0F9D;Mn;NSM;
-0F9E;Mn;NSM;
-0F9F;Mn;NSM;
-0FA0;Mn;NSM;
-0FA1;Mn;NSM;
-0FA2;Mn;NSM;
-0FA3;Mn;NSM;
-0FA4;Mn;NSM;
-0FA5;Mn;NSM;
-0FA6;Mn;NSM;
-0FA7;Mn;NSM;
-0FA8;Mn;NSM;
-0FA9;Mn;NSM;
-0FAA;Mn;NSM;
-0FAB;Mn;NSM;
-0FAC;Mn;NSM;
-0FAD;Mn;NSM;
-0FAE;Mn;NSM;
-0FAF;Mn;NSM;
-0FB0;Mn;NSM;
-0FB1;Mn;NSM;
-0FB2;Mn;NSM;
-0FB3;Mn;NSM;
-0FB4;Mn;NSM;
-0FB5;Mn;NSM;
-0FB6;Mn;NSM;
-0FB7;Mn;NSM;
-0FB8;Mn;NSM;
-0FB9;Mn;NSM;
-0FBA;Mn;NSM;
-0FBB;Mn;NSM;
-0FBC;Mn;NSM;
-0FBE;So;L;
-0FBF;So;L;
-0FC0;So;L;
-0FC1;So;L;
-0FC2;So;L;
-0FC3;So;L;
-0FC4;So;L;
-0FC5;So;L;
-0FC6;Mn;NSM;
-0FC7;So;L;
-0FC8;So;L;
-0FC9;So;L;
-0FCA;So;L;
-0FCB;So;L;
-0FCC;So;L;
-0FCF;So;L;
-1000;Lo;L;
-1001;Lo;L;
-1002;Lo;L;
-1003;Lo;L;
-1004;Lo;L;
-1005;Lo;L;
-1006;Lo;L;
-1007;Lo;L;
-1008;Lo;L;
-1009;Lo;L;
-100A;Lo;L;
-100B;Lo;L;
-100C;Lo;L;
-100D;Lo;L;
-100E;Lo;L;
-100F;Lo;L;
-1010;Lo;L;
-1011;Lo;L;
-1012;Lo;L;
-1013;Lo;L;
-1014;Lo;L;
-1015;Lo;L;
-1016;Lo;L;
-1017;Lo;L;
-1018;Lo;L;
-1019;Lo;L;
-101A;Lo;L;
-101B;Lo;L;
-101C;Lo;L;
-101D;Lo;L;
-101E;Lo;L;
-101F;Lo;L;
-1020;Lo;L;
-1021;Lo;L;
-1023;Lo;L;
-1024;Lo;L;
-1025;Lo;L;
-1026;Lo;L;
-1027;Lo;L;
-1029;Lo;L;
-102A;Lo;L;
-102C;Mc;L;
-102D;Mn;NSM;
-102E;Mn;NSM;
-102F;Mn;NSM;
-1030;Mn;NSM;
-1031;Mc;L;
-1032;Mn;NSM;
-1036;Mn;NSM;
-1037;Mn;NSM;
-1038;Mc;L;
-1039;Mn;NSM;
-1040;Nd;L;
-1041;Nd;L;
-1042;Nd;L;
-1043;Nd;L;
-1044;Nd;L;
-1045;Nd;L;
-1046;Nd;L;
-1047;Nd;L;
-1048;Nd;L;
-1049;Nd;L;
-104A;Po;L;
-104B;Po;L;
-104C;Po;L;
-104D;Po;L;
-104E;Po;L;
-104F;Po;L;
-1050;Lo;L;
-1051;Lo;L;
-1052;Lo;L;
-1053;Lo;L;
-1054;Lo;L;
-1055;Lo;L;
-1056;Mc;L;
-1057;Mc;L;
-1058;Mn;NSM;
-1059;Mn;NSM;
-10A0;Lu;L;
-10A1;Lu;L;
-10A2;Lu;L;
-10A3;Lu;L;
-10A4;Lu;L;
-10A5;Lu;L;
-10A6;Lu;L;
-10A7;Lu;L;
-10A8;Lu;L;
-10A9;Lu;L;
-10AA;Lu;L;
-10AB;Lu;L;
-10AC;Lu;L;
-10AD;Lu;L;
-10AE;Lu;L;
-10AF;Lu;L;
-10B0;Lu;L;
-10B1;Lu;L;
-10B2;Lu;L;
-10B3;Lu;L;
-10B4;Lu;L;
-10B5;Lu;L;
-10B6;Lu;L;
-10B7;Lu;L;
-10B8;Lu;L;
-10B9;Lu;L;
-10BA;Lu;L;
-10BB;Lu;L;
-10BC;Lu;L;
-10BD;Lu;L;
-10BE;Lu;L;
-10BF;Lu;L;
-10C0;Lu;L;
-10C1;Lu;L;
-10C2;Lu;L;
-10C3;Lu;L;
-10C4;Lu;L;
-10C5;Lu;L;
-10D0;Lo;L;
-10D1;Lo;L;
-10D2;Lo;L;
-10D3;Lo;L;
-10D4;Lo;L;
-10D5;Lo;L;
-10D6;Lo;L;
-10D7;Lo;L;
-10D8;Lo;L;
-10D9;Lo;L;
-10DA;Lo;L;
-10DB;Lo;L;
-10DC;Lo;L;
-10DD;Lo;L;
-10DE;Lo;L;
-10DF;Lo;L;
-10E0;Lo;L;
-10E1;Lo;L;
-10E2;Lo;L;
-10E3;Lo;L;
-10E4;Lo;L;
-10E5;Lo;L;
-10E6;Lo;L;
-10E7;Lo;L;
-10E8;Lo;L;
-10E9;Lo;L;
-10EA;Lo;L;
-10EB;Lo;L;
-10EC;Lo;L;
-10ED;Lo;L;
-10EE;Lo;L;
-10EF;Lo;L;
-10F0;Lo;L;
-10F1;Lo;L;
-10F2;Lo;L;
-10F3;Lo;L;
-10F4;Lo;L;
-10F5;Lo;L;
-10F6;Lo;L;
-10FB;Po;L;
-1100;Lo;L;
-1101;Lo;L;
-1102;Lo;L;
-1103;Lo;L;
-1104;Lo;L;
-1105;Lo;L;
-1106;Lo;L;
-1107;Lo;L;
-1108;Lo;L;
-1109;Lo;L;
-110A;Lo;L;
-110B;Lo;L;
-110C;Lo;L;
-110D;Lo;L;
-110E;Lo;L;
-110F;Lo;L;
-1110;Lo;L;
-1111;Lo;L;
-1112;Lo;L;
-1113;Lo;L;
-1114;Lo;L;
-1115;Lo;L;
-1116;Lo;L;
-1117;Lo;L;
-1118;Lo;L;
-1119;Lo;L;
-111A;Lo;L;
-111B;Lo;L;
-111C;Lo;L;
-111D;Lo;L;
-111E;Lo;L;
-111F;Lo;L;
-1120;Lo;L;
-1121;Lo;L;
-1122;Lo;L;
-1123;Lo;L;
-1124;Lo;L;
-1125;Lo;L;
-1126;Lo;L;
-1127;Lo;L;
-1128;Lo;L;
-1129;Lo;L;
-112A;Lo;L;
-112B;Lo;L;
-112C;Lo;L;
-112D;Lo;L;
-112E;Lo;L;
-112F;Lo;L;
-1130;Lo;L;
-1131;Lo;L;
-1132;Lo;L;
-1133;Lo;L;
-1134;Lo;L;
-1135;Lo;L;
-1136;Lo;L;
-1137;Lo;L;
-1138;Lo;L;
-1139;Lo;L;
-113A;Lo;L;
-113B;Lo;L;
-113C;Lo;L;
-113D;Lo;L;
-113E;Lo;L;
-113F;Lo;L;
-1140;Lo;L;
-1141;Lo;L;
-1142;Lo;L;
-1143;Lo;L;
-1144;Lo;L;
-1145;Lo;L;
-1146;Lo;L;
-1147;Lo;L;
-1148;Lo;L;
-1149;Lo;L;
-114A;Lo;L;
-114B;Lo;L;
-114C;Lo;L;
-114D;Lo;L;
-114E;Lo;L;
-114F;Lo;L;
-1150;Lo;L;
-1151;Lo;L;
-1152;Lo;L;
-1153;Lo;L;
-1154;Lo;L;
-1155;Lo;L;
-1156;Lo;L;
-1157;Lo;L;
-1158;Lo;L;
-1159;Lo;L;
-115F;Lo;L;
-1160;Lo;L;
-1161;Lo;L;
-1162;Lo;L;
-1163;Lo;L;
-1164;Lo;L;
-1165;Lo;L;
-1166;Lo;L;
-1167;Lo;L;
-1168;Lo;L;
-1169;Lo;L;
-116A;Lo;L;
-116B;Lo;L;
-116C;Lo;L;
-116D;Lo;L;
-116E;Lo;L;
-116F;Lo;L;
-1170;Lo;L;
-1171;Lo;L;
-1172;Lo;L;
-1173;Lo;L;
-1174;Lo;L;
-1175;Lo;L;
-1176;Lo;L;
-1177;Lo;L;
-1178;Lo;L;
-1179;Lo;L;
-117A;Lo;L;
-117B;Lo;L;
-117C;Lo;L;
-117D;Lo;L;
-117E;Lo;L;
-117F;Lo;L;
-1180;Lo;L;
-1181;Lo;L;
-1182;Lo;L;
-1183;Lo;L;
-1184;Lo;L;
-1185;Lo;L;
-1186;Lo;L;
-1187;Lo;L;
-1188;Lo;L;
-1189;Lo;L;
-118A;Lo;L;
-118B;Lo;L;
-118C;Lo;L;
-118D;Lo;L;
-118E;Lo;L;
-118F;Lo;L;
-1190;Lo;L;
-1191;Lo;L;
-1192;Lo;L;
-1193;Lo;L;
-1194;Lo;L;
-1195;Lo;L;
-1196;Lo;L;
-1197;Lo;L;
-1198;Lo;L;
-1199;Lo;L;
-119A;Lo;L;
-119B;Lo;L;
-119C;Lo;L;
-119D;Lo;L;
-119E;Lo;L;
-119F;Lo;L;
-11A0;Lo;L;
-11A1;Lo;L;
-11A2;Lo;L;
-11A8;Lo;L;
-11A9;Lo;L;
-11AA;Lo;L;
-11AB;Lo;L;
-11AC;Lo;L;
-11AD;Lo;L;
-11AE;Lo;L;
-11AF;Lo;L;
-11B0;Lo;L;
-11B1;Lo;L;
-11B2;Lo;L;
-11B3;Lo;L;
-11B4;Lo;L;
-11B5;Lo;L;
-11B6;Lo;L;
-11B7;Lo;L;
-11B8;Lo;L;
-11B9;Lo;L;
-11BA;Lo;L;
-11BB;Lo;L;
-11BC;Lo;L;
-11BD;Lo;L;
-11BE;Lo;L;
-11BF;Lo;L;
-11C0;Lo;L;
-11C1;Lo;L;
-11C2;Lo;L;
-11C3;Lo;L;
-11C4;Lo;L;
-11C5;Lo;L;
-11C6;Lo;L;
-11C7;Lo;L;
-11C8;Lo;L;
-11C9;Lo;L;
-11CA;Lo;L;
-11CB;Lo;L;
-11CC;Lo;L;
-11CD;Lo;L;
-11CE;Lo;L;
-11CF;Lo;L;
-11D0;Lo;L;
-11D1;Lo;L;
-11D2;Lo;L;
-11D3;Lo;L;
-11D4;Lo;L;
-11D5;Lo;L;
-11D6;Lo;L;
-11D7;Lo;L;
-11D8;Lo;L;
-11D9;Lo;L;
-11DA;Lo;L;
-11DB;Lo;L;
-11DC;Lo;L;
-11DD;Lo;L;
-11DE;Lo;L;
-11DF;Lo;L;
-11E0;Lo;L;
-11E1;Lo;L;
-11E2;Lo;L;
-11E3;Lo;L;
-11E4;Lo;L;
-11E5;Lo;L;
-11E6;Lo;L;
-11E7;Lo;L;
-11E8;Lo;L;
-11E9;Lo;L;
-11EA;Lo;L;
-11EB;Lo;L;
-11EC;Lo;L;
-11ED;Lo;L;
-11EE;Lo;L;
-11EF;Lo;L;
-11F0;Lo;L;
-11F1;Lo;L;
-11F2;Lo;L;
-11F3;Lo;L;
-11F4;Lo;L;
-11F5;Lo;L;
-11F6;Lo;L;
-11F7;Lo;L;
-11F8;Lo;L;
-11F9;Lo;L;
-1200;Lo;L;
-1201;Lo;L;
-1202;Lo;L;
-1203;Lo;L;
-1204;Lo;L;
-1205;Lo;L;
-1206;Lo;L;
-1208;Lo;L;
-1209;Lo;L;
-120A;Lo;L;
-120B;Lo;L;
-120C;Lo;L;
-120D;Lo;L;
-120E;Lo;L;
-120F;Lo;L;
-1210;Lo;L;
-1211;Lo;L;
-1212;Lo;L;
-1213;Lo;L;
-1214;Lo;L;
-1215;Lo;L;
-1216;Lo;L;
-1217;Lo;L;
-1218;Lo;L;
-1219;Lo;L;
-121A;Lo;L;
-121B;Lo;L;
-121C;Lo;L;
-121D;Lo;L;
-121E;Lo;L;
-121F;Lo;L;
-1220;Lo;L;
-1221;Lo;L;
-1222;Lo;L;
-1223;Lo;L;
-1224;Lo;L;
-1225;Lo;L;
-1226;Lo;L;
-1227;Lo;L;
-1228;Lo;L;
-1229;Lo;L;
-122A;Lo;L;
-122B;Lo;L;
-122C;Lo;L;
-122D;Lo;L;
-122E;Lo;L;
-122F;Lo;L;
-1230;Lo;L;
-1231;Lo;L;
-1232;Lo;L;
-1233;Lo;L;
-1234;Lo;L;
-1235;Lo;L;
-1236;Lo;L;
-1237;Lo;L;
-1238;Lo;L;
-1239;Lo;L;
-123A;Lo;L;
-123B;Lo;L;
-123C;Lo;L;
-123D;Lo;L;
-123E;Lo;L;
-123F;Lo;L;
-1240;Lo;L;
-1241;Lo;L;
-1242;Lo;L;
-1243;Lo;L;
-1244;Lo;L;
-1245;Lo;L;
-1246;Lo;L;
-1248;Lo;L;
-124A;Lo;L;
-124B;Lo;L;
-124C;Lo;L;
-124D;Lo;L;
-1250;Lo;L;
-1251;Lo;L;
-1252;Lo;L;
-1253;Lo;L;
-1254;Lo;L;
-1255;Lo;L;
-1256;Lo;L;
-1258;Lo;L;
-125A;Lo;L;
-125B;Lo;L;
-125C;Lo;L;
-125D;Lo;L;
-1260;Lo;L;
-1261;Lo;L;
-1262;Lo;L;
-1263;Lo;L;
-1264;Lo;L;
-1265;Lo;L;
-1266;Lo;L;
-1267;Lo;L;
-1268;Lo;L;
-1269;Lo;L;
-126A;Lo;L;
-126B;Lo;L;
-126C;Lo;L;
-126D;Lo;L;
-126E;Lo;L;
-126F;Lo;L;
-1270;Lo;L;
-1271;Lo;L;
-1272;Lo;L;
-1273;Lo;L;
-1274;Lo;L;
-1275;Lo;L;
-1276;Lo;L;
-1277;Lo;L;
-1278;Lo;L;
-1279;Lo;L;
-127A;Lo;L;
-127B;Lo;L;
-127C;Lo;L;
-127D;Lo;L;
-127E;Lo;L;
-127F;Lo;L;
-1280;Lo;L;
-1281;Lo;L;
-1282;Lo;L;
-1283;Lo;L;
-1284;Lo;L;
-1285;Lo;L;
-1286;Lo;L;
-1288;Lo;L;
-128A;Lo;L;
-128B;Lo;L;
-128C;Lo;L;
-128D;Lo;L;
-1290;Lo;L;
-1291;Lo;L;
-1292;Lo;L;
-1293;Lo;L;
-1294;Lo;L;
-1295;Lo;L;
-1296;Lo;L;
-1297;Lo;L;
-1298;Lo;L;
-1299;Lo;L;
-129A;Lo;L;
-129B;Lo;L;
-129C;Lo;L;
-129D;Lo;L;
-129E;Lo;L;
-129F;Lo;L;
-12A0;Lo;L;
-12A1;Lo;L;
-12A2;Lo;L;
-12A3;Lo;L;
-12A4;Lo;L;
-12A5;Lo;L;
-12A6;Lo;L;
-12A7;Lo;L;
-12A8;Lo;L;
-12A9;Lo;L;
-12AA;Lo;L;
-12AB;Lo;L;
-12AC;Lo;L;
-12AD;Lo;L;
-12AE;Lo;L;
-12B0;Lo;L;
-12B2;Lo;L;
-12B3;Lo;L;
-12B4;Lo;L;
-12B5;Lo;L;
-12B8;Lo;L;
-12B9;Lo;L;
-12BA;Lo;L;
-12BB;Lo;L;
-12BC;Lo;L;
-12BD;Lo;L;
-12BE;Lo;L;
-12C0;Lo;L;
-12C2;Lo;L;
-12C3;Lo;L;
-12C4;Lo;L;
-12C5;Lo;L;
-12C8;Lo;L;
-12C9;Lo;L;
-12CA;Lo;L;
-12CB;Lo;L;
-12CC;Lo;L;
-12CD;Lo;L;
-12CE;Lo;L;
-12D0;Lo;L;
-12D1;Lo;L;
-12D2;Lo;L;
-12D3;Lo;L;
-12D4;Lo;L;
-12D5;Lo;L;
-12D6;Lo;L;
-12D8;Lo;L;
-12D9;Lo;L;
-12DA;Lo;L;
-12DB;Lo;L;
-12DC;Lo;L;
-12DD;Lo;L;
-12DE;Lo;L;
-12DF;Lo;L;
-12E0;Lo;L;
-12E1;Lo;L;
-12E2;Lo;L;
-12E3;Lo;L;
-12E4;Lo;L;
-12E5;Lo;L;
-12E6;Lo;L;
-12E7;Lo;L;
-12E8;Lo;L;
-12E9;Lo;L;
-12EA;Lo;L;
-12EB;Lo;L;
-12EC;Lo;L;
-12ED;Lo;L;
-12EE;Lo;L;
-12F0;Lo;L;
-12F1;Lo;L;
-12F2;Lo;L;
-12F3;Lo;L;
-12F4;Lo;L;
-12F5;Lo;L;
-12F6;Lo;L;
-12F7;Lo;L;
-12F8;Lo;L;
-12F9;Lo;L;
-12FA;Lo;L;
-12FB;Lo;L;
-12FC;Lo;L;
-12FD;Lo;L;
-12FE;Lo;L;
-12FF;Lo;L;
-1300;Lo;L;
-1301;Lo;L;
-1302;Lo;L;
-1303;Lo;L;
-1304;Lo;L;
-1305;Lo;L;
-1306;Lo;L;
-1307;Lo;L;
-1308;Lo;L;
-1309;Lo;L;
-130A;Lo;L;
-130B;Lo;L;
-130C;Lo;L;
-130D;Lo;L;
-130E;Lo;L;
-1310;Lo;L;
-1312;Lo;L;
-1313;Lo;L;
-1314;Lo;L;
-1315;Lo;L;
-1318;Lo;L;
-1319;Lo;L;
-131A;Lo;L;
-131B;Lo;L;
-131C;Lo;L;
-131D;Lo;L;
-131E;Lo;L;
-1320;Lo;L;
-1321;Lo;L;
-1322;Lo;L;
-1323;Lo;L;
-1324;Lo;L;
-1325;Lo;L;
-1326;Lo;L;
-1327;Lo;L;
-1328;Lo;L;
-1329;Lo;L;
-132A;Lo;L;
-132B;Lo;L;
-132C;Lo;L;
-132D;Lo;L;
-132E;Lo;L;
-132F;Lo;L;
-1330;Lo;L;
-1331;Lo;L;
-1332;Lo;L;
-1333;Lo;L;
-1334;Lo;L;
-1335;Lo;L;
-1336;Lo;L;
-1337;Lo;L;
-1338;Lo;L;
-1339;Lo;L;
-133A;Lo;L;
-133B;Lo;L;
-133C;Lo;L;
-133D;Lo;L;
-133E;Lo;L;
-133F;Lo;L;
-1340;Lo;L;
-1341;Lo;L;
-1342;Lo;L;
-1343;Lo;L;
-1344;Lo;L;
-1345;Lo;L;
-1346;Lo;L;
-1348;Lo;L;
-1349;Lo;L;
-134A;Lo;L;
-134B;Lo;L;
-134C;Lo;L;
-134D;Lo;L;
-134E;Lo;L;
-134F;Lo;L;
-1350;Lo;L;
-1351;Lo;L;
-1352;Lo;L;
-1353;Lo;L;
-1354;Lo;L;
-1355;Lo;L;
-1356;Lo;L;
-1357;Lo;L;
-1358;Lo;L;
-1359;Lo;L;
-135A;Lo;L;
-1361;Po;L;
-1362;Po;L;
-1363;Po;L;
-1364;Po;L;
-1365;Po;L;
-1366;Po;L;
-1367;Po;L;
-1368;Po;L;
-1369;Nd;L;
-136A;Nd;L;
-136B;Nd;L;
-136C;Nd;L;
-136D;Nd;L;
-136E;Nd;L;
-136F;Nd;L;
-1370;Nd;L;
-1371;Nd;L;
-1372;No;L;
-1373;No;L;
-1374;No;L;
-1375;No;L;
-1376;No;L;
-1377;No;L;
-1378;No;L;
-1379;No;L;
-137A;No;L;
-137B;No;L;
-137C;No;L;
-13A0;Lo;L;
-13A1;Lo;L;
-13A2;Lo;L;
-13A3;Lo;L;
-13A4;Lo;L;
-13A5;Lo;L;
-13A6;Lo;L;
-13A7;Lo;L;
-13A8;Lo;L;
-13A9;Lo;L;
-13AA;Lo;L;
-13AB;Lo;L;
-13AC;Lo;L;
-13AD;Lo;L;
-13AE;Lo;L;
-13AF;Lo;L;
-13B0;Lo;L;
-13B1;Lo;L;
-13B2;Lo;L;
-13B3;Lo;L;
-13B4;Lo;L;
-13B5;Lo;L;
-13B6;Lo;L;
-13B7;Lo;L;
-13B8;Lo;L;
-13B9;Lo;L;
-13BA;Lo;L;
-13BB;Lo;L;
-13BC;Lo;L;
-13BD;Lo;L;
-13BE;Lo;L;
-13BF;Lo;L;
-13C0;Lo;L;
-13C1;Lo;L;
-13C2;Lo;L;
-13C3;Lo;L;
-13C4;Lo;L;
-13C5;Lo;L;
-13C6;Lo;L;
-13C7;Lo;L;
-13C8;Lo;L;
-13C9;Lo;L;
-13CA;Lo;L;
-13CB;Lo;L;
-13CC;Lo;L;
-13CD;Lo;L;
-13CE;Lo;L;
-13CF;Lo;L;
-13D0;Lo;L;
-13D1;Lo;L;
-13D2;Lo;L;
-13D3;Lo;L;
-13D4;Lo;L;
-13D5;Lo;L;
-13D6;Lo;L;
-13D7;Lo;L;
-13D8;Lo;L;
-13D9;Lo;L;
-13DA;Lo;L;
-13DB;Lo;L;
-13DC;Lo;L;
-13DD;Lo;L;
-13DE;Lo;L;
-13DF;Lo;L;
-13E0;Lo;L;
-13E1;Lo;L;
-13E2;Lo;L;
-13E3;Lo;L;
-13E4;Lo;L;
-13E5;Lo;L;
-13E6;Lo;L;
-13E7;Lo;L;
-13E8;Lo;L;
-13E9;Lo;L;
-13EA;Lo;L;
-13EB;Lo;L;
-13EC;Lo;L;
-13ED;Lo;L;
-13EE;Lo;L;
-13EF;Lo;L;
-13F0;Lo;L;
-13F1;Lo;L;
-13F2;Lo;L;
-13F3;Lo;L;
-13F4;Lo;L;
-1401;Lo;L;
-1402;Lo;L;
-1403;Lo;L;
-1404;Lo;L;
-1405;Lo;L;
-1406;Lo;L;
-1407;Lo;L;
-1408;Lo;L;
-1409;Lo;L;
-140A;Lo;L;
-140B;Lo;L;
-140C;Lo;L;
-140D;Lo;L;
-140E;Lo;L;
-140F;Lo;L;
-1410;Lo;L;
-1411;Lo;L;
-1412;Lo;L;
-1413;Lo;L;
-1414;Lo;L;
-1415;Lo;L;
-1416;Lo;L;
-1417;Lo;L;
-1418;Lo;L;
-1419;Lo;L;
-141A;Lo;L;
-141B;Lo;L;
-141C;Lo;L;
-141D;Lo;L;
-141E;Lo;L;
-141F;Lo;L;
-1420;Lo;L;
-1421;Lo;L;
-1422;Lo;L;
-1423;Lo;L;
-1424;Lo;L;
-1425;Lo;L;
-1426;Lo;L;
-1427;Lo;L;
-1428;Lo;L;
-1429;Lo;L;
-142A;Lo;L;
-142B;Lo;L;
-142C;Lo;L;
-142D;Lo;L;
-142E;Lo;L;
-142F;Lo;L;
-1430;Lo;L;
-1431;Lo;L;
-1432;Lo;L;
-1433;Lo;L;
-1434;Lo;L;
-1435;Lo;L;
-1436;Lo;L;
-1437;Lo;L;
-1438;Lo;L;
-1439;Lo;L;
-143A;Lo;L;
-143B;Lo;L;
-143C;Lo;L;
-143D;Lo;L;
-143E;Lo;L;
-143F;Lo;L;
-1440;Lo;L;
-1441;Lo;L;
-1442;Lo;L;
-1443;Lo;L;
-1444;Lo;L;
-1445;Lo;L;
-1446;Lo;L;
-1447;Lo;L;
-1448;Lo;L;
-1449;Lo;L;
-144A;Lo;L;
-144B;Lo;L;
-144C;Lo;L;
-144D;Lo;L;
-144E;Lo;L;
-144F;Lo;L;
-1450;Lo;L;
-1451;Lo;L;
-1452;Lo;L;
-1453;Lo;L;
-1454;Lo;L;
-1455;Lo;L;
-1456;Lo;L;
-1457;Lo;L;
-1458;Lo;L;
-1459;Lo;L;
-145A;Lo;L;
-145B;Lo;L;
-145C;Lo;L;
-145D;Lo;L;
-145E;Lo;L;
-145F;Lo;L;
-1460;Lo;L;
-1461;Lo;L;
-1462;Lo;L;
-1463;Lo;L;
-1464;Lo;L;
-1465;Lo;L;
-1466;Lo;L;
-1467;Lo;L;
-1468;Lo;L;
-1469;Lo;L;
-146A;Lo;L;
-146B;Lo;L;
-146C;Lo;L;
-146D;Lo;L;
-146E;Lo;L;
-146F;Lo;L;
-1470;Lo;L;
-1471;Lo;L;
-1472;Lo;L;
-1473;Lo;L;
-1474;Lo;L;
-1475;Lo;L;
-1476;Lo;L;
-1477;Lo;L;
-1478;Lo;L;
-1479;Lo;L;
-147A;Lo;L;
-147B;Lo;L;
-147C;Lo;L;
-147D;Lo;L;
-147E;Lo;L;
-147F;Lo;L;
-1480;Lo;L;
-1481;Lo;L;
-1482;Lo;L;
-1483;Lo;L;
-1484;Lo;L;
-1485;Lo;L;
-1486;Lo;L;
-1487;Lo;L;
-1488;Lo;L;
-1489;Lo;L;
-148A;Lo;L;
-148B;Lo;L;
-148C;Lo;L;
-148D;Lo;L;
-148E;Lo;L;
-148F;Lo;L;
-1490;Lo;L;
-1491;Lo;L;
-1492;Lo;L;
-1493;Lo;L;
-1494;Lo;L;
-1495;Lo;L;
-1496;Lo;L;
-1497;Lo;L;
-1498;Lo;L;
-1499;Lo;L;
-149A;Lo;L;
-149B;Lo;L;
-149C;Lo;L;
-149D;Lo;L;
-149E;Lo;L;
-149F;Lo;L;
-14A0;Lo;L;
-14A1;Lo;L;
-14A2;Lo;L;
-14A3;Lo;L;
-14A4;Lo;L;
-14A5;Lo;L;
-14A6;Lo;L;
-14A7;Lo;L;
-14A8;Lo;L;
-14A9;Lo;L;
-14AA;Lo;L;
-14AB;Lo;L;
-14AC;Lo;L;
-14AD;Lo;L;
-14AE;Lo;L;
-14AF;Lo;L;
-14B0;Lo;L;
-14B1;Lo;L;
-14B2;Lo;L;
-14B3;Lo;L;
-14B4;Lo;L;
-14B5;Lo;L;
-14B6;Lo;L;
-14B7;Lo;L;
-14B8;Lo;L;
-14B9;Lo;L;
-14BA;Lo;L;
-14BB;Lo;L;
-14BC;Lo;L;
-14BD;Lo;L;
-14BE;Lo;L;
-14BF;Lo;L;
-14C0;Lo;L;
-14C1;Lo;L;
-14C2;Lo;L;
-14C3;Lo;L;
-14C4;Lo;L;
-14C5;Lo;L;
-14C6;Lo;L;
-14C7;Lo;L;
-14C8;Lo;L;
-14C9;Lo;L;
-14CA;Lo;L;
-14CB;Lo;L;
-14CC;Lo;L;
-14CD;Lo;L;
-14CE;Lo;L;
-14CF;Lo;L;
-14D0;Lo;L;
-14D1;Lo;L;
-14D2;Lo;L;
-14D3;Lo;L;
-14D4;Lo;L;
-14D5;Lo;L;
-14D6;Lo;L;
-14D7;Lo;L;
-14D8;Lo;L;
-14D9;Lo;L;
-14DA;Lo;L;
-14DB;Lo;L;
-14DC;Lo;L;
-14DD;Lo;L;
-14DE;Lo;L;
-14DF;Lo;L;
-14E0;Lo;L;
-14E1;Lo;L;
-14E2;Lo;L;
-14E3;Lo;L;
-14E4;Lo;L;
-14E5;Lo;L;
-14E6;Lo;L;
-14E7;Lo;L;
-14E8;Lo;L;
-14E9;Lo;L;
-14EA;Lo;L;
-14EB;Lo;L;
-14EC;Lo;L;
-14ED;Lo;L;
-14EE;Lo;L;
-14EF;Lo;L;
-14F0;Lo;L;
-14F1;Lo;L;
-14F2;Lo;L;
-14F3;Lo;L;
-14F4;Lo;L;
-14F5;Lo;L;
-14F6;Lo;L;
-14F7;Lo;L;
-14F8;Lo;L;
-14F9;Lo;L;
-14FA;Lo;L;
-14FB;Lo;L;
-14FC;Lo;L;
-14FD;Lo;L;
-14FE;Lo;L;
-14FF;Lo;L;
-1500;Lo;L;
-1501;Lo;L;
-1502;Lo;L;
-1503;Lo;L;
-1504;Lo;L;
-1505;Lo;L;
-1506;Lo;L;
-1507;Lo;L;
-1508;Lo;L;
-1509;Lo;L;
-150A;Lo;L;
-150B;Lo;L;
-150C;Lo;L;
-150D;Lo;L;
-150E;Lo;L;
-150F;Lo;L;
-1510;Lo;L;
-1511;Lo;L;
-1512;Lo;L;
-1513;Lo;L;
-1514;Lo;L;
-1515;Lo;L;
-1516;Lo;L;
-1517;Lo;L;
-1518;Lo;L;
-1519;Lo;L;
-151A;Lo;L;
-151B;Lo;L;
-151C;Lo;L;
-151D;Lo;L;
-151E;Lo;L;
-151F;Lo;L;
-1520;Lo;L;
-1521;Lo;L;
-1522;Lo;L;
-1523;Lo;L;
-1524;Lo;L;
-1525;Lo;L;
-1526;Lo;L;
-1527;Lo;L;
-1528;Lo;L;
-1529;Lo;L;
-152A;Lo;L;
-152B;Lo;L;
-152C;Lo;L;
-152D;Lo;L;
-152E;Lo;L;
-152F;Lo;L;
-1530;Lo;L;
-1531;Lo;L;
-1532;Lo;L;
-1533;Lo;L;
-1534;Lo;L;
-1535;Lo;L;
-1536;Lo;L;
-1537;Lo;L;
-1538;Lo;L;
-1539;Lo;L;
-153A;Lo;L;
-153B;Lo;L;
-153C;Lo;L;
-153D;Lo;L;
-153E;Lo;L;
-153F;Lo;L;
-1540;Lo;L;
-1541;Lo;L;
-1542;Lo;L;
-1543;Lo;L;
-1544;Lo;L;
-1545;Lo;L;
-1546;Lo;L;
-1547;Lo;L;
-1548;Lo;L;
-1549;Lo;L;
-154A;Lo;L;
-154B;Lo;L;
-154C;Lo;L;
-154D;Lo;L;
-154E;Lo;L;
-154F;Lo;L;
-1550;Lo;L;
-1551;Lo;L;
-1552;Lo;L;
-1553;Lo;L;
-1554;Lo;L;
-1555;Lo;L;
-1556;Lo;L;
-1557;Lo;L;
-1558;Lo;L;
-1559;Lo;L;
-155A;Lo;L;
-155B;Lo;L;
-155C;Lo;L;
-155D;Lo;L;
-155E;Lo;L;
-155F;Lo;L;
-1560;Lo;L;
-1561;Lo;L;
-1562;Lo;L;
-1563;Lo;L;
-1564;Lo;L;
-1565;Lo;L;
-1566;Lo;L;
-1567;Lo;L;
-1568;Lo;L;
-1569;Lo;L;
-156A;Lo;L;
-156B;Lo;L;
-156C;Lo;L;
-156D;Lo;L;
-156E;Lo;L;
-156F;Lo;L;
-1570;Lo;L;
-1571;Lo;L;
-1572;Lo;L;
-1573;Lo;L;
-1574;Lo;L;
-1575;Lo;L;
-1576;Lo;L;
-1577;Lo;L;
-1578;Lo;L;
-1579;Lo;L;
-157A;Lo;L;
-157B;Lo;L;
-157C;Lo;L;
-157D;Lo;L;
-157E;Lo;L;
-157F;Lo;L;
-1580;Lo;L;
-1581;Lo;L;
-1582;Lo;L;
-1583;Lo;L;
-1584;Lo;L;
-1585;Lo;L;
-1586;Lo;L;
-1587;Lo;L;
-1588;Lo;L;
-1589;Lo;L;
-158A;Lo;L;
-158B;Lo;L;
-158C;Lo;L;
-158D;Lo;L;
-158E;Lo;L;
-158F;Lo;L;
-1590;Lo;L;
-1591;Lo;L;
-1592;Lo;L;
-1593;Lo;L;
-1594;Lo;L;
-1595;Lo;L;
-1596;Lo;L;
-1597;Lo;L;
-1598;Lo;L;
-1599;Lo;L;
-159A;Lo;L;
-159B;Lo;L;
-159C;Lo;L;
-159D;Lo;L;
-159E;Lo;L;
-159F;Lo;L;
-15A0;Lo;L;
-15A1;Lo;L;
-15A2;Lo;L;
-15A3;Lo;L;
-15A4;Lo;L;
-15A5;Lo;L;
-15A6;Lo;L;
-15A7;Lo;L;
-15A8;Lo;L;
-15A9;Lo;L;
-15AA;Lo;L;
-15AB;Lo;L;
-15AC;Lo;L;
-15AD;Lo;L;
-15AE;Lo;L;
-15AF;Lo;L;
-15B0;Lo;L;
-15B1;Lo;L;
-15B2;Lo;L;
-15B3;Lo;L;
-15B4;Lo;L;
-15B5;Lo;L;
-15B6;Lo;L;
-15B7;Lo;L;
-15B8;Lo;L;
-15B9;Lo;L;
-15BA;Lo;L;
-15BB;Lo;L;
-15BC;Lo;L;
-15BD;Lo;L;
-15BE;Lo;L;
-15BF;Lo;L;
-15C0;Lo;L;
-15C1;Lo;L;
-15C2;Lo;L;
-15C3;Lo;L;
-15C4;Lo;L;
-15C5;Lo;L;
-15C6;Lo;L;
-15C7;Lo;L;
-15C8;Lo;L;
-15C9;Lo;L;
-15CA;Lo;L;
-15CB;Lo;L;
-15CC;Lo;L;
-15CD;Lo;L;
-15CE;Lo;L;
-15CF;Lo;L;
-15D0;Lo;L;
-15D1;Lo;L;
-15D2;Lo;L;
-15D3;Lo;L;
-15D4;Lo;L;
-15D5;Lo;L;
-15D6;Lo;L;
-15D7;Lo;L;
-15D8;Lo;L;
-15D9;Lo;L;
-15DA;Lo;L;
-15DB;Lo;L;
-15DC;Lo;L;
-15DD;Lo;L;
-15DE;Lo;L;
-15DF;Lo;L;
-15E0;Lo;L;
-15E1;Lo;L;
-15E2;Lo;L;
-15E3;Lo;L;
-15E4;Lo;L;
-15E5;Lo;L;
-15E6;Lo;L;
-15E7;Lo;L;
-15E8;Lo;L;
-15E9;Lo;L;
-15EA;Lo;L;
-15EB;Lo;L;
-15EC;Lo;L;
-15ED;Lo;L;
-15EE;Lo;L;
-15EF;Lo;L;
-15F0;Lo;L;
-15F1;Lo;L;
-15F2;Lo;L;
-15F3;Lo;L;
-15F4;Lo;L;
-15F5;Lo;L;
-15F6;Lo;L;
-15F7;Lo;L;
-15F8;Lo;L;
-15F9;Lo;L;
-15FA;Lo;L;
-15FB;Lo;L;
-15FC;Lo;L;
-15FD;Lo;L;
-15FE;Lo;L;
-15FF;Lo;L;
-1600;Lo;L;
-1601;Lo;L;
-1602;Lo;L;
-1603;Lo;L;
-1604;Lo;L;
-1605;Lo;L;
-1606;Lo;L;
-1607;Lo;L;
-1608;Lo;L;
-1609;Lo;L;
-160A;Lo;L;
-160B;Lo;L;
-160C;Lo;L;
-160D;Lo;L;
-160E;Lo;L;
-160F;Lo;L;
-1610;Lo;L;
-1611;Lo;L;
-1612;Lo;L;
-1613;Lo;L;
-1614;Lo;L;
-1615;Lo;L;
-1616;Lo;L;
-1617;Lo;L;
-1618;Lo;L;
-1619;Lo;L;
-161A;Lo;L;
-161B;Lo;L;
-161C;Lo;L;
-161D;Lo;L;
-161E;Lo;L;
-161F;Lo;L;
-1620;Lo;L;
-1621;Lo;L;
-1622;Lo;L;
-1623;Lo;L;
-1624;Lo;L;
-1625;Lo;L;
-1626;Lo;L;
-1627;Lo;L;
-1628;Lo;L;
-1629;Lo;L;
-162A;Lo;L;
-162B;Lo;L;
-162C;Lo;L;
-162D;Lo;L;
-162E;Lo;L;
-162F;Lo;L;
-1630;Lo;L;
-1631;Lo;L;
-1632;Lo;L;
-1633;Lo;L;
-1634;Lo;L;
-1635;Lo;L;
-1636;Lo;L;
-1637;Lo;L;
-1638;Lo;L;
-1639;Lo;L;
-163A;Lo;L;
-163B;Lo;L;
-163C;Lo;L;
-163D;Lo;L;
-163E;Lo;L;
-163F;Lo;L;
-1640;Lo;L;
-1641;Lo;L;
-1642;Lo;L;
-1643;Lo;L;
-1644;Lo;L;
-1645;Lo;L;
-1646;Lo;L;
-1647;Lo;L;
-1648;Lo;L;
-1649;Lo;L;
-164A;Lo;L;
-164B;Lo;L;
-164C;Lo;L;
-164D;Lo;L;
-164E;Lo;L;
-164F;Lo;L;
-1650;Lo;L;
-1651;Lo;L;
-1652;Lo;L;
-1653;Lo;L;
-1654;Lo;L;
-1655;Lo;L;
-1656;Lo;L;
-1657;Lo;L;
-1658;Lo;L;
-1659;Lo;L;
-165A;Lo;L;
-165B;Lo;L;
-165C;Lo;L;
-165D;Lo;L;
-165E;Lo;L;
-165F;Lo;L;
-1660;Lo;L;
-1661;Lo;L;
-1662;Lo;L;
-1663;Lo;L;
-1664;Lo;L;
-1665;Lo;L;
-1666;Lo;L;
-1667;Lo;L;
-1668;Lo;L;
-1669;Lo;L;
-166A;Lo;L;
-166B;Lo;L;
-166C;Lo;L;
-166D;Po;L;
-166E;Po;L;
-166F;Lo;L;
-1670;Lo;L;
-1671;Lo;L;
-1672;Lo;L;
-1673;Lo;L;
-1674;Lo;L;
-1675;Lo;L;
-1676;Lo;L;
-1680;Zs;WS;
-1681;Lo;L;
-1682;Lo;L;
-1683;Lo;L;
-1684;Lo;L;
-1685;Lo;L;
-1686;Lo;L;
-1687;Lo;L;
-1688;Lo;L;
-1689;Lo;L;
-168A;Lo;L;
-168B;Lo;L;
-168C;Lo;L;
-168D;Lo;L;
-168E;Lo;L;
-168F;Lo;L;
-1690;Lo;L;
-1691;Lo;L;
-1692;Lo;L;
-1693;Lo;L;
-1694;Lo;L;
-1695;Lo;L;
-1696;Lo;L;
-1697;Lo;L;
-1698;Lo;L;
-1699;Lo;L;
-169A;Lo;L;
-169B;Ps;ON;
-169C;Pe;ON;
-16A0;Lo;L;
-16A1;Lo;L;
-16A2;Lo;L;
-16A3;Lo;L;
-16A4;Lo;L;
-16A5;Lo;L;
-16A6;Lo;L;
-16A7;Lo;L;
-16A8;Lo;L;
-16A9;Lo;L;
-16AA;Lo;L;
-16AB;Lo;L;
-16AC;Lo;L;
-16AD;Lo;L;
-16AE;Lo;L;
-16AF;Lo;L;
-16B0;Lo;L;
-16B1;Lo;L;
-16B2;Lo;L;
-16B3;Lo;L;
-16B4;Lo;L;
-16B5;Lo;L;
-16B6;Lo;L;
-16B7;Lo;L;
-16B8;Lo;L;
-16B9;Lo;L;
-16BA;Lo;L;
-16BB;Lo;L;
-16BC;Lo;L;
-16BD;Lo;L;
-16BE;Lo;L;
-16BF;Lo;L;
-16C0;Lo;L;
-16C1;Lo;L;
-16C2;Lo;L;
-16C3;Lo;L;
-16C4;Lo;L;
-16C5;Lo;L;
-16C6;Lo;L;
-16C7;Lo;L;
-16C8;Lo;L;
-16C9;Lo;L;
-16CA;Lo;L;
-16CB;Lo;L;
-16CC;Lo;L;
-16CD;Lo;L;
-16CE;Lo;L;
-16CF;Lo;L;
-16D0;Lo;L;
-16D1;Lo;L;
-16D2;Lo;L;
-16D3;Lo;L;
-16D4;Lo;L;
-16D5;Lo;L;
-16D6;Lo;L;
-16D7;Lo;L;
-16D8;Lo;L;
-16D9;Lo;L;
-16DA;Lo;L;
-16DB;Lo;L;
-16DC;Lo;L;
-16DD;Lo;L;
-16DE;Lo;L;
-16DF;Lo;L;
-16E0;Lo;L;
-16E1;Lo;L;
-16E2;Lo;L;
-16E3;Lo;L;
-16E4;Lo;L;
-16E5;Lo;L;
-16E6;Lo;L;
-16E7;Lo;L;
-16E8;Lo;L;
-16E9;Lo;L;
-16EA;Lo;L;
-16EB;Po;L;
-16EC;Po;L;
-16ED;Po;L;
-16EE;Nl;L;
-16EF;Nl;L;
-16F0;Nl;L;
-1780;Lo;L;
-1781;Lo;L;
-1782;Lo;L;
-1783;Lo;L;
-1784;Lo;L;
-1785;Lo;L;
-1786;Lo;L;
-1787;Lo;L;
-1788;Lo;L;
-1789;Lo;L;
-178A;Lo;L;
-178B;Lo;L;
-178C;Lo;L;
-178D;Lo;L;
-178E;Lo;L;
-178F;Lo;L;
-1790;Lo;L;
-1791;Lo;L;
-1792;Lo;L;
-1793;Lo;L;
-1794;Lo;L;
-1795;Lo;L;
-1796;Lo;L;
-1797;Lo;L;
-1798;Lo;L;
-1799;Lo;L;
-179A;Lo;L;
-179B;Lo;L;
-179C;Lo;L;
-179D;Lo;L;
-179E;Lo;L;
-179F;Lo;L;
-17A0;Lo;L;
-17A1;Lo;L;
-17A2;Lo;L;
-17A3;Lo;L;
-17A4;Lo;L;
-17A5;Lo;L;
-17A6;Lo;L;
-17A7;Lo;L;
-17A8;Lo;L;
-17A9;Lo;L;
-17AA;Lo;L;
-17AB;Lo;L;
-17AC;Lo;L;
-17AD;Lo;L;
-17AE;Lo;L;
-17AF;Lo;L;
-17B0;Lo;L;
-17B1;Lo;L;
-17B2;Lo;L;
-17B3;Lo;L;
-17B4;Mc;L;
-17B5;Mc;L;
-17B6;Mc;L;
-17B7;Mn;NSM;
-17B8;Mn;NSM;
-17B9;Mn;NSM;
-17BA;Mn;NSM;
-17BB;Mn;NSM;
-17BC;Mn;NSM;
-17BD;Mn;NSM;
-17BE;Mc;L;
-17BF;Mc;L;
-17C0;Mc;L;
-17C1;Mc;L;
-17C2;Mc;L;
-17C3;Mc;L;
-17C4;Mc;L;
-17C5;Mc;L;
-17C6;Mn;NSM;
-17C7;Mc;L;
-17C8;Mc;L;
-17C9;Mn;NSM;
-17CA;Mn;NSM;
-17CB;Mn;NSM;
-17CC;Mn;NSM;
-17CD;Mn;NSM;
-17CE;Mn;NSM;
-17CF;Mn;NSM;
-17D0;Mn;NSM;
-17D1;Mn;NSM;
-17D2;Mn;NSM;
-17D3;Mn;NSM;
-17D4;Po;L;
-17D5;Po;L;
-17D6;Po;L;
-17D7;Po;L;
-17D8;Po;L;
-17D9;Po;L;
-17DA;Po;L;
-17DB;Sc;ET;
-17DC;Po;L;
-17E0;Nd;L;
-17E1;Nd;L;
-17E2;Nd;L;
-17E3;Nd;L;
-17E4;Nd;L;
-17E5;Nd;L;
-17E6;Nd;L;
-17E7;Nd;L;
-17E8;Nd;L;
-17E9;Nd;L;
-1800;Po;ON;
-1801;Po;ON;
-1802;Po;ON;
-1803;Po;ON;
-1804;Po;ON;
-1805;Po;ON;
-1806;Pd;ON;
-1807;Po;ON;
-1808;Po;ON;
-1809;Po;ON;
-180A;Po;ON;
-180B;Cf;BN;
-180C;Cf;BN;
-180D;Cf;BN;
-180E;Cf;BN;
-1810;Nd;L;
-1811;Nd;L;
-1812;Nd;L;
-1813;Nd;L;
-1814;Nd;L;
-1815;Nd;L;
-1816;Nd;L;
-1817;Nd;L;
-1818;Nd;L;
-1819;Nd;L;
-1820;Lo;L;
-1821;Lo;L;
-1822;Lo;L;
-1823;Lo;L;
-1824;Lo;L;
-1825;Lo;L;
-1826;Lo;L;
-1827;Lo;L;
-1828;Lo;L;
-1829;Lo;L;
-182A;Lo;L;
-182B;Lo;L;
-182C;Lo;L;
-182D;Lo;L;
-182E;Lo;L;
-182F;Lo;L;
-1830;Lo;L;
-1831;Lo;L;
-1832;Lo;L;
-1833;Lo;L;
-1834;Lo;L;
-1835;Lo;L;
-1836;Lo;L;
-1837;Lo;L;
-1838;Lo;L;
-1839;Lo;L;
-183A;Lo;L;
-183B;Lo;L;
-183C;Lo;L;
-183D;Lo;L;
-183E;Lo;L;
-183F;Lo;L;
-1840;Lo;L;
-1841;Lo;L;
-1842;Lo;L;
-1843;Lm;L;
-1844;Lo;L;
-1845;Lo;L;
-1846;Lo;L;
-1847;Lo;L;
-1848;Lo;L;
-1849;Lo;L;
-184A;Lo;L;
-184B;Lo;L;
-184C;Lo;L;
-184D;Lo;L;
-184E;Lo;L;
-184F;Lo;L;
-1850;Lo;L;
-1851;Lo;L;
-1852;Lo;L;
-1853;Lo;L;
-1854;Lo;L;
-1855;Lo;L;
-1856;Lo;L;
-1857;Lo;L;
-1858;Lo;L;
-1859;Lo;L;
-185A;Lo;L;
-185B;Lo;L;
-185C;Lo;L;
-185D;Lo;L;
-185E;Lo;L;
-185F;Lo;L;
-1860;Lo;L;
-1861;Lo;L;
-1862;Lo;L;
-1863;Lo;L;
-1864;Lo;L;
-1865;Lo;L;
-1866;Lo;L;
-1867;Lo;L;
-1868;Lo;L;
-1869;Lo;L;
-186A;Lo;L;
-186B;Lo;L;
-186C;Lo;L;
-186D;Lo;L;
-186E;Lo;L;
-186F;Lo;L;
-1870;Lo;L;
-1871;Lo;L;
-1872;Lo;L;
-1873;Lo;L;
-1874;Lo;L;
-1875;Lo;L;
-1876;Lo;L;
-1877;Lo;L;
-1880;Lo;L;
-1881;Lo;L;
-1882;Lo;L;
-1883;Lo;L;
-1884;Lo;L;
-1885;Lo;L;
-1886;Lo;L;
-1887;Lo;L;
-1888;Lo;L;
-1889;Lo;L;
-188A;Lo;L;
-188B;Lo;L;
-188C;Lo;L;
-188D;Lo;L;
-188E;Lo;L;
-188F;Lo;L;
-1890;Lo;L;
-1891;Lo;L;
-1892;Lo;L;
-1893;Lo;L;
-1894;Lo;L;
-1895;Lo;L;
-1896;Lo;L;
-1897;Lo;L;
-1898;Lo;L;
-1899;Lo;L;
-189A;Lo;L;
-189B;Lo;L;
-189C;Lo;L;
-189D;Lo;L;
-189E;Lo;L;
-189F;Lo;L;
-18A0;Lo;L;
-18A1;Lo;L;
-18A2;Lo;L;
-18A3;Lo;L;
-18A4;Lo;L;
-18A5;Lo;L;
-18A6;Lo;L;
-18A7;Lo;L;
-18A8;Lo;L;
-18A9;Mn;NSM;
-1E00;Lu;L;
-1E01;Ll;L;
-1E02;Lu;L;
-1E03;Ll;L;
-1E04;Lu;L;
-1E05;Ll;L;
-1E06;Lu;L;
-1E07;Ll;L;
-1E08;Lu;L;
-1E09;Ll;L;
-1E0A;Lu;L;
-1E0B;Ll;L;
-1E0C;Lu;L;
-1E0D;Ll;L;
-1E0E;Lu;L;
-1E0F;Ll;L;
-1E10;Lu;L;
-1E11;Ll;L;
-1E12;Lu;L;
-1E13;Ll;L;
-1E14;Lu;L;
-1E15;Ll;L;
-1E16;Lu;L;
-1E17;Ll;L;
-1E18;Lu;L;
-1E19;Ll;L;
-1E1A;Lu;L;
-1E1B;Ll;L;
-1E1C;Lu;L;
-1E1D;Ll;L;
-1E1E;Lu;L;
-1E1F;Ll;L;
-1E20;Lu;L;
-1E21;Ll;L;
-1E22;Lu;L;
-1E23;Ll;L;
-1E24;Lu;L;
-1E25;Ll;L;
-1E26;Lu;L;
-1E27;Ll;L;
-1E28;Lu;L;
-1E29;Ll;L;
-1E2A;Lu;L;
-1E2B;Ll;L;
-1E2C;Lu;L;
-1E2D;Ll;L;
-1E2E;Lu;L;
-1E2F;Ll;L;
-1E30;Lu;L;
-1E31;Ll;L;
-1E32;Lu;L;
-1E33;Ll;L;
-1E34;Lu;L;
-1E35;Ll;L;
-1E36;Lu;L;
-1E37;Ll;L;
-1E38;Lu;L;
-1E39;Ll;L;
-1E3A;Lu;L;
-1E3B;Ll;L;
-1E3C;Lu;L;
-1E3D;Ll;L;
-1E3E;Lu;L;
-1E3F;Ll;L;
-1E40;Lu;L;
-1E41;Ll;L;
-1E42;Lu;L;
-1E43;Ll;L;
-1E44;Lu;L;
-1E45;Ll;L;
-1E46;Lu;L;
-1E47;Ll;L;
-1E48;Lu;L;
-1E49;Ll;L;
-1E4A;Lu;L;
-1E4B;Ll;L;
-1E4C;Lu;L;
-1E4D;Ll;L;
-1E4E;Lu;L;
-1E4F;Ll;L;
-1E50;Lu;L;
-1E51;Ll;L;
-1E52;Lu;L;
-1E53;Ll;L;
-1E54;Lu;L;
-1E55;Ll;L;
-1E56;Lu;L;
-1E57;Ll;L;
-1E58;Lu;L;
-1E59;Ll;L;
-1E5A;Lu;L;
-1E5B;Ll;L;
-1E5C;Lu;L;
-1E5D;Ll;L;
-1E5E;Lu;L;
-1E5F;Ll;L;
-1E60;Lu;L;
-1E61;Ll;L;
-1E62;Lu;L;
-1E63;Ll;L;
-1E64;Lu;L;
-1E65;Ll;L;
-1E66;Lu;L;
-1E67;Ll;L;
-1E68;Lu;L;
-1E69;Ll;L;
-1E6A;Lu;L;
-1E6B;Ll;L;
-1E6C;Lu;L;
-1E6D;Ll;L;
-1E6E;Lu;L;
-1E6F;Ll;L;
-1E70;Lu;L;
-1E71;Ll;L;
-1E72;Lu;L;
-1E73;Ll;L;
-1E74;Lu;L;
-1E75;Ll;L;
-1E76;Lu;L;
-1E77;Ll;L;
-1E78;Lu;L;
-1E79;Ll;L;
-1E7A;Lu;L;
-1E7B;Ll;L;
-1E7C;Lu;L;
-1E7D;Ll;L;
-1E7E;Lu;L;
-1E7F;Ll;L;
-1E80;Lu;L;
-1E81;Ll;L;
-1E82;Lu;L;
-1E83;Ll;L;
-1E84;Lu;L;
-1E85;Ll;L;
-1E86;Lu;L;
-1E87;Ll;L;
-1E88;Lu;L;
-1E89;Ll;L;
-1E8A;Lu;L;
-1E8B;Ll;L;
-1E8C;Lu;L;
-1E8D;Ll;L;
-1E8E;Lu;L;
-1E8F;Ll;L;
-1E90;Lu;L;
-1E91;Ll;L;
-1E92;Lu;L;
-1E93;Ll;L;
-1E94;Lu;L;
-1E95;Ll;L;
-1E96;Ll;L;
-1E97;Ll;L;
-1E98;Ll;L;
-1E99;Ll;L;
-1E9A;Ll;L;
-1E9B;Ll;L;
-1EA0;Lu;L;
-1EA1;Ll;L;
-1EA2;Lu;L;
-1EA3;Ll;L;
-1EA4;Lu;L;
-1EA5;Ll;L;
-1EA6;Lu;L;
-1EA7;Ll;L;
-1EA8;Lu;L;
-1EA9;Ll;L;
-1EAA;Lu;L;
-1EAB;Ll;L;
-1EAC;Lu;L;
-1EAD;Ll;L;
-1EAE;Lu;L;
-1EAF;Ll;L;
-1EB0;Lu;L;
-1EB1;Ll;L;
-1EB2;Lu;L;
-1EB3;Ll;L;
-1EB4;Lu;L;
-1EB5;Ll;L;
-1EB6;Lu;L;
-1EB7;Ll;L;
-1EB8;Lu;L;
-1EB9;Ll;L;
-1EBA;Lu;L;
-1EBB;Ll;L;
-1EBC;Lu;L;
-1EBD;Ll;L;
-1EBE;Lu;L;
-1EBF;Ll;L;
-1EC0;Lu;L;
-1EC1;Ll;L;
-1EC2;Lu;L;
-1EC3;Ll;L;
-1EC4;Lu;L;
-1EC5;Ll;L;
-1EC6;Lu;L;
-1EC7;Ll;L;
-1EC8;Lu;L;
-1EC9;Ll;L;
-1ECA;Lu;L;
-1ECB;Ll;L;
-1ECC;Lu;L;
-1ECD;Ll;L;
-1ECE;Lu;L;
-1ECF;Ll;L;
-1ED0;Lu;L;
-1ED1;Ll;L;
-1ED2;Lu;L;
-1ED3;Ll;L;
-1ED4;Lu;L;
-1ED5;Ll;L;
-1ED6;Lu;L;
-1ED7;Ll;L;
-1ED8;Lu;L;
-1ED9;Ll;L;
-1EDA;Lu;L;
-1EDB;Ll;L;
-1EDC;Lu;L;
-1EDD;Ll;L;
-1EDE;Lu;L;
-1EDF;Ll;L;
-1EE0;Lu;L;
-1EE1;Ll;L;
-1EE2;Lu;L;
-1EE3;Ll;L;
-1EE4;Lu;L;
-1EE5;Ll;L;
-1EE6;Lu;L;
-1EE7;Ll;L;
-1EE8;Lu;L;
-1EE9;Ll;L;
-1EEA;Lu;L;
-1EEB;Ll;L;
-1EEC;Lu;L;
-1EED;Ll;L;
-1EEE;Lu;L;
-1EEF;Ll;L;
-1EF0;Lu;L;
-1EF1;Ll;L;
-1EF2;Lu;L;
-1EF3;Ll;L;
-1EF4;Lu;L;
-1EF5;Ll;L;
-1EF6;Lu;L;
-1EF7;Ll;L;
-1EF8;Lu;L;
-1EF9;Ll;L;
-1F00;Ll;L;
-1F01;Ll;L;
-1F02;Ll;L;
-1F03;Ll;L;
-1F04;Ll;L;
-1F05;Ll;L;
-1F06;Ll;L;
-1F07;Ll;L;
-1F08;Lu;L;
-1F09;Lu;L;
-1F0A;Lu;L;
-1F0B;Lu;L;
-1F0C;Lu;L;
-1F0D;Lu;L;
-1F0E;Lu;L;
-1F0F;Lu;L;
-1F10;Ll;L;
-1F11;Ll;L;
-1F12;Ll;L;
-1F13;Ll;L;
-1F14;Ll;L;
-1F15;Ll;L;
-1F18;Lu;L;
-1F19;Lu;L;
-1F1A;Lu;L;
-1F1B;Lu;L;
-1F1C;Lu;L;
-1F1D;Lu;L;
-1F20;Ll;L;
-1F21;Ll;L;
-1F22;Ll;L;
-1F23;Ll;L;
-1F24;Ll;L;
-1F25;Ll;L;
-1F26;Ll;L;
-1F27;Ll;L;
-1F28;Lu;L;
-1F29;Lu;L;
-1F2A;Lu;L;
-1F2B;Lu;L;
-1F2C;Lu;L;
-1F2D;Lu;L;
-1F2E;Lu;L;
-1F2F;Lu;L;
-1F30;Ll;L;
-1F31;Ll;L;
-1F32;Ll;L;
-1F33;Ll;L;
-1F34;Ll;L;
-1F35;Ll;L;
-1F36;Ll;L;
-1F37;Ll;L;
-1F38;Lu;L;
-1F39;Lu;L;
-1F3A;Lu;L;
-1F3B;Lu;L;
-1F3C;Lu;L;
-1F3D;Lu;L;
-1F3E;Lu;L;
-1F3F;Lu;L;
-1F40;Ll;L;
-1F41;Ll;L;
-1F42;Ll;L;
-1F43;Ll;L;
-1F44;Ll;L;
-1F45;Ll;L;
-1F48;Lu;L;
-1F49;Lu;L;
-1F4A;Lu;L;
-1F4B;Lu;L;
-1F4C;Lu;L;
-1F4D;Lu;L;
-1F50;Ll;L;
-1F51;Ll;L;
-1F52;Ll;L;
-1F53;Ll;L;
-1F54;Ll;L;
-1F55;Ll;L;
-1F56;Ll;L;
-1F57;Ll;L;
-1F59;Lu;L;
-1F5B;Lu;L;
-1F5D;Lu;L;
-1F5F;Lu;L;
-1F60;Ll;L;
-1F61;Ll;L;
-1F62;Ll;L;
-1F63;Ll;L;
-1F64;Ll;L;
-1F65;Ll;L;
-1F66;Ll;L;
-1F67;Ll;L;
-1F68;Lu;L;
-1F69;Lu;L;
-1F6A;Lu;L;
-1F6B;Lu;L;
-1F6C;Lu;L;
-1F6D;Lu;L;
-1F6E;Lu;L;
-1F6F;Lu;L;
-1F70;Ll;L;
-1F71;Ll;L;
-1F72;Ll;L;
-1F73;Ll;L;
-1F74;Ll;L;
-1F75;Ll;L;
-1F76;Ll;L;
-1F77;Ll;L;
-1F78;Ll;L;
-1F79;Ll;L;
-1F7A;Ll;L;
-1F7B;Ll;L;
-1F7C;Ll;L;
-1F7D;Ll;L;
-1F80;Ll;L;
-1F81;Ll;L;
-1F82;Ll;L;
-1F83;Ll;L;
-1F84;Ll;L;
-1F85;Ll;L;
-1F86;Ll;L;
-1F87;Ll;L;
-1F88;Lt;L;
-1F89;Lt;L;
-1F8A;Lt;L;
-1F8B;Lt;L;
-1F8C;Lt;L;
-1F8D;Lt;L;
-1F8E;Lt;L;
-1F8F;Lt;L;
-1F90;Ll;L;
-1F91;Ll;L;
-1F92;Ll;L;
-1F93;Ll;L;
-1F94;Ll;L;
-1F95;Ll;L;
-1F96;Ll;L;
-1F97;Ll;L;
-1F98;Lt;L;
-1F99;Lt;L;
-1F9A;Lt;L;
-1F9B;Lt;L;
-1F9C;Lt;L;
-1F9D;Lt;L;
-1F9E;Lt;L;
-1F9F;Lt;L;
-1FA0;Ll;L;
-1FA1;Ll;L;
-1FA2;Ll;L;
-1FA3;Ll;L;
-1FA4;Ll;L;
-1FA5;Ll;L;
-1FA6;Ll;L;
-1FA7;Ll;L;
-1FA8;Lt;L;
-1FA9;Lt;L;
-1FAA;Lt;L;
-1FAB;Lt;L;
-1FAC;Lt;L;
-1FAD;Lt;L;
-1FAE;Lt;L;
-1FAF;Lt;L;
-1FB0;Ll;L;
-1FB1;Ll;L;
-1FB2;Ll;L;
-1FB3;Ll;L;
-1FB4;Ll;L;
-1FB6;Ll;L;
-1FB7;Ll;L;
-1FB8;Lu;L;
-1FB9;Lu;L;
-1FBA;Lu;L;
-1FBB;Lu;L;
-1FBC;Lt;L;
-1FBD;Sk;ON;
-1FBE;Ll;L;
-1FBF;Sk;ON;
-1FC0;Sk;ON;
-1FC1;Sk;ON;
-1FC2;Ll;L;
-1FC3;Ll;L;
-1FC4;Ll;L;
-1FC6;Ll;L;
-1FC7;Ll;L;
-1FC8;Lu;L;
-1FC9;Lu;L;
-1FCA;Lu;L;
-1FCB;Lu;L;
-1FCC;Lt;L;
-1FCD;Sk;ON;
-1FCE;Sk;ON;
-1FCF;Sk;ON;
-1FD0;Ll;L;
-1FD1;Ll;L;
-1FD2;Ll;L;
-1FD3;Ll;L;
-1FD6;Ll;L;
-1FD7;Ll;L;
-1FD8;Lu;L;
-1FD9;Lu;L;
-1FDA;Lu;L;
-1FDB;Lu;L;
-1FDD;Sk;ON;
-1FDE;Sk;ON;
-1FDF;Sk;ON;
-1FE0;Ll;L;
-1FE1;Ll;L;
-1FE2;Ll;L;
-1FE3;Ll;L;
-1FE4;Ll;L;
-1FE5;Ll;L;
-1FE6;Ll;L;
-1FE7;Ll;L;
-1FE8;Lu;L;
-1FE9;Lu;L;
-1FEA;Lu;L;
-1FEB;Lu;L;
-1FEC;Lu;L;
-1FED;Sk;ON;
-1FEE;Sk;ON;
-1FEF;Sk;ON;
-1FF2;Ll;L;
-1FF3;Ll;L;
-1FF4;Ll;L;
-1FF6;Ll;L;
-1FF7;Ll;L;
-1FF8;Lu;L;
-1FF9;Lu;L;
-1FFA;Lu;L;
-1FFB;Lu;L;
-1FFC;Lt;L;
-1FFD;Sk;ON;
-1FFE;Sk;ON;
-2000;Zs;WS;
-2001;Zs;WS;
-2002;Zs;WS;
-2003;Zs;WS;
-2004;Zs;WS;
-2005;Zs;WS;
-2006;Zs;WS;
-2007;Zs;WS;
-2008;Zs;WS;
-2009;Zs;WS;
-200A;Zs;WS;
-200B;Zs;BN;
-200C;Cf;BN;
-200D;Cf;BN;
-200E;Cf;L;
-200F;Cf;R;
-2010;Pd;ON;
-2011;Pd;ON;
-2012;Pd;ON;
-2013;Pd;ON;
-2014;Pd;ON;
-2015;Pd;ON;
-2016;Po;ON;
-2017;Po;ON;
-2018;Pi;ON;
-2019;Pf;ON;
-201A;Ps;ON;
-201B;Pi;ON;
-201C;Pi;ON;
-201D;Pf;ON;
-201E;Ps;ON;
-201F;Pi;ON;
-2020;Po;ON;
-2021;Po;ON;
-2022;Po;ON;
-2023;Po;ON;
-2024;Po;ON;
-2025;Po;ON;
-2026;Po;ON;
-2027;Po;ON;
-2028;Zl;WS;
-2029;Zp;B;
-202A;Cf;LRE;
-202B;Cf;RLE;
-202C;Cf;PDF;
-202D;Cf;LRO;
-202E;Cf;RLO;
-202F;Zs;WS;
-2030;Po;ET;
-2031;Po;ET;
-2032;Po;ET;
-2033;Po;ET;
-2034;Po;ET;
-2035;Po;ON;
-2036;Po;ON;
-2037;Po;ON;
-2038;Po;ON;
-2039;Pi;ON;
-203A;Pf;ON;
-203B;Po;ON;
-203C;Po;ON;
-203D;Po;ON;
-203E;Po;ON;
-203F;Pc;ON;
-2040;Pc;ON;
-2041;Po;ON;
-2042;Po;ON;
-2043;Po;ON;
-2044;Sm;ON;
-2045;Ps;ON;
-2046;Pe;ON;
-2048;Po;ON;
-2049;Po;ON;
-204A;Po;ON;
-204B;Po;ON;
-204C;Po;ON;
-204D;Po;ON;
-206A;Cf;BN;
-206B;Cf;BN;
-206C;Cf;BN;
-206D;Cf;BN;
-206E;Cf;BN;
-206F;Cf;BN;
-2070;No;EN;
-2074;No;EN;
-2075;No;EN;
-2076;No;EN;
-2077;No;EN;
-2078;No;EN;
-2079;No;EN;
-207A;Sm;ET;
-207B;Sm;ET;
-207C;Sm;ON;
-207D;Ps;ON;
-207E;Pe;ON;
-207F;Ll;L;
-2080;No;EN;
-2081;No;EN;
-2082;No;EN;
-2083;No;EN;
-2084;No;EN;
-2085;No;EN;
-2086;No;EN;
-2087;No;EN;
-2088;No;EN;
-2089;No;EN;
-208A;Sm;ET;
-208B;Sm;ET;
-208C;Sm;ON;
-208D;Ps;ON;
-208E;Pe;ON;
-20A0;Sc;ET;
-20A1;Sc;ET;
-20A2;Sc;ET;
-20A3;Sc;ET;
-20A4;Sc;ET;
-20A5;Sc;ET;
-20A6;Sc;ET;
-20A7;Sc;ET;
-20A8;Sc;ET;
-20A9;Sc;ET;
-20AA;Sc;ET;
-20AB;Sc;ET;
-20AC;Sc;ET;
-20AD;Sc;ET;
-20AE;Sc;ET;
-20AF;Sc;ET;
-20D0;Mn;NSM;
-20D1;Mn;NSM;
-20D2;Mn;NSM;
-20D3;Mn;NSM;
-20D4;Mn;NSM;
-20D5;Mn;NSM;
-20D6;Mn;NSM;
-20D7;Mn;NSM;
-20D8;Mn;NSM;
-20D9;Mn;NSM;
-20DA;Mn;NSM;
-20DB;Mn;NSM;
-20DC;Mn;NSM;
-20DD;Me;NSM;
-20DE;Me;NSM;
-20DF;Me;NSM;
-20E0;Me;NSM;
-20E1;Mn;NSM;
-20E2;Me;NSM;
-20E3;Me;NSM;
-2100;So;ON;
-2101;So;ON;
-2102;Lu;L;
-2103;So;ON;
-2104;So;ON;
-2105;So;ON;
-2106;So;ON;
-2107;Lu;L;
-2108;So;ON;
-2109;So;ON;
-210A;Ll;L;
-210B;Lu;L;
-210C;Lu;L;
-210D;Lu;L;
-210E;Ll;L;
-210F;Ll;L;
-2110;Lu;L;
-2111;Lu;L;
-2112;Lu;L;
-2113;Ll;L;
-2114;So;ON;
-2115;Lu;L;
-2116;So;ON;
-2117;So;ON;
-2118;So;ON;
-2119;Lu;L;
-211A;Lu;L;
-211B;Lu;L;
-211C;Lu;L;
-211D;Lu;L;
-211E;So;ON;
-211F;So;ON;
-2120;So;ON;
-2121;So;ON;
-2122;So;ON;
-2123;So;ON;
-2124;Lu;L;
-2125;So;ON;
-2126;Lu;L;
-2127;So;ON;
-2128;Lu;L;
-2129;So;ON;
-212A;Lu;L;
-212B;Lu;L;
-212C;Lu;L;
-212D;Lu;L;
-212E;So;ET;
-212F;Ll;L;
-2130;Lu;L;
-2131;Lu;L;
-2132;So;ON;
-2133;Lu;L;
-2134;Ll;L;
-2135;Lo;L;
-2136;Lo;L;
-2137;Lo;L;
-2138;Lo;L;
-2139;Ll;L;
-213A;So;ON;
-2153;No;ON;
-2154;No;ON;
-2155;No;ON;
-2156;No;ON;
-2157;No;ON;
-2158;No;ON;
-2159;No;ON;
-215A;No;ON;
-215B;No;ON;
-215C;No;ON;
-215D;No;ON;
-215E;No;ON;
-215F;No;ON;
-2160;Nl;L;
-2161;Nl;L;
-2162;Nl;L;
-2163;Nl;L;
-2164;Nl;L;
-2165;Nl;L;
-2166;Nl;L;
-2167;Nl;L;
-2168;Nl;L;
-2169;Nl;L;
-216A;Nl;L;
-216B;Nl;L;
-216C;Nl;L;
-216D;Nl;L;
-216E;Nl;L;
-216F;Nl;L;
-2170;Nl;L;
-2171;Nl;L;
-2172;Nl;L;
-2173;Nl;L;
-2174;Nl;L;
-2175;Nl;L;
-2176;Nl;L;
-2177;Nl;L;
-2178;Nl;L;
-2179;Nl;L;
-217A;Nl;L;
-217B;Nl;L;
-217C;Nl;L;
-217D;Nl;L;
-217E;Nl;L;
-217F;Nl;L;
-2180;Nl;L;
-2181;Nl;L;
-2182;Nl;L;
-2183;Nl;L;
-2190;Sm;ON;
-2191;Sm;ON;
-2192;Sm;ON;
-2193;Sm;ON;
-2194;Sm;ON;
-2195;So;ON;
-2196;So;ON;
-2197;So;ON;
-2198;So;ON;
-2199;So;ON;
-219A;Sm;ON;
-219B;Sm;ON;
-219C;So;ON;
-219D;So;ON;
-219E;So;ON;
-219F;So;ON;
-21A0;Sm;ON;
-21A1;So;ON;
-21A2;So;ON;
-21A3;Sm;ON;
-21A4;So;ON;
-21A5;So;ON;
-21A6;Sm;ON;
-21A7;So;ON;
-21A8;So;ON;
-21A9;So;ON;
-21AA;So;ON;
-21AB;So;ON;
-21AC;So;ON;
-21AD;So;ON;
-21AE;Sm;ON;
-21AF;So;ON;
-21B0;So;ON;
-21B1;So;ON;
-21B2;So;ON;
-21B3;So;ON;
-21B4;So;ON;
-21B5;So;ON;
-21B6;So;ON;
-21B7;So;ON;
-21B8;So;ON;
-21B9;So;ON;
-21BA;So;ON;
-21BB;So;ON;
-21BC;So;ON;
-21BD;So;ON;
-21BE;So;ON;
-21BF;So;ON;
-21C0;So;ON;
-21C1;So;ON;
-21C2;So;ON;
-21C3;So;ON;
-21C4;So;ON;
-21C5;So;ON;
-21C6;So;ON;
-21C7;So;ON;
-21C8;So;ON;
-21C9;So;ON;
-21CA;So;ON;
-21CB;So;ON;
-21CC;So;ON;
-21CD;So;ON;
-21CE;Sm;ON;
-21CF;Sm;ON;
-21D0;So;ON;
-21D1;So;ON;
-21D2;Sm;ON;
-21D3;So;ON;
-21D4;Sm;ON;
-21D5;So;ON;
-21D6;So;ON;
-21D7;So;ON;
-21D8;So;ON;
-21D9;So;ON;
-21DA;So;ON;
-21DB;So;ON;
-21DC;So;ON;
-21DD;So;ON;
-21DE;So;ON;
-21DF;So;ON;
-21E0;So;ON;
-21E1;So;ON;
-21E2;So;ON;
-21E3;So;ON;
-21E4;So;ON;
-21E5;So;ON;
-21E6;So;ON;
-21E7;So;ON;
-21E8;So;ON;
-21E9;So;ON;
-21EA;So;ON;
-21EB;So;ON;
-21EC;So;ON;
-21ED;So;ON;
-21EE;So;ON;
-21EF;So;ON;
-21F0;So;ON;
-21F1;So;ON;
-21F2;So;ON;
-21F3;So;ON;
-2200;Sm;ON;
-2201;Sm;ON;
-2202;Sm;ON;
-2203;Sm;ON;
-2204;Sm;ON;
-2205;Sm;ON;
-2206;Sm;ON;
-2207;Sm;ON;
-2208;Sm;ON;
-2209;Sm;ON;
-220A;Sm;ON;
-220B;Sm;ON;
-220C;Sm;ON;
-220D;Sm;ON;
-220E;Sm;ON;
-220F;Sm;ON;
-2210;Sm;ON;
-2211;Sm;ON;
-2212;Sm;ET;
-2213;Sm;ET;
-2214;Sm;ON;
-2215;Sm;ON;
-2216;Sm;ON;
-2217;Sm;ON;
-2218;Sm;ON;
-2219;Sm;ON;
-221A;Sm;ON;
-221B;Sm;ON;
-221C;Sm;ON;
-221D;Sm;ON;
-221E;Sm;ON;
-221F;Sm;ON;
-2220;Sm;ON;
-2221;Sm;ON;
-2222;Sm;ON;
-2223;Sm;ON;
-2224;Sm;ON;
-2225;Sm;ON;
-2226;Sm;ON;
-2227;Sm;ON;
-2228;Sm;ON;
-2229;Sm;ON;
-222A;Sm;ON;
-222B;Sm;ON;
-222C;Sm;ON;
-222D;Sm;ON;
-222E;Sm;ON;
-222F;Sm;ON;
-2230;Sm;ON;
-2231;Sm;ON;
-2232;Sm;ON;
-2233;Sm;ON;
-2234;Sm;ON;
-2235;Sm;ON;
-2236;Sm;ON;
-2237;Sm;ON;
-2238;Sm;ON;
-2239;Sm;ON;
-223A;Sm;ON;
-223B;Sm;ON;
-223C;Sm;ON;
-223D;Sm;ON;
-223E;Sm;ON;
-223F;Sm;ON;
-2240;Sm;ON;
-2241;Sm;ON;
-2242;Sm;ON;
-2243;Sm;ON;
-2244;Sm;ON;
-2245;Sm;ON;
-2246;Sm;ON;
-2247;Sm;ON;
-2248;Sm;ON;
-2249;Sm;ON;
-224A;Sm;ON;
-224B;Sm;ON;
-224C;Sm;ON;
-224D;Sm;ON;
-224E;Sm;ON;
-224F;Sm;ON;
-2250;Sm;ON;
-2251;Sm;ON;
-2252;Sm;ON;
-2253;Sm;ON;
-2254;Sm;ON;
-2255;Sm;ON;
-2256;Sm;ON;
-2257;Sm;ON;
-2258;Sm;ON;
-2259;Sm;ON;
-225A;Sm;ON;
-225B;Sm;ON;
-225C;Sm;ON;
-225D;Sm;ON;
-225E;Sm;ON;
-225F;Sm;ON;
-2260;Sm;ON;
-2261;Sm;ON;
-2262;Sm;ON;
-2263;Sm;ON;
-2264;Sm;ON;
-2265;Sm;ON;
-2266;Sm;ON;
-2267;Sm;ON;
-2268;Sm;ON;
-2269;Sm;ON;
-226A;Sm;ON;
-226B;Sm;ON;
-226C;Sm;ON;
-226D;Sm;ON;
-226E;Sm;ON;
-226F;Sm;ON;
-2270;Sm;ON;
-2271;Sm;ON;
-2272;Sm;ON;
-2273;Sm;ON;
-2274;Sm;ON;
-2275;Sm;ON;
-2276;Sm;ON;
-2277;Sm;ON;
-2278;Sm;ON;
-2279;Sm;ON;
-227A;Sm;ON;
-227B;Sm;ON;
-227C;Sm;ON;
-227D;Sm;ON;
-227E;Sm;ON;
-227F;Sm;ON;
-2280;Sm;ON;
-2281;Sm;ON;
-2282;Sm;ON;
-2283;Sm;ON;
-2284;Sm;ON;
-2285;Sm;ON;
-2286;Sm;ON;
-2287;Sm;ON;
-2288;Sm;ON;
-2289;Sm;ON;
-228A;Sm;ON;
-228B;Sm;ON;
-228C;Sm;ON;
-228D;Sm;ON;
-228E;Sm;ON;
-228F;Sm;ON;
-2290;Sm;ON;
-2291;Sm;ON;
-2292;Sm;ON;
-2293;Sm;ON;
-2294;Sm;ON;
-2295;Sm;ON;
-2296;Sm;ON;
-2297;Sm;ON;
-2298;Sm;ON;
-2299;Sm;ON;
-229A;Sm;ON;
-229B;Sm;ON;
-229C;Sm;ON;
-229D;Sm;ON;
-229E;Sm;ON;
-229F;Sm;ON;
-22A0;Sm;ON;
-22A1;Sm;ON;
-22A2;Sm;ON;
-22A3;Sm;ON;
-22A4;Sm;ON;
-22A5;Sm;ON;
-22A6;Sm;ON;
-22A7;Sm;ON;
-22A8;Sm;ON;
-22A9;Sm;ON;
-22AA;Sm;ON;
-22AB;Sm;ON;
-22AC;Sm;ON;
-22AD;Sm;ON;
-22AE;Sm;ON;
-22AF;Sm;ON;
-22B0;Sm;ON;
-22B1;Sm;ON;
-22B2;Sm;ON;
-22B3;Sm;ON;
-22B4;Sm;ON;
-22B5;Sm;ON;
-22B6;Sm;ON;
-22B7;Sm;ON;
-22B8;Sm;ON;
-22B9;Sm;ON;
-22BA;Sm;ON;
-22BB;Sm;ON;
-22BC;Sm;ON;
-22BD;Sm;ON;
-22BE;Sm;ON;
-22BF;Sm;ON;
-22C0;Sm;ON;
-22C1;Sm;ON;
-22C2;Sm;ON;
-22C3;Sm;ON;
-22C4;Sm;ON;
-22C5;Sm;ON;
-22C6;Sm;ON;
-22C7;Sm;ON;
-22C8;Sm;ON;
-22C9;Sm;ON;
-22CA;Sm;ON;
-22CB;Sm;ON;
-22CC;Sm;ON;
-22CD;Sm;ON;
-22CE;Sm;ON;
-22CF;Sm;ON;
-22D0;Sm;ON;
-22D1;Sm;ON;
-22D2;Sm;ON;
-22D3;Sm;ON;
-22D4;Sm;ON;
-22D5;Sm;ON;
-22D6;Sm;ON;
-22D7;Sm;ON;
-22D8;Sm;ON;
-22D9;Sm;ON;
-22DA;Sm;ON;
-22DB;Sm;ON;
-22DC;Sm;ON;
-22DD;Sm;ON;
-22DE;Sm;ON;
-22DF;Sm;ON;
-22E0;Sm;ON;
-22E1;Sm;ON;
-22E2;Sm;ON;
-22E3;Sm;ON;
-22E4;Sm;ON;
-22E5;Sm;ON;
-22E6;Sm;ON;
-22E7;Sm;ON;
-22E8;Sm;ON;
-22E9;Sm;ON;
-22EA;Sm;ON;
-22EB;Sm;ON;
-22EC;Sm;ON;
-22ED;Sm;ON;
-22EE;Sm;ON;
-22EF;Sm;ON;
-22F0;Sm;ON;
-22F1;Sm;ON;
-2300;So;ON;
-2301;So;ON;
-2302;So;ON;
-2303;So;ON;
-2304;So;ON;
-2305;So;ON;
-2306;So;ON;
-2307;So;ON;
-2308;Sm;ON;
-2309;Sm;ON;
-230A;Sm;ON;
-230B;Sm;ON;
-230C;So;ON;
-230D;So;ON;
-230E;So;ON;
-230F;So;ON;
-2310;So;ON;
-2311;So;ON;
-2312;So;ON;
-2313;So;ON;
-2314;So;ON;
-2315;So;ON;
-2316;So;ON;
-2317;So;ON;
-2318;So;ON;
-2319;So;ON;
-231A;So;ON;
-231B;So;ON;
-231C;So;ON;
-231D;So;ON;
-231E;So;ON;
-231F;So;ON;
-2320;Sm;ON;
-2321;Sm;ON;
-2322;So;ON;
-2323;So;ON;
-2324;So;ON;
-2325;So;ON;
-2326;So;ON;
-2327;So;ON;
-2328;So;ON;
-2329;Ps;ON;
-232A;Pe;ON;
-232B;So;ON;
-232C;So;ON;
-232D;So;ON;
-232E;So;ON;
-232F;So;ON;
-2330;So;ON;
-2331;So;ON;
-2332;So;ON;
-2333;So;ON;
-2334;So;ON;
-2335;So;ON;
-2336;So;L;
-2337;So;L;
-2338;So;L;
-2339;So;L;
-233A;So;L;
-233B;So;L;
-233C;So;L;
-233D;So;L;
-233E;So;L;
-233F;So;L;
-2340;So;L;
-2341;So;L;
-2342;So;L;
-2343;So;L;
-2344;So;L;
-2345;So;L;
-2346;So;L;
-2347;So;L;
-2348;So;L;
-2349;So;L;
-234A;So;L;
-234B;So;L;
-234C;So;L;
-234D;So;L;
-234E;So;L;
-234F;So;L;
-2350;So;L;
-2351;So;L;
-2352;So;L;
-2353;So;L;
-2354;So;L;
-2355;So;L;
-2356;So;L;
-2357;So;L;
-2358;So;L;
-2359;So;L;
-235A;So;L;
-235B;So;L;
-235C;So;L;
-235D;So;L;
-235E;So;L;
-235F;So;L;
-2360;So;L;
-2361;So;L;
-2362;So;L;
-2363;So;L;
-2364;So;L;
-2365;So;L;
-2366;So;L;
-2367;So;L;
-2368;So;L;
-2369;So;L;
-236A;So;L;
-236B;So;L;
-236C;So;L;
-236D;So;L;
-236E;So;L;
-236F;So;L;
-2370;So;L;
-2371;So;L;
-2372;So;L;
-2373;So;L;
-2374;So;L;
-2375;So;L;
-2376;So;L;
-2377;So;L;
-2378;So;L;
-2379;So;L;
-237A;So;L;
-237B;So;ON;
-237D;So;ON;
-237E;So;ON;
-237F;So;ON;
-2380;So;ON;
-2381;So;ON;
-2382;So;ON;
-2383;So;ON;
-2384;So;ON;
-2385;So;ON;
-2386;So;ON;
-2387;So;ON;
-2388;So;ON;
-2389;So;ON;
-238A;So;ON;
-238B;So;ON;
-238C;So;ON;
-238D;So;ON;
-238E;So;ON;
-238F;So;ON;
-2390;So;ON;
-2391;So;ON;
-2392;So;ON;
-2393;So;ON;
-2394;So;ON;
-2395;So;L;
-2396;So;ON;
-2397;So;ON;
-2398;So;ON;
-2399;So;ON;
-239A;So;ON;
-2400;So;ON;
-2401;So;ON;
-2402;So;ON;
-2403;So;ON;
-2404;So;ON;
-2405;So;ON;
-2406;So;ON;
-2407;So;ON;
-2408;So;ON;
-2409;So;ON;
-240A;So;ON;
-240B;So;ON;
-240C;So;ON;
-240D;So;ON;
-240E;So;ON;
-240F;So;ON;
-2410;So;ON;
-2411;So;ON;
-2412;So;ON;
-2413;So;ON;
-2414;So;ON;
-2415;So;ON;
-2416;So;ON;
-2417;So;ON;
-2418;So;ON;
-2419;So;ON;
-241A;So;ON;
-241B;So;ON;
-241C;So;ON;
-241D;So;ON;
-241E;So;ON;
-241F;So;ON;
-2420;So;ON;
-2421;So;ON;
-2422;So;ON;
-2423;So;ON;
-2424;So;ON;
-2425;So;ON;
-2426;So;ON;
-2440;So;ON;
-2441;So;ON;
-2442;So;ON;
-2443;So;ON;
-2444;So;ON;
-2445;So;ON;
-2446;So;ON;
-2447;So;ON;
-2448;So;ON;
-2449;So;ON;
-244A;So;ON;
-2460;No;EN;
-2461;No;EN;
-2462;No;EN;
-2463;No;EN;
-2464;No;EN;
-2465;No;EN;
-2466;No;EN;
-2467;No;EN;
-2468;No;EN;
-2469;No;EN;
-246A;No;EN;
-246B;No;EN;
-246C;No;EN;
-246D;No;EN;
-246E;No;EN;
-246F;No;EN;
-2470;No;EN;
-2471;No;EN;
-2472;No;EN;
-2473;No;EN;
-2474;No;EN;
-2475;No;EN;
-2476;No;EN;
-2477;No;EN;
-2478;No;EN;
-2479;No;EN;
-247A;No;EN;
-247B;No;EN;
-247C;No;EN;
-247D;No;EN;
-247E;No;EN;
-247F;No;EN;
-2480;No;EN;
-2481;No;EN;
-2482;No;EN;
-2483;No;EN;
-2484;No;EN;
-2485;No;EN;
-2486;No;EN;
-2487;No;EN;
-2488;No;EN;
-2489;No;EN;
-248A;No;EN;
-248B;No;EN;
-248C;No;EN;
-248D;No;EN;
-248E;No;EN;
-248F;No;EN;
-2490;No;EN;
-2491;No;EN;
-2492;No;EN;
-2493;No;EN;
-2494;No;EN;
-2495;No;EN;
-2496;No;EN;
-2497;No;EN;
-2498;No;EN;
-2499;No;EN;
-249A;No;EN;
-249B;No;EN;
-249C;So;L;
-249D;So;L;
-249E;So;L;
-249F;So;L;
-24A0;So;L;
-24A1;So;L;
-24A2;So;L;
-24A3;So;L;
-24A4;So;L;
-24A5;So;L;
-24A6;So;L;
-24A7;So;L;
-24A8;So;L;
-24A9;So;L;
-24AA;So;L;
-24AB;So;L;
-24AC;So;L;
-24AD;So;L;
-24AE;So;L;
-24AF;So;L;
-24B0;So;L;
-24B1;So;L;
-24B2;So;L;
-24B3;So;L;
-24B4;So;L;
-24B5;So;L;
-24B6;So;L;
-24B7;So;L;
-24B8;So;L;
-24B9;So;L;
-24BA;So;L;
-24BB;So;L;
-24BC;So;L;
-24BD;So;L;
-24BE;So;L;
-24BF;So;L;
-24C0;So;L;
-24C1;So;L;
-24C2;So;L;
-24C3;So;L;
-24C4;So;L;
-24C5;So;L;
-24C6;So;L;
-24C7;So;L;
-24C8;So;L;
-24C9;So;L;
-24CA;So;L;
-24CB;So;L;
-24CC;So;L;
-24CD;So;L;
-24CE;So;L;
-24CF;So;L;
-24D0;So;L;
-24D1;So;L;
-24D2;So;L;
-24D3;So;L;
-24D4;So;L;
-24D5;So;L;
-24D6;So;L;
-24D7;So;L;
-24D8;So;L;
-24D9;So;L;
-24DA;So;L;
-24DB;So;L;
-24DC;So;L;
-24DD;So;L;
-24DE;So;L;
-24DF;So;L;
-24E0;So;L;
-24E1;So;L;
-24E2;So;L;
-24E3;So;L;
-24E4;So;L;
-24E5;So;L;
-24E6;So;L;
-24E7;So;L;
-24E8;So;L;
-24E9;So;L;
-24EA;No;EN;
-2500;So;ON;
-2501;So;ON;
-2502;So;ON;
-2503;So;ON;
-2504;So;ON;
-2505;So;ON;
-2506;So;ON;
-2507;So;ON;
-2508;So;ON;
-2509;So;ON;
-250A;So;ON;
-250B;So;ON;
-250C;So;ON;
-250D;So;ON;
-250E;So;ON;
-250F;So;ON;
-2510;So;ON;
-2511;So;ON;
-2512;So;ON;
-2513;So;ON;
-2514;So;ON;
-2515;So;ON;
-2516;So;ON;
-2517;So;ON;
-2518;So;ON;
-2519;So;ON;
-251A;So;ON;
-251B;So;ON;
-251C;So;ON;
-251D;So;ON;
-251E;So;ON;
-251F;So;ON;
-2520;So;ON;
-2521;So;ON;
-2522;So;ON;
-2523;So;ON;
-2524;So;ON;
-2525;So;ON;
-2526;So;ON;
-2527;So;ON;
-2528;So;ON;
-2529;So;ON;
-252A;So;ON;
-252B;So;ON;
-252C;So;ON;
-252D;So;ON;
-252E;So;ON;
-252F;So;ON;
-2530;So;ON;
-2531;So;ON;
-2532;So;ON;
-2533;So;ON;
-2534;So;ON;
-2535;So;ON;
-2536;So;ON;
-2537;So;ON;
-2538;So;ON;
-2539;So;ON;
-253A;So;ON;
-253B;So;ON;
-253C;So;ON;
-253D;So;ON;
-253E;So;ON;
-253F;So;ON;
-2540;So;ON;
-2541;So;ON;
-2542;So;ON;
-2543;So;ON;
-2544;So;ON;
-2545;So;ON;
-2546;So;ON;
-2547;So;ON;
-2548;So;ON;
-2549;So;ON;
-254A;So;ON;
-254B;So;ON;
-254C;So;ON;
-254D;So;ON;
-254E;So;ON;
-254F;So;ON;
-2550;So;ON;
-2551;So;ON;
-2552;So;ON;
-2553;So;ON;
-2554;So;ON;
-2555;So;ON;
-2556;So;ON;
-2557;So;ON;
-2558;So;ON;
-2559;So;ON;
-255A;So;ON;
-255B;So;ON;
-255C;So;ON;
-255D;So;ON;
-255E;So;ON;
-255F;So;ON;
-2560;So;ON;
-2561;So;ON;
-2562;So;ON;
-2563;So;ON;
-2564;So;ON;
-2565;So;ON;
-2566;So;ON;
-2567;So;ON;
-2568;So;ON;
-2569;So;ON;
-256A;So;ON;
-256B;So;ON;
-256C;So;ON;
-256D;So;ON;
-256E;So;ON;
-256F;So;ON;
-2570;So;ON;
-2571;So;ON;
-2572;So;ON;
-2573;So;ON;
-2574;So;ON;
-2575;So;ON;
-2576;So;ON;
-2577;So;ON;
-2578;So;ON;
-2579;So;ON;
-257A;So;ON;
-257B;So;ON;
-257C;So;ON;
-257D;So;ON;
-257E;So;ON;
-257F;So;ON;
-2580;So;ON;
-2581;So;ON;
-2582;So;ON;
-2583;So;ON;
-2584;So;ON;
-2585;So;ON;
-2586;So;ON;
-2587;So;ON;
-2588;So;ON;
-2589;So;ON;
-258A;So;ON;
-258B;So;ON;
-258C;So;ON;
-258D;So;ON;
-258E;So;ON;
-258F;So;ON;
-2590;So;ON;
-2591;So;ON;
-2592;So;ON;
-2593;So;ON;
-2594;So;ON;
-2595;So;ON;
-25A0;So;ON;
-25A1;So;ON;
-25A2;So;ON;
-25A3;So;ON;
-25A4;So;ON;
-25A5;So;ON;
-25A6;So;ON;
-25A7;So;ON;
-25A8;So;ON;
-25A9;So;ON;
-25AA;So;ON;
-25AB;So;ON;
-25AC;So;ON;
-25AD;So;ON;
-25AE;So;ON;
-25AF;So;ON;
-25B0;So;ON;
-25B1;So;ON;
-25B2;So;ON;
-25B3;So;ON;
-25B4;So;ON;
-25B5;So;ON;
-25B6;So;ON;
-25B7;Sm;ON;
-25B8;So;ON;
-25B9;So;ON;
-25BA;So;ON;
-25BB;So;ON;
-25BC;So;ON;
-25BD;So;ON;
-25BE;So;ON;
-25BF;So;ON;
-25C0;So;ON;
-25C1;Sm;ON;
-25C2;So;ON;
-25C3;So;ON;
-25C4;So;ON;
-25C5;So;ON;
-25C6;So;ON;
-25C7;So;ON;
-25C8;So;ON;
-25C9;So;ON;
-25CA;So;ON;
-25CB;So;ON;
-25CC;So;ON;
-25CD;So;ON;
-25CE;So;ON;
-25CF;So;ON;
-25D0;So;ON;
-25D1;So;ON;
-25D2;So;ON;
-25D3;So;ON;
-25D4;So;ON;
-25D5;So;ON;
-25D6;So;ON;
-25D7;So;ON;
-25D8;So;ON;
-25D9;So;ON;
-25DA;So;ON;
-25DB;So;ON;
-25DC;So;ON;
-25DD;So;ON;
-25DE;So;ON;
-25DF;So;ON;
-25E0;So;ON;
-25E1;So;ON;
-25E2;So;ON;
-25E3;So;ON;
-25E4;So;ON;
-25E5;So;ON;
-25E6;So;ON;
-25E7;So;ON;
-25E8;So;ON;
-25E9;So;ON;
-25EA;So;ON;
-25EB;So;ON;
-25EC;So;ON;
-25ED;So;ON;
-25EE;So;ON;
-25EF;So;ON;
-25F0;So;ON;
-25F1;So;ON;
-25F2;So;ON;
-25F3;So;ON;
-25F4;So;ON;
-25F5;So;ON;
-25F6;So;ON;
-25F7;So;ON;
-2600;So;ON;
-2601;So;ON;
-2602;So;ON;
-2603;So;ON;
-2604;So;ON;
-2605;So;ON;
-2606;So;ON;
-2607;So;ON;
-2608;So;ON;
-2609;So;ON;
-260A;So;ON;
-260B;So;ON;
-260C;So;ON;
-260D;So;ON;
-260E;So;ON;
-260F;So;ON;
-2610;So;ON;
-2611;So;ON;
-2612;So;ON;
-2613;So;ON;
-2619;So;ON;
-261A;So;ON;
-261B;So;ON;
-261C;So;ON;
-261D;So;ON;
-261E;So;ON;
-261F;So;ON;
-2620;So;ON;
-2621;So;ON;
-2622;So;ON;
-2623;So;ON;
-2624;So;ON;
-2625;So;ON;
-2626;So;ON;
-2627;So;ON;
-2628;So;ON;
-2629;So;ON;
-262A;So;ON;
-262B;So;ON;
-262C;So;ON;
-262D;So;ON;
-262E;So;ON;
-262F;So;ON;
-2630;So;ON;
-2631;So;ON;
-2632;So;ON;
-2633;So;ON;
-2634;So;ON;
-2635;So;ON;
-2636;So;ON;
-2637;So;ON;
-2638;So;ON;
-2639;So;ON;
-263A;So;ON;
-263B;So;ON;
-263C;So;ON;
-263D;So;ON;
-263E;So;ON;
-263F;So;ON;
-2640;So;ON;
-2641;So;ON;
-2642;So;ON;
-2643;So;ON;
-2644;So;ON;
-2645;So;ON;
-2646;So;ON;
-2647;So;ON;
-2648;So;ON;
-2649;So;ON;
-264A;So;ON;
-264B;So;ON;
-264C;So;ON;
-264D;So;ON;
-264E;So;ON;
-264F;So;ON;
-2650;So;ON;
-2651;So;ON;
-2652;So;ON;
-2653;So;ON;
-2654;So;ON;
-2655;So;ON;
-2656;So;ON;
-2657;So;ON;
-2658;So;ON;
-2659;So;ON;
-265A;So;ON;
-265B;So;ON;
-265C;So;ON;
-265D;So;ON;
-265E;So;ON;
-265F;So;ON;
-2660;So;ON;
-2661;So;ON;
-2662;So;ON;
-2663;So;ON;
-2664;So;ON;
-2665;So;ON;
-2666;So;ON;
-2667;So;ON;
-2668;So;ON;
-2669;So;ON;
-266A;So;ON;
-266B;So;ON;
-266C;So;ON;
-266D;So;ON;
-266E;So;ON;
-266F;Sm;ON;
-2670;So;ON;
-2671;So;ON;
-2701;So;ON;
-2702;So;ON;
-2703;So;ON;
-2704;So;ON;
-2706;So;ON;
-2707;So;ON;
-2708;So;ON;
-2709;So;ON;
-270C;So;ON;
-270D;So;ON;
-270E;So;ON;
-270F;So;ON;
-2710;So;ON;
-2711;So;ON;
-2712;So;ON;
-2713;So;ON;
-2714;So;ON;
-2715;So;ON;
-2716;So;ON;
-2717;So;ON;
-2718;So;ON;
-2719;So;ON;
-271A;So;ON;
-271B;So;ON;
-271C;So;ON;
-271D;So;ON;
-271E;So;ON;
-271F;So;ON;
-2720;So;ON;
-2721;So;ON;
-2722;So;ON;
-2723;So;ON;
-2724;So;ON;
-2725;So;ON;
-2726;So;ON;
-2727;So;ON;
-2729;So;ON;
-272A;So;ON;
-272B;So;ON;
-272C;So;ON;
-272D;So;ON;
-272E;So;ON;
-272F;So;ON;
-2730;So;ON;
-2731;So;ON;
-2732;So;ON;
-2733;So;ON;
-2734;So;ON;
-2735;So;ON;
-2736;So;ON;
-2737;So;ON;
-2738;So;ON;
-2739;So;ON;
-273A;So;ON;
-273B;So;ON;
-273C;So;ON;
-273D;So;ON;
-273E;So;ON;
-273F;So;ON;
-2740;So;ON;
-2741;So;ON;
-2742;So;ON;
-2743;So;ON;
-2744;So;ON;
-2745;So;ON;
-2746;So;ON;
-2747;So;ON;
-2748;So;ON;
-2749;So;ON;
-274A;So;ON;
-274B;So;ON;
-274D;So;ON;
-274F;So;ON;
-2750;So;ON;
-2751;So;ON;
-2752;So;ON;
-2756;So;ON;
-2758;So;ON;
-2759;So;ON;
-275A;So;ON;
-275B;So;ON;
-275C;So;ON;
-275D;So;ON;
-275E;So;ON;
-2761;So;ON;
-2762;So;ON;
-2763;So;ON;
-2764;So;ON;
-2765;So;ON;
-2766;So;ON;
-2767;So;ON;
-2776;No;ON;
-2777;No;ON;
-2778;No;ON;
-2779;No;ON;
-277A;No;ON;
-277B;No;ON;
-277C;No;ON;
-277D;No;ON;
-277E;No;ON;
-277F;No;ON;
-2780;No;ON;
-2781;No;ON;
-2782;No;ON;
-2783;No;ON;
-2784;No;ON;
-2785;No;ON;
-2786;No;ON;
-2787;No;ON;
-2788;No;ON;
-2789;No;ON;
-278A;No;ON;
-278B;No;ON;
-278C;No;ON;
-278D;No;ON;
-278E;No;ON;
-278F;No;ON;
-2790;No;ON;
-2791;No;ON;
-2792;No;ON;
-2793;No;ON;
-2794;So;ON;
-2798;So;ON;
-2799;So;ON;
-279A;So;ON;
-279B;So;ON;
-279C;So;ON;
-279D;So;ON;
-279E;So;ON;
-279F;So;ON;
-27A0;So;ON;
-27A1;So;ON;
-27A2;So;ON;
-27A3;So;ON;
-27A4;So;ON;
-27A5;So;ON;
-27A6;So;ON;
-27A7;So;ON;
-27A8;So;ON;
-27A9;So;ON;
-27AA;So;ON;
-27AB;So;ON;
-27AC;So;ON;
-27AD;So;ON;
-27AE;So;ON;
-27AF;So;ON;
-27B1;So;ON;
-27B2;So;ON;
-27B3;So;ON;
-27B4;So;ON;
-27B5;So;ON;
-27B6;So;ON;
-27B7;So;ON;
-27B8;So;ON;
-27B9;So;ON;
-27BA;So;ON;
-27BB;So;ON;
-27BC;So;ON;
-27BD;So;ON;
-27BE;So;ON;
-2800;So;ON;
-2801;So;ON;
-2802;So;ON;
-2803;So;ON;
-2804;So;ON;
-2805;So;ON;
-2806;So;ON;
-2807;So;ON;
-2808;So;ON;
-2809;So;ON;
-280A;So;ON;
-280B;So;ON;
-280C;So;ON;
-280D;So;ON;
-280E;So;ON;
-280F;So;ON;
-2810;So;ON;
-2811;So;ON;
-2812;So;ON;
-2813;So;ON;
-2814;So;ON;
-2815;So;ON;
-2816;So;ON;
-2817;So;ON;
-2818;So;ON;
-2819;So;ON;
-281A;So;ON;
-281B;So;ON;
-281C;So;ON;
-281D;So;ON;
-281E;So;ON;
-281F;So;ON;
-2820;So;ON;
-2821;So;ON;
-2822;So;ON;
-2823;So;ON;
-2824;So;ON;
-2825;So;ON;
-2826;So;ON;
-2827;So;ON;
-2828;So;ON;
-2829;So;ON;
-282A;So;ON;
-282B;So;ON;
-282C;So;ON;
-282D;So;ON;
-282E;So;ON;
-282F;So;ON;
-2830;So;ON;
-2831;So;ON;
-2832;So;ON;
-2833;So;ON;
-2834;So;ON;
-2835;So;ON;
-2836;So;ON;
-2837;So;ON;
-2838;So;ON;
-2839;So;ON;
-283A;So;ON;
-283B;So;ON;
-283C;So;ON;
-283D;So;ON;
-283E;So;ON;
-283F;So;ON;
-2840;So;ON;
-2841;So;ON;
-2842;So;ON;
-2843;So;ON;
-2844;So;ON;
-2845;So;ON;
-2846;So;ON;
-2847;So;ON;
-2848;So;ON;
-2849;So;ON;
-284A;So;ON;
-284B;So;ON;
-284C;So;ON;
-284D;So;ON;
-284E;So;ON;
-284F;So;ON;
-2850;So;ON;
-2851;So;ON;
-2852;So;ON;
-2853;So;ON;
-2854;So;ON;
-2855;So;ON;
-2856;So;ON;
-2857;So;ON;
-2858;So;ON;
-2859;So;ON;
-285A;So;ON;
-285B;So;ON;
-285C;So;ON;
-285D;So;ON;
-285E;So;ON;
-285F;So;ON;
-2860;So;ON;
-2861;So;ON;
-2862;So;ON;
-2863;So;ON;
-2864;So;ON;
-2865;So;ON;
-2866;So;ON;
-2867;So;ON;
-2868;So;ON;
-2869;So;ON;
-286A;So;ON;
-286B;So;ON;
-286C;So;ON;
-286D;So;ON;
-286E;So;ON;
-286F;So;ON;
-2870;So;ON;
-2871;So;ON;
-2872;So;ON;
-2873;So;ON;
-2874;So;ON;
-2875;So;ON;
-2876;So;ON;
-2877;So;ON;
-2878;So;ON;
-2879;So;ON;
-287A;So;ON;
-287B;So;ON;
-287C;So;ON;
-287D;So;ON;
-287E;So;ON;
-287F;So;ON;
-2880;So;ON;
-2881;So;ON;
-2882;So;ON;
-2883;So;ON;
-2884;So;ON;
-2885;So;ON;
-2886;So;ON;
-2887;So;ON;
-2888;So;ON;
-2889;So;ON;
-288A;So;ON;
-288B;So;ON;
-288C;So;ON;
-288D;So;ON;
-288E;So;ON;
-288F;So;ON;
-2890;So;ON;
-2891;So;ON;
-2892;So;ON;
-2893;So;ON;
-2894;So;ON;
-2895;So;ON;
-2896;So;ON;
-2897;So;ON;
-2898;So;ON;
-2899;So;ON;
-289A;So;ON;
-289B;So;ON;
-289C;So;ON;
-289D;So;ON;
-289E;So;ON;
-289F;So;ON;
-28A0;So;ON;
-28A1;So;ON;
-28A2;So;ON;
-28A3;So;ON;
-28A4;So;ON;
-28A5;So;ON;
-28A6;So;ON;
-28A7;So;ON;
-28A8;So;ON;
-28A9;So;ON;
-28AA;So;ON;
-28AB;So;ON;
-28AC;So;ON;
-28AD;So;ON;
-28AE;So;ON;
-28AF;So;ON;
-28B0;So;ON;
-28B1;So;ON;
-28B2;So;ON;
-28B3;So;ON;
-28B4;So;ON;
-28B5;So;ON;
-28B6;So;ON;
-28B7;So;ON;
-28B8;So;ON;
-28B9;So;ON;
-28BA;So;ON;
-28BB;So;ON;
-28BC;So;ON;
-28BD;So;ON;
-28BE;So;ON;
-28BF;So;ON;
-28C0;So;ON;
-28C1;So;ON;
-28C2;So;ON;
-28C3;So;ON;
-28C4;So;ON;
-28C5;So;ON;
-28C6;So;ON;
-28C7;So;ON;
-28C8;So;ON;
-28C9;So;ON;
-28CA;So;ON;
-28CB;So;ON;
-28CC;So;ON;
-28CD;So;ON;
-28CE;So;ON;
-28CF;So;ON;
-28D0;So;ON;
-28D1;So;ON;
-28D2;So;ON;
-28D3;So;ON;
-28D4;So;ON;
-28D5;So;ON;
-28D6;So;ON;
-28D7;So;ON;
-28D8;So;ON;
-28D9;So;ON;
-28DA;So;ON;
-28DB;So;ON;
-28DC;So;ON;
-28DD;So;ON;
-28DE;So;ON;
-28DF;So;ON;
-28E0;So;ON;
-28E1;So;ON;
-28E2;So;ON;
-28E3;So;ON;
-28E4;So;ON;
-28E5;So;ON;
-28E6;So;ON;
-28E7;So;ON;
-28E8;So;ON;
-28E9;So;ON;
-28EA;So;ON;
-28EB;So;ON;
-28EC;So;ON;
-28ED;So;ON;
-28EE;So;ON;
-28EF;So;ON;
-28F0;So;ON;
-28F1;So;ON;
-28F2;So;ON;
-28F3;So;ON;
-28F4;So;ON;
-28F5;So;ON;
-28F6;So;ON;
-28F7;So;ON;
-28F8;So;ON;
-28F9;So;ON;
-28FA;So;ON;
-28FB;So;ON;
-28FC;So;ON;
-28FD;So;ON;
-28FE;So;ON;
-28FF;So;ON;
-2E80;So;ON;
-2E81;So;ON;
-2E82;So;ON;
-2E83;So;ON;
-2E84;So;ON;
-2E85;So;ON;
-2E86;So;ON;
-2E87;So;ON;
-2E88;So;ON;
-2E89;So;ON;
-2E8A;So;ON;
-2E8B;So;ON;
-2E8C;So;ON;
-2E8D;So;ON;
-2E8E;So;ON;
-2E8F;So;ON;
-2E90;So;ON;
-2E91;So;ON;
-2E92;So;ON;
-2E93;So;ON;
-2E94;So;ON;
-2E95;So;ON;
-2E96;So;ON;
-2E97;So;ON;
-2E98;So;ON;
-2E99;So;ON;
-2E9B;So;ON;
-2E9C;So;ON;
-2E9D;So;ON;
-2E9E;So;ON;
-2E9F;So;ON;
-2EA0;So;ON;
-2EA1;So;ON;
-2EA2;So;ON;
-2EA3;So;ON;
-2EA4;So;ON;
-2EA5;So;ON;
-2EA6;So;ON;
-2EA7;So;ON;
-2EA8;So;ON;
-2EA9;So;ON;
-2EAA;So;ON;
-2EAB;So;ON;
-2EAC;So;ON;
-2EAD;So;ON;
-2EAE;So;ON;
-2EAF;So;ON;
-2EB0;So;ON;
-2EB1;So;ON;
-2EB2;So;ON;
-2EB3;So;ON;
-2EB4;So;ON;
-2EB5;So;ON;
-2EB6;So;ON;
-2EB7;So;ON;
-2EB8;So;ON;
-2EB9;So;ON;
-2EBA;So;ON;
-2EBB;So;ON;
-2EBC;So;ON;
-2EBD;So;ON;
-2EBE;So;ON;
-2EBF;So;ON;
-2EC0;So;ON;
-2EC1;So;ON;
-2EC2;So;ON;
-2EC3;So;ON;
-2EC4;So;ON;
-2EC5;So;ON;
-2EC6;So;ON;
-2EC7;So;ON;
-2EC8;So;ON;
-2EC9;So;ON;
-2ECA;So;ON;
-2ECB;So;ON;
-2ECC;So;ON;
-2ECD;So;ON;
-2ECE;So;ON;
-2ECF;So;ON;
-2ED0;So;ON;
-2ED1;So;ON;
-2ED2;So;ON;
-2ED3;So;ON;
-2ED4;So;ON;
-2ED5;So;ON;
-2ED6;So;ON;
-2ED7;So;ON;
-2ED8;So;ON;
-2ED9;So;ON;
-2EDA;So;ON;
-2EDB;So;ON;
-2EDC;So;ON;
-2EDD;So;ON;
-2EDE;So;ON;
-2EDF;So;ON;
-2EE0;So;ON;
-2EE1;So;ON;
-2EE2;So;ON;
-2EE3;So;ON;
-2EE4;So;ON;
-2EE5;So;ON;
-2EE6;So;ON;
-2EE7;So;ON;
-2EE8;So;ON;
-2EE9;So;ON;
-2EEA;So;ON;
-2EEB;So;ON;
-2EEC;So;ON;
-2EED;So;ON;
-2EEE;So;ON;
-2EEF;So;ON;
-2EF0;So;ON;
-2EF1;So;ON;
-2EF2;So;ON;
-2EF3;So;ON;
-2F00;So;ON;
-2F01;So;ON;
-2F02;So;ON;
-2F03;So;ON;
-2F04;So;ON;
-2F05;So;ON;
-2F06;So;ON;
-2F07;So;ON;
-2F08;So;ON;
-2F09;So;ON;
-2F0A;So;ON;
-2F0B;So;ON;
-2F0C;So;ON;
-2F0D;So;ON;
-2F0E;So;ON;
-2F0F;So;ON;
-2F10;So;ON;
-2F11;So;ON;
-2F12;So;ON;
-2F13;So;ON;
-2F14;So;ON;
-2F15;So;ON;
-2F16;So;ON;
-2F17;So;ON;
-2F18;So;ON;
-2F19;So;ON;
-2F1A;So;ON;
-2F1B;So;ON;
-2F1C;So;ON;
-2F1D;So;ON;
-2F1E;So;ON;
-2F1F;So;ON;
-2F20;So;ON;
-2F21;So;ON;
-2F22;So;ON;
-2F23;So;ON;
-2F24;So;ON;
-2F25;So;ON;
-2F26;So;ON;
-2F27;So;ON;
-2F28;So;ON;
-2F29;So;ON;
-2F2A;So;ON;
-2F2B;So;ON;
-2F2C;So;ON;
-2F2D;So;ON;
-2F2E;So;ON;
-2F2F;So;ON;
-2F30;So;ON;
-2F31;So;ON;
-2F32;So;ON;
-2F33;So;ON;
-2F34;So;ON;
-2F35;So;ON;
-2F36;So;ON;
-2F37;So;ON;
-2F38;So;ON;
-2F39;So;ON;
-2F3A;So;ON;
-2F3B;So;ON;
-2F3C;So;ON;
-2F3D;So;ON;
-2F3E;So;ON;
-2F3F;So;ON;
-2F40;So;ON;
-2F41;So;ON;
-2F42;So;ON;
-2F43;So;ON;
-2F44;So;ON;
-2F45;So;ON;
-2F46;So;ON;
-2F47;So;ON;
-2F48;So;ON;
-2F49;So;ON;
-2F4A;So;ON;
-2F4B;So;ON;
-2F4C;So;ON;
-2F4D;So;ON;
-2F4E;So;ON;
-2F4F;So;ON;
-2F50;So;ON;
-2F51;So;ON;
-2F52;So;ON;
-2F53;So;ON;
-2F54;So;ON;
-2F55;So;ON;
-2F56;So;ON;
-2F57;So;ON;
-2F58;So;ON;
-2F59;So;ON;
-2F5A;So;ON;
-2F5B;So;ON;
-2F5C;So;ON;
-2F5D;So;ON;
-2F5E;So;ON;
-2F5F;So;ON;
-2F60;So;ON;
-2F61;So;ON;
-2F62;So;ON;
-2F63;So;ON;
-2F64;So;ON;
-2F65;So;ON;
-2F66;So;ON;
-2F67;So;ON;
-2F68;So;ON;
-2F69;So;ON;
-2F6A;So;ON;
-2F6B;So;ON;
-2F6C;So;ON;
-2F6D;So;ON;
-2F6E;So;ON;
-2F6F;So;ON;
-2F70;So;ON;
-2F71;So;ON;
-2F72;So;ON;
-2F73;So;ON;
-2F74;So;ON;
-2F75;So;ON;
-2F76;So;ON;
-2F77;So;ON;
-2F78;So;ON;
-2F79;So;ON;
-2F7A;So;ON;
-2F7B;So;ON;
-2F7C;So;ON;
-2F7D;So;ON;
-2F7E;So;ON;
-2F7F;So;ON;
-2F80;So;ON;
-2F81;So;ON;
-2F82;So;ON;
-2F83;So;ON;
-2F84;So;ON;
-2F85;So;ON;
-2F86;So;ON;
-2F87;So;ON;
-2F88;So;ON;
-2F89;So;ON;
-2F8A;So;ON;
-2F8B;So;ON;
-2F8C;So;ON;
-2F8D;So;ON;
-2F8E;So;ON;
-2F8F;So;ON;
-2F90;So;ON;
-2F91;So;ON;
-2F92;So;ON;
-2F93;So;ON;
-2F94;So;ON;
-2F95;So;ON;
-2F96;So;ON;
-2F97;So;ON;
-2F98;So;ON;
-2F99;So;ON;
-2F9A;So;ON;
-2F9B;So;ON;
-2F9C;So;ON;
-2F9D;So;ON;
-2F9E;So;ON;
-2F9F;So;ON;
-2FA0;So;ON;
-2FA1;So;ON;
-2FA2;So;ON;
-2FA3;So;ON;
-2FA4;So;ON;
-2FA5;So;ON;
-2FA6;So;ON;
-2FA7;So;ON;
-2FA8;So;ON;
-2FA9;So;ON;
-2FAA;So;ON;
-2FAB;So;ON;
-2FAC;So;ON;
-2FAD;So;ON;
-2FAE;So;ON;
-2FAF;So;ON;
-2FB0;So;ON;
-2FB1;So;ON;
-2FB2;So;ON;
-2FB3;So;ON;
-2FB4;So;ON;
-2FB5;So;ON;
-2FB6;So;ON;
-2FB7;So;ON;
-2FB8;So;ON;
-2FB9;So;ON;
-2FBA;So;ON;
-2FBB;So;ON;
-2FBC;So;ON;
-2FBD;So;ON;
-2FBE;So;ON;
-2FBF;So;ON;
-2FC0;So;ON;
-2FC1;So;ON;
-2FC2;So;ON;
-2FC3;So;ON;
-2FC4;So;ON;
-2FC5;So;ON;
-2FC6;So;ON;
-2FC7;So;ON;
-2FC8;So;ON;
-2FC9;So;ON;
-2FCA;So;ON;
-2FCB;So;ON;
-2FCC;So;ON;
-2FCD;So;ON;
-2FCE;So;ON;
-2FCF;So;ON;
-2FD0;So;ON;
-2FD1;So;ON;
-2FD2;So;ON;
-2FD3;So;ON;
-2FD4;So;ON;
-2FD5;So;ON;
-2FF0;So;ON;
-2FF1;So;ON;
-2FF2;So;ON;
-2FF3;So;ON;
-2FF4;So;ON;
-2FF5;So;ON;
-2FF6;So;ON;
-2FF7;So;ON;
-2FF8;So;ON;
-2FF9;So;ON;
-2FFA;So;ON;
-2FFB;So;ON;
-3000;Zs;WS;
-3001;Po;ON;
-3002;Po;ON;
-3003;Po;ON;
-3004;So;ON;
-3005;Lm;L;
-3006;Lo;L;
-3007;Nl;L;
-3008;Ps;ON;
-3009;Pe;ON;
-300A;Ps;ON;
-300B;Pe;ON;
-300C;Ps;ON;
-300D;Pe;ON;
-300E;Ps;ON;
-300F;Pe;ON;
-3010;Ps;ON;
-3011;Pe;ON;
-3012;So;ON;
-3013;So;ON;
-3014;Ps;ON;
-3015;Pe;ON;
-3016;Ps;ON;
-3017;Pe;ON;
-3018;Ps;ON;
-3019;Pe;ON;
-301A;Ps;ON;
-301B;Pe;ON;
-301C;Pd;ON;
-301D;Ps;ON;
-301E;Pe;ON;
-301F;Pe;ON;
-3020;So;ON;
-3021;Nl;L;
-3022;Nl;L;
-3023;Nl;L;
-3024;Nl;L;
-3025;Nl;L;
-3026;Nl;L;
-3027;Nl;L;
-3028;Nl;L;
-3029;Nl;L;
-302A;Mn;NSM;
-302B;Mn;NSM;
-302C;Mn;NSM;
-302D;Mn;NSM;
-302E;Mn;NSM;
-302F;Mn;NSM;
-3030;Pd;ON;
-3031;Lm;L;
-3032;Lm;L;
-3033;Lm;L;
-3034;Lm;L;
-3035;Lm;L;
-3036;So;ON;
-3037;So;ON;
-3038;Nl;L;
-3039;Nl;L;
-303A;Nl;L;
-303E;So;ON;
-303F;So;ON;
-3041;Lo;L;
-3042;Lo;L;
-3043;Lo;L;
-3044;Lo;L;
-3045;Lo;L;
-3046;Lo;L;
-3047;Lo;L;
-3048;Lo;L;
-3049;Lo;L;
-304A;Lo;L;
-304B;Lo;L;
-304C;Lo;L;
-304D;Lo;L;
-304E;Lo;L;
-304F;Lo;L;
-3050;Lo;L;
-3051;Lo;L;
-3052;Lo;L;
-3053;Lo;L;
-3054;Lo;L;
-3055;Lo;L;
-3056;Lo;L;
-3057;Lo;L;
-3058;Lo;L;
-3059;Lo;L;
-305A;Lo;L;
-305B;Lo;L;
-305C;Lo;L;
-305D;Lo;L;
-305E;Lo;L;
-305F;Lo;L;
-3060;Lo;L;
-3061;Lo;L;
-3062;Lo;L;
-3063;Lo;L;
-3064;Lo;L;
-3065;Lo;L;
-3066;Lo;L;
-3067;Lo;L;
-3068;Lo;L;
-3069;Lo;L;
-306A;Lo;L;
-306B;Lo;L;
-306C;Lo;L;
-306D;Lo;L;
-306E;Lo;L;
-306F;Lo;L;
-3070;Lo;L;
-3071;Lo;L;
-3072;Lo;L;
-3073;Lo;L;
-3074;Lo;L;
-3075;Lo;L;
-3076;Lo;L;
-3077;Lo;L;
-3078;Lo;L;
-3079;Lo;L;
-307A;Lo;L;
-307B;Lo;L;
-307C;Lo;L;
-307D;Lo;L;
-307E;Lo;L;
-307F;Lo;L;
-3080;Lo;L;
-3081;Lo;L;
-3082;Lo;L;
-3083;Lo;L;
-3084;Lo;L;
-3085;Lo;L;
-3086;Lo;L;
-3087;Lo;L;
-3088;Lo;L;
-3089;Lo;L;
-308A;Lo;L;
-308B;Lo;L;
-308C;Lo;L;
-308D;Lo;L;
-308E;Lo;L;
-308F;Lo;L;
-3090;Lo;L;
-3091;Lo;L;
-3092;Lo;L;
-3093;Lo;L;
-3094;Lo;L;
-3099;Mn;NSM;
-309A;Mn;NSM;
-309B;Sk;ON;
-309C;Sk;ON;
-309D;Lm;L;
-309E;Lm;L;
-30A1;Lo;L;
-30A2;Lo;L;
-30A3;Lo;L;
-30A4;Lo;L;
-30A5;Lo;L;
-30A6;Lo;L;
-30A7;Lo;L;
-30A8;Lo;L;
-30A9;Lo;L;
-30AA;Lo;L;
-30AB;Lo;L;
-30AC;Lo;L;
-30AD;Lo;L;
-30AE;Lo;L;
-30AF;Lo;L;
-30B0;Lo;L;
-30B1;Lo;L;
-30B2;Lo;L;
-30B3;Lo;L;
-30B4;Lo;L;
-30B5;Lo;L;
-30B6;Lo;L;
-30B7;Lo;L;
-30B8;Lo;L;
-30B9;Lo;L;
-30BA;Lo;L;
-30BB;Lo;L;
-30BC;Lo;L;
-30BD;Lo;L;
-30BE;Lo;L;
-30BF;Lo;L;
-30C0;Lo;L;
-30C1;Lo;L;
-30C2;Lo;L;
-30C3;Lo;L;
-30C4;Lo;L;
-30C5;Lo;L;
-30C6;Lo;L;
-30C7;Lo;L;
-30C8;Lo;L;
-30C9;Lo;L;
-30CA;Lo;L;
-30CB;Lo;L;
-30CC;Lo;L;
-30CD;Lo;L;
-30CE;Lo;L;
-30CF;Lo;L;
-30D0;Lo;L;
-30D1;Lo;L;
-30D2;Lo;L;
-30D3;Lo;L;
-30D4;Lo;L;
-30D5;Lo;L;
-30D6;Lo;L;
-30D7;Lo;L;
-30D8;Lo;L;
-30D9;Lo;L;
-30DA;Lo;L;
-30DB;Lo;L;
-30DC;Lo;L;
-30DD;Lo;L;
-30DE;Lo;L;
-30DF;Lo;L;
-30E0;Lo;L;
-30E1;Lo;L;
-30E2;Lo;L;
-30E3;Lo;L;
-30E4;Lo;L;
-30E5;Lo;L;
-30E6;Lo;L;
-30E7;Lo;L;
-30E8;Lo;L;
-30E9;Lo;L;
-30EA;Lo;L;
-30EB;Lo;L;
-30EC;Lo;L;
-30ED;Lo;L;
-30EE;Lo;L;
-30EF;Lo;L;
-30F0;Lo;L;
-30F1;Lo;L;
-30F2;Lo;L;
-30F3;Lo;L;
-30F4;Lo;L;
-30F5;Lo;L;
-30F6;Lo;L;
-30F7;Lo;L;
-30F8;Lo;L;
-30F9;Lo;L;
-30FA;Lo;L;
-30FB;Pc;ON;
-30FC;Lm;L;
-30FD;Lm;L;
-30FE;Lm;L;
-3105;Lo;L;
-3106;Lo;L;
-3107;Lo;L;
-3108;Lo;L;
-3109;Lo;L;
-310A;Lo;L;
-310B;Lo;L;
-310C;Lo;L;
-310D;Lo;L;
-310E;Lo;L;
-310F;Lo;L;
-3110;Lo;L;
-3111;Lo;L;
-3112;Lo;L;
-3113;Lo;L;
-3114;Lo;L;
-3115;Lo;L;
-3116;Lo;L;
-3117;Lo;L;
-3118;Lo;L;
-3119;Lo;L;
-311A;Lo;L;
-311B;Lo;L;
-311C;Lo;L;
-311D;Lo;L;
-311E;Lo;L;
-311F;Lo;L;
-3120;Lo;L;
-3121;Lo;L;
-3122;Lo;L;
-3123;Lo;L;
-3124;Lo;L;
-3125;Lo;L;
-3126;Lo;L;
-3127;Lo;L;
-3128;Lo;L;
-3129;Lo;L;
-312A;Lo;L;
-312B;Lo;L;
-312C;Lo;L;
-3131;Lo;L;
-3132;Lo;L;
-3133;Lo;L;
-3134;Lo;L;
-3135;Lo;L;
-3136;Lo;L;
-3137;Lo;L;
-3138;Lo;L;
-3139;Lo;L;
-313A;Lo;L;
-313B;Lo;L;
-313C;Lo;L;
-313D;Lo;L;
-313E;Lo;L;
-313F;Lo;L;
-3140;Lo;L;
-3141;Lo;L;
-3142;Lo;L;
-3143;Lo;L;
-3144;Lo;L;
-3145;Lo;L;
-3146;Lo;L;
-3147;Lo;L;
-3148;Lo;L;
-3149;Lo;L;
-314A;Lo;L;
-314B;Lo;L;
-314C;Lo;L;
-314D;Lo;L;
-314E;Lo;L;
-314F;Lo;L;
-3150;Lo;L;
-3151;Lo;L;
-3152;Lo;L;
-3153;Lo;L;
-3154;Lo;L;
-3155;Lo;L;
-3156;Lo;L;
-3157;Lo;L;
-3158;Lo;L;
-3159;Lo;L;
-315A;Lo;L;
-315B;Lo;L;
-315C;Lo;L;
-315D;Lo;L;
-315E;Lo;L;
-315F;Lo;L;
-3160;Lo;L;
-3161;Lo;L;
-3162;Lo;L;
-3163;Lo;L;
-3164;Lo;L;
-3165;Lo;L;
-3166;Lo;L;
-3167;Lo;L;
-3168;Lo;L;
-3169;Lo;L;
-316A;Lo;L;
-316B;Lo;L;
-316C;Lo;L;
-316D;Lo;L;
-316E;Lo;L;
-316F;Lo;L;
-3170;Lo;L;
-3171;Lo;L;
-3172;Lo;L;
-3173;Lo;L;
-3174;Lo;L;
-3175;Lo;L;
-3176;Lo;L;
-3177;Lo;L;
-3178;Lo;L;
-3179;Lo;L;
-317A;Lo;L;
-317B;Lo;L;
-317C;Lo;L;
-317D;Lo;L;
-317E;Lo;L;
-317F;Lo;L;
-3180;Lo;L;
-3181;Lo;L;
-3182;Lo;L;
-3183;Lo;L;
-3184;Lo;L;
-3185;Lo;L;
-3186;Lo;L;
-3187;Lo;L;
-3188;Lo;L;
-3189;Lo;L;
-318A;Lo;L;
-318B;Lo;L;
-318C;Lo;L;
-318D;Lo;L;
-318E;Lo;L;
-3190;So;L;
-3191;So;L;
-3192;No;L;
-3193;No;L;
-3194;No;L;
-3195;No;L;
-3196;So;L;
-3197;So;L;
-3198;So;L;
-3199;So;L;
-319A;So;L;
-319B;So;L;
-319C;So;L;
-319D;So;L;
-319E;So;L;
-319F;So;L;
-31A0;Lo;L;
-31A1;Lo;L;
-31A2;Lo;L;
-31A3;Lo;L;
-31A4;Lo;L;
-31A5;Lo;L;
-31A6;Lo;L;
-31A7;Lo;L;
-31A8;Lo;L;
-31A9;Lo;L;
-31AA;Lo;L;
-31AB;Lo;L;
-31AC;Lo;L;
-31AD;Lo;L;
-31AE;Lo;L;
-31AF;Lo;L;
-31B0;Lo;L;
-31B1;Lo;L;
-31B2;Lo;L;
-31B3;Lo;L;
-31B4;Lo;L;
-31B5;Lo;L;
-31B6;Lo;L;
-31B7;Lo;L;
-3200;So;L;
-3201;So;L;
-3202;So;L;
-3203;So;L;
-3204;So;L;
-3205;So;L;
-3206;So;L;
-3207;So;L;
-3208;So;L;
-3209;So;L;
-320A;So;L;
-320B;So;L;
-320C;So;L;
-320D;So;L;
-320E;So;L;
-320F;So;L;
-3210;So;L;
-3211;So;L;
-3212;So;L;
-3213;So;L;
-3214;So;L;
-3215;So;L;
-3216;So;L;
-3217;So;L;
-3218;So;L;
-3219;So;L;
-321A;So;L;
-321B;So;L;
-321C;So;L;
-3220;No;L;
-3221;No;L;
-3222;No;L;
-3223;No;L;
-3224;No;L;
-3225;No;L;
-3226;No;L;
-3227;No;L;
-3228;No;L;
-3229;No;L;
-322A;So;L;
-322B;So;L;
-322C;So;L;
-322D;So;L;
-322E;So;L;
-322F;So;L;
-3230;So;L;
-3231;So;L;
-3232;So;L;
-3233;So;L;
-3234;So;L;
-3235;So;L;
-3236;So;L;
-3237;So;L;
-3238;So;L;
-3239;So;L;
-323A;So;L;
-323B;So;L;
-323C;So;L;
-323D;So;L;
-323E;So;L;
-323F;So;L;
-3240;So;L;
-3241;So;L;
-3242;So;L;
-3243;So;L;
-3260;So;L;
-3261;So;L;
-3262;So;L;
-3263;So;L;
-3264;So;L;
-3265;So;L;
-3266;So;L;
-3267;So;L;
-3268;So;L;
-3269;So;L;
-326A;So;L;
-326B;So;L;
-326C;So;L;
-326D;So;L;
-326E;So;L;
-326F;So;L;
-3270;So;L;
-3271;So;L;
-3272;So;L;
-3273;So;L;
-3274;So;L;
-3275;So;L;
-3276;So;L;
-3277;So;L;
-3278;So;L;
-3279;So;L;
-327A;So;L;
-327B;So;L;
-327F;So;L;
-3280;No;L;
-3281;No;L;
-3282;No;L;
-3283;No;L;
-3284;No;L;
-3285;No;L;
-3286;No;L;
-3287;No;L;
-3288;No;L;
-3289;No;L;
-328A;So;L;
-328B;So;L;
-328C;So;L;
-328D;So;L;
-328E;So;L;
-328F;So;L;
-3290;So;L;
-3291;So;L;
-3292;So;L;
-3293;So;L;
-3294;So;L;
-3295;So;L;
-3296;So;L;
-3297;So;L;
-3298;So;L;
-3299;So;L;
-329A;So;L;
-329B;So;L;
-329C;So;L;
-329D;So;L;
-329E;So;L;
-329F;So;L;
-32A0;So;L;
-32A1;So;L;
-32A2;So;L;
-32A3;So;L;
-32A4;So;L;
-32A5;So;L;
-32A6;So;L;
-32A7;So;L;
-32A8;So;L;
-32A9;So;L;
-32AA;So;L;
-32AB;So;L;
-32AC;So;L;
-32AD;So;L;
-32AE;So;L;
-32AF;So;L;
-32B0;So;L;
-32C0;So;L;
-32C1;So;L;
-32C2;So;L;
-32C3;So;L;
-32C4;So;L;
-32C5;So;L;
-32C6;So;L;
-32C7;So;L;
-32C8;So;L;
-32C9;So;L;
-32CA;So;L;
-32CB;So;L;
-32D0;So;L;
-32D1;So;L;
-32D2;So;L;
-32D3;So;L;
-32D4;So;L;
-32D5;So;L;
-32D6;So;L;
-32D7;So;L;
-32D8;So;L;
-32D9;So;L;
-32DA;So;L;
-32DB;So;L;
-32DC;So;L;
-32DD;So;L;
-32DE;So;L;
-32DF;So;L;
-32E0;So;L;
-32E1;So;L;
-32E2;So;L;
-32E3;So;L;
-32E4;So;L;
-32E5;So;L;
-32E6;So;L;
-32E7;So;L;
-32E8;So;L;
-32E9;So;L;
-32EA;So;L;
-32EB;So;L;
-32EC;So;L;
-32ED;So;L;
-32EE;So;L;
-32EF;So;L;
-32F0;So;L;
-32F1;So;L;
-32F2;So;L;
-32F3;So;L;
-32F4;So;L;
-32F5;So;L;
-32F6;So;L;
-32F7;So;L;
-32F8;So;L;
-32F9;So;L;
-32FA;So;L;
-32FB;So;L;
-32FC;So;L;
-32FD;So;L;
-32FE;So;L;
-3300;So;L;
-3301;So;L;
-3302;So;L;
-3303;So;L;
-3304;So;L;
-3305;So;L;
-3306;So;L;
-3307;So;L;
-3308;So;L;
-3309;So;L;
-330A;So;L;
-330B;So;L;
-330C;So;L;
-330D;So;L;
-330E;So;L;
-330F;So;L;
-3310;So;L;
-3311;So;L;
-3312;So;L;
-3313;So;L;
-3314;So;L;
-3315;So;L;
-3316;So;L;
-3317;So;L;
-3318;So;L;
-3319;So;L;
-331A;So;L;
-331B;So;L;
-331C;So;L;
-331D;So;L;
-331E;So;L;
-331F;So;L;
-3320;So;L;
-3321;So;L;
-3322;So;L;
-3323;So;L;
-3324;So;L;
-3325;So;L;
-3326;So;L;
-3327;So;L;
-3328;So;L;
-3329;So;L;
-332A;So;L;
-332B;So;L;
-332C;So;L;
-332D;So;L;
-332E;So;L;
-332F;So;L;
-3330;So;L;
-3331;So;L;
-3332;So;L;
-3333;So;L;
-3334;So;L;
-3335;So;L;
-3336;So;L;
-3337;So;L;
-3338;So;L;
-3339;So;L;
-333A;So;L;
-333B;So;L;
-333C;So;L;
-333D;So;L;
-333E;So;L;
-333F;So;L;
-3340;So;L;
-3341;So;L;
-3342;So;L;
-3343;So;L;
-3344;So;L;
-3345;So;L;
-3346;So;L;
-3347;So;L;
-3348;So;L;
-3349;So;L;
-334A;So;L;
-334B;So;L;
-334C;So;L;
-334D;So;L;
-334E;So;L;
-334F;So;L;
-3350;So;L;
-3351;So;L;
-3352;So;L;
-3353;So;L;
-3354;So;L;
-3355;So;L;
-3356;So;L;
-3357;So;L;
-3358;So;L;
-3359;So;L;
-335A;So;L;
-335B;So;L;
-335C;So;L;
-335D;So;L;
-335E;So;L;
-335F;So;L;
-3360;So;L;
-3361;So;L;
-3362;So;L;
-3363;So;L;
-3364;So;L;
-3365;So;L;
-3366;So;L;
-3367;So;L;
-3368;So;L;
-3369;So;L;
-336A;So;L;
-336B;So;L;
-336C;So;L;
-336D;So;L;
-336E;So;L;
-336F;So;L;
-3370;So;L;
-3371;So;L;
-3372;So;L;
-3373;So;L;
-3374;So;L;
-3375;So;L;
-3376;So;L;
-337B;So;L;
-337C;So;L;
-337D;So;L;
-337E;So;L;
-337F;So;L;
-3380;So;L;
-3381;So;L;
-3382;So;L;
-3383;So;L;
-3384;So;L;
-3385;So;L;
-3386;So;L;
-3387;So;L;
-3388;So;L;
-3389;So;L;
-338A;So;L;
-338B;So;L;
-338C;So;L;
-338D;So;L;
-338E;So;L;
-338F;So;L;
-3390;So;L;
-3391;So;L;
-3392;So;L;
-3393;So;L;
-3394;So;L;
-3395;So;L;
-3396;So;L;
-3397;So;L;
-3398;So;L;
-3399;So;L;
-339A;So;L;
-339B;So;L;
-339C;So;L;
-339D;So;L;
-339E;So;L;
-339F;So;L;
-33A0;So;L;
-33A1;So;L;
-33A2;So;L;
-33A3;So;L;
-33A4;So;L;
-33A5;So;L;
-33A6;So;L;
-33A7;So;L;
-33A8;So;L;
-33A9;So;L;
-33AA;So;L;
-33AB;So;L;
-33AC;So;L;
-33AD;So;L;
-33AE;So;L;
-33AF;So;L;
-33B0;So;L;
-33B1;So;L;
-33B2;So;L;
-33B3;So;L;
-33B4;So;L;
-33B5;So;L;
-33B6;So;L;
-33B7;So;L;
-33B8;So;L;
-33B9;So;L;
-33BA;So;L;
-33BB;So;L;
-33BC;So;L;
-33BD;So;L;
-33BE;So;L;
-33BF;So;L;
-33C0;So;L;
-33C1;So;L;
-33C2;So;L;
-33C3;So;L;
-33C4;So;L;
-33C5;So;L;
-33C6;So;L;
-33C7;So;L;
-33C8;So;L;
-33C9;So;L;
-33CA;So;L;
-33CB;So;L;
-33CC;So;L;
-33CD;So;L;
-33CE;So;L;
-33CF;So;L;
-33D0;So;L;
-33D1;So;L;
-33D2;So;L;
-33D3;So;L;
-33D4;So;L;
-33D5;So;L;
-33D6;So;L;
-33D7;So;L;
-33D8;So;L;
-33D9;So;L;
-33DA;So;L;
-33DB;So;L;
-33DC;So;L;
-33DD;So;L;
-33E0;So;L;
-33E1;So;L;
-33E2;So;L;
-33E3;So;L;
-33E4;So;L;
-33E5;So;L;
-33E6;So;L;
-33E7;So;L;
-33E8;So;L;
-33E9;So;L;
-33EA;So;L;
-33EB;So;L;
-33EC;So;L;
-33ED;So;L;
-33EE;So;L;
-33EF;So;L;
-33F0;So;L;
-33F1;So;L;
-33F2;So;L;
-33F3;So;L;
-33F4;So;L;
-33F5;So;L;
-33F6;So;L;
-33F7;So;L;
-33F8;So;L;
-33F9;So;L;
-33FA;So;L;
-33FB;So;L;
-33FC;So;L;
-33FD;So;L;
-33FE;So;L;
-3400;Lo;L;
-4DB5;Lo;L;
-4E00;Lo;L;
-9FA5;Lo;L;
-A000;Lo;L;
-A001;Lo;L;
-A002;Lo;L;
-A003;Lo;L;
-A004;Lo;L;
-A005;Lo;L;
-A006;Lo;L;
-A007;Lo;L;
-A008;Lo;L;
-A009;Lo;L;
-A00A;Lo;L;
-A00B;Lo;L;
-A00C;Lo;L;
-A00D;Lo;L;
-A00E;Lo;L;
-A00F;Lo;L;
-A010;Lo;L;
-A011;Lo;L;
-A012;Lo;L;
-A013;Lo;L;
-A014;Lo;L;
-A015;Lo;L;
-A016;Lo;L;
-A017;Lo;L;
-A018;Lo;L;
-A019;Lo;L;
-A01A;Lo;L;
-A01B;Lo;L;
-A01C;Lo;L;
-A01D;Lo;L;
-A01E;Lo;L;
-A01F;Lo;L;
-A020;Lo;L;
-A021;Lo;L;
-A022;Lo;L;
-A023;Lo;L;
-A024;Lo;L;
-A025;Lo;L;
-A026;Lo;L;
-A027;Lo;L;
-A028;Lo;L;
-A029;Lo;L;
-A02A;Lo;L;
-A02B;Lo;L;
-A02C;Lo;L;
-A02D;Lo;L;
-A02E;Lo;L;
-A02F;Lo;L;
-A030;Lo;L;
-A031;Lo;L;
-A032;Lo;L;
-A033;Lo;L;
-A034;Lo;L;
-A035;Lo;L;
-A036;Lo;L;
-A037;Lo;L;
-A038;Lo;L;
-A039;Lo;L;
-A03A;Lo;L;
-A03B;Lo;L;
-A03C;Lo;L;
-A03D;Lo;L;
-A03E;Lo;L;
-A03F;Lo;L;
-A040;Lo;L;
-A041;Lo;L;
-A042;Lo;L;
-A043;Lo;L;
-A044;Lo;L;
-A045;Lo;L;
-A046;Lo;L;
-A047;Lo;L;
-A048;Lo;L;
-A049;Lo;L;
-A04A;Lo;L;
-A04B;Lo;L;
-A04C;Lo;L;
-A04D;Lo;L;
-A04E;Lo;L;
-A04F;Lo;L;
-A050;Lo;L;
-A051;Lo;L;
-A052;Lo;L;
-A053;Lo;L;
-A054;Lo;L;
-A055;Lo;L;
-A056;Lo;L;
-A057;Lo;L;
-A058;Lo;L;
-A059;Lo;L;
-A05A;Lo;L;
-A05B;Lo;L;
-A05C;Lo;L;
-A05D;Lo;L;
-A05E;Lo;L;
-A05F;Lo;L;
-A060;Lo;L;
-A061;Lo;L;
-A062;Lo;L;
-A063;Lo;L;
-A064;Lo;L;
-A065;Lo;L;
-A066;Lo;L;
-A067;Lo;L;
-A068;Lo;L;
-A069;Lo;L;
-A06A;Lo;L;
-A06B;Lo;L;
-A06C;Lo;L;
-A06D;Lo;L;
-A06E;Lo;L;
-A06F;Lo;L;
-A070;Lo;L;
-A071;Lo;L;
-A072;Lo;L;
-A073;Lo;L;
-A074;Lo;L;
-A075;Lo;L;
-A076;Lo;L;
-A077;Lo;L;
-A078;Lo;L;
-A079;Lo;L;
-A07A;Lo;L;
-A07B;Lo;L;
-A07C;Lo;L;
-A07D;Lo;L;
-A07E;Lo;L;
-A07F;Lo;L;
-A080;Lo;L;
-A081;Lo;L;
-A082;Lo;L;
-A083;Lo;L;
-A084;Lo;L;
-A085;Lo;L;
-A086;Lo;L;
-A087;Lo;L;
-A088;Lo;L;
-A089;Lo;L;
-A08A;Lo;L;
-A08B;Lo;L;
-A08C;Lo;L;
-A08D;Lo;L;
-A08E;Lo;L;
-A08F;Lo;L;
-A090;Lo;L;
-A091;Lo;L;
-A092;Lo;L;
-A093;Lo;L;
-A094;Lo;L;
-A095;Lo;L;
-A096;Lo;L;
-A097;Lo;L;
-A098;Lo;L;
-A099;Lo;L;
-A09A;Lo;L;
-A09B;Lo;L;
-A09C;Lo;L;
-A09D;Lo;L;
-A09E;Lo;L;
-A09F;Lo;L;
-A0A0;Lo;L;
-A0A1;Lo;L;
-A0A2;Lo;L;
-A0A3;Lo;L;
-A0A4;Lo;L;
-A0A5;Lo;L;
-A0A6;Lo;L;
-A0A7;Lo;L;
-A0A8;Lo;L;
-A0A9;Lo;L;
-A0AA;Lo;L;
-A0AB;Lo;L;
-A0AC;Lo;L;
-A0AD;Lo;L;
-A0AE;Lo;L;
-A0AF;Lo;L;
-A0B0;Lo;L;
-A0B1;Lo;L;
-A0B2;Lo;L;
-A0B3;Lo;L;
-A0B4;Lo;L;
-A0B5;Lo;L;
-A0B6;Lo;L;
-A0B7;Lo;L;
-A0B8;Lo;L;
-A0B9;Lo;L;
-A0BA;Lo;L;
-A0BB;Lo;L;
-A0BC;Lo;L;
-A0BD;Lo;L;
-A0BE;Lo;L;
-A0BF;Lo;L;
-A0C0;Lo;L;
-A0C1;Lo;L;
-A0C2;Lo;L;
-A0C3;Lo;L;
-A0C4;Lo;L;
-A0C5;Lo;L;
-A0C6;Lo;L;
-A0C7;Lo;L;
-A0C8;Lo;L;
-A0C9;Lo;L;
-A0CA;Lo;L;
-A0CB;Lo;L;
-A0CC;Lo;L;
-A0CD;Lo;L;
-A0CE;Lo;L;
-A0CF;Lo;L;
-A0D0;Lo;L;
-A0D1;Lo;L;
-A0D2;Lo;L;
-A0D3;Lo;L;
-A0D4;Lo;L;
-A0D5;Lo;L;
-A0D6;Lo;L;
-A0D7;Lo;L;
-A0D8;Lo;L;
-A0D9;Lo;L;
-A0DA;Lo;L;
-A0DB;Lo;L;
-A0DC;Lo;L;
-A0DD;Lo;L;
-A0DE;Lo;L;
-A0DF;Lo;L;
-A0E0;Lo;L;
-A0E1;Lo;L;
-A0E2;Lo;L;
-A0E3;Lo;L;
-A0E4;Lo;L;
-A0E5;Lo;L;
-A0E6;Lo;L;
-A0E7;Lo;L;
-A0E8;Lo;L;
-A0E9;Lo;L;
-A0EA;Lo;L;
-A0EB;Lo;L;
-A0EC;Lo;L;
-A0ED;Lo;L;
-A0EE;Lo;L;
-A0EF;Lo;L;
-A0F0;Lo;L;
-A0F1;Lo;L;
-A0F2;Lo;L;
-A0F3;Lo;L;
-A0F4;Lo;L;
-A0F5;Lo;L;
-A0F6;Lo;L;
-A0F7;Lo;L;
-A0F8;Lo;L;
-A0F9;Lo;L;
-A0FA;Lo;L;
-A0FB;Lo;L;
-A0FC;Lo;L;
-A0FD;Lo;L;
-A0FE;Lo;L;
-A0FF;Lo;L;
-A100;Lo;L;
-A101;Lo;L;
-A102;Lo;L;
-A103;Lo;L;
-A104;Lo;L;
-A105;Lo;L;
-A106;Lo;L;
-A107;Lo;L;
-A108;Lo;L;
-A109;Lo;L;
-A10A;Lo;L;
-A10B;Lo;L;
-A10C;Lo;L;
-A10D;Lo;L;
-A10E;Lo;L;
-A10F;Lo;L;
-A110;Lo;L;
-A111;Lo;L;
-A112;Lo;L;
-A113;Lo;L;
-A114;Lo;L;
-A115;Lo;L;
-A116;Lo;L;
-A117;Lo;L;
-A118;Lo;L;
-A119;Lo;L;
-A11A;Lo;L;
-A11B;Lo;L;
-A11C;Lo;L;
-A11D;Lo;L;
-A11E;Lo;L;
-A11F;Lo;L;
-A120;Lo;L;
-A121;Lo;L;
-A122;Lo;L;
-A123;Lo;L;
-A124;Lo;L;
-A125;Lo;L;
-A126;Lo;L;
-A127;Lo;L;
-A128;Lo;L;
-A129;Lo;L;
-A12A;Lo;L;
-A12B;Lo;L;
-A12C;Lo;L;
-A12D;Lo;L;
-A12E;Lo;L;
-A12F;Lo;L;
-A130;Lo;L;
-A131;Lo;L;
-A132;Lo;L;
-A133;Lo;L;
-A134;Lo;L;
-A135;Lo;L;
-A136;Lo;L;
-A137;Lo;L;
-A138;Lo;L;
-A139;Lo;L;
-A13A;Lo;L;
-A13B;Lo;L;
-A13C;Lo;L;
-A13D;Lo;L;
-A13E;Lo;L;
-A13F;Lo;L;
-A140;Lo;L;
-A141;Lo;L;
-A142;Lo;L;
-A143;Lo;L;
-A144;Lo;L;
-A145;Lo;L;
-A146;Lo;L;
-A147;Lo;L;
-A148;Lo;L;
-A149;Lo;L;
-A14A;Lo;L;
-A14B;Lo;L;
-A14C;Lo;L;
-A14D;Lo;L;
-A14E;Lo;L;
-A14F;Lo;L;
-A150;Lo;L;
-A151;Lo;L;
-A152;Lo;L;
-A153;Lo;L;
-A154;Lo;L;
-A155;Lo;L;
-A156;Lo;L;
-A157;Lo;L;
-A158;Lo;L;
-A159;Lo;L;
-A15A;Lo;L;
-A15B;Lo;L;
-A15C;Lo;L;
-A15D;Lo;L;
-A15E;Lo;L;
-A15F;Lo;L;
-A160;Lo;L;
-A161;Lo;L;
-A162;Lo;L;
-A163;Lo;L;
-A164;Lo;L;
-A165;Lo;L;
-A166;Lo;L;
-A167;Lo;L;
-A168;Lo;L;
-A169;Lo;L;
-A16A;Lo;L;
-A16B;Lo;L;
-A16C;Lo;L;
-A16D;Lo;L;
-A16E;Lo;L;
-A16F;Lo;L;
-A170;Lo;L;
-A171;Lo;L;
-A172;Lo;L;
-A173;Lo;L;
-A174;Lo;L;
-A175;Lo;L;
-A176;Lo;L;
-A177;Lo;L;
-A178;Lo;L;
-A179;Lo;L;
-A17A;Lo;L;
-A17B;Lo;L;
-A17C;Lo;L;
-A17D;Lo;L;
-A17E;Lo;L;
-A17F;Lo;L;
-A180;Lo;L;
-A181;Lo;L;
-A182;Lo;L;
-A183;Lo;L;
-A184;Lo;L;
-A185;Lo;L;
-A186;Lo;L;
-A187;Lo;L;
-A188;Lo;L;
-A189;Lo;L;
-A18A;Lo;L;
-A18B;Lo;L;
-A18C;Lo;L;
-A18D;Lo;L;
-A18E;Lo;L;
-A18F;Lo;L;
-A190;Lo;L;
-A191;Lo;L;
-A192;Lo;L;
-A193;Lo;L;
-A194;Lo;L;
-A195;Lo;L;
-A196;Lo;L;
-A197;Lo;L;
-A198;Lo;L;
-A199;Lo;L;
-A19A;Lo;L;
-A19B;Lo;L;
-A19C;Lo;L;
-A19D;Lo;L;
-A19E;Lo;L;
-A19F;Lo;L;
-A1A0;Lo;L;
-A1A1;Lo;L;
-A1A2;Lo;L;
-A1A3;Lo;L;
-A1A4;Lo;L;
-A1A5;Lo;L;
-A1A6;Lo;L;
-A1A7;Lo;L;
-A1A8;Lo;L;
-A1A9;Lo;L;
-A1AA;Lo;L;
-A1AB;Lo;L;
-A1AC;Lo;L;
-A1AD;Lo;L;
-A1AE;Lo;L;
-A1AF;Lo;L;
-A1B0;Lo;L;
-A1B1;Lo;L;
-A1B2;Lo;L;
-A1B3;Lo;L;
-A1B4;Lo;L;
-A1B5;Lo;L;
-A1B6;Lo;L;
-A1B7;Lo;L;
-A1B8;Lo;L;
-A1B9;Lo;L;
-A1BA;Lo;L;
-A1BB;Lo;L;
-A1BC;Lo;L;
-A1BD;Lo;L;
-A1BE;Lo;L;
-A1BF;Lo;L;
-A1C0;Lo;L;
-A1C1;Lo;L;
-A1C2;Lo;L;
-A1C3;Lo;L;
-A1C4;Lo;L;
-A1C5;Lo;L;
-A1C6;Lo;L;
-A1C7;Lo;L;
-A1C8;Lo;L;
-A1C9;Lo;L;
-A1CA;Lo;L;
-A1CB;Lo;L;
-A1CC;Lo;L;
-A1CD;Lo;L;
-A1CE;Lo;L;
-A1CF;Lo;L;
-A1D0;Lo;L;
-A1D1;Lo;L;
-A1D2;Lo;L;
-A1D3;Lo;L;
-A1D4;Lo;L;
-A1D5;Lo;L;
-A1D6;Lo;L;
-A1D7;Lo;L;
-A1D8;Lo;L;
-A1D9;Lo;L;
-A1DA;Lo;L;
-A1DB;Lo;L;
-A1DC;Lo;L;
-A1DD;Lo;L;
-A1DE;Lo;L;
-A1DF;Lo;L;
-A1E0;Lo;L;
-A1E1;Lo;L;
-A1E2;Lo;L;
-A1E3;Lo;L;
-A1E4;Lo;L;
-A1E5;Lo;L;
-A1E6;Lo;L;
-A1E7;Lo;L;
-A1E8;Lo;L;
-A1E9;Lo;L;
-A1EA;Lo;L;
-A1EB;Lo;L;
-A1EC;Lo;L;
-A1ED;Lo;L;
-A1EE;Lo;L;
-A1EF;Lo;L;
-A1F0;Lo;L;
-A1F1;Lo;L;
-A1F2;Lo;L;
-A1F3;Lo;L;
-A1F4;Lo;L;
-A1F5;Lo;L;
-A1F6;Lo;L;
-A1F7;Lo;L;
-A1F8;Lo;L;
-A1F9;Lo;L;
-A1FA;Lo;L;
-A1FB;Lo;L;
-A1FC;Lo;L;
-A1FD;Lo;L;
-A1FE;Lo;L;
-A1FF;Lo;L;
-A200;Lo;L;
-A201;Lo;L;
-A202;Lo;L;
-A203;Lo;L;
-A204;Lo;L;
-A205;Lo;L;
-A206;Lo;L;
-A207;Lo;L;
-A208;Lo;L;
-A209;Lo;L;
-A20A;Lo;L;
-A20B;Lo;L;
-A20C;Lo;L;
-A20D;Lo;L;
-A20E;Lo;L;
-A20F;Lo;L;
-A210;Lo;L;
-A211;Lo;L;
-A212;Lo;L;
-A213;Lo;L;
-A214;Lo;L;
-A215;Lo;L;
-A216;Lo;L;
-A217;Lo;L;
-A218;Lo;L;
-A219;Lo;L;
-A21A;Lo;L;
-A21B;Lo;L;
-A21C;Lo;L;
-A21D;Lo;L;
-A21E;Lo;L;
-A21F;Lo;L;
-A220;Lo;L;
-A221;Lo;L;
-A222;Lo;L;
-A223;Lo;L;
-A224;Lo;L;
-A225;Lo;L;
-A226;Lo;L;
-A227;Lo;L;
-A228;Lo;L;
-A229;Lo;L;
-A22A;Lo;L;
-A22B;Lo;L;
-A22C;Lo;L;
-A22D;Lo;L;
-A22E;Lo;L;
-A22F;Lo;L;
-A230;Lo;L;
-A231;Lo;L;
-A232;Lo;L;
-A233;Lo;L;
-A234;Lo;L;
-A235;Lo;L;
-A236;Lo;L;
-A237;Lo;L;
-A238;Lo;L;
-A239;Lo;L;
-A23A;Lo;L;
-A23B;Lo;L;
-A23C;Lo;L;
-A23D;Lo;L;
-A23E;Lo;L;
-A23F;Lo;L;
-A240;Lo;L;
-A241;Lo;L;
-A242;Lo;L;
-A243;Lo;L;
-A244;Lo;L;
-A245;Lo;L;
-A246;Lo;L;
-A247;Lo;L;
-A248;Lo;L;
-A249;Lo;L;
-A24A;Lo;L;
-A24B;Lo;L;
-A24C;Lo;L;
-A24D;Lo;L;
-A24E;Lo;L;
-A24F;Lo;L;
-A250;Lo;L;
-A251;Lo;L;
-A252;Lo;L;
-A253;Lo;L;
-A254;Lo;L;
-A255;Lo;L;
-A256;Lo;L;
-A257;Lo;L;
-A258;Lo;L;
-A259;Lo;L;
-A25A;Lo;L;
-A25B;Lo;L;
-A25C;Lo;L;
-A25D;Lo;L;
-A25E;Lo;L;
-A25F;Lo;L;
-A260;Lo;L;
-A261;Lo;L;
-A262;Lo;L;
-A263;Lo;L;
-A264;Lo;L;
-A265;Lo;L;
-A266;Lo;L;
-A267;Lo;L;
-A268;Lo;L;
-A269;Lo;L;
-A26A;Lo;L;
-A26B;Lo;L;
-A26C;Lo;L;
-A26D;Lo;L;
-A26E;Lo;L;
-A26F;Lo;L;
-A270;Lo;L;
-A271;Lo;L;
-A272;Lo;L;
-A273;Lo;L;
-A274;Lo;L;
-A275;Lo;L;
-A276;Lo;L;
-A277;Lo;L;
-A278;Lo;L;
-A279;Lo;L;
-A27A;Lo;L;
-A27B;Lo;L;
-A27C;Lo;L;
-A27D;Lo;L;
-A27E;Lo;L;
-A27F;Lo;L;
-A280;Lo;L;
-A281;Lo;L;
-A282;Lo;L;
-A283;Lo;L;
-A284;Lo;L;
-A285;Lo;L;
-A286;Lo;L;
-A287;Lo;L;
-A288;Lo;L;
-A289;Lo;L;
-A28A;Lo;L;
-A28B;Lo;L;
-A28C;Lo;L;
-A28D;Lo;L;
-A28E;Lo;L;
-A28F;Lo;L;
-A290;Lo;L;
-A291;Lo;L;
-A292;Lo;L;
-A293;Lo;L;
-A294;Lo;L;
-A295;Lo;L;
-A296;Lo;L;
-A297;Lo;L;
-A298;Lo;L;
-A299;Lo;L;
-A29A;Lo;L;
-A29B;Lo;L;
-A29C;Lo;L;
-A29D;Lo;L;
-A29E;Lo;L;
-A29F;Lo;L;
-A2A0;Lo;L;
-A2A1;Lo;L;
-A2A2;Lo;L;
-A2A3;Lo;L;
-A2A4;Lo;L;
-A2A5;Lo;L;
-A2A6;Lo;L;
-A2A7;Lo;L;
-A2A8;Lo;L;
-A2A9;Lo;L;
-A2AA;Lo;L;
-A2AB;Lo;L;
-A2AC;Lo;L;
-A2AD;Lo;L;
-A2AE;Lo;L;
-A2AF;Lo;L;
-A2B0;Lo;L;
-A2B1;Lo;L;
-A2B2;Lo;L;
-A2B3;Lo;L;
-A2B4;Lo;L;
-A2B5;Lo;L;
-A2B6;Lo;L;
-A2B7;Lo;L;
-A2B8;Lo;L;
-A2B9;Lo;L;
-A2BA;Lo;L;
-A2BB;Lo;L;
-A2BC;Lo;L;
-A2BD;Lo;L;
-A2BE;Lo;L;
-A2BF;Lo;L;
-A2C0;Lo;L;
-A2C1;Lo;L;
-A2C2;Lo;L;
-A2C3;Lo;L;
-A2C4;Lo;L;
-A2C5;Lo;L;
-A2C6;Lo;L;
-A2C7;Lo;L;
-A2C8;Lo;L;
-A2C9;Lo;L;
-A2CA;Lo;L;
-A2CB;Lo;L;
-A2CC;Lo;L;
-A2CD;Lo;L;
-A2CE;Lo;L;
-A2CF;Lo;L;
-A2D0;Lo;L;
-A2D1;Lo;L;
-A2D2;Lo;L;
-A2D3;Lo;L;
-A2D4;Lo;L;
-A2D5;Lo;L;
-A2D6;Lo;L;
-A2D7;Lo;L;
-A2D8;Lo;L;
-A2D9;Lo;L;
-A2DA;Lo;L;
-A2DB;Lo;L;
-A2DC;Lo;L;
-A2DD;Lo;L;
-A2DE;Lo;L;
-A2DF;Lo;L;
-A2E0;Lo;L;
-A2E1;Lo;L;
-A2E2;Lo;L;
-A2E3;Lo;L;
-A2E4;Lo;L;
-A2E5;Lo;L;
-A2E6;Lo;L;
-A2E7;Lo;L;
-A2E8;Lo;L;
-A2E9;Lo;L;
-A2EA;Lo;L;
-A2EB;Lo;L;
-A2EC;Lo;L;
-A2ED;Lo;L;
-A2EE;Lo;L;
-A2EF;Lo;L;
-A2F0;Lo;L;
-A2F1;Lo;L;
-A2F2;Lo;L;
-A2F3;Lo;L;
-A2F4;Lo;L;
-A2F5;Lo;L;
-A2F6;Lo;L;
-A2F7;Lo;L;
-A2F8;Lo;L;
-A2F9;Lo;L;
-A2FA;Lo;L;
-A2FB;Lo;L;
-A2FC;Lo;L;
-A2FD;Lo;L;
-A2FE;Lo;L;
-A2FF;Lo;L;
-A300;Lo;L;
-A301;Lo;L;
-A302;Lo;L;
-A303;Lo;L;
-A304;Lo;L;
-A305;Lo;L;
-A306;Lo;L;
-A307;Lo;L;
-A308;Lo;L;
-A309;Lo;L;
-A30A;Lo;L;
-A30B;Lo;L;
-A30C;Lo;L;
-A30D;Lo;L;
-A30E;Lo;L;
-A30F;Lo;L;
-A310;Lo;L;
-A311;Lo;L;
-A312;Lo;L;
-A313;Lo;L;
-A314;Lo;L;
-A315;Lo;L;
-A316;Lo;L;
-A317;Lo;L;
-A318;Lo;L;
-A319;Lo;L;
-A31A;Lo;L;
-A31B;Lo;L;
-A31C;Lo;L;
-A31D;Lo;L;
-A31E;Lo;L;
-A31F;Lo;L;
-A320;Lo;L;
-A321;Lo;L;
-A322;Lo;L;
-A323;Lo;L;
-A324;Lo;L;
-A325;Lo;L;
-A326;Lo;L;
-A327;Lo;L;
-A328;Lo;L;
-A329;Lo;L;
-A32A;Lo;L;
-A32B;Lo;L;
-A32C;Lo;L;
-A32D;Lo;L;
-A32E;Lo;L;
-A32F;Lo;L;
-A330;Lo;L;
-A331;Lo;L;
-A332;Lo;L;
-A333;Lo;L;
-A334;Lo;L;
-A335;Lo;L;
-A336;Lo;L;
-A337;Lo;L;
-A338;Lo;L;
-A339;Lo;L;
-A33A;Lo;L;
-A33B;Lo;L;
-A33C;Lo;L;
-A33D;Lo;L;
-A33E;Lo;L;
-A33F;Lo;L;
-A340;Lo;L;
-A341;Lo;L;
-A342;Lo;L;
-A343;Lo;L;
-A344;Lo;L;
-A345;Lo;L;
-A346;Lo;L;
-A347;Lo;L;
-A348;Lo;L;
-A349;Lo;L;
-A34A;Lo;L;
-A34B;Lo;L;
-A34C;Lo;L;
-A34D;Lo;L;
-A34E;Lo;L;
-A34F;Lo;L;
-A350;Lo;L;
-A351;Lo;L;
-A352;Lo;L;
-A353;Lo;L;
-A354;Lo;L;
-A355;Lo;L;
-A356;Lo;L;
-A357;Lo;L;
-A358;Lo;L;
-A359;Lo;L;
-A35A;Lo;L;
-A35B;Lo;L;
-A35C;Lo;L;
-A35D;Lo;L;
-A35E;Lo;L;
-A35F;Lo;L;
-A360;Lo;L;
-A361;Lo;L;
-A362;Lo;L;
-A363;Lo;L;
-A364;Lo;L;
-A365;Lo;L;
-A366;Lo;L;
-A367;Lo;L;
-A368;Lo;L;
-A369;Lo;L;
-A36A;Lo;L;
-A36B;Lo;L;
-A36C;Lo;L;
-A36D;Lo;L;
-A36E;Lo;L;
-A36F;Lo;L;
-A370;Lo;L;
-A371;Lo;L;
-A372;Lo;L;
-A373;Lo;L;
-A374;Lo;L;
-A375;Lo;L;
-A376;Lo;L;
-A377;Lo;L;
-A378;Lo;L;
-A379;Lo;L;
-A37A;Lo;L;
-A37B;Lo;L;
-A37C;Lo;L;
-A37D;Lo;L;
-A37E;Lo;L;
-A37F;Lo;L;
-A380;Lo;L;
-A381;Lo;L;
-A382;Lo;L;
-A383;Lo;L;
-A384;Lo;L;
-A385;Lo;L;
-A386;Lo;L;
-A387;Lo;L;
-A388;Lo;L;
-A389;Lo;L;
-A38A;Lo;L;
-A38B;Lo;L;
-A38C;Lo;L;
-A38D;Lo;L;
-A38E;Lo;L;
-A38F;Lo;L;
-A390;Lo;L;
-A391;Lo;L;
-A392;Lo;L;
-A393;Lo;L;
-A394;Lo;L;
-A395;Lo;L;
-A396;Lo;L;
-A397;Lo;L;
-A398;Lo;L;
-A399;Lo;L;
-A39A;Lo;L;
-A39B;Lo;L;
-A39C;Lo;L;
-A39D;Lo;L;
-A39E;Lo;L;
-A39F;Lo;L;
-A3A0;Lo;L;
-A3A1;Lo;L;
-A3A2;Lo;L;
-A3A3;Lo;L;
-A3A4;Lo;L;
-A3A5;Lo;L;
-A3A6;Lo;L;
-A3A7;Lo;L;
-A3A8;Lo;L;
-A3A9;Lo;L;
-A3AA;Lo;L;
-A3AB;Lo;L;
-A3AC;Lo;L;
-A3AD;Lo;L;
-A3AE;Lo;L;
-A3AF;Lo;L;
-A3B0;Lo;L;
-A3B1;Lo;L;
-A3B2;Lo;L;
-A3B3;Lo;L;
-A3B4;Lo;L;
-A3B5;Lo;L;
-A3B6;Lo;L;
-A3B7;Lo;L;
-A3B8;Lo;L;
-A3B9;Lo;L;
-A3BA;Lo;L;
-A3BB;Lo;L;
-A3BC;Lo;L;
-A3BD;Lo;L;
-A3BE;Lo;L;
-A3BF;Lo;L;
-A3C0;Lo;L;
-A3C1;Lo;L;
-A3C2;Lo;L;
-A3C3;Lo;L;
-A3C4;Lo;L;
-A3C5;Lo;L;
-A3C6;Lo;L;
-A3C7;Lo;L;
-A3C8;Lo;L;
-A3C9;Lo;L;
-A3CA;Lo;L;
-A3CB;Lo;L;
-A3CC;Lo;L;
-A3CD;Lo;L;
-A3CE;Lo;L;
-A3CF;Lo;L;
-A3D0;Lo;L;
-A3D1;Lo;L;
-A3D2;Lo;L;
-A3D3;Lo;L;
-A3D4;Lo;L;
-A3D5;Lo;L;
-A3D6;Lo;L;
-A3D7;Lo;L;
-A3D8;Lo;L;
-A3D9;Lo;L;
-A3DA;Lo;L;
-A3DB;Lo;L;
-A3DC;Lo;L;
-A3DD;Lo;L;
-A3DE;Lo;L;
-A3DF;Lo;L;
-A3E0;Lo;L;
-A3E1;Lo;L;
-A3E2;Lo;L;
-A3E3;Lo;L;
-A3E4;Lo;L;
-A3E5;Lo;L;
-A3E6;Lo;L;
-A3E7;Lo;L;
-A3E8;Lo;L;
-A3E9;Lo;L;
-A3EA;Lo;L;
-A3EB;Lo;L;
-A3EC;Lo;L;
-A3ED;Lo;L;
-A3EE;Lo;L;
-A3EF;Lo;L;
-A3F0;Lo;L;
-A3F1;Lo;L;
-A3F2;Lo;L;
-A3F3;Lo;L;
-A3F4;Lo;L;
-A3F5;Lo;L;
-A3F6;Lo;L;
-A3F7;Lo;L;
-A3F8;Lo;L;
-A3F9;Lo;L;
-A3FA;Lo;L;
-A3FB;Lo;L;
-A3FC;Lo;L;
-A3FD;Lo;L;
-A3FE;Lo;L;
-A3FF;Lo;L;
-A400;Lo;L;
-A401;Lo;L;
-A402;Lo;L;
-A403;Lo;L;
-A404;Lo;L;
-A405;Lo;L;
-A406;Lo;L;
-A407;Lo;L;
-A408;Lo;L;
-A409;Lo;L;
-A40A;Lo;L;
-A40B;Lo;L;
-A40C;Lo;L;
-A40D;Lo;L;
-A40E;Lo;L;
-A40F;Lo;L;
-A410;Lo;L;
-A411;Lo;L;
-A412;Lo;L;
-A413;Lo;L;
-A414;Lo;L;
-A415;Lo;L;
-A416;Lo;L;
-A417;Lo;L;
-A418;Lo;L;
-A419;Lo;L;
-A41A;Lo;L;
-A41B;Lo;L;
-A41C;Lo;L;
-A41D;Lo;L;
-A41E;Lo;L;
-A41F;Lo;L;
-A420;Lo;L;
-A421;Lo;L;
-A422;Lo;L;
-A423;Lo;L;
-A424;Lo;L;
-A425;Lo;L;
-A426;Lo;L;
-A427;Lo;L;
-A428;Lo;L;
-A429;Lo;L;
-A42A;Lo;L;
-A42B;Lo;L;
-A42C;Lo;L;
-A42D;Lo;L;
-A42E;Lo;L;
-A42F;Lo;L;
-A430;Lo;L;
-A431;Lo;L;
-A432;Lo;L;
-A433;Lo;L;
-A434;Lo;L;
-A435;Lo;L;
-A436;Lo;L;
-A437;Lo;L;
-A438;Lo;L;
-A439;Lo;L;
-A43A;Lo;L;
-A43B;Lo;L;
-A43C;Lo;L;
-A43D;Lo;L;
-A43E;Lo;L;
-A43F;Lo;L;
-A440;Lo;L;
-A441;Lo;L;
-A442;Lo;L;
-A443;Lo;L;
-A444;Lo;L;
-A445;Lo;L;
-A446;Lo;L;
-A447;Lo;L;
-A448;Lo;L;
-A449;Lo;L;
-A44A;Lo;L;
-A44B;Lo;L;
-A44C;Lo;L;
-A44D;Lo;L;
-A44E;Lo;L;
-A44F;Lo;L;
-A450;Lo;L;
-A451;Lo;L;
-A452;Lo;L;
-A453;Lo;L;
-A454;Lo;L;
-A455;Lo;L;
-A456;Lo;L;
-A457;Lo;L;
-A458;Lo;L;
-A459;Lo;L;
-A45A;Lo;L;
-A45B;Lo;L;
-A45C;Lo;L;
-A45D;Lo;L;
-A45E;Lo;L;
-A45F;Lo;L;
-A460;Lo;L;
-A461;Lo;L;
-A462;Lo;L;
-A463;Lo;L;
-A464;Lo;L;
-A465;Lo;L;
-A466;Lo;L;
-A467;Lo;L;
-A468;Lo;L;
-A469;Lo;L;
-A46A;Lo;L;
-A46B;Lo;L;
-A46C;Lo;L;
-A46D;Lo;L;
-A46E;Lo;L;
-A46F;Lo;L;
-A470;Lo;L;
-A471;Lo;L;
-A472;Lo;L;
-A473;Lo;L;
-A474;Lo;L;
-A475;Lo;L;
-A476;Lo;L;
-A477;Lo;L;
-A478;Lo;L;
-A479;Lo;L;
-A47A;Lo;L;
-A47B;Lo;L;
-A47C;Lo;L;
-A47D;Lo;L;
-A47E;Lo;L;
-A47F;Lo;L;
-A480;Lo;L;
-A481;Lo;L;
-A482;Lo;L;
-A483;Lo;L;
-A484;Lo;L;
-A485;Lo;L;
-A486;Lo;L;
-A487;Lo;L;
-A488;Lo;L;
-A489;Lo;L;
-A48A;Lo;L;
-A48B;Lo;L;
-A48C;Lo;L;
-A490;So;ON;
-A491;So;ON;
-A492;So;ON;
-A493;So;ON;
-A494;So;ON;
-A495;So;ON;
-A496;So;ON;
-A497;So;ON;
-A498;So;ON;
-A499;So;ON;
-A49A;So;ON;
-A49B;So;ON;
-A49C;So;ON;
-A49D;So;ON;
-A49E;So;ON;
-A49F;So;ON;
-A4A0;So;ON;
-A4A1;So;ON;
-A4A4;So;ON;
-A4A5;So;ON;
-A4A6;So;ON;
-A4A7;So;ON;
-A4A8;So;ON;
-A4A9;So;ON;
-A4AA;So;ON;
-A4AB;So;ON;
-A4AC;So;ON;
-A4AD;So;ON;
-A4AE;So;ON;
-A4AF;So;ON;
-A4B0;So;ON;
-A4B1;So;ON;
-A4B2;So;ON;
-A4B3;So;ON;
-A4B5;So;ON;
-A4B6;So;ON;
-A4B7;So;ON;
-A4B8;So;ON;
-A4B9;So;ON;
-A4BA;So;ON;
-A4BB;So;ON;
-A4BC;So;ON;
-A4BD;So;ON;
-A4BE;So;ON;
-A4BF;So;ON;
-A4C0;So;ON;
-A4C2;So;ON;
-A4C3;So;ON;
-A4C4;So;ON;
-A4C6;So;ON;
-AC00;Lo;L;
-D7A3;Lo;L;
-D800;Cs;L;
-DB7F;Cs;L;
-DB80;Cs;L;
-DBFF;Cs;L;
-DC00;Cs;L;
-DFFF;Cs;L;
-E000;Co;L;
-F8FF;Co;L;
-F900;Lo;L;
-F901;Lo;L;
-F902;Lo;L;
-F903;Lo;L;
-F904;Lo;L;
-F905;Lo;L;
-F906;Lo;L;
-F907;Lo;L;
-F908;Lo;L;
-F909;Lo;L;
-F90A;Lo;L;
-F90B;Lo;L;
-F90C;Lo;L;
-F90D;Lo;L;
-F90E;Lo;L;
-F90F;Lo;L;
-F910;Lo;L;
-F911;Lo;L;
-F912;Lo;L;
-F913;Lo;L;
-F914;Lo;L;
-F915;Lo;L;
-F916;Lo;L;
-F917;Lo;L;
-F918;Lo;L;
-F919;Lo;L;
-F91A;Lo;L;
-F91B;Lo;L;
-F91C;Lo;L;
-F91D;Lo;L;
-F91E;Lo;L;
-F91F;Lo;L;
-F920;Lo;L;
-F921;Lo;L;
-F922;Lo;L;
-F923;Lo;L;
-F924;Lo;L;
-F925;Lo;L;
-F926;Lo;L;
-F927;Lo;L;
-F928;Lo;L;
-F929;Lo;L;
-F92A;Lo;L;
-F92B;Lo;L;
-F92C;Lo;L;
-F92D;Lo;L;
-F92E;Lo;L;
-F92F;Lo;L;
-F930;Lo;L;
-F931;Lo;L;
-F932;Lo;L;
-F933;Lo;L;
-F934;Lo;L;
-F935;Lo;L;
-F936;Lo;L;
-F937;Lo;L;
-F938;Lo;L;
-F939;Lo;L;
-F93A;Lo;L;
-F93B;Lo;L;
-F93C;Lo;L;
-F93D;Lo;L;
-F93E;Lo;L;
-F93F;Lo;L;
-F940;Lo;L;
-F941;Lo;L;
-F942;Lo;L;
-F943;Lo;L;
-F944;Lo;L;
-F945;Lo;L;
-F946;Lo;L;
-F947;Lo;L;
-F948;Lo;L;
-F949;Lo;L;
-F94A;Lo;L;
-F94B;Lo;L;
-F94C;Lo;L;
-F94D;Lo;L;
-F94E;Lo;L;
-F94F;Lo;L;
-F950;Lo;L;
-F951;Lo;L;
-F952;Lo;L;
-F953;Lo;L;
-F954;Lo;L;
-F955;Lo;L;
-F956;Lo;L;
-F957;Lo;L;
-F958;Lo;L;
-F959;Lo;L;
-F95A;Lo;L;
-F95B;Lo;L;
-F95C;Lo;L;
-F95D;Lo;L;
-F95E;Lo;L;
-F95F;Lo;L;
-F960;Lo;L;
-F961;Lo;L;
-F962;Lo;L;
-F963;Lo;L;
-F964;Lo;L;
-F965;Lo;L;
-F966;Lo;L;
-F967;Lo;L;
-F968;Lo;L;
-F969;Lo;L;
-F96A;Lo;L;
-F96B;Lo;L;
-F96C;Lo;L;
-F96D;Lo;L;
-F96E;Lo;L;
-F96F;Lo;L;
-F970;Lo;L;
-F971;Lo;L;
-F972;Lo;L;
-F973;Lo;L;
-F974;Lo;L;
-F975;Lo;L;
-F976;Lo;L;
-F977;Lo;L;
-F978;Lo;L;
-F979;Lo;L;
-F97A;Lo;L;
-F97B;Lo;L;
-F97C;Lo;L;
-F97D;Lo;L;
-F97E;Lo;L;
-F97F;Lo;L;
-F980;Lo;L;
-F981;Lo;L;
-F982;Lo;L;
-F983;Lo;L;
-F984;Lo;L;
-F985;Lo;L;
-F986;Lo;L;
-F987;Lo;L;
-F988;Lo;L;
-F989;Lo;L;
-F98A;Lo;L;
-F98B;Lo;L;
-F98C;Lo;L;
-F98D;Lo;L;
-F98E;Lo;L;
-F98F;Lo;L;
-F990;Lo;L;
-F991;Lo;L;
-F992;Lo;L;
-F993;Lo;L;
-F994;Lo;L;
-F995;Lo;L;
-F996;Lo;L;
-F997;Lo;L;
-F998;Lo;L;
-F999;Lo;L;
-F99A;Lo;L;
-F99B;Lo;L;
-F99C;Lo;L;
-F99D;Lo;L;
-F99E;Lo;L;
-F99F;Lo;L;
-F9A0;Lo;L;
-F9A1;Lo;L;
-F9A2;Lo;L;
-F9A3;Lo;L;
-F9A4;Lo;L;
-F9A5;Lo;L;
-F9A6;Lo;L;
-F9A7;Lo;L;
-F9A8;Lo;L;
-F9A9;Lo;L;
-F9AA;Lo;L;
-F9AB;Lo;L;
-F9AC;Lo;L;
-F9AD;Lo;L;
-F9AE;Lo;L;
-F9AF;Lo;L;
-F9B0;Lo;L;
-F9B1;Lo;L;
-F9B2;Lo;L;
-F9B3;Lo;L;
-F9B4;Lo;L;
-F9B5;Lo;L;
-F9B6;Lo;L;
-F9B7;Lo;L;
-F9B8;Lo;L;
-F9B9;Lo;L;
-F9BA;Lo;L;
-F9BB;Lo;L;
-F9BC;Lo;L;
-F9BD;Lo;L;
-F9BE;Lo;L;
-F9BF;Lo;L;
-F9C0;Lo;L;
-F9C1;Lo;L;
-F9C2;Lo;L;
-F9C3;Lo;L;
-F9C4;Lo;L;
-F9C5;Lo;L;
-F9C6;Lo;L;
-F9C7;Lo;L;
-F9C8;Lo;L;
-F9C9;Lo;L;
-F9CA;Lo;L;
-F9CB;Lo;L;
-F9CC;Lo;L;
-F9CD;Lo;L;
-F9CE;Lo;L;
-F9CF;Lo;L;
-F9D0;Lo;L;
-F9D1;Lo;L;
-F9D2;Lo;L;
-F9D3;Lo;L;
-F9D4;Lo;L;
-F9D5;Lo;L;
-F9D6;Lo;L;
-F9D7;Lo;L;
-F9D8;Lo;L;
-F9D9;Lo;L;
-F9DA;Lo;L;
-F9DB;Lo;L;
-F9DC;Lo;L;
-F9DD;Lo;L;
-F9DE;Lo;L;
-F9DF;Lo;L;
-F9E0;Lo;L;
-F9E1;Lo;L;
-F9E2;Lo;L;
-F9E3;Lo;L;
-F9E4;Lo;L;
-F9E5;Lo;L;
-F9E6;Lo;L;
-F9E7;Lo;L;
-F9E8;Lo;L;
-F9E9;Lo;L;
-F9EA;Lo;L;
-F9EB;Lo;L;
-F9EC;Lo;L;
-F9ED;Lo;L;
-F9EE;Lo;L;
-F9EF;Lo;L;
-F9F0;Lo;L;
-F9F1;Lo;L;
-F9F2;Lo;L;
-F9F3;Lo;L;
-F9F4;Lo;L;
-F9F5;Lo;L;
-F9F6;Lo;L;
-F9F7;Lo;L;
-F9F8;Lo;L;
-F9F9;Lo;L;
-F9FA;Lo;L;
-F9FB;Lo;L;
-F9FC;Lo;L;
-F9FD;Lo;L;
-F9FE;Lo;L;
-F9FF;Lo;L;
-FA00;Lo;L;
-FA01;Lo;L;
-FA02;Lo;L;
-FA03;Lo;L;
-FA04;Lo;L;
-FA05;Lo;L;
-FA06;Lo;L;
-FA07;Lo;L;
-FA08;Lo;L;
-FA09;Lo;L;
-FA0A;Lo;L;
-FA0B;Lo;L;
-FA0C;Lo;L;
-FA0D;Lo;L;
-FA0E;Lo;L;
-FA0F;Lo;L;
-FA10;Lo;L;
-FA11;Lo;L;
-FA12;Lo;L;
-FA13;Lo;L;
-FA14;Lo;L;
-FA15;Lo;L;
-FA16;Lo;L;
-FA17;Lo;L;
-FA18;Lo;L;
-FA19;Lo;L;
-FA1A;Lo;L;
-FA1B;Lo;L;
-FA1C;Lo;L;
-FA1D;Lo;L;
-FA1E;Lo;L;
-FA1F;Lo;L;
-FA20;Lo;L;
-FA21;Lo;L;
-FA22;Lo;L;
-FA23;Lo;L;
-FA24;Lo;L;
-FA25;Lo;L;
-FA26;Lo;L;
-FA27;Lo;L;
-FA28;Lo;L;
-FA29;Lo;L;
-FA2A;Lo;L;
-FA2B;Lo;L;
-FA2C;Lo;L;
-FA2D;Lo;L;
-FB00;Ll;L;
-FB01;Ll;L;
-FB02;Ll;L;
-FB03;Ll;L;
-FB04;Ll;L;
-FB05;Ll;L;
-FB06;Ll;L;
-FB13;Ll;L;
-FB14;Ll;L;
-FB15;Ll;L;
-FB16;Ll;L;
-FB17;Ll;L;
-FB1D;Lo;R;
-FB1E;Mn;NSM;
-FB1F;Lo;R;
-FB20;Lo;R;
-FB21;Lo;R;
-FB22;Lo;R;
-FB23;Lo;R;
-FB24;Lo;R;
-FB25;Lo;R;
-FB26;Lo;R;
-FB27;Lo;R;
-FB28;Lo;R;
-FB29;Sm;ET;
-FB2A;Lo;R;
-FB2B;Lo;R;
-FB2C;Lo;R;
-FB2D;Lo;R;
-FB2E;Lo;R;
-FB2F;Lo;R;
-FB30;Lo;R;
-FB31;Lo;R;
-FB32;Lo;R;
-FB33;Lo;R;
-FB34;Lo;R;
-FB35;Lo;R;
-FB36;Lo;R;
-FB38;Lo;R;
-FB39;Lo;R;
-FB3A;Lo;R;
-FB3B;Lo;R;
-FB3C;Lo;R;
-FB3E;Lo;R;
-FB40;Lo;R;
-FB41;Lo;R;
-FB43;Lo;R;
-FB44;Lo;R;
-FB46;Lo;R;
-FB47;Lo;R;
-FB48;Lo;R;
-FB49;Lo;R;
-FB4A;Lo;R;
-FB4B;Lo;R;
-FB4C;Lo;R;
-FB4D;Lo;R;
-FB4E;Lo;R;
-FB4F;Lo;R;
-FB50;Lo;AL;
-FB51;Lo;AL;
-FB52;Lo;AL;
-FB53;Lo;AL;
-FB54;Lo;AL;
-FB55;Lo;AL;
-FB56;Lo;AL;
-FB57;Lo;AL;
-FB58;Lo;AL;
-FB59;Lo;AL;
-FB5A;Lo;AL;
-FB5B;Lo;AL;
-FB5C;Lo;AL;
-FB5D;Lo;AL;
-FB5E;Lo;AL;
-FB5F;Lo;AL;
-FB60;Lo;AL;
-FB61;Lo;AL;
-FB62;Lo;AL;
-FB63;Lo;AL;
-FB64;Lo;AL;
-FB65;Lo;AL;
-FB66;Lo;AL;
-FB67;Lo;AL;
-FB68;Lo;AL;
-FB69;Lo;AL;
-FB6A;Lo;AL;
-FB6B;Lo;AL;
-FB6C;Lo;AL;
-FB6D;Lo;AL;
-FB6E;Lo;AL;
-FB6F;Lo;AL;
-FB70;Lo;AL;
-FB71;Lo;AL;
-FB72;Lo;AL;
-FB73;Lo;AL;
-FB74;Lo;AL;
-FB75;Lo;AL;
-FB76;Lo;AL;
-FB77;Lo;AL;
-FB78;Lo;AL;
-FB79;Lo;AL;
-FB7A;Lo;AL;
-FB7B;Lo;AL;
-FB7C;Lo;AL;
-FB7D;Lo;AL;
-FB7E;Lo;AL;
-FB7F;Lo;AL;
-FB80;Lo;AL;
-FB81;Lo;AL;
-FB82;Lo;AL;
-FB83;Lo;AL;
-FB84;Lo;AL;
-FB85;Lo;AL;
-FB86;Lo;AL;
-FB87;Lo;AL;
-FB88;Lo;AL;
-FB89;Lo;AL;
-FB8A;Lo;AL;
-FB8B;Lo;AL;
-FB8C;Lo;AL;
-FB8D;Lo;AL;
-FB8E;Lo;AL;
-FB8F;Lo;AL;
-FB90;Lo;AL;
-FB91;Lo;AL;
-FB92;Lo;AL;
-FB93;Lo;AL;
-FB94;Lo;AL;
-FB95;Lo;AL;
-FB96;Lo;AL;
-FB97;Lo;AL;
-FB98;Lo;AL;
-FB99;Lo;AL;
-FB9A;Lo;AL;
-FB9B;Lo;AL;
-FB9C;Lo;AL;
-FB9D;Lo;AL;
-FB9E;Lo;AL;
-FB9F;Lo;AL;
-FBA0;Lo;AL;
-FBA1;Lo;AL;
-FBA2;Lo;AL;
-FBA3;Lo;AL;
-FBA4;Lo;AL;
-FBA5;Lo;AL;
-FBA6;Lo;AL;
-FBA7;Lo;AL;
-FBA8;Lo;AL;
-FBA9;Lo;AL;
-FBAA;Lo;AL;
-FBAB;Lo;AL;
-FBAC;Lo;AL;
-FBAD;Lo;AL;
-FBAE;Lo;AL;
-FBAF;Lo;AL;
-FBB0;Lo;AL;
-FBB1;Lo;AL;
-FBD3;Lo;AL;
-FBD4;Lo;AL;
-FBD5;Lo;AL;
-FBD6;Lo;AL;
-FBD7;Lo;AL;
-FBD8;Lo;AL;
-FBD9;Lo;AL;
-FBDA;Lo;AL;
-FBDB;Lo;AL;
-FBDC;Lo;AL;
-FBDD;Lo;AL;
-FBDE;Lo;AL;
-FBDF;Lo;AL;
-FBE0;Lo;AL;
-FBE1;Lo;AL;
-FBE2;Lo;AL;
-FBE3;Lo;AL;
-FBE4;Lo;AL;
-FBE5;Lo;AL;
-FBE6;Lo;AL;
-FBE7;Lo;AL;
-FBE8;Lo;AL;
-FBE9;Lo;AL;
-FBEA;Lo;AL;
-FBEB;Lo;AL;
-FBEC;Lo;AL;
-FBED;Lo;AL;
-FBEE;Lo;AL;
-FBEF;Lo;AL;
-FBF0;Lo;AL;
-FBF1;Lo;AL;
-FBF2;Lo;AL;
-FBF3;Lo;AL;
-FBF4;Lo;AL;
-FBF5;Lo;AL;
-FBF6;Lo;AL;
-FBF7;Lo;AL;
-FBF8;Lo;AL;
-FBF9;Lo;AL;
-FBFA;Lo;AL;
-FBFB;Lo;AL;
-FBFC;Lo;AL;
-FBFD;Lo;AL;
-FBFE;Lo;AL;
-FBFF;Lo;AL;
-FC00;Lo;AL;
-FC01;Lo;AL;
-FC02;Lo;AL;
-FC03;Lo;AL;
-FC04;Lo;AL;
-FC05;Lo;AL;
-FC06;Lo;AL;
-FC07;Lo;AL;
-FC08;Lo;AL;
-FC09;Lo;AL;
-FC0A;Lo;AL;
-FC0B;Lo;AL;
-FC0C;Lo;AL;
-FC0D;Lo;AL;
-FC0E;Lo;AL;
-FC0F;Lo;AL;
-FC10;Lo;AL;
-FC11;Lo;AL;
-FC12;Lo;AL;
-FC13;Lo;AL;
-FC14;Lo;AL;
-FC15;Lo;AL;
-FC16;Lo;AL;
-FC17;Lo;AL;
-FC18;Lo;AL;
-FC19;Lo;AL;
-FC1A;Lo;AL;
-FC1B;Lo;AL;
-FC1C;Lo;AL;
-FC1D;Lo;AL;
-FC1E;Lo;AL;
-FC1F;Lo;AL;
-FC20;Lo;AL;
-FC21;Lo;AL;
-FC22;Lo;AL;
-FC23;Lo;AL;
-FC24;Lo;AL;
-FC25;Lo;AL;
-FC26;Lo;AL;
-FC27;Lo;AL;
-FC28;Lo;AL;
-FC29;Lo;AL;
-FC2A;Lo;AL;
-FC2B;Lo;AL;
-FC2C;Lo;AL;
-FC2D;Lo;AL;
-FC2E;Lo;AL;
-FC2F;Lo;AL;
-FC30;Lo;AL;
-FC31;Lo;AL;
-FC32;Lo;AL;
-FC33;Lo;AL;
-FC34;Lo;AL;
-FC35;Lo;AL;
-FC36;Lo;AL;
-FC37;Lo;AL;
-FC38;Lo;AL;
-FC39;Lo;AL;
-FC3A;Lo;AL;
-FC3B;Lo;AL;
-FC3C;Lo;AL;
-FC3D;Lo;AL;
-FC3E;Lo;AL;
-FC3F;Lo;AL;
-FC40;Lo;AL;
-FC41;Lo;AL;
-FC42;Lo;AL;
-FC43;Lo;AL;
-FC44;Lo;AL;
-FC45;Lo;AL;
-FC46;Lo;AL;
-FC47;Lo;AL;
-FC48;Lo;AL;
-FC49;Lo;AL;
-FC4A;Lo;AL;
-FC4B;Lo;AL;
-FC4C;Lo;AL;
-FC4D;Lo;AL;
-FC4E;Lo;AL;
-FC4F;Lo;AL;
-FC50;Lo;AL;
-FC51;Lo;AL;
-FC52;Lo;AL;
-FC53;Lo;AL;
-FC54;Lo;AL;
-FC55;Lo;AL;
-FC56;Lo;AL;
-FC57;Lo;AL;
-FC58;Lo;AL;
-FC59;Lo;AL;
-FC5A;Lo;AL;
-FC5B;Lo;AL;
-FC5C;Lo;AL;
-FC5D;Lo;AL;
-FC5E;Lo;AL;
-FC5F;Lo;AL;
-FC60;Lo;AL;
-FC61;Lo;AL;
-FC62;Lo;AL;
-FC63;Lo;AL;
-FC64;Lo;AL;
-FC65;Lo;AL;
-FC66;Lo;AL;
-FC67;Lo;AL;
-FC68;Lo;AL;
-FC69;Lo;AL;
-FC6A;Lo;AL;
-FC6B;Lo;AL;
-FC6C;Lo;AL;
-FC6D;Lo;AL;
-FC6E;Lo;AL;
-FC6F;Lo;AL;
-FC70;Lo;AL;
-FC71;Lo;AL;
-FC72;Lo;AL;
-FC73;Lo;AL;
-FC74;Lo;AL;
-FC75;Lo;AL;
-FC76;Lo;AL;
-FC77;Lo;AL;
-FC78;Lo;AL;
-FC79;Lo;AL;
-FC7A;Lo;AL;
-FC7B;Lo;AL;
-FC7C;Lo;AL;
-FC7D;Lo;AL;
-FC7E;Lo;AL;
-FC7F;Lo;AL;
-FC80;Lo;AL;
-FC81;Lo;AL;
-FC82;Lo;AL;
-FC83;Lo;AL;
-FC84;Lo;AL;
-FC85;Lo;AL;
-FC86;Lo;AL;
-FC87;Lo;AL;
-FC88;Lo;AL;
-FC89;Lo;AL;
-FC8A;Lo;AL;
-FC8B;Lo;AL;
-FC8C;Lo;AL;
-FC8D;Lo;AL;
-FC8E;Lo;AL;
-FC8F;Lo;AL;
-FC90;Lo;AL;
-FC91;Lo;AL;
-FC92;Lo;AL;
-FC93;Lo;AL;
-FC94;Lo;AL;
-FC95;Lo;AL;
-FC96;Lo;AL;
-FC97;Lo;AL;
-FC98;Lo;AL;
-FC99;Lo;AL;
-FC9A;Lo;AL;
-FC9B;Lo;AL;
-FC9C;Lo;AL;
-FC9D;Lo;AL;
-FC9E;Lo;AL;
-FC9F;Lo;AL;
-FCA0;Lo;AL;
-FCA1;Lo;AL;
-FCA2;Lo;AL;
-FCA3;Lo;AL;
-FCA4;Lo;AL;
-FCA5;Lo;AL;
-FCA6;Lo;AL;
-FCA7;Lo;AL;
-FCA8;Lo;AL;
-FCA9;Lo;AL;
-FCAA;Lo;AL;
-FCAB;Lo;AL;
-FCAC;Lo;AL;
-FCAD;Lo;AL;
-FCAE;Lo;AL;
-FCAF;Lo;AL;
-FCB0;Lo;AL;
-FCB1;Lo;AL;
-FCB2;Lo;AL;
-FCB3;Lo;AL;
-FCB4;Lo;AL;
-FCB5;Lo;AL;
-FCB6;Lo;AL;
-FCB7;Lo;AL;
-FCB8;Lo;AL;
-FCB9;Lo;AL;
-FCBA;Lo;AL;
-FCBB;Lo;AL;
-FCBC;Lo;AL;
-FCBD;Lo;AL;
-FCBE;Lo;AL;
-FCBF;Lo;AL;
-FCC0;Lo;AL;
-FCC1;Lo;AL;
-FCC2;Lo;AL;
-FCC3;Lo;AL;
-FCC4;Lo;AL;
-FCC5;Lo;AL;
-FCC6;Lo;AL;
-FCC7;Lo;AL;
-FCC8;Lo;AL;
-FCC9;Lo;AL;
-FCCA;Lo;AL;
-FCCB;Lo;AL;
-FCCC;Lo;AL;
-FCCD;Lo;AL;
-FCCE;Lo;AL;
-FCCF;Lo;AL;
-FCD0;Lo;AL;
-FCD1;Lo;AL;
-FCD2;Lo;AL;
-FCD3;Lo;AL;
-FCD4;Lo;AL;
-FCD5;Lo;AL;
-FCD6;Lo;AL;
-FCD7;Lo;AL;
-FCD8;Lo;AL;
-FCD9;Lo;AL;
-FCDA;Lo;AL;
-FCDB;Lo;AL;
-FCDC;Lo;AL;
-FCDD;Lo;AL;
-FCDE;Lo;AL;
-FCDF;Lo;AL;
-FCE0;Lo;AL;
-FCE1;Lo;AL;
-FCE2;Lo;AL;
-FCE3;Lo;AL;
-FCE4;Lo;AL;
-FCE5;Lo;AL;
-FCE6;Lo;AL;
-FCE7;Lo;AL;
-FCE8;Lo;AL;
-FCE9;Lo;AL;
-FCEA;Lo;AL;
-FCEB;Lo;AL;
-FCEC;Lo;AL;
-FCED;Lo;AL;
-FCEE;Lo;AL;
-FCEF;Lo;AL;
-FCF0;Lo;AL;
-FCF1;Lo;AL;
-FCF2;Lo;AL;
-FCF3;Lo;AL;
-FCF4;Lo;AL;
-FCF5;Lo;AL;
-FCF6;Lo;AL;
-FCF7;Lo;AL;
-FCF8;Lo;AL;
-FCF9;Lo;AL;
-FCFA;Lo;AL;
-FCFB;Lo;AL;
-FCFC;Lo;AL;
-FCFD;Lo;AL;
-FCFE;Lo;AL;
-FCFF;Lo;AL;
-FD00;Lo;AL;
-FD01;Lo;AL;
-FD02;Lo;AL;
-FD03;Lo;AL;
-FD04;Lo;AL;
-FD05;Lo;AL;
-FD06;Lo;AL;
-FD07;Lo;AL;
-FD08;Lo;AL;
-FD09;Lo;AL;
-FD0A;Lo;AL;
-FD0B;Lo;AL;
-FD0C;Lo;AL;
-FD0D;Lo;AL;
-FD0E;Lo;AL;
-FD0F;Lo;AL;
-FD10;Lo;AL;
-FD11;Lo;AL;
-FD12;Lo;AL;
-FD13;Lo;AL;
-FD14;Lo;AL;
-FD15;Lo;AL;
-FD16;Lo;AL;
-FD17;Lo;AL;
-FD18;Lo;AL;
-FD19;Lo;AL;
-FD1A;Lo;AL;
-FD1B;Lo;AL;
-FD1C;Lo;AL;
-FD1D;Lo;AL;
-FD1E;Lo;AL;
-FD1F;Lo;AL;
-FD20;Lo;AL;
-FD21;Lo;AL;
-FD22;Lo;AL;
-FD23;Lo;AL;
-FD24;Lo;AL;
-FD25;Lo;AL;
-FD26;Lo;AL;
-FD27;Lo;AL;
-FD28;Lo;AL;
-FD29;Lo;AL;
-FD2A;Lo;AL;
-FD2B;Lo;AL;
-FD2C;Lo;AL;
-FD2D;Lo;AL;
-FD2E;Lo;AL;
-FD2F;Lo;AL;
-FD30;Lo;AL;
-FD31;Lo;AL;
-FD32;Lo;AL;
-FD33;Lo;AL;
-FD34;Lo;AL;
-FD35;Lo;AL;
-FD36;Lo;AL;
-FD37;Lo;AL;
-FD38;Lo;AL;
-FD39;Lo;AL;
-FD3A;Lo;AL;
-FD3B;Lo;AL;
-FD3C;Lo;AL;
-FD3D;Lo;AL;
-FD3E;Ps;ON;
-FD3F;Pe;ON;
-FD50;Lo;AL;
-FD51;Lo;AL;
-FD52;Lo;AL;
-FD53;Lo;AL;
-FD54;Lo;AL;
-FD55;Lo;AL;
-FD56;Lo;AL;
-FD57;Lo;AL;
-FD58;Lo;AL;
-FD59;Lo;AL;
-FD5A;Lo;AL;
-FD5B;Lo;AL;
-FD5C;Lo;AL;
-FD5D;Lo;AL;
-FD5E;Lo;AL;
-FD5F;Lo;AL;
-FD60;Lo;AL;
-FD61;Lo;AL;
-FD62;Lo;AL;
-FD63;Lo;AL;
-FD64;Lo;AL;
-FD65;Lo;AL;
-FD66;Lo;AL;
-FD67;Lo;AL;
-FD68;Lo;AL;
-FD69;Lo;AL;
-FD6A;Lo;AL;
-FD6B;Lo;AL;
-FD6C;Lo;AL;
-FD6D;Lo;AL;
-FD6E;Lo;AL;
-FD6F;Lo;AL;
-FD70;Lo;AL;
-FD71;Lo;AL;
-FD72;Lo;AL;
-FD73;Lo;AL;
-FD74;Lo;AL;
-FD75;Lo;AL;
-FD76;Lo;AL;
-FD77;Lo;AL;
-FD78;Lo;AL;
-FD79;Lo;AL;
-FD7A;Lo;AL;
-FD7B;Lo;AL;
-FD7C;Lo;AL;
-FD7D;Lo;AL;
-FD7E;Lo;AL;
-FD7F;Lo;AL;
-FD80;Lo;AL;
-FD81;Lo;AL;
-FD82;Lo;AL;
-FD83;Lo;AL;
-FD84;Lo;AL;
-FD85;Lo;AL;
-FD86;Lo;AL;
-FD87;Lo;AL;
-FD88;Lo;AL;
-FD89;Lo;AL;
-FD8A;Lo;AL;
-FD8B;Lo;AL;
-FD8C;Lo;AL;
-FD8D;Lo;AL;
-FD8E;Lo;AL;
-FD8F;Lo;AL;
-FD92;Lo;AL;
-FD93;Lo;AL;
-FD94;Lo;AL;
-FD95;Lo;AL;
-FD96;Lo;AL;
-FD97;Lo;AL;
-FD98;Lo;AL;
-FD99;Lo;AL;
-FD9A;Lo;AL;
-FD9B;Lo;AL;
-FD9C;Lo;AL;
-FD9D;Lo;AL;
-FD9E;Lo;AL;
-FD9F;Lo;AL;
-FDA0;Lo;AL;
-FDA1;Lo;AL;
-FDA2;Lo;AL;
-FDA3;Lo;AL;
-FDA4;Lo;AL;
-FDA5;Lo;AL;
-FDA6;Lo;AL;
-FDA7;Lo;AL;
-FDA8;Lo;AL;
-FDA9;Lo;AL;
-FDAA;Lo;AL;
-FDAB;Lo;AL;
-FDAC;Lo;AL;
-FDAD;Lo;AL;
-FDAE;Lo;AL;
-FDAF;Lo;AL;
-FDB0;Lo;AL;
-FDB1;Lo;AL;
-FDB2;Lo;AL;
-FDB3;Lo;AL;
-FDB4;Lo;AL;
-FDB5;Lo;AL;
-FDB6;Lo;AL;
-FDB7;Lo;AL;
-FDB8;Lo;AL;
-FDB9;Lo;AL;
-FDBA;Lo;AL;
-FDBB;Lo;AL;
-FDBC;Lo;AL;
-FDBD;Lo;AL;
-FDBE;Lo;AL;
-FDBF;Lo;AL;
-FDC0;Lo;AL;
-FDC1;Lo;AL;
-FDC2;Lo;AL;
-FDC3;Lo;AL;
-FDC4;Lo;AL;
-FDC5;Lo;AL;
-FDC6;Lo;AL;
-FDC7;Lo;AL;
-FDF0;Lo;AL;
-FDF1;Lo;AL;
-FDF2;Lo;AL;
-FDF3;Lo;AL;
-FDF4;Lo;AL;
-FDF5;Lo;AL;
-FDF6;Lo;AL;
-FDF7;Lo;AL;
-FDF8;Lo;AL;
-FDF9;Lo;AL;
-FDFA;Lo;AL;
-FDFB;Lo;AL;
-FE20;Mn;NSM;
-FE21;Mn;NSM;
-FE22;Mn;NSM;
-FE23;Mn;NSM;
-FE30;Po;ON;
-FE31;Pd;ON;
-FE32;Pd;ON;
-FE33;Pc;ON;
-FE34;Pc;ON;
-FE35;Ps;ON;
-FE36;Pe;ON;
-FE37;Ps;ON;
-FE38;Pe;ON;
-FE39;Ps;ON;
-FE3A;Pe;ON;
-FE3B;Ps;ON;
-FE3C;Pe;ON;
-FE3D;Ps;ON;
-FE3E;Pe;ON;
-FE3F;Ps;ON;
-FE40;Pe;ON;
-FE41;Ps;ON;
-FE42;Pe;ON;
-FE43;Ps;ON;
-FE44;Pe;ON;
-FE49;Po;ON;
-FE4A;Po;ON;
-FE4B;Po;ON;
-FE4C;Po;ON;
-FE4D;Pc;ON;
-FE4E;Pc;ON;
-FE4F;Pc;ON;
-FE50;Po;CS;
-FE51;Po;ON;
-FE52;Po;CS;
-FE54;Po;ON;
-FE55;Po;CS;
-FE56;Po;ON;
-FE57;Po;ON;
-FE58;Pd;ON;
-FE59;Ps;ON;
-FE5A;Pe;ON;
-FE5B;Ps;ON;
-FE5C;Pe;ON;
-FE5D;Ps;ON;
-FE5E;Pe;ON;
-FE5F;Po;ET;
-FE60;Po;ON;
-FE61;Po;ON;
-FE62;Sm;ET;
-FE63;Pd;ET;
-FE64;Sm;ON;
-FE65;Sm;ON;
-FE66;Sm;ON;
-FE68;Po;ON;
-FE69;Sc;ET;
-FE6A;Po;ET;
-FE6B;Po;ON;
-FE70;Lo;AL;
-FE71;Lo;AL;
-FE72;Lo;AL;
-FE74;Lo;AL;
-FE76;Lo;AL;
-FE77;Lo;AL;
-FE78;Lo;AL;
-FE79;Lo;AL;
-FE7A;Lo;AL;
-FE7B;Lo;AL;
-FE7C;Lo;AL;
-FE7D;Lo;AL;
-FE7E;Lo;AL;
-FE7F;Lo;AL;
-FE80;Lo;AL;
-FE81;Lo;AL;
-FE82;Lo;AL;
-FE83;Lo;AL;
-FE84;Lo;AL;
-FE85;Lo;AL;
-FE86;Lo;AL;
-FE87;Lo;AL;
-FE88;Lo;AL;
-FE89;Lo;AL;
-FE8A;Lo;AL;
-FE8B;Lo;AL;
-FE8C;Lo;AL;
-FE8D;Lo;AL;
-FE8E;Lo;AL;
-FE8F;Lo;AL;
-FE90;Lo;AL;
-FE91;Lo;AL;
-FE92;Lo;AL;
-FE93;Lo;AL;
-FE94;Lo;AL;
-FE95;Lo;AL;
-FE96;Lo;AL;
-FE97;Lo;AL;
-FE98;Lo;AL;
-FE99;Lo;AL;
-FE9A;Lo;AL;
-FE9B;Lo;AL;
-FE9C;Lo;AL;
-FE9D;Lo;AL;
-FE9E;Lo;AL;
-FE9F;Lo;AL;
-FEA0;Lo;AL;
-FEA1;Lo;AL;
-FEA2;Lo;AL;
-FEA3;Lo;AL;
-FEA4;Lo;AL;
-FEA5;Lo;AL;
-FEA6;Lo;AL;
-FEA7;Lo;AL;
-FEA8;Lo;AL;
-FEA9;Lo;AL;
-FEAA;Lo;AL;
-FEAB;Lo;AL;
-FEAC;Lo;AL;
-FEAD;Lo;AL;
-FEAE;Lo;AL;
-FEAF;Lo;AL;
-FEB0;Lo;AL;
-FEB1;Lo;AL;
-FEB2;Lo;AL;
-FEB3;Lo;AL;
-FEB4;Lo;AL;
-FEB5;Lo;AL;
-FEB6;Lo;AL;
-FEB7;Lo;AL;
-FEB8;Lo;AL;
-FEB9;Lo;AL;
-FEBA;Lo;AL;
-FEBB;Lo;AL;
-FEBC;Lo;AL;
-FEBD;Lo;AL;
-FEBE;Lo;AL;
-FEBF;Lo;AL;
-FEC0;Lo;AL;
-FEC1;Lo;AL;
-FEC2;Lo;AL;
-FEC3;Lo;AL;
-FEC4;Lo;AL;
-FEC5;Lo;AL;
-FEC6;Lo;AL;
-FEC7;Lo;AL;
-FEC8;Lo;AL;
-FEC9;Lo;AL;
-FECA;Lo;AL;
-FECB;Lo;AL;
-FECC;Lo;AL;
-FECD;Lo;AL;
-FECE;Lo;AL;
-FECF;Lo;AL;
-FED0;Lo;AL;
-FED1;Lo;AL;
-FED2;Lo;AL;
-FED3;Lo;AL;
-FED4;Lo;AL;
-FED5;Lo;AL;
-FED6;Lo;AL;
-FED7;Lo;AL;
-FED8;Lo;AL;
-FED9;Lo;AL;
-FEDA;Lo;AL;
-FEDB;Lo;AL;
-FEDC;Lo;AL;
-FEDD;Lo;AL;
-FEDE;Lo;AL;
-FEDF;Lo;AL;
-FEE0;Lo;AL;
-FEE1;Lo;AL;
-FEE2;Lo;AL;
-FEE3;Lo;AL;
-FEE4;Lo;AL;
-FEE5;Lo;AL;
-FEE6;Lo;AL;
-FEE7;Lo;AL;
-FEE8;Lo;AL;
-FEE9;Lo;AL;
-FEEA;Lo;AL;
-FEEB;Lo;AL;
-FEEC;Lo;AL;
-FEED;Lo;AL;
-FEEE;Lo;AL;
-FEEF;Lo;AL;
-FEF0;Lo;AL;
-FEF1;Lo;AL;
-FEF2;Lo;AL;
-FEF3;Lo;AL;
-FEF4;Lo;AL;
-FEF5;Lo;AL;
-FEF6;Lo;AL;
-FEF7;Lo;AL;
-FEF8;Lo;AL;
-FEF9;Lo;AL;
-FEFA;Lo;AL;
-FEFB;Lo;AL;
-FEFC;Lo;AL;
-FEFF;Cf;BN;
-FF01;Po;ON;
-FF02;Po;ON;
-FF03;Po;ET;
-FF04;Sc;ET;
-FF05;Po;ET;
-FF06;Po;ON;
-FF07;Po;ON;
-FF08;Ps;ON;
-FF09;Pe;ON;
-FF0A;Po;ON;
-FF0B;Sm;ET;
-FF0C;Po;CS;
-FF0D;Pd;ET;
-FF0E;Po;CS;
-FF0F;Po;ES;
-FF10;Nd;EN;
-FF11;Nd;EN;
-FF12;Nd;EN;
-FF13;Nd;EN;
-FF14;Nd;EN;
-FF15;Nd;EN;
-FF16;Nd;EN;
-FF17;Nd;EN;
-FF18;Nd;EN;
-FF19;Nd;EN;
-FF1A;Po;CS;
-FF1B;Po;ON;
-FF1C;Sm;ON;
-FF1D;Sm;ON;
-FF1E;Sm;ON;
-FF1F;Po;ON;
-FF20;Po;ON;
-FF21;Lu;L;
-FF22;Lu;L;
-FF23;Lu;L;
-FF24;Lu;L;
-FF25;Lu;L;
-FF26;Lu;L;
-FF27;Lu;L;
-FF28;Lu;L;
-FF29;Lu;L;
-FF2A;Lu;L;
-FF2B;Lu;L;
-FF2C;Lu;L;
-FF2D;Lu;L;
-FF2E;Lu;L;
-FF2F;Lu;L;
-FF30;Lu;L;
-FF31;Lu;L;
-FF32;Lu;L;
-FF33;Lu;L;
-FF34;Lu;L;
-FF35;Lu;L;
-FF36;Lu;L;
-FF37;Lu;L;
-FF38;Lu;L;
-FF39;Lu;L;
-FF3A;Lu;L;
-FF3B;Ps;ON;
-FF3C;Po;ON;
-FF3D;Pe;ON;
-FF3E;Sk;ON;
-FF3F;Pc;ON;
-FF40;Sk;ON;
-FF41;Ll;L;
-FF42;Ll;L;
-FF43;Ll;L;
-FF44;Ll;L;
-FF45;Ll;L;
-FF46;Ll;L;
-FF47;Ll;L;
-FF48;Ll;L;
-FF49;Ll;L;
-FF4A;Ll;L;
-FF4B;Ll;L;
-FF4C;Ll;L;
-FF4D;Ll;L;
-FF4E;Ll;L;
-FF4F;Ll;L;
-FF50;Ll;L;
-FF51;Ll;L;
-FF52;Ll;L;
-FF53;Ll;L;
-FF54;Ll;L;
-FF55;Ll;L;
-FF56;Ll;L;
-FF57;Ll;L;
-FF58;Ll;L;
-FF59;Ll;L;
-FF5A;Ll;L;
-FF5B;Ps;ON;
-FF5C;Sm;ON;
-FF5D;Pe;ON;
-FF5E;Sm;ON;
-FF61;Po;ON;
-FF62;Ps;ON;
-FF63;Pe;ON;
-FF64;Po;ON;
-FF65;Pc;ON;
-FF66;Lo;L;
-FF67;Lo;L;
-FF68;Lo;L;
-FF69;Lo;L;
-FF6A;Lo;L;
-FF6B;Lo;L;
-FF6C;Lo;L;
-FF6D;Lo;L;
-FF6E;Lo;L;
-FF6F;Lo;L;
-FF70;Lm;L;
-FF71;Lo;L;
-FF72;Lo;L;
-FF73;Lo;L;
-FF74;Lo;L;
-FF75;Lo;L;
-FF76;Lo;L;
-FF77;Lo;L;
-FF78;Lo;L;
-FF79;Lo;L;
-FF7A;Lo;L;
-FF7B;Lo;L;
-FF7C;Lo;L;
-FF7D;Lo;L;
-FF7E;Lo;L;
-FF7F;Lo;L;
-FF80;Lo;L;
-FF81;Lo;L;
-FF82;Lo;L;
-FF83;Lo;L;
-FF84;Lo;L;
-FF85;Lo;L;
-FF86;Lo;L;
-FF87;Lo;L;
-FF88;Lo;L;
-FF89;Lo;L;
-FF8A;Lo;L;
-FF8B;Lo;L;
-FF8C;Lo;L;
-FF8D;Lo;L;
-FF8E;Lo;L;
-FF8F;Lo;L;
-FF90;Lo;L;
-FF91;Lo;L;
-FF92;Lo;L;
-FF93;Lo;L;
-FF94;Lo;L;
-FF95;Lo;L;
-FF96;Lo;L;
-FF97;Lo;L;
-FF98;Lo;L;
-FF99;Lo;L;
-FF9A;Lo;L;
-FF9B;Lo;L;
-FF9C;Lo;L;
-FF9D;Lo;L;
-FF9E;Lm;L;
-FF9F;Lm;L;
-FFA0;Lo;L;
-FFA1;Lo;L;
-FFA2;Lo;L;
-FFA3;Lo;L;
-FFA4;Lo;L;
-FFA5;Lo;L;
-FFA6;Lo;L;
-FFA7;Lo;L;
-FFA8;Lo;L;
-FFA9;Lo;L;
-FFAA;Lo;L;
-FFAB;Lo;L;
-FFAC;Lo;L;
-FFAD;Lo;L;
-FFAE;Lo;L;
-FFAF;Lo;L;
-FFB0;Lo;L;
-FFB1;Lo;L;
-FFB2;Lo;L;
-FFB3;Lo;L;
-FFB4;Lo;L;
-FFB5;Lo;L;
-FFB6;Lo;L;
-FFB7;Lo;L;
-FFB8;Lo;L;
-FFB9;Lo;L;
-FFBA;Lo;L;
-FFBB;Lo;L;
-FFBC;Lo;L;
-FFBD;Lo;L;
-FFBE;Lo;L;
-FFC2;Lo;L;
-FFC3;Lo;L;
-FFC4;Lo;L;
-FFC5;Lo;L;
-FFC6;Lo;L;
-FFC7;Lo;L;
-FFCA;Lo;L;
-FFCB;Lo;L;
-FFCC;Lo;L;
-FFCD;Lo;L;
-FFCE;Lo;L;
-FFCF;Lo;L;
-FFD2;Lo;L;
-FFD3;Lo;L;
-FFD4;Lo;L;
-FFD5;Lo;L;
-FFD6;Lo;L;
-FFD7;Lo;L;
-FFDA;Lo;L;
-FFDB;Lo;L;
-FFDC;Lo;L;
-FFE0;Sc;ET;
-FFE1;Sc;ET;
-FFE2;Sm;ON;
-FFE3;Sk;ON;
-FFE4;So;ON;
-FFE5;Sc;ET;
-FFE6;Sc;ET;
-FFE8;So;ON;
-FFE9;Sm;ON;
-FFEA;Sm;ON;
-FFEB;Sm;ON;
-FFEC;Sm;ON;
-FFED;So;ON;
-FFEE;So;ON;
-FFF9;Cf;BN;
-FFFA;Cf;BN;
-FFFB;Cf;BN;
-FFFC;So;ON;
-FFFD;So;ON;
diff --git a/data/unibreak.txt b/data/unibreak.txt
deleted file mode 100644 (file)
index 512dad6..0000000
+++ /dev/null
@@ -1,1354 +0,0 @@
-# DerivedLineBreak-3.1.0.txt
-#
-# Unicode Character Database: Derived Property Data
-# Generated algorithmically from the Unicode Character Database
-# For documentation, see DerivedProperties.html
-# Date: 2001-03-02 00:05:44.2 GMT [MD]
-# Note: Unassigned and Noncharacter codepoints are omitted,
-#       except when listing Noncharacter or Cn.
-# ================================================
-
-
-# ================================================
-# Line Break (listing LineBreak.txt, field 1)
-# ================================================
-
-E000..F8FF    ; XX # Co [6400] 
-F0000..FFFFD  ; XX # Co [65534] 
-100000..10FFFD; XX # Co [65534] 
-
-# Total code points: 137468
-
-# ================================================
-
-0028          ; OP # Ps       LEFT PARENTHESIS
-005B          ; OP # Ps       LEFT SQUARE BRACKET
-007B          ; OP # Ps       LEFT CURLY BRACKET
-0F3A          ; OP # Ps       TIBETAN MARK GUG RTAGS GYON
-0F3C          ; OP # Ps       TIBETAN MARK ANG KHANG GYON
-169B          ; OP # Ps       OGHAM FEATHER MARK
-201A          ; OP # Ps       SINGLE LOW-9 QUOTATION MARK
-201E          ; OP # Ps       DOUBLE LOW-9 QUOTATION MARK
-2045          ; OP # Ps       LEFT SQUARE BRACKET WITH QUILL
-207D          ; OP # Ps       SUPERSCRIPT LEFT PARENTHESIS
-208D          ; OP # Ps       SUBSCRIPT LEFT PARENTHESIS
-2329          ; OP # Ps       LEFT-POINTING ANGLE BRACKET
-3008          ; OP # Ps       LEFT ANGLE BRACKET
-300A          ; OP # Ps       LEFT DOUBLE ANGLE BRACKET
-300C          ; OP # Ps       LEFT CORNER BRACKET
-300E          ; OP # Ps       LEFT WHITE CORNER BRACKET
-3010          ; OP # Ps       LEFT BLACK LENTICULAR BRACKET
-3014          ; OP # Ps       LEFT TORTOISE SHELL BRACKET
-3016          ; OP # Ps       LEFT WHITE LENTICULAR BRACKET
-3018          ; OP # Ps       LEFT WHITE TORTOISE SHELL BRACKET
-301A          ; OP # Ps       LEFT WHITE SQUARE BRACKET
-301D          ; OP # Ps       REVERSED DOUBLE PRIME QUOTATION MARK
-FD3E          ; OP # Ps       ORNATE LEFT PARENTHESIS
-FE35          ; OP # Ps       PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS
-FE37          ; OP # Ps       PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET
-FE39          ; OP # Ps       PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET
-FE3B          ; OP # Ps       PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET
-FE3D          ; OP # Ps       PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET
-FE3F          ; OP # Ps       PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET
-FE41          ; OP # Ps       PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET
-FE43          ; OP # Ps       PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET
-FE59          ; OP # Ps       SMALL LEFT PARENTHESIS
-FE5B          ; OP # Ps       SMALL LEFT CURLY BRACKET
-FE5D          ; OP # Ps       SMALL LEFT TORTOISE SHELL BRACKET
-FF08          ; OP # Ps       FULLWIDTH LEFT PARENTHESIS
-FF3B          ; OP # Ps       FULLWIDTH LEFT SQUARE BRACKET
-FF5B          ; OP # Ps       FULLWIDTH LEFT CURLY BRACKET
-FF62          ; OP # Ps       HALFWIDTH LEFT CORNER BRACKET
-
-# Total code points: 38
-
-# ================================================
-
-0029          ; CL # Pe       RIGHT PARENTHESIS
-005D          ; CL # Pe       RIGHT SQUARE BRACKET
-007D          ; CL # Pe       RIGHT CURLY BRACKET
-0F3B          ; CL # Pe       TIBETAN MARK GUG RTAGS GYAS
-0F3D          ; CL # Pe       TIBETAN MARK ANG KHANG GYAS
-169C          ; CL # Pe       OGHAM REVERSED FEATHER MARK
-2046          ; CL # Pe       RIGHT SQUARE BRACKET WITH QUILL
-207E          ; CL # Pe       SUPERSCRIPT RIGHT PARENTHESIS
-208E          ; CL # Pe       SUBSCRIPT RIGHT PARENTHESIS
-232A          ; CL # Pe       RIGHT-POINTING ANGLE BRACKET
-3001..3002    ; CL # Po   [2] IDEOGRAPHIC COMMA..IDEOGRAPHIC FULL STOP
-3009          ; CL # Pe       RIGHT ANGLE BRACKET
-300B          ; CL # Pe       RIGHT DOUBLE ANGLE BRACKET
-300D          ; CL # Pe       RIGHT CORNER BRACKET
-300F          ; CL # Pe       RIGHT WHITE CORNER BRACKET
-3011          ; CL # Pe       RIGHT BLACK LENTICULAR BRACKET
-3015          ; CL # Pe       RIGHT TORTOISE SHELL BRACKET
-3017          ; CL # Pe       RIGHT WHITE LENTICULAR BRACKET
-3019          ; CL # Pe       RIGHT WHITE TORTOISE SHELL BRACKET
-301B          ; CL # Pe       RIGHT WHITE SQUARE BRACKET
-301E..301F    ; CL # Pe   [2] DOUBLE PRIME QUOTATION MARK..LOW DOUBLE PRIME QUOTATION MARK
-FD3F          ; CL # Pe       ORNATE RIGHT PARENTHESIS
-FE36          ; CL # Pe       PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS
-FE38          ; CL # Pe       PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET
-FE3A          ; CL # Pe       PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET
-FE3C          ; CL # Pe       PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET
-FE3E          ; CL # Pe       PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET
-FE40          ; CL # Pe       PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET
-FE42          ; CL # Pe       PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET
-FE44          ; CL # Pe       PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET
-FE50          ; CL # Po       SMALL COMMA
-FE52          ; CL # Po       SMALL FULL STOP
-FE5A          ; CL # Pe       SMALL RIGHT PARENTHESIS
-FE5C          ; CL # Pe       SMALL RIGHT CURLY BRACKET
-FE5E          ; CL # Pe       SMALL RIGHT TORTOISE SHELL BRACKET
-FF09          ; CL # Pe       FULLWIDTH RIGHT PARENTHESIS
-FF0C          ; CL # Po       FULLWIDTH COMMA
-FF0E          ; CL # Po       FULLWIDTH FULL STOP
-FF3D          ; CL # Pe       FULLWIDTH RIGHT SQUARE BRACKET
-FF5D          ; CL # Pe       FULLWIDTH RIGHT CURLY BRACKET
-FF61          ; CL # Po       HALFWIDTH IDEOGRAPHIC FULL STOP
-FF63          ; CL # Pe       HALFWIDTH RIGHT CORNER BRACKET
-FF64          ; CL # Po       HALFWIDTH IDEOGRAPHIC COMMA
-
-# Total code points: 45
-
-# ================================================
-
-0022          ; QU # Po       QUOTATION MARK
-0027          ; QU # Po       APOSTROPHE
-00AB          ; QU # Pi       LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-00BB          ; QU # Pf       RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-2018          ; QU # Pi       LEFT SINGLE QUOTATION MARK
-2019          ; QU # Pf       RIGHT SINGLE QUOTATION MARK
-201B..201C    ; QU # Pi   [2] SINGLE HIGH-REVERSED-9 QUOTATION MARK..LEFT DOUBLE QUOTATION MARK
-201D          ; QU # Pf       RIGHT DOUBLE QUOTATION MARK
-201F          ; QU # Pi       DOUBLE HIGH-REVERSED-9 QUOTATION MARK
-2039          ; QU # Pi       SINGLE LEFT-POINTING ANGLE QUOTATION MARK
-203A          ; QU # Pf       SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
-
-# Total code points: 12
-
-# ================================================
-
-00A0          ; GL # Zs       NO-BREAK SPACE
-0F0C          ; GL # Po       TIBETAN MARK DELIMITER TSHEG BSTAR
-2007          ; GL # Zs       FIGURE SPACE
-2011          ; GL # Pd       NON-BREAKING HYPHEN
-202F          ; GL # Zs       NARROW NO-BREAK SPACE
-FEFF          ; GL # Cf       ZERO WIDTH NO-BREAK SPACE
-
-# Total code points: 6
-
-# ================================================
-
-0E5A..0E5B    ; NS # Po   [2] THAI CHARACTER ANGKHANKHU..THAI CHARACTER KHOMUT
-17D4          ; NS # Po       KHMER SIGN KHAN
-17D6..17DA    ; NS # Po   [5] KHMER SIGN CAMNUC PII KUUH..KHMER SIGN KOOMUUT
-203C          ; NS # Po       DOUBLE EXCLAMATION MARK
-2044          ; NS # Sm       FRACTION SLASH
-3005          ; NS # Lm       IDEOGRAPHIC ITERATION MARK
-301C          ; NS # Pd       WAVE DASH
-3041          ; NS # Lo       HIRAGANA LETTER SMALL A
-3043          ; NS # Lo       HIRAGANA LETTER SMALL I
-3045          ; NS # Lo       HIRAGANA LETTER SMALL U
-3047          ; NS # Lo       HIRAGANA LETTER SMALL E
-3049          ; NS # Lo       HIRAGANA LETTER SMALL O
-3063          ; NS # Lo       HIRAGANA LETTER SMALL TU
-3083          ; NS # Lo       HIRAGANA LETTER SMALL YA
-3085          ; NS # Lo       HIRAGANA LETTER SMALL YU
-3087          ; NS # Lo       HIRAGANA LETTER SMALL YO
-308E          ; NS # Lo       HIRAGANA LETTER SMALL WA
-309B..309C    ; NS # Sk   [2] KATAKANA-HIRAGANA VOICED SOUND MARK..KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
-309D..309E    ; NS # Lm   [2] HIRAGANA ITERATION MARK..HIRAGANA VOICED ITERATION MARK
-30A1          ; NS # Lo       KATAKANA LETTER SMALL A
-30A3          ; NS # Lo       KATAKANA LETTER SMALL I
-30A5          ; NS # Lo       KATAKANA LETTER SMALL U
-30A7          ; NS # Lo       KATAKANA LETTER SMALL E
-30A9          ; NS # Lo       KATAKANA LETTER SMALL O
-30C3          ; NS # Lo       KATAKANA LETTER SMALL TU
-30E3          ; NS # Lo       KATAKANA LETTER SMALL YA
-30E5          ; NS # Lo       KATAKANA LETTER SMALL YU
-30E7          ; NS # Lo       KATAKANA LETTER SMALL YO
-30EE          ; NS # Lo       KATAKANA LETTER SMALL WA
-30F5..30F6    ; NS # Lo   [2] KATAKANA LETTER SMALL KA..KATAKANA LETTER SMALL KE
-30FB          ; NS # Pc       KATAKANA MIDDLE DOT
-30FD          ; NS # Lm       KATAKANA ITERATION MARK
-FE54..FE55    ; NS # Po   [2] SMALL SEMICOLON..SMALL COLON
-FF1A..FF1B    ; NS # Po   [2] FULLWIDTH COLON..FULLWIDTH SEMICOLON
-FF65          ; NS # Pc       HALFWIDTH KATAKANA MIDDLE DOT
-FF67..FF6F    ; NS # Lo   [9] HALFWIDTH KATAKANA LETTER SMALL A..HALFWIDTH KATAKANA LETTER SMALL TU
-FF70          ; NS # Lm       HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK
-FF9E..FF9F    ; NS # Lm   [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK
-
-# Total code points: 57
-
-# ================================================
-
-0021          ; EX # Po       EXCLAMATION MARK
-003F          ; EX # Po       QUESTION MARK
-FE56..FE57    ; EX # Po   [2] SMALL QUESTION MARK..SMALL EXCLAMATION MARK
-FF01          ; EX # Po       FULLWIDTH EXCLAMATION MARK
-FF1F          ; EX # Po       FULLWIDTH QUESTION MARK
-
-# Total code points: 6
-
-# ================================================
-
-002F          ; SY # Po       SOLIDUS
-
-# Total code points: 1
-
-# ================================================
-
-002C          ; IS # Po       COMMA
-002E          ; IS # Po       FULL STOP
-003A..003B    ; IS # Po   [2] COLON..SEMICOLON
-0589          ; IS # Po       ARMENIAN FULL STOP
-
-# Total code points: 5
-
-# ================================================
-
-0024          ; PR # Sc       DOLLAR SIGN
-002B          ; PR # Sm       PLUS SIGN
-005C          ; PR # Po       REVERSE SOLIDUS
-00A3..00A5    ; PR # Sc   [3] POUND SIGN..YEN SIGN
-00B1          ; PR # Sm       PLUS-MINUS SIGN
-09F2..09F3    ; PR # Sc   [2] BENGALI RUPEE MARK..BENGALI RUPEE SIGN
-0E3F          ; PR # Sc       THAI CURRENCY SYMBOL BAHT
-17DB          ; PR # Sc       KHMER CURRENCY SYMBOL RIEL
-20A0..20A6    ; PR # Sc   [7] EURO-CURRENCY SIGN..NAIRA SIGN
-20A8..20AF    ; PR # Sc   [8] RUPEE SIGN..DRACHMA SIGN
-2116          ; PR # So       NUMERO SIGN
-2212..2213    ; PR # Sm   [2] MINUS SIGN..MINUS-OR-PLUS SIGN
-FE69          ; PR # Sc       SMALL DOLLAR SIGN
-FF04          ; PR # Sc       FULLWIDTH DOLLAR SIGN
-FFE1          ; PR # Sc       FULLWIDTH POUND SIGN
-FFE5..FFE6    ; PR # Sc   [2] FULLWIDTH YEN SIGN..FULLWIDTH WON SIGN
-
-# Total code points: 34
-
-# ================================================
-
-0025          ; PO # Po       PERCENT SIGN
-00A2          ; PO # Sc       CENT SIGN
-00B0          ; PO # So       DEGREE SIGN
-2030..2037    ; PO # Po   [8] PER MILLE SIGN..REVERSED TRIPLE PRIME
-20A7          ; PO # Sc       PESETA SIGN
-2103          ; PO # So       DEGREE CELSIUS
-2109          ; PO # So       DEGREE FAHRENHEIT
-2126          ; PO # L&       OHM SIGN
-FE6A          ; PO # Po       SMALL PERCENT SIGN
-FF05          ; PO # Po       FULLWIDTH PERCENT SIGN
-FFE0          ; PO # Sc       FULLWIDTH CENT SIGN
-
-# Total code points: 18
-
-# ================================================
-
-0030..0039    ; NU # Nd  [10] DIGIT ZERO..DIGIT NINE
-0660..0669    ; NU # Nd  [10] ARABIC-INDIC DIGIT ZERO..ARABIC-INDIC DIGIT NINE
-06F0..06F9    ; NU # Nd  [10] EXTENDED ARABIC-INDIC DIGIT ZERO..EXTENDED ARABIC-INDIC DIGIT NINE
-0966..096F    ; NU # Nd  [10] DEVANAGARI DIGIT ZERO..DEVANAGARI DIGIT NINE
-09E6..09EF    ; NU # Nd  [10] BENGALI DIGIT ZERO..BENGALI DIGIT NINE
-0A66..0A6F    ; NU # Nd  [10] GURMUKHI DIGIT ZERO..GURMUKHI DIGIT NINE
-0AE6..0AEF    ; NU # Nd  [10] GUJARATI DIGIT ZERO..GUJARATI DIGIT NINE
-0B66..0B6F    ; NU # Nd  [10] ORIYA DIGIT ZERO..ORIYA DIGIT NINE
-0BE7..0BEF    ; NU # Nd   [9] TAMIL DIGIT ONE..TAMIL DIGIT NINE
-0C66..0C6F    ; NU # Nd  [10] TELUGU DIGIT ZERO..TELUGU DIGIT NINE
-0CE6..0CEF    ; NU # Nd  [10] KANNADA DIGIT ZERO..KANNADA DIGIT NINE
-0D66..0D6F    ; NU # Nd  [10] MALAYALAM DIGIT ZERO..MALAYALAM DIGIT NINE
-0E50..0E59    ; NU # Nd  [10] THAI DIGIT ZERO..THAI DIGIT NINE
-0ED0..0ED9    ; NU # Nd  [10] LAO DIGIT ZERO..LAO DIGIT NINE
-0F20..0F29    ; NU # Nd  [10] TIBETAN DIGIT ZERO..TIBETAN DIGIT NINE
-1040..1049    ; NU # Nd  [10] MYANMAR DIGIT ZERO..MYANMAR DIGIT NINE
-1369..1371    ; NU # Nd   [9] ETHIOPIC DIGIT ONE..ETHIOPIC DIGIT NINE
-17E0..17E9    ; NU # Nd  [10] KHMER DIGIT ZERO..KHMER DIGIT NINE
-1810..1819    ; NU # Nd  [10] MONGOLIAN DIGIT ZERO..MONGOLIAN DIGIT NINE
-1D7CE..1D7FF  ; NU # Nd  [50] MATHEMATICAL BOLD DIGIT ZERO..MATHEMATICAL MONOSPACE DIGIT NINE
-
-# Total code points: 238
-
-# ================================================
-
-0023          ; AL # Po       NUMBER SIGN
-0026          ; AL # Po       AMPERSAND
-002A          ; AL # Po       ASTERISK
-003C..003E    ; AL # Sm   [3] LESS-THAN SIGN..GREATER-THAN SIGN
-0040          ; AL # Po       COMMERCIAL AT
-0041..005A    ; AL # L&  [26] LATIN CAPITAL LETTER A..LATIN CAPITAL LETTER Z
-005E          ; AL # Sk       CIRCUMFLEX ACCENT
-005F          ; AL # Pc       LOW LINE
-0060          ; AL # Sk       GRAVE ACCENT
-0061..007A    ; AL # L&  [26] LATIN SMALL LETTER A..LATIN SMALL LETTER Z
-007E          ; AL # Sm       TILDE
-00A6          ; AL # So       BROKEN BAR
-00A9          ; AL # So       COPYRIGHT SIGN
-00AC          ; AL # Sm       NOT SIGN
-00AE          ; AL # So       REGISTERED SIGN
-00AF          ; AL # Sk       MACRON
-00B5          ; AL # L&       MICRO SIGN
-00C0..00C5    ; AL # L&   [6] LATIN CAPITAL LETTER A WITH GRAVE..LATIN CAPITAL LETTER A WITH RING ABOVE
-00C7..00CF    ; AL # L&   [9] LATIN CAPITAL LETTER C WITH CEDILLA..LATIN CAPITAL LETTER I WITH DIAERESIS
-00D1..00D6    ; AL # L&   [6] LATIN CAPITAL LETTER N WITH TILDE..LATIN CAPITAL LETTER O WITH DIAERESIS
-00D9..00DD    ; AL # L&   [5] LATIN CAPITAL LETTER U WITH GRAVE..LATIN CAPITAL LETTER Y WITH ACUTE
-00E2..00E5    ; AL # L&   [4] LATIN SMALL LETTER A WITH CIRCUMFLEX..LATIN SMALL LETTER A WITH RING ABOVE
-00E7          ; AL # L&       LATIN SMALL LETTER C WITH CEDILLA
-00EB          ; AL # L&       LATIN SMALL LETTER E WITH DIAERESIS
-00EE..00EF    ; AL # L&   [2] LATIN SMALL LETTER I WITH CIRCUMFLEX..LATIN SMALL LETTER I WITH DIAERESIS
-00F1          ; AL # L&       LATIN SMALL LETTER N WITH TILDE
-00F4..00F6    ; AL # L&   [3] LATIN SMALL LETTER O WITH CIRCUMFLEX..LATIN SMALL LETTER O WITH DIAERESIS
-00FB          ; AL # L&       LATIN SMALL LETTER U WITH CIRCUMFLEX
-00FD          ; AL # L&       LATIN SMALL LETTER Y WITH ACUTE
-00FF..0100    ; AL # L&   [2] LATIN SMALL LETTER Y WITH DIAERESIS..LATIN CAPITAL LETTER A WITH MACRON
-0102..0110    ; AL # L&  [15] LATIN CAPITAL LETTER A WITH BREVE..LATIN CAPITAL LETTER D WITH STROKE
-0112          ; AL # L&       LATIN CAPITAL LETTER E WITH MACRON
-0114..011A    ; AL # L&   [7] LATIN CAPITAL LETTER E WITH BREVE..LATIN CAPITAL LETTER E WITH CARON
-011C..0125    ; AL # L&  [10] LATIN CAPITAL LETTER G WITH CIRCUMFLEX..LATIN SMALL LETTER H WITH CIRCUMFLEX
-0128..012A    ; AL # L&   [3] LATIN CAPITAL LETTER I WITH TILDE..LATIN CAPITAL LETTER I WITH MACRON
-012C..0130    ; AL # L&   [5] LATIN CAPITAL LETTER I WITH BREVE..LATIN CAPITAL LETTER I WITH DOT ABOVE
-0134..0137    ; AL # L&   [4] LATIN CAPITAL LETTER J WITH CIRCUMFLEX..LATIN SMALL LETTER K WITH CEDILLA
-0139..013E    ; AL # L&   [6] LATIN CAPITAL LETTER L WITH ACUTE..LATIN SMALL LETTER L WITH CARON
-0143          ; AL # L&       LATIN CAPITAL LETTER N WITH ACUTE
-0145..0147    ; AL # L&   [3] LATIN CAPITAL LETTER N WITH CEDILLA..LATIN CAPITAL LETTER N WITH CARON
-014B..014C    ; AL # L&   [2] LATIN SMALL LETTER ENG..LATIN CAPITAL LETTER O WITH MACRON
-014E..0151    ; AL # L&   [4] LATIN CAPITAL LETTER O WITH BREVE..LATIN SMALL LETTER O WITH DOUBLE ACUTE
-0154..0165    ; AL # L&  [18] LATIN CAPITAL LETTER R WITH ACUTE..LATIN SMALL LETTER T WITH CARON
-0168..016A    ; AL # L&   [3] LATIN CAPITAL LETTER U WITH TILDE..LATIN CAPITAL LETTER U WITH MACRON
-016C..01BA    ; AL # L&  [79] LATIN CAPITAL LETTER U WITH BREVE..LATIN SMALL LETTER EZH WITH TAIL
-01BB          ; AL # Lo       LATIN LETTER TWO WITH STROKE
-01BC..01BF    ; AL # L&   [4] LATIN CAPITAL LETTER TONE FIVE..LATIN LETTER WYNN
-01C0..01C3    ; AL # Lo   [4] LATIN LETTER DENTAL CLICK..LATIN LETTER RETROFLEX CLICK
-01C4..01CD    ; AL # L&  [10] LATIN CAPITAL LETTER DZ WITH CARON..LATIN CAPITAL LETTER A WITH CARON
-01CF          ; AL # L&       LATIN CAPITAL LETTER I WITH CARON
-01D1          ; AL # L&       LATIN CAPITAL LETTER O WITH CARON
-01D3          ; AL # L&       LATIN CAPITAL LETTER U WITH CARON
-01D5          ; AL # L&       LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
-01D7          ; AL # L&       LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
-01D9          ; AL # L&       LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON
-01DB          ; AL # L&       LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
-01DD..021F    ; AL # L&  [67] LATIN SMALL LETTER TURNED E..LATIN SMALL LETTER H WITH CARON
-0222..0233    ; AL # L&  [18] LATIN CAPITAL LETTER OU..LATIN SMALL LETTER Y WITH MACRON
-0250          ; AL # L&       LATIN SMALL LETTER TURNED A
-0252..0260    ; AL # L&  [15] LATIN SMALL LETTER TURNED ALPHA..LATIN SMALL LETTER G WITH HOOK
-0262..02AD    ; AL # L&  [76] LATIN LETTER SMALL CAPITAL G..LATIN LETTER BIDENTAL PERCUSSIVE
-02B0..02B8    ; AL # Lm   [9] MODIFIER LETTER SMALL H..MODIFIER LETTER SMALL Y
-02B9..02BA    ; AL # Sk   [2] MODIFIER LETTER PRIME..MODIFIER LETTER DOUBLE PRIME
-02BB..02C1    ; AL # Lm   [7] MODIFIER LETTER TURNED COMMA..MODIFIER LETTER REVERSED GLOTTAL STOP
-02C2..02C6    ; AL # Sk   [5] MODIFIER LETTER LEFT ARROWHEAD..MODIFIER LETTER CIRCUMFLEX ACCENT
-02CE..02CF    ; AL # Sk   [2] MODIFIER LETTER LOW GRAVE ACCENT..MODIFIER LETTER LOW ACUTE ACCENT
-02D1          ; AL # Lm       MODIFIER LETTER HALF TRIANGULAR COLON
-02D2..02D7    ; AL # Sk   [6] MODIFIER LETTER CENTRED RIGHT HALF RING..MODIFIER LETTER MINUS SIGN
-02DC          ; AL # Sk       SMALL TILDE
-02DE..02DF    ; AL # Sk   [2] MODIFIER LETTER RHOTIC HOOK..MODIFIER LETTER CROSS ACCENT
-02E0..02E4    ; AL # Lm   [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP
-02E5..02ED    ; AL # Sk   [9] MODIFIER LETTER EXTRA-HIGH TONE BAR..MODIFIER LETTER UNASPIRATED
-02EE          ; AL # Lm       MODIFIER LETTER DOUBLE APOSTROPHE
-0374..0375    ; AL # Sk   [2] GREEK NUMERAL SIGN..GREEK LOWER NUMERAL SIGN
-037A          ; AL # Lm       GREEK YPOGEGRAMMENI
-037E          ; AL # Po       GREEK QUESTION MARK
-0384..0385    ; AL # Sk   [2] GREEK TONOS..GREEK DIALYTIKA TONOS
-0386          ; AL # L&       GREEK CAPITAL LETTER ALPHA WITH TONOS
-0387          ; AL # Po       GREEK ANO TELEIA
-0388..038A    ; AL # L&   [3] GREEK CAPITAL LETTER EPSILON WITH TONOS..GREEK CAPITAL LETTER IOTA WITH TONOS
-038C          ; AL # L&       GREEK CAPITAL LETTER OMICRON WITH TONOS
-038E..0390    ; AL # L&   [3] GREEK CAPITAL LETTER UPSILON WITH TONOS..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
-03AA..03B0    ; AL # L&   [7] GREEK CAPITAL LETTER IOTA WITH DIALYTIKA..GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
-03C2          ; AL # L&       GREEK SMALL LETTER FINAL SIGMA
-03CA..03CE    ; AL # L&   [5] GREEK SMALL LETTER IOTA WITH DIALYTIKA..GREEK SMALL LETTER OMEGA WITH TONOS
-03D0..03D7    ; AL # L&   [8] GREEK BETA SYMBOL..GREEK KAI SYMBOL
-03DA..03F5    ; AL # L&  [28] GREEK LETTER STIGMA..GREEK LUNATE EPSILON SYMBOL
-0400          ; AL # L&       CYRILLIC CAPITAL LETTER IE WITH GRAVE
-0402..040F    ; AL # L&  [14] CYRILLIC CAPITAL LETTER DJE..CYRILLIC CAPITAL LETTER DZHE
-0450          ; AL # L&       CYRILLIC SMALL LETTER IE WITH GRAVE
-0452..0481    ; AL # L&  [48] CYRILLIC SMALL LETTER DJE..CYRILLIC SMALL LETTER KOPPA
-0482          ; AL # So       CYRILLIC THOUSANDS SIGN
-048C..04C4    ; AL # L&  [57] CYRILLIC CAPITAL LETTER SEMISOFT SIGN..CYRILLIC SMALL LETTER KA WITH HOOK
-04C7..04C8    ; AL # L&   [2] CYRILLIC CAPITAL LETTER EN WITH HOOK..CYRILLIC SMALL LETTER EN WITH HOOK
-04CB..04CC    ; AL # L&   [2] CYRILLIC CAPITAL LETTER KHAKASSIAN CHE..CYRILLIC SMALL LETTER KHAKASSIAN CHE
-04D0..04F5    ; AL # L&  [38] CYRILLIC CAPITAL LETTER A WITH BREVE..CYRILLIC SMALL LETTER CHE WITH DIAERESIS
-04F8..04F9    ; AL # L&   [2] CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS..CYRILLIC SMALL LETTER YERU WITH DIAERESIS
-0531..0556    ; AL # L&  [38] ARMENIAN CAPITAL LETTER AYB..ARMENIAN CAPITAL LETTER FEH
-0559          ; AL # Lm       ARMENIAN MODIFIER LETTER LEFT HALF RING
-055A..055F    ; AL # Po   [6] ARMENIAN APOSTROPHE..ARMENIAN ABBREVIATION MARK
-0561..0587    ; AL # L&  [39] ARMENIAN SMALL LETTER AYB..ARMENIAN SMALL LIGATURE ECH YIWN
-05BE          ; AL # Po       HEBREW PUNCTUATION MAQAF
-05C0          ; AL # Po       HEBREW PUNCTUATION PASEQ
-05C3          ; AL # Po       HEBREW PUNCTUATION SOF PASUQ
-05D0..05EA    ; AL # Lo  [27] HEBREW LETTER ALEF..HEBREW LETTER TAV
-05F0..05F2    ; AL # Lo   [3] HEBREW LIGATURE YIDDISH DOUBLE VAV..HEBREW LIGATURE YIDDISH DOUBLE YOD
-05F3..05F4    ; AL # Po   [2] HEBREW PUNCTUATION GERESH..HEBREW PUNCTUATION GERSHAYIM
-060C          ; AL # Po       ARABIC COMMA
-061B          ; AL # Po       ARABIC SEMICOLON
-061F          ; AL # Po       ARABIC QUESTION MARK
-0621..063A    ; AL # Lo  [26] ARABIC LETTER HAMZA..ARABIC LETTER GHAIN
-0640          ; AL # Lm       ARABIC TATWEEL
-0641..064A    ; AL # Lo  [10] ARABIC LETTER FEH..ARABIC LETTER YEH
-066A..066D    ; AL # Po   [4] ARABIC PERCENT SIGN..ARABIC FIVE POINTED STAR
-0671..06D3    ; AL # Lo  [99] ARABIC LETTER ALEF WASLA..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE
-06D4          ; AL # Po       ARABIC FULL STOP
-06D5          ; AL # Lo       ARABIC LETTER AE
-06E5..06E6    ; AL # Lm   [2] ARABIC SMALL WAW..ARABIC SMALL YEH
-06E9          ; AL # So       ARABIC PLACE OF SAJDAH
-06FA..06FC    ; AL # Lo   [3] ARABIC LETTER SHEEN WITH DOT BELOW..ARABIC LETTER GHAIN WITH DOT BELOW
-06FD..06FE    ; AL # So   [2] ARABIC SIGN SINDHI AMPERSAND..ARABIC SIGN SINDHI POSTPOSITION MEN
-0700..070D    ; AL # Po  [14] SYRIAC END OF PARAGRAPH..SYRIAC HARKLEAN ASTERISCUS
-0710          ; AL # Lo       SYRIAC LETTER ALAPH
-0712..072C    ; AL # Lo  [27] SYRIAC LETTER BETH..SYRIAC LETTER TAW
-0780..07A5    ; AL # Lo  [38] THAANA LETTER HAA..THAANA LETTER WAAVU
-0905..0939    ; AL # Lo  [53] DEVANAGARI LETTER A..DEVANAGARI LETTER HA
-093D          ; AL # Lo       DEVANAGARI SIGN AVAGRAHA
-0950          ; AL # Lo       DEVANAGARI OM
-0958..0961    ; AL # Lo  [10] DEVANAGARI LETTER QA..DEVANAGARI LETTER VOCALIC LL
-0964..0965    ; AL # Po   [2] DEVANAGARI DANDA..DEVANAGARI DOUBLE DANDA
-0970          ; AL # Po       DEVANAGARI ABBREVIATION SIGN
-0985..098C    ; AL # Lo   [8] BENGALI LETTER A..BENGALI LETTER VOCALIC L
-098F..0990    ; AL # Lo   [2] BENGALI LETTER E..BENGALI LETTER AI
-0993..09A8    ; AL # Lo  [22] BENGALI LETTER O..BENGALI LETTER NA
-09AA..09B0    ; AL # Lo   [7] BENGALI LETTER PA..BENGALI LETTER RA
-09B2          ; AL # Lo       BENGALI LETTER LA
-09B6..09B9    ; AL # Lo   [4] BENGALI LETTER SHA..BENGALI LETTER HA
-09DC..09DD    ; AL # Lo   [2] BENGALI LETTER RRA..BENGALI LETTER RHA
-09DF..09E1    ; AL # Lo   [3] BENGALI LETTER YYA..BENGALI LETTER VOCALIC LL
-09F0..09F1    ; AL # Lo   [2] BENGALI LETTER RA WITH MIDDLE DIAGONAL..BENGALI LETTER RA WITH LOWER DIAGONAL
-09F4..09F9    ; AL # No   [6] BENGALI CURRENCY NUMERATOR ONE..BENGALI CURRENCY DENOMINATOR SIXTEEN
-09FA          ; AL # So       BENGALI ISSHAR
-0A05..0A0A    ; AL # Lo   [6] GURMUKHI LETTER A..GURMUKHI LETTER UU
-0A0F..0A10    ; AL # Lo   [2] GURMUKHI LETTER EE..GURMUKHI LETTER AI
-0A13..0A28    ; AL # Lo  [22] GURMUKHI LETTER OO..GURMUKHI LETTER NA
-0A2A..0A30    ; AL # Lo   [7] GURMUKHI LETTER PA..GURMUKHI LETTER RA
-0A32..0A33    ; AL # Lo   [2] GURMUKHI LETTER LA..GURMUKHI LETTER LLA
-0A35..0A36    ; AL # Lo   [2] GURMUKHI LETTER VA..GURMUKHI LETTER SHA
-0A38..0A39    ; AL # Lo   [2] GURMUKHI LETTER SA..GURMUKHI LETTER HA
-0A59..0A5C    ; AL # Lo   [4] GURMUKHI LETTER KHHA..GURMUKHI LETTER RRA
-0A5E          ; AL # Lo       GURMUKHI LETTER FA
-0A72..0A74    ; AL # Lo   [3] GURMUKHI IRI..GURMUKHI EK ONKAR
-0A85..0A8B    ; AL # Lo   [7] GUJARATI LETTER A..GUJARATI LETTER VOCALIC R
-0A8D          ; AL # Lo       GUJARATI VOWEL CANDRA E
-0A8F..0A91    ; AL # Lo   [3] GUJARATI LETTER E..GUJARATI VOWEL CANDRA O
-0A93..0AA8    ; AL # Lo  [22] GUJARATI LETTER O..GUJARATI LETTER NA
-0AAA..0AB0    ; AL # Lo   [7] GUJARATI LETTER PA..GUJARATI LETTER RA
-0AB2..0AB3    ; AL # Lo   [2] GUJARATI LETTER LA..GUJARATI LETTER LLA
-0AB5..0AB9    ; AL # Lo   [5] GUJARATI LETTER VA..GUJARATI LETTER HA
-0ABD          ; AL # Lo       GUJARATI SIGN AVAGRAHA
-0AD0          ; AL # Lo       GUJARATI OM
-0AE0          ; AL # Lo       GUJARATI LETTER VOCALIC RR
-0B05..0B0C    ; AL # Lo   [8] ORIYA LETTER A..ORIYA LETTER VOCALIC L
-0B0F..0B10    ; AL # Lo   [2] ORIYA LETTER E..ORIYA LETTER AI
-0B13..0B28    ; AL # Lo  [22] ORIYA LETTER O..ORIYA LETTER NA
-0B2A..0B30    ; AL # Lo   [7] ORIYA LETTER PA..ORIYA LETTER RA
-0B32..0B33    ; AL # Lo   [2] ORIYA LETTER LA..ORIYA LETTER LLA
-0B36..0B39    ; AL # Lo   [4] ORIYA LETTER SHA..ORIYA LETTER HA
-0B3D          ; AL # Lo       ORIYA SIGN AVAGRAHA
-0B5C..0B5D    ; AL # Lo   [2] ORIYA LETTER RRA..ORIYA LETTER RHA
-0B5F..0B61    ; AL # Lo   [3] ORIYA LETTER YYA..ORIYA LETTER VOCALIC LL
-0B70          ; AL # So       ORIYA ISSHAR
-0B85..0B8A    ; AL # Lo   [6] TAMIL LETTER A..TAMIL LETTER UU
-0B8E..0B90    ; AL # Lo   [3] TAMIL LETTER E..TAMIL LETTER AI
-0B92..0B95    ; AL # Lo   [4] TAMIL LETTER O..TAMIL LETTER KA
-0B99..0B9A    ; AL # Lo   [2] TAMIL LETTER NGA..TAMIL LETTER CA
-0B9C          ; AL # Lo       TAMIL LETTER JA
-0B9E..0B9F    ; AL # Lo   [2] TAMIL LETTER NYA..TAMIL LETTER TTA
-0BA3..0BA4    ; AL # Lo   [2] TAMIL LETTER NNA..TAMIL LETTER TA
-0BA8..0BAA    ; AL # Lo   [3] TAMIL LETTER NA..TAMIL LETTER PA
-0BAE..0BB5    ; AL # Lo   [8] TAMIL LETTER MA..TAMIL LETTER VA
-0BB7..0BB9    ; AL # Lo   [3] TAMIL LETTER SSA..TAMIL LETTER HA
-0BF0..0BF2    ; AL # No   [3] TAMIL NUMBER TEN..TAMIL NUMBER ONE THOUSAND
-0C05..0C0C    ; AL # Lo   [8] TELUGU LETTER A..TELUGU LETTER VOCALIC L
-0C0E..0C10    ; AL # Lo   [3] TELUGU LETTER E..TELUGU LETTER AI
-0C12..0C28    ; AL # Lo  [23] TELUGU LETTER O..TELUGU LETTER NA
-0C2A..0C33    ; AL # Lo  [10] TELUGU LETTER PA..TELUGU LETTER LLA
-0C35..0C39    ; AL # Lo   [5] TELUGU LETTER VA..TELUGU LETTER HA
-0C60..0C61    ; AL # Lo   [2] TELUGU LETTER VOCALIC RR..TELUGU LETTER VOCALIC LL
-0C85..0C8C    ; AL # Lo   [8] KANNADA LETTER A..KANNADA LETTER VOCALIC L
-0C8E..0C90    ; AL # Lo   [3] KANNADA LETTER E..KANNADA LETTER AI
-0C92..0CA8    ; AL # Lo  [23] KANNADA LETTER O..KANNADA LETTER NA
-0CAA..0CB3    ; AL # Lo  [10] KANNADA LETTER PA..KANNADA LETTER LLA
-0CB5..0CB9    ; AL # Lo   [5] KANNADA LETTER VA..KANNADA LETTER HA
-0CDE          ; AL # Lo       KANNADA LETTER FA
-0CE0..0CE1    ; AL # Lo   [2] KANNADA LETTER VOCALIC RR..KANNADA LETTER VOCALIC LL
-0D05..0D0C    ; AL # Lo   [8] MALAYALAM LETTER A..MALAYALAM LETTER VOCALIC L
-0D0E..0D10    ; AL # Lo   [3] MALAYALAM LETTER E..MALAYALAM LETTER AI
-0D12..0D28    ; AL # Lo  [23] MALAYALAM LETTER O..MALAYALAM LETTER NA
-0D2A..0D39    ; AL # Lo  [16] MALAYALAM LETTER PA..MALAYALAM LETTER HA
-0D60..0D61    ; AL # Lo   [2] MALAYALAM LETTER VOCALIC RR..MALAYALAM LETTER VOCALIC LL
-0D85..0D96    ; AL # Lo  [18] SINHALA LETTER AYANNA..SINHALA LETTER AUYANNA
-0D9A..0DB1    ; AL # Lo  [24] SINHALA LETTER ALPAPRAANA KAYANNA..SINHALA LETTER DANTAJA NAYANNA
-0DB3..0DBB    ; AL # Lo   [9] SINHALA LETTER SANYAKA DAYANNA..SINHALA LETTER RAYANNA
-0DBD          ; AL # Lo       SINHALA LETTER DANTAJA LAYANNA
-0DC0..0DC6    ; AL # Lo   [7] SINHALA LETTER VAYANNA..SINHALA LETTER FAYANNA
-0DF4          ; AL # Po       SINHALA PUNCTUATION KUNDDALIYA
-0E4F          ; AL # Po       THAI CHARACTER FONGMAN
-0F00          ; AL # Lo       TIBETAN SYLLABLE OM
-0F01..0F03    ; AL # So   [3] TIBETAN MARK GTER YIG MGO TRUNCATED A..TIBETAN MARK GTER YIG MGO -UM GTER TSHEG MA
-0F04..0F0A    ; AL # Po   [7] TIBETAN MARK INITIAL YIG MGO MDUN MA..TIBETAN MARK BKA- SHOG YIG MGO
-0F0D..0F12    ; AL # Po   [6] TIBETAN MARK SHAD..TIBETAN MARK RGYA GRAM SHAD
-0F13..0F17    ; AL # So   [5] TIBETAN MARK CARET -DZUD RTAGS ME LONG CAN..TIBETAN ASTROLOGICAL SIGN SGRA GCAN -CHAR RTAGS
-0F1A..0F1F    ; AL # So   [6] TIBETAN SIGN RDEL DKAR GCIG..TIBETAN SIGN RDEL DKAR RDEL NAG
-0F2A..0F33    ; AL # No  [10] TIBETAN DIGIT HALF ONE..TIBETAN DIGIT HALF ZERO
-0F34          ; AL # So       TIBETAN MARK BSDUS RTAGS
-0F36          ; AL # So       TIBETAN MARK CARET -DZUD RTAGS BZHI MIG CAN
-0F38          ; AL # So       TIBETAN MARK CHE MGO
-0F40..0F47    ; AL # Lo   [8] TIBETAN LETTER KA..TIBETAN LETTER JA
-0F49..0F6A    ; AL # Lo  [34] TIBETAN LETTER NYA..TIBETAN LETTER FIXED-FORM RA
-0F85          ; AL # Po       TIBETAN MARK PALUTA
-0F88..0F8B    ; AL # Lo   [4] TIBETAN SIGN LCE TSA CAN..TIBETAN SIGN GRU MED RGYINGS
-0FBE..0FC5    ; AL # So   [8] TIBETAN KU RU KHA..TIBETAN SYMBOL RDO RJE
-0FC7..0FCC    ; AL # So   [6] TIBETAN SYMBOL RDO RJE RGYA GRAM..TIBETAN SYMBOL NOR BU BZHI -KHYIL
-0FCF          ; AL # So       TIBETAN SIGN RDEL NAG GSUM
-104A..104F    ; AL # Po   [6] MYANMAR SIGN LITTLE SECTION..MYANMAR SYMBOL GENITIVE
-10A0..10C5    ; AL # L&  [38] GEORGIAN CAPITAL LETTER AN..GEORGIAN CAPITAL LETTER HOE
-10D0..10F6    ; AL # Lo  [39] GEORGIAN LETTER AN..GEORGIAN LETTER FI
-10FB          ; AL # Po       GEORGIAN PARAGRAPH SEPARATOR
-1200..1206    ; AL # Lo   [7] ETHIOPIC SYLLABLE HA..ETHIOPIC SYLLABLE HO
-1208..1246    ; AL # Lo  [63] ETHIOPIC SYLLABLE LA..ETHIOPIC SYLLABLE QO
-1248          ; AL # Lo       ETHIOPIC SYLLABLE QWA
-124A..124D    ; AL # Lo   [4] ETHIOPIC SYLLABLE QWI..ETHIOPIC SYLLABLE QWE
-1250..1256    ; AL # Lo   [7] ETHIOPIC SYLLABLE QHA..ETHIOPIC SYLLABLE QHO
-1258          ; AL # Lo       ETHIOPIC SYLLABLE QHWA
-125A..125D    ; AL # Lo   [4] ETHIOPIC SYLLABLE QHWI..ETHIOPIC SYLLABLE QHWE
-1260..1286    ; AL # Lo  [39] ETHIOPIC SYLLABLE BA..ETHIOPIC SYLLABLE XO
-1288          ; AL # Lo       ETHIOPIC SYLLABLE XWA
-128A..128D    ; AL # Lo   [4] ETHIOPIC SYLLABLE XWI..ETHIOPIC SYLLABLE XWE
-1290..12AE    ; AL # Lo  [31] ETHIOPIC SYLLABLE NA..ETHIOPIC SYLLABLE KO
-12B0          ; AL # Lo       ETHIOPIC SYLLABLE KWA
-12B2..12B5    ; AL # Lo   [4] ETHIOPIC SYLLABLE KWI..ETHIOPIC SYLLABLE KWE
-12B8..12BE    ; AL # Lo   [7] ETHIOPIC SYLLABLE KXA..ETHIOPIC SYLLABLE KXO
-12C0          ; AL # Lo       ETHIOPIC SYLLABLE KXWA
-12C2..12C5    ; AL # Lo   [4] ETHIOPIC SYLLABLE KXWI..ETHIOPIC SYLLABLE KXWE
-12C8..12CE    ; AL # Lo   [7] ETHIOPIC SYLLABLE WA..ETHIOPIC SYLLABLE WO
-12D0..12D6    ; AL # Lo   [7] ETHIOPIC SYLLABLE PHARYNGEAL A..ETHIOPIC SYLLABLE PHARYNGEAL O
-12D8..12EE    ; AL # Lo  [23] ETHIOPIC SYLLABLE ZA..ETHIOPIC SYLLABLE YO
-12F0..130E    ; AL # Lo  [31] ETHIOPIC SYLLABLE DA..ETHIOPIC SYLLABLE GO
-1310          ; AL # Lo       ETHIOPIC SYLLABLE GWA
-1312..1315    ; AL # Lo   [4] ETHIOPIC SYLLABLE GWI..ETHIOPIC SYLLABLE GWE
-1318..131E    ; AL # Lo   [7] ETHIOPIC SYLLABLE GGA..ETHIOPIC SYLLABLE GGO
-1320..1346    ; AL # Lo  [39] ETHIOPIC SYLLABLE THA..ETHIOPIC SYLLABLE TZO
-1348..135A    ; AL # Lo  [19] ETHIOPIC SYLLABLE FA..ETHIOPIC SYLLABLE FYA
-1362..1368    ; AL # Po   [7] ETHIOPIC FULL STOP..ETHIOPIC PARAGRAPH SEPARATOR
-1372..137C    ; AL # No  [11] ETHIOPIC NUMBER TEN..ETHIOPIC NUMBER TEN THOUSAND
-13A0..13F4    ; AL # Lo  [85] CHEROKEE LETTER A..CHEROKEE LETTER YV
-1401..166C    ; AL # Lo [620] CANADIAN SYLLABICS E..CANADIAN SYLLABICS CARRIER TTSA
-166D..166E    ; AL # Po   [2] CANADIAN SYLLABICS CHI SIGN..CANADIAN SYLLABICS FULL STOP
-166F..1676    ; AL # Lo   [8] CANADIAN SYLLABICS QAI..CANADIAN SYLLABICS NNGAA
-1681..169A    ; AL # Lo  [26] OGHAM LETTER BEITH..OGHAM LETTER PEITH
-16A0..16EA    ; AL # Lo  [75] RUNIC LETTER FEHU FEOH FE F..RUNIC LETTER X
-16EB..16ED    ; AL # Po   [3] RUNIC SINGLE PUNCTUATION..RUNIC CROSS PUNCTUATION
-16EE..16F0    ; AL # Nl   [3] RUNIC ARLAUG SYMBOL..RUNIC BELGTHOR SYMBOL
-17DC          ; AL # Po       KHMER SIGN AVAKRAHASANYA
-1800..1805    ; AL # Po   [6] MONGOLIAN BIRGA..MONGOLIAN FOUR DOTS
-1807..180A    ; AL # Po   [4] MONGOLIAN SIBE SYLLABLE BOUNDARY MARKER..MONGOLIAN NIRUGU
-1820..1842    ; AL # Lo  [35] MONGOLIAN LETTER A..MONGOLIAN LETTER CHI
-1843          ; AL # Lm       MONGOLIAN LETTER TODO LONG VOWEL SIGN
-1844..1877    ; AL # Lo  [52] MONGOLIAN LETTER TODO E..MONGOLIAN LETTER MANCHU ZHA
-1880..18A8    ; AL # Lo  [41] MONGOLIAN LETTER ALI GALI ANUSVARA ONE..MONGOLIAN LETTER MANCHU ALI GALI BHA
-1E00..1E9B    ; AL # L& [156] LATIN CAPITAL LETTER A WITH RING BELOW..LATIN SMALL LETTER LONG S WITH DOT ABOVE
-1EA0..1EF9    ; AL # L&  [90] LATIN CAPITAL LETTER A WITH DOT BELOW..LATIN SMALL LETTER Y WITH TILDE
-1F00..1F15    ; AL # L&  [22] GREEK SMALL LETTER ALPHA WITH PSILI..GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
-1F18..1F1D    ; AL # L&   [6] GREEK CAPITAL LETTER EPSILON WITH PSILI..GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
-1F20..1F45    ; AL # L&  [38] GREEK SMALL LETTER ETA WITH PSILI..GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
-1F48..1F4D    ; AL # L&   [6] GREEK CAPITAL LETTER OMICRON WITH PSILI..GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
-1F50..1F57    ; AL # L&   [8] GREEK SMALL LETTER UPSILON WITH PSILI..GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI
-1F59          ; AL # L&       GREEK CAPITAL LETTER UPSILON WITH DASIA
-1F5B          ; AL # L&       GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA
-1F5D          ; AL # L&       GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
-1F5F..1F7D    ; AL # L&  [31] GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI..GREEK SMALL LETTER OMEGA WITH OXIA
-1F80..1FB4    ; AL # L&  [53] GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
-1FB6..1FBC    ; AL # L&   [7] GREEK SMALL LETTER ALPHA WITH PERISPOMENI..GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
-1FBD          ; AL # Sk       GREEK KORONIS
-1FBE          ; AL # L&       GREEK PROSGEGRAMMENI
-1FBF..1FC1    ; AL # Sk   [3] GREEK PSILI..GREEK DIALYTIKA AND PERISPOMENI
-1FC2..1FC4    ; AL # L&   [3] GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
-1FC6..1FCC    ; AL # L&   [7] GREEK SMALL LETTER ETA WITH PERISPOMENI..GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
-1FCD..1FCF    ; AL # Sk   [3] GREEK PSILI AND VARIA..GREEK PSILI AND PERISPOMENI
-1FD0..1FD3    ; AL # L&   [4] GREEK SMALL LETTER IOTA WITH VRACHY..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA
-1FD6..1FDB    ; AL # L&   [6] GREEK SMALL LETTER IOTA WITH PERISPOMENI..GREEK CAPITAL LETTER IOTA WITH OXIA
-1FDD..1FDF    ; AL # Sk   [3] GREEK DASIA AND VARIA..GREEK DASIA AND PERISPOMENI
-1FE0..1FEC    ; AL # L&  [13] GREEK SMALL LETTER UPSILON WITH VRACHY..GREEK CAPITAL LETTER RHO WITH DASIA
-1FED..1FEF    ; AL # Sk   [3] GREEK DIALYTIKA AND VARIA..GREEK VARIA
-1FF2..1FF4    ; AL # L&   [3] GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
-1FF6..1FFC    ; AL # L&   [7] GREEK SMALL LETTER OMEGA WITH PERISPOMENI..GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
-1FFD..1FFE    ; AL # Sk   [2] GREEK OXIA..GREEK DASIA
-2017          ; AL # Po       DOUBLE LOW LINE
-2022..2023    ; AL # Po   [2] BULLET..TRIANGULAR BULLET
-2038          ; AL # Po       CARET
-203D..203E    ; AL # Po   [2] INTERROBANG..OVERLINE
-203F..2040    ; AL # Pc   [2] UNDERTIE..CHARACTER TIE
-2041..2043    ; AL # Po   [3] CARET INSERTION POINT..HYPHEN BULLET
-2048..204D    ; AL # Po   [6] QUESTION EXCLAMATION MARK..BLACK RIGHTWARDS BULLET
-2070          ; AL # No       SUPERSCRIPT ZERO
-2075..2079    ; AL # No   [5] SUPERSCRIPT FIVE..SUPERSCRIPT NINE
-207A..207C    ; AL # Sm   [3] SUPERSCRIPT PLUS SIGN..SUPERSCRIPT EQUALS SIGN
-2080          ; AL # No       SUBSCRIPT ZERO
-2085..2089    ; AL # No   [5] SUBSCRIPT FIVE..SUBSCRIPT NINE
-208A..208C    ; AL # Sm   [3] SUBSCRIPT PLUS SIGN..SUBSCRIPT EQUALS SIGN
-2100..2101    ; AL # So   [2] ACCOUNT OF..ADDRESSED TO THE SUBJECT
-2102          ; AL # L&       DOUBLE-STRUCK CAPITAL C
-2104          ; AL # So       CENTRE LINE SYMBOL
-2106          ; AL # So       CADA UNA
-2107          ; AL # L&       EULER CONSTANT
-2108          ; AL # So       SCRUPLE
-210A..2112    ; AL # L&   [9] SCRIPT SMALL G..SCRIPT CAPITAL L
-2114          ; AL # So       L B BAR SYMBOL
-2115          ; AL # L&       DOUBLE-STRUCK CAPITAL N
-2117..2118    ; AL # So   [2] SOUND RECORDING COPYRIGHT..SCRIPT CAPITAL P
-2119..211D    ; AL # L&   [5] DOUBLE-STRUCK CAPITAL P..DOUBLE-STRUCK CAPITAL R
-211E..2120    ; AL # So   [3] PRESCRIPTION TAKE..SERVICE MARK
-2123          ; AL # So       VERSICLE
-2124          ; AL # L&       DOUBLE-STRUCK CAPITAL Z
-2125          ; AL # So       OUNCE SIGN
-2127          ; AL # So       INVERTED OHM SIGN
-2128          ; AL # L&       BLACK-LETTER CAPITAL Z
-2129          ; AL # So       TURNED GREEK SMALL LETTER IOTA
-212A          ; AL # L&       KELVIN SIGN
-212C..212D    ; AL # L&   [2] SCRIPT CAPITAL B..BLACK-LETTER CAPITAL C
-212E          ; AL # So       ESTIMATED SYMBOL
-212F..2131    ; AL # L&   [3] SCRIPT SMALL E..SCRIPT CAPITAL F
-2132          ; AL # So       TURNED CAPITAL F
-2133..2134    ; AL # L&   [2] SCRIPT CAPITAL M..SCRIPT SMALL O
-2135..2138    ; AL # Lo   [4] ALEF SYMBOL..DALET SYMBOL
-2139          ; AL # L&       INFORMATION SOURCE
-213A          ; AL # So       ROTATED CAPITAL Q
-2153          ; AL # No       VULGAR FRACTION ONE THIRD
-2156..215A    ; AL # No   [5] VULGAR FRACTION TWO FIFTHS..VULGAR FRACTION FIVE SIXTHS
-215C..215D    ; AL # No   [2] VULGAR FRACTION THREE EIGHTHS..VULGAR FRACTION FIVE EIGHTHS
-215F          ; AL # No       FRACTION NUMERATOR ONE
-216C..216F    ; AL # Nl   [4] ROMAN NUMERAL FIFTY..ROMAN NUMERAL ONE THOUSAND
-217A..2183    ; AL # Nl  [10] SMALL ROMAN NUMERAL ELEVEN..ROMAN NUMERAL REVERSED ONE HUNDRED
-219A..219B    ; AL # Sm   [2] LEFTWARDS ARROW WITH STROKE..RIGHTWARDS ARROW WITH STROKE
-219C..219F    ; AL # So   [4] LEFTWARDS WAVE ARROW..UPWARDS TWO HEADED ARROW
-21A0          ; AL # Sm       RIGHTWARDS TWO HEADED ARROW
-21A1..21A2    ; AL # So   [2] DOWNWARDS TWO HEADED ARROW..LEFTWARDS ARROW WITH TAIL
-21A3          ; AL # Sm       RIGHTWARDS ARROW WITH TAIL
-21A4..21A5    ; AL # So   [2] LEFTWARDS ARROW FROM BAR..UPWARDS ARROW FROM BAR
-21A6          ; AL # Sm       RIGHTWARDS ARROW FROM BAR
-21A7..21AD    ; AL # So   [7] DOWNWARDS ARROW FROM BAR..LEFT RIGHT WAVE ARROW
-21AE          ; AL # Sm       LEFT RIGHT ARROW WITH STROKE
-21AF..21CD    ; AL # So  [31] DOWNWARDS ZIGZAG ARROW..LEFTWARDS DOUBLE ARROW WITH STROKE
-21CE..21CF    ; AL # Sm   [2] LEFT RIGHT DOUBLE ARROW WITH STROKE..RIGHTWARDS DOUBLE ARROW WITH STROKE
-21D0..21D1    ; AL # So   [2] LEFTWARDS DOUBLE ARROW..UPWARDS DOUBLE ARROW
-21D3          ; AL # So       DOWNWARDS DOUBLE ARROW
-21D5..21F3    ; AL # So  [31] UP DOWN DOUBLE ARROW..UP DOWN WHITE ARROW
-2201          ; AL # Sm       COMPLEMENT
-2204..2206    ; AL # Sm   [3] THERE DOES NOT EXIST..INCREMENT
-2209..220A    ; AL # Sm   [2] NOT AN ELEMENT OF..SMALL ELEMENT OF
-220C..220E    ; AL # Sm   [3] DOES NOT CONTAIN AS MEMBER..END OF PROOF
-2210          ; AL # Sm       N-ARY COPRODUCT
-2214          ; AL # Sm       DOT PLUS
-2216..2219    ; AL # Sm   [4] SET MINUS..BULLET OPERATOR
-221B..221C    ; AL # Sm   [2] CUBE ROOT..FOURTH ROOT
-2221..2222    ; AL # Sm   [2] MEASURED ANGLE..SPHERICAL ANGLE
-2224          ; AL # Sm       DOES NOT DIVIDE
-2226          ; AL # Sm       NOT PARALLEL TO
-222D          ; AL # Sm       TRIPLE INTEGRAL
-222F..2233    ; AL # Sm   [5] SURFACE INTEGRAL..ANTICLOCKWISE CONTOUR INTEGRAL
-2238..223B    ; AL # Sm   [4] DOT MINUS..HOMOTHETIC
-223E..2247    ; AL # Sm  [10] INVERTED LAZY S..NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO
-2249..224B    ; AL # Sm   [3] NOT ALMOST EQUAL TO..TRIPLE TILDE
-224D..2251    ; AL # Sm   [5] EQUIVALENT TO..GEOMETRICALLY EQUAL TO
-2253..225F    ; AL # Sm  [13] IMAGE OF OR APPROXIMATELY EQUAL TO..QUESTIONED EQUAL TO
-2262..2263    ; AL # Sm   [2] NOT IDENTICAL TO..STRICTLY EQUIVALENT TO
-2268..2269    ; AL # Sm   [2] LESS-THAN BUT NOT EQUAL TO..GREATER-THAN BUT NOT EQUAL TO
-226C..226D    ; AL # Sm   [2] BETWEEN..NOT EQUIVALENT TO
-2270..2281    ; AL # Sm  [18] NEITHER LESS-THAN NOR EQUAL TO..DOES NOT SUCCEED
-2284..2285    ; AL # Sm   [2] NOT A SUBSET OF..NOT A SUPERSET OF
-2288..2294    ; AL # Sm  [13] NEITHER A SUBSET OF NOR EQUAL TO..SQUARE CUP
-2296..2298    ; AL # Sm   [3] CIRCLED MINUS..CIRCLED DIVISION SLASH
-229A..22A4    ; AL # Sm  [11] CIRCLED RING OPERATOR..DOWN TACK
-22A6..22BE    ; AL # Sm  [25] ASSERTION..RIGHT ANGLE WITH ARC
-22C0..22F1    ; AL # Sm  [50] N-ARY LOGICAL AND..DOWN RIGHT DIAGONAL ELLIPSIS
-2300..2307    ; AL # So   [8] DIAMETER SIGN..WAVY LINE
-2308..230B    ; AL # Sm   [4] LEFT CEILING..RIGHT FLOOR
-230C..2311    ; AL # So   [6] BOTTOM RIGHT CROP..SQUARE LOZENGE
-2313..231F    ; AL # So  [13] SEGMENT..BOTTOM RIGHT CORNER
-2320..2321    ; AL # Sm   [2] TOP HALF INTEGRAL..BOTTOM HALF INTEGRAL
-2322..2328    ; AL # So   [7] FROWN..KEYBOARD
-232B..237B    ; AL # So  [81] ERASE TO THE LEFT..NOT CHECK MARK
-237D..239A    ; AL # So  [30] SHOULDERED OPEN BOX..CLEAR SCREEN SYMBOL
-2400..2426    ; AL # So  [39] SYMBOL FOR NULL..SYMBOL FOR SUBSTITUTE FORM TWO
-2440..244A    ; AL # So  [11] OCR HOOK..OCR DOUBLE BACKSLASH
-24C0..24CF    ; AL # So  [16] CIRCLED LATIN CAPITAL LETTER K..CIRCLED LATIN CAPITAL LETTER Z
-24EA          ; AL # No       CIRCLED DIGIT ZERO
-254C..254F    ; AL # So   [4] BOX DRAWINGS LIGHT DOUBLE DASH HORIZONTAL..BOX DRAWINGS HEAVY DOUBLE DASH VERTICAL
-2575..257F    ; AL # So  [11] BOX DRAWINGS LIGHT UP..BOX DRAWINGS HEAVY UP AND LIGHT DOWN
-2590..2591    ; AL # So   [2] RIGHT HALF BLOCK..LIGHT SHADE
-25A2          ; AL # So       WHITE SQUARE WITH ROUNDED CORNERS
-25AA..25B1    ; AL # So   [8] BLACK SMALL SQUARE..WHITE PARALLELOGRAM
-25B4..25B5    ; AL # So   [2] BLACK UP-POINTING SMALL TRIANGLE..WHITE UP-POINTING SMALL TRIANGLE
-25B8..25BB    ; AL # So   [4] BLACK RIGHT-POINTING SMALL TRIANGLE..WHITE RIGHT-POINTING POINTER
-25BE..25BF    ; AL # So   [2] BLACK DOWN-POINTING SMALL TRIANGLE..WHITE DOWN-POINTING SMALL TRIANGLE
-25C2..25C5    ; AL # So   [4] BLACK LEFT-POINTING SMALL TRIANGLE..WHITE LEFT-POINTING POINTER
-25C9..25CA    ; AL # So   [2] FISHEYE..LOZENGE
-25CC..25CD    ; AL # So   [2] DOTTED CIRCLE..CIRCLE WITH VERTICAL FILL
-25D2..25E1    ; AL # So  [16] CIRCLE WITH LOWER HALF BLACK..LOWER HALF CIRCLE
-25E6..25EE    ; AL # So   [9] WHITE BULLET..UP-POINTING TRIANGLE WITH RIGHT HALF BLACK
-25F0..25F7    ; AL # So   [8] WHITE SQUARE WITH UPPER LEFT QUADRANT..WHITE CIRCLE WITH UPPER RIGHT QUADRANT
-2600..2604    ; AL # So   [5] BLACK SUN WITH RAYS..COMET
-2607..2608    ; AL # So   [2] LIGHTNING..THUNDERSTORM
-260A..260D    ; AL # So   [4] ASCENDING NODE..OPPOSITION
-2610..2613    ; AL # So   [4] BALLOT BOX..SALTIRE
-2619..261B    ; AL # So   [3] REVERSED ROTATED FLORAL HEART BULLET..BLACK RIGHT POINTING INDEX
-261D          ; AL # So       WHITE UP POINTING INDEX
-261F..263F    ; AL # So  [33] WHITE DOWN POINTING INDEX..MERCURY
-2641          ; AL # So       EARTH
-2643..265F    ; AL # So  [29] JUPITER..BLACK CHESS PAWN
-2662          ; AL # So       WHITE DIAMOND SUIT
-2666          ; AL # So       BLACK DIAMOND SUIT
-266B          ; AL # So       BEAMED EIGHTH NOTES
-266E          ; AL # So       MUSIC NATURAL SIGN
-2670..2671    ; AL # So   [2] WEST SYRIAC CROSS..EAST SYRIAC CROSS
-2701..2704    ; AL # So   [4] UPPER BLADE SCISSORS..WHITE SCISSORS
-2706..2709    ; AL # So   [4] TELEPHONE LOCATION SIGN..ENVELOPE
-270C..2727    ; AL # So  [28] VICTORY HAND..WHITE FOUR POINTED STAR
-2729..274B    ; AL # So  [35] STRESS OUTLINED WHITE STAR..HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK
-274D          ; AL # So       SHADOWED WHITE CIRCLE
-274F..2752    ; AL # So   [4] LOWER RIGHT DROP-SHADOWED WHITE SQUARE..UPPER RIGHT SHADOWED WHITE SQUARE
-2756          ; AL # So       BLACK DIAMOND MINUS WHITE X
-2758..275E    ; AL # So   [7] LIGHT VERTICAL BAR..HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT
-2761..2767    ; AL # So   [7] CURVED STEM PARAGRAPH SIGN ORNAMENT..ROTATED FLORAL HEART BULLET
-2776..2793    ; AL # No  [30] DINGBAT NEGATIVE CIRCLED DIGIT ONE..DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN
-2794          ; AL # So       HEAVY WIDE-HEADED RIGHTWARDS ARROW
-2798..27AF    ; AL # So  [24] HEAVY SOUTH EAST ARROW..NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW
-27B1..27BE    ; AL # So  [14] NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW..OPEN-OUTLINED RIGHTWARDS ARROW
-2800..28FF    ; AL # So [256] BRAILLE PATTERN BLANK..BRAILLE PATTERN DOTS-12345678
-FB00..FB06    ; AL # L&   [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST
-FB13..FB17    ; AL # L&   [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SMALL LIGATURE MEN XEH
-FB1D          ; AL # Lo       HEBREW LETTER YOD WITH HIRIQ
-FB1F..FB28    ; AL # Lo  [10] HEBREW LIGATURE YIDDISH YOD YOD PATAH..HEBREW LETTER WIDE TAV
-FB29          ; AL # Sm       HEBREW LETTER ALTERNATIVE PLUS SIGN
-FB2A..FB36    ; AL # Lo  [13] HEBREW LETTER SHIN WITH SHIN DOT..HEBREW LETTER ZAYIN WITH DAGESH
-FB38..FB3C    ; AL # Lo   [5] HEBREW LETTER TET WITH DAGESH..HEBREW LETTER LAMED WITH DAGESH
-FB3E          ; AL # Lo       HEBREW LETTER MEM WITH DAGESH
-FB40..FB41    ; AL # Lo   [2] HEBREW LETTER NUN WITH DAGESH..HEBREW LETTER SAMEKH WITH DAGESH
-FB43..FB44    ; AL # Lo   [2] HEBREW LETTER FINAL PE WITH DAGESH..HEBREW LETTER PE WITH DAGESH
-FB46..FBB1    ; AL # Lo [108] HEBREW LETTER TSADI WITH DAGESH..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM
-FBD3..FD3D    ; AL # Lo [363] ARABIC LETTER NG ISOLATED FORM..ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM
-FD50..FD8F    ; AL # Lo  [64] ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM..ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM
-FD92..FDC7    ; AL # Lo  [54] ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM..ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM
-FDF0..FDFB    ; AL # Lo  [12] ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM..ARABIC LIGATURE JALLAJALALOUHOU
-FE70..FE72    ; AL # Lo   [3] ARABIC FATHATAN ISOLATED FORM..ARABIC DAMMATAN ISOLATED FORM
-FE74          ; AL # Lo       ARABIC KASRATAN ISOLATED FORM
-FE76..FEFC    ; AL # Lo [135] ARABIC FATHA ISOLATED FORM..ARABIC LIGATURE LAM WITH ALEF FINAL FORM
-FF66          ; AL # Lo       HALFWIDTH KATAKANA LETTER WO
-FF71..FF9D    ; AL # Lo  [45] HALFWIDTH KATAKANA LETTER A..HALFWIDTH KATAKANA LETTER N
-FFA0..FFBE    ; AL # Lo  [31] HALFWIDTH HANGUL FILLER..HALFWIDTH HANGUL LETTER HIEUH
-FFC2..FFC7    ; AL # Lo   [6] HALFWIDTH HANGUL LETTER A..HALFWIDTH HANGUL LETTER E
-FFCA..FFCF    ; AL # Lo   [6] HALFWIDTH HANGUL LETTER YEO..HALFWIDTH HANGUL LETTER OE
-FFD2..FFD7    ; AL # Lo   [6] HALFWIDTH HANGUL LETTER YO..HALFWIDTH HANGUL LETTER YU
-FFDA..FFDC    ; AL # Lo   [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER I
-FFE8          ; AL # So       HALFWIDTH FORMS LIGHT VERTICAL
-FFE9..FFEC    ; AL # Sm   [4] HALFWIDTH LEFTWARDS ARROW..HALFWIDTH DOWNWARDS ARROW
-FFED..FFEE    ; AL # So   [2] HALFWIDTH BLACK SQUARE..HALFWIDTH WHITE CIRCLE
-10300..1031E  ; AL # Lo  [31] OLD ITALIC LETTER A..OLD ITALIC LETTER UU
-10320..10323  ; AL # No   [4] OLD ITALIC NUMERAL ONE..OLD ITALIC NUMERAL FIFTY
-10330..10349  ; AL # Lo  [26] GOTHIC LETTER AHSA..GOTHIC LETTER OTHAL
-1034A         ; AL # Nl       GOTHIC LETTER NINE HUNDRED
-10400..10425  ; AL # L&  [38] DESERET CAPITAL LETTER LONG I..DESERET CAPITAL LETTER ENG
-10428..1044D  ; AL # L&  [38] DESERET SMALL LETTER LONG I..DESERET SMALL LETTER ENG
-1D000..1D0F5  ; AL # So [246] BYZANTINE MUSICAL SYMBOL PSILI..BYZANTINE MUSICAL SYMBOL GORGON NEO KATO
-1D100..1D126  ; AL # So  [39] MUSICAL SYMBOL SINGLE BARLINE..MUSICAL SYMBOL DRUM CLEF-2
-1D12A..1D164  ; AL # So  [59] MUSICAL SYMBOL DOUBLE SHARP..MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE
-1D16A..1D16C  ; AL # So   [3] MUSICAL SYMBOL FINGERED TREMOLO-1..MUSICAL SYMBOL FINGERED TREMOLO-3
-1D183..1D184  ; AL # So   [2] MUSICAL SYMBOL ARPEGGIATO UP..MUSICAL SYMBOL ARPEGGIATO DOWN
-1D18C..1D1A9  ; AL # So  [30] MUSICAL SYMBOL RINFORZANDO..MUSICAL SYMBOL DEGREE SLASH
-1D1AE..1D1DD  ; AL # So  [48] MUSICAL SYMBOL PEDAL MARK..MUSICAL SYMBOL PES SUBPUNCTIS
-1D400..1D454  ; AL # L&  [85] MATHEMATICAL BOLD CAPITAL A..MATHEMATICAL ITALIC SMALL G
-1D456..1D49C  ; AL # L&  [71] MATHEMATICAL ITALIC SMALL I..MATHEMATICAL SCRIPT CAPITAL A
-1D49E..1D49F  ; AL # L&   [2] MATHEMATICAL SCRIPT CAPITAL C..MATHEMATICAL SCRIPT CAPITAL D
-1D4A2         ; AL # L&       MATHEMATICAL SCRIPT CAPITAL G
-1D4A5..1D4A6  ; AL # L&   [2] MATHEMATICAL SCRIPT CAPITAL J..MATHEMATICAL SCRIPT CAPITAL K
-1D4A9..1D4AC  ; AL # L&   [4] MATHEMATICAL SCRIPT CAPITAL N..MATHEMATICAL SCRIPT CAPITAL Q
-1D4AE..1D4B9  ; AL # L&  [12] MATHEMATICAL SCRIPT CAPITAL S..MATHEMATICAL SCRIPT SMALL D
-1D4BB         ; AL # L&       MATHEMATICAL SCRIPT SMALL F
-1D4BD..1D4C0  ; AL # L&   [4] MATHEMATICAL SCRIPT SMALL H..MATHEMATICAL SCRIPT SMALL K
-1D4C2..1D4C3  ; AL # L&   [2] MATHEMATICAL SCRIPT SMALL M..MATHEMATICAL SCRIPT SMALL N
-1D4C5..1D505  ; AL # L&  [65] MATHEMATICAL SCRIPT SMALL P..MATHEMATICAL FRAKTUR CAPITAL B
-1D507..1D50A  ; AL # L&   [4] MATHEMATICAL FRAKTUR CAPITAL D..MATHEMATICAL FRAKTUR CAPITAL G
-1D50D..1D514  ; AL # L&   [8] MATHEMATICAL FRAKTUR CAPITAL J..MATHEMATICAL FRAKTUR CAPITAL Q
-1D516..1D51C  ; AL # L&   [7] MATHEMATICAL FRAKTUR CAPITAL S..MATHEMATICAL FRAKTUR CAPITAL Y
-1D51E..1D539  ; AL # L&  [28] MATHEMATICAL FRAKTUR SMALL A..MATHEMATICAL DOUBLE-STRUCK CAPITAL B
-1D53B..1D53E  ; AL # L&   [4] MATHEMATICAL DOUBLE-STRUCK CAPITAL D..MATHEMATICAL DOUBLE-STRUCK CAPITAL G
-1D540..1D544  ; AL # L&   [5] MATHEMATICAL DOUBLE-STRUCK CAPITAL I..MATHEMATICAL DOUBLE-STRUCK CAPITAL M
-1D546         ; AL # L&       MATHEMATICAL DOUBLE-STRUCK CAPITAL O
-1D54A..1D550  ; AL # L&   [7] MATHEMATICAL DOUBLE-STRUCK CAPITAL S..MATHEMATICAL DOUBLE-STRUCK CAPITAL Y
-1D552..1D6A3  ; AL # L& [338] MATHEMATICAL DOUBLE-STRUCK SMALL A..MATHEMATICAL MONOSPACE SMALL Z
-1D6A8..1D6C0  ; AL # L&  [25] MATHEMATICAL BOLD CAPITAL ALPHA..MATHEMATICAL BOLD CAPITAL OMEGA
-1D6C1         ; AL # Sm       MATHEMATICAL BOLD NABLA
-1D6C2..1D6DA  ; AL # L&  [25] MATHEMATICAL BOLD SMALL ALPHA..MATHEMATICAL BOLD SMALL OMEGA
-1D6DB         ; AL # Sm       MATHEMATICAL BOLD PARTIAL DIFFERENTIAL
-1D6DC..1D6FA  ; AL # L&  [31] MATHEMATICAL BOLD EPSILON SYMBOL..MATHEMATICAL ITALIC CAPITAL OMEGA
-1D6FB         ; AL # Sm       MATHEMATICAL ITALIC NABLA
-1D6FC..1D714  ; AL # L&  [25] MATHEMATICAL ITALIC SMALL ALPHA..MATHEMATICAL ITALIC SMALL OMEGA
-1D715         ; AL # Sm       MATHEMATICAL ITALIC PARTIAL DIFFERENTIAL
-1D716..1D734  ; AL # L&  [31] MATHEMATICAL ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD ITALIC CAPITAL OMEGA
-1D735         ; AL # Sm       MATHEMATICAL BOLD ITALIC NABLA
-1D736..1D74E  ; AL # L&  [25] MATHEMATICAL BOLD ITALIC SMALL ALPHA..MATHEMATICAL BOLD ITALIC SMALL OMEGA
-1D74F         ; AL # Sm       MATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIAL
-1D750..1D76E  ; AL # L&  [31] MATHEMATICAL BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA
-1D76F         ; AL # Sm       MATHEMATICAL SANS-SERIF BOLD NABLA
-1D770..1D788  ; AL # L&  [25] MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA
-1D789         ; AL # Sm       MATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIAL
-1D78A..1D7A8  ; AL # L&  [31] MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA
-1D7A9         ; AL # Sm       MATHEMATICAL SANS-SERIF BOLD ITALIC NABLA
-1D7AA..1D7C2  ; AL # L&  [25] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA
-1D7C3         ; AL # Sm       MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL
-1D7C4..1D7C9  ; AL # L&   [6] MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD ITALIC PI SYMBOL
-
-# Total code points: 7183
-
-# ================================================
-
-1100..1159    ; ID # Lo  [90] HANGUL CHOSEONG KIYEOK..HANGUL CHOSEONG YEORINHIEUH
-115F          ; ID # Lo       HANGUL CHOSEONG FILLER
-2E80..2E99    ; ID # So  [26] CJK RADICAL REPEAT..CJK RADICAL RAP
-2E9B..2EF3    ; ID # So  [89] CJK RADICAL CHOKE..CJK RADICAL C-SIMPLIFIED TURTLE
-2F00..2FD5    ; ID # So [214] KANGXI RADICAL ONE..KANGXI RADICAL FLUTE
-2FF0..2FFB    ; ID # So  [12] IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT..IDEOGRAPHIC DESCRIPTION CHARACTER OVERLAID
-3000          ; ID # Zs       IDEOGRAPHIC SPACE
-3003          ; ID # Po       DITTO MARK
-3004          ; ID # So       JAPANESE INDUSTRIAL STANDARD SYMBOL
-3006          ; ID # Lo       IDEOGRAPHIC CLOSING MARK
-3007          ; ID # Nl       IDEOGRAPHIC NUMBER ZERO
-3012..3013    ; ID # So   [2] POSTAL MARK..GETA MARK
-3020          ; ID # So       POSTAL MARK FACE
-3021..3029    ; ID # Nl   [9] HANGZHOU NUMERAL ONE..HANGZHOU NUMERAL NINE
-3030          ; ID # Pd       WAVY DASH
-3031..3035    ; ID # Lm   [5] VERTICAL KANA REPEAT MARK..VERTICAL KANA REPEAT MARK LOWER HALF
-3036..3037    ; ID # So   [2] CIRCLED POSTAL MARK..IDEOGRAPHIC TELEGRAPH LINE FEED SEPARATOR SYMBOL
-3038..303A    ; ID # Nl   [3] HANGZHOU NUMERAL TEN..HANGZHOU NUMERAL THIRTY
-303E..303F    ; ID # So   [2] IDEOGRAPHIC VARIATION INDICATOR..IDEOGRAPHIC HALF FILL SPACE
-3042          ; ID # Lo       HIRAGANA LETTER A
-3044          ; ID # Lo       HIRAGANA LETTER I
-3046          ; ID # Lo       HIRAGANA LETTER U
-3048          ; ID # Lo       HIRAGANA LETTER E
-304A..3062    ; ID # Lo  [25] HIRAGANA LETTER O..HIRAGANA LETTER DI
-3064..3082    ; ID # Lo  [31] HIRAGANA LETTER TU..HIRAGANA LETTER MO
-3084          ; ID # Lo       HIRAGANA LETTER YA
-3086          ; ID # Lo       HIRAGANA LETTER YU
-3088..308D    ; ID # Lo   [6] HIRAGANA LETTER YO..HIRAGANA LETTER RO
-308F..3094    ; ID # Lo   [6] HIRAGANA LETTER WA..HIRAGANA LETTER VU
-30A2          ; ID # Lo       KATAKANA LETTER A
-30A4          ; ID # Lo       KATAKANA LETTER I
-30A6          ; ID # Lo       KATAKANA LETTER U
-30A8          ; ID # Lo       KATAKANA LETTER E
-30AA..30C2    ; ID # Lo  [25] KATAKANA LETTER O..KATAKANA LETTER DI
-30C4..30E2    ; ID # Lo  [31] KATAKANA LETTER TU..KATAKANA LETTER MO
-30E4          ; ID # Lo       KATAKANA LETTER YA
-30E6          ; ID # Lo       KATAKANA LETTER YU
-30E8..30ED    ; ID # Lo   [6] KATAKANA LETTER YO..KATAKANA LETTER RO
-30EF..30F4    ; ID # Lo   [6] KATAKANA LETTER WA..KATAKANA LETTER VU
-30F7..30FA    ; ID # Lo   [4] KATAKANA LETTER VA..KATAKANA LETTER VO
-30FC          ; ID # Lm       KATAKANA-HIRAGANA PROLONGED SOUND MARK
-30FE          ; ID # Lm       KATAKANA VOICED ITERATION MARK
-3105..312C    ; ID # Lo  [40] BOPOMOFO LETTER B..BOPOMOFO LETTER GN
-3131..318E    ; ID # Lo  [94] HANGUL LETTER KIYEOK..HANGUL LETTER ARAEAE
-3190..3191    ; ID # So   [2] IDEOGRAPHIC ANNOTATION LINKING MARK..IDEOGRAPHIC ANNOTATION REVERSE MARK
-3192..3195    ; ID # No   [4] IDEOGRAPHIC ANNOTATION ONE MARK..IDEOGRAPHIC ANNOTATION FOUR MARK
-3196..319F    ; ID # So  [10] IDEOGRAPHIC ANNOTATION TOP MARK..IDEOGRAPHIC ANNOTATION MAN MARK
-31A0..31B7    ; ID # Lo  [24] BOPOMOFO LETTER BU..BOPOMOFO FINAL LETTER H
-3200..321C    ; ID # So  [29] PARENTHESIZED HANGUL KIYEOK..PARENTHESIZED HANGUL CIEUC U
-3220..3229    ; ID # No  [10] PARENTHESIZED IDEOGRAPH ONE..PARENTHESIZED IDEOGRAPH TEN
-322A..3243    ; ID # So  [26] PARENTHESIZED IDEOGRAPH MOON..PARENTHESIZED IDEOGRAPH REACH
-3260..327B    ; ID # So  [28] CIRCLED HANGUL KIYEOK..CIRCLED HANGUL HIEUH A
-327F          ; ID # So       KOREAN STANDARD SYMBOL
-3280..3289    ; ID # No  [10] CIRCLED IDEOGRAPH ONE..CIRCLED IDEOGRAPH TEN
-328A..32B0    ; ID # So  [39] CIRCLED IDEOGRAPH MOON..CIRCLED IDEOGRAPH NIGHT
-32C0..32CB    ; ID # So  [12] IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY..IDEOGRAPHIC TELEGRAPH SYMBOL FOR DECEMBER
-32D0..32FE    ; ID # So  [47] CIRCLED KATAKANA A..CIRCLED KATAKANA WO
-3300..3376    ; ID # So [119] SQUARE APAATO..SQUARE PC
-337B..33DD    ; ID # So  [99] SQUARE ERA NAME HEISEI..SQUARE WB
-33E0..33FE    ; ID # So  [31] IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ONE..IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY-ONE
-3400..4DB5    ; ID # Lo [6582] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DB5
-4E00..9FA5    ; ID # Lo [20902] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FA5
-A000..A48C    ; ID # Lo [1165] YI SYLLABLE IT..YI SYLLABLE YYR
-A490..A4A1    ; ID # So  [18] YI RADICAL QOT..YI RADICAL GA
-A4A4..A4B3    ; ID # So  [16] YI RADICAL DDUR..YI RADICAL JO
-A4B5..A4C0    ; ID # So  [12] YI RADICAL JJY..YI RADICAL SHAT
-A4C2..A4C4    ; ID # So   [3] YI RADICAL SHOP..YI RADICAL ZZIET
-A4C6          ; ID # So       YI RADICAL KE
-AC00..D7A3    ; ID # Lo [11172] HANGUL SYLLABLE GA..HANGUL SYLLABLE HIH
-F900..FA2D    ; ID # Lo [302] CJK COMPATIBILITY IDEOGRAPH-F900..CJK COMPATIBILITY IDEOGRAPH-FA2D
-FE30          ; ID # Po       PRESENTATION FORM FOR VERTICAL TWO DOT LEADER
-FE31..FE32    ; ID # Pd   [2] PRESENTATION FORM FOR VERTICAL EM DASH..PRESENTATION FORM FOR VERTICAL EN DASH
-FE33..FE34    ; ID # Pc   [2] PRESENTATION FORM FOR VERTICAL LOW LINE..PRESENTATION FORM FOR VERTICAL WAVY LOW LINE
-FE49..FE4C    ; ID # Po   [4] DASHED OVERLINE..DOUBLE WAVY OVERLINE
-FE4D..FE4F    ; ID # Pc   [3] DASHED LOW LINE..WAVY LOW LINE
-FE51          ; ID # Po       SMALL IDEOGRAPHIC COMMA
-FE58          ; ID # Pd       SMALL EM DASH
-FE5F..FE61    ; ID # Po   [3] SMALL NUMBER SIGN..SMALL ASTERISK
-FE62          ; ID # Sm       SMALL PLUS SIGN
-FE63          ; ID # Pd       SMALL HYPHEN-MINUS
-FE64..FE66    ; ID # Sm   [3] SMALL LESS-THAN SIGN..SMALL EQUALS SIGN
-FE68          ; ID # Po       SMALL REVERSE SOLIDUS
-FE6B          ; ID # Po       SMALL COMMERCIAL AT
-FF02..FF03    ; ID # Po   [2] FULLWIDTH QUOTATION MARK..FULLWIDTH NUMBER SIGN
-FF06..FF07    ; ID # Po   [2] FULLWIDTH AMPERSAND..FULLWIDTH APOSTROPHE
-FF0A          ; ID # Po       FULLWIDTH ASTERISK
-FF0B          ; ID # Sm       FULLWIDTH PLUS SIGN
-FF0D          ; ID # Pd       FULLWIDTH HYPHEN-MINUS
-FF0F          ; ID # Po       FULLWIDTH SOLIDUS
-FF10..FF19    ; ID # Nd  [10] FULLWIDTH DIGIT ZERO..FULLWIDTH DIGIT NINE
-FF1C..FF1E    ; ID # Sm   [3] FULLWIDTH LESS-THAN SIGN..FULLWIDTH GREATER-THAN SIGN
-FF20          ; ID # Po       FULLWIDTH COMMERCIAL AT
-FF21..FF3A    ; ID # L&  [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z
-FF3C          ; ID # Po       FULLWIDTH REVERSE SOLIDUS
-FF3E          ; ID # Sk       FULLWIDTH CIRCUMFLEX ACCENT
-FF3F          ; ID # Pc       FULLWIDTH LOW LINE
-FF40          ; ID # Sk       FULLWIDTH GRAVE ACCENT
-FF41..FF5A    ; ID # L&  [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER Z
-FF5C          ; ID # Sm       FULLWIDTH VERTICAL LINE
-FF5E          ; ID # Sm       FULLWIDTH TILDE
-FFE2          ; ID # Sm       FULLWIDTH NOT SIGN
-FFE3          ; ID # Sk       FULLWIDTH MACRON
-FFE4          ; ID # So       FULLWIDTH BROKEN BAR
-20000..2A6D6  ; ID # Lo [42711] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6D6
-2F800..2FA1D  ; ID # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D
-
-# Total code points: 84774
-
-# ================================================
-
-2024..2026    ; IN # Po   [3] ONE DOT LEADER..HORIZONTAL ELLIPSIS
-
-# Total code points: 3
-
-# ================================================
-
-002D          ; HY # Pd       HYPHEN-MINUS
-
-# Total code points: 1
-
-# ================================================
-
-0000..0008    ; CM # Cc   [9] <control>..<control>
-000B          ; CM # Cc       <control>
-000E..001F    ; CM # Cc  [18] <control>..<control>
-007F..009F    ; CM # Cc  [33] <control>..<control>
-0300..034E    ; CM # Mn  [79] COMBINING GRAVE ACCENT..COMBINING UPWARDS ARROW BELOW
-0360..0362    ; CM # Mn   [3] COMBINING DOUBLE TILDE..COMBINING DOUBLE RIGHTWARDS ARROW BELOW
-0483..0486    ; CM # Mn   [4] COMBINING CYRILLIC TITLO..COMBINING CYRILLIC PSILI PNEUMATA
-0488..0489    ; CM # Me   [2] COMBINING CYRILLIC HUNDRED THOUSANDS SIGN..COMBINING CYRILLIC MILLIONS SIGN
-0591..05A1    ; CM # Mn  [17] HEBREW ACCENT ETNAHTA..HEBREW ACCENT PAZER
-05A3..05B9    ; CM # Mn  [23] HEBREW ACCENT MUNAH..HEBREW POINT HOLAM
-05BB..05BD    ; CM # Mn   [3] HEBREW POINT QUBUTS..HEBREW POINT METEG
-05BF          ; CM # Mn       HEBREW POINT RAFE
-05C1..05C2    ; CM # Mn   [2] HEBREW POINT SHIN DOT..HEBREW POINT SIN DOT
-05C4          ; CM # Mn       HEBREW MARK UPPER DOT
-064B..0655    ; CM # Mn  [11] ARABIC FATHATAN..ARABIC HAMZA BELOW
-0670          ; CM # Mn       ARABIC LETTER SUPERSCRIPT ALEF
-06D6..06DC    ; CM # Mn   [7] ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA..ARABIC SMALL HIGH SEEN
-06DD..06DE    ; CM # Me   [2] ARABIC END OF AYAH..ARABIC START OF RUB EL HIZB
-06DF..06E4    ; CM # Mn   [6] ARABIC SMALL HIGH ROUNDED ZERO..ARABIC SMALL HIGH MADDA
-06E7..06E8    ; CM # Mn   [2] ARABIC SMALL HIGH YEH..ARABIC SMALL HIGH NOON
-06EA..06ED    ; CM # Mn   [4] ARABIC EMPTY CENTRE LOW STOP..ARABIC SMALL LOW MEEM
-070F          ; CM # Cf       SYRIAC ABBREVIATION MARK
-0711          ; CM # Mn       SYRIAC LETTER SUPERSCRIPT ALAPH
-0730..074A    ; CM # Mn  [27] SYRIAC PTHAHA ABOVE..SYRIAC BARREKH
-07A6..07B0    ; CM # Mn  [11] THAANA ABAFILI..THAANA SUKUN
-0901..0902    ; CM # Mn   [2] DEVANAGARI SIGN CANDRABINDU..DEVANAGARI SIGN ANUSVARA
-0903          ; CM # Mc       DEVANAGARI SIGN VISARGA
-093C          ; CM # Mn       DEVANAGARI SIGN NUKTA
-093E..0940    ; CM # Mc   [3] DEVANAGARI VOWEL SIGN AA..DEVANAGARI VOWEL SIGN II
-0941..0948    ; CM # Mn   [8] DEVANAGARI VOWEL SIGN U..DEVANAGARI VOWEL SIGN AI
-0949..094C    ; CM # Mc   [4] DEVANAGARI VOWEL SIGN CANDRA O..DEVANAGARI VOWEL SIGN AU
-094D          ; CM # Mn       DEVANAGARI SIGN VIRAMA
-0951..0954    ; CM # Mn   [4] DEVANAGARI STRESS SIGN UDATTA..DEVANAGARI ACUTE ACCENT
-0962..0963    ; CM # Mn   [2] DEVANAGARI VOWEL SIGN VOCALIC L..DEVANAGARI VOWEL SIGN VOCALIC LL
-0981          ; CM # Mn       BENGALI SIGN CANDRABINDU
-0982..0983    ; CM # Mc   [2] BENGALI SIGN ANUSVARA..BENGALI SIGN VISARGA
-09BC          ; CM # Mn       BENGALI SIGN NUKTA
-09BE..09C0    ; CM # Mc   [3] BENGALI VOWEL SIGN AA..BENGALI VOWEL SIGN II
-09C1..09C4    ; CM # Mn   [4] BENGALI VOWEL SIGN U..BENGALI VOWEL SIGN VOCALIC RR
-09C7..09C8    ; CM # Mc   [2] BENGALI VOWEL SIGN E..BENGALI VOWEL SIGN AI
-09CB..09CC    ; CM # Mc   [2] BENGALI VOWEL SIGN O..BENGALI VOWEL SIGN AU
-09CD          ; CM # Mn       BENGALI SIGN VIRAMA
-09D7          ; CM # Mc       BENGALI AU LENGTH MARK
-09E2..09E3    ; CM # Mn   [2] BENGALI VOWEL SIGN VOCALIC L..BENGALI VOWEL SIGN VOCALIC LL
-0A02          ; CM # Mn       GURMUKHI SIGN BINDI
-0A3C          ; CM # Mn       GURMUKHI SIGN NUKTA
-0A3E..0A40    ; CM # Mc   [3] GURMUKHI VOWEL SIGN AA..GURMUKHI VOWEL SIGN II
-0A41..0A42    ; CM # Mn   [2] GURMUKHI VOWEL SIGN U..GURMUKHI VOWEL SIGN UU
-0A47..0A48    ; CM # Mn   [2] GURMUKHI VOWEL SIGN EE..GURMUKHI VOWEL SIGN AI
-0A4B..0A4D    ; CM # Mn   [3] GURMUKHI VOWEL SIGN OO..GURMUKHI SIGN VIRAMA
-0A70..0A71    ; CM # Mn   [2] GURMUKHI TIPPI..GURMUKHI ADDAK
-0A81..0A82    ; CM # Mn   [2] GUJARATI SIGN CANDRABINDU..GUJARATI SIGN ANUSVARA
-0A83          ; CM # Mc       GUJARATI SIGN VISARGA
-0ABC          ; CM # Mn       GUJARATI SIGN NUKTA
-0ABE..0AC0    ; CM # Mc   [3] GUJARATI VOWEL SIGN AA..GUJARATI VOWEL SIGN II
-0AC1..0AC5    ; CM # Mn   [5] GUJARATI VOWEL SIGN U..GUJARATI VOWEL SIGN CANDRA E
-0AC7..0AC8    ; CM # Mn   [2] GUJARATI VOWEL SIGN E..GUJARATI VOWEL SIGN AI
-0AC9          ; CM # Mc       GUJARATI VOWEL SIGN CANDRA O
-0ACB..0ACC    ; CM # Mc   [2] GUJARATI VOWEL SIGN O..GUJARATI VOWEL SIGN AU
-0ACD          ; CM # Mn       GUJARATI SIGN VIRAMA
-0B01          ; CM # Mn       ORIYA SIGN CANDRABINDU
-0B02..0B03    ; CM # Mc   [2] ORIYA SIGN ANUSVARA..ORIYA SIGN VISARGA
-0B3C          ; CM # Mn       ORIYA SIGN NUKTA
-0B3E          ; CM # Mc       ORIYA VOWEL SIGN AA
-0B3F          ; CM # Mn       ORIYA VOWEL SIGN I
-0B40          ; CM # Mc       ORIYA VOWEL SIGN II
-0B41..0B43    ; CM # Mn   [3] ORIYA VOWEL SIGN U..ORIYA VOWEL SIGN VOCALIC R
-0B47..0B48    ; CM # Mc   [2] ORIYA VOWEL SIGN E..ORIYA VOWEL SIGN AI
-0B4B..0B4C    ; CM # Mc   [2] ORIYA VOWEL SIGN O..ORIYA VOWEL SIGN AU
-0B4D          ; CM # Mn       ORIYA SIGN VIRAMA
-0B56          ; CM # Mn       ORIYA AI LENGTH MARK
-0B57          ; CM # Mc       ORIYA AU LENGTH MARK
-0B82          ; CM # Mn       TAMIL SIGN ANUSVARA
-0B83          ; CM # Mc       TAMIL SIGN VISARGA
-0BBE..0BBF    ; CM # Mc   [2] TAMIL VOWEL SIGN AA..TAMIL VOWEL SIGN I
-0BC0          ; CM # Mn       TAMIL VOWEL SIGN II
-0BC1..0BC2    ; CM # Mc   [2] TAMIL VOWEL SIGN U..TAMIL VOWEL SIGN UU
-0BC6..0BC8    ; CM # Mc   [3] TAMIL VOWEL SIGN E..TAMIL VOWEL SIGN AI
-0BCA..0BCC    ; CM # Mc   [3] TAMIL VOWEL SIGN O..TAMIL VOWEL SIGN AU
-0BCD          ; CM # Mn       TAMIL SIGN VIRAMA
-0BD7          ; CM # Mc       TAMIL AU LENGTH MARK
-0C01..0C03    ; CM # Mc   [3] TELUGU SIGN CANDRABINDU..TELUGU SIGN VISARGA
-0C3E..0C40    ; CM # Mn   [3] TELUGU VOWEL SIGN AA..TELUGU VOWEL SIGN II
-0C41..0C44    ; CM # Mc   [4] TELUGU VOWEL SIGN U..TELUGU VOWEL SIGN VOCALIC RR
-0C46..0C48    ; CM # Mn   [3] TELUGU VOWEL SIGN E..TELUGU VOWEL SIGN AI
-0C4A..0C4D    ; CM # Mn   [4] TELUGU VOWEL SIGN O..TELUGU SIGN VIRAMA
-0C55..0C56    ; CM # Mn   [2] TELUGU LENGTH MARK..TELUGU AI LENGTH MARK
-0C82..0C83    ; CM # Mc   [2] KANNADA SIGN ANUSVARA..KANNADA SIGN VISARGA
-0CBE          ; CM # Mc       KANNADA VOWEL SIGN AA
-0CBF          ; CM # Mn       KANNADA VOWEL SIGN I
-0CC0..0CC4    ; CM # Mc   [5] KANNADA VOWEL SIGN II..KANNADA VOWEL SIGN VOCALIC RR
-0CC6          ; CM # Mn       KANNADA VOWEL SIGN E
-0CC7..0CC8    ; CM # Mc   [2] KANNADA VOWEL SIGN EE..KANNADA VOWEL SIGN AI
-0CCA..0CCB    ; CM # Mc   [2] KANNADA VOWEL SIGN O..KANNADA VOWEL SIGN OO
-0CCC..0CCD    ; CM # Mn   [2] KANNADA VOWEL SIGN AU..KANNADA SIGN VIRAMA
-0CD5..0CD6    ; CM # Mc   [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK
-0D02..0D03    ; CM # Mc   [2] MALAYALAM SIGN ANUSVARA..MALAYALAM SIGN VISARGA
-0D3E..0D40    ; CM # Mc   [3] MALAYALAM VOWEL SIGN AA..MALAYALAM VOWEL SIGN II
-0D41..0D43    ; CM # Mn   [3] MALAYALAM VOWEL SIGN U..MALAYALAM VOWEL SIGN VOCALIC R
-0D46..0D48    ; CM # Mc   [3] MALAYALAM VOWEL SIGN E..MALAYALAM VOWEL SIGN AI
-0D4A..0D4C    ; CM # Mc   [3] MALAYALAM VOWEL SIGN O..MALAYALAM VOWEL SIGN AU
-0D4D          ; CM # Mn       MALAYALAM SIGN VIRAMA
-0D57          ; CM # Mc       MALAYALAM AU LENGTH MARK
-0D82..0D83    ; CM # Mc   [2] SINHALA SIGN ANUSVARAYA..SINHALA SIGN VISARGAYA
-0DCA          ; CM # Mn       SINHALA SIGN AL-LAKUNA
-0DCF..0DD1    ; CM # Mc   [3] SINHALA VOWEL SIGN AELA-PILLA..SINHALA VOWEL SIGN DIGA AEDA-PILLA
-0DD2..0DD4    ; CM # Mn   [3] SINHALA VOWEL SIGN KETTI IS-PILLA..SINHALA VOWEL SIGN KETTI PAA-PILLA
-0DD6          ; CM # Mn       SINHALA VOWEL SIGN DIGA PAA-PILLA
-0DD8..0DDF    ; CM # Mc   [8] SINHALA VOWEL SIGN GAETTA-PILLA..SINHALA VOWEL SIGN GAYANUKITTA
-0DF2..0DF3    ; CM # Mc   [2] SINHALA VOWEL SIGN DIGA GAETTA-PILLA..SINHALA VOWEL SIGN DIGA GAYANUKITTA
-0E31          ; CM # Mn       THAI CHARACTER MAI HAN-AKAT
-0E34..0E3A    ; CM # Mn   [7] THAI CHARACTER SARA I..THAI CHARACTER PHINTHU
-0E47..0E4E    ; CM # Mn   [8] THAI CHARACTER MAITAIKHU..THAI CHARACTER YAMAKKAN
-0EB1          ; CM # Mn       LAO VOWEL SIGN MAI KAN
-0EB4..0EB9    ; CM # Mn   [6] LAO VOWEL SIGN I..LAO VOWEL SIGN UU
-0EBB..0EBC    ; CM # Mn   [2] LAO VOWEL SIGN MAI KON..LAO SEMIVOWEL SIGN LO
-0EC8..0ECD    ; CM # Mn   [6] LAO TONE MAI EK..LAO NIGGAHITA
-0F18..0F19    ; CM # Mn   [2] TIBETAN ASTROLOGICAL SIGN -KHYUD PA..TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS
-0F35          ; CM # Mn       TIBETAN MARK NGAS BZUNG NYI ZLA
-0F37          ; CM # Mn       TIBETAN MARK NGAS BZUNG SGOR RTAGS
-0F39          ; CM # Mn       TIBETAN MARK TSA -PHRU
-0F3E..0F3F    ; CM # Mc   [2] TIBETAN SIGN YAR TSHES..TIBETAN SIGN MAR TSHES
-0F71..0F7E    ; CM # Mn  [14] TIBETAN VOWEL SIGN AA..TIBETAN SIGN RJES SU NGA RO
-0F7F          ; CM # Mc       TIBETAN SIGN RNAM BCAD
-0F80..0F84    ; CM # Mn   [5] TIBETAN VOWEL SIGN REVERSED I..TIBETAN MARK HALANTA
-0F86..0F87    ; CM # Mn   [2] TIBETAN SIGN LCI RTAGS..TIBETAN SIGN YANG RTAGS
-0F90..0F97    ; CM # Mn   [8] TIBETAN SUBJOINED LETTER KA..TIBETAN SUBJOINED LETTER JA
-0F99..0FBC    ; CM # Mn  [36] TIBETAN SUBJOINED LETTER NYA..TIBETAN SUBJOINED LETTER FIXED-FORM RA
-0FC6          ; CM # Mn       TIBETAN SYMBOL PADMA GDAN
-102C          ; CM # Mc       MYANMAR VOWEL SIGN AA
-102D..1030    ; CM # Mn   [4] MYANMAR VOWEL SIGN I..MYANMAR VOWEL SIGN UU
-1031          ; CM # Mc       MYANMAR VOWEL SIGN E
-1032          ; CM # Mn       MYANMAR VOWEL SIGN AI
-1036..1037    ; CM # Mn   [2] MYANMAR SIGN ANUSVARA..MYANMAR SIGN DOT BELOW
-1038          ; CM # Mc       MYANMAR SIGN VISARGA
-1039          ; CM # Mn       MYANMAR SIGN VIRAMA
-1056..1057    ; CM # Mc   [2] MYANMAR VOWEL SIGN VOCALIC R..MYANMAR VOWEL SIGN VOCALIC RR
-1058..1059    ; CM # Mn   [2] MYANMAR VOWEL SIGN VOCALIC L..MYANMAR VOWEL SIGN VOCALIC LL
-1160..11A2    ; CM # Lo  [67] HANGUL JUNGSEONG FILLER..HANGUL JUNGSEONG SSANGARAEA
-11A8..11F9    ; CM # Lo  [82] HANGUL JONGSEONG KIYEOK..HANGUL JONGSEONG YEORINHIEUH
-17B4..17B6    ; CM # Mc   [3] KHMER VOWEL INHERENT AQ..KHMER VOWEL SIGN AA
-17B7..17BD    ; CM # Mn   [7] KHMER VOWEL SIGN I..KHMER VOWEL SIGN UA
-17BE..17C5    ; CM # Mc   [8] KHMER VOWEL SIGN OE..KHMER VOWEL SIGN AU
-17C6          ; CM # Mn       KHMER SIGN NIKAHIT
-17C7..17C8    ; CM # Mc   [2] KHMER SIGN REAHMUK..KHMER SIGN YUUKALEAPINTU
-17C9..17D3    ; CM # Mn  [11] KHMER SIGN MUUSIKATOAN..KHMER SIGN BATHAMASAT
-180B..180E    ; CM # Cf   [4] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN VOWEL SEPARATOR
-18A9          ; CM # Mn       MONGOLIAN LETTER ALI GALI DAGALGA
-200C..200F    ; CM # Cf   [4] ZERO WIDTH NON-JOINER..RIGHT-TO-LEFT MARK
-202A..202E    ; CM # Cf   [5] LEFT-TO-RIGHT EMBEDDING..RIGHT-TO-LEFT OVERRIDE
-206A..206F    ; CM # Cf   [6] INHIBIT SYMMETRIC SWAPPING..NOMINAL DIGIT SHAPES
-20D0..20DC    ; CM # Mn  [13] COMBINING LEFT HARPOON ABOVE..COMBINING FOUR DOTS ABOVE
-20DD..20E0    ; CM # Me   [4] COMBINING ENCLOSING CIRCLE..COMBINING ENCLOSING CIRCLE BACKSLASH
-20E1          ; CM # Mn       COMBINING LEFT RIGHT ARROW ABOVE
-20E2..20E3    ; CM # Me   [2] COMBINING ENCLOSING SCREEN..COMBINING ENCLOSING KEYCAP
-302A..302F    ; CM # Mn   [6] IDEOGRAPHIC LEVEL TONE MARK..HANGUL DOUBLE DOT TONE MARK
-3099..309A    ; CM # Mn   [2] COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK..COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
-FB1E          ; CM # Mn       HEBREW POINT JUDEO-SPANISH VARIKA
-FE20..FE23    ; CM # Mn   [4] COMBINING LIGATURE LEFT HALF..COMBINING DOUBLE TILDE RIGHT HALF
-FFF9..FFFB    ; CM # Cf   [3] INTERLINEAR ANNOTATION ANCHOR..INTERLINEAR ANNOTATION TERMINATOR
-1D165..1D166  ; CM # Mc   [2] MUSICAL SYMBOL COMBINING STEM..MUSICAL SYMBOL COMBINING SPRECHGESANG STEM
-1D167..1D169  ; CM # Mn   [3] MUSICAL SYMBOL COMBINING TREMOLO-1..MUSICAL SYMBOL COMBINING TREMOLO-3
-1D16D..1D172  ; CM # Mc   [6] MUSICAL SYMBOL COMBINING AUGMENTATION DOT..MUSICAL SYMBOL COMBINING FLAG-5
-1D173..1D17A  ; CM # Cf   [8] MUSICAL SYMBOL BEGIN BEAM..MUSICAL SYMBOL END PHRASE
-1D17B..1D182  ; CM # Mn   [8] MUSICAL SYMBOL COMBINING ACCENT..MUSICAL SYMBOL COMBINING LOURE
-1D185..1D18B  ; CM # Mn   [7] MUSICAL SYMBOL COMBINING DOIT..MUSICAL SYMBOL COMBINING TRIPLE TONGUE
-1D1AA..1D1AD  ; CM # Mn   [4] MUSICAL SYMBOL COMBINING DOWN BOW..MUSICAL SYMBOL COMBINING SNAP PIZZICATO
-E0001         ; CM # Cf       LANGUAGE TAG
-E0020..E007F  ; CM # Cf  [96] TAG SPACE..CANCEL TAG
-
-# Total code points: 943
-
-# ================================================
-
-00B4          ; BB # Sk       ACUTE ACCENT
-02C8          ; BB # Sk       MODIFIER LETTER VERTICAL LINE
-02CC          ; BB # Sk       MODIFIER LETTER LOW VERTICAL LINE
-1806          ; BB # Pd       MONGOLIAN TODO SOFT HYPHEN
-
-# Total code points: 4
-
-# ================================================
-
-0009          ; BA # Cc       <control>
-007C          ; BA # Sm       VERTICAL LINE
-00AD          ; BA # Pd       SOFT HYPHEN
-058A          ; BA # Pd       ARMENIAN HYPHEN
-0F0B          ; BA # Po       TIBETAN MARK INTERSYLLABIC TSHEG
-1361          ; BA # Po       ETHIOPIC WORDSPACE
-1680          ; BA # Zs       OGHAM SPACE MARK
-17D5          ; BA # Po       KHMER SIGN BARIYOOSAN
-2000..2006    ; BA # Zs   [7] EN QUAD..SIX-PER-EM SPACE
-2008..200A    ; BA # Zs   [3] PUNCTUATION SPACE..HAIR SPACE
-2010          ; BA # Pd       HYPHEN
-2012..2013    ; BA # Pd   [2] FIGURE DASH..EN DASH
-2027          ; BA # Po       HYPHENATION POINT
-
-# Total code points: 22
-
-# ================================================
-
-0020          ; SP # Zs       SPACE
-
-# Total code points: 1
-
-# ================================================
-
-000C          ; BK # Cc       <control>
-2028          ; BK # Zl       LINE SEPARATOR
-2029          ; BK # Zp       PARAGRAPH SEPARATOR
-
-# Total code points: 3
-
-# ================================================
-
-000D          ; CR # Cc       <control>
-
-# Total code points: 1
-
-# ================================================
-
-000A          ; LF # Cc       <control>
-
-# Total code points: 1
-
-# ================================================
-
-FFFC          ; CB # So       OBJECT REPLACEMENT CHARACTER
-
-# Total code points: 1
-
-# ================================================
-
-0E01..0E30    ; SA # Lo  [48] THAI CHARACTER KO KAI..THAI CHARACTER SARA A
-0E32..0E33    ; SA # Lo   [2] THAI CHARACTER SARA AA..THAI CHARACTER SARA AM
-0E40..0E45    ; SA # Lo   [6] THAI CHARACTER SARA E..THAI CHARACTER LAKKHANGYAO
-0E46          ; SA # Lm       THAI CHARACTER MAIYAMOK
-0E81..0E82    ; SA # Lo   [2] LAO LETTER KO..LAO LETTER KHO SUNG
-0E84          ; SA # Lo       LAO LETTER KHO TAM
-0E87..0E88    ; SA # Lo   [2] LAO LETTER NGO..LAO LETTER CO
-0E8A          ; SA # Lo       LAO LETTER SO TAM
-0E8D          ; SA # Lo       LAO LETTER NYO
-0E94..0E97    ; SA # Lo   [4] LAO LETTER DO..LAO LETTER THO TAM
-0E99..0E9F    ; SA # Lo   [7] LAO LETTER NO..LAO LETTER FO SUNG
-0EA1..0EA3    ; SA # Lo   [3] LAO LETTER MO..LAO LETTER LO LING
-0EA5          ; SA # Lo       LAO LETTER LO LOOT
-0EA7          ; SA # Lo       LAO LETTER WO
-0EAA..0EAB    ; SA # Lo   [2] LAO LETTER SO SUNG..LAO LETTER HO SUNG
-0EAD..0EB0    ; SA # Lo   [4] LAO LETTER O..LAO VOWEL SIGN A
-0EB2..0EB3    ; SA # Lo   [2] LAO VOWEL SIGN AA..LAO VOWEL SIGN AM
-0EBD          ; SA # Lo       LAO SEMIVOWEL SIGN NYO
-0EC0..0EC4    ; SA # Lo   [5] LAO VOWEL SIGN E..LAO VOWEL SIGN AI
-0EC6          ; SA # Lm       LAO KO LA
-0EDC..0EDD    ; SA # Lo   [2] LAO HO NO..LAO HO MO
-1000..1021    ; SA # Lo  [34] MYANMAR LETTER KA..MYANMAR LETTER A
-1023..1027    ; SA # Lo   [5] MYANMAR LETTER I..MYANMAR LETTER E
-1029..102A    ; SA # Lo   [2] MYANMAR LETTER O..MYANMAR LETTER AU
-1050..1055    ; SA # Lo   [6] MYANMAR LETTER SHA..MYANMAR LETTER VOCALIC LL
-1780..17B3    ; SA # Lo  [52] KHMER LETTER KA..KHMER INDEPENDENT VOWEL QAU
-
-# Total code points: 196
-
-# ================================================
-
-00A1          ; AI # Po       INVERTED EXCLAMATION MARK
-00A7          ; AI # So       SECTION SIGN
-00A8          ; AI # Sk       DIAERESIS
-00AA          ; AI # L&       FEMININE ORDINAL INDICATOR
-00B2..00B3    ; AI # No   [2] SUPERSCRIPT TWO..SUPERSCRIPT THREE
-00B6          ; AI # So       PILCROW SIGN
-00B7          ; AI # Po       MIDDLE DOT
-00B8          ; AI # Sk       CEDILLA
-00B9          ; AI # No       SUPERSCRIPT ONE
-00BA          ; AI # L&       MASCULINE ORDINAL INDICATOR
-00BC..00BE    ; AI # No   [3] VULGAR FRACTION ONE QUARTER..VULGAR FRACTION THREE QUARTERS
-00BF          ; AI # Po       INVERTED QUESTION MARK
-00C6          ; AI # L&       LATIN CAPITAL LETTER AE
-00D0          ; AI # L&       LATIN CAPITAL LETTER ETH
-00D7          ; AI # Sm       MULTIPLICATION SIGN
-00D8          ; AI # L&       LATIN CAPITAL LETTER O WITH STROKE
-00DE..00E1    ; AI # L&   [4] LATIN CAPITAL LETTER THORN..LATIN SMALL LETTER A WITH ACUTE
-00E6          ; AI # L&       LATIN SMALL LETTER AE
-00E8..00EA    ; AI # L&   [3] LATIN SMALL LETTER E WITH GRAVE..LATIN SMALL LETTER E WITH CIRCUMFLEX
-00EC..00ED    ; AI # L&   [2] LATIN SMALL LETTER I WITH GRAVE..LATIN SMALL LETTER I WITH ACUTE
-00F0          ; AI # L&       LATIN SMALL LETTER ETH
-00F2..00F3    ; AI # L&   [2] LATIN SMALL LETTER O WITH GRAVE..LATIN SMALL LETTER O WITH ACUTE
-00F7          ; AI # Sm       DIVISION SIGN
-00F8..00FA    ; AI # L&   [3] LATIN SMALL LETTER O WITH STROKE..LATIN SMALL LETTER U WITH ACUTE
-00FC          ; AI # L&       LATIN SMALL LETTER U WITH DIAERESIS
-00FE          ; AI # L&       LATIN SMALL LETTER THORN
-0101          ; AI # L&       LATIN SMALL LETTER A WITH MACRON
-0111          ; AI # L&       LATIN SMALL LETTER D WITH STROKE
-0113          ; AI # L&       LATIN SMALL LETTER E WITH MACRON
-011B          ; AI # L&       LATIN SMALL LETTER E WITH CARON
-0126..0127    ; AI # L&   [2] LATIN CAPITAL LETTER H WITH STROKE..LATIN SMALL LETTER H WITH STROKE
-012B          ; AI # L&       LATIN SMALL LETTER I WITH MACRON
-0131..0133    ; AI # L&   [3] LATIN SMALL LETTER DOTLESS I..LATIN SMALL LIGATURE IJ
-0138          ; AI # L&       LATIN SMALL LETTER KRA
-013F..0142    ; AI # L&   [4] LATIN CAPITAL LETTER L WITH MIDDLE DOT..LATIN SMALL LETTER L WITH STROKE
-0144          ; AI # L&       LATIN SMALL LETTER N WITH ACUTE
-0148..014A    ; AI # L&   [3] LATIN SMALL LETTER N WITH CARON..LATIN CAPITAL LETTER ENG
-014D          ; AI # L&       LATIN SMALL LETTER O WITH MACRON
-0152..0153    ; AI # L&   [2] LATIN CAPITAL LIGATURE OE..LATIN SMALL LIGATURE OE
-0166..0167    ; AI # L&   [2] LATIN CAPITAL LETTER T WITH STROKE..LATIN SMALL LETTER T WITH STROKE
-016B          ; AI # L&       LATIN SMALL LETTER U WITH MACRON
-01CE          ; AI # L&       LATIN SMALL LETTER A WITH CARON
-01D0          ; AI # L&       LATIN SMALL LETTER I WITH CARON
-01D2          ; AI # L&       LATIN SMALL LETTER O WITH CARON
-01D4          ; AI # L&       LATIN SMALL LETTER U WITH CARON
-01D6          ; AI # L&       LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
-01D8          ; AI # L&       LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
-01DA          ; AI # L&       LATIN SMALL LETTER U WITH DIAERESIS AND CARON
-01DC          ; AI # L&       LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
-0251          ; AI # L&       LATIN SMALL LETTER ALPHA
-0261          ; AI # L&       LATIN SMALL LETTER SCRIPT G
-02C7          ; AI # Sk       CARON
-02C9..02CB    ; AI # Sk   [3] MODIFIER LETTER MACRON..MODIFIER LETTER GRAVE ACCENT
-02CD          ; AI # Sk       MODIFIER LETTER LOW MACRON
-02D0          ; AI # Lm       MODIFIER LETTER TRIANGULAR COLON
-02D8..02DB    ; AI # Sk   [4] BREVE..OGONEK
-02DD          ; AI # Sk       DOUBLE ACUTE ACCENT
-0391..03A1    ; AI # L&  [17] GREEK CAPITAL LETTER ALPHA..GREEK CAPITAL LETTER RHO
-03A3..03A9    ; AI # L&   [7] GREEK CAPITAL LETTER SIGMA..GREEK CAPITAL LETTER OMEGA
-03B1..03C1    ; AI # L&  [17] GREEK SMALL LETTER ALPHA..GREEK SMALL LETTER RHO
-03C3..03C9    ; AI # L&   [7] GREEK SMALL LETTER SIGMA..GREEK SMALL LETTER OMEGA
-0401          ; AI # L&       CYRILLIC CAPITAL LETTER IO
-0410..044F    ; AI # L&  [64] CYRILLIC CAPITAL LETTER A..CYRILLIC SMALL LETTER YA
-0451          ; AI # L&       CYRILLIC SMALL LETTER IO
-2015          ; AI # Pd       HORIZONTAL BAR
-2016          ; AI # Po       DOUBLE VERTICAL LINE
-2020..2021    ; AI # Po   [2] DAGGER..DOUBLE DAGGER
-203B          ; AI # Po       REFERENCE MARK
-2074          ; AI # No       SUPERSCRIPT FOUR
-207F          ; AI # L&       SUPERSCRIPT LATIN SMALL LETTER N
-2081..2084    ; AI # No   [4] SUBSCRIPT ONE..SUBSCRIPT FOUR
-2105          ; AI # So       CARE OF
-2113          ; AI # L&       SCRIPT SMALL L
-2121..2122    ; AI # So   [2] TELEPHONE SIGN..TRADE MARK SIGN
-212B          ; AI # L&       ANGSTROM SIGN
-2154..2155    ; AI # No   [2] VULGAR FRACTION TWO THIRDS..VULGAR FRACTION ONE FIFTH
-215B          ; AI # No       VULGAR FRACTION ONE EIGHTH
-215E          ; AI # No       VULGAR FRACTION SEVEN EIGHTHS
-2160..216B    ; AI # Nl  [12] ROMAN NUMERAL ONE..ROMAN NUMERAL TWELVE
-2170..2179    ; AI # Nl  [10] SMALL ROMAN NUMERAL ONE..SMALL ROMAN NUMERAL TEN
-2190..2194    ; AI # Sm   [5] LEFTWARDS ARROW..LEFT RIGHT ARROW
-2195..2199    ; AI # So   [5] UP DOWN ARROW..SOUTH WEST ARROW
-21D2          ; AI # Sm       RIGHTWARDS DOUBLE ARROW
-21D4          ; AI # Sm       LEFT RIGHT DOUBLE ARROW
-2200          ; AI # Sm       FOR ALL
-2202..2203    ; AI # Sm   [2] PARTIAL DIFFERENTIAL..THERE EXISTS
-2207..2208    ; AI # Sm   [2] NABLA..ELEMENT OF
-220B          ; AI # Sm       CONTAINS AS MEMBER
-220F          ; AI # Sm       N-ARY PRODUCT
-2211          ; AI # Sm       N-ARY SUMMATION
-2215          ; AI # Sm       DIVISION SLASH
-221A          ; AI # Sm       SQUARE ROOT
-221D..2220    ; AI # Sm   [4] PROPORTIONAL TO..ANGLE
-2223          ; AI # Sm       DIVIDES
-2225          ; AI # Sm       PARALLEL TO
-2227..222C    ; AI # Sm   [6] LOGICAL AND..DOUBLE INTEGRAL
-222E          ; AI # Sm       CONTOUR INTEGRAL
-2234..2237    ; AI # Sm   [4] THEREFORE..PROPORTION
-223C..223D    ; AI # Sm   [2] TILDE OPERATOR..REVERSED TILDE
-2248          ; AI # Sm       ALMOST EQUAL TO
-224C          ; AI # Sm       ALL EQUAL TO
-2252          ; AI # Sm       APPROXIMATELY EQUAL TO OR THE IMAGE OF
-2260..2261    ; AI # Sm   [2] NOT EQUAL TO..IDENTICAL TO
-2264..2267    ; AI # Sm   [4] LESS-THAN OR EQUAL TO..GREATER-THAN OVER EQUAL TO
-226A..226B    ; AI # Sm   [2] MUCH LESS-THAN..MUCH GREATER-THAN
-226E..226F    ; AI # Sm   [2] NOT LESS-THAN..NOT GREATER-THAN
-2282..2283    ; AI # Sm   [2] SUBSET OF..SUPERSET OF
-2286..2287    ; AI # Sm   [2] SUBSET OF OR EQUAL TO..SUPERSET OF OR EQUAL TO
-2295          ; AI # Sm       CIRCLED PLUS
-2299          ; AI # Sm       CIRCLED DOT OPERATOR
-22A5          ; AI # Sm       UP TACK
-22BF          ; AI # Sm       RIGHT TRIANGLE
-2312          ; AI # So       ARC
-2460..249B    ; AI # No  [60] CIRCLED DIGIT ONE..NUMBER TWENTY FULL STOP
-249C..24BF    ; AI # So  [36] PARENTHESIZED LATIN SMALL LETTER A..CIRCLED LATIN CAPITAL LETTER J
-24D0..24E9    ; AI # So  [26] CIRCLED LATIN SMALL LETTER A..CIRCLED LATIN SMALL LETTER Z
-2500..254B    ; AI # So  [76] BOX DRAWINGS LIGHT HORIZONTAL..BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL
-2550..2574    ; AI # So  [37] BOX DRAWINGS DOUBLE HORIZONTAL..BOX DRAWINGS LIGHT LEFT
-2580..258F    ; AI # So  [16] UPPER HALF BLOCK..LEFT ONE EIGHTH BLOCK
-2592..2595    ; AI # So   [4] MEDIUM SHADE..RIGHT ONE EIGHTH BLOCK
-25A0..25A1    ; AI # So   [2] BLACK SQUARE..WHITE SQUARE
-25A3..25A9    ; AI # So   [7] WHITE SQUARE CONTAINING BLACK SMALL SQUARE..SQUARE WITH DIAGONAL CROSSHATCH FILL
-25B2..25B3    ; AI # So   [2] BLACK UP-POINTING TRIANGLE..WHITE UP-POINTING TRIANGLE
-25B6          ; AI # So       BLACK RIGHT-POINTING TRIANGLE
-25B7          ; AI # Sm       WHITE RIGHT-POINTING TRIANGLE
-25BC..25BD    ; AI # So   [2] BLACK DOWN-POINTING TRIANGLE..WHITE DOWN-POINTING TRIANGLE
-25C0          ; AI # So       BLACK LEFT-POINTING TRIANGLE
-25C1          ; AI # Sm       WHITE LEFT-POINTING TRIANGLE
-25C6..25C8    ; AI # So   [3] BLACK DIAMOND..WHITE DIAMOND CONTAINING BLACK SMALL DIAMOND
-25CB          ; AI # So       WHITE CIRCLE
-25CE..25D1    ; AI # So   [4] BULLSEYE..CIRCLE WITH RIGHT HALF BLACK
-25E2..25E5    ; AI # So   [4] BLACK LOWER RIGHT TRIANGLE..BLACK UPPER RIGHT TRIANGLE
-25EF          ; AI # So       LARGE CIRCLE
-2605..2606    ; AI # So   [2] BLACK STAR..WHITE STAR
-2609          ; AI # So       SUN
-260E..260F    ; AI # So   [2] BLACK TELEPHONE..WHITE TELEPHONE
-261C          ; AI # So       WHITE LEFT POINTING INDEX
-261E          ; AI # So       WHITE RIGHT POINTING INDEX
-2640          ; AI # So       FEMALE SIGN
-2642          ; AI # So       MALE SIGN
-2660..2661    ; AI # So   [2] BLACK SPADE SUIT..WHITE HEART SUIT
-2663..2665    ; AI # So   [3] BLACK CLUB SUIT..BLACK HEART SUIT
-2667..266A    ; AI # So   [4] WHITE CLUB SUIT..EIGHTH NOTE
-266C..266D    ; AI # So   [2] BEAMED SIXTEENTH NOTES..MUSIC FLAT SIGN
-266F          ; AI # Sm       MUSIC SHARP SIGN
-FFFD          ; AI # So       REPLACEMENT CHARACTER
-
-# Total code points: 610
-
-# ================================================
-
-2014          ; B2 # Pd       EM DASH
-
-# Total code points: 1
-
-# ================================================
-
-D800..DFFF    ; SG # Cs [2048] 
-
-# Total code points: 2048
-
-# ================================================
-
-200B          ; ZW # Zs       ZERO WIDTH SPACE
-
-# Total code points: 1
-
-
-
-\1a
\ No newline at end of file
diff --git a/desktop/cups-128.png b/desktop/cups-128.png
new file mode 100644 (file)
index 0000000..cffc239
Binary files /dev/null and b/desktop/cups-128.png differ
diff --git a/desktop/cups-16.png b/desktop/cups-16.png
new file mode 100644 (file)
index 0000000..a75e8ae
Binary files /dev/null and b/desktop/cups-16.png differ
diff --git a/desktop/cups-32.png b/desktop/cups-32.png
new file mode 100644 (file)
index 0000000..30513f3
Binary files /dev/null and b/desktop/cups-32.png differ
diff --git a/desktop/cups-64.png b/desktop/cups-64.png
new file mode 100644 (file)
index 0000000..b4f764a
Binary files /dev/null and b/desktop/cups-64.png differ
diff --git a/desktop/cups.desktop b/desktop/cups.desktop
new file mode 100644 (file)
index 0000000..11fe266
--- /dev/null
@@ -0,0 +1,19 @@
+[Desktop Entry]
+Categories=Application;System;X-Red-Hat-Base;
+Comment=CUPS Web Interface
+Comment[en_US]=CUPS Web Interface
+Encoding=UTF-8
+Exec=htmlview http://localhost:631/
+GenericName=
+GenericName[en_US]=
+Icon=cups
+MimeType=
+Name=Manage Printing
+Path=
+StartupNotify=false
+Terminal=false
+TerminalOptions=
+Type=Application
+X-DCOP-ServiceType=
+X-KDE-SubstituteUID=false
+X-KDE-Username=
index de9b547824939f0dbe5541acfd1125a0678e7676..fd2c02f90e0ee8b463634e9c3120e5ed4189e237 100644 (file)
@@ -1,5 +1,5 @@
 #
-# "$Id: Makefile 5229 2006-03-05 16:48:12Z mike $"
+# "$Id: Makefile 5308 2006-03-18 13:18:18Z mike $"
 #
 #   Documentation makefile for the Common UNIX Printing System (CUPS).
 #
@@ -28,7 +28,6 @@ include ../Makedefs
 # Document files...
 #
 
-LANGUAGES      =       ja
 WEBPAGES       =       \
                        cups.css \
                        cups-printable.css \
index 32af937a3b6679a465a4b6a2b317900b89e6094a..08457c05b0ff394fba090044b2024eb15fc221ed 100644 (file)
@@ -76,6 +76,20 @@ DIV.table TABLE TH {
   border-bottom: solid thin #999999;
 }
 
+DIV.figure TABLE {
+  margin-left: auto;
+  margin-right: auto;
+}
+
+DIV.figure CAPTION {
+  caption-side: bottom;
+  font-size: 120%;
+  font-style: italic;
+  font-weight: bold;
+  margin-left: auto;
+  margin-right: auto;
+}
+
 TH.label {
   padding-top: 5pt;
   text-align: right;
index b2c8cf02858e6299b889980833d13dbe6a5115b8..0e37f456f63eb548b9466ba183e7fd8d507de7c7 100644 (file)
@@ -139,6 +139,20 @@ DIV.table TABLE TH {
   border-bottom: solid thin #999966;
 }
 
+DIV.figure TABLE {
+  margin-left: auto;
+  margin-right: auto;
+}
+
+DIV.figure CAPTION {
+  caption-side: bottom;
+  font-size: 120%;
+  font-style: italic;
+  font-weight: bold;
+  margin-left: auto;
+  margin-right: auto;
+}
+
 TH.label {
   padding-top: 5pt;
   text-align: right;
diff --git a/doc/es/images/button-accept-jobs.gif b/doc/es/images/button-accept-jobs.gif
new file mode 100644 (file)
index 0000000..f0103e3
Binary files /dev/null and b/doc/es/images/button-accept-jobs.gif differ
diff --git a/doc/es/images/button-add-class.gif b/doc/es/images/button-add-class.gif
new file mode 100644 (file)
index 0000000..0830778
Binary files /dev/null and b/doc/es/images/button-add-class.gif differ
diff --git a/doc/es/images/button-add-printer.gif b/doc/es/images/button-add-printer.gif
new file mode 100644 (file)
index 0000000..4814172
Binary files /dev/null and b/doc/es/images/button-add-printer.gif differ
diff --git a/doc/es/images/button-add-this-printer.gif b/doc/es/images/button-add-this-printer.gif
new file mode 100644 (file)
index 0000000..6d9de0c
Binary files /dev/null and b/doc/es/images/button-add-this-printer.gif differ
diff --git a/doc/es/images/button-cancel-all-jobs.gif b/doc/es/images/button-cancel-all-jobs.gif
new file mode 100644 (file)
index 0000000..2f3ed26
Binary files /dev/null and b/doc/es/images/button-cancel-all-jobs.gif differ
diff --git a/doc/es/images/button-cancel-job.gif b/doc/es/images/button-cancel-job.gif
new file mode 100644 (file)
index 0000000..0e778c3
Binary files /dev/null and b/doc/es/images/button-cancel-job.gif differ
diff --git a/doc/es/images/button-change-settings.gif b/doc/es/images/button-change-settings.gif
new file mode 100644 (file)
index 0000000..05125ea
Binary files /dev/null and b/doc/es/images/button-change-settings.gif differ
diff --git a/doc/es/images/button-clean-print-heads.gif b/doc/es/images/button-clean-print-heads.gif
new file mode 100644 (file)
index 0000000..3744d52
Binary files /dev/null and b/doc/es/images/button-clean-print-heads.gif differ
diff --git a/doc/es/images/button-clear.gif b/doc/es/images/button-clear.gif
new file mode 100644 (file)
index 0000000..b8fdadd
Binary files /dev/null and b/doc/es/images/button-clear.gif differ
diff --git a/doc/es/images/button-continue.gif b/doc/es/images/button-continue.gif
new file mode 100644 (file)
index 0000000..4d77bc4
Binary files /dev/null and b/doc/es/images/button-continue.gif differ
diff --git a/doc/es/images/button-delete-class.gif b/doc/es/images/button-delete-class.gif
new file mode 100644 (file)
index 0000000..40492e7
Binary files /dev/null and b/doc/es/images/button-delete-class.gif differ
diff --git a/doc/es/images/button-delete-printer.gif b/doc/es/images/button-delete-printer.gif
new file mode 100644 (file)
index 0000000..620515e
Binary files /dev/null and b/doc/es/images/button-delete-printer.gif differ
diff --git a/doc/es/images/button-edit-configuration-file.gif b/doc/es/images/button-edit-configuration-file.gif
new file mode 100644 (file)
index 0000000..6d4ffd0
Binary files /dev/null and b/doc/es/images/button-edit-configuration-file.gif differ
diff --git a/doc/es/images/button-export-samba.gif b/doc/es/images/button-export-samba.gif
new file mode 100644 (file)
index 0000000..fb487da
Binary files /dev/null and b/doc/es/images/button-export-samba.gif differ
diff --git a/doc/es/images/button-help.gif b/doc/es/images/button-help.gif
new file mode 100644 (file)
index 0000000..4e6972f
Binary files /dev/null and b/doc/es/images/button-help.gif differ
diff --git a/doc/es/images/button-hold-job.gif b/doc/es/images/button-hold-job.gif
new file mode 100644 (file)
index 0000000..366769f
Binary files /dev/null and b/doc/es/images/button-hold-job.gif differ
diff --git a/doc/es/images/button-manage-classes.gif b/doc/es/images/button-manage-classes.gif
new file mode 100644 (file)
index 0000000..591a37b
Binary files /dev/null and b/doc/es/images/button-manage-classes.gif differ
diff --git a/doc/es/images/button-manage-jobs.gif b/doc/es/images/button-manage-jobs.gif
new file mode 100644 (file)
index 0000000..98a571f
Binary files /dev/null and b/doc/es/images/button-manage-jobs.gif differ
diff --git a/doc/es/images/button-manage-printers.gif b/doc/es/images/button-manage-printers.gif
new file mode 100644 (file)
index 0000000..c904c90
Binary files /dev/null and b/doc/es/images/button-manage-printers.gif differ
diff --git a/doc/es/images/button-manage-server.gif b/doc/es/images/button-manage-server.gif
new file mode 100644 (file)
index 0000000..f2d80ea
Binary files /dev/null and b/doc/es/images/button-manage-server.gif differ
diff --git a/doc/es/images/button-modify-class.gif b/doc/es/images/button-modify-class.gif
new file mode 100644 (file)
index 0000000..d7a7357
Binary files /dev/null and b/doc/es/images/button-modify-class.gif differ
diff --git a/doc/es/images/button-modify-printer.gif b/doc/es/images/button-modify-printer.gif
new file mode 100644 (file)
index 0000000..dbccca6
Binary files /dev/null and b/doc/es/images/button-modify-printer.gif differ
diff --git a/doc/es/images/button-move-job.gif b/doc/es/images/button-move-job.gif
new file mode 100644 (file)
index 0000000..613a063
Binary files /dev/null and b/doc/es/images/button-move-job.gif differ
diff --git a/doc/es/images/button-move-jobs.gif b/doc/es/images/button-move-jobs.gif
new file mode 100644 (file)
index 0000000..47a31d1
Binary files /dev/null and b/doc/es/images/button-move-jobs.gif differ
diff --git a/doc/es/images/button-print-self-test-page.gif b/doc/es/images/button-print-self-test-page.gif
new file mode 100644 (file)
index 0000000..ecf175d
Binary files /dev/null and b/doc/es/images/button-print-self-test-page.gif differ
diff --git a/doc/es/images/button-print-test-page.gif b/doc/es/images/button-print-test-page.gif
new file mode 100644 (file)
index 0000000..30e8fe4
Binary files /dev/null and b/doc/es/images/button-print-test-page.gif differ
diff --git a/doc/es/images/button-publish-printer.gif b/doc/es/images/button-publish-printer.gif
new file mode 100644 (file)
index 0000000..c5134f6
Binary files /dev/null and b/doc/es/images/button-publish-printer.gif differ
diff --git a/doc/es/images/button-reject-jobs.gif b/doc/es/images/button-reject-jobs.gif
new file mode 100644 (file)
index 0000000..164dcd2
Binary files /dev/null and b/doc/es/images/button-reject-jobs.gif differ
diff --git a/doc/es/images/button-release-job.gif b/doc/es/images/button-release-job.gif
new file mode 100644 (file)
index 0000000..303e020
Binary files /dev/null and b/doc/es/images/button-release-job.gif differ
diff --git a/doc/es/images/button-restart-job.gif b/doc/es/images/button-restart-job.gif
new file mode 100644 (file)
index 0000000..15e6965
Binary files /dev/null and b/doc/es/images/button-restart-job.gif differ
diff --git a/doc/es/images/button-save-changes.gif b/doc/es/images/button-save-changes.gif
new file mode 100644 (file)
index 0000000..c7f94d1
Binary files /dev/null and b/doc/es/images/button-save-changes.gif differ
diff --git a/doc/es/images/button-search.gif b/doc/es/images/button-search.gif
new file mode 100644 (file)
index 0000000..d075ef7
Binary files /dev/null and b/doc/es/images/button-search.gif differ
diff --git a/doc/es/images/button-set-allowed-users.gif b/doc/es/images/button-set-allowed-users.gif
new file mode 100644 (file)
index 0000000..01a14ac
Binary files /dev/null and b/doc/es/images/button-set-allowed-users.gif differ
diff --git a/doc/es/images/button-set-as-default.gif b/doc/es/images/button-set-as-default.gif
new file mode 100644 (file)
index 0000000..de20fde
Binary files /dev/null and b/doc/es/images/button-set-as-default.gif differ
diff --git a/doc/es/images/button-set-printer-options.gif b/doc/es/images/button-set-printer-options.gif
new file mode 100644 (file)
index 0000000..4114367
Binary files /dev/null and b/doc/es/images/button-set-printer-options.gif differ
diff --git a/doc/es/images/button-show-active.gif b/doc/es/images/button-show-active.gif
new file mode 100644 (file)
index 0000000..e99375f
Binary files /dev/null and b/doc/es/images/button-show-active.gif differ
diff --git a/doc/es/images/button-show-all.gif b/doc/es/images/button-show-all.gif
new file mode 100644 (file)
index 0000000..e16678a
Binary files /dev/null and b/doc/es/images/button-show-all.gif differ
diff --git a/doc/es/images/button-show-completed.gif b/doc/es/images/button-show-completed.gif
new file mode 100644 (file)
index 0000000..7fd39c0
Binary files /dev/null and b/doc/es/images/button-show-completed.gif differ
diff --git a/doc/es/images/button-show-next.gif b/doc/es/images/button-show-next.gif
new file mode 100644 (file)
index 0000000..02824de
Binary files /dev/null and b/doc/es/images/button-show-next.gif differ
diff --git a/doc/es/images/button-show-previous.gif b/doc/es/images/button-show-previous.gif
new file mode 100644 (file)
index 0000000..ea7195b
Binary files /dev/null and b/doc/es/images/button-show-previous.gif differ
diff --git a/doc/es/images/button-sort-ascending.gif b/doc/es/images/button-sort-ascending.gif
new file mode 100644 (file)
index 0000000..8ef3bee
Binary files /dev/null and b/doc/es/images/button-sort-ascending.gif differ
diff --git a/doc/es/images/button-sort-descending.gif b/doc/es/images/button-sort-descending.gif
new file mode 100644 (file)
index 0000000..c76fc63
Binary files /dev/null and b/doc/es/images/button-sort-descending.gif differ
diff --git a/doc/es/images/button-start-class.gif b/doc/es/images/button-start-class.gif
new file mode 100644 (file)
index 0000000..8f2c3d9
Binary files /dev/null and b/doc/es/images/button-start-class.gif differ
diff --git a/doc/es/images/button-start-printer.gif b/doc/es/images/button-start-printer.gif
new file mode 100644 (file)
index 0000000..fecaa4c
Binary files /dev/null and b/doc/es/images/button-start-printer.gif differ
diff --git a/doc/es/images/button-stop-class.gif b/doc/es/images/button-stop-class.gif
new file mode 100644 (file)
index 0000000..86bd67b
Binary files /dev/null and b/doc/es/images/button-stop-class.gif differ
diff --git a/doc/es/images/button-stop-printer.gif b/doc/es/images/button-stop-printer.gif
new file mode 100644 (file)
index 0000000..9ed74d8
Binary files /dev/null and b/doc/es/images/button-stop-printer.gif differ
diff --git a/doc/es/images/button-unpublish-printer.gif b/doc/es/images/button-unpublish-printer.gif
new file mode 100644 (file)
index 0000000..ba10421
Binary files /dev/null and b/doc/es/images/button-unpublish-printer.gif differ
diff --git a/doc/es/images/button-use-default-config.gif b/doc/es/images/button-use-default-config.gif
new file mode 100644 (file)
index 0000000..3dbe3ea
Binary files /dev/null and b/doc/es/images/button-use-default-config.gif differ
diff --git a/doc/es/images/button-view-access-log.gif b/doc/es/images/button-view-access-log.gif
new file mode 100644 (file)
index 0000000..27276e7
Binary files /dev/null and b/doc/es/images/button-view-access-log.gif differ
diff --git a/doc/es/images/button-view-error-log.gif b/doc/es/images/button-view-error-log.gif
new file mode 100644 (file)
index 0000000..93b07e5
Binary files /dev/null and b/doc/es/images/button-view-error-log.gif differ
diff --git a/doc/es/images/button-view-page-log.gif b/doc/es/images/button-view-page-log.gif
new file mode 100644 (file)
index 0000000..632eb34
Binary files /dev/null and b/doc/es/images/button-view-page-log.gif differ
diff --git a/doc/es/images/button-view-printable-version.gif b/doc/es/images/button-view-printable-version.gif
new file mode 100644 (file)
index 0000000..044563d
Binary files /dev/null and b/doc/es/images/button-view-printable-version.gif differ
diff --git a/doc/es/index.html.in b/doc/es/index.html.in
new file mode 100644 (file)
index 0000000..f80a3f1
--- /dev/null
@@ -0,0 +1,146 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
+<HTML>
+<HEAD>
+       <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8">
+       <TITLE>Inicio - CUPS @CUPS_VERSION@@CUPS_REVISION@</TITLE>
+       <LINK REL="STYLESHEET" TYPE="text/css" HREF="/cups.css">
+       <LINK REL="SHORTCUT ICON" HREF="/favicon.ico" TYPE="image/x-icon">
+</HEAD>
+<BODY>
+<TABLE WIDTH="100%" STYLE="height: 100%;" BORDER="0" CELLSPACING="0" CELLPADDING="0" SUMMARY="Common UNIX Printing System @CUPS_VERSION@">
+<TR CLASS="header">
+<TD VALIGN="TOP" WIDTH="15" ROWSPAN="2"><IMG SRC="/images/top-left.gif" WIDTH="15" HEIGHT="80" ALT=""></TD>
+<TD VALIGN="TOP" WIDTH="55" ROWSPAN="2"><IMG SRC="/images/top-middle.gif" WIDTH="55" HEIGHT="80" ALT=""></TD>
+<TD WIDTH="100%" HEIGHT="60"><H1>Common UNIX Printing System @CUPS_VERSION@@CUPS_REVISION@</H1></TD>
+<TD ALIGN="RIGHT" VALIGN="TOP" WIDTH="15" ROWSPAN="2"><IMG
+SRC="/images/top-right.gif" WIDTH="15" HEIGHT="15" ALT=""></TD>
+</TR>
+<TR CLASS="header"><TD WIDTH="100%" VALIGN="BOTTOM" NOWRAP>
+
+<A CLASS="sel" HREF="/"><IMG SRC="/images/tab-left.gif" WIDTH="4"
+HEIGHT="4" ALIGN="TOP" BORDER="0"
+ALT="">&nbsp;&nbsp;Inicio&nbsp;&nbsp;<IMG
+SRC="/images/tab-right.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP"
+BORDER="0" ALT=""></A>
+
+&nbsp;<A CLASS="unsel" HREF="/admin/"><IMG SRC="/images/tab-left.gif" WIDTH="4"
+HEIGHT="4" ALIGN="TOP" BORDER="0"
+ALT="">&nbsp;&nbsp;Administraci&oacute;n&nbsp;&nbsp;<IMG
+SRC="/images/tab-right.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP"
+BORDER="0" ALT=""></A>
+
+&nbsp;<A CLASS="unsel" HREF="/classes/"><IMG SRC="/images/tab-left.gif" WIDTH="4"
+HEIGHT="4" ALIGN="TOP" BORDER="0"
+ALT="">&nbsp;&nbsp;Clases&nbsp;&nbsp;<IMG
+SRC="/images/tab-right.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP"
+BORDER="0" ALT=""></A>
+
+&nbsp;<A CLASS="unsel" HREF="/help/"><IMG SRC="/images/tab-left.gif" WIDTH="4"
+HEIGHT="4" ALIGN="TOP" BORDER="0"
+ALT="">&nbsp;&nbsp;Documentaci&oacute;n/Ayuda&nbsp;&nbsp;<IMG
+SRC="/images/tab-right.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP"
+BORDER="0" ALT=""></A>
+
+&nbsp;<A CLASS="unsel" HREF="/jobs/"><IMG SRC="/images/tab-left.gif" WIDTH="4"
+HEIGHT="4" ALIGN="TOP" BORDER="0"
+ALT="">&nbsp;&nbsp;Trabajos&nbsp;&nbsp;<IMG
+SRC="/images/tab-right.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP"
+BORDER="0" ALT=""></A>
+
+&nbsp;<A CLASS="unsel" HREF="/printers/"><IMG SRC="/images/tab-left.gif" WIDTH="4"
+HEIGHT="4" ALIGN="TOP" BORDER="0"
+ALT="">&nbsp;&nbsp;Impresoras&nbsp;&nbsp;<IMG
+SRC="/images/tab-right.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP"
+BORDER="0" ALT=""></A>
+
+</TD></TR>
+<TR CLASS="page">
+<TD WIDTH="15">&nbsp;</TD>
+<TD COLSPAN="2" WIDTH="100%" VALIGN="TOP" CLASS="page">
+
+<H2 CLASS="title">&iexcl;Bienvenido!</H2>
+
+<P>Estas p&aacute;ginas web permiten monitorizar sus impresoras y trabajos
+as&iacute; como realizar tareas de administraci&oacute;n del sistema.
+Haga click en cualquiera de las pesta&ntilde;as de la parte superior o en los
+botones de la parte inferior para realizar la tarea correspondiente.</P>
+
+<P>
+<A HREF="/help/"><IMG SRC="/images/button-help.gif" CLASS="button" ALT="Ayuda"></A>
+<A HREF="/admin?OP=add-class"><IMG SRC="/images/button-add-class.gif" CLASS="button" ALT="A&ntilde;adir clase"></A>
+<A HREF="/admin?OP=add-printer"><IMG SRC="/images/button-add-printer.gif" CLASS="button" ALT="A&ntilde;adir impresora"></A>
+<A HREF="/classes"><IMG SRC="/images/button-manage-classes.gif" CLASS="button" ALT="Administrar clases"></A>
+<A HREF="/jobs"><IMG SRC="/images/button-manage-jobs.gif" CLASS="button" ALT="Administrar trabajos"></A>
+<A HREF="/printers"><IMG SRC="/images/button-manage-printers.gif" CLASS="button" ALT="Administrar impresoras"></A>
+<A HREF="/admin"><IMG SRC="/images/button-manage-server.gif" CLASS="button" ALT="Administrar servidor"></A>
+</P>
+
+<P><I>Si se le pide un nombre de usuario y contrase&ntilde;a,
+introduzca su nombre de usuario y su contrase&ntilde;a o el usuario y 
+contrase&ntilde;a de "root".</I></P>
+
+<H2 CLASS="title">Acerca de CUPS</H2>
+
+<P>
+<IMG SRC="/images/happy.gif" ALIGN="LEFT" WIDTH="196" HEIGHT="144"
+STYLE="padding-right: 10px;" ALT="Ordenador feliz e impresora">
+
+<A HREF="http://www.easysw.com/"><IMG SRC="/images/esp-logo.gif"
+ALIGN="RIGHT" WIDTH="110" HEIGHT="68" BORDER="0"
+STYLE="padding-left: 10px; padding-bottom: 10px;"
+ALT="Easy Software Products"></A>
+
+CUPS proporciona una capa de impresi&oacute;n portable 
+para sistemas operativos basados en
+UNIX<SUP>&reg;</SUP>. Est&aacute; desarrollado y mantenido
+por <A HREF="http://www.easysw.com">Easy Software
+Products</a> para favorecer una soluci&oacute;n de impresi&oacute;n
+estandar. CUPS es el sistema de impresi&oacute;n estandar usado en
+MacOS<SUP>&reg;</SUP> X y la mayor&iacute;a de distribuciones
+Linux<SUP>&reg;</SUP>.</P>
+
+<P>CUPS usa el <A HREF="http://www.pwg.org/ipp/"
+TARGET="_blank"> Protocolo de Impresi&oacute;n de Internet ("IPP")</A> como
+base para gestionar los trabajos y colas de impresi&oacute;n y a&ntilde;ade
+b&uacute;squeda de impresoras en red y opciones de impresi&oacute;n
+basadas en archivos de descripci&oacute;n de impresora PostScript ("PPD")
+para soporte de impresi&oacute;n del mundo real.<BR CLEAR="ALL"></P>
+
+<H2 CLASS="title">Para controladores de impresoras y asistencia</H2>
+
+<P>Visite la p&aacute;gina oficial de CUPS para controladores de impresoras
+y asistencia:</P>
+
+<PRE>
+    <A HREF="http://www.cups.org/" TARGET="_blank">www.cups.org</A>
+</PRE>
+
+<P>Soporte comercial y una versi&oacute;n mejorada de CUPS llamada <A
+HREF="http://www.easysw.com/printpro/">ESP Print Pro</A> est&aacute;n
+disponibles en:</P>
+
+<PRE>
+    <A HREF="http://www.easysw.com/" TARGET="_blank">www.easysw.com</A>
+</PRE>
+
+</TD>
+<TD WIDTH="15">&nbsp;</TD>
+</TR>
+<TR CLASS="header">
+<TD VALIGN="BOTTOM" WIDTH="15"><IMG SRC="/images/bottom-left.gif"
+WIDTH="15" HEIGHT="15" ALT=""></TD>
+<TD COLSPAN="2" WIDTH="100%" STYLE="padding: 5;">
+
+<P><SMALL>Common UNIX Printing System, CUPS, y el logo de CUPS son
+marcas registradas de <A HREF="http://www.easysw.com">Easy Software
+Products</A>. Los derechos de copia de CUPS 1997-2006 son de Easy Software Products,
+Todos los derechos reservados.</SMALL></P>
+
+</TD>
+
+<TD ALIGN="RIGHT" VALIGN="BOTTOM" WIDTH="15"><IMG SRC="/images/bottom-right.gif"
+WIDTH="15" HEIGHT="15" ALT=""></TD>
+</TR>
+</TABLE>
+</BODY>
+</HTML>
index 171856e8c90e4fad8d0f63b2d071e442a6852b18..4ae55a54f8175d76a9984cb82f9722f10a7edc60 100644 (file)
@@ -84,7 +84,7 @@ should use with CUPS:</P>
        ipp://<I>address</I>/ipp/port3</TD>
 </TR>
 <TR>
-       <TD>Intel® NetportExpress XL, PRO/100</TD>
+       <TD>Intel&reg; NetportExpress XL, PRO/100</TD>
        <TD>lpd://<I>address</I>/LPT1_PASSTHRU<BR>
        lpd://<I>address</I>/LPT2_PASSTHRU<BR>
        lpd://<I>address</I>/COM1_PASSTHRU</TD>
index 4acaea4cf5aec8615e414af04e153499d033e221..c5956ef06d63e283daac8dc05f442ab8ae3dd8d1 100644 (file)
@@ -32,7 +32,8 @@ authentication:</P>
        the server.</P>
 
        <P><B>Recommendation:</B> Enable encryption to hide the
-       username and password information.</P></LI>
+       username and password information - this is the default on
+       MacOS X and systems with GNU TLS or OpenSSL installed.</P></LI>
 
        <LI>Digest authentication uses an MD5 checksum of the
        username, password, and domain ("CUPS"), so the original
@@ -51,8 +52,8 @@ authentication:</P>
        Certificates are created on-the-fly from random data and
        stored in files under <VAR>/var/run/cups/certs</VAR>.
        They have restricted read permissions: root +
-       system-group(s) for the root certificate, and lp +
-       system-group(s) for CGI certificates.
+       system-group(s) for the root certificate, and lp + lp
+       for CGI certificates.
 
        <P>Because certificates are only available on the local
        system, the CUPS server does not accept local
index b4e798286eeec76585fede0759dddeb104b14c03..7b5d89983f6e6264692aa6ec3ccd5c7ecf13bc15 100644 (file)
@@ -1,15 +1,15 @@
 <HTML>
 <!-- SECTION: Specifications -->
 <HEAD>
-       <TITLE>CUPS Configuration Management Plan</TITLE>
+       <TITLE>CUPS Developer Guide</TITLE>
 </HEAD>
 <BODY>
 
-<P>This configuration management plan documents the guidelines
-and processes we use when developing and maintaining the Common
-UNIX Printing System ("CUPS") and related software. Our goal is
-to provide reliable and efficient software and documentation that
-addresses the needs of our users.</P>
+<P>This developer guide documents the guidelines and processes we
+use when developing and maintaining the Common UNIX Printing
+System ("CUPS") and related software. Our goal is to provide
+reliable and efficient software and documentation that addresses
+the needs of our users.</P>
 
 <H2 CLASS="title"><A NAME="COMMUNICATION">Communication</A></H2>
 
index cfec318824f4c9ed69268997fd310441dd9a0231..00b7b46dd59a9baada6bc0c03311faf48414027a 100644 (file)
 </HEAD>
 <BODY>
 
+<P><EM>This document is still being updated for CUPS
+1.2...</EM></P>
+
+<P>This design description documents the overall organization of
+the Common UNIX Printing System. The purpose is not to provide a
+line-by-line description of the CUPS source code, but rather to
+describe the overall architecture and location of key pieces so
+that developers can more easily understand the underlying
+operation of CUPS.</P>
+
+<H2 CLASS="title"><A NAME="INTRO">Introduction</A></H2>
+
 <P>Like most printing systems, CUPS is designed around a central
 print scheduling process that dispatches print jobs, processes
 administrative commands, provides printer status information to
-local and remote programs, and informs users as needed. Figure 1
-shows the basic organization of CUPS.</P>
+local and remote programs, and informs users as needed. <A
+HREF="#FIGURE1">Figure 1</A> shows the basic organization of
+CUPS.</P>
+
+<H3>Scheduler</H3>
+
+<P>The scheduler is a HTTP/1.1 and IPP/1.1 server application
+manages HTTP and IPP requests, printers, classes, jobs,
+subscriptions, and notifications on the system. HTTP is used for
+normal web browser services as well as IPP operation messages
+passed via HTTP POST requests with the
+<CODE>application/ipp</CODE> content type. The scheduler uses a
+series of helper Common Gateway Interface ("CGI") applications to
+provide dynamic web interfaces, and can be configured to run
+additional, site-specific programs or scripts for the web
+interface.</P>
+
+<P>The scheduler is designed as a traditional monolithic,
+single-threaded server process which runs external processes to
+do longer-term operations such as printing, notification,
+device/driver enumeration, and remote printer monitoring. While
+this design does limit the maximum number of simultaneous clients
+that can be supported on a typical system, it also keep resource
+utilization to a minimum and greatly simplifies the scheduler's
+logic.</P>
+
+<DIV CLASS="figure"><TABLE SUMMARY="CUPS Block Diagram">
+<CAPTION>Figure 1: <A NAME="FIGURE1">CUPS Block Diagram</A></CAPTION>
+<TR><TD ALIGN="CENTER"><IMG SRC="../images/cups-block-diagram.gif"
+WIDTH="768" HEIGHT="768" ALT="CUPS Block Diagram"/></TD></TR>
+</TABLE></DIV>
+
+<H4>Job Files</H4>
+
+<P>The scheduler stores job files in a <EM>spool directory</EM>,
+typically <VAR>/var/spool/cups</VAR>. Two types of files will be
+found in the spool directory: <EM>control files</EM> starting
+with the letter "c" ("c00001", "c99999", "c100000", etc.) and
+<EM>data files</EM> starting with the letter "d" ("d00001-001",
+"d99999-001", "d100000-001", etc.) Control files are IPP messages
+based on the original IPP Print-Job or Create-Job messages, while
+data files are the original print files that were submitted for
+printing. There is one control file for every job known to the
+system and 0 or more data files for each job. Data files are
+normally removed after a job has successfully printed, however
+this behavior can be configured.</P>
+
+<H4>Log Files</H4>
+
+<P>The scheduler keeps three kinds of log files which are
+normally stored in the <VAR>/var/log/cups</VAR> directory. The <A
+HREF="ref-access_log.html">access_log</A> file lists every HTTP
+and IPP request that is processed by the scheduler. The <A
+HREF="ref-error_log.html">error_log</A> file contains messages
+from the scheduler and its helper applications that can be used
+to track down problems. The <A
+HREF="ref-page_log.html">page_log</A> file lists every page that
+is printed, allowing for simple print accounting.</P>
+
+<P>Log files are rotated automatically by the scheduler when they
+reach the configured size limit, by default 1MB. If the limit is
+set to 0 then no rotation is performed in the scheduler - this
+mode is often used by Linux distributions so they can use the
+<B>logrotated(8)</B> program to rotate them instead.</P>
+
+<H4>Config Files</H4>
+
+<P>The scheduler uses several configuration files to store the
+server settings (<A HREF="ref-cupsd-conf.html">cupsd.conf</A>),
+available classes (<A
+HREF="ref-classes-conf.html">classes.conf</A>), available
+printers (<A HREF="ref-printers-conf.html">printers.conf</A>),
+current notification subscriptions (<A
+HREF="ref-subscriptions-conf.html">subscriptions.conf</A>), and
+supported file types and filters (<A
+HREF="man-mime.types.html">mime.types</A>, <A
+HREF="man-mime.convs.html">mime.convs</A>). In addition,
+PostScript Printer Description ("PPD") files or interface scripts
+are associated with each printer, and the scheduler has cache
+files for remote printers, PPD files, and current jobs to
+optimize the scheduler's startup speed and availability.</P>
+
+<H3>Berkeley Commands</H3>
+
+<P>CUPS provides the Berkeley <A HREF="man-lpc.html">lpc(8)</A>,
+<A HREF="man-lpq.html">lpq(1)</A>, <A
+HREF="man-lpr.html">lpr(1)</A>, and <A
+HREF="man-lprm.html">lprm(1)</A> commands. In general, they
+function identically to the original Berkeley commands with the
+following exceptions:</P>
+
+<OL>
+
+       <LI>The <B>lpc</B> command currently only supports the
+       "status" sub-command.</LI>
+
+       <LI>The <B>lpr</B> command does not support the format
+       modifier options "1" (TROFF font set 1), "2" (TROFF font
+       set 2), "3" (TROFF font set 3), "4" (TROFF font set 4),
+       "c" (CIFPLOT), "d" (DVI), "f" (FORTRAN), "g" (GNU plot),
+       "i" (indentation), "n" (Ditroff), "r" (Sun raster), "t"
+       (Troff), or "w" (width), as they do not map to the IPP
+       MIME media type based document formats.</LI>
+
+</OL>
+
+<H3>System V Commands</H3>
+
+<P>CUPS provides the System V <A
+HREF="man-accept.html">accept(8)</A>, <A
+HREF="man-cancel.html">cancel(1)</A>, <A
+HREF="man-lp.html">lp(1)</A>, <A
+HREF="man-lpadmin.html">lpadmin(8)</A>, <A
+HREF="man-lpmove.html">lpmove(8)</A>, <A
+HREF="man-lpstat.html">lpstat(1)</A>, and <A
+HREF="man-accept.html">reject(8)</A> commands. In general, they
+function identically to the original System V commands with the
+following exceptions:</P>
+
+<OL>
+
+       <LI>All commands may ask for a password; the System V
+       print spooler requires root access to perform
+       administration tasks, while CUPS allows for more flexible
+       configurations.</LI>
+
+       <LI>The <B>lpadmin</B> command does not implement the
+       Solaris "-A" (alert), "-F" (fault recovery), "-M" (mount
+       form/wheel), "-P" (paper list), "-S" (print wheels), "-T"
+       (type list), "-U" (dialer info), "-W" (wait), "-f" (form
+       name), "-l" (content-type list), "-s" (remote printer),
+       or "-t" (number of trays) options.</LI>
+
+</OL>
+
+<H3>CUPS Commands</H3>
+
+<P>CUPS provides the <A
+HREF="man-cupsaddsmb.html">cupsaddsmb(8)</A>, <A
+HREF="man-cupsenable.html">cupsdisable(8)</A>, <A
+HREF="man-cupsenable.html">cupsenable(8)</A>, <A
+HREF="man-cupstestppd.html">cupstestppd(1)</A>, <A
+HREF="man-lpinfo.html">lpinfo(8)</A>, and <A
+HREF="man-lppasswd.html">lppasswd(1)</A> commands. The
+<B>cupsdisable</B> and <B>cupsenable</B> commands correspond to
+the System V <B>disable</B> and <B>enable</B> commands but have
+been renamed to avoid conflicts with the <B>bash(1)</B> internal
+commands of the same name.</P>
+
+<H3>LPD Support</H3>
+
+<P>LPD client support is provided via the <A
+HREF="man-cups-lpd.html">cups-lpd(8)</A> program. Incoming LPD
+requests are accepted on TCP port 515 by the local
+<B>inetd(8)</B>, <B>launchd(8)</B>, or <B>xinetd(8)</B> process
+and forwarded to the <B>cups-lpd</B> program for conversion to
+the corresponding IPP request(s).</P>
+
+<P>The <B>cups-lpd</B> program conforms, for the most part, to
+RFC 1179: Line Printer Daemon Protocol, but does not enforce the
+privileged source port restriction specified in that document. In
+addition, the banner page and output format options are usually
+overridden via command-line options to the <B>cups-lpd</B>
+program when it is invoked by the corresponding super-daemon
+program.</P>
+
+<H3>Web Interface</H3>
+
+<P>The web interface is supported by five CGI programs. Table 1
+describes the purpose of each of the programs.</P>
+
+<DIV CLASS="table"><TABLE SUMMARY="CGI Programs">
+<CAPTION>Table 1: <A NAME="TABLE1">CGI Programs</A></CAPTION>
+<THEAD>
+<TR>
+       <TH>Program</TH>
+       <TH>Location</TH>
+       <TH>Description</TH>
+</TR>
+</THEAD>
+<TBODY>
+<TR>
+       <TD>admin.cgi</TD>
+       <TD>/admin</TD>
+       <TD>Provides all of the administrative functions</TD>
+</TR>
+<TR>
+       <TD>classes.cgi</TD>
+       <TD>/classes</TD>
+       <TD>Lists classes and provides class management functions</TD>
+</TR>
+<TR>
+       <TD>help.cgi</TD>
+       <TD>/help</TD>
+       <TD>Provides access to on-line help documents</TD>
+</TR>
+<TR>
+       <TD>jobs.cgi</TD>
+       <TD>/jobs</TD>
+       <TD>Lists jobs and provides job management functions</TD>
+</TR>
+<TR>
+       <TD>printers.cgi</TD>
+       <TD>/printers</TD>
+       <TD>Lists printers and provides printer management functions</TD>
+</TR>
+</TBODY>
+</TABLE></DIV>
+
+<H3>Notifiers</H3>
+
+<P>Notifiers provide the means for sending event notifications
+from the scheduler. Notifiers are executed with the recipient
+information on the command-line and the event data on the
+standard input.</P>
+
+<P>The <B>mailto</B> notifier is the only notifier included with
+CUPS 1.2 and handles email notifications for the scheduler.
+Additional notifiers can be added as needed without additional
+configuration.</P>
+
+<H3>Filters</H3>
+
+<P>Filters convert job files into a printable format. Multiple
+filters are run, as needed, to convert from the job file format
+to the printable format. A filter program reads from the standard
+input or from a file if a filename is supplied. All filters must
+support a common set of options including printer name, job ID,
+username, job title, number of copies, and job options. All
+output is sent to the standard output.</P>
+
+<P>CUPS provides filters for printing text, PostScript, PDF,
+HP-GL/2, and many types of image files. CUPS also provides
+printer driver filters for HP-PCL, ESC/P, and several types of
+label printers. Additional filters can be added through the use
+of mime.convs and PPD files.</P>
+
+<H3>Port Monitors</H3>
+
+<P>Port monitors handle the device- and channel-specific data
+formatting for a printer. Port monitors use the same interface as
+filters.</P>
+
+<P>CUPS includes two port monitors: the <B>bcp</B> port monitor
+which supports the PostScript Binary Communications Protocol
+("BCP") and the <b>tbcp</b> port monitor which supports the
+PostScript Tagged Binary Communications Protocol ("TBCP").
+Additional port monitors can be added through PPD files.</P>
+
+<H3>Backends</H3>
+
+<P>Backends send print data to the printer and enumerate
+available printers/devices as needed. Backends use the same
+interface as filters.</P>
+
+<P>CUPS includes backends for parallel, serial, SCSI, USB, LPD,
+IPP, and AppSocket (JetDirect) connections. Additional backends
+can be added as needed without additional configuration.</P>
+
+<H2 CLASS="title"><A NAME="PROGRAMMING">Programming Interfaces</A></H2>
+
+<P>CUPS makes use of two general-purpose libraries to provide its
+printing services. The CUPS library provides the general
+communications and management infrastructure while the CUPS
+imaging library provides the image file and raster data
+support.</P>
+
+<H3>CUPS Libary</H3>
+
+<P>The CUPS library contains CUPS-specific convenience functions
+for queuing print jobs, getting printer information, accessing
+resources via HTTP and IPP, and manipulating PPD files. Unlike
+the rest of CUPS, the CUPS API is provided under the terms of the
+GNU LGPL so it may be used by non-GPL applications.</P>
+
+<H3>CUPS Imaging Library</H3>
+
+<P>The CUPS imaging library provides functions for managing large
+images, doing colorspace conversion and color management, scaling
+images for printing, and managing raster page streams. It is used
+by the CUPS image file filters, the PostScript RIP, and all
+raster printers drivers.</P>
+
+<!--<H2 CLASS="title">Network Printing</H2>
+
+<P>Traditionally, network printing has been one of the hardest
+things to get working under UNIX. One reason is because each
+vendor added their own extensions to the LPD protocol (the
+previous standard for network printing), making cross-platform
+printing difficult if not impossible.</P>
+
+<P>Another reason is that you have to administer every network
+printer on every client machine. In some cases you can "clone'
+the printer configuration from a "master' client to each of the
+others, but even that can be time-consuming and error-prone.
+Something better is needed.</P>
+
+<P>CUPS provides "printer browsing", which allows clients to
+automatically see and use printers from any server on a LAN.
+This means that you only need to configure the server and the
+clients will automatically see the printers and classes on
+it.</P>
+
+<P>In addition, CUPS can automatically merge multiple identical
+network printers into "implicit classes". This allows clients to
+send jobs to the implicit class and have them print on the first
+available printer or server. In addition, failsafe and
+load-balancing functions are enabled simply by defining the same
+printer on multiple servers!</P>
 
 <H3>Scheduler</H3>
 
@@ -71,100 +390,7 @@ just PostScript printers. There is one PPD file for each
 printer. PPD files for non-PostScript printers define additional
 filters through <tt>cupsFilter</tt> attributes to support
 printer drivers.</P>
-
-<P ALIGN="CENTER"><IMG SRC="../images/cups-block-diagram.gif"
-WIDTH="768" HEIGHT="768" ALT="CUPS Block Diagram"/><BR>
-<I>Figure 1 - CUPS Block Diagram</I></P>
-
-<H3>CUPS API</H3>
-
-<P>The CUPS API contains CUPS-specific convenience functions for
-queuing print jobs, getting printer information, accessing
-resources via HTTP and IPP, and manipulating PPD files. Unlike
-the rest of CUPS, the CUPS API is provided under the terms of
-the GNU LGPL so it may be used by non-GPL applications.</P>
-
-<H3>Berkeley and System V Commands</H3>
-
-<P>CUPS provides the System V and Berkeley command-line
-interfaces for submitting jobs and checking the printer status.
-The <tt>lpstat</tt> and <tt>lpc status</tt> commands
-also show network printers ("printer@server") when printer
-browsing is enabled.</P>
-
-<P>The System V administation commands are supplied for managing
-printers and classes. The Berkeley printer administration tool
-(<tt>lpc</tt>) is only supported in a "read-only' mode to
-check the current status of the printer queues and
-scheduler.</P>
-
-<H3>Filters</H3>
-
-<P>A filter program reads from the standard input or from a file
-if a filename is supplied. All filters must support a common set
-of options including printer name, job ID, username, job title,
-number of copies, and job options. All output is sent to the
-standard output.</P>
-
-<P>Filters are provided for many file formats and include image
-file and PostScript raster filters that support non-PostScript
-printers. Multiple filters are run in parallel to produce the
-required output format.</P>
-
-<P>The PostScript raster filter is based on the ESP Ghostscript
-core. Instead of using the Ghostscript printer drivers, the CUPS
-filter uses a generic CUPS raster printer driver and
-CUPS-compliant front-end to support any kind of raster printer.
-This allows the same printer driver filter to be used for
-printing raster data from any filter.</P>
-
-<pre>Talk about Apple's use of CUPS...</pre>
-
-<H3>CUPS Imaging</H3>
-
-<P>The CUPS Imaging library provides functions for managing
-large images, doing colorspace conversion and color management,
-scaling images for printing, and managing raster page streams.
-It is used by the CUPS image file filters, the PostScript RIP,
-and all raster printers drivers.</P>
-
-<H3>Backends</H3>
-
-<P>A backend program is a special filter that sends print data
-to a device or network connection. Backends for parallel,
-serial, USB, LPD, IPP, and AppSocket (JetDirect) connections are
-provided in CUPS 1.2.</P>
-
-<P>SAMBA version 2.0.6 and higher includes a SMB backend
-(<tt>smbspool(1)</tt>) that can be used for printing to
-Windows.</P>
-
-<H2 CLASS="title">Network Printing</H2>
-
-<P>Traditionally, network printing has been one of the hardest
-things to get working under UNIX. One reason is because each
-vendor added their own extensions to the LPD protocol (the
-previous standard for network printing), making cross-platform
-printing difficult if not impossible.</P>
-
-<P>Another reason is that you have to administer every network
-printer on every client machine. In some cases you can "clone'
-the printer configuration from a "master' client to each of the
-others, but even that can be time-consuming and error-prone.
-Something better is needed.</P>
-
-<P>CUPS provides "printer browsing", which allows clients to
-automatically see and use printers from any server on a LAN.
-This means that you only need to configure the server and the
-clients will automatically see the printers and classes on
-it.</P>
-
-<P>In addition, CUPS can automatically merge multiple identical
-network printers into "implicit classes". This allows clients to
-send jobs to the implicit class and have them print on the first
-available printer or server. In addition, failsafe and
-load-balancing functions are enabled simply by defining the same
-printer on multiple servers!</P>
+-->
 
 </BODY>
 </HTML>
index b790955637380412bdb33083d1d9f6d6255565f6..5a2cd2313980ceb7e6bee6dba70ffaf7bbc1b62a 100644 (file)
@@ -102,6 +102,7 @@ form-tree.o: form.h common.h ../cups/cups.h ../cups/ipp.h ../cups/http.h
 form-tree.o: ../cups/md5.h ../cups/ppd.h ../cups/array.h ../cups/file.h
 form-tree.o: ../cups/language.h ../cups/language.h ../cups/string.h
 form-tree.o: ../config.h
+gziptoany.o: ../cups/string.h ../config.h
 imagetops.o: common.h ../cups/cups.h ../cups/ipp.h ../cups/http.h
 imagetops.o: ../cups/md5.h ../cups/ppd.h ../cups/array.h ../cups/file.h
 imagetops.o: ../cups/language.h ../cups/language.h ../cups/string.h
@@ -120,9 +121,6 @@ pstops.o: ../cups/array.h
 raster.o: raster.h ../cups/cups.h ../cups/ipp.h ../cups/http.h ../cups/md5.h
 raster.o: ../cups/ppd.h ../cups/array.h ../cups/file.h ../cups/language.h
 raster.o: ../cups/string.h ../config.h
-rastertolabel.o: ../cups/cups.h ../cups/ipp.h ../cups/http.h ../cups/md5.h
-rastertolabel.o: ../cups/ppd.h ../cups/array.h ../cups/file.h
-rastertolabel.o: ../cups/language.h ../cups/string.h ../config.h raster.h
 rastertoepson.o: ../cups/cups.h ../cups/ipp.h ../cups/http.h ../cups/md5.h
 rastertoepson.o: ../cups/ppd.h ../cups/array.h ../cups/file.h
 rastertoepson.o: ../cups/language.h ../cups/ppd.h ../cups/string.h
@@ -130,15 +128,314 @@ rastertoepson.o: ../config.h raster.h
 rastertohp.o: ../cups/cups.h ../cups/ipp.h ../cups/http.h ../cups/md5.h
 rastertohp.o: ../cups/ppd.h ../cups/array.h ../cups/file.h ../cups/language.h
 rastertohp.o: ../cups/string.h ../config.h raster.h
-texttops.o: textcommon.h common.h ../cups/cups.h ../cups/ipp.h ../cups/http.h
-texttops.o: ../cups/md5.h ../cups/ppd.h ../cups/array.h ../cups/file.h
-texttops.o: ../cups/language.h ../cups/language.h ../cups/string.h
-texttops.o: ../config.h
+rastertolabel.o: ../cups/cups.h ../cups/ipp.h ../cups/http.h ../cups/md5.h
+rastertolabel.o: ../cups/ppd.h ../cups/array.h ../cups/file.h
+rastertolabel.o: ../cups/language.h ../cups/string.h ../config.h raster.h
+testimage.o: image.h raster.h ../cups/cups.h ../cups/ipp.h ../cups/http.h
+testimage.o: ../cups/md5.h ../cups/ppd.h ../cups/array.h ../cups/file.h
+testimage.o: ../cups/language.h
+testraster.o: raster.h ../cups/cups.h ../cups/ipp.h ../cups/http.h
+testraster.o: ../cups/md5.h ../cups/ppd.h ../cups/array.h ../cups/file.h
+testraster.o: ../cups/language.h ../cups/string.h ../config.h
 textcommon.o: textcommon.h common.h ../cups/cups.h ../cups/ipp.h
 textcommon.o: ../cups/http.h ../cups/md5.h ../cups/ppd.h ../cups/array.h
 textcommon.o: ../cups/file.h ../cups/language.h ../cups/language.h
 textcommon.o: ../cups/string.h ../config.h
-testraster.o: raster.h ../cups/cups.h ../cups/ipp.h ../cups/http.h
-testraster.o: ../cups/md5.h ../cups/ppd.h ../cups/array.h ../cups/file.h
-testraster.o: ../cups/language.h ../cups/string.h ../config.h
-gziptoany.o: ../cups/string.h ../config.h
+texttops.o: textcommon.h common.h ../cups/cups.h ../cups/ipp.h ../cups/http.h
+texttops.o: ../cups/md5.h ../cups/ppd.h ../cups/array.h ../cups/file.h
+texttops.o: ../cups/language.h ../cups/language.h ../cups/string.h
+texttops.o: ../config.h
+# DO NOT DELETE
+
+hpgl-attr.32.o: hpgl-attr.c  hpgltops.h common.h ../cups/cups.h ../cups/ipp.h ../cups/http.h
+hpgl-attr.32.o: hpgl-attr.c  ../cups/md5.h ../cups/ppd.h ../cups/array.h ../cups/file.h
+hpgl-attr.32.o: hpgl-attr.c  ../cups/language.h ../cups/language.h ../cups/string.h
+hpgl-attr.32.o: hpgl-attr.c  ../config.h
+hpgl-config.32.o: hpgl-config.c  hpgltops.h common.h ../cups/cups.h ../cups/ipp.h
+hpgl-config.32.o: hpgl-config.c  ../cups/http.h ../cups/md5.h ../cups/ppd.h ../cups/array.h
+hpgl-config.32.o: hpgl-config.c  ../cups/file.h ../cups/language.h ../cups/language.h
+hpgl-config.32.o: hpgl-config.c  ../cups/string.h ../config.h
+hpgl-main.32.o: hpgl-main.c  hpgltops.h common.h ../cups/cups.h ../cups/ipp.h ../cups/http.h
+hpgl-main.32.o: hpgl-main.c  ../cups/md5.h ../cups/ppd.h ../cups/array.h ../cups/file.h
+hpgl-main.32.o: hpgl-main.c  ../cups/language.h ../cups/language.h ../cups/string.h
+hpgl-main.32.o: hpgl-main.c  ../config.h
+hpgl-prolog.32.o: hpgl-prolog.c  hpgltops.h common.h ../cups/cups.h ../cups/ipp.h
+hpgl-prolog.32.o: hpgl-prolog.c  ../cups/http.h ../cups/md5.h ../cups/ppd.h ../cups/array.h
+hpgl-prolog.32.o: hpgl-prolog.c  ../cups/file.h ../cups/language.h ../cups/language.h
+hpgl-prolog.32.o: hpgl-prolog.c  ../cups/string.h ../config.h
+hpgl-char.32.o: hpgl-char.c  hpgltops.h common.h ../cups/cups.h ../cups/ipp.h ../cups/http.h
+hpgl-char.32.o: hpgl-char.c  ../cups/md5.h ../cups/ppd.h ../cups/array.h ../cups/file.h
+hpgl-char.32.o: hpgl-char.c  ../cups/language.h ../cups/language.h ../cups/string.h
+hpgl-char.32.o: hpgl-char.c  ../config.h
+hpgl-input.32.o: hpgl-input.c  hpgltops.h common.h ../cups/cups.h ../cups/ipp.h ../cups/http.h
+hpgl-input.32.o: hpgl-input.c  ../cups/md5.h ../cups/ppd.h ../cups/array.h ../cups/file.h
+hpgl-input.32.o: hpgl-input.c  ../cups/language.h ../cups/language.h ../cups/string.h
+hpgl-input.32.o: hpgl-input.c  ../config.h
+hpgl-polygon.32.o: hpgl-polygon.c  hpgltops.h common.h ../cups/cups.h ../cups/ipp.h
+hpgl-polygon.32.o: hpgl-polygon.c  ../cups/http.h ../cups/md5.h ../cups/ppd.h ../cups/array.h
+hpgl-polygon.32.o: hpgl-polygon.c  ../cups/file.h ../cups/language.h ../cups/language.h
+hpgl-polygon.32.o: hpgl-polygon.c  ../cups/string.h ../config.h
+hpgl-vector.32.o: hpgl-vector.c  hpgltops.h common.h ../cups/cups.h ../cups/ipp.h
+hpgl-vector.32.o: hpgl-vector.c  ../cups/http.h ../cups/md5.h ../cups/ppd.h ../cups/array.h
+hpgl-vector.32.o: hpgl-vector.c  ../cups/file.h ../cups/language.h ../cups/language.h
+hpgl-vector.32.o: hpgl-vector.c  ../cups/string.h ../config.h
+image-bmp.32.o: image-bmp.c  image-private.h image.h raster.h ../cups/cups.h ../cups/ipp.h
+image-bmp.32.o: image-bmp.c  ../cups/http.h ../cups/md5.h ../cups/ppd.h ../cups/array.h
+image-bmp.32.o: image-bmp.c  ../cups/file.h ../cups/language.h ../cups/debug.h
+image-bmp.32.o: image-bmp.c  ../cups/string.h ../config.h
+image-colorspace.32.o: image-colorspace.c  image-private.h image.h raster.h ../cups/cups.h
+image-colorspace.32.o: image-colorspace.c  ../cups/ipp.h ../cups/http.h ../cups/md5.h ../cups/ppd.h
+image-colorspace.32.o: image-colorspace.c  ../cups/array.h ../cups/file.h ../cups/language.h
+image-colorspace.32.o: image-colorspace.c  ../cups/debug.h ../cups/string.h ../config.h
+image-gif.32.o: image-gif.c  image-private.h image.h raster.h ../cups/cups.h ../cups/ipp.h
+image-gif.32.o: image-gif.c  ../cups/http.h ../cups/md5.h ../cups/ppd.h ../cups/array.h
+image-gif.32.o: image-gif.c  ../cups/file.h ../cups/language.h ../cups/debug.h
+image-gif.32.o: image-gif.c  ../cups/string.h ../config.h
+image-jpeg.32.o: image-jpeg.c  image-private.h image.h raster.h ../cups/cups.h ../cups/ipp.h
+image-jpeg.32.o: image-jpeg.c  ../cups/http.h ../cups/md5.h ../cups/ppd.h ../cups/array.h
+image-jpeg.32.o: image-jpeg.c  ../cups/file.h ../cups/language.h ../cups/debug.h
+image-jpeg.32.o: image-jpeg.c  ../cups/string.h ../config.h
+image-photocd.32.o: image-photocd.c  image-private.h image.h raster.h ../cups/cups.h
+image-photocd.32.o: image-photocd.c  ../cups/ipp.h ../cups/http.h ../cups/md5.h ../cups/ppd.h
+image-photocd.32.o: image-photocd.c  ../cups/array.h ../cups/file.h ../cups/language.h
+image-photocd.32.o: image-photocd.c  ../cups/debug.h ../cups/string.h ../config.h
+image-pix.32.o: image-pix.c  image-private.h image.h raster.h ../cups/cups.h ../cups/ipp.h
+image-pix.32.o: image-pix.c  ../cups/http.h ../cups/md5.h ../cups/ppd.h ../cups/array.h
+image-pix.32.o: image-pix.c  ../cups/file.h ../cups/language.h ../cups/debug.h
+image-pix.32.o: image-pix.c  ../cups/string.h ../config.h
+image-png.32.o: image-png.c  image-private.h image.h raster.h ../cups/cups.h ../cups/ipp.h
+image-png.32.o: image-png.c  ../cups/http.h ../cups/md5.h ../cups/ppd.h ../cups/array.h
+image-png.32.o: image-png.c  ../cups/file.h ../cups/language.h ../cups/debug.h
+image-png.32.o: image-png.c  ../cups/string.h ../config.h
+image-pnm.32.o: image-pnm.c  image-private.h image.h raster.h ../cups/cups.h ../cups/ipp.h
+image-pnm.32.o: image-pnm.c  ../cups/http.h ../cups/md5.h ../cups/ppd.h ../cups/array.h
+image-pnm.32.o: image-pnm.c  ../cups/file.h ../cups/language.h ../cups/debug.h
+image-pnm.32.o: image-pnm.c  ../cups/string.h ../config.h
+image-sgi.32.o: image-sgi.c  image-private.h image.h raster.h ../cups/cups.h ../cups/ipp.h
+image-sgi.32.o: image-sgi.c  ../cups/http.h ../cups/md5.h ../cups/ppd.h ../cups/array.h
+image-sgi.32.o: image-sgi.c  ../cups/file.h ../cups/language.h ../cups/debug.h
+image-sgi.32.o: image-sgi.c  ../cups/string.h ../config.h image-sgi.h
+image-sgilib.32.o: image-sgilib.c  image-sgi.h
+image-sun.32.o: image-sun.c  image-private.h image.h raster.h ../cups/cups.h ../cups/ipp.h
+image-sun.32.o: image-sun.c  ../cups/http.h ../cups/md5.h ../cups/ppd.h ../cups/array.h
+image-sun.32.o: image-sun.c  ../cups/file.h ../cups/language.h ../cups/debug.h
+image-sun.32.o: image-sun.c  ../cups/string.h ../config.h
+image-tiff.32.o: image-tiff.c  image-private.h image.h raster.h ../cups/cups.h ../cups/ipp.h
+image-tiff.32.o: image-tiff.c  ../cups/http.h ../cups/md5.h ../cups/ppd.h ../cups/array.h
+image-tiff.32.o: image-tiff.c  ../cups/file.h ../cups/language.h ../cups/debug.h
+image-tiff.32.o: image-tiff.c  ../cups/string.h ../config.h
+image-zoom.32.o: image-zoom.c  image-private.h image.h raster.h ../cups/cups.h ../cups/ipp.h
+image-zoom.32.o: image-zoom.c  ../cups/http.h ../cups/md5.h ../cups/ppd.h ../cups/array.h
+image-zoom.32.o: image-zoom.c  ../cups/file.h ../cups/language.h ../cups/debug.h
+image-zoom.32.o: image-zoom.c  ../cups/string.h ../config.h
+image.32.o: image.c  image-private.h image.h raster.h ../cups/cups.h ../cups/ipp.h
+image.32.o: image.c  ../cups/http.h ../cups/md5.h ../cups/ppd.h ../cups/array.h
+image.32.o: image.c  ../cups/file.h ../cups/language.h ../cups/debug.h ../cups/string.h
+image.32.o: image.c  ../config.h
+interpret.32.o: interpret.c  ../cups/string.h ../config.h raster.h ../cups/cups.h
+interpret.32.o: interpret.c  ../cups/ipp.h ../cups/http.h ../cups/md5.h ../cups/ppd.h
+interpret.32.o: interpret.c  ../cups/array.h ../cups/file.h ../cups/language.h
+raster.32.o: raster.c  raster.h ../cups/cups.h ../cups/ipp.h ../cups/http.h ../cups/md5.h
+raster.32.o: raster.c  ../cups/ppd.h ../cups/array.h ../cups/file.h ../cups/language.h
+raster.32.o: raster.c  ../cups/string.h ../config.h
+form-main.32.o: form-main.c  form.h common.h ../cups/cups.h ../cups/ipp.h ../cups/http.h
+form-main.32.o: form-main.c  ../cups/md5.h ../cups/ppd.h ../cups/array.h ../cups/file.h
+form-main.32.o: form-main.c  ../cups/language.h ../cups/language.h ../cups/string.h
+form-main.32.o: form-main.c  ../config.h
+form-ps.32.o: form-ps.c  form.h common.h ../cups/cups.h ../cups/ipp.h ../cups/http.h
+form-ps.32.o: form-ps.c  ../cups/md5.h ../cups/ppd.h ../cups/array.h ../cups/file.h
+form-ps.32.o: form-ps.c  ../cups/language.h ../cups/language.h ../cups/string.h ../config.h
+form-tree.32.o: form-tree.c  form.h common.h ../cups/cups.h ../cups/ipp.h ../cups/http.h
+form-tree.32.o: form-tree.c  ../cups/md5.h ../cups/ppd.h ../cups/array.h ../cups/file.h
+form-tree.32.o: form-tree.c  ../cups/language.h ../cups/language.h ../cups/string.h
+form-tree.32.o: form-tree.c  ../config.h
+gziptoany.32.o: gziptoany.c  ../cups/string.h ../config.h
+imagetops.32.o: imagetops.c  common.h ../cups/cups.h ../cups/ipp.h ../cups/http.h
+imagetops.32.o: imagetops.c  ../cups/md5.h ../cups/ppd.h ../cups/array.h ../cups/file.h
+imagetops.32.o: imagetops.c  ../cups/language.h ../cups/language.h ../cups/string.h
+imagetops.32.o: imagetops.c  ../config.h image.h raster.h
+imagetoraster.32.o: imagetoraster.c  common.h ../cups/cups.h ../cups/ipp.h ../cups/http.h
+imagetoraster.32.o: imagetoraster.c  ../cups/md5.h ../cups/ppd.h ../cups/array.h ../cups/file.h
+imagetoraster.32.o: imagetoraster.c  ../cups/language.h ../cups/language.h ../cups/string.h
+imagetoraster.32.o: imagetoraster.c  ../config.h image-private.h image.h raster.h ../cups/debug.h
+common.32.o: common.c  common.h ../cups/cups.h ../cups/ipp.h ../cups/http.h ../cups/md5.h
+common.32.o: common.c  ../cups/ppd.h ../cups/array.h ../cups/file.h ../cups/language.h
+common.32.o: common.c  ../cups/language.h ../cups/string.h ../config.h
+pstops.32.o: pstops.c  common.h ../cups/cups.h ../cups/ipp.h ../cups/http.h ../cups/md5.h
+pstops.32.o: pstops.c  ../cups/ppd.h ../cups/array.h ../cups/file.h ../cups/language.h
+pstops.32.o: pstops.c  ../cups/language.h ../cups/string.h ../config.h ../cups/file.h
+pstops.32.o: pstops.c  ../cups/array.h
+raster.32.o: raster.c  raster.h ../cups/cups.h ../cups/ipp.h ../cups/http.h ../cups/md5.h
+raster.32.o: raster.c  ../cups/ppd.h ../cups/array.h ../cups/file.h ../cups/language.h
+raster.32.o: raster.c  ../cups/string.h ../config.h
+rastertoepson.32.o: rastertoepson.c  ../cups/cups.h ../cups/ipp.h ../cups/http.h ../cups/md5.h
+rastertoepson.32.o: rastertoepson.c  ../cups/ppd.h ../cups/array.h ../cups/file.h
+rastertoepson.32.o: rastertoepson.c  ../cups/language.h ../cups/ppd.h ../cups/string.h
+rastertoepson.32.o: rastertoepson.c  ../config.h raster.h
+rastertohp.32.o: rastertohp.c  ../cups/cups.h ../cups/ipp.h ../cups/http.h ../cups/md5.h
+rastertohp.32.o: rastertohp.c  ../cups/ppd.h ../cups/array.h ../cups/file.h ../cups/language.h
+rastertohp.32.o: rastertohp.c  ../cups/string.h ../config.h raster.h
+rastertolabel.32.o: rastertolabel.c  ../cups/cups.h ../cups/ipp.h ../cups/http.h ../cups/md5.h
+rastertolabel.32.o: rastertolabel.c  ../cups/ppd.h ../cups/array.h ../cups/file.h
+rastertolabel.32.o: rastertolabel.c  ../cups/language.h ../cups/string.h ../config.h raster.h
+testimage.32.o: testimage.c  image.h raster.h ../cups/cups.h ../cups/ipp.h ../cups/http.h
+testimage.32.o: testimage.c  ../cups/md5.h ../cups/ppd.h ../cups/array.h ../cups/file.h
+testimage.32.o: testimage.c  ../cups/language.h
+testraster.32.o: testraster.c  raster.h ../cups/cups.h ../cups/ipp.h ../cups/http.h
+testraster.32.o: testraster.c  ../cups/md5.h ../cups/ppd.h ../cups/array.h ../cups/file.h
+testraster.32.o: testraster.c  ../cups/language.h ../cups/string.h ../config.h
+textcommon.32.o: textcommon.c  textcommon.h common.h ../cups/cups.h ../cups/ipp.h
+textcommon.32.o: textcommon.c  ../cups/http.h ../cups/md5.h ../cups/ppd.h ../cups/array.h
+textcommon.32.o: textcommon.c  ../cups/file.h ../cups/language.h ../cups/language.h
+textcommon.32.o: textcommon.c  ../cups/string.h ../config.h
+texttops.32.o: texttops.c  textcommon.h common.h ../cups/cups.h ../cups/ipp.h ../cups/http.h
+texttops.32.o: texttops.c  ../cups/md5.h ../cups/ppd.h ../cups/array.h ../cups/file.h
+texttops.32.o: texttops.c  ../cups/language.h ../cups/language.h ../cups/string.h
+texttops.32.o: texttops.c  ../config.h
+# DO NOT DELETE
+
+hpgl-attr.64.o: hpgl-attr.c  hpgltops.h common.h ../cups/cups.h ../cups/ipp.h ../cups/http.h
+hpgl-attr.64.o: hpgl-attr.c  ../cups/md5.h ../cups/ppd.h ../cups/array.h ../cups/file.h
+hpgl-attr.64.o: hpgl-attr.c  ../cups/language.h ../cups/language.h ../cups/string.h
+hpgl-attr.64.o: hpgl-attr.c  ../config.h
+hpgl-config.64.o: hpgl-config.c  hpgltops.h common.h ../cups/cups.h ../cups/ipp.h
+hpgl-config.64.o: hpgl-config.c  ../cups/http.h ../cups/md5.h ../cups/ppd.h ../cups/array.h
+hpgl-config.64.o: hpgl-config.c  ../cups/file.h ../cups/language.h ../cups/language.h
+hpgl-config.64.o: hpgl-config.c  ../cups/string.h ../config.h
+hpgl-main.64.o: hpgl-main.c  hpgltops.h common.h ../cups/cups.h ../cups/ipp.h ../cups/http.h
+hpgl-main.64.o: hpgl-main.c  ../cups/md5.h ../cups/ppd.h ../cups/array.h ../cups/file.h
+hpgl-main.64.o: hpgl-main.c  ../cups/language.h ../cups/language.h ../cups/string.h
+hpgl-main.64.o: hpgl-main.c  ../config.h
+hpgl-prolog.64.o: hpgl-prolog.c  hpgltops.h common.h ../cups/cups.h ../cups/ipp.h
+hpgl-prolog.64.o: hpgl-prolog.c  ../cups/http.h ../cups/md5.h ../cups/ppd.h ../cups/array.h
+hpgl-prolog.64.o: hpgl-prolog.c  ../cups/file.h ../cups/language.h ../cups/language.h
+hpgl-prolog.64.o: hpgl-prolog.c  ../cups/string.h ../config.h
+hpgl-char.64.o: hpgl-char.c  hpgltops.h common.h ../cups/cups.h ../cups/ipp.h ../cups/http.h
+hpgl-char.64.o: hpgl-char.c  ../cups/md5.h ../cups/ppd.h ../cups/array.h ../cups/file.h
+hpgl-char.64.o: hpgl-char.c  ../cups/language.h ../cups/language.h ../cups/string.h
+hpgl-char.64.o: hpgl-char.c  ../config.h
+hpgl-input.64.o: hpgl-input.c  hpgltops.h common.h ../cups/cups.h ../cups/ipp.h ../cups/http.h
+hpgl-input.64.o: hpgl-input.c  ../cups/md5.h ../cups/ppd.h ../cups/array.h ../cups/file.h
+hpgl-input.64.o: hpgl-input.c  ../cups/language.h ../cups/language.h ../cups/string.h
+hpgl-input.64.o: hpgl-input.c  ../config.h
+hpgl-polygon.64.o: hpgl-polygon.c  hpgltops.h common.h ../cups/cups.h ../cups/ipp.h
+hpgl-polygon.64.o: hpgl-polygon.c  ../cups/http.h ../cups/md5.h ../cups/ppd.h ../cups/array.h
+hpgl-polygon.64.o: hpgl-polygon.c  ../cups/file.h ../cups/language.h ../cups/language.h
+hpgl-polygon.64.o: hpgl-polygon.c  ../cups/string.h ../config.h
+hpgl-vector.64.o: hpgl-vector.c  hpgltops.h common.h ../cups/cups.h ../cups/ipp.h
+hpgl-vector.64.o: hpgl-vector.c  ../cups/http.h ../cups/md5.h ../cups/ppd.h ../cups/array.h
+hpgl-vector.64.o: hpgl-vector.c  ../cups/file.h ../cups/language.h ../cups/language.h
+hpgl-vector.64.o: hpgl-vector.c  ../cups/string.h ../config.h
+image-bmp.64.o: image-bmp.c  image-private.h image.h raster.h ../cups/cups.h ../cups/ipp.h
+image-bmp.64.o: image-bmp.c  ../cups/http.h ../cups/md5.h ../cups/ppd.h ../cups/array.h
+image-bmp.64.o: image-bmp.c  ../cups/file.h ../cups/language.h ../cups/debug.h
+image-bmp.64.o: image-bmp.c  ../cups/string.h ../config.h
+image-colorspace.64.o: image-colorspace.c  image-private.h image.h raster.h ../cups/cups.h
+image-colorspace.64.o: image-colorspace.c  ../cups/ipp.h ../cups/http.h ../cups/md5.h ../cups/ppd.h
+image-colorspace.64.o: image-colorspace.c  ../cups/array.h ../cups/file.h ../cups/language.h
+image-colorspace.64.o: image-colorspace.c  ../cups/debug.h ../cups/string.h ../config.h
+image-gif.64.o: image-gif.c  image-private.h image.h raster.h ../cups/cups.h ../cups/ipp.h
+image-gif.64.o: image-gif.c  ../cups/http.h ../cups/md5.h ../cups/ppd.h ../cups/array.h
+image-gif.64.o: image-gif.c  ../cups/file.h ../cups/language.h ../cups/debug.h
+image-gif.64.o: image-gif.c  ../cups/string.h ../config.h
+image-jpeg.64.o: image-jpeg.c  image-private.h image.h raster.h ../cups/cups.h ../cups/ipp.h
+image-jpeg.64.o: image-jpeg.c  ../cups/http.h ../cups/md5.h ../cups/ppd.h ../cups/array.h
+image-jpeg.64.o: image-jpeg.c  ../cups/file.h ../cups/language.h ../cups/debug.h
+image-jpeg.64.o: image-jpeg.c  ../cups/string.h ../config.h
+image-photocd.64.o: image-photocd.c  image-private.h image.h raster.h ../cups/cups.h
+image-photocd.64.o: image-photocd.c  ../cups/ipp.h ../cups/http.h ../cups/md5.h ../cups/ppd.h
+image-photocd.64.o: image-photocd.c  ../cups/array.h ../cups/file.h ../cups/language.h
+image-photocd.64.o: image-photocd.c  ../cups/debug.h ../cups/string.h ../config.h
+image-pix.64.o: image-pix.c  image-private.h image.h raster.h ../cups/cups.h ../cups/ipp.h
+image-pix.64.o: image-pix.c  ../cups/http.h ../cups/md5.h ../cups/ppd.h ../cups/array.h
+image-pix.64.o: image-pix.c  ../cups/file.h ../cups/language.h ../cups/debug.h
+image-pix.64.o: image-pix.c  ../cups/string.h ../config.h
+image-png.64.o: image-png.c  image-private.h image.h raster.h ../cups/cups.h ../cups/ipp.h
+image-png.64.o: image-png.c  ../cups/http.h ../cups/md5.h ../cups/ppd.h ../cups/array.h
+image-png.64.o: image-png.c  ../cups/file.h ../cups/language.h ../cups/debug.h
+image-png.64.o: image-png.c  ../cups/string.h ../config.h
+image-pnm.64.o: image-pnm.c  image-private.h image.h raster.h ../cups/cups.h ../cups/ipp.h
+image-pnm.64.o: image-pnm.c  ../cups/http.h ../cups/md5.h ../cups/ppd.h ../cups/array.h
+image-pnm.64.o: image-pnm.c  ../cups/file.h ../cups/language.h ../cups/debug.h
+image-pnm.64.o: image-pnm.c  ../cups/string.h ../config.h
+image-sgi.64.o: image-sgi.c  image-private.h image.h raster.h ../cups/cups.h ../cups/ipp.h
+image-sgi.64.o: image-sgi.c  ../cups/http.h ../cups/md5.h ../cups/ppd.h ../cups/array.h
+image-sgi.64.o: image-sgi.c  ../cups/file.h ../cups/language.h ../cups/debug.h
+image-sgi.64.o: image-sgi.c  ../cups/string.h ../config.h image-sgi.h
+image-sgilib.64.o: image-sgilib.c  image-sgi.h
+image-sun.64.o: image-sun.c  image-private.h image.h raster.h ../cups/cups.h ../cups/ipp.h
+image-sun.64.o: image-sun.c  ../cups/http.h ../cups/md5.h ../cups/ppd.h ../cups/array.h
+image-sun.64.o: image-sun.c  ../cups/file.h ../cups/language.h ../cups/debug.h
+image-sun.64.o: image-sun.c  ../cups/string.h ../config.h
+image-tiff.64.o: image-tiff.c  image-private.h image.h raster.h ../cups/cups.h ../cups/ipp.h
+image-tiff.64.o: image-tiff.c  ../cups/http.h ../cups/md5.h ../cups/ppd.h ../cups/array.h
+image-tiff.64.o: image-tiff.c  ../cups/file.h ../cups/language.h ../cups/debug.h
+image-tiff.64.o: image-tiff.c  ../cups/string.h ../config.h
+image-zoom.64.o: image-zoom.c  image-private.h image.h raster.h ../cups/cups.h ../cups/ipp.h
+image-zoom.64.o: image-zoom.c  ../cups/http.h ../cups/md5.h ../cups/ppd.h ../cups/array.h
+image-zoom.64.o: image-zoom.c  ../cups/file.h ../cups/language.h ../cups/debug.h
+image-zoom.64.o: image-zoom.c  ../cups/string.h ../config.h
+image.64.o: image.c  image-private.h image.h raster.h ../cups/cups.h ../cups/ipp.h
+image.64.o: image.c  ../cups/http.h ../cups/md5.h ../cups/ppd.h ../cups/array.h
+image.64.o: image.c  ../cups/file.h ../cups/language.h ../cups/debug.h ../cups/string.h
+image.64.o: image.c  ../config.h
+interpret.64.o: interpret.c  ../cups/string.h ../config.h raster.h ../cups/cups.h
+interpret.64.o: interpret.c  ../cups/ipp.h ../cups/http.h ../cups/md5.h ../cups/ppd.h
+interpret.64.o: interpret.c  ../cups/array.h ../cups/file.h ../cups/language.h
+raster.64.o: raster.c  raster.h ../cups/cups.h ../cups/ipp.h ../cups/http.h ../cups/md5.h
+raster.64.o: raster.c  ../cups/ppd.h ../cups/array.h ../cups/file.h ../cups/language.h
+raster.64.o: raster.c  ../cups/string.h ../config.h
+form-main.64.o: form-main.c  form.h common.h ../cups/cups.h ../cups/ipp.h ../cups/http.h
+form-main.64.o: form-main.c  ../cups/md5.h ../cups/ppd.h ../cups/array.h ../cups/file.h
+form-main.64.o: form-main.c  ../cups/language.h ../cups/language.h ../cups/string.h
+form-main.64.o: form-main.c  ../config.h
+form-ps.64.o: form-ps.c  form.h common.h ../cups/cups.h ../cups/ipp.h ../cups/http.h
+form-ps.64.o: form-ps.c  ../cups/md5.h ../cups/ppd.h ../cups/array.h ../cups/file.h
+form-ps.64.o: form-ps.c  ../cups/language.h ../cups/language.h ../cups/string.h ../config.h
+form-tree.64.o: form-tree.c  form.h common.h ../cups/cups.h ../cups/ipp.h ../cups/http.h
+form-tree.64.o: form-tree.c  ../cups/md5.h ../cups/ppd.h ../cups/array.h ../cups/file.h
+form-tree.64.o: form-tree.c  ../cups/language.h ../cups/language.h ../cups/string.h
+form-tree.64.o: form-tree.c  ../config.h
+gziptoany.64.o: gziptoany.c  ../cups/string.h ../config.h
+imagetops.64.o: imagetops.c  common.h ../cups/cups.h ../cups/ipp.h ../cups/http.h
+imagetops.64.o: imagetops.c  ../cups/md5.h ../cups/ppd.h ../cups/array.h ../cups/file.h
+imagetops.64.o: imagetops.c  ../cups/language.h ../cups/language.h ../cups/string.h
+imagetops.64.o: imagetops.c  ../config.h image.h raster.h
+imagetoraster.64.o: imagetoraster.c  common.h ../cups/cups.h ../cups/ipp.h ../cups/http.h
+imagetoraster.64.o: imagetoraster.c  ../cups/md5.h ../cups/ppd.h ../cups/array.h ../cups/file.h
+imagetoraster.64.o: imagetoraster.c  ../cups/language.h ../cups/language.h ../cups/string.h
+imagetoraster.64.o: imagetoraster.c  ../config.h image-private.h image.h raster.h ../cups/debug.h
+common.64.o: common.c  common.h ../cups/cups.h ../cups/ipp.h ../cups/http.h ../cups/md5.h
+common.64.o: common.c  ../cups/ppd.h ../cups/array.h ../cups/file.h ../cups/language.h
+common.64.o: common.c  ../cups/language.h ../cups/string.h ../config.h
+pstops.64.o: pstops.c  common.h ../cups/cups.h ../cups/ipp.h ../cups/http.h ../cups/md5.h
+pstops.64.o: pstops.c  ../cups/ppd.h ../cups/array.h ../cups/file.h ../cups/language.h
+pstops.64.o: pstops.c  ../cups/language.h ../cups/string.h ../config.h ../cups/file.h
+pstops.64.o: pstops.c  ../cups/array.h
+raster.64.o: raster.c  raster.h ../cups/cups.h ../cups/ipp.h ../cups/http.h ../cups/md5.h
+raster.64.o: raster.c  ../cups/ppd.h ../cups/array.h ../cups/file.h ../cups/language.h
+raster.64.o: raster.c  ../cups/string.h ../config.h
+rastertoepson.64.o: rastertoepson.c  ../cups/cups.h ../cups/ipp.h ../cups/http.h ../cups/md5.h
+rastertoepson.64.o: rastertoepson.c  ../cups/ppd.h ../cups/array.h ../cups/file.h
+rastertoepson.64.o: rastertoepson.c  ../cups/language.h ../cups/ppd.h ../cups/string.h
+rastertoepson.64.o: rastertoepson.c  ../config.h raster.h
+rastertohp.64.o: rastertohp.c  ../cups/cups.h ../cups/ipp.h ../cups/http.h ../cups/md5.h
+rastertohp.64.o: rastertohp.c  ../cups/ppd.h ../cups/array.h ../cups/file.h ../cups/language.h
+rastertohp.64.o: rastertohp.c  ../cups/string.h ../config.h raster.h
+rastertolabel.64.o: rastertolabel.c  ../cups/cups.h ../cups/ipp.h ../cups/http.h ../cups/md5.h
+rastertolabel.64.o: rastertolabel.c  ../cups/ppd.h ../cups/array.h ../cups/file.h
+rastertolabel.64.o: rastertolabel.c  ../cups/language.h ../cups/string.h ../config.h raster.h
+testimage.64.o: testimage.c  image.h raster.h ../cups/cups.h ../cups/ipp.h ../cups/http.h
+testimage.64.o: testimage.c  ../cups/md5.h ../cups/ppd.h ../cups/array.h ../cups/file.h
+testimage.64.o: testimage.c  ../cups/language.h
+testraster.64.o: testraster.c  raster.h ../cups/cups.h ../cups/ipp.h ../cups/http.h
+testraster.64.o: testraster.c  ../cups/md5.h ../cups/ppd.h ../cups/array.h ../cups/file.h
+testraster.64.o: testraster.c  ../cups/language.h ../cups/string.h ../config.h
+textcommon.64.o: textcommon.c  textcommon.h common.h ../cups/cups.h ../cups/ipp.h
+textcommon.64.o: textcommon.c  ../cups/http.h ../cups/md5.h ../cups/ppd.h ../cups/array.h
+textcommon.64.o: textcommon.c  ../cups/file.h ../cups/language.h ../cups/language.h
+textcommon.64.o: textcommon.c  ../cups/string.h ../config.h
+texttops.64.o: texttops.c  textcommon.h common.h ../cups/cups.h ../cups/ipp.h ../cups/http.h
+texttops.64.o: texttops.c  ../cups/md5.h ../cups/ppd.h ../cups/array.h ../cups/file.h
+texttops.64.o: texttops.c  ../cups/language.h ../cups/language.h ../cups/string.h
+texttops.64.o: texttops.c  ../config.h
index 6375bfbff43286fd2e9d1f01a10ad229ed13ce45..9aeca718d6dca7450d340aefc40954a6ca28c58b 100644 (file)
@@ -1,5 +1,5 @@
 #
-# "$Id: Makefile 5229 2006-03-05 16:48:12Z mike $"
+# "$Id: Makefile 5311 2006-03-19 13:21:42Z mike $"
 #
 #   Filter makefile for the Common UNIX Printing System (CUPS).
 #
 
 include ../Makedefs
 
-FILTERS        =       gziptoany hpgltops texttops pstops imagetops imagetoraster \
+FILTERS        =       gziptoany hpgltops texttops pstops $(IMGFILTERS) \
                rastertolabel rastertoepson rastertohp
-TARGETS        =       $(FILTERS) testraster
+TARGETS        =       $(FILTERS) \
+               $(LIBCUPSIMAGE) \
+               libcupsimage.a \
+               $(LIB32CUPSIMAGE) \
+               $(LIB64CUPSIMAGE) \
+               testimage \
+               testraster
 
 HPGLOBJS =     hpgl-attr.o hpgl-config.o hpgl-main.o hpgl-prolog.o \
                hpgl-char.o hpgl-input.o hpgl-polygon.o hpgl-vector.o
@@ -36,18 +42,20 @@ IMAGEOBJS = image-bmp.o image-colorspace.o image-gif.o image-jpeg.o \
                image-photocd.o image-pix.o image-png.o image-pnm.o \
                image-sgi.o image-sgilib.o image-sun.o image-tiff.o \
                image-zoom.o image.o interpret.o raster.o
+IMAGE32OBJS =  $(IMAGEOBJS:.o=.32.o)
+IMAGE64OBJS =  $(IMAGEOBJS:.o=.64.o)
 FORMOBJS =     form-attr.o form-main.o form-ps.o form-text.o form-tree.o
 OBJS   =       $(HPGLOBJS) $(IMAGEOBJS) $(FORMOBJS) \
-               imagetops.o imagetoraster.o common.o pstops.o raster.o \
-               rastertolabel.o rastertoepson.o rastertohp.o \
-               texttops.o textcommon.o testraster.o gziptoany.o
+               gziptoany.o imagetops.o imagetoraster.o common.o pstops.o \
+               raster.o rastertoepson.o rastertohp.o rastertolabel.o \
+               testimage.o testraster.o textcommon.o texttops.o
 
 
 #
 # Make all targets...
 #
 
-all:   $(TARGETS) $(LIBCUPSIMAGE) libcupsimage.a
+all:   $(TARGETS)
 
 
 #
@@ -55,8 +63,9 @@ all:  $(TARGETS) $(LIBCUPSIMAGE) libcupsimage.a
 #
 
 clean:
-       $(RM) $(OBJS) $(TARGETS) $(LIBCUPSIMAGE) libcupsimage.a
-       $(RM) `basename $(LIBCUPSIMAGE) .2` libcupsimage.dylib
+       $(RM) $(OBJS) $(TARGETS)
+       $(RM) libcupsimage.so libcupsimage.sl libcupsimage.dylib
+       $(RM) libcupsimage.32.so libcupsimage.64.so
 
 
 #
@@ -64,14 +73,20 @@ clean:
 #
 
 depend:
-       makedepend -Y -I.. -fDependencies $(OBJS:.o=.c) >/dev/null 2>&1
+       touch Dependencies.tmp
+       makedepend -Y -I.. -fDependencies.tmp $(OBJS:.o=.c) >/dev/null 2>&1
+       $(RM) Dependencies
+       cp Dependencies.tmp Dependencies
+       sed -r -e '1,$$s/^([^.]+)\.o:/\1\.32.o: \1\.c /' Dependencies.tmp >>Dependencies
+       sed -r -e '1,$$s/^([^.]+)\.o:/\1\.64.o: \1\.c /' Dependencies.tmp >>Dependencies
+       $(RM) Dependencies.tmp
 
 
 #
 # Install all targets...
 #
 
-install:       all installhdrs $(INSTALLSTATIC)
+install:       all installhdrs $(INSTALLSTATIC) $(INSTALL32) $(INSTALL64)
        $(INSTALL_DIR) -m 755 $(SERVERBIN)/filter
        for file in $(FILTERS); do \
                $(INSTALL_BIN) $$file $(SERVERBIN)/filter; \
@@ -102,12 +117,22 @@ installhdrs:
        $(INSTALL_DATA) image.h $(INCLUDEDIR)/cups
        $(INSTALL_DATA) raster.h $(INCLUDEDIR)/cups
 
+install32bit:
+       $(INSTALL_DIR) -m 755 $(LIB32DIR)
+       $(INSTALL_LIB) libcupsimage.32.so.2 $(LIB32DIR)/libcupsimage.so.2
+       $(LN) libcupsimage.so $(LIB32DIR)/libcupsimage.so.2
+
+install64bit:
+       $(INSTALL_DIR) -m 755 $(LIB64DIR)
+       $(INSTALL_LIB) libcupsimage.64.so.2 $(LIB64DIR)/libcupsimage.so.2
+       $(LN) libcupsimage.so $(LIB64DIR)/libcupsimage.so.2
+
 
 #
 # Uninstall all targets...
 #
 
-uninstall:
+uninstall: $(UNINSTALL32) $(UNINSTALL64)
        for file in $(FILTERS); do \
                $(RM) $(SERVERBIN)/filter/$$file; \
        done
@@ -127,6 +152,16 @@ uninstall:
        $(RM) $(INCLUDEDIR)/cups/raster.h
        -$(RMDIR) $(INCLUDEDIR)/cups
 
+uninstall32bit:
+       $(RM) $(LIB32DIR)/libcupsimage.so
+       $(RM) $(LIB32DIR)/libcupsimage.so.2
+       -$(RMDIR) $(LIB32DIR)
+
+uninstall64bit:
+       $(RM) $(LIB64DIR)/libcupsimage.so
+       $(RM) $(LIB64DIR)/libcupsimage.so.2
+       -$(RMDIR) $(LIB64DIR)
+
 
 #
 # Automatic API help files...
@@ -172,18 +207,36 @@ hpgltops: $(HPGLOBJS) common.o ../cups/$(LIBCUPS)
 
 libcupsimage.so.2 libcupsimage.sl.2:   $(IMAGEOBJS)
        echo Linking $@...
-       $(DSO) $(DSOFLAGS) -o $@ $(IMAGEOBJS) $(DSOLIBS) -lm
+       $(DSO) $(ARCHFLAGS) $(DSOFLAGS) -o $@ $(IMAGEOBJS) $(DSOLIBS) -lm
        $(RM) `basename $@ .2`
        $(LN) $@ `basename $@ .2`
 
 
+#
+# libcupsimage.32.so.2
+#
+
+libcupsimage.32.so.2:  $(IMAGE32OBJS)
+       echo Linking 32-bit $@...
+       $(DSO) $(ARCH32FLAGS) $(DSOFLAGS) -o $@ $(IMAGE32OBJS) $(DSOLIBS) -lm
+
+
+#
+# libcupsimage.64.so.2
+#
+
+libcupsimage.64.so.2:  $(IMAGE64OBJS)
+       echo Linking 64-bit $@...
+       $(DSO) $(ARCH64FLAGS) $(DSOFLAGS) -o $@ $(IMAGE64OBJS) $(DSOLIBS) -lm
+
+
 #
 # libcupsimage.2.dylib
 #
 
 libcupsimage.2.dylib:  $(IMAGEOBJS)
        echo Linking $@...
-       $(DSO) $(DSOFLAGS) -o $@ \
+       $(DSO) $(ARCHFLAGS) $(DSOFLAGS) -o $@ \
                -install_name $(libdir)/$@ \
                -current_version 2.2.0 \
                -compatibility_version 2.0.0 \
@@ -198,8 +251,8 @@ libcupsimage.2.dylib:       $(IMAGEOBJS)
 
 libcupsimage_s.a:      $(IMAGEOBJS)
        echo Linking $@...
-       $(DSO) $(DSOFLAGS) -Wl,-berok -o libcupsimage_s.o $(IMAGEOBJS) \
-               $(DSOLIBS) -lm
+       $(DSO) $(DSOFLAGS) -Wl,-berok,-bexport:libcupsimage_s.exp \
+               -o libcupsimage_s.o $(IMAGEOBJS) $(DSOLIBS) -lm
        $(RM) $@
        $(AR) $(ARFLAGS) $@ libcupsimage_s.o
 
@@ -210,7 +263,7 @@ libcupsimage_s.a:   $(IMAGEOBJS)
 
 libcupsimage.la:       $(IMAGEOBJS)
        echo Linking $@...
-       $(DSO) $(DSOFLAGS) -o $@ $(IMAGEOBJS:.o=.lo) $(DSOLIBS) \
+       $(DSO) $(ARCHFLAGS) $(DSOFLAGS) -o $@ $(IMAGEOBJS:.o=.lo) $(DSOLIBS) \
                -rpath $(LIBDIR) -version-info 2:2
 
 
@@ -320,5 +373,5 @@ include Dependencies
 
 
 #
-# End of "$Id: Makefile 5229 2006-03-05 16:48:12Z mike $".
+# End of "$Id: Makefile 5311 2006-03-19 13:21:42Z mike $".
 #
diff --git a/filter/libcupsimage_s.exp b/filter/libcupsimage_s.exp
new file mode 100644 (file)
index 0000000..b6c3e2e
--- /dev/null
@@ -0,0 +1,15 @@
+_cupsImagePutCol
+_cupsImagePutRow
+_cupsImageReadBMP
+_cupsImageReadGIF
+_cupsImageReadJPEG
+_cupsImageReadPIX
+_cupsImageReadPNG
+_cupsImageReadPNM
+_cupsImageReadPhotoCD
+_cupsImageReadSGI
+_cupsImageReadSunRaster
+_cupsImageReadTIFF
+_cupsImageZoomDelete
+_cupsImageZoomFill
+_cupsImageZoomNew
index a2270048a888c9a657a8053649da3a56c5492fc5..90de48f8241543fdcbbc9b02d3eaf82d50f081a0 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: rastertolabel.c 4920 2006-01-12 15:12:12Z mike $"
+ * "$Id: rastertolabel.c 5287 2006-03-13 16:41:45Z mike $"
  *
  *   Label printer filter for the Common UNIX Printing System (CUPS).
  *
@@ -156,7 +156,7 @@ Setup(ppd_file_t *ppd)                      /* I - PPD file */
  */
 
 void
-StartPage(ppd_file_t *ppd,             /* I - PPD file */
+StartPage(ppd_file_t         *ppd,     /* I - PPD file */
           cups_page_header_t *header)  /* I - Page header */
 {
   ppd_choice_t *choice;                /* Marked choice */
@@ -166,6 +166,54 @@ StartPage(ppd_file_t *ppd,         /* I - PPD file */
 #endif /* HAVE_SIGACTION && !HAVE_SIGSET */
 
 
+ /*
+  * Show page device dictionary...
+  */
+
+  fprintf(stderr, "DEBUG: StartPage...\n");
+  fprintf(stderr, "DEBUG: MediaClass = \"%s\"\n", header->MediaClass);
+  fprintf(stderr, "DEBUG: MediaColor = \"%s\"\n", header->MediaColor);
+  fprintf(stderr, "DEBUG: MediaType = \"%s\"\n", header->MediaType);
+  fprintf(stderr, "DEBUG: OutputType = \"%s\"\n", header->OutputType);
+
+  fprintf(stderr, "DEBUG: AdvanceDistance = %d\n", header->AdvanceDistance);
+  fprintf(stderr, "DEBUG: AdvanceMedia = %d\n", header->AdvanceMedia);
+  fprintf(stderr, "DEBUG: Collate = %d\n", header->Collate);
+  fprintf(stderr, "DEBUG: CutMedia = %d\n", header->CutMedia);
+  fprintf(stderr, "DEBUG: Duplex = %d\n", header->Duplex);
+  fprintf(stderr, "DEBUG: HWResolution = [ %d %d ]\n", header->HWResolution[0],
+          header->HWResolution[1]);
+  fprintf(stderr, "DEBUG: ImagingBoundingBox = [ %d %d %d %d ]\n",
+          header->ImagingBoundingBox[0], header->ImagingBoundingBox[1],
+          header->ImagingBoundingBox[2], header->ImagingBoundingBox[3]);
+  fprintf(stderr, "DEBUG: InsertSheet = %d\n", header->InsertSheet);
+  fprintf(stderr, "DEBUG: Jog = %d\n", header->Jog);
+  fprintf(stderr, "DEBUG: LeadingEdge = %d\n", header->LeadingEdge);
+  fprintf(stderr, "DEBUG: Margins = [ %d %d ]\n", header->Margins[0],
+          header->Margins[1]);
+  fprintf(stderr, "DEBUG: ManualFeed = %d\n", header->ManualFeed);
+  fprintf(stderr, "DEBUG: MediaPosition = %d\n", header->MediaPosition);
+  fprintf(stderr, "DEBUG: MediaWeight = %d\n", header->MediaWeight);
+  fprintf(stderr, "DEBUG: MirrorPrint = %d\n", header->MirrorPrint);
+  fprintf(stderr, "DEBUG: NegativePrint = %d\n", header->NegativePrint);
+  fprintf(stderr, "DEBUG: NumCopies = %d\n", header->NumCopies);
+  fprintf(stderr, "DEBUG: Orientation = %d\n", header->Orientation);
+  fprintf(stderr, "DEBUG: OutputFaceUp = %d\n", header->OutputFaceUp);
+  fprintf(stderr, "DEBUG: PageSize = [ %d %d ]\n", header->PageSize[0],
+          header->PageSize[1]);
+  fprintf(stderr, "DEBUG: Separations = %d\n", header->Separations);
+  fprintf(stderr, "DEBUG: TraySwitch = %d\n", header->TraySwitch);
+  fprintf(stderr, "DEBUG: Tumble = %d\n", header->Tumble);
+  fprintf(stderr, "DEBUG: cupsWidth = %d\n", header->cupsWidth);
+  fprintf(stderr, "DEBUG: cupsHeight = %d\n", header->cupsHeight);
+  fprintf(stderr, "DEBUG: cupsMediaType = %d\n", header->cupsMediaType);
+  fprintf(stderr, "DEBUG: cupsBitsPerColor = %d\n", header->cupsBitsPerColor);
+  fprintf(stderr, "DEBUG: cupsBitsPerPixel = %d\n", header->cupsBitsPerPixel);
+  fprintf(stderr, "DEBUG: cupsBytesPerLine = %d\n", header->cupsBytesPerLine);
+  fprintf(stderr, "DEBUG: cupsColorOrder = %d\n", header->cupsColorOrder);
+  fprintf(stderr, "DEBUG: cupsColorSpace = %d\n", header->cupsColorSpace);
+  fprintf(stderr, "DEBUG: cupsCompression = %d\n", header->cupsCompression);
+
  /*
   * Register a signal handler to eject the current page if the
   * job is canceled.
@@ -955,5 +1003,5 @@ main(int  argc,                            /* I - Number of command-line arguments */
 
 
 /*
- * End of "$Id: rastertolabel.c 4920 2006-01-12 15:12:12Z mike $".
+ * End of "$Id: rastertolabel.c 5287 2006-03-13 16:41:45Z mike $".
  */
index a3443f370cc5e6beb062fdf165906b6d6999b993..ca5c31fb29ae0a5a3f3ea09a4b8b74fd0f869bad 100644 (file)
@@ -3,7 +3,7 @@
  *
  *   Image library test program for the Common UNIX Printing System (CUPS).
  *
- *   Copyright 1993-2005 by Easy Software Products.
+ *   Copyright 1993-2006 by Easy Software Products.
  *
  *   These coded instructions, statements, and computer programs are the
  *   property of Easy Software Products and are protected by Federal
  * 'main()' - Main entry...
  */
 
-int                            /* O - Exit status */
-main(int  argc,                        /* I - Number of command-line arguments */
-     char *argv[])             /* I - Command-line arguments */
+int                                    /* O - Exit status */
+main(int  argc,                                /* I - Number of command-line arguments */
+     char *argv[])                     /* I - Command-line arguments */
 {
-  image_t      *img;           /* Image to print */
-  int          primary;        /* Primary image colorspace */
-  FILE         *out;           /* Output PPM/PGM file */
-  ib_t         *line;          /* Line from file */
-  int          y;              /* Current line */
+  cups_image_t         *img;           /* Image to print */
+  cups_icspace_t       primary;        /* Primary image colorspace */
+  FILE                 *out;           /* Output PPM/PGM file */
+  cups_ib_t            *line;          /* Line from file */
+  int                  y,              /* Current line */
+                       width,          /* Width of image */
+                       height,         /* Height of image */
+                       depth;          /* Depth of image */
 
 
   if (argc != 3)
@@ -57,11 +60,11 @@ main(int  argc,                     /* I - Number of command-line arguments */
   }
 
   if (strstr(argv[2], ".ppm") != NULL)
-    primary = IMAGE_RGB;
+    primary = CUPS_IMAGE_RGB;
   else
-    primary = IMAGE_WHITE;
+    primary = CUPS_IMAGE_WHITE;
 
-  img = ImageOpen(argv[1], primary, IMAGE_WHITE, 100, 0, NULL);
+  img = cupsImageOpen(argv[1], primary, CUPS_IMAGE_WHITE, 100, 0, NULL);
 
   if (!img)
   {
@@ -74,22 +77,26 @@ main(int  argc,                     /* I - Number of command-line arguments */
   if (!out)
   {
     perror(argv[2]);
-    ImageClose(img);
+    cupsImageClose(img);
     return (1);
   }
 
-  line = calloc(img->xsize, img->colorspace);
+  width  = cupsImageGetWidth(img);
+  height = cupsImageGetHeight(img);
+  depth  = cupsImageGetDepth(img);
+  line   = calloc(width, depth);
 
-  fprintf(out, "P%d\n%d\n%d\n255\n", img->colorspace == IMAGE_WHITE ? 5 : 6,
-          img->xsize, img->ysize);
+  fprintf(out, "P%d\n%d\n%d\n255\n",
+          cupsImageGetColorSpace(img) == CUPS_IMAGE_WHITE ? 5 : 6,
+          width, height);
 
-  for (y = 0; y < img->ysize; y ++)
+  for (y = 0; y < height; y ++)
   {
-    ImageGetRow(img, 0, y, img->xsize, line);
-    fwrite(line, img->xsize, img->colorspace, out);
+    cupsImageGetRow(img, 0, y, width, line);
+    fwrite(line, width, depth, out);
   }
 
-  ImageClose(img);
+  cupsImageClose(img);
   fclose(out);
 
   return (0);
diff --git a/init/cups-lpd.in b/init/cups-lpd.in
new file mode 100644 (file)
index 0000000..bf7e80a
--- /dev/null
@@ -0,0 +1,11 @@
+service printer
+{
+       socket_type = stream
+       protocol = tcp
+       wait = no
+       user = @CUPS_USER@
+       group = @CUPS_GROUP@
+       passenv =
+       server = @CUPS_SERVERBIN@/daemon/cups-lpd
+       server_args = -o document-format=application/octet-stream
+}
index b20190daf2cdd813f3a46785495982f1b2607983..e75545eb80aa36896fccdf972a6479be4fb803b2 100644 (file)
@@ -1,5 +1,5 @@
 #
-# "$Id: Makefile 5229 2006-03-05 16:48:12Z mike $"
+# "$Id: Makefile 5308 2006-03-18 13:18:18Z mike $"
 #
 #   Locale file makefile for the Common UNIX Printing System (CUPS).
 #
 
 include ../Makedefs
 
-#
-# Locales...
-#
-
-LANGUAGES      =       ja
-
 
 #
 # Make everything...
@@ -114,5 +108,5 @@ translate.o:        ../cups/http.h ../cups/i18n.h ../cups/language.h ../cups/string.h
 
 
 #
-# End of "$Id: Makefile 5229 2006-03-05 16:48:12Z mike $".
+# End of "$Id: Makefile 5308 2006-03-18 13:18:18Z mike $".
 #
index d7bd8411a500602ab89e12cef5a6abd44946d9f6..17c16b70db54d22a137a2eed8db405c69e545036 100644 (file)
@@ -29,7 +29,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: CUPS 1.2\n"
 "Report-Msgid-Bugs-To: http://www.cups.org/str.php\n"
-"POT-Creation-Date: 2006-03-09 19:42-0500\n"
+"POT-Creation-Date: 2006-03-13 08:39-0500\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -57,37 +57,37 @@ msgstr ""
 #: cups/ppd.c:656 cups/ppd.c:881 cups/ppd.c:1047 cups/ppd.c:662 cups/ppd.c:996
 #: cups/ppd.c:1169 cups/ppd.c:651 cups/ppd.c:983 cups/ppd.c:1148
 #: cups/ppd.c:972 cups/ppd.c:1137 cups/ppd.c:646 cups/ppd.c:973
-#: cups/ppd.c:1138
+#: cups/ppd.c:1138 cups/ppd.c:970 cups/ppd.c:1135
 msgid "General"
 msgstr ""
 
 #: cups/ppd.c:704 cups/ppd.c:1105 cups/ppd.c:710 cups/ppd.c:1224
 #: cups/ppd.c:697 cups/ppd.c:1201 cups/ppd.c:1190 cups/ppd.c:692
-#: cups/ppd.c:1191
+#: cups/ppd.c:1191 cups/ppd.c:1188
 msgid "Media Size"
 msgstr ""
 
 #: cups/ppd.c:706 cups/ppd.c:1107 cups/ppd.c:712 cups/ppd.c:1226
 #: cups/ppd.c:699 cups/ppd.c:1203 cups/ppd.c:1192 cups/ppd.c:694
-#: cups/ppd.c:1193
+#: cups/ppd.c:1193 cups/ppd.c:1190
 msgid "Media Type"
 msgstr ""
 
 #: cups/ppd.c:708 cups/ppd.c:1109 cups/ppd.c:714 cups/ppd.c:1228
 #: cups/ppd.c:701 cups/ppd.c:1205 cups/ppd.c:1194 cups/ppd.c:696
-#: cups/ppd.c:1195
+#: cups/ppd.c:1195 cups/ppd.c:1192
 msgid "Media Source"
 msgstr ""
 
 #: cups/ppd.c:710 cups/ppd.c:1111 cups/ppd.c:716 cups/ppd.c:1230
 #: cups/ppd.c:703 cups/ppd.c:1207 cups/ppd.c:1196 cups/ppd.c:698
-#: cups/ppd.c:1197
+#: cups/ppd.c:1197 cups/ppd.c:1194
 msgid "Output Mode"
 msgstr ""
 
 #: cups/ppd.c:712 cups/ppd.c:1113 cups/ppd.c:718 cups/ppd.c:1232
 #: cups/ppd.c:705 cups/ppd.c:1209 cups/ppd.c:1198 cups/ppd.c:700
-#: cups/ppd.c:1199
+#: cups/ppd.c:1199 cups/ppd.c:1196
 msgid "Resolution"
 msgstr ""
 
@@ -96,12 +96,12 @@ msgid "Variable"
 msgstr ""
 
 #: cups/ppd.c:1535 cups/ppd.c:1650 cups/ppd.c:1627 cups/ppd.c:1616
-#: cups/ppd.c:1622
+#: cups/ppd.c:1622 cups/ppd.c:1619
 msgid "Yes"
 msgstr ""
 
 #: cups/ppd.c:1537 cups/ppd.c:1652 cups/ppd.c:1629 cups/ppd.c:1618
-#: cups/ppd.c:1624
+#: cups/ppd.c:1624 cups/ppd.c:1621
 msgid "No"
 msgstr ""
 
@@ -110,12 +110,12 @@ msgid "Auto"
 msgstr ""
 
 #: scheduler/client.c:2247 scheduler/client.c:2251 scheduler/client.c:2274
-#: scheduler/client.c:2308 scheduler/client.c:2349
+#: scheduler/client.c:2308 scheduler/client.c:2349 scheduler/client.c:2350
 msgid "Enter your username and password or the root username and password to access this page."
 msgstr ""
 
 #: scheduler/client.c:2252 scheduler/client.c:2256 scheduler/client.c:2279
-#: scheduler/client.c:2313 scheduler/client.c:2354
+#: scheduler/client.c:2313 scheduler/client.c:2354 scheduler/client.c:2355
 msgid "You must use a https: URL to access this page."
 msgstr ""
 
@@ -170,7 +170,11 @@ msgstr ""
 #: scheduler/ipp.c:5326 scheduler/ipp.c:5738 scheduler/ipp.c:6046
 #: scheduler/ipp.c:6337 scheduler/ipp.c:6379 scheduler/ipp.c:7116
 #: scheduler/ipp.c:8081 scheduler/ipp.c:8745 scheduler/ipp.c:8826
-#: scheduler/ipp.c:9001
+#: scheduler/ipp.c:9001 scheduler/ipp.c:4715 scheduler/ipp.c:4958
+#: scheduler/ipp.c:5342 scheduler/ipp.c:5754 scheduler/ipp.c:6062
+#: scheduler/ipp.c:6353 scheduler/ipp.c:6395 scheduler/ipp.c:7132
+#: scheduler/ipp.c:8097 scheduler/ipp.c:8761 scheduler/ipp.c:8842
+#: scheduler/ipp.c:9017
 msgid "The printer or class was not found."
 msgstr ""
 
@@ -215,21 +219,21 @@ msgstr ""
 
 #: scheduler/ipp.c:1290 scheduler/ipp.c:4501 scheduler/ipp.c:1316
 #: scheduler/ipp.c:4705 scheduler/ipp.c:1348 scheduler/ipp.c:4804
-#: scheduler/ipp.c:1810 scheduler/ipp.c:4773
+#: scheduler/ipp.c:1810 scheduler/ipp.c:4773 scheduler/ipp.c:4789
 #, c-format
 msgid "Character set \"%s\" not supported!"
 msgstr ""
 
 #: scheduler/ipp.c:1299 scheduler/ipp.c:4510 scheduler/ipp.c:1325
 #: scheduler/ipp.c:4714 scheduler/ipp.c:1357 scheduler/ipp.c:4813
-#: scheduler/ipp.c:1819 scheduler/ipp.c:4782
+#: scheduler/ipp.c:1819 scheduler/ipp.c:4782 scheduler/ipp.c:4798
 #, c-format
 msgid "Language \"%s\" not supported!"
 msgstr ""
 
 #: scheduler/ipp.c:1309 scheduler/ipp.c:4520 scheduler/ipp.c:1335
 #: scheduler/ipp.c:4724 scheduler/ipp.c:1367 scheduler/ipp.c:4823
-#: scheduler/ipp.c:1829 scheduler/ipp.c:4792
+#: scheduler/ipp.c:1829 scheduler/ipp.c:4792 scheduler/ipp.c:4808
 #, c-format
 msgid "The notify-user-data value is too large (%d > 63 octets)!"
 msgstr ""
@@ -275,13 +279,13 @@ msgid "Bad printer-state value %d!"
 msgstr ""
 
 #: scheduler/ipp.c:1762 scheduler/ipp.c:1800 scheduler/ipp.c:1842
-#: scheduler/ipp.c:8585
+#: scheduler/ipp.c:8585 scheduler/ipp.c:8601
 #, c-format
 msgid "Unknown printer-op-policy \"%s\"."
 msgstr ""
 
 #: scheduler/ipp.c:1775 scheduler/ipp.c:1813 scheduler/ipp.c:1855
-#: scheduler/ipp.c:8600
+#: scheduler/ipp.c:8600 scheduler/ipp.c:8616
 #, c-format
 msgid "Unknown printer-error-policy \"%s\"."
 msgstr ""
@@ -314,6 +318,8 @@ msgstr ""
 #: scheduler/ipp.c:8672 scheduler/ipp.c:2613 scheduler/ipp.c:2906
 #: scheduler/ipp.c:5189 scheduler/ipp.c:6179 scheduler/ipp.c:7203
 #: scheduler/ipp.c:7418 scheduler/ipp.c:7657 scheduler/ipp.c:8164
+#: scheduler/ipp.c:5205 scheduler/ipp.c:6195 scheduler/ipp.c:7219
+#: scheduler/ipp.c:7434 scheduler/ipp.c:7673 scheduler/ipp.c:8180
 msgid "Got a printer-uri attribute but no job-id!"
 msgstr ""
 
@@ -329,6 +335,9 @@ msgstr ""
 #: scheduler/ipp.c:2635 scheduler/ipp.c:2978 scheduler/ipp.c:5212
 #: scheduler/ipp.c:6202 scheduler/ipp.c:6425 scheduler/ipp.c:7226
 #: scheduler/ipp.c:7441 scheduler/ipp.c:7680 scheduler/ipp.c:8187
+#: scheduler/ipp.c:5228 scheduler/ipp.c:6218 scheduler/ipp.c:6441
+#: scheduler/ipp.c:7242 scheduler/ipp.c:7457 scheduler/ipp.c:7696
+#: scheduler/ipp.c:8203
 #, c-format
 msgid "Bad job-uri attribute \"%s\"!"
 msgstr ""
@@ -429,51 +438,52 @@ msgid "Unable to add job for destination \"%s\"!"
 msgstr ""
 
 #: scheduler/ipp.c:4469 scheduler/ipp.c:4673 scheduler/ipp.c:4770
-#: scheduler/ipp.c:4739
+#: scheduler/ipp.c:4739 scheduler/ipp.c:4755
 msgid "No subscription attributes in request!"
 msgstr ""
 
 #: scheduler/ipp.c:4559 scheduler/ipp.c:4763 scheduler/ipp.c:4869
-#: scheduler/ipp.c:4838
+#: scheduler/ipp.c:4838 scheduler/ipp.c:4854
 msgid "notify-events not specified!"
 msgstr ""
 
 #: scheduler/ipp.c:4577 scheduler/ipp.c:4781 scheduler/ipp.c:4887
-#: scheduler/ipp.c:4856
+#: scheduler/ipp.c:4856 scheduler/ipp.c:4872
 #, c-format
 msgid "Job %d not found!"
 msgstr ""
 
 #: scheduler/ipp.c:4827 scheduler/ipp.c:4957 scheduler/ipp.c:5075
-#: scheduler/ipp.c:5044
+#: scheduler/ipp.c:5044 scheduler/ipp.c:5060
 msgid "No default printer"
 msgstr ""
 
 #: scheduler/ipp.c:4930 scheduler/ipp.c:5060 scheduler/ipp.c:5178
-#: scheduler/ipp.c:5147
+#: scheduler/ipp.c:5147 scheduler/ipp.c:5163
 msgid "cups-deviced failed to execute."
 msgstr ""
 
 #: scheduler/ipp.c:5393 scheduler/ipp.c:5479 scheduler/ipp.c:5722
-#: scheduler/ipp.c:5691
+#: scheduler/ipp.c:5691 scheduler/ipp.c:5707
 msgid "cups-driverd failed to execute."
 msgstr ""
 
 #: scheduler/ipp.c:5571 scheduler/ipp.c:5594 scheduler/ipp.c:5837
-#: scheduler/ipp.c:5806
+#: scheduler/ipp.c:5806 scheduler/ipp.c:5822
 msgid "No destinations added."
 msgstr ""
 
 #: scheduler/ipp.c:5794 scheduler/ipp.c:5736 scheduler/ipp.c:2615
 #: scheduler/ipp.c:5530 scheduler/ipp.c:5979 scheduler/ipp.c:7840
 #: scheduler/ipp.c:3070 scheduler/ipp.c:5499 scheduler/ipp.c:5948
-#: scheduler/ipp.c:7330
+#: scheduler/ipp.c:7330 scheduler/ipp.c:3086 scheduler/ipp.c:5515
+#: scheduler/ipp.c:5964 scheduler/ipp.c:7346
 #, c-format
 msgid "notify-subscription-id %d no good!"
 msgstr ""
 
 #: scheduler/ipp.c:5878 scheduler/ipp.c:5822 scheduler/ipp.c:6065
-#: scheduler/ipp.c:6034
+#: scheduler/ipp.c:6034 scheduler/ipp.c:6050
 #, c-format
 msgid "Job #%s does not exist!"
 msgstr ""
@@ -492,13 +502,16 @@ msgstr ""
 #: scheduler/ipp.c:2996 scheduler/ipp.c:5230 scheduler/ipp.c:6056
 #: scheduler/ipp.c:6220 scheduler/ipp.c:6398 scheduler/ipp.c:6443
 #: scheduler/ipp.c:7244 scheduler/ipp.c:7459 scheduler/ipp.c:7698
-#: scheduler/ipp.c:8205
+#: scheduler/ipp.c:8205 scheduler/ipp.c:5246 scheduler/ipp.c:6072
+#: scheduler/ipp.c:6236 scheduler/ipp.c:6414 scheduler/ipp.c:6459
+#: scheduler/ipp.c:7260 scheduler/ipp.c:7475 scheduler/ipp.c:7714
+#: scheduler/ipp.c:8221
 #, c-format
 msgid "Job #%d does not exist!"
 msgstr ""
 
 #: scheduler/ipp.c:5969 scheduler/ipp.c:5915 scheduler/ipp.c:6150
-#: scheduler/ipp.c:6119
+#: scheduler/ipp.c:6119 scheduler/ipp.c:6135
 msgid "No subscriptions found."
 msgstr ""
 
@@ -509,7 +522,8 @@ msgstr ""
 
 #: scheduler/ipp.c:6203 scheduler/ipp.c:8315 scheduler/ipp.c:6250
 #: scheduler/ipp.c:8390 scheduler/ipp.c:6505 scheduler/ipp.c:8728
-#: scheduler/ipp.c:6474 scheduler/ipp.c:8220
+#: scheduler/ipp.c:6474 scheduler/ipp.c:8220 scheduler/ipp.c:6490
+#: scheduler/ipp.c:8236
 #, c-format
 msgid "Job #%d is finished and cannot be altered!"
 msgstr ""
@@ -520,32 +534,35 @@ msgid "You are not authorized to move job #%d owned by \"%s\"!"
 msgstr ""
 
 #: scheduler/ipp.c:6228 scheduler/ipp.c:6098 scheduler/ipp.c:6353
-#: scheduler/ipp.c:6322
+#: scheduler/ipp.c:6322 scheduler/ipp.c:6338
 msgid "job-printer-uri attribute missing!"
 msgstr ""
 
 #: scheduler/ipp.c:6485 scheduler/ipp.c:7847 scheduler/ipp.c:6531
 #: scheduler/ipp.c:7913 scheduler/ipp.c:6783 scheduler/ipp.c:8238
-#: scheduler/ipp.c:6703 scheduler/ipp.c:7728
+#: scheduler/ipp.c:6703 scheduler/ipp.c:7728 scheduler/ipp.c:6719
+#: scheduler/ipp.c:7744
 #, c-format
 msgid "Unsupported compression \"%s\"!"
 msgstr ""
 
 #: scheduler/ipp.c:6504 scheduler/ipp.c:7866 scheduler/ipp.c:6550
 #: scheduler/ipp.c:7932 scheduler/ipp.c:6802 scheduler/ipp.c:8257
-#: scheduler/ipp.c:6722 scheduler/ipp.c:7747
+#: scheduler/ipp.c:6722 scheduler/ipp.c:7747 scheduler/ipp.c:6738
+#: scheduler/ipp.c:7763
 msgid "No file!?!"
 msgstr ""
 
 #: scheduler/ipp.c:6522 scheduler/ipp.c:6568 scheduler/ipp.c:6820
-#: scheduler/ipp.c:6740
+#: scheduler/ipp.c:6740 scheduler/ipp.c:6756
 #, c-format
 msgid "Could not scan type \"%s\"!"
 msgstr ""
 
 #: scheduler/ipp.c:6574 scheduler/ipp.c:7936 scheduler/ipp.c:6620
 #: scheduler/ipp.c:8001 scheduler/ipp.c:6879 scheduler/ipp.c:8332
-#: scheduler/ipp.c:6799 scheduler/ipp.c:7822
+#: scheduler/ipp.c:6799 scheduler/ipp.c:7822 scheduler/ipp.c:6815
+#: scheduler/ipp.c:7838
 #, c-format
 msgid "Unsupported format '%s/%s'!"
 msgstr ""
@@ -560,7 +577,7 @@ msgid "Too many jobs - %d jobs, max jobs is %d."
 msgstr ""
 
 #: scheduler/ipp.c:7448 scheduler/ipp.c:7507 scheduler/ipp.c:7768
-#: scheduler/ipp.c:7258
+#: scheduler/ipp.c:7258 scheduler/ipp.c:7274
 #, c-format
 msgid "Job #%d is not held!"
 msgstr ""
@@ -571,13 +588,13 @@ msgid "You are not authorized to release job id %d owned by \"%s\"!"
 msgstr ""
 
 #: scheduler/ipp.c:7592 scheduler/ipp.c:7654 scheduler/ipp.c:7983
-#: scheduler/ipp.c:7473
+#: scheduler/ipp.c:7473 scheduler/ipp.c:7489
 #, c-format
 msgid "Job #%d is not complete!"
 msgstr ""
 
 #: scheduler/ipp.c:7608 scheduler/ipp.c:7670 scheduler/ipp.c:8001
-#: scheduler/ipp.c:7491
+#: scheduler/ipp.c:7491 scheduler/ipp.c:7507
 #, c-format
 msgid "Job #%d cannot be restarted - no files!"
 msgstr ""
@@ -594,7 +611,8 @@ msgstr ""
 
 #: scheduler/ipp.c:7883 scheduler/ipp.c:8803 scheduler/ipp.c:7949
 #: scheduler/ipp.c:8883 scheduler/ipp.c:8274 scheduler/ipp.c:9225
-#: scheduler/ipp.c:7764 scheduler/ipp.c:8967
+#: scheduler/ipp.c:7764 scheduler/ipp.c:8967 scheduler/ipp.c:7780
+#: scheduler/ipp.c:8983
 #, c-format
 msgid "Bad document-format \"%s\"!"
 msgstr ""
@@ -605,23 +623,23 @@ msgid "You are not authorized to alter job id %d owned by \"%s\"!"
 msgstr ""
 
 #: scheduler/ipp.c:8371 scheduler/ipp.c:8446 scheduler/ipp.c:8783
-#: scheduler/ipp.c:8275
+#: scheduler/ipp.c:8275 scheduler/ipp.c:8291
 #, c-format
 msgid "%s cannot be changed."
 msgstr ""
 
 #: scheduler/ipp.c:8387 scheduler/ipp.c:8462 scheduler/ipp.c:8799
-#: scheduler/ipp.c:8291
+#: scheduler/ipp.c:8291 scheduler/ipp.c:8307
 msgid "Bad job-priority value!"
 msgstr ""
 
 #: scheduler/ipp.c:8395 scheduler/ipp.c:8470 scheduler/ipp.c:8807
-#: scheduler/ipp.c:8299
+#: scheduler/ipp.c:8299 scheduler/ipp.c:8315
 msgid "Job is completed and cannot be changed."
 msgstr ""
 
 #: scheduler/ipp.c:8409 scheduler/ipp.c:8484 scheduler/ipp.c:8821
-#: scheduler/ipp.c:8313
+#: scheduler/ipp.c:8313 scheduler/ipp.c:8329
 msgid "Bad job-state value!"
 msgstr ""
 
@@ -629,17 +647,18 @@ msgstr ""
 #: scheduler/ipp.c:8498 scheduler/ipp.c:8510 scheduler/ipp.c:8521
 #: scheduler/ipp.c:8835 scheduler/ipp.c:8850 scheduler/ipp.c:8861
 #: scheduler/ipp.c:8327 scheduler/ipp.c:8342 scheduler/ipp.c:8353
+#: scheduler/ipp.c:8343 scheduler/ipp.c:8358 scheduler/ipp.c:8369
 msgid "Job state cannot be changed."
 msgstr ""
 
 #: scheduler/ipp.c:8787 scheduler/ipp.c:8867 scheduler/ipp.c:9209
-#: scheduler/ipp.c:8951
+#: scheduler/ipp.c:8951 scheduler/ipp.c:8967
 #, c-format
 msgid "Unsupported compression attribute %s!"
 msgstr ""
 
 #: scheduler/ipp.c:8815 scheduler/ipp.c:8894 scheduler/ipp.c:9236
-#: scheduler/ipp.c:8978
+#: scheduler/ipp.c:8978 scheduler/ipp.c:8994
 #, c-format
 msgid "Unsupported format \"%s\"!"
 msgstr ""
@@ -2910,10 +2929,12 @@ msgid "Unknown"
 msgstr ""
 
 #: cups/ppd.c:1033 cups/ppd.c:1020 cups/ppd.c:1009 cups/ppd.c:1010
+#: cups/ppd.c:1007
 msgid "Custom"
 msgstr ""
 
 #: cups/ppd.c:1259 cups/ppd.c:1236 cups/ppd.c:1225 cups/ppd.c:1226
+#: cups/ppd.c:1223
 msgid "JCL"
 msgstr ""
 
@@ -3331,11 +3352,11 @@ msgstr ""
 msgid "idle"
 msgstr ""
 
-#: scheduler/ipp.c:5513 scheduler/ipp.c:5482
+#: scheduler/ipp.c:5513 scheduler/ipp.c:5482 scheduler/ipp.c:5498
 msgid "Missing notify-subscription-ids attribute!"
 msgstr ""
 
-#: scheduler/ipp.c:7851 scheduler/ipp.c:7341
+#: scheduler/ipp.c:7851 scheduler/ipp.c:7341 scheduler/ipp.c:7357
 msgid "Job subscriptions cannot be renewed!"
 msgstr ""
 
@@ -3549,6 +3570,21 @@ msgstr ""
 msgid "stat of %s failed: %s"
 msgstr ""
 
+#: scheduler/ipp.c:3021
+#, c-format
+msgid "Job #%d is already cancelled - can't cancel."
+msgstr ""
+
+#: scheduler/ipp.c:3027
+#, c-format
+msgid "Job #%d is already aborted - can't cancel."
+msgstr ""
+
+#: scheduler/ipp.c:3033
+#, c-format
+msgid "Job #%d is already completed - can't cancel."
+msgstr ""
+
 
 #
 # End of "$Id$".
diff --git a/locale/cups_es.po b/locale/cups_es.po
new file mode 100644 (file)
index 0000000..45804bb
--- /dev/null
@@ -0,0 +1,3908 @@
+# "$Id$"
+# Message catalog template for the Common UNIX Printing System (CUPS).
+# Copyright 2005-2006 by Easy Software Products.
+# These coded instructions, statements, and computer programs are the
+# property of Easy Software Products and are protected by Federal
+# copyright law.  Distribution and use rights are outlined in the file
+# "LICENSE.txt" which should have been included with this file.  If this
+# file is missing or damaged please contact Easy Software Products
+# at:
+# Attn: CUPS Licensing Information
+# Easy Software Products
+# 44141 Airport View Drive, Suite 204
+# Hollywood, Maryland 20636 USA
+# Voice: (301) 373-9600
+# EMail: cups-info@cups.org
+# WWW: http://www.cups.org
+# , fuzzy
+# <>, 2006.
+# 
+# 
+msgid ""
+msgstr ""
+"Project-Id-Version: CUPS 1.2\n"
+"Report-Msgid-Bugs-To: http://www.cups.org/str.php\n"
+"POT-Creation-Date: 2006-03-13 08:39-0500\n"
+"PO-Revision-Date: 2006-03-13 17:36+0100\n"
+"Last-Translator: Juan Pablo González Riopedre <riopedre@tiscali.es>\n"
+"Language-Team: Spanish\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit"
+
+#: cgi-bin/admin.c:1276 cgi-bin/admin.c:1154 cgi-bin/admin.c:1195
+#: cgi-bin/admin.c:1203
+msgid "Options Installed"
+msgstr "Opciones instaladas"
+
+#: cgi-bin/classes.c:103
+msgid "Class"
+msgstr "Clase"
+
+#: cgi-bin/printers.c:104
+msgid "Printer"
+msgstr "Impresora"
+
+#: cups/ppd.c:654 cups/ppd.c:1045 cups/ppd.c:660 cups/ppd.c:1167
+msgid "Extra"
+msgstr "Extra"
+
+#: cups/ppd.c:656 cups/ppd.c:881 cups/ppd.c:1047 cups/ppd.c:662 cups/ppd.c:996
+#: cups/ppd.c:1169 cups/ppd.c:651 cups/ppd.c:983 cups/ppd.c:1148
+#: cups/ppd.c:972 cups/ppd.c:1137 cups/ppd.c:646 cups/ppd.c:973
+#: cups/ppd.c:1138 cups/ppd.c:970 cups/ppd.c:1135
+msgid "General"
+msgstr "General"
+
+#: cups/ppd.c:704 cups/ppd.c:1105 cups/ppd.c:710 cups/ppd.c:1224
+#: cups/ppd.c:697 cups/ppd.c:1201 cups/ppd.c:1190 cups/ppd.c:692
+#: cups/ppd.c:1191 cups/ppd.c:1188
+msgid "Media Size"
+msgstr "Tamaño de papel"
+
+#: cups/ppd.c:706 cups/ppd.c:1107 cups/ppd.c:712 cups/ppd.c:1226
+#: cups/ppd.c:699 cups/ppd.c:1203 cups/ppd.c:1192 cups/ppd.c:694
+#: cups/ppd.c:1193 cups/ppd.c:1190
+msgid "Media Type"
+msgstr "Tipo de papel"
+
+#: cups/ppd.c:708 cups/ppd.c:1109 cups/ppd.c:714 cups/ppd.c:1228
+#: cups/ppd.c:701 cups/ppd.c:1205 cups/ppd.c:1194 cups/ppd.c:696
+#: cups/ppd.c:1195 cups/ppd.c:1192
+msgid "Media Source"
+msgstr "Fuente del papel"
+
+#: cups/ppd.c:710 cups/ppd.c:1111 cups/ppd.c:716 cups/ppd.c:1230
+#: cups/ppd.c:703 cups/ppd.c:1207 cups/ppd.c:1196 cups/ppd.c:698
+#: cups/ppd.c:1197 cups/ppd.c:1194
+msgid "Output Mode"
+msgstr "Modo de salida"
+
+#: cups/ppd.c:712 cups/ppd.c:1113 cups/ppd.c:718 cups/ppd.c:1232
+#: cups/ppd.c:705 cups/ppd.c:1209 cups/ppd.c:1198 cups/ppd.c:700
+#: cups/ppd.c:1199 cups/ppd.c:1196
+msgid "Resolution"
+msgstr "Resolución"
+
+#: cups/ppd.c:907
+msgid "Variable"
+msgstr "Variable"
+
+#: cups/ppd.c:1535 cups/ppd.c:1650 cups/ppd.c:1627 cups/ppd.c:1616
+#: cups/ppd.c:1622 cups/ppd.c:1619
+msgid "Yes"
+msgstr "Si"
+
+#: cups/ppd.c:1537 cups/ppd.c:1652 cups/ppd.c:1629 cups/ppd.c:1618
+#: cups/ppd.c:1624 cups/ppd.c:1621
+msgid "No"
+msgstr "No"
+
+#: cups/ppd.c:1824
+msgid "Auto"
+msgstr "Auto"
+
+#: scheduler/client.c:2247 scheduler/client.c:2251 scheduler/client.c:2274
+#: scheduler/client.c:2308 scheduler/client.c:2349 scheduler/client.c:2350
+msgid ""
+"Enter your username and password or the root username and password to access "
+"this page."
+msgstr ""
+"Introduzca su nombre de usuario y contraseña o el nombre de usuario y "
+"contraseña de root para poder acceder a esta página"
+
+#: scheduler/client.c:2252 scheduler/client.c:2256 scheduler/client.c:2279
+#: scheduler/client.c:2313 scheduler/client.c:2354 scheduler/client.c:2355
+msgid "You must use a https: URL to access this page."
+msgstr "Debe escribir una URL https para acceder a esta página."
+
+#: scheduler/ipp.c:236 scheduler/ipp.c:244 scheduler/ipp.c:246
+#: scheduler/ipp.c:260
+#, c-format
+msgid "Bad request version number %d.%d!"
+msgstr "Petición incorrecta de número de versión %d %d."
+
+#: scheduler/ipp.c:246 scheduler/ipp.c:254 scheduler/ipp.c:256
+#: scheduler/ipp.c:270
+msgid "No attributes in request!"
+msgstr "No hay atributos en la solicitud."
+
+#: scheduler/ipp.c:269 scheduler/ipp.c:277 scheduler/ipp.c:279
+#: scheduler/ipp.c:293
+#, c-format
+msgid "Attribute groups are out of order (%x < %x)!"
+msgstr "Los grupos de atributos no están ordenados (%x < %x)."
+
+#: scheduler/ipp.c:379 scheduler/ipp.c:389 scheduler/ipp.c:391
+#: scheduler/ipp.c:405
+msgid "Missing required attributes!"
+msgstr "Faltan atributos necesarios."
+
+#: scheduler/ipp.c:575 scheduler/ipp.c:585 scheduler/ipp.c:591
+#: scheduler/ipp.c:605
+#, c-format
+msgid "%s not supported!"
+msgstr "No se admite el uso de %s."
+
+#: scheduler/ipp.c:684 scheduler/ipp.c:1055 scheduler/ipp.c:2271
+#: scheduler/ipp.c:2383 scheduler/ipp.c:3707 scheduler/ipp.c:4417
+#: scheduler/ipp.c:4649 scheduler/ipp.c:5002 scheduler/ipp.c:5445
+#: scheduler/ipp.c:5890 scheduler/ipp.c:6245 scheduler/ipp.c:6609
+#: scheduler/ipp.c:7308 scheduler/ipp.c:8179 scheduler/ipp.c:8585
+#: scheduler/ipp.c:8663 scheduler/ipp.c:8836 scheduler/ipp.c:696
+#: scheduler/ipp.c:1079 scheduler/ipp.c:2318 scheduler/ipp.c:2433
+#: scheduler/ipp.c:3901 scheduler/ipp.c:4621 scheduler/ipp.c:4855
+#: scheduler/ipp.c:5237 scheduler/ipp.c:5526 scheduler/ipp.c:5834
+#: scheduler/ipp.c:6113 scheduler/ipp.c:6155 scheduler/ipp.c:6657
+#: scheduler/ipp.c:7365 scheduler/ipp.c:8251 scheduler/ipp.c:8662
+#: scheduler/ipp.c:8742 scheduler/ipp.c:8917 scheduler/ipp.c:702
+#: scheduler/ipp.c:1093 scheduler/ipp.c:2357 scheduler/ipp.c:2472
+#: scheduler/ipp.c:3993 scheduler/ipp.c:4730 scheduler/ipp.c:4973
+#: scheduler/ipp.c:5357 scheduler/ipp.c:5769 scheduler/ipp.c:6077
+#: scheduler/ipp.c:6368 scheduler/ipp.c:6410 scheduler/ipp.c:6916
+#: scheduler/ipp.c:7626 scheduler/ipp.c:8589 scheduler/ipp.c:9003
+#: scheduler/ipp.c:9084 scheduler/ipp.c:9259 scheduler/ipp.c:716
+#: scheduler/ipp.c:1003 scheduler/ipp.c:1174 scheduler/ipp.c:2812
+#: scheduler/ipp.c:2927 scheduler/ipp.c:4699 scheduler/ipp.c:4942
+#: scheduler/ipp.c:5326 scheduler/ipp.c:5738 scheduler/ipp.c:6046
+#: scheduler/ipp.c:6337 scheduler/ipp.c:6379 scheduler/ipp.c:7116
+#: scheduler/ipp.c:8081 scheduler/ipp.c:8745 scheduler/ipp.c:8826
+#: scheduler/ipp.c:9001 scheduler/ipp.c:4715 scheduler/ipp.c:4958
+#: scheduler/ipp.c:5342 scheduler/ipp.c:5754 scheduler/ipp.c:6062
+#: scheduler/ipp.c:6353 scheduler/ipp.c:6395 scheduler/ipp.c:7132
+#: scheduler/ipp.c:8097 scheduler/ipp.c:8761 scheduler/ipp.c:8842
+#: scheduler/ipp.c:9017
+msgid "The printer or class was not found."
+msgstr "No se ha encontrado la impresora o la clase."
+
+#: scheduler/ipp.c:762 scheduler/ipp.c:777 scheduler/ipp.c:784
+#: scheduler/ipp.c:799
+msgid ""
+"The printer-uri must be of the form \"ipp://HOSTNAME/classes/CLASSNAME\"."
+msgstr ""
+"El printer-uri debe ser de la forma \"ipp://NOMBRE_ORDENADOR/classes/NOMBRE_CLASE\"."
+
+#: scheduler/ipp.c:778 scheduler/ipp.c:1454 scheduler/ipp.c:793
+#: scheduler/ipp.c:1482 scheduler/ipp.c:800 scheduler/ipp.c:1515
+#: scheduler/ipp.c:815 scheduler/ipp.c:2031
+#, c-format
+msgid "The printer-uri \"%s\" contains invalid characters."
+msgstr "El printer-uri \"%s\" contiene caracteres incorrectos."
+
+#: scheduler/ipp.c:811 scheduler/ipp.c:826 scheduler/ipp.c:833
+#: scheduler/ipp.c:848
+#, c-format
+msgid "A printer named \"%s\" already exists!"
+msgstr "Ya existe una impresora llamada \"%s\"."
+
+#: scheduler/ipp.c:904 scheduler/ipp.c:924 scheduler/ipp.c:933
+#: scheduler/ipp.c:944
+#, c-format
+msgid "Attempt to set %s printer-state to bad value %d!"
+msgstr "Se ha intentado cambiar el valor printer-state de %s a un valor incorrecto %d."
+
+#: scheduler/ipp.c:1000 scheduler/ipp.c:1022 scheduler/ipp.c:1034
+#, c-format
+msgid "add_class: Unknown printer-op-policy \"%s\"."
+msgstr "add_class: printer-op-policy \"%s\" desconocido."
+
+#: scheduler/ipp.c:1013 scheduler/ipp.c:1035 scheduler/ipp.c:1047
+#, c-format
+msgid "add_class: Unknown printer-error-policy \"%s\"."
+msgstr "add_class: printer-error-policy \"%s\" desconocido."
+
+#: scheduler/ipp.c:1144 scheduler/ipp.c:1168 scheduler/ipp.c:1200
+#: scheduler/ipp.c:1112
+msgid "Unable to allocate memory for file types!"
+msgstr "No se ha podido reservar memoria para tipos de archivo."
+
+#: scheduler/ipp.c:1290 scheduler/ipp.c:4501 scheduler/ipp.c:1316
+#: scheduler/ipp.c:4705 scheduler/ipp.c:1348 scheduler/ipp.c:4804
+#: scheduler/ipp.c:1810 scheduler/ipp.c:4773 scheduler/ipp.c:4789
+#, c-format
+msgid "Character set \"%s\" not supported!"
+msgstr "No se admite el uso del juego de caracteres \"%s\"."
+
+#: scheduler/ipp.c:1299 scheduler/ipp.c:4510 scheduler/ipp.c:1325
+#: scheduler/ipp.c:4714 scheduler/ipp.c:1357 scheduler/ipp.c:4813
+#: scheduler/ipp.c:1819 scheduler/ipp.c:4782 scheduler/ipp.c:4798
+#, c-format
+msgid "Language \"%s\" not supported!"
+msgstr "No se admite el uso del idioma \"%s\"."
+
+#: scheduler/ipp.c:1309 scheduler/ipp.c:4520 scheduler/ipp.c:1335
+#: scheduler/ipp.c:4724 scheduler/ipp.c:1367 scheduler/ipp.c:4823
+#: scheduler/ipp.c:1829 scheduler/ipp.c:4792 scheduler/ipp.c:4808
+#, c-format
+msgid "The notify-user-data value is too large (%d > 63 octets)!"
+msgstr "El valor notify-user-data es demasiado grande (%d > 63 octetos)."
+
+#: scheduler/ipp.c:1326 scheduler/ipp.c:1352 scheduler/ipp.c:1384
+#: scheduler/ipp.c:1846
+msgid ""
+"The notify-lease-duration attribute cannot be used with job subscriptions."
+msgstr ""
+"El atributo notify-lease-duration no puede ser usado con subscripciones de trabajos."
+
+#: scheduler/ipp.c:1438 scheduler/ipp.c:1466 scheduler/ipp.c:1499
+#: scheduler/ipp.c:2015
+msgid ""
+"The printer-uri must be of the form \"ipp://HOSTNAME/printers/PRINTERNAME\"."
+msgstr ""
+"El printer-uri debe ser de la forma \"ipp://NOMBRE_ORDENADOR/printers/NOMBRE_IMPRESORA\"."
+
+#: scheduler/ipp.c:1487 scheduler/ipp.c:1515 scheduler/ipp.c:1548
+#: scheduler/ipp.c:2064
+#, c-format
+msgid "A class named \"%s\" already exists!"
+msgstr "Ya existe una clase llamada \"%s\"."
+
+#: scheduler/ipp.c:1575 scheduler/ipp.c:1607 scheduler/ipp.c:1644
+#: scheduler/ipp.c:2157
+#, c-format
+msgid ""
+"File device URIs have been disabled! To enable, see the FileDevice directive "
+"in \"%s/cupsd.conf\"."
+msgstr ""
+"Los URIs del dispositivo de archivo han sido deshabilitados. Para "
+"habilitarlos, vea la directiva FileDevice en \"%s/cupsd.conf\"."
+
+#: scheduler/ipp.c:1595 scheduler/ipp.c:1627 scheduler/ipp.c:1664
+#: scheduler/ipp.c:2177
+#, c-format
+msgid "Bad device-uri \"%s\"!"
+msgstr "device-uri \"%s\" incorrecto."
+
+#: scheduler/ipp.c:1626 scheduler/ipp.c:1659 scheduler/ipp.c:1698
+#: scheduler/ipp.c:2211
+#, c-format
+msgid "Bad port-monitor \"%s\"!"
+msgstr "port-monitor \"%s\" incorrecto."
+
+#: scheduler/ipp.c:1669 scheduler/ipp.c:1705 scheduler/ipp.c:1744
+#: scheduler/ipp.c:2257
+#, c-format
+msgid "Bad printer-state value %d!"
+msgstr "Valor printer-state %d incorrecto."
+
+#: scheduler/ipp.c:1762 scheduler/ipp.c:1800 scheduler/ipp.c:1842
+#: scheduler/ipp.c:8585 scheduler/ipp.c:8601
+#, c-format
+msgid "Unknown printer-op-policy \"%s\"."
+msgstr "printer-op-policy \"%s\" incorrecto."
+
+#: scheduler/ipp.c:1775 scheduler/ipp.c:1813 scheduler/ipp.c:1855
+#: scheduler/ipp.c:8600 scheduler/ipp.c:8616
+#, c-format
+msgid "Unknown printer-error-policy \"%s\"."
+msgstr "printer-error-policy \"%s\" incorrecto."
+
+#: scheduler/ipp.c:1837 scheduler/ipp.c:1875 scheduler/ipp.c:1919
+#: scheduler/ipp.c:2336
+#, c-format
+msgid "Unable to copy interface script - %s!"
+msgstr "No se ha podido copiar el script de interface - %s."
+
+#: scheduler/ipp.c:1862 scheduler/ipp.c:1900 scheduler/ipp.c:1944
+#: scheduler/ipp.c:2361
+#, c-format
+msgid "Unable to copy PPD file - %s!"
+msgstr "No se ha podido copiar el archivo PPD - %s."
+
+#: scheduler/ipp.c:1915 scheduler/ipp.c:1954 scheduler/ipp.c:2000
+#: scheduler/ipp.c:2417
+msgid "Unable to copy PPD file!"
+msgstr "No se ha podido copiar el archivo PPD."
+
+#: scheduler/ipp.c:2076 scheduler/ipp.c:2364 scheduler/ipp.c:5188
+#: scheduler/ipp.c:6008 scheduler/ipp.c:6147 scheduler/ipp.c:7394
+#: scheduler/ipp.c:7538 scheduler/ipp.c:7776 scheduler/ipp.c:8261
+#: scheduler/ipp.c:2116 scheduler/ipp.c:2412 scheduler/ipp.c:5102
+#: scheduler/ipp.c:5955 scheduler/ipp.c:7452 scheduler/ipp.c:7599
+#: scheduler/ipp.c:7839 scheduler/ipp.c:8334 scheduler/ipp.c:2158
+#: scheduler/ipp.c:2451 scheduler/ipp.c:5220 scheduler/ipp.c:6210
+#: scheduler/ipp.c:7713 scheduler/ipp.c:7928 scheduler/ipp.c:8167
+#: scheduler/ipp.c:8672 scheduler/ipp.c:2613 scheduler/ipp.c:2906
+#: scheduler/ipp.c:5189 scheduler/ipp.c:6179 scheduler/ipp.c:7203
+#: scheduler/ipp.c:7418 scheduler/ipp.c:7657 scheduler/ipp.c:8164
+#: scheduler/ipp.c:5205 scheduler/ipp.c:6195 scheduler/ipp.c:7219
+#: scheduler/ipp.c:7434 scheduler/ipp.c:7673 scheduler/ipp.c:8180
+msgid "Got a printer-uri attribute but no job-id!"
+msgstr "Se ha obtenido el atributo printer-uri pero no el job-id."
+
+#: scheduler/ipp.c:2097 scheduler/ipp.c:2433 scheduler/ipp.c:5210
+#: scheduler/ipp.c:6029 scheduler/ipp.c:6169 scheduler/ipp.c:7416
+#: scheduler/ipp.c:7560 scheduler/ipp.c:7797 scheduler/ipp.c:8282
+#: scheduler/ipp.c:2138 scheduler/ipp.c:2484 scheduler/ipp.c:5125
+#: scheduler/ipp.c:5978 scheduler/ipp.c:6201 scheduler/ipp.c:7475
+#: scheduler/ipp.c:7622 scheduler/ipp.c:7862 scheduler/ipp.c:8357
+#: scheduler/ipp.c:2180 scheduler/ipp.c:2523 scheduler/ipp.c:5243
+#: scheduler/ipp.c:6233 scheduler/ipp.c:6456 scheduler/ipp.c:7736
+#: scheduler/ipp.c:7951 scheduler/ipp.c:8190 scheduler/ipp.c:8695
+#: scheduler/ipp.c:2635 scheduler/ipp.c:2978 scheduler/ipp.c:5212
+#: scheduler/ipp.c:6202 scheduler/ipp.c:6425 scheduler/ipp.c:7226
+#: scheduler/ipp.c:7441 scheduler/ipp.c:7680 scheduler/ipp.c:8187
+#: scheduler/ipp.c:5228 scheduler/ipp.c:6218 scheduler/ipp.c:6441
+#: scheduler/ipp.c:7242 scheduler/ipp.c:7457 scheduler/ipp.c:7696
+#: scheduler/ipp.c:8203
+#, c-format
+msgid "Bad job-uri attribute \"%s\"!"
+msgstr "Atributo job-uri \"%s\" incorrecto."
+
+#: scheduler/ipp.c:2116 scheduler/ipp.c:2451 scheduler/ipp.c:5228
+#: scheduler/ipp.c:6047 scheduler/ipp.c:6188 scheduler/ipp.c:7434
+#: scheduler/ipp.c:7578 scheduler/ipp.c:7815 scheduler/ipp.c:8300
+#, c-format
+msgid "Job #%d doesn't exist!"
+msgstr "El trabajo #%d no existe."
+
+#: scheduler/ipp.c:2131 scheduler/ipp.c:2172 scheduler/ipp.c:2214
+#: scheduler/ipp.c:2669
+#, c-format
+msgid "Job #%d is not held for authentication!"
+msgstr "El trabajo #%d no está retenido para autentificación."
+
+#: scheduler/ipp.c:2153 scheduler/ipp.c:2195
+#, c-format
+msgid "You are not authorized to authenticate job #%d owned by \"%s\"!"
+msgstr "No tiene permiso para autentificar el trabajo #%d que pertenece a \"%s\"."
+
+#: scheduler/ipp.c:2221 scheduler/ipp.c:2264 scheduler/ipp.c:2303
+#: scheduler/ipp.c:2758
+msgid "The printer-uri attribute is required!"
+msgstr "Se necesita el atributo printer-uri."
+
+#: scheduler/ipp.c:2238 scheduler/ipp.c:2283 scheduler/ipp.c:2322
+#: scheduler/ipp.c:2777
+msgid "Missing requesting-user-name attribute!"
+msgstr "Falta el atributo requesting-user-name."
+
+#: scheduler/ipp.c:2277 scheduler/ipp.c:2324 scheduler/ipp.c:2363
+#: scheduler/ipp.c:2818
+#, c-format
+msgid "The printer-uri \"%s\" is not valid."
+msgstr "El printer-uri \"%s\" no es válido."
+
+#: scheduler/ipp.c:2410 scheduler/ipp.c:2460 scheduler/ipp.c:2499
+#: scheduler/ipp.c:2954
+#, c-format
+msgid "No active jobs on %s!"
+msgstr "No hay trabajos activos en %s."
+
+#: scheduler/ipp.c:2462 scheduler/ipp.c:2513
+#, c-format
+msgid "You are not authorized to delete job #%d owned by \"%s\"!"
+msgstr "No tiene permiso para borrar el trabajo #%d que pertenece a \"%s\"."
+
+#: scheduler/ipp.c:2476 scheduler/ipp.c:2527 scheduler/ipp.c:2563
+#: scheduler/ipp.c:3018
+#, c-format
+msgid "Job #%d is already %s - can't cancel."
+msgstr "El trabajo #%d ya está %s - no se puede cancelar."
+
+#: scheduler/ipp.c:3720 scheduler/ipp.c:3914 scheduler/ipp.c:4006
+#: scheduler/ipp.c:1190
+msgid "The printer or class is not shared!"
+msgstr "La impresora o clase no está compartida."
+
+#: scheduler/ipp.c:3746 scheduler/ipp.c:6647 scheduler/ipp.c:3940
+#: scheduler/ipp.c:6695 scheduler/ipp.c:4032 scheduler/ipp.c:6954
+#: scheduler/ipp.c:1216
+#, c-format
+msgid "Destination \"%s\" is not accepting jobs."
+msgstr "El destino %s no está aceptando trabajos."
+
+#: scheduler/ipp.c:3759 scheduler/ipp.c:6443 scheduler/ipp.c:3954
+#: scheduler/ipp.c:6487 scheduler/ipp.c:4046 scheduler/ipp.c:6739
+#: scheduler/ipp.c:1230
+#, c-format
+msgid "Bad copies value %d."
+msgstr "Valor de copias %d incorrecto."
+
+#: scheduler/ipp.c:3775 scheduler/ipp.c:6459 scheduler/ipp.c:3971
+#: scheduler/ipp.c:6504 scheduler/ipp.c:4063 scheduler/ipp.c:6756
+#: scheduler/ipp.c:1247
+#, c-format
+msgid "Bad page-ranges values %d-%d."
+msgstr "Valores de page-ranges %d-%d incorrectos."
+
+#: scheduler/ipp.c:3795 scheduler/ipp.c:3991 scheduler/ipp.c:4083
+#: scheduler/ipp.c:1267
+msgid "Too many active jobs."
+msgstr "Demasiados trabajos activos."
+
+#: scheduler/ipp.c:3801 scheduler/ipp.c:6668 scheduler/ipp.c:3997
+#: scheduler/ipp.c:6716 scheduler/ipp.c:4089 scheduler/ipp.c:6975
+#: scheduler/ipp.c:1273
+msgid "Quota limit reached."
+msgstr "Se ha alcanzado el límite de cuota."
+
+#: scheduler/ipp.c:3824 scheduler/ipp.c:6691 scheduler/ipp.c:4022
+#: scheduler/ipp.c:6741 scheduler/ipp.c:4114 scheduler/ipp.c:7000
+#: scheduler/ipp.c:1306
+#, c-format
+msgid "Unable to add job for destination \"%s\"!"
+msgstr "No se ha podido añadir el trabajo para el destino \"%s\"."
+
+#: scheduler/ipp.c:4469 scheduler/ipp.c:4673 scheduler/ipp.c:4770
+#: scheduler/ipp.c:4739 scheduler/ipp.c:4755
+msgid "No subscription attributes in request!"
+msgstr "No hay atributos de subscripción en la solicitud."
+
+#: scheduler/ipp.c:4559 scheduler/ipp.c:4763 scheduler/ipp.c:4869
+#: scheduler/ipp.c:4838 scheduler/ipp.c:4854
+msgid "notify-events not specified!"
+msgstr "notify-events no especificado."
+
+#: scheduler/ipp.c:4577 scheduler/ipp.c:4781 scheduler/ipp.c:4887
+#: scheduler/ipp.c:4856 scheduler/ipp.c:4872
+#, c-format
+msgid "Job %d not found!"
+msgstr "No se ha encontrado el trabajo %d."
+
+#: scheduler/ipp.c:4827 scheduler/ipp.c:4957 scheduler/ipp.c:5075
+#: scheduler/ipp.c:5044 scheduler/ipp.c:5060
+msgid "No default printer"
+msgstr "No hay impresora predeterminada"
+
+#: scheduler/ipp.c:4930 scheduler/ipp.c:5060 scheduler/ipp.c:5178
+#: scheduler/ipp.c:5147 scheduler/ipp.c:5163
+msgid "cups-deviced failed to execute."
+msgstr "Ha fallado al ejecutarse cups-deviced."
+
+#: scheduler/ipp.c:5393 scheduler/ipp.c:5479 scheduler/ipp.c:5722
+#: scheduler/ipp.c:5691 scheduler/ipp.c:5707
+msgid "cups-driverd failed to execute."
+msgstr "Ha fallado al ejecutarse cups-driverd."
+
+#: scheduler/ipp.c:5571 scheduler/ipp.c:5594 scheduler/ipp.c:5837
+#: scheduler/ipp.c:5806 scheduler/ipp.c:5822
+msgid "No destinations added."
+msgstr "No se han añadido destinos."
+
+#: scheduler/ipp.c:5794 scheduler/ipp.c:5736 scheduler/ipp.c:2615
+#: scheduler/ipp.c:5530 scheduler/ipp.c:5979 scheduler/ipp.c:7840
+#: scheduler/ipp.c:3070 scheduler/ipp.c:5499 scheduler/ipp.c:5948
+#: scheduler/ipp.c:7330 scheduler/ipp.c:3086 scheduler/ipp.c:5515
+#: scheduler/ipp.c:5964 scheduler/ipp.c:7346
+#, c-format
+msgid "notify-subscription-id %d no good!"
+msgstr "notify-subscription-id %d incorrecto."
+
+#: scheduler/ipp.c:5878 scheduler/ipp.c:5822 scheduler/ipp.c:6065
+#: scheduler/ipp.c:6034 scheduler/ipp.c:6050
+#, c-format
+msgid "Job #%s does not exist!"
+msgstr "El trabajo #%s no existe."
+
+#: scheduler/ipp.c:5900 scheduler/ipp.c:2116 scheduler/ipp.c:2451
+#: scheduler/ipp.c:5228 scheduler/ipp.c:6047 scheduler/ipp.c:6188
+#: scheduler/ipp.c:7434 scheduler/ipp.c:7578 scheduler/ipp.c:7815
+#: scheduler/ipp.c:8300 scheduler/ipp.c:2157 scheduler/ipp.c:2502
+#: scheduler/ipp.c:5143 scheduler/ipp.c:5844 scheduler/ipp.c:5996
+#: scheduler/ipp.c:6174 scheduler/ipp.c:6219 scheduler/ipp.c:7493
+#: scheduler/ipp.c:7640 scheduler/ipp.c:7880 scheduler/ipp.c:8375
+#: scheduler/ipp.c:2199 scheduler/ipp.c:2541 scheduler/ipp.c:5261
+#: scheduler/ipp.c:6087 scheduler/ipp.c:6251 scheduler/ipp.c:6429
+#: scheduler/ipp.c:6474 scheduler/ipp.c:7754 scheduler/ipp.c:7969
+#: scheduler/ipp.c:8208 scheduler/ipp.c:8713 scheduler/ipp.c:2654
+#: scheduler/ipp.c:2996 scheduler/ipp.c:5230 scheduler/ipp.c:6056
+#: scheduler/ipp.c:6220 scheduler/ipp.c:6398 scheduler/ipp.c:6443
+#: scheduler/ipp.c:7244 scheduler/ipp.c:7459 scheduler/ipp.c:7698
+#: scheduler/ipp.c:8205 scheduler/ipp.c:5246 scheduler/ipp.c:6072
+#: scheduler/ipp.c:6236 scheduler/ipp.c:6414 scheduler/ipp.c:6459
+#: scheduler/ipp.c:7260 scheduler/ipp.c:7475 scheduler/ipp.c:7714
+#: scheduler/ipp.c:8221
+#, c-format
+msgid "Job #%d does not exist!"
+msgstr "El trabajo #%d no existe."
+
+#: scheduler/ipp.c:5969 scheduler/ipp.c:5915 scheduler/ipp.c:6150
+#: scheduler/ipp.c:6119 scheduler/ipp.c:6135
+msgid "No subscriptions found."
+msgstr "No se han encontrado subscripciones."
+
+#: scheduler/ipp.c:6058 scheduler/ipp.c:6007
+#, c-format
+msgid "Not authorized to hold job #%d owned by \"%s\"!"
+msgstr "No está autorizado a retener el trabajo #%d que pertenece a \"%s\"."
+
+#: scheduler/ipp.c:6203 scheduler/ipp.c:8315 scheduler/ipp.c:6250
+#: scheduler/ipp.c:8390 scheduler/ipp.c:6505 scheduler/ipp.c:8728
+#: scheduler/ipp.c:6474 scheduler/ipp.c:8220 scheduler/ipp.c:6490
+#: scheduler/ipp.c:8236
+#, c-format
+msgid "Job #%d is finished and cannot be altered!"
+msgstr "El trabajo #%d ha terminado y no puede ser modificado."
+
+#: scheduler/ipp.c:6215 scheduler/ipp.c:6262
+#, c-format
+msgid "You are not authorized to move job #%d owned by \"%s\"!"
+msgstr "No está autorizado a mover el trabajo#%d que pertenece a \"%s\"."
+
+#: scheduler/ipp.c:6228 scheduler/ipp.c:6098 scheduler/ipp.c:6353
+#: scheduler/ipp.c:6322 scheduler/ipp.c:6338
+msgid "job-printer-uri attribute missing!"
+msgstr "Atributo job-printer-uri desaparecido."
+
+#: scheduler/ipp.c:6485 scheduler/ipp.c:7847 scheduler/ipp.c:6531
+#: scheduler/ipp.c:7913 scheduler/ipp.c:6783 scheduler/ipp.c:8238
+#: scheduler/ipp.c:6703 scheduler/ipp.c:7728 scheduler/ipp.c:6719
+#: scheduler/ipp.c:7744
+#, c-format
+msgid "Unsupported compression \"%s\"!"
+msgstr "No se admite el uso de la compresión \"%s\"."
+
+#: scheduler/ipp.c:6504 scheduler/ipp.c:7866 scheduler/ipp.c:6550
+#: scheduler/ipp.c:7932 scheduler/ipp.c:6802 scheduler/ipp.c:8257
+#: scheduler/ipp.c:6722 scheduler/ipp.c:7747 scheduler/ipp.c:6738
+#: scheduler/ipp.c:7763
+msgid "No file!?!"
+msgstr "¡¿¡No hay archivo!?!"
+
+#: scheduler/ipp.c:6522 scheduler/ipp.c:6568 scheduler/ipp.c:6820
+#: scheduler/ipp.c:6740 scheduler/ipp.c:6756
+#, c-format
+msgid "Could not scan type \"%s\"!"
+msgstr "No se puede analizar el tipo \"%s\"."
+
+#: scheduler/ipp.c:6574 scheduler/ipp.c:7936 scheduler/ipp.c:6620
+#: scheduler/ipp.c:8001 scheduler/ipp.c:6879 scheduler/ipp.c:8332
+#: scheduler/ipp.c:6799 scheduler/ipp.c:7822 scheduler/ipp.c:6815
+#: scheduler/ipp.c:7838
+#, c-format
+msgid "Unsupported format '%s/%s'!"
+msgstr "No se admite el uso del formato '%s/%s'."
+
+#: scheduler/ipp.c:6621 scheduler/ipp.c:6669 scheduler/ipp.c:6928
+msgid "Printer not shared!"
+msgstr "La impresora no está compartida."
+
+#: scheduler/ipp.c:6661 scheduler/ipp.c:6709 scheduler/ipp.c:6968
+#, c-format
+msgid "Too many jobs - %d jobs, max jobs is %d."
+msgstr "Demasiados trabajos - %d trabajos, el máximo de trabajos es %d."
+
+#: scheduler/ipp.c:7448 scheduler/ipp.c:7507 scheduler/ipp.c:7768
+#: scheduler/ipp.c:7258 scheduler/ipp.c:7274
+#, c-format
+msgid "Job #%d is not held!"
+msgstr "El trabajo #%d no está retenido."
+
+#: scheduler/ipp.c:7459 scheduler/ipp.c:7518
+#, c-format
+msgid "You are not authorized to release job id %d owned by \"%s\"!"
+msgstr "No tiene permiso para liberar el trabajo id %d que pertenece a \"%s\"."
+
+#: scheduler/ipp.c:7592 scheduler/ipp.c:7654 scheduler/ipp.c:7983
+#: scheduler/ipp.c:7473 scheduler/ipp.c:7489
+#, c-format
+msgid "Job #%d is not complete!"
+msgstr "El trabajo #%d no ha sido completado."
+
+#: scheduler/ipp.c:7608 scheduler/ipp.c:7670 scheduler/ipp.c:8001
+#: scheduler/ipp.c:7491 scheduler/ipp.c:7507
+#, c-format
+msgid "Job #%d cannot be restarted - no files!"
+msgstr "El trabajo #%d no puede ser reiniciado - no hay archivos."
+
+#: scheduler/ipp.c:7619 scheduler/ipp.c:7681
+#, c-format
+msgid "You are not authorized to restart job id %d owned by \"%s\"!"
+msgstr "No tiene permiso para reiniciar el trabajo id %d que pertenece a \"%s\"."
+
+#: scheduler/ipp.c:7826 scheduler/ipp.c:7891
+#, c-format
+msgid "You are not authorized to send document for job #%d owned by \"%s\"!"
+msgstr "No tiene permiso para enviar el documento para el trabajo #%d que pertenece a \"%s\"."
+
+#: scheduler/ipp.c:7883 scheduler/ipp.c:8803 scheduler/ipp.c:7949
+#: scheduler/ipp.c:8883 scheduler/ipp.c:8274 scheduler/ipp.c:9225
+#: scheduler/ipp.c:7764 scheduler/ipp.c:8967 scheduler/ipp.c:7780
+#: scheduler/ipp.c:8983
+#, c-format
+msgid "Bad document-format \"%s\"!"
+msgstr "document-format \"%s\" incorrecto."
+
+#: scheduler/ipp.c:8326 scheduler/ipp.c:8401
+#, c-format
+msgid "You are not authorized to alter job id %d owned by \"%s\"!"
+msgstr "No tiene permiso para alterar el trabajo id %d que pertenece a \"%s\"."
+
+#: scheduler/ipp.c:8371 scheduler/ipp.c:8446 scheduler/ipp.c:8783
+#: scheduler/ipp.c:8275 scheduler/ipp.c:8291
+#, c-format
+msgid "%s cannot be changed."
+msgstr "%s no puede ser cambiado."
+
+#: scheduler/ipp.c:8387 scheduler/ipp.c:8462 scheduler/ipp.c:8799
+#: scheduler/ipp.c:8291 scheduler/ipp.c:8307
+msgid "Bad job-priority value!"
+msgstr "Valor job-priority incorrecto."
+
+#: scheduler/ipp.c:8395 scheduler/ipp.c:8470 scheduler/ipp.c:8807
+#: scheduler/ipp.c:8299 scheduler/ipp.c:8315
+msgid "Job is completed and cannot be changed."
+msgstr "El trabajo está terminado y no puede ser cambiado."
+
+#: scheduler/ipp.c:8409 scheduler/ipp.c:8484 scheduler/ipp.c:8821
+#: scheduler/ipp.c:8313 scheduler/ipp.c:8329
+msgid "Bad job-state value!"
+msgstr "Valor job-state incorrecto."
+
+#: scheduler/ipp.c:8423 scheduler/ipp.c:8435 scheduler/ipp.c:8446
+#: scheduler/ipp.c:8498 scheduler/ipp.c:8510 scheduler/ipp.c:8521
+#: scheduler/ipp.c:8835 scheduler/ipp.c:8850 scheduler/ipp.c:8861
+#: scheduler/ipp.c:8327 scheduler/ipp.c:8342 scheduler/ipp.c:8353
+#: scheduler/ipp.c:8343 scheduler/ipp.c:8358 scheduler/ipp.c:8369
+msgid "Job state cannot be changed."
+msgstr "No se puede cambiar el estado del trabajo."
+
+#: scheduler/ipp.c:8787 scheduler/ipp.c:8867 scheduler/ipp.c:9209
+#: scheduler/ipp.c:8951 scheduler/ipp.c:8967
+#, c-format
+msgid "Unsupported compression attribute %s!"
+msgstr "No se admite el uso del atributo de compresión %s."
+
+#: scheduler/ipp.c:8815 scheduler/ipp.c:8894 scheduler/ipp.c:9236
+#: scheduler/ipp.c:8978 scheduler/ipp.c:8994
+#, c-format
+msgid "Unsupported format \"%s\"!"
+msgstr "No se admite el uso del formato \"%s\"."
+
+#: berkeley/lpc.c:201
+#, c-format
+msgid "%s is not implemented by the CUPS version of lpc.\n"
+msgstr "%s no está implementado en la versión de CUPS de lpc.\n"
+
+#: berkeley/lpc.c:216
+msgid ""
+"Commands may be abbreviated.  Commands are:\n"
+"\n"
+"exit    help    quit    status  ?\n"
+msgstr ""
+"Los comandos se pueden abreviar.  Los comandos son:\n"
+"\n"
+"exit    help    quit    status  ?\n"
+
+#: berkeley/lpc.c:222 berkeley/lpc.c:221
+msgid "help\t\tget help on commands\n"
+msgstr "help\t\tproporciona ayuda sobre los comandos\n"
+
+#: berkeley/lpc.c:225 berkeley/lpc.c:223
+msgid "status\t\tshow status of daemon and queue\n"
+msgstr "status\t\tmuestra el estado del demonio y la cola\n"
+
+#: berkeley/lpc.c:228 berkeley/lpc.c:225
+msgid "?Invalid help command unknown\n"
+msgstr "?Ayuda sobre comando desconocido\n"
+
+#: berkeley/lpc.c:478 berkeley/lpc.c:490 berkeley/lpc.c:475 berkeley/lpc.c:487
+#: berkeley/lpc.c:476 berkeley/lpc.c:488
+#, c-format
+msgid "\tprinter is on device '%s' speed -1\n"
+msgstr "\tla impresora está conectada a '%s' velocidad -1\n"
+
+#: berkeley/lpc.c:496 berkeley/lpc.c:493 berkeley/lpc.c:494
+msgid "\tqueuing is enabled\n"
+msgstr "\tla cola está activada\n"
+
+#: berkeley/lpc.c:498 berkeley/lpc.c:495 berkeley/lpc.c:496
+msgid "\tqueuing is disabled\n"
+msgstr "\tla cola está desactivada\n"
+
+#: berkeley/lpc.c:501 berkeley/lpc.c:498 berkeley/lpc.c:499
+msgid "\tprinting is enabled\n"
+msgstr "\tla impresión está activada\n"
+
+#: berkeley/lpc.c:503 berkeley/lpc.c:500 berkeley/lpc.c:501
+msgid "\tprinting is disabled\n"
+msgstr "\tla impresión está desactivada\n"
+
+#: berkeley/lpc.c:506 berkeley/lpc.c:503 berkeley/lpc.c:504
+msgid "\tno entries\n"
+msgstr "\tno hay entradas\n"
+
+#: berkeley/lpc.c:508 berkeley/lpc.c:505 berkeley/lpc.c:506
+#, c-format
+msgid "\t%d entries\n"
+msgstr "\t%d entradas\n"
+
+#: berkeley/lpc.c:510 berkeley/lpc.c:507 berkeley/lpc.c:508
+msgid "\tdaemon present\n"
+msgstr "\tdemonio presente\n"
+
+#: berkeley/lpq.c:94
+msgid "lpq: Unable to contact server!\n"
+msgstr "lpq: No se ha podido contactar con el servidor.\n"
+
+#: berkeley/lpq.c:125 berkeley/lpr.c:114 berkeley/lprm.c:107
+#: systemv/accept.c:108 systemv/cancel.c:95 systemv/lpstat.c:115
+#: systemv/lpadmin.c:284 systemv/lp.c:135 systemv/lpinfo.c:80
+#: systemv/lpmove.c:84 systemv/accept.c:106 systemv/cancel.c:93
+#: systemv/lpmove.c:89 berkeley/lpq.c:124 systemv/lp.c:136
+#: systemv/lpstat.c:116 berkeley/lpr.c:116 systemv/lp.c:140
+#: systemv/cupsaddsmb.c:98
+#, c-format
+msgid "%s: Sorry, no encryption support compiled in!\n"
+msgstr "%s: Lo siento, no está compilado el uso de la opción de cifrado.\n"
+
+#: berkeley/lpq.c:155
+#, c-format
+msgid "lpq: Unknown destination \"%s/%s\"!\n"
+msgstr "lpq: Destino desconocido \"%s/%s\".\n"
+
+#: berkeley/lpq.c:159
+#, c-format
+msgid "lpq: Unknown destination \"%s\"!\n"
+msgstr "lpq: Destino desconocido \"%s\".\n"
+
+#: berkeley/lpq.c:211 systemv/lp.c:564
+#, c-format
+msgid ""
+"lp: error - %s environment variable names non-existent destination \"%s\"!\n"
+msgstr ""
+"lp: error - los nombres de la variable de entorno %s no existentes en el destino \"%s\".\n"
+
+#: berkeley/lpq.c:216
+msgid "lpq: error - no default destination available.\n"
+msgstr "lpq: error - no está disponible el destino predeterminado.\n"
+
+#: berkeley/lpq.c:363 berkeley/lpq.c:523
+#, c-format
+msgid "lpq: get-jobs failed: %s\n"
+msgstr "lpq: get-jobs ha fallado: %s\n"
+
+#: berkeley/lpq.c:457 berkeley/lpq.c:444 berkeley/lpq.c:488
+msgid ""
+"Rank   Owner      Pri  Job        Files                       Total Size\n"
+msgstr ""
+"Rango  Propiet.   Pri  Trabajo    Archivos                    Tamaño total\n"
+
+#: berkeley/lpq.c:461 berkeley/lpq.c:448 berkeley/lpq.c:492
+msgid "Rank    Owner   Job     File(s)                         Total Size\n"
+msgstr "Rango  Propiet. Trabajo Archivo(s)                      Tamaño total\n"
+
+#: berkeley/lpq.c:498 berkeley/lpq.c:485 berkeley/lpq.c:529
+#, c-format
+msgid "%s: %-33.33s [job %d localhost]\n"
+msgstr "%s: %-33.33s [trabajo %d localhost]\n"
+
+#: berkeley/lpq.c:500 berkeley/lpq.c:487 berkeley/lpq.c:531
+#, c-format
+msgid "        %-39.39s %.0f bytes\n"
+msgstr "        %-39.39s %.de bytes\n"
+
+#: berkeley/lpq.c:506 berkeley/lpq.c:493 berkeley/lpq.c:537
+#, c-format
+msgid "%-6s %-10.10s %-4d %-10d %-27.27s %.0f bytes\n"
+msgstr "%-6s %-10.10s %-4d %-10d %-27.27s %.de bytes\n"
+
+#: berkeley/lpq.c:511 berkeley/lpq.c:498 berkeley/lpq.c:542
+#, c-format
+msgid "%-7s %-7.7s %-7d %-31.31s %.0f bytes\n"
+msgstr "%-7s %-7.7s %-7d %-31.31s %.de bytes\n"
+
+#: berkeley/lpq.c:529 berkeley/lpq.c:515 berkeley/lpq.c:559
+msgid "no entries\n"
+msgstr "no hay entradas\n"
+
+#: berkeley/lpq.c:591 berkeley/lpq.c:620
+#, c-format
+msgid "lpq: get-printer-attributes failed: %s\n"
+msgstr "lpq: get-printer-attributes ha fallado: %s\n"
+
+#: berkeley/lpq.c:605 berkeley/lpq.c:576 berkeley/lpq.c:621
+#, c-format
+msgid "%s is ready\n"
+msgstr "%s está preparada\n"
+
+#: berkeley/lpq.c:608 berkeley/lpq.c:579 berkeley/lpq.c:624
+#, c-format
+msgid "%s is ready and printing\n"
+msgstr "%s está preparada e imprimiendo\n"
+
+#: berkeley/lpq.c:612 berkeley/lpq.c:583 berkeley/lpq.c:628
+#, c-format
+msgid "%s is not ready\n"
+msgstr "%s no está preparada\n"
+
+#: berkeley/lpq.c:633 berkeley/lpq.c:601
+msgid "Usage: lpq [-P dest] [-l] [+interval]\n"
+msgstr "Uso: lpq (-P destino) (-I) (+intervalo)\n"
+
+#: berkeley/lpr.c:132
+#, c-format
+msgid "lpr: error - expected value after -%c option!\n"
+msgstr "lpr: error - se esperaba un valor tras la opción %c\n"
+
+#: berkeley/lpr.c:146
+#, c-format
+msgid ""
+"lpr: warning - '%c' format modifier not supported - output may not be "
+"correct!\n"
+msgstr ""
+"lpr: advertencia - no admite el uso del modificador de formato '%c' - la "
+"salida puede que no sea correcta.\n"
+
+#: berkeley/lpr.c:159
+msgid "lpr: error - expected option=value after -o option!\n"
+msgstr "lpr: error - se esperaba opción=valor tras la opción -o.\n"
+
+#: berkeley/lpr.c:185
+msgid "lpr: warning - email notification is not currently supported!\n"
+msgstr "lpr: advertencia - actualmente no admite el uso de la notificación por email.\n"
+
+#: berkeley/lpr.c:207
+msgid "lpr: error - expected destination after -P option!\n"
+msgstr "lpr: error - se esperaba un destino tras la opción -P.\n"
+
+#: berkeley/lpr.c:240
+msgid "lpr: error - expected copy count after -# option!\n"
+msgstr "lpr: error - se esperaba un número de copias tras la opción -#.\n"
+
+#: berkeley/lpr.c:263
+#, c-format
+msgid "lpr: error - expected name after -%c option!\n"
+msgstr "lpr: error - se esperaba un nombre tras la opción -%c.\n"
+
+#: berkeley/lpr.c:281
+msgid "lpr: error - expected username after -U option!\n"
+msgstr "lpr: error - se esperaba un nombre de usuario tras la opción -U.\n"
+
+#: berkeley/lpr.c:292
+#, c-format
+msgid "lpr: error - unknown option '%c'!\n"
+msgstr "lpr: error - opción \"%c\" desconocida.\n"
+
+#: berkeley/lpr.c:305
+#, c-format
+msgid "lpr: error - unable to access \"%s\" - %s\n"
+msgstr "lpr: error - no se ha podido acceder a \"%s\" - \"s\n"
+
+#: berkeley/lpr.c:323
+#, c-format
+msgid "lpr: error - too many files - \"%s\"\n"
+msgstr "lpr: error - demasiados archivos - \"%s\"\n"
+
+#: berkeley/lpr.c:364
+#, c-format
+msgid ""
+"lpr: error - %s environment variable names non-existent destination \"%s\"!\n"
+msgstr ""
+"lpr: error - los nombres de variables de entorno %s no existen en el destino \"%s\".\n"
+
+#: berkeley/lpr.c:369
+msgid "lpr: error - no default destination available.\n"
+msgstr "lpr: error - no está disponible el destino predeterminado.\n"
+
+#: berkeley/lpr.c:372
+msgid "lpr: error - scheduler not responding!\n"
+msgstr "lpr: error- el planificador de tareas no responde.\n"
+
+#: berkeley/lpr.c:421
+#, c-format
+msgid "lpr: error - unable to create temporary file \"%s\" - %s\n"
+msgstr "lpr: error - no se ha podido crear el archivo temporal \"%s\" - %s\n"
+
+#: berkeley/lpr.c:431
+#, c-format
+msgid "lpr: error - unable to write to temporary file \"%s\" - %s\n"
+msgstr "lpr: error - no se ha podido escribir en el archivo temporal \"%s\" - %s\n"
+
+#: berkeley/lpr.c:445
+msgid "lpr: error - stdin is empty, so no job has been sent.\n"
+msgstr "lpr: error - stdin está vacío, por lo tanto no se ha enviado ningún trabajo.\n"
+
+#: berkeley/lpr.c:461 berkeley/lpr.c:460
+#, c-format
+msgid "lpr: error - unable to print file: %s\n"
+msgstr "lpr: error - no se ha podido imprimir el archivo: %s\n"
+
+#: berkeley/lprm.c:87
+msgid "lprm: Unable to contact server!\n"
+msgstr "lprm: No se ha podido contactar con el servidor.\n"
+
+#: berkeley/lprm.c:127
+#, c-format
+msgid "lprm: Unknown destination \"%s\"!\n"
+msgstr "lprm: Destino \"%s\" desconocido.\n"
+
+#: berkeley/lprm.c:136
+#, c-format
+msgid "lprm: Unknown option '%c'!\n"
+msgstr "lprm: Opción '%c' desconocida.\n"
+
+#: berkeley/lprm.c:223
+msgid "lprm: Job or printer not found!\n"
+msgstr "lprm: No se ha encontrado el trabajo o la impresora.\n"
+
+#: berkeley/lprm.c:227
+msgid "lprm: Not authorized to lprm job(s)!\n"
+msgstr "lprm: No tiene permiso para lprm trabajo(s).\n"
+
+#: berkeley/lprm.c:231
+#, c-format
+msgid "lprm: You don't own job ID %d!\n"
+msgstr "lprm: No es el propietario del trabajo ID %d.\n"
+
+#: berkeley/lprm.c:236
+msgid "lprm: Unable to lprm job(s)!\n"
+msgstr "lprm: No se han podido lprm trabajo(s).\n"
+
+#: berkeley/lprm.c:253 berkeley/lprm.c:269
+msgid "lprm: Unable to cancel job(s)!\n"
+msgstr "lprm: No se han podido cancelar los trabajos.\n"
+
+#: systemv/accept.c:84 systemv/accept.c:82
+#, c-format
+msgid "%s: Don't know what to do!\n"
+msgstr "%s: No sé que hay que hacer.\n"
+
+#: systemv/accept.c:129 systemv/accept.c:127
+#, c-format
+msgid "%s: Expected server name after -h!\n"
+msgstr "%s: Se esperaba un nombre de servidor tras -h.\n"
+
+#: systemv/accept.c:147 systemv/accept.c:145
+#, c-format
+msgid "%s: Expected reason text after -r!\n"
+msgstr "%s: Se esperaba un texto con una razón tras -r.\n"
+
+#: systemv/accept.c:157 systemv/accept.c:155
+#, c-format
+msgid "%s: Unknown option '%c'!\n"
+msgstr "%s: Opción '%c' desconocida.\n"
+
+#: systemv/accept.c:173 systemv/accept.c:171 systemv/accept.c:192
+#, c-format
+msgid "%s: Unable to connect to server: %s\n"
+msgstr "%s: No se ha podido conectar con el servidor: %s\n"
+
+#: systemv/accept.c:217 systemv/accept.c:227 systemv/accept.c:268
+#: systemv/accept.c:278 systemv/accept.c:206 systemv/accept.c:230
+#, c-format
+msgid "%s: Operation failed: %s\n"
+msgstr "%s: La operación ha fallado: %s\n"
+
+#: systemv/cancel.c:118 systemv/cancel.c:116
+msgid "cancel: Error - expected hostname after '-h' option!\n"
+msgstr "cancel: Error - se esperaba un nombre de ordenador tras la opción '-h'.\n"
+
+#: systemv/cancel.c:139 systemv/cancel.c:137
+msgid "cancel: Error - expected username after '-u' option!\n"
+msgstr "cancel: Error - se esperaba un nombre de usuario tras la opción '-u'.\n"
+
+#: systemv/cancel.c:150 systemv/cancel.c:148
+#, c-format
+msgid "cancel: Unknown option '%c'!\n"
+msgstr "cancel: Opción '%c' desconocida.\n"
+
+#: systemv/cancel.c:207 systemv/cancel.c:205
+#, c-format
+msgid "cancel: Unknown destination \"%s\"!\n"
+msgstr "cancel: Destino \"%s\" desconocido.\n"
+
+#: systemv/cancel.c:229 systemv/cancel.c:319 systemv/cancel.c:227
+#: systemv/cancel.c:308
+msgid "cancel: Unable to contact server!\n"
+msgstr "cancel: No se ha podido contactar con el servidor.\n"
+
+#: systemv/cancel.c:295 systemv/cancel.c:370 systemv/cancel.c:284
+#: systemv/cancel.c:348
+#, c-format
+msgid "cancel: %s failed: %s\n"
+msgstr "cancel: %s ha fallado: %s\n"
+
+#: systemv/cupsaddsmb.c:290 systemv/cupsaddsmb.c:311
+#, c-format
+msgid "cupsaddsmb: Missing value on line %d!\n"
+msgstr "cupsaddsmb: Falta un valor en la línea %d.\n"
+
+#: systemv/cupsaddsmb.c:301 systemv/cupsaddsmb.c:322
+#, c-format
+msgid "cupsaddsmb: Missing double quote on line %d!\n"
+msgstr "cupsaddsmb: Faltan dobles comillas en línea %d\n"
+
+#: systemv/cupsaddsmb.c:313 systemv/cupsaddsmb.c:334
+#, c-format
+msgid "cupsaddsmb: Bad option + choice on line %d!\n"
+msgstr "cupsaddsmb: Mala opción + preferencia en línea %d.\n"
+
+#: systemv/cupsaddsmb.c:496 systemv/cupsaddsmb.c:553
+#, c-format
+msgid "cupsaddsmb: Unable to connect to server \"%s\" for %s - %s\n"
+msgstr "cupsaddsmb: No se ha podido conectar al servidor \"%s\" para %s - %s\n"
+
+#: systemv/cupsaddsmb.c:509 systemv/cupsaddsmb.c:566
+#, c-format
+msgid "cupsaddsmb: No PPD file for printer \"%s\" - skipping!\n"
+msgstr "cupsaddsmb: No hay archivo PPD para la impresora \"%s\" - omitiendo.\n"
+
+#: systemv/cupsaddsmb.c:548 systemv/cupsaddsmb.c:562
+#, c-format
+msgid "cupsaddsmb: get-printer-attributes failed for \"%s\": %s\n"
+msgstr "cupsaddsmb: get-printer-attributes ha fallado para \"%s\": %s\n"
+
+#: systemv/cupsaddsmb.c:578 systemv/cupsaddsmb.c:620
+#, c-format
+msgid "cupsaddsmb: Unable to convert PPD file for %s - %s\n"
+msgstr "cupsaddsmb: No se ha podido convertir el archivo PPD para %s - %s\n"
+
+#: systemv/cupsaddsmb.c:633 systemv/cupsaddsmb.c:677
+#, c-format
+msgid "cupsaddsmb: Unable to copy Windows 2000 printer driver files (%d)!\n"
+msgstr "cupsaddsmb: No se han podido copiar los archivos de los controladores de impresoras de Windows 2000 (%d).\n"
+
+#: systemv/cupsaddsmb.c:660 systemv/cupsaddsmb.c:704
+#, c-format
+msgid "cupsaddsmb: Unable to copy CUPS printer driver files (%d)!\n"
+msgstr "cupsaddsmb: No se han podido copiar los archivos de los controladores de impresoras de CUPS (%d).\n"
+
+#: systemv/cupsaddsmb.c:697 systemv/cupsaddsmb.c:739
+#, c-format
+msgid "cupsaddsmb: Unable to install Windows 2000 printer driver files (%d)!\n"
+msgstr "cupsaddsmb: No se han podido instalar los archivos de los controladores de impresoras de Windows 2000 (%d).\n"
+
+#: systemv/cupsaddsmb.c:727 systemv/cupsaddsmb.c:771
+#, c-format
+msgid "cupsaddsmb: Unable to copy Windows 9x printer driver files (%d)!\n"
+msgstr "cupsaddsmb: No se han podido copiar los archivos de los controladores de impresoras de Windows 9x (%d).\n"
+
+#: systemv/cupsaddsmb.c:750 systemv/cupsaddsmb.c:792
+#, c-format
+msgid "cupsaddsmb: Unable to install Windows 9x printer driver files (%d)!\n"
+msgstr "cupsaddsmb: No se han podido instalar los archivos de los controladores de impresoras de Windows 9x (%d).\n"
+
+#: systemv/cupsaddsmb.c:771 systemv/cupsaddsmb.c:822
+#, c-format
+msgid "cupsaddsmb: Unable to set Windows printer driver (%d)!\n"
+msgstr "cupsaddsmb: No se ha podido poner el controlador de impresora de Windows (%d).\n"
+
+#: systemv/cupsaddsmb.c:854 systemv/cupsaddsmb.c:905
+msgid ""
+"Usage: cupsaddsmb [options] printer1 ... printerN\n"
+"       cupsaddsmb [options] -a\n"
+"\n"
+"Options:\n"
+"  -H samba-server  Use the named SAMBA server\n"
+"  -U samba-user    Authenticate using the named SAMBA user\n"
+"  -a               Export all printers\n"
+"  -h cups-server   Use the named CUPS server\n"
+"  -v               Be verbose (show commands)\n"
+msgstr ""
+"Uso: cupsaddsmb (opciones) impresora1 ... impresoraN\n"
+"       cupsaddsmb (opciones) -a\n"
+"\n"
+"Opciones:\n"
+"  -H servidor-samba  Usa el servidor SAMBA especificado\n"
+"  -U usuario-samba   Autentifica usando el usuario SAMBA especificado\n"
+"  -a               Exporta todas las impresoras\n"
+"  -h servidor-cups   Usa el servidor CUPS especificado\n"
+"  -v               Ser detallado (mostrar comandos)\n"
+
+#: systemv/cupstestppd.c:120 systemv/cupstestppd.c:137
+msgid "cupstestppd: The -q option is incompatible with the -v option.\n"
+msgstr "cupstestppd: La opción -q no es compatible con la opción -v.\n"
+
+#: systemv/cupstestppd.c:136 systemv/cupstestppd.c:153
+msgid "cupstestppd: The -v option is incompatible with the -q option.\n"
+msgstr "cupstestppd: La opción -v no es compatible con la opción -q.\n"
+
+#: systemv/cupstestppd.c:193 systemv/cupstestppd.c:210
+#, c-format
+msgid ""
+" FAIL\n"
+"      **FAIL**  Unable to open PPD file - %s\n"
+msgstr ""
+" FALLO\n"
+"      **FALLO**  No se ha podido abrir el archivo PPD - %s\n"
+
+#: systemv/cupstestppd.c:204 systemv/cupstestppd.c:221
+#, c-format
+msgid ""
+" FAIL\n"
+"      **FAIL**  Unable to open PPD file - %s on line %d.\n"
+msgstr ""
+" FALLO\n"
+"      **FALLO**  No se ha podido abrir el archivo PPD - %s en la línea %d.\n"
+
+#: systemv/cupstestppd.c:213 systemv/cupstestppd.c:230
+msgid "                REF: Page 42, section 5.2.\n"
+msgstr "                REF: Página 42, sección 5.2.\n"
+
+#: systemv/cupstestppd.c:217 systemv/cupstestppd.c:234
+msgid "                REF: Page 20, section 3.4.\n"
+msgstr "                REF: Página 20, sección 3.4.\n"
+
+#: systemv/cupstestppd.c:222 systemv/cupstestppd.c:239
+msgid "                REF: Pages 45-46, section 5.2.\n"
+msgstr "                REF: Páginas 45-46, sección 5.2.\n"
+
+#: systemv/cupstestppd.c:227 systemv/cupstestppd.c:244
+msgid "                REF: Pages 42-45, section 5.2.\n"
+msgstr "                REF: Páginas 42-45, sección 5.2.\n"
+
+#: systemv/cupstestppd.c:231 systemv/cupstestppd.c:248
+msgid "                REF: Pages 48-49, section 5.2.\n"
+msgstr "                REF: Páginas 48-49, sección 5.2.\n"
+
+#: systemv/cupstestppd.c:235 systemv/cupstestppd.c:252
+msgid "                REF: Pages 52-54, section 5.2.\n"
+msgstr "                REF: Páginas 52-54, sección 5.2.\n"
+
+#: systemv/cupstestppd.c:239 systemv/cupstestppd.c:256
+msgid "                REF: Page 15, section 3.2.\n"
+msgstr "                REF: Página 15, sección 3.2.\n"
+
+#: systemv/cupstestppd.c:243 systemv/cupstestppd.c:247
+#: systemv/cupstestppd.c:260 systemv/cupstestppd.c:264
+msgid "                REF: Page 15, section 3.1.\n"
+msgstr "                REF: Página 15, sección 3.1.\n"
+
+#: systemv/cupstestppd.c:251 systemv/cupstestppd.c:268
+msgid "                REF: Pages 16-17, section 3.2.\n"
+msgstr "                REF: Páginas 16-17, sección 3.2.\n"
+
+#: systemv/cupstestppd.c:255 systemv/cupstestppd.c:272
+msgid "                REF: Page 19, section 3.3.\n"
+msgstr "                REF: Página 19, sección 3.3.\n"
+
+#: systemv/cupstestppd.c:259 systemv/cupstestppd.c:276
+msgid "                REF: Page 27, section 3.5.\n"
+msgstr "                REF: Página 27, sección 3.5.\n"
+
+#: systemv/cupstestppd.c:280 systemv/cupstestppd.c:299
+msgid ""
+"\n"
+"    DETAILED CONFORMANCE TEST RESULTS\n"
+msgstr ""
+"\n"
+"    RESULTADOS DETALLADOS DE LA PRUEBA DE CONFORMIDAD\n"
+
+#: systemv/cupstestppd.c:307 systemv/cupstestppd.c:326
+#: systemv/cupstestppd.c:325
+#, c-format
+msgid "        WARN    %s has no corresponding options!\n"
+msgstr "        ADVERTENCIA    %s tiene opciones que no corresponden.\n"
+
+#: systemv/cupstestppd.c:318 systemv/cupstestppd.c:333
+#: systemv/cupstestppd.c:354 systemv/cupstestppd.c:369
+#: systemv/cupstestppd.c:397 systemv/cupstestppd.c:417
+#: systemv/cupstestppd.c:439 systemv/cupstestppd.c:459
+#: systemv/cupstestppd.c:479 systemv/cupstestppd.c:499
+#: systemv/cupstestppd.c:517 systemv/cupstestppd.c:535
+#: systemv/cupstestppd.c:556 systemv/cupstestppd.c:575
+#: systemv/cupstestppd.c:595 systemv/cupstestppd.c:615
+#: systemv/cupstestppd.c:635 systemv/cupstestppd.c:655
+#: systemv/cupstestppd.c:673 systemv/cupstestppd.c:690
+#: systemv/cupstestppd.c:712 systemv/cupstestppd.c:730
+#: systemv/cupstestppd.c:747 systemv/cupstestppd.c:765
+#: systemv/cupstestppd.c:781 systemv/cupstestppd.c:801
+#: systemv/cupstestppd.c:832 systemv/cupstestppd.c:854
+#: systemv/cupstestppd.c:902 systemv/cupstestppd.c:931
+#: systemv/cupstestppd.c:952 systemv/cupstestppd.c:337
+#: systemv/cupstestppd.c:352 systemv/cupstestppd.c:373
+#: systemv/cupstestppd.c:388 systemv/cupstestppd.c:416
+#: systemv/cupstestppd.c:436 systemv/cupstestppd.c:458
+#: systemv/cupstestppd.c:478 systemv/cupstestppd.c:498
+#: systemv/cupstestppd.c:518 systemv/cupstestppd.c:536
+#: systemv/cupstestppd.c:554 systemv/cupstestppd.c:594
+#: systemv/cupstestppd.c:614 systemv/cupstestppd.c:634
+#: systemv/cupstestppd.c:654 systemv/cupstestppd.c:674
+#: systemv/cupstestppd.c:692 systemv/cupstestppd.c:709
+#: systemv/cupstestppd.c:731 systemv/cupstestppd.c:749
+#: systemv/cupstestppd.c:766 systemv/cupstestppd.c:784
+#: systemv/cupstestppd.c:800 systemv/cupstestppd.c:820
+#: systemv/cupstestppd.c:851 systemv/cupstestppd.c:873
+#: systemv/cupstestppd.c:921 systemv/cupstestppd.c:950
+#: systemv/cupstestppd.c:971 systemv/cupstestppd.c:343
+#: systemv/cupstestppd.c:361 systemv/cupstestppd.c:376
+#: systemv/cupstestppd.c:412 systemv/cupstestppd.c:440
+#: systemv/cupstestppd.c:460 systemv/cupstestppd.c:482
+#: systemv/cupstestppd.c:502 systemv/cupstestppd.c:522
+#: systemv/cupstestppd.c:542 systemv/cupstestppd.c:560
+#: systemv/cupstestppd.c:578 systemv/cupstestppd.c:599
+#: systemv/cupstestppd.c:618 systemv/cupstestppd.c:638
+#: systemv/cupstestppd.c:658 systemv/cupstestppd.c:678
+#: systemv/cupstestppd.c:698 systemv/cupstestppd.c:716
+#: systemv/cupstestppd.c:733 systemv/cupstestppd.c:755
+#: systemv/cupstestppd.c:773 systemv/cupstestppd.c:790
+#: systemv/cupstestppd.c:808 systemv/cupstestppd.c:824
+#: systemv/cupstestppd.c:844 systemv/cupstestppd.c:875
+#: systemv/cupstestppd.c:897 systemv/cupstestppd.c:945
+#: systemv/cupstestppd.c:974 systemv/cupstestppd.c:995
+#: systemv/cupstestppd.c:1050 systemv/cupstestppd.c:1075
+#: systemv/cupstestppd.c:1095 systemv/cupstestppd.c:1116
+#: systemv/cupstestppd.c:1138 systemv/cupstestppd.c:1172
+msgid " FAIL\n"
+msgstr " FALLO\n"
+
+#: systemv/cupstestppd.c:321 systemv/cupstestppd.c:340
+#: systemv/cupstestppd.c:364
+msgid ""
+"      **FAIL**  REQUIRED DefaultImageableArea\n"
+"                REF: Page 102, section 5.15.\n"
+msgstr ""
+"      **FALLO**  SE NECESITA DefaultImageableArea\n"
+"                REF: Página 102, sección 5.15.\n"
+
+#: systemv/cupstestppd.c:336 systemv/cupstestppd.c:355
+#: systemv/cupstestppd.c:379
+#, c-format
+msgid ""
+"      **FAIL**  BAD DefaultImageableArea %s!\n"
+"                REF: Page 102, section 5.15.\n"
+msgstr ""
+"      **FALLO**  MAL DefaultImageableArea %s\n"
+"                REF: Página 102, sección 5.15.\n"
+
+#: systemv/cupstestppd.c:346 systemv/cupstestppd.c:365
+#: systemv/cupstestppd.c:389
+msgid "        PASS    DefaultImageableArea\n"
+msgstr "        PASA    DefaultImageableArea\n"
+
+#: systemv/cupstestppd.c:357 systemv/cupstestppd.c:376
+#: systemv/cupstestppd.c:400
+msgid ""
+"      **FAIL**  REQUIRED DefaultPaperDimension\n"
+"                REF: Page 103, section 5.15.\n"
+msgstr ""
+"      **FALLO**  SE NECESITA DefaultPaperDimension\n"
+"                REF: Página 103, sección 5.15.\n"
+
+#: systemv/cupstestppd.c:372 systemv/cupstestppd.c:391
+#: systemv/cupstestppd.c:415
+#, c-format
+msgid ""
+"      **FAIL**  BAD DefaultPaperDimension %s!\n"
+"                REF: Page 103, section 5.15.\n"
+msgstr ""
+"      **FALLO**  MAL DefaultPaperDimension %s.\n"
+"                REF: Página 103, sección 5.15.\n"
+
+#: systemv/cupstestppd.c:380 systemv/cupstestppd.c:399
+#: systemv/cupstestppd.c:423
+msgid "        PASS    DefaultPaperDimension\n"
+msgstr "        PASA    DefaultPaperDimension\n"
+
+#: systemv/cupstestppd.c:400 systemv/cupstestppd.c:419
+#: systemv/cupstestppd.c:443
+#, c-format
+msgid ""
+"      **FAIL**  BAD Default%s %s\n"
+"                REF: Page 40, section 4.5.\n"
+msgstr ""
+"      **FALLO**  MAL %s %s predeterminado\n"
+"                REF: Página 40, sección 4.5.\n"
+
+#: systemv/cupstestppd.c:409 systemv/cupstestppd.c:428
+#: systemv/cupstestppd.c:452
+#, c-format
+msgid "        PASS    Default%s\n"
+msgstr "        PASA    %s predeterminado\n"
+
+#: systemv/cupstestppd.c:420 systemv/cupstestppd.c:439
+#: systemv/cupstestppd.c:463
+#, c-format
+msgid ""
+"      **FAIL**  REQUIRED Default%s\n"
+"                REF: Page 40, section 4.5.\n"
+msgstr ""
+"      **FALLO**  SE NECESITA %s predeterminado\n"
+"                REF: Página 40, sección 4.5.\n"
+
+#: systemv/cupstestppd.c:432 systemv/cupstestppd.c:451
+#: systemv/cupstestppd.c:475
+msgid "        PASS    FileVersion\n"
+msgstr "        PASA    FileVersion\n"
+
+#: systemv/cupstestppd.c:442 systemv/cupstestppd.c:461
+#: systemv/cupstestppd.c:485
+msgid ""
+"      **FAIL**  REQUIRED FileVersion\n"
+"                REF: Page 56, section 5.3.\n"
+msgstr ""
+"      **FALLO**  SE NECESITA FileVersion\n"
+"                REF: Página 56, sección 5.3.\n"
+
+#: systemv/cupstestppd.c:452 systemv/cupstestppd.c:471
+#: systemv/cupstestppd.c:495
+msgid "        PASS    FormatVersion\n"
+msgstr "        PASA    FormatVersion\n"
+
+#: systemv/cupstestppd.c:462 systemv/cupstestppd.c:481
+#: systemv/cupstestppd.c:505
+msgid ""
+"      **FAIL**  REQUIRED FormatVersion\n"
+"                REF: Page 56, section 5.3.\n"
+msgstr ""
+"      **FALLO**  SE NECESITA FormatVersion\n"
+"                REF: Página 56, sección 5.3.\n"
+
+#: systemv/cupstestppd.c:472 systemv/cupstestppd.c:491
+#: systemv/cupstestppd.c:515
+msgid "        PASS    LanguageEncoding\n"
+msgstr "        PASA    LanguageEncoding\n"
+
+#: systemv/cupstestppd.c:482 systemv/cupstestppd.c:501
+#: systemv/cupstestppd.c:525
+msgid ""
+"      **FAIL**  REQUIRED LanguageEncoding\n"
+"                REF: Pages 56-57, section 5.3.\n"
+msgstr ""
+"      **FALLO**  SE NECESITA LanguageEncoding\n"
+"                REF: Páginas 56-57, sección 5.3.\n"
+
+#: systemv/cupstestppd.c:492 systemv/cupstestppd.c:511
+#: systemv/cupstestppd.c:535
+msgid "        PASS    LanguageVersion\n"
+msgstr "        PASA    LanguageVersion\n"
+
+#: systemv/cupstestppd.c:502 systemv/cupstestppd.c:521
+#: systemv/cupstestppd.c:545
+msgid ""
+"      **FAIL**  REQUIRED LanguageVersion\n"
+"                REF: Pages 57-58, section 5.3.\n"
+msgstr ""
+"      **FALLO**  SE NECESITA LanguageVersion\n"
+"                REF: Páginas 57-58, sección 5.3.\n"
+
+#: systemv/cupstestppd.c:520 systemv/cupstestppd.c:539
+#: systemv/cupstestppd.c:563
+msgid ""
+"      **FAIL**  BAD Manufacturer (should be \"HP\")\n"
+"                REF: Page 211, table D.1.\n"
+msgstr ""
+"      **FALLO**  Fabricante INCORRECTO (debería ser \"HP\")\n"
+"                REF: Página 211, tabla D.1.\n"
+
+#: systemv/cupstestppd.c:528 systemv/cupstestppd.c:547
+#: systemv/cupstestppd.c:571
+msgid "        PASS    Manufacturer\n"
+msgstr "        PASA    Manufacturer\n"
+
+#: systemv/cupstestppd.c:538 systemv/cupstestppd.c:557
+#: systemv/cupstestppd.c:581
+msgid ""
+"      **FAIL**  REQUIRED Manufacturer\n"
+"                REF: Pages 58-59, section 5.3.\n"
+msgstr ""
+"      **FALLO**  SE NECESITA Manufacturer\n"
+"                REF: Páginas 58-59, sección 5.3.\n"
+
+#: systemv/cupstestppd.c:559 systemv/cupstestppd.c:578
+#: systemv/cupstestppd.c:602
+#, c-format
+msgid ""
+"      **FAIL**  BAD ModelName - \"%c\" not allowed in string.\n"
+"                REF: Pages 59-60, section 5.3.\n"
+msgstr ""
+"      **FALLO**  MAL  ModelName - \"%c\" no está permitido en la cadena.\n"
+"                REF: Páginas 59-60, sección 5.3.\n"
+
+#: systemv/cupstestppd.c:568 systemv/cupstestppd.c:587
+#: systemv/cupstestppd.c:611
+msgid "        PASS    ModelName\n"
+msgstr "        PASA    ModelName\n"
+
+#: systemv/cupstestppd.c:578 systemv/cupstestppd.c:597
+#: systemv/cupstestppd.c:621
+msgid ""
+"      **FAIL**  REQUIRED ModelName\n"
+"                REF: Pages 59-60, section 5.3.\n"
+msgstr ""
+"      **FALLO**  SE NECESITA ModelName\n"
+"                REF: Páginas 59-60, sección 5.3.\n"
+
+#: systemv/cupstestppd.c:588 systemv/cupstestppd.c:607
+#: systemv/cupstestppd.c:631
+msgid "        PASS    NickName\n"
+msgstr "        PASA    NickName\n"
+
+#: systemv/cupstestppd.c:598 systemv/cupstestppd.c:617
+#: systemv/cupstestppd.c:641
+msgid ""
+"      **FAIL**  REQUIRED NickName\n"
+"                REF: Page 60, section 5.3.\n"
+msgstr ""
+"      **FALLO**  SE NECESITA NickName\n"
+"                REF: Página 60, sección 5.3.\n"
+
+#: systemv/cupstestppd.c:608 systemv/cupstestppd.c:627
+#: systemv/cupstestppd.c:651
+msgid "        PASS    PageSize\n"
+msgstr "        PASA    PageSize\n"
+
+#: systemv/cupstestppd.c:618 systemv/cupstestppd.c:637
+#: systemv/cupstestppd.c:661
+msgid ""
+"      **FAIL**  REQUIRED PageSize\n"
+"                REF: Pages 99-100, section 5.14.\n"
+msgstr ""
+"      **FALLO**  SE NECESITA PageSize\n"
+"                REF: Páginas 99-100, sección 5.14.\n"
+
+#: systemv/cupstestppd.c:628 systemv/cupstestppd.c:647
+#: systemv/cupstestppd.c:671
+msgid "        PASS    PageRegion\n"
+msgstr "        PASA    PageRegion\n"
+
+#: systemv/cupstestppd.c:638 systemv/cupstestppd.c:657
+#: systemv/cupstestppd.c:681
+msgid ""
+"      **FAIL**  REQUIRED PageRegion\n"
+"                REF: Page 100, section 5.14.\n"
+msgstr ""
+"      **FALLO**  SE NECESITA PageRegion\n"
+"                REF: Página 100, sección 5.14.\n"
+
+#: systemv/cupstestppd.c:648 systemv/cupstestppd.c:667
+#: systemv/cupstestppd.c:691
+msgid "        PASS    PCFileName\n"
+msgstr "        PASA    PCFileName\n"
+
+#: systemv/cupstestppd.c:658 systemv/cupstestppd.c:677
+#: systemv/cupstestppd.c:701
+msgid ""
+"      **FAIL**  REQUIRED PCFileName\n"
+"                REF: Pages 61-62, section 5.3.\n"
+msgstr ""
+"      **FALLO**  SE NECESITA PCFileName\n"
+"                REF: Páginas 61-62, sección 5.3.\n"
+
+#: systemv/cupstestppd.c:676 systemv/cupstestppd.c:695
+#: systemv/cupstestppd.c:719
+msgid ""
+"      **FAIL**  BAD Product - not \"(string)\".\n"
+"                REF: Page 62, section 5.3.\n"
+msgstr ""
+"      **FALLO**  MAL Product - no es \"(string)\".\n"
+"                REF: Página 62, sección 5.3.\n"
+
+#: systemv/cupstestppd.c:683 systemv/cupstestppd.c:702
+#: systemv/cupstestppd.c:726
+msgid "        PASS    Product\n"
+msgstr "        PASA    Product\n"
+
+#: systemv/cupstestppd.c:693 systemv/cupstestppd.c:712
+#: systemv/cupstestppd.c:736
+msgid ""
+"      **FAIL**  REQUIRED Product\n"
+"                REF: Page 62, section 5.3.\n"
+msgstr ""
+"      **FALLO**  SE NECESITA Product\n"
+"                REF: Página 62, sección 5.3.\n"
+
+#: systemv/cupstestppd.c:715 systemv/cupstestppd.c:734
+#: systemv/cupstestppd.c:758
+msgid ""
+"      **FAIL**  BAD PSVersion - not \"(string) int\".\n"
+"                REF: Pages 62-64, section 5.3.\n"
+msgstr ""
+"      **FALLO**  MAL PSVersion - no es \"(string) int\".\n"
+"                REF: Páginas 62-64, sección 5.3.\n"
+
+#: systemv/cupstestppd.c:723 systemv/cupstestppd.c:742
+#: systemv/cupstestppd.c:766
+msgid "        PASS    PSVersion\n"
+msgstr "        PASA    PSVersion\n"
+
+#: systemv/cupstestppd.c:733 systemv/cupstestppd.c:752
+#: systemv/cupstestppd.c:776
+msgid ""
+"      **FAIL**  REQUIRED PSVersion\n"
+"                REF: Pages 62-64, section 5.3.\n"
+msgstr ""
+"      **FALLO**  SE NECESITA PSVersion\n"
+"                REF: Páginas 62-64, sección 5.3.\n"
+
+#: systemv/cupstestppd.c:750 systemv/cupstestppd.c:769
+#: systemv/cupstestppd.c:793
+msgid ""
+"      **FAIL**  BAD ShortNickName - longer than 31 chars.\n"
+"                REF: Pages 64-65, section 5.3.\n"
+msgstr ""
+"      **FALLO**  MAL ShortNickName - mayor de 31 caracteres.\n"
+"                REF: Páginas 64-65, sección 5.3.\n"
+
+#: systemv/cupstestppd.c:758 systemv/cupstestppd.c:777
+#: systemv/cupstestppd.c:801
+msgid "        PASS    ShortNickName\n"
+msgstr "        PASA    ShortNickName\n"
+
+#: systemv/cupstestppd.c:768 systemv/cupstestppd.c:787
+#: systemv/cupstestppd.c:811
+msgid ""
+"      **FAIL**  REQUIRED ShortNickName\n"
+"                REF: Page 64-65, section 5.3.\n"
+msgstr ""
+"      **FALLO**  SE NECESITA ShortNickName\n"
+"                REF: Página 64-65, sección 5.3.\n"
+
+#: systemv/cupstestppd.c:784 systemv/cupstestppd.c:803
+#: systemv/cupstestppd.c:827
+msgid ""
+"      **FAIL**  BAD JobPatchFile attribute in file\n"
+"                REF: Page 24, section 3.4.\n"
+msgstr ""
+"      **FALLO**  MAL atributo JobPatchFile en archivo\n"
+"                REF: Página 24, sección 3.4.\n"
+
+#: systemv/cupstestppd.c:804 systemv/cupstestppd.c:823
+#: systemv/cupstestppd.c:847
+msgid ""
+"      **FAIL**  REQUIRED PageSize\n"
+"                REF: Page 41, section 5.\n"
+"                REF: Page 99, section 5.14.\n"
+msgstr ""
+"      **FALLO**  SE NECESITA PageSize\n"
+"                REF: Página 41, sección 5.\n"
+"                REF: Página 99, sección 5.14.\n"
+
+#: systemv/cupstestppd.c:835 systemv/cupstestppd.c:854
+#: systemv/cupstestppd.c:878
+#, c-format
+msgid ""
+"      **FAIL**  REQUIRED ImageableArea for PageSize %s\n"
+"                REF: Page 41, section 5.\n"
+"                REF: Page 102, section 5.15.\n"
+msgstr ""
+"      **FALLO**  SE NECESITA ImageableArea para PageSize %s\n"
+"                REF: Página 41, sección 5.\n"
+"                REF: Página 102, sección 5.15.\n"
+
+#: systemv/cupstestppd.c:857 systemv/cupstestppd.c:876
+#: systemv/cupstestppd.c:900
+#, c-format
+msgid ""
+"      **FAIL**  REQUIRED PaperDimension for PageSize %s\n"
+"                REF: Page 41, section 5.\n"
+"                REF: Page 103, section 5.15.\n"
+msgstr ""
+"      **FALLO**  SE NECESITA PaperDimension para PageSize %s\n"
+"                REF: Página 41, sección 5.\n"
+"                REF: Página 103, sección 5.15.\n"
+
+#: systemv/cupstestppd.c:905 systemv/cupstestppd.c:924
+#: systemv/cupstestppd.c:948
+#, c-format
+msgid ""
+"      **FAIL**  Bad %s choice %s!\n"
+"                REF: Page 84, section 5.9\n"
+msgstr ""
+"      **FALLO**  Preferencia %s incorrecta %s.\n"
+"                REF: Página 84, sección 5.9\n"
+
+#: systemv/cupstestppd.c:934 systemv/cupstestppd.c:953
+#: systemv/cupstestppd.c:977
+#, c-format
+msgid ""
+"      **FAIL**  REQUIRED %s does not define choice None!\n"
+"                REF: Page 122, section 5.17\n"
+msgstr ""
+"      **FALLO**  SE NECESITA %s no define la preferencia None\n"
+"                REF: Página 122, sección 5.17\n"
+
+#: systemv/cupstestppd.c:955 systemv/cupstestppd.c:974
+#: systemv/cupstestppd.c:998
+#, c-format
+msgid ""
+"      **FAIL**  Bad %s choice %s!\n"
+"                REF: Page 122, section 5.17\n"
+msgstr ""
+"      **FALLO**  Preferencia %s incorrecta %s.\n"
+"                REF: Página 122, sección 5.17\n"
+
+#: systemv/cupstestppd.c:967 systemv/cupstestppd.c:986
+#: systemv/cupstestppd.c:1186
+msgid " PASS\n"
+msgstr " PASA\n"
+
+#: systemv/cupstestppd.c:976 systemv/cupstestppd.c:997
+#: systemv/cupstestppd.c:1197
+#, c-format
+msgid ""
+"        WARN    Duplex option keyword %s should be named Duplex or "
+"JCLDuplex!\n"
+"                REF: Page 122, section 5.17\n"
+msgstr ""
+"        ADVERTENCIA    Clave de opción Duplex %s debería llamarse Duplex o "
+"JCLDuplex.\n"
+"                REF: Página 122, sección 5.17\n"
+
+#: systemv/cupstestppd.c:986 systemv/cupstestppd.c:1007
+#: systemv/cupstestppd.c:1207
+msgid "        WARN    Default choices conflicting!\n"
+msgstr ""
+"        ADVERTENCIA    Las preferencias predeterminadas están en conflicto.\n"
+
+#: systemv/cupstestppd.c:994 systemv/cupstestppd.c:1015
+#: systemv/cupstestppd.c:1215
+#, c-format
+msgid ""
+"        WARN    Obsolete PPD version %.1f!\n"
+"                REF: Page 42, section 5.2.\n"
+msgstr ""
+"        ADVERTENCIA    Versión de PPD %.1f anticuada.\n"
+"                REF: Página 42, sección 5.2.\n"
+
+#: systemv/cupstestppd.c:1002 systemv/cupstestppd.c:1023
+#: systemv/cupstestppd.c:1223
+msgid ""
+"        WARN    LanguageEncoding required by PPD 4.3 spec.\n"
+"                REF: Pages 56-57, section 5.3.\n"
+msgstr ""
+"        ADVERTENCIA    Se necesita LanguageEncoding por especificación de PPD 4.3.\n"
+"                REF: Páginas 56-57, sección 5.3.\n"
+
+#: systemv/cupstestppd.c:1010 systemv/cupstestppd.c:1031
+#: systemv/cupstestppd.c:1231
+msgid ""
+"        WARN    Manufacturer required by PPD 4.3 spec.\n"
+"                REF: Pages 58-59, section 5.3.\n"
+msgstr ""
+"        ADVERTENCIA    Se necesita Manufacturer por especificación de PPD 4.3.\n"
+"                REF: Páginas 58-59, seccion 5.3.\n"
+
+#: systemv/cupstestppd.c:1023 systemv/cupstestppd.c:1044
+#: systemv/cupstestppd.c:1244
+msgid ""
+"        WARN    PCFileName longer than 8.3 in violation of PPD spec.\n"
+"                REF: Pages 61-62, section 5.3.\n"
+msgstr ""
+"        ADVERTENCIA    PCFileName es mas largo que 8.3 violando la especificación PPD.\n"
+"                REF: Páginas 61-62, sección 5.3.\n"
+
+#: systemv/cupstestppd.c:1031 systemv/cupstestppd.c:1052
+#: systemv/cupstestppd.c:1252
+msgid ""
+"        WARN    ShortNickName required by PPD 4.3 spec.\n"
+"                REF: Pages 64-65, section 5.3.\n"
+msgstr ""
+"        ADVERTENCIA    Se necesita ShortNickName por especificación de PPD 4.3.\n"
+"                REF: Páginas 64-65, sección 5.3.\n"
+
+#: systemv/cupstestppd.c:1048 systemv/cupstestppd.c:1069
+#: systemv/cupstestppd.c:1269
+msgid ""
+"        WARN    Protocols contains both PJL and BCP; expected TBCP.\n"
+"                REF: Pages 78-79, section 5.7.\n"
+msgstr ""
+"        ADVERTENCIA    Protocols contiene a ambos, PJL y BCP; se esperaba TBCP.\n"
+"                REF: Páginas 78-79, sección 5.7.\n"
+
+#: systemv/cupstestppd.c:1057 systemv/cupstestppd.c:1078
+#: systemv/cupstestppd.c:1278
+msgid ""
+"        WARN    Protocols contains PJL but JCL attributes are not set.\n"
+"                REF: Pages 78-79, section 5.7.\n"
+msgstr ""
+"        ADVERTENCIA    Protocols contiene a PJL pero no se especifican los atributos JCL.\n"
+"                REF: Páginas 78-79, sección 5.7.\n"
+
+#: systemv/cupstestppd.c:1085 systemv/cupstestppd.c:1106
+#: systemv/cupstestppd.c:1306
+#, c-format
+msgid ""
+"        WARN    %s shares a common prefix with %s\n"
+"                REF: Page 15, section 3.2.\n"
+msgstr ""
+"        ADVERTENCIA    %s comparte un prefijo común con %s\n"
+"                REF: Página 15, sección 3.2.\n"
+
+#: systemv/cupstestppd.c:1097 systemv/cupstestppd.c:1118
+#: systemv/cupstestppd.c:1318
+#, c-format
+msgid "    %d ERROR%s FOUND\n"
+msgstr "    %d ERROR%s ENCONTRADO(S)\n"
+
+#: systemv/cupstestppd.c:1100 systemv/cupstestppd.c:1121
+#: systemv/cupstestppd.c:1321
+msgid "    NO ERRORS FOUND\n"
+msgstr "....NO SE HAN ENCONTRADO ERRORES\n"
+
+#: systemv/cupstestppd.c:1360 systemv/cupstestppd.c:1465
+#: systemv/cupstestppd.c:1665
+#, c-format
+msgid ""
+"        WARN    \"%s %s\" conflicts with \"%s %s\"\n"
+"                (constraint=\"%s %s %s %s\")\n"
+msgstr ""
+"        ADVERTENCIA    \"%s %s\" está en conflicto con \"%s %s\"\n"
+"                (restricción=\"%s %s %s %s\")\n"
+
+#: systemv/cupstestppd.c:1376 systemv/cupstestppd.c:1481
+#: systemv/cupstestppd.c:1681
+msgid ""
+"Usage: cupstestppd [-q] [-r] [-v[v]] filename1.ppd[.gz] [... filenameN.ppd[."
+"gz]]\n"
+"       program | cupstestppd [-q] [-r] [-v[v]] -\n"
+msgstr ""
+"Uso: cupstestppd [-q] [-r] [-v[v]] nombre_archivo1.ppd[.gz] [... "
+"nombre_archivoN.ppd[.gz]]\n"
+"       programa | cupstestppd [-q] [-r] [-v[v]] -\n"
+
+#: systemv/lpstat.c:144 systemv/lpstat.c:155
+msgid "lpstat: Need \"completed\" or \"not-completed\" after -W!\n"
+msgstr "lpstat: Se necesita 'completed' o 'not completed' tras -W.\n"
+
+#: systemv/lpstat.c:212 systemv/lpstat.c:213
+msgid "lpstat: The -b option requires a destination argument.\n"
+msgstr "lpstat: La opción -b necesita un argumento destino.\n"
+
+#: systemv/lpstat.c:274 systemv/lpinfo.c:143 systemv/lpmove.c:105
+#: systemv/lpmove.c:110 systemv/lpstat.c:275
+msgid "Error: need hostname after '-h' option!\n"
+msgstr "Error: se necesita un nombre de ordenador tras la opción '-h'.\n"
+
+#: systemv/lpstat.c:433 systemv/lpstat.c:434
+#, c-format
+msgid "lpstat: Unknown option '%c'!\n"
+msgstr "lpstat: Opción '%c' desconocida.\n"
+
+#: systemv/lpstat.c:504 systemv/lpstat.c:505
+#, c-format
+msgid "lpstat: Invalid destination name in list \"%s\"!\n"
+msgstr "lpstat: Nombre de destino inválido en lista \"%s\".\n"
+
+#: systemv/lpstat.c:519 systemv/lpstat.c:520
+#, c-format
+msgid "lpstat: Unknown destination \"%s\"!\n"
+msgstr "lpstat: Destino desconocido \"%s\".\n"
+
+#: systemv/lpstat.c:541 systemv/lpstat.c:542
+#, c-format
+msgid "lpstat: Unable to connect to server %s on port %d: %s\n"
+msgstr "lpstat: No se ha podido conectar al servidor %s en el puerto %d: %s\n"
+
+#: systemv/lpstat.c:625 systemv/lpstat.c:773 systemv/lpstat.c:1187
+#: systemv/lpstat.c:1379 systemv/lpstat.c:1809 systemv/lpstat.c:2262
+#, c-format
+msgid "lpstat: get-printers failed: %s\n"
+msgstr "lpstat: get-printers ha fallado: %s\n"
+
+#: systemv/lpstat.c:741
+#, c-format
+msgid "%s accepting requests since Jan 01 00:00\n"
+msgstr "%s aceptando peticiones desde Ene 01 00:00\n"
+
+#: systemv/lpstat.c:745
+#, c-format
+msgid ""
+"%s not accepting requests since Jan 01 00:00 -\n"
+"\t%s\n"
+msgstr ""
+"%s no aceptando peticiones desde Ene 01 00:00 - \n"
+"\t%s\n"
+
+#: systemv/lpstat.c:754
+#, c-format
+msgid "%s/%s accepting requests since Jan 01 00:00\n"
+msgstr "%s/%s aceptando peticiones desde Ene 01 00:00\n"
+
+#: systemv/lpstat.c:758
+#, c-format
+msgid ""
+"%s/%s not accepting requests since Jan 01 00:00 -\n"
+"\t%s\n"
+msgstr ""
+"%s/%s no aceptando peticiones desde Ene 01 00:00 -\n"
+"\t%s\n"
+
+#: systemv/lpstat.c:861 systemv/lpstat.c:1056
+#, c-format
+msgid "lpstat: get-classes failed: %s\n"
+msgstr "lpstat: get-classes ha fallado: %s\n"
+
+#: systemv/lpstat.c:1033 systemv/lpstat.c:1011 systemv/lpstat.c:1039
+#, c-format
+msgid "members of class %s:\n"
+msgstr "miembros de la clase %s:\n"
+
+#: systemv/lpstat.c:1080 systemv/lpstat.c:1057 systemv/lpstat.c:1085
+#, c-format
+msgid "system default destination: %s/%s\n"
+msgstr "destino predeterminado del sistema: %s/%s\n"
+
+#: systemv/lpstat.c:1083 systemv/lpstat.c:1060 systemv/lpstat.c:1088
+#, c-format
+msgid "system default destination: %s\n"
+msgstr "destino predeterminado del sistema: %s\n"
+
+#: systemv/lpstat.c:1105 systemv/lpstat.c:1082 systemv/lpstat.c:1110
+#, c-format
+msgid ""
+"lpstat: error - %s environment variable names non-existent destination \"%s"
+"\"!\n"
+msgstr ""
+"lpstat: error - Los nombre de variable de entorno %s no existen en el "
+"destino \"%s\".\n"
+
+#: systemv/lpstat.c:1109 systemv/lpstat.c:1086 systemv/lpstat.c:1114
+msgid "no system default destination\n"
+msgstr "no hay un destino predeterminado del sistema\n"
+
+#: systemv/lpstat.c:1313 systemv/lpstat.c:1281 systemv/lpstat.c:1309
+#: systemv/lpstat.c:1311
+#, c-format
+msgid "Output for printer %s is sent to remote printer %s on %s\n"
+msgstr "La salida de la impresora %s se ha enviado a la impresora remota %s en %s\n"
+
+#: systemv/lpstat.c:1319 systemv/lpstat.c:1323 systemv/lpstat.c:1287
+#: systemv/lpstat.c:1291 systemv/lpstat.c:1315 systemv/lpstat.c:1317
+#: systemv/lpstat.c:1321
+#, c-format
+msgid "Output for printer %s is sent to %s\n"
+msgstr "La salida de la impresora %s se ha enviado a %s\n"
+
+#: systemv/lpstat.c:1331 systemv/lpstat.c:1299 systemv/lpstat.c:1327
+#: systemv/lpstat.c:1329
+#, c-format
+msgid "Output for printer %s/%s is sent to remote printer %s on %s\n"
+msgstr "La salida de la impresora %s/%s se ha enviado a la impresora remota %s en %s\n"
+
+#: systemv/lpstat.c:1337 systemv/lpstat.c:1341 systemv/lpstat.c:1305
+#: systemv/lpstat.c:1309 systemv/lpstat.c:1333 systemv/lpstat.c:1335
+#: systemv/lpstat.c:1339
+#, c-format
+msgid "Output for printer %s/%s is sent to %s\n"
+msgstr "La salida de la impresora %s/%s se ha enviado a %s\n"
+
+#: systemv/lpstat.c:1346 systemv/lpstat.c:1349 systemv/lpstat.c:1352
+#: systemv/lpstat.c:1314 systemv/lpstat.c:1317 systemv/lpstat.c:1320
+#: systemv/lpstat.c:1342 systemv/lpstat.c:1345 systemv/lpstat.c:1348
+#: systemv/lpstat.c:1344 systemv/lpstat.c:1347 systemv/lpstat.c:1350
+#, c-format
+msgid "device for %s: %s\n"
+msgstr "tipo de conexión para %s: %s\n"
+
+#: systemv/lpstat.c:1359 systemv/lpstat.c:1362 systemv/lpstat.c:1365
+#: systemv/lpstat.c:1327 systemv/lpstat.c:1330 systemv/lpstat.c:1333
+#: systemv/lpstat.c:1355 systemv/lpstat.c:1358 systemv/lpstat.c:1361
+#: systemv/lpstat.c:1357 systemv/lpstat.c:1360 systemv/lpstat.c:1363
+#, c-format
+msgid "device for %s/%s: %s\n"
+msgstr "tipo de conexión para %s/%s: %s\n"
+
+#: systemv/lpstat.c:1481 systemv/lpstat.c:1693
+#, c-format
+msgid "lpstat: get-jobs failed: %s\n"
+msgstr "lpstat: get-jobs ha fallado: %s\n"
+
+#: systemv/lpstat.c:1681 systemv/lpstat.c:1635 systemv/lpstat.c:1663
+#: systemv/lpstat.c:1665
+#, c-format
+msgid "\tqueued for %s\n"
+msgstr "\ten cola para %s\n"
+
+#: systemv/lpstat.c:2037 systemv/lpstat.c:1971 systemv/lpstat.c:1999
+#: systemv/lpstat.c:2001
+#, c-format
+msgid "printer %s is idle.  enabled since %s\n"
+msgstr "la impresora %s está inactiva.  activada desde %s\n"
+
+#: systemv/lpstat.c:2042 systemv/lpstat.c:1976 systemv/lpstat.c:2004
+#: systemv/lpstat.c:2006
+#, c-format
+msgid "printer %s now printing %s-%d.  enabled since %s\n"
+msgstr "la impresora %s está imprimiendo %s-%d.  activada desde %s\n"
+
+#: systemv/lpstat.c:2048 systemv/lpstat.c:1982 systemv/lpstat.c:2010
+#: systemv/lpstat.c:2012
+#, c-format
+msgid "printer %s disabled since %s -\n"
+msgstr "la impresora %s está deshabilitada desde %s -\n"
+
+#: systemv/lpstat.c:2056 systemv/lpstat.c:2169 systemv/lpstat.c:1990
+#: systemv/lpstat.c:2103 systemv/lpstat.c:2018 systemv/lpstat.c:2131
+#: systemv/lpstat.c:2020 systemv/lpstat.c:2133
+msgid "\treason unknown\n"
+msgstr "\trazón desconocida\n"
+
+#: systemv/lpstat.c:2063 systemv/lpstat.c:2176 systemv/lpstat.c:1997
+#: systemv/lpstat.c:2110 systemv/lpstat.c:2025 systemv/lpstat.c:2138
+#: systemv/lpstat.c:2027 systemv/lpstat.c:2140
+msgid ""
+"\tForm mounted:\n"
+"\tContent types: any\n"
+"\tPrinter types: unknown\n"
+msgstr ""
+"\tFormulario montado:\n"
+"\tTipos de contenido: cualquiera\n"
+"\tTipos de impresora: desconocido\n"
+
+#: systemv/lpstat.c:2069 systemv/lpstat.c:2182 systemv/lpstat.c:2003
+#: systemv/lpstat.c:2116 systemv/lpstat.c:2031 systemv/lpstat.c:2144
+#: systemv/lpstat.c:2033 systemv/lpstat.c:2146
+#, c-format
+msgid "\tDescription: %s\n"
+msgstr "\tDescripción: %s\n"
+
+#: systemv/lpstat.c:2074 systemv/lpstat.c:2187 systemv/lpstat.c:2008
+#: systemv/lpstat.c:2121 systemv/lpstat.c:2036 systemv/lpstat.c:2149
+#: systemv/lpstat.c:2038 systemv/lpstat.c:2151
+msgid "\tAlerts:"
+msgstr "\tAlertas:"
+
+#: systemv/lpstat.c:2083 systemv/lpstat.c:2196 systemv/lpstat.c:2017
+#: systemv/lpstat.c:2130 systemv/lpstat.c:2045 systemv/lpstat.c:2158
+#: systemv/lpstat.c:2047 systemv/lpstat.c:2160
+#, c-format
+msgid "\tLocation: %s\n"
+msgstr "\tUbicación: %s\n"
+
+#: systemv/lpstat.c:2088 systemv/lpstat.c:2201 systemv/lpstat.c:2022
+#: systemv/lpstat.c:2135 systemv/lpstat.c:2050 systemv/lpstat.c:2163
+#: systemv/lpstat.c:2052 systemv/lpstat.c:2165
+msgid "\tConnection: remote\n"
+msgstr "\tConexión: remota\n"
+
+#: systemv/lpstat.c:2092 systemv/lpstat.c:2205 systemv/lpstat.c:2026
+#: systemv/lpstat.c:2139 systemv/lpstat.c:2054 systemv/lpstat.c:2167
+#: systemv/lpstat.c:2056 systemv/lpstat.c:2169
+#, c-format
+msgid "\tInterface: %s.ppd\n"
+msgstr "\tInterfaz: %s.ppd\n"
+
+#: systemv/lpstat.c:2097 systemv/lpstat.c:2210 systemv/lpstat.c:2031
+#: systemv/lpstat.c:2144 systemv/lpstat.c:2059 systemv/lpstat.c:2172
+#: systemv/lpstat.c:2061 systemv/lpstat.c:2174
+msgid "\tConnection: direct\n"
+msgstr "\tConexión: directa\n"
+
+#: systemv/lpstat.c:2101 systemv/lpstat.c:2214 systemv/lpstat.c:2035
+#: systemv/lpstat.c:2148 systemv/lpstat.c:2063 systemv/lpstat.c:2176
+#: systemv/lpstat.c:2065 systemv/lpstat.c:2178
+#, c-format
+msgid "\tInterface: %s/interfaces/%s\n"
+msgstr "\tInterfaz: %s/interfaces/%s\n"
+
+#: systemv/lpstat.c:2105 systemv/lpstat.c:2218 systemv/lpstat.c:2039
+#: systemv/lpstat.c:2152 systemv/lpstat.c:2067 systemv/lpstat.c:2180
+#: systemv/lpstat.c:2069 systemv/lpstat.c:2182
+#, c-format
+msgid "\tInterface: %s/ppd/%s.ppd\n"
+msgstr "\tInterfaz: %s/ppd/%s.ppd\n"
+
+#: systemv/lpstat.c:2107 systemv/lpstat.c:2220 systemv/lpstat.c:2041
+#: systemv/lpstat.c:2154 systemv/lpstat.c:2069 systemv/lpstat.c:2182
+#: systemv/lpstat.c:2071 systemv/lpstat.c:2184
+msgid "\tOn fault: no alert\n"
+msgstr "\tEn fallo: no alertar\n"
+
+#: systemv/lpstat.c:2108 systemv/lpstat.c:2221 systemv/lpstat.c:2042
+#: systemv/lpstat.c:2155 systemv/lpstat.c:2070 systemv/lpstat.c:2183
+#: systemv/lpstat.c:2072 systemv/lpstat.c:2185
+msgid "\tAfter fault: continue\n"
+msgstr "\tTras fallo: continuar\n"
+
+#: systemv/lpstat.c:2112 systemv/lpstat.c:2126 systemv/lpstat.c:2225
+#: systemv/lpstat.c:2239 systemv/lpstat.c:2046 systemv/lpstat.c:2060
+#: systemv/lpstat.c:2159 systemv/lpstat.c:2173 systemv/lpstat.c:2074
+#: systemv/lpstat.c:2088 systemv/lpstat.c:2187 systemv/lpstat.c:2201
+#: systemv/lpstat.c:2076 systemv/lpstat.c:2090 systemv/lpstat.c:2189
+#: systemv/lpstat.c:2203
+msgid "\tUsers allowed:\n"
+msgstr "\tUsuarios permitidos:\n"
+
+#: systemv/lpstat.c:2119 systemv/lpstat.c:2232 systemv/lpstat.c:2053
+#: systemv/lpstat.c:2166 systemv/lpstat.c:2081 systemv/lpstat.c:2194
+#: systemv/lpstat.c:2083 systemv/lpstat.c:2196
+msgid "\tUsers denied:\n"
+msgstr "\tUsuarios denegados:\n"
+
+#: systemv/lpstat.c:2127 systemv/lpstat.c:2240 systemv/lpstat.c:2061
+#: systemv/lpstat.c:2174 systemv/lpstat.c:2089 systemv/lpstat.c:2202
+#: systemv/lpstat.c:2091 systemv/lpstat.c:2204
+msgid "\t\t(all)\n"
+msgstr "\t\t(todos)\n"
+
+#: systemv/lpstat.c:2129 systemv/lpstat.c:2242 systemv/lpstat.c:2063
+#: systemv/lpstat.c:2176 systemv/lpstat.c:2091 systemv/lpstat.c:2204
+#: systemv/lpstat.c:2093 systemv/lpstat.c:2206
+msgid "\tForms allowed:\n"
+msgstr "\tFormularios permitidos:\n"
+
+#: systemv/lpstat.c:2130 systemv/lpstat.c:2133 systemv/lpstat.c:2243
+#: systemv/lpstat.c:2246 systemv/lpstat.c:2064 systemv/lpstat.c:2067
+#: systemv/lpstat.c:2177 systemv/lpstat.c:2180 systemv/lpstat.c:2092
+#: systemv/lpstat.c:2095 systemv/lpstat.c:2205 systemv/lpstat.c:2208
+#: systemv/lpstat.c:2094 systemv/lpstat.c:2097 systemv/lpstat.c:2207
+#: systemv/lpstat.c:2210
+msgid "\t\t(none)\n"
+msgstr "\t\t(ninguno)\n"
+
+#: systemv/lpstat.c:2131 systemv/lpstat.c:2244 systemv/lpstat.c:2065
+#: systemv/lpstat.c:2178 systemv/lpstat.c:2093 systemv/lpstat.c:2206
+#: systemv/lpstat.c:2095 systemv/lpstat.c:2208
+msgid "\tBanner required\n"
+msgstr "\tSe necesita un banner\n"
+
+#: systemv/lpstat.c:2132 systemv/lpstat.c:2245 systemv/lpstat.c:2066
+#: systemv/lpstat.c:2179 systemv/lpstat.c:2094 systemv/lpstat.c:2207
+#: systemv/lpstat.c:2096 systemv/lpstat.c:2209
+msgid "\tCharset sets:\n"
+msgstr "\tAjustes del juego de caracteres:\n"
+
+#: systemv/lpstat.c:2134 systemv/lpstat.c:2247 systemv/lpstat.c:2068
+#: systemv/lpstat.c:2181 systemv/lpstat.c:2096 systemv/lpstat.c:2209
+#: systemv/lpstat.c:2098 systemv/lpstat.c:2211
+msgid "\tDefault pitch:\n"
+msgstr "\tPaso predeterminado:\n"
+
+#: systemv/lpstat.c:2135 systemv/lpstat.c:2248 systemv/lpstat.c:2069
+#: systemv/lpstat.c:2182 systemv/lpstat.c:2097 systemv/lpstat.c:2210
+#: systemv/lpstat.c:2099 systemv/lpstat.c:2212
+msgid "\tDefault page size:\n"
+msgstr "\tTamaño de página predeterminado:\n"
+
+#: systemv/lpstat.c:2136 systemv/lpstat.c:2249 systemv/lpstat.c:2070
+#: systemv/lpstat.c:2183 systemv/lpstat.c:2098 systemv/lpstat.c:2211
+#: systemv/lpstat.c:2100 systemv/lpstat.c:2213
+msgid "\tDefault port settings:\n"
+msgstr "\tAjustes del puerto predeterminados:\n"
+
+#: systemv/lpstat.c:2146 systemv/lpstat.c:2080 systemv/lpstat.c:2108
+#: systemv/lpstat.c:2110
+#, c-format
+msgid "printer %s/%s is idle.  enabled since %s\n"
+msgstr "la impresora %s/%s está inactiva.  activada desde %s\n"
+
+#: systemv/lpstat.c:2153 systemv/lpstat.c:2087 systemv/lpstat.c:2115
+#: systemv/lpstat.c:2117
+#, c-format
+msgid "printer %s/%s now printing %s-%d.  enabled since %s\n"
+msgstr "la impresora %s/%s está imprimiendo %s-%d.  activada desde %s\n"
+
+#: systemv/lpstat.c:2160 systemv/lpstat.c:2094 systemv/lpstat.c:2122
+#: systemv/lpstat.c:2124
+#, c-format
+msgid "printer %s/%s disabled since %s -\n"
+msgstr "la impresora %s/%s está desactivada desde %s -\n"
+
+#: systemv/lpstat.c:2279 systemv/lpstat.c:2212 systemv/lpstat.c:2240
+#: systemv/lpstat.c:2242
+msgid "scheduler is running\n"
+msgstr "el planificador de tareas se está ejecutando\n"
+
+#: systemv/lpstat.c:2281 systemv/lpstat.c:2214 systemv/lpstat.c:2242
+#: systemv/lpstat.c:2244
+msgid "scheduler is not running\n"
+msgstr "el planificador de tareas no se está ejecutando\n"
+
+#: systemv/lpadmin.c:113 systemv/lpadmin.c:166 systemv/lpadmin.c:237
+#: systemv/lpadmin.c:298 systemv/lpadmin.c:317 systemv/lpadmin.c:383
+#: systemv/lpadmin.c:424 systemv/lpadmin.c:511 systemv/lpadmin.c:557
+#: systemv/lpadmin.c:603 systemv/lpadmin.c:665 systemv/lpadmin.c:711
+#: systemv/lpadmin.c:772
+#, c-format
+msgid "lpadmin: Unable to connect to server: %s\n"
+msgstr "lpadmin: No se ha podido conectar al servidor: %s\n"
+
+#: systemv/lpadmin.c:122
+msgid ""
+"lpadmin: Unable to add a printer to the class:\n"
+"         You must specify a printer name first!\n"
+msgstr ""
+"lpadmin: No se ha podido añadir una impresora a la clase:\n"
+"         Debe especificar un nombre de impresora primero.\n"
+
+#: systemv/lpadmin.c:137
+msgid "lpadmin: Expected class name after '-c' option!\n"
+msgstr "lpadmin: Se esperaba un nombre de clase tras la opción '-c'\n"
+
+#: systemv/lpadmin.c:148 systemv/lpadmin.c:460
+msgid "lpadmin: Class name can only contain printable characters!\n"
+msgstr ""
+"lpadmin: El nombre de la clase sólo puede contener caracteres imprimibles.\n"
+
+#: systemv/lpadmin.c:181
+msgid "lpadmin: Expected printer name after '-d' option!\n"
+msgstr "lpadmin: Se esperaba un nombre de impresora tras la opción '-d'\n"
+
+#: systemv/lpadmin.c:192 systemv/lpadmin.c:409 systemv/lpadmin.c:583
+msgid "lpadmin: Printer name can only contain printable characters!\n"
+msgstr ""
+"lpadmin: El nombre de la impresora sólo puede contener caracteres "
+"imprimibles.\n"
+
+#: systemv/lpadmin.c:219
+msgid "lpadmin: Expected hostname after '-h' option!\n"
+msgstr "lpadmin: Se esperaba un nombre de ordenador tras la opción '-h'.\n"
+
+#: systemv/lpadmin.c:246
+msgid ""
+"lpadmin: Unable to set the interface script:\n"
+"         You must specify a printer name first!\n"
+msgstr ""
+"lpadmin: No se ha podido establecer el script de interfaz:\n"
+"         Primero debe especificar un nombre de impresora.\n"
+
+#: systemv/lpadmin.c:264
+msgid "lpadmin: Expected interface after '-i' option!\n"
+msgstr "lpadmin: Se esperaba una interfaz tras la opción '-i'.\n"
+
+#: systemv/lpadmin.c:326
+msgid ""
+"lpadmin: Unable to set the interface script or PPD file:\n"
+"         You must specify a printer name first!\n"
+msgstr ""
+"lpadmin: No se ha podido establecer el script de interfaz o el archivo PPD:\n"
+"         Primero debe especificar un nombre de impresora.\n"
+
+#: systemv/lpadmin.c:345
+msgid "lpadmin: Expected model after '-m' option!\n"
+msgstr "lpadmin: Se esperaba un modelo tras la opción '-m'.\n"
+
+#: systemv/lpadmin.c:365
+msgid "lpadmin: Expected name=value after '-o' option!\n"
+msgstr "lpadmin: Se esperaba un nombre=valor tras la opción '-o'.\n"
+
+#: systemv/lpadmin.c:398
+msgid "lpadmin: Expected printer after '-p' option!\n"
+msgstr "lpadmin: Se esperaba una impresora tras la opción '-p'.\n"
+
+#: systemv/lpadmin.c:433
+msgid ""
+"lpadmin: Unable to remove a printer from the class:\n"
+"         You must specify a printer name first!\n"
+msgstr ""
+"lpadmin: No se ha podido quitar una impresora de la clase:\n"
+"         Primero debe especificar un nombre de impresora.\n"
+
+#: systemv/lpadmin.c:449
+msgid "lpadmin: Expected class after '-r' option!\n"
+msgstr "lpadmin: Se esperaba una clase tras la opción '-r'\n"
+
+#: systemv/lpadmin.c:479
+msgid "lpadmin: Expected allow/deny:userlist after '-u' option!\n"
+msgstr "lpadmin: Se esperaba allow/deny:lista_usuarios tras la opción '-u'.\n"
+
+#: systemv/lpadmin.c:496
+#, c-format
+msgid "lpadmin: Unknown allow/deny option \"%s\"!\n"
+msgstr "lpadmin: Opción allow/deny desconocida \"%s\".\n"
+
+#: systemv/lpadmin.c:520
+msgid ""
+"lpadmin: Unable to set the device URI:\n"
+"         You must specify a printer name first!\n"
+msgstr ""
+"lpadmin: No se ha podido ajustar el URI de dispositivo:\n"
+"         Primero debe especificar un nombre de impresora.\n"
+
+#: systemv/lpadmin.c:538
+msgid "lpadmin: Expected device URI after '-v' option!\n"
+msgstr "lpadmin: Se esperaba un URI de dispositivo tras la opción '-v'.\n"
+
+#: systemv/lpadmin.c:572
+msgid "lpadmin: Expected printer or class after '-x' option!\n"
+msgstr "lpadmin: Se esperaba una impresora o clase tras la opción '-x'.\n"
+
+#: systemv/lpadmin.c:612
+msgid ""
+"lpadmin: Unable to set the printer description:\n"
+"         You must specify a printer name first!\n"
+msgstr ""
+"lpadmin: No se ha podido establecer la descripción de la impresora:\n"
+"         Primero debe especificar un nombre de impresora.\n"
+
+#: systemv/lpadmin.c:631
+msgid "lpadmin: Expected description after '-D' option!\n"
+msgstr "lpadmin: Se esperaba una descripción tras la opción '-D'.\n"
+
+#: systemv/lpadmin.c:647
+msgid "lpadmin: Expected file type(s) after '-I' option!\n"
+msgstr "lpadmin: Se esperaba tipo(s) de archivo(s) tras la opción '-l'.\n"
+
+#: systemv/lpadmin.c:653
+msgid "lpadmin: Warning - content type list ignored!\n"
+msgstr ""
+"lpadmin: Advertencia - lista de tipo de contenido no tenida en cuenta.\n"
+
+#: systemv/lpadmin.c:674
+msgid ""
+"lpadmin: Unable to set the printer location:\n"
+"         You must specify a printer name first!\n"
+msgstr ""
+"lpadmin: No se ha podido establecer la ubicación de la impresora:\n"
+"         Primero debe especificar un nombre de impresora.\n"
+
+#: systemv/lpadmin.c:692
+msgid "lpadmin: Expected location after '-L' option!\n"
+msgstr "lpadmin: Se esperaba una ubicación tras la opción '-L'.\n"
+
+#: systemv/lpadmin.c:720
+msgid ""
+"lpadmin: Unable to set the PPD file:\n"
+"         You must specify a printer name first!\n"
+msgstr ""
+"lpadmin: No se ha podido establecer el archivo PPD:\n"
+"         Primero debe especificar un nombre de impresora.\n"
+
+#: systemv/lpadmin.c:738
+msgid "lpadmin: Expected PPD after '-P' option!\n"
+msgstr "lpadmin: Se esperaba un PPD tras la opción '-P'.\n"
+
+#: systemv/lpadmin.c:749
+#, c-format
+msgid "lpadmin: Unknown option '%c'!\n"
+msgstr "lpadmin: Opción '%c' desconocida.\n"
+
+#: systemv/lpadmin.c:754
+#, c-format
+msgid "lpadmin: Unknown argument '%s'!\n"
+msgstr "lpadmin: Argumento '%s' desconocido.\n"
+
+#: systemv/lpadmin.c:781
+msgid ""
+"lpadmin: Unable to set the printer options:\n"
+"         You must specify a printer name first!\n"
+msgstr ""
+"lpadmin: No se han podido establecer las opciones de impresora:\n"
+"         Primero debe especificar un nombre de impresora.\n"
+
+#: systemv/lpadmin.c:793
+msgid ""
+"Usage:\n"
+"\n"
+"    lpadmin [-h server] -d destination\n"
+"    lpadmin [-h server] -x destination\n"
+"    lpadmin [-h server] -p printer [-c add-class] [-i interface] [-m model]\n"
+"                       [-r remove-class] [-v device] [-D description]\n"
+"                       [-P ppd-file] [-o name=value]\n"
+"                       [-u allow:user,user] [-u deny:user,user]\n"
+"\n"
+msgstr ""
+"Uso:\n"
+"\n"
+"    lpadmin [-h servidor] -d destino\n"
+"    lpadmin [-h servidor] -x destino\n"
+"    lpadmin [-h servidor] -p impresora [-c clase] [-i interfaz] [-m modelo]\n"
+"                       [-r clase] [-v dispositivo] [-D descripción]\n"
+"                       [-P archivo_ppd] [-o nombre=valor]\n"
+"                       [-u allow:usuario,usuario] [-u deny:usuario,usuario]\n"
+"\n"
+
+#: systemv/lpadmin.c:1554 systemv/lpadmin.c:1440
+#, c-format
+msgid "lpadmin: Unable to create temporary file: %s\n"
+msgstr "lpadmin: No se ha podido crear el archivo temporal: %s\n"
+
+#: systemv/lpadmin.c:1562 systemv/lpadmin.c:1448
+#, c-format
+msgid "lpadmin: Unable to open file \"%s\": %s\n"
+msgstr "lpadmin: No se ha podido abrir el archivo \"%s\": %s\n"
+
+#: systemv/lpadmin.c:1631 systemv/lpadmin.c:1862 systemv/lpadmin.c:1870
+#, c-format
+msgid "lpadmin: add-printer (set model) failed: %s\n"
+msgstr "lpadmin: add-printer (establecer modelo) ha fallado: %s\n"
+
+#: systemv/lpadmin.c:1701 systemv/lpadmin.c:1708
+#, c-format
+msgid "lpadmin: add-printer (set description) failed: %s\n"
+msgstr "lpadmin: add-printer (establecer descripción) ha fallado: %s\n"
+
+#: systemv/lpadmin.c:1784 systemv/lpadmin.c:1792
+#, c-format
+msgid "lpadmin: add-printer (set location) failed: %s\n"
+msgstr "lpadmin: add-printer (establecer ubicación) ha fallado: %s\n"
+
+#: systemv/lpadmin.c:2021 systemv/lpadmin.c:1814 systemv/lpadmin.c:1831
+#, c-format
+msgid "lpadmin: Unable to create temporary file - %s\n"
+msgstr "lpadmin: No se ha podido crear el archivo temporal - %s\n"
+
+#: systemv/lpadmin.c:2031 systemv/lpadmin.c:1824 systemv/lpadmin.c:1841
+#, c-format
+msgid "lpadmin: Unable to open PPD file \"%s\" - %s\n"
+msgstr "lpadmin: No se ha podido abrir el archivo PPD \"%s\" - %s\n"
+
+#: systemv/lpadmin.c:2117 systemv/lpadmin.c:2125
+#, c-format
+msgid "lpadmin: %s failed: %s\n"
+msgstr "lpadmin: %s ha fallado: %s\n"
+
+#: systemv/lp.c:153
+msgid "lp: Expected destination after -d option!\n"
+msgstr "lp: Se esperaba un destino tras la opción -d.\n"
+
+#: systemv/lp.c:184
+msgid "lp: Expected form after -f option!\n"
+msgstr "lp: Se esperaba un formulario tras la opción -f.\n"
+
+#: systemv/lp.c:202
+msgid "lp: Expected hostname after -h option!\n"
+msgstr "lp: Se esperaba un nombre de ordenador tras la opción -h.\n"
+
+#: systemv/lp.c:220
+msgid "lp: Expected job ID after -i option!\n"
+msgstr "lp: Se esperaba un ID de trabajo tras la opción -i.\n"
+
+#: systemv/lp.c:230
+msgid "lp: Error - cannot print files and alter jobs simultaneously!\n"
+msgstr ""
+"lp: Error - no se pueden imprimir archivos y alterar trabajos al mismo "
+"tiempo.\n"
+
+#: systemv/lp.c:242
+msgid "lp: Error - bad job ID!\n"
+msgstr "lp: Error - ID de trabajo incorrecta.\n"
+
+#: systemv/lp.c:264
+msgid "lp: Expected copies after -n option!\n"
+msgstr "lp: Se esperaba número de copias tras la opción -n.\n"
+
+#: systemv/lp.c:285
+msgid "lp: Expected option string after -o option!\n"
+msgstr "lp: Se esperaba una cadena de opciones tras la opción -o.\n"
+
+#: systemv/lp.c:304
+#, c-format
+msgid "lp: Expected priority after -%c option!\n"
+msgstr "lp: Se esperaba un valor de prioridad tras la opción -%c.\n"
+
+#: systemv/lp.c:326
+msgid "lp: Priority must be between 1 and 100.\n"
+msgstr "lp: La prioridad debe estar entre 1 y 100.\n"
+
+#: systemv/lp.c:348
+msgid "lp: Expected title after -t option!\n"
+msgstr "lp: Se esperaba un título tras la opción -t.\n"
+
+#: systemv/lp.c:364
+msgid "lp: Expected mode list after -y option!\n"
+msgstr "lp: Se esperaba una lista de modos tras la opción -y.\n"
+
+#: systemv/lp.c:370
+msgid "lp: Warning - mode option ignored!\n"
+msgstr "lp: Advertencia - opción de modo no tenida en cuenta.\n"
+
+#: systemv/lp.c:383
+msgid "lp: Expected hold name after -H option!\n"
+msgstr "lp: Se esperaba un nombre de retención tras la opción -H.\n"
+
+#: systemv/lp.c:405
+msgid "lp: Need job ID (-i) before \"-H restart\"!\n"
+msgstr "lp: Se necesita la ID de trabajo (-i) antes de \"-H restart\".\n"
+
+#: systemv/lp.c:427
+msgid "lp: Expected page list after -P option!\n"
+msgstr "lp: Se esperaba una lista de páginas tras la opción -P.\n"
+
+#: systemv/lp.c:446
+msgid "lp: Expected character set after -S option!\n"
+msgstr "lp: Se esperaba un juego de caracteres tras la opción -S.\n"
+
+#: systemv/lp.c:452
+msgid "lp: Warning - character set option ignored!\n"
+msgstr "lp: Advertencia - opción de juego de caracteres no tenida en cuenta.\n"
+
+#: systemv/lp.c:463
+msgid "lp: Expected content type after -T option!\n"
+msgstr "lp: Se esperaba un tipo de contenido tras la opción -T.\n"
+
+#: systemv/lp.c:469
+msgid "lp: Warning - content type option ignored!\n"
+msgstr "lp: Advertencia - opción de tipo de contenido no tenida en cuenta.\n"
+
+#: systemv/lp.c:473
+#, c-format
+msgid "lp: Unknown option '%c'!\n"
+msgstr "lp: Opción '%c' desconocida.\n"
+
+#: systemv/lp.c:482
+msgid ""
+"lp: Error - cannot print from stdin if files or a job ID are provided!\n"
+msgstr ""
+"lp: Error - no se puede imprimir desde stdin si se proporcionan archivos o "
+"un ID de trabajo.\n"
+
+#: systemv/lp.c:497
+#, c-format
+msgid "lp: Unable to access \"%s\" - %s\n"
+msgstr "lp: No se ha podido acceder a \"%s\" - %s\n"
+
+#: systemv/lp.c:514
+#, c-format
+msgid "lp: Too many files - \"%s\"\n"
+msgstr "lp: Demasiados archivos - \"%s\"\n"
+
+#: systemv/lp.c:569
+msgid "lp: error - no default destination available.\n"
+msgstr "lp: error - no está disponible el destino predeterminado.\n"
+
+#: systemv/lp.c:572
+msgid "lp: error - scheduler not responding!\n"
+msgstr "lp: error - el planificador de tareas no responde.\n"
+
+#: systemv/lp.c:611
+#, c-format
+msgid "lp: unable to create temporary file \"%s\" - %s\n"
+msgstr "lp: no se ha podido crear el archivo temporal \"%s\" - %s\n"
+
+#: systemv/lp.c:620
+#, c-format
+msgid "lp: error - unable to write to temporary file \"%s\" - %s\n"
+msgstr ""
+"lp: error - no se ha podido escribir en el archivo temporal \"%s\" - %s\n"
+
+#: systemv/lp.c:634
+msgid "lp: stdin is empty, so no job has been sent.\n"
+msgstr "lp: stdin está vacío, por lo tanto no se ha enviado ningún trabajo.\n"
+
+#: systemv/lp.c:650
+#, c-format
+msgid "lp: unable to print file: %s\n"
+msgstr "lp: no se ha podido imprimir el archivo: %s\n"
+
+#: systemv/lp.c:656 systemv/lp.c:653 systemv/lp.c:713 systemv/lp.c:729
+#, c-format
+msgid "request id is %s-%d (%d file(s))\n"
+msgstr "la id solicitada es %s-%d (%d archivo(s))\n"
+
+#: systemv/lp.c:703 systemv/lp.c:713
+#, c-format
+msgid "lp: restart-job failed: %s\n"
+msgstr "lp: restart-job ha fallado: %s\n"
+
+#: systemv/lp.c:769 systemv/lp.c:779
+#, c-format
+msgid "lp: set-job-attributes failed: %s\n"
+msgstr "lp: set-job-attibutes ha fallado: %s\n"
+
+#: systemv/lpinfo.c:98 systemv/lpinfo.c:117
+#, c-format
+msgid "lpinfo: Unable to connect to server: %s\n"
+msgstr "lpinfo: No se ha podido conectar al servidor: %s\n"
+
+#: systemv/lpinfo.c:152
+#, c-format
+msgid "lpinfo: Unknown option '%c'!\n"
+msgstr "lpinfo: Opción '%c' desconocida.\n"
+
+#: systemv/lpinfo.c:158
+#, c-format
+msgid "lpinfo: Unknown argument '%s'!\n"
+msgstr "lpinfo Argumento '%s' desconocido.\n"
+
+#: systemv/lpinfo.c:225 systemv/lpinfo.c:310
+#, c-format
+msgid "lpinfo: cups-get-devices failed: %s\n"
+msgstr "lpinfo: cups-get-devices ha fallado: %s\n"
+
+#: systemv/lpinfo.c:293
+#, c-format
+msgid ""
+"Device: uri = %s\n"
+"        class = %s\n"
+"        info = %s\n"
+"        make-and-model = %s\n"
+msgstr ""
+"Dispositivo: uri = %s\n"
+"        clase = %s\n"
+"        info = %s\n"
+"        make-and-model = %s\n"
+
+#: systemv/lpinfo.c:376 systemv/lpinfo.c:454
+#, c-format
+msgid "lpinfo: cups-get-ppds failed: %s\n"
+msgstr "lpinfo: cups-get-ppds ha fallado: %s\n"
+
+#: systemv/lpinfo.c:438
+#, c-format
+msgid ""
+"Model:  name = %s\n"
+"        natural_language = %s\n"
+"        make-and-model = %s\n"
+msgstr ""
+"Modelo:  nombre = %s\n"
+"        natural_language = %s\n"
+"        make-and-model = %s\n"
+
+#: systemv/lpmove.c:114 systemv/lpmove.c:119
+#, c-format
+msgid "lpmove: Unknown option '%c'!\n"
+msgstr "lpmove: Opción '%c' desconocida.\n"
+
+#: systemv/lpmove.c:133 systemv/lpmove.c:138
+#, c-format
+msgid "lpmove: Unknown argument '%s'!\n"
+msgstr "lpmove: Argumento '%s' desconocido.\n"
+
+#: systemv/lpmove.c:140
+msgid "Usage: lpmove job dest\n"
+msgstr "Uso: lpmove trabajo destino\n"
+
+#: systemv/lpmove.c:151 systemv/lpmove.c:156
+#, c-format
+msgid "lpmove: Unable to connect to server: %s\n"
+msgstr "lpmove: No se ha podido conectar al servidor: %s\n"
+
+#: systemv/lpmove.c:225 systemv/lpmove.c:234
+#, c-format
+msgid "lpmove: move-job failed: %s\n"
+msgstr "lpmove: move-job ha fallado: %s\n"
+
+#: systemv/lpoptions.c:109
+msgid "lpoptions: Unknown printer or class!\n"
+msgstr "lpoptions: Impresora o clase desconocida.\n"
+
+#: systemv/lpoptions.c:159
+msgid "lpoptions: No printers!?!\n"
+msgstr "lpoptions: ¡¿¡No hay impresoras!?!\n"
+
+#: systemv/lpoptions.c:207
+#, c-format
+msgid "lpoptions: Unable to add printer or instance: %s\n"
+msgstr "lpoptions: No se ha podido añadir la impresora o la instancia: %s\n"
+
+#: systemv/lpoptions.c:411
+#, c-format
+msgid "lpoptions: Destination %s has no PPD file!\n"
+msgstr "lpoptions: El destino %s no tiene archivo PPD.\n"
+
+#: systemv/lpoptions.c:420
+#, c-format
+msgid "lpoptions: Unable to open PPD file for %s!\n"
+msgstr "lpoptions: No se ha podido abrir el archivo PPD para %s.\n"
+
+#: systemv/lpoptions.c:444
+msgid ""
+"Usage: lpoptions [-h server] [-E] -d printer\n"
+"       lpoptions [-h server] [-E] [-p printer] -l\n"
+"       lpoptions [-h server] [-E] -p printer -o option[=value] ...\n"
+"       lpoptions [-h server] [-E] -x printer\n"
+msgstr ""
+"Uso: lpoptions [-h servidor] [-E] -d impresora\n"
+"       lpoptions [-h servidor] [-E] [-p impresora] -l\n"
+"       lpoptions [-h servidor] [-E] -p impresora -o opción[=valor] ...\n"
+"       lpoptions [-h servidor] [-E] -x impresora\n"
+
+#: systemv/lppasswd.c:192
+msgid "lppasswd: Only root can add or delete passwords!\n"
+msgstr "lppasswd: Solo el usuario root puede añadir o borrar contraseñas.\n"
+
+#: systemv/lppasswd.c:212
+msgid "Enter old password:"
+msgstr "Introduzca la contraseña antigua:"
+
+#: systemv/lppasswd.c:218 systemv/lppasswd.c:236
+#, c-format
+msgid "lppasswd: Unable to copy password string: %s\n"
+msgstr "lppasswd: No se ha podido copiar la cadena de contraseña: %s\n"
+
+#: systemv/lppasswd.c:230
+msgid "Enter password:"
+msgstr "Introduzca la contraseña:"
+
+#: systemv/lppasswd.c:241
+msgid "Enter password again:"
+msgstr "Introduzca nuevamente la contraseña:"
+
+#: systemv/lppasswd.c:247
+msgid "lppasswd: Sorry, passwords don't match!\n"
+msgstr "lppasswd: Lo siento, las contraseñas no coinciden.\n"
+
+#: systemv/lppasswd.c:271
+msgid ""
+"lppasswd: Sorry, password rejected.\n"
+"Your password must be at least 6 characters long, cannot contain\n"
+"your username, and must contain at least one letter and number.\n"
+msgstr ""
+"lppasswd: Lo siento, se ha rechazado la contraseña.\n"
+"Su contraseña debe tener al menos 6 caracteres, no puede contener\n"
+"su nombre de usuario, y debe tener al menos una letra y un número.\n"
+
+#: systemv/lppasswd.c:321
+msgid "lppasswd: Password file busy!\n"
+msgstr "lppasswd: Archivo de contraseñas ocupado.\n"
+
+#: systemv/lppasswd.c:324 systemv/lppasswd.c:333 systemv/lppasswd.c:351
+#, c-format
+msgid "lppasswd: Unable to open password file: %s\n"
+msgstr "lppasswd: No se ha podido abrir el archivo de contraseñas: %s\n"
+
+#: systemv/lppasswd.c:386 systemv/lppasswd.c:399 systemv/lppasswd.c:431
+#, c-format
+msgid "lppasswd: Unable to write to password file: %s\n"
+msgstr "lppasswd: No se ha podido escribir en el archivo de contraseñas: %s\n"
+
+#: systemv/lppasswd.c:411
+#, c-format
+msgid "lppasswd: user \"%s\" and group \"%s\" do not exist.\n"
+msgstr "lppasswd: el usuario \"%s\" y el grupo \"%s\" no existen.\n"
+
+#: systemv/lppasswd.c:421
+msgid "lppasswd: Sorry, password doesn't match!\n"
+msgstr "lppasswd: Lo siento, las contraseñas no coinciden.\n"
+
+#: systemv/lppasswd.c:454
+msgid "lppasswd: Password file not updated!\n"
+msgstr "lppasswd: Archivo de contraseñas no actualizado.\n"
+
+#: systemv/lppasswd.c:469
+#, c-format
+msgid "lppasswd: failed to backup old password file: %s\n"
+msgstr ""
+"lppasswd: falló al hacer una copia de seguridad del antiguo archivo de "
+"contraseñas: %s\n"
+
+#: systemv/lppasswd.c:482
+#, c-format
+msgid "lppasswd: failed to rename password file: %s\n"
+msgstr "lppasswd: falló al cambiar de nombre al archivo de contraseñas: %s\n"
+
+#: systemv/lppasswd.c:501 systemv/lppasswd.c:500
+msgid "Usage: lppasswd [-g groupname]\n"
+msgstr "Usage: lppasswd [-g nombre_grupo]\n"
+
+#: systemv/lppasswd.c:506 systemv/lppasswd.c:503
+msgid ""
+"Usage: lppasswd [-g groupname] [username]\n"
+"       lppasswd [-g groupname] -a [username]\n"
+"       lppasswd [-g groupname] -x [username]\n"
+msgstr ""
+"Usage: lppasswd [-g nombre_grupo] [nombre_usuario]\n"
+"       lppasswd [-g nombre_grupo] -a [nombre_usuario]\n"
+"       lppasswd [-g nombre_grupo] -x [nombre_usuario]\n"
+
+#: cgi-bin/admin.c:125 cgi-bin/admin.c:142 cgi-bin/admin.c:143
+msgid "Start Printer"
+msgstr "Iniciar impresora"
+
+#: cgi-bin/admin.c:127 cgi-bin/admin.c:144 cgi-bin/admin.c:145
+msgid "Stop Printer"
+msgstr "Detener impresora"
+
+#: cgi-bin/admin.c:129 cgi-bin/admin.c:146 cgi-bin/admin.c:147
+msgid "Start Class"
+msgstr "Iniciar clase"
+
+#: cgi-bin/admin.c:131 cgi-bin/admin.c:148 cgi-bin/admin.c:149
+msgid "Stop Class"
+msgstr "Detener clase"
+
+#: cgi-bin/admin.c:133 cgi-bin/admin.c:150 cgi-bin/admin.c:151
+msgid "Accept Jobs"
+msgstr "Aceptar trabajos"
+
+#: cgi-bin/admin.c:135 cgi-bin/admin.c:152 cgi-bin/admin.c:153
+msgid "Reject Jobs"
+msgstr "Rechazar trabajos"
+
+#: cgi-bin/admin.c:137 cgi-bin/admin.c:154 cgi-bin/admin.c:155
+msgid "Purge Jobs"
+msgstr "Purgar trabajos"
+
+#: cgi-bin/admin.c:141 cgi-bin/admin.c:158 cgi-bin/admin.c:159
+msgid "Set As Default"
+msgstr "Poner como predeterminada"
+
+#: cgi-bin/admin.c:168 cgi-bin/admin.c:179 cgi-bin/admin.c:2690
+#: cgi-bin/admin.c:185 cgi-bin/admin.c:196 cgi-bin/admin.c:2734
+#: cgi-bin/admin.c:186 cgi-bin/admin.c:197 cgi-bin/admin.c:2377
+msgid "Administration"
+msgstr "Administración"
+
+#: cgi-bin/admin.c:224 cgi-bin/admin.c:241 cgi-bin/admin.c:242
+msgid "Modify Class"
+msgstr "Modificar clase"
+
+#: cgi-bin/admin.c:224 cgi-bin/admin.c:241 cgi-bin/admin.c:242
+msgid "Add Class"
+msgstr "Añadir clase"
+
+#: cgi-bin/admin.c:385 cgi-bin/admin.c:402 cgi-bin/admin.c:404
+msgid ""
+"The class name may only contain up to 127 printable characters and may not "
+"contain spaces, slashes (/), or the pound sign (#)."
+msgstr ""
+"El nombre de la clase sólo puede contener hasta 127 caracteres imprimibles y "
+"no puede contener espacios, barras (/), o la almohadilla (#)."
+
+#: cgi-bin/admin.c:444 cgi-bin/admin.c:462 cgi-bin/admin.c:464
+msgid "Unable to modify class:"
+msgstr "No se ha podido modificar la clase:"
+
+#: cgi-bin/admin.c:445 cgi-bin/admin.c:463 cgi-bin/admin.c:465
+msgid "Unable to add class:"
+msgstr "No se ha podido añadir la clase:"
+
+#: cgi-bin/admin.c:514 cgi-bin/admin.c:532 cgi-bin/admin.c:534
+msgid "Modify Printer"
+msgstr "Modificar impresora"
+
+#: cgi-bin/admin.c:514 cgi-bin/admin.c:532 cgi-bin/admin.c:534
+msgid "Add Printer"
+msgstr "Añadir impresora"
+
+#: cgi-bin/admin.c:583 cgi-bin/admin.c:602 cgi-bin/admin.c:604
+msgid ""
+"The printer name may only contain up to 127 printable characters and may not "
+"contain spaces, slashes (/), or the pound sign (#)."
+msgstr ""
+"El nombre de la impresora sólo puede contener hasta 127 caracteres "
+"imprimibles y no puede contener espacios, barras (/), o la almohadilla (#)."
+
+#: cgi-bin/admin.c:900 cgi-bin/admin.c:930 cgi-bin/admin.c:932
+msgid "Unable to get list of printer drivers:"
+msgstr "No se ha podido obtener la lista de controladores de impresora:"
+
+#: cgi-bin/admin.c:983 cgi-bin/admin.c:1014 cgi-bin/admin.c:1016
+msgid "Unable to modify printer:"
+msgstr "No se ha podido modificar la impresora:"
+
+#: cgi-bin/admin.c:984 cgi-bin/admin.c:1015 cgi-bin/admin.c:1017
+msgid "Unable to add printer:"
+msgstr "No se ha podido añadir la impresora:"
+
+#: cgi-bin/admin.c:1051 cgi-bin/admin.c:1082 cgi-bin/admin.c:1084
+msgid "Set Printer Options"
+msgstr "Cambiar opciones impresora"
+
+#: cgi-bin/admin.c:1062 cgi-bin/admin.c:2330 cgi-bin/admin.c:2391
+#: cgi-bin/admin.c:3112 cgi-bin/admin.c:3213 cgi-bin/admin.c:3449
+#: cgi-bin/admin.c:1095 cgi-bin/admin.c:2374 cgi-bin/admin.c:2435
+#: cgi-bin/admin.c:3156 cgi-bin/admin.c:3258 cgi-bin/admin.c:3496
+#: cgi-bin/admin.c:1097 cgi-bin/admin.c:1846 cgi-bin/admin.c:1907
+#: cgi-bin/admin.c:2405 cgi-bin/admin.c:2507 cgi-bin/admin.c:2745
+msgid "Missing form variable!"
+msgstr "Variable de formulario desaparecida."
+
+#: cgi-bin/admin.c:1076 cgi-bin/admin.c:1113 cgi-bin/admin.c:1115
+msgid "Unable to get PPD file!"
+msgstr "No se ha podido obtener el archivo PPD."
+
+#: cgi-bin/admin.c:1084 cgi-bin/admin.c:1123 cgi-bin/admin.c:1125
+msgid "Unable to open PPD file:"
+msgstr "No se ha podido abrir el archivo PPD:"
+
+#: cgi-bin/admin.c:1241 cgi-bin/admin.c:1282 cgi-bin/admin.c:1290
+msgid "Banners"
+msgstr "Banners"
+
+#: cgi-bin/admin.c:1255 cgi-bin/admin.c:1296 cgi-bin/admin.c:1304
+msgid "Starting Banner"
+msgstr "Banner inicial"
+
+#: cgi-bin/admin.c:1262 cgi-bin/admin.c:1303 cgi-bin/admin.c:1311
+msgid "Ending Banner"
+msgstr "Banner final"
+
+#: cgi-bin/admin.c:1280 cgi-bin/admin.c:1321 cgi-bin/admin.c:1329
+msgid "Policies"
+msgstr "Reglas"
+
+#: cgi-bin/admin.c:1304 cgi-bin/admin.c:1345 cgi-bin/admin.c:1353
+msgid "Error Policy"
+msgstr "Directiva de error"
+
+#: cgi-bin/admin.c:1331 cgi-bin/admin.c:1372 cgi-bin/admin.c:1380
+msgid "Operation Policy"
+msgstr "Directiva de operación"
+
+#: cgi-bin/admin.c:1352 cgi-bin/admin.c:1372 cgi-bin/admin.c:1393
+#: cgi-bin/admin.c:1413 cgi-bin/admin.c:1401 cgi-bin/admin.c:1421
+msgid "PS Binary Protocol"
+msgstr "Protocolo Binario PS"
+
+#: cgi-bin/admin.c:1358 cgi-bin/admin.c:1399 cgi-bin/admin.c:1407
+msgid "None"
+msgstr "Ninguno"
+
+#: cgi-bin/admin.c:1490 cgi-bin/admin.c:1534 cgi-bin/admin.c:1542
+msgid "Unable to set options:"
+msgstr "No se han podido cambiar las opciones:"
+
+#: cgi-bin/admin.c:1591 cgi-bin/admin.c:1607 cgi-bin/admin.c:1620
+#: cgi-bin/admin.c:2099 cgi-bin/admin.c:2106 cgi-bin/admin.c:1635
+#: cgi-bin/admin.c:1651 cgi-bin/admin.c:1664 cgi-bin/admin.c:2143
+#: cgi-bin/admin.c:2150 cgi-bin/admin.c:1609 cgi-bin/admin.c:1618
+msgid "Change Settings"
+msgstr "Cambiar especificaciones"
+
+#: cgi-bin/admin.c:1592 cgi-bin/admin.c:1608 cgi-bin/admin.c:1621
+#: cgi-bin/admin.c:1636 cgi-bin/admin.c:1652 cgi-bin/admin.c:1665
+#: cgi-bin/admin.c:1611
+msgid "Unable to change server settings:"
+msgstr "No se han podido cambiar las especificaciones del servidor:"
+
+#: cgi-bin/admin.c:2097 cgi-bin/admin.c:2190 cgi-bin/admin.c:2141
+#: cgi-bin/admin.c:2234 cgi-bin/admin.c:1703
+msgid "Unable to upload cupsd.conf file:"
+msgstr "No se ha podido copiar el archivo cupsd.conf:"
+
+#: cgi-bin/admin.c:2134 cgi-bin/admin.c:2146 cgi-bin/admin.c:2193
+#: cgi-bin/admin.c:2200 cgi-bin/admin.c:2232 cgi-bin/admin.c:2244
+#: cgi-bin/admin.c:2267 cgi-bin/admin.c:2178 cgi-bin/admin.c:2190
+#: cgi-bin/admin.c:2237 cgi-bin/admin.c:2276 cgi-bin/admin.c:2288
+#: cgi-bin/admin.c:2311 cgi-bin/admin.c:1646 cgi-bin/admin.c:1658
+#: cgi-bin/admin.c:1706 cgi-bin/admin.c:1713 cgi-bin/admin.c:1745
+#: cgi-bin/admin.c:1758 cgi-bin/admin.c:1782
+msgid "Edit Configuration File"
+msgstr "Editar archivo de configuración"
+
+#: cgi-bin/admin.c:2135 cgi-bin/admin.c:2147 cgi-bin/admin.c:2179
+#: cgi-bin/admin.c:2191 cgi-bin/printers.c:219 cgi-bin/printers.c:224
+#: cgi-bin/admin.c:1647 cgi-bin/admin.c:1659
+msgid "Unable to create temporary file:"
+msgstr "No se ha podido crear el archivo temporal:"
+
+#: cgi-bin/admin.c:2233 cgi-bin/admin.c:2245 cgi-bin/admin.c:2268
+#: cgi-bin/admin.c:2277 cgi-bin/admin.c:2289 cgi-bin/admin.c:2312
+#: cgi-bin/admin.c:1747 cgi-bin/admin.c:1760 cgi-bin/admin.c:1784
+msgid "Unable to access cupsd.conf file:"
+msgstr "No se ha podido acceder al archivo cupsd.conf"
+
+#: cgi-bin/admin.c:2247 cgi-bin/admin.c:2291 cgi-bin/admin.c:1762
+msgid "Unable to edit cupsd.conf files larger than 1MB!"
+msgstr "No se pueden editar archivos cupsd.conf mayores de 1MB."
+
+#: cgi-bin/admin.c:2316 cgi-bin/admin.c:2360 cgi-bin/admin.c:1832
+msgid "Delete Class"
+msgstr "Borrar clase"
+
+#: cgi-bin/admin.c:2357 cgi-bin/admin.c:2401 cgi-bin/admin.c:1873
+msgid "Unable to delete class:"
+msgstr "No se ha podido borrar la clase:"
+
+#: cgi-bin/admin.c:2377 cgi-bin/admin.c:2421 cgi-bin/admin.c:1893
+msgid "Delete Printer"
+msgstr "Borrar impresora"
+
+#: cgi-bin/admin.c:2418 cgi-bin/admin.c:2462 cgi-bin/admin.c:1934
+msgid "Unable to delete printer:"
+msgstr "No se ha podido borrar la impresora:"
+
+#: cgi-bin/admin.c:2447 cgi-bin/admin.c:2491 cgi-bin/admin.c:2053
+#: cgi-bin/admin.c:2072
+msgid "Export Printers to Samba"
+msgstr "Exportar impresoras a Samba"
+
+#: cgi-bin/admin.c:2515 cgi-bin/admin.c:2559
+msgid "Unable to fork process!"
+msgstr "No se ha podido bifurcar el proceso."
+
+#: cgi-bin/admin.c:2534 cgi-bin/admin.c:2578
+msgid "Unable to connect to server!"
+msgstr "No se ha podido conectar al servidor."
+
+#: cgi-bin/admin.c:2538 cgi-bin/admin.c:2582
+msgid "Unable to get printer attributes!"
+msgstr "No se han podido obtener los atributos de la impresora."
+
+#: cgi-bin/admin.c:2543 cgi-bin/admin.c:2587
+msgid "Unable to convert PPD file!"
+msgstr "No se ha podido convertir el archivo PPD."
+
+#: cgi-bin/admin.c:2547 cgi-bin/admin.c:2591
+msgid "Unable to copy Windows 2000 printer driver files!"
+msgstr ""
+"No se han podido copiar los archivos del controlador de impresora de Windows "
+"2000."
+
+#: cgi-bin/admin.c:2552 cgi-bin/admin.c:2596
+msgid "Unable to install Windows 2000 printer driver files!"
+msgstr ""
+"No se han podido instalar los archivos del controlador de impresora de "
+"Windows 2000."
+
+#: cgi-bin/admin.c:2557 cgi-bin/admin.c:2601
+msgid "Unable to copy Windows 9x printer driver files!"
+msgstr ""
+"No se han podido copiar los archivos del controlador de impresora de Windows "
+"9x."
+
+#: cgi-bin/admin.c:2562 cgi-bin/admin.c:2606
+msgid "Unable to install Windows 9x printer driver files!"
+msgstr ""
+"No se han podido instalar los archivos del controlador de impresora de "
+"Windows 9x."
+
+#: cgi-bin/admin.c:2567 cgi-bin/admin.c:2611
+msgid "Unable to set Windows printer driver!"
+msgstr "No se ha podido configurar el controlador de impresora de Windows."
+
+#: cgi-bin/admin.c:2572 cgi-bin/admin.c:2616
+msgid "No printer drivers found!"
+msgstr "No se han encontrado controladores de impresora."
+
+#: cgi-bin/admin.c:2576 cgi-bin/admin.c:2620
+msgid "Unable to execute cupsaddsmb command!"
+msgstr "No se ha podido ejecutar el comando cupsaddsmb."
+
+#: cgi-bin/admin.c:2582 cgi-bin/admin.c:2626
+#, c-format
+msgid "cupsaddsmb failed with status %d"
+msgstr "cupsaddsmb ha fallado con estado %d"
+
+#: cgi-bin/admin.c:2592 cgi-bin/admin.c:2636
+#, c-format
+msgid "cupsaddsmb crashed on signal %d"
+msgstr "cupsaddsmb se ha estropeado con señal %d"
+
+#: cgi-bin/admin.c:2608 cgi-bin/admin.c:2652 cgi-bin/admin.c:2061
+msgid "A Samba username is required to export printer drivers!"
+msgstr ""
+"Se requiere un nombre de usuario Samba para exportar los controladores de "
+"impresora."
+
+#: cgi-bin/admin.c:2612 cgi-bin/admin.c:2656 cgi-bin/admin.c:2065
+msgid "A Samba password is required to export printer drivers!"
+msgstr ""
+"Se requiere una contraseña Samba para exportar los controladores de "
+"impresora."
+
+#: cgi-bin/admin.c:2704 cgi-bin/admin.c:2748 cgi-bin/admin.c:2102
+msgid "Unable to open cupsd.conf file:"
+msgstr "No se ha podido abrir el archivo cupsd.conf:"
+
+#: cgi-bin/admin.c:3144 cgi-bin/admin.c:3400 cgi-bin/admin.c:3189
+#: cgi-bin/admin.c:3447 cgi-bin/admin.c:2438 cgi-bin/admin.c:2696
+msgid "Unable to change printer:"
+msgstr "No se ha podido cambiar la impresora:"
+
+#: cgi-bin/admin.c:3214 cgi-bin/admin.c:3259 cgi-bin/admin.c:3399
+#: cgi-bin/admin.c:3417 cgi-bin/admin.c:3305 cgi-bin/admin.c:3446
+#: cgi-bin/admin.c:3464 cgi-bin/admin.c:2508 cgi-bin/admin.c:2554
+#: cgi-bin/admin.c:2695 cgi-bin/admin.c:2713
+msgid "Set Allowed Users"
+msgstr "Establecer usuarios permitidos"
+
+#: cgi-bin/admin.c:3262 cgi-bin/admin.c:3308 cgi-bin/admin.c:2557
+msgid "Unable to get printer attributes:"
+msgstr "No se han podido obtener los atributos de la impresora:"
+
+#: cgi-bin/admin.c:3450 cgi-bin/admin.c:3488 cgi-bin/admin.c:3506
+#: cgi-bin/admin.c:3497 cgi-bin/admin.c:3536 cgi-bin/admin.c:3554
+#: cgi-bin/admin.c:2746 cgi-bin/admin.c:2785 cgi-bin/admin.c:2803
+msgid "Set Publishing"
+msgstr "Hacer pública"
+
+#: cgi-bin/admin.c:3489 cgi-bin/admin.c:3537 cgi-bin/admin.c:2786
+msgid "Unable to change printer-is-shared attribute:"
+msgstr "No se ha podido cambiar el atributo printer-is-shared:"
+
+#: cgi-bin/classes.c:161 cgi-bin/classes.c:208 cgi-bin/classes.c:159
+#: cgi-bin/classes.c:206 cgi-bin/classes.c:164 cgi-bin/classes.c:211
+msgid "Classes"
+msgstr "Clases"
+
+#: cgi-bin/classes.c:355 cgi-bin/classes.c:356 cgi-bin/classes.c:354
+#: cgi-bin/classes.c:359
+msgid "Unable to get class list:"
+msgstr "No se ha podido obtener la lista de clases:"
+
+#: cgi-bin/classes.c:454 cgi-bin/classes.c:455 cgi-bin/classes.c:453
+#: cgi-bin/classes.c:458
+msgid "Unable to get class status:"
+msgstr "No se ha podido obtener el estado de la clase:"
+
+#: cgi-bin/ipp-var.c:366 cgi-bin/ipp-var.c:419 cgi-bin/ipp-var.c:489
+#: cgi-bin/ipp-var.c:490
+msgid "Move Job"
+msgstr "Mover trabajo"
+
+#: cgi-bin/ipp-var.c:367
+msgid "Unable to find destination for job!"
+msgstr "No se ha podido encontrar destino para el trabajo."
+
+#: cgi-bin/ipp-var.c:421 cgi-bin/ipp-var.c:491 cgi-bin/ipp-var.c:492
+msgid "Move All Jobs"
+msgstr "Mover todos los trabajos"
+
+#: cgi-bin/ipp-var.c:496 cgi-bin/ipp-var.c:497
+msgid "Unable to move job"
+msgstr "No se ha podido mover el trabajo"
+
+#: cgi-bin/ipp-var.c:498 cgi-bin/ipp-var.c:499
+msgid "Unable to move jobs"
+msgstr "No se han podido mover los trabajos"
+
+#: cgi-bin/ipp-var.c:603 cgi-bin/ipp-var.c:605
+msgid "Print Test Page"
+msgstr "Imprimir página de prueba"
+
+#: cgi-bin/ipp-var.c:606 cgi-bin/ipp-var.c:608
+msgid "Unable to print test page:"
+msgstr "No se ha podido imprimir la página de prueba:"
+
+#: cgi-bin/jobs.c:111 cgi-bin/jobs.c:122 cgi-bin/jobs.c:184
+msgid "Jobs"
+msgstr "Trabajos"
+
+#: cgi-bin/jobs.c:187
+msgid "Job operation failed:"
+msgstr "La operación del trabajo ha fallado:"
+
+#: cgi-bin/printers.c:161 cgi-bin/printers.c:208 cgi-bin/printers.c:211
+#: cgi-bin/printers.c:166 cgi-bin/printers.c:335 cgi-bin/printers.c:171
+#: cgi-bin/printers.c:340
+msgid "Printers"
+msgstr "Impresoras"
+
+#: cgi-bin/printers.c:362 cgi-bin/printers.c:366 cgi-bin/printers.c:518
+#: cgi-bin/printers.c:523
+msgid "Unable to get printer list:"
+msgstr "No se ha podido obtener la lista de impresoras:"
+
+#: cgi-bin/printers.c:461 cgi-bin/printers.c:468 cgi-bin/printers.c:628
+#: cgi-bin/printers.c:633
+msgid "Unable to get printer status:"
+msgstr "No se ha podido obtener el estado de la impresora"
+
+#: cups/ppd.c:319 cups/ppd.c:302
+msgid "OK"
+msgstr "OK"
+
+#: cups/ppd.c:320 cups/ppd.c:303
+msgid "Unable to open PPD file"
+msgstr "No se ha podido abrir el archivo PPD"
+
+#: cups/ppd.c:321 cups/ppd.c:304
+msgid "NULL PPD file pointer"
+msgstr "Puntero de archivo PPD NULO"
+
+#: cups/ppd.c:322 cups/ppd.c:305
+msgid "Memory allocation error"
+msgstr "Error de reserva de memoria"
+
+#: cups/ppd.c:323 cups/ppd.c:306
+msgid "Missing PPD-Adobe-4.x header"
+msgstr "Falta cabecera PPD-Adobe-4.x"
+
+#: cups/ppd.c:324 cups/ppd.c:307
+msgid "Missing value string"
+msgstr "Falta cadena de valores"
+
+#: cups/ppd.c:325 cups/ppd.c:308
+msgid "Internal error"
+msgstr "Error interno"
+
+#: cups/ppd.c:326 cups/ppd.c:309
+msgid "Bad OpenGroup"
+msgstr "OpenGroup incorrecto"
+
+#: cups/ppd.c:327 cups/ppd.c:310
+msgid "OpenGroup without a CloseGroup first"
+msgstr "OpenGroup sin un CloseGroup previo"
+
+#: cups/ppd.c:328 cups/ppd.c:311
+msgid "Bad OpenUI/JCLOpenUI"
+msgstr "OpenUI/JCLOpenUI incorrecto"
+
+#: cups/ppd.c:329 cups/ppd.c:312
+msgid "OpenUI/JCLOpenUI without a CloseUI/JCLCloseUI first"
+msgstr "OpenUI/JCLOpenUI sin un CloseUI/JCLCloseUI previo"
+
+#: cups/ppd.c:330 cups/ppd.c:313
+msgid "Bad OrderDependency"
+msgstr "OrderDependency incorrecto"
+
+#: cups/ppd.c:331 cups/ppd.c:314
+msgid "Bad UIConstraints"
+msgstr "UIConstraints incorrecto"
+
+#: cups/ppd.c:332 cups/ppd.c:315
+msgid "Missing asterisk in column 1"
+msgstr "Falta un asterisco en la columna 1"
+
+#: cups/ppd.c:333 cups/ppd.c:316
+msgid "Line longer than the maximum allowed (255 characters)"
+msgstr "Línea más larga que el máximo permitido (255 caracteres)"
+
+#: cups/ppd.c:334 cups/ppd.c:317
+msgid "Illegal control character"
+msgstr "Carácter de control ilegal"
+
+#: cups/ppd.c:335 cups/ppd.c:318
+msgid "Illegal main keyword string"
+msgstr "Cadena de clave principal ilegal"
+
+#: cups/ppd.c:336 cups/ppd.c:319
+msgid "Illegal option keyword string"
+msgstr "Cadena de clave de opción ilegal"
+
+#: cups/ppd.c:337 cups/ppd.c:320
+msgid "Illegal translation string"
+msgstr "Cadena de traducción ilegal"
+
+#: cups/ppd.c:338 cups/ppd.c:321
+msgid "Illegal whitespace character"
+msgstr "Carácter de espacio en blanco ilegal"
+
+#: cups/ppd.c:339 cups/ppd.c:322
+msgid "Bad custom parameter"
+msgstr "Parámetro a medida incorrecto"
+
+#: cups/ppd.c:344 cups/ppd.c:327
+msgid "Unknown"
+msgstr "Desconocido"
+
+#: cups/ppd.c:1033 cups/ppd.c:1020 cups/ppd.c:1009 cups/ppd.c:1010
+#: cups/ppd.c:1007
+msgid "Custom"
+msgstr "A medida"
+
+#: cups/ppd.c:1259 cups/ppd.c:1236 cups/ppd.c:1225 cups/ppd.c:1226
+#: cups/ppd.c:1223
+msgid "JCL"
+msgstr "JCL"
+
+#: scheduler/ipp.c:2184 scheduler/ipp.c:2226 scheduler/ipp.c:2681
+msgid "No authentication information provided!"
+msgstr "No se ha proporcionado información de autentificación."
+
+#: systemv/cupsaddsmb.c:440 systemv/cupsaddsmb.c:252
+#, c-format
+msgid "Password for %s required to access %s via SAMBA: "
+msgstr "Se requiere la contraseña de %s para acceder a %s vía SAMBA: "
+
+#: systemv/cupsaddsmb.c:451 cups/adminutil.c:626
+#, c-format
+msgid "Running command: %s %s -N -U '%s%%%s' -c '%s'\n"
+msgstr "Ejecutando comando: %s %s -N -U '%s%%%s' -c '%s'\n"
+
+#: systemv/cupsaddsmb.c:479 cups/adminutil.c:656 cups/adminutil.c:1683
+#, c-format
+msgid "cupsaddsmb: Unable to run \"%s\": %s\n"
+msgstr "cupsaddsmb: No se ha podido ejecutar \"%s\": %s\n"
+
+#: systemv/cupsaddsmb.c:805
+msgid "cupsaddsmb: No Windows printer drivers are installed!\n"
+msgstr ""
+"cupsaddsmb: No está instalado ningún controlador de impresora de Windows.\n"
+
+#: systemv/cupsaddsmb.c:810
+msgid "cupsaddsmb: Warning, no Windows 2000 printer drivers are installed!\n"
+msgstr ""
+"cupsaddsmb: Advertencia, no está instalado ningún controlador de impresora "
+"de Windows 2000.\n"
+
+#: systemv/lpadmin.c:881
+#, c-format
+msgid "lpadmin: Printer %s is already a member of class %s.\n"
+msgstr "lpadmin: La impresora %s ya es miembro de la clase %s.\n"
+
+#: systemv/lpadmin.c:1115
+msgid "lpadmin: No member names were seen!\n"
+msgstr "lpadmin: No se han visto nombres de miembros.\n"
+
+#: systemv/lpadmin.c:1129
+#, c-format
+msgid "lpadmin: Printer %s is not a member of class %s.\n"
+msgstr "lpadmin: La impresora %s no es miembro de la clase %s.\n"
+
+#: systemv/lpinfo.c:278
+#, c-format
+msgid ""
+"Device: uri = %s\n"
+"        class = %s\n"
+"        info = %s\n"
+"        make-and-model = %s\n"
+"        device-id = %s\n"
+msgstr ""
+"Dispositivo: uri = %s\n"
+"        clase = %s\n"
+"        info = %s\n"
+"        make-and-model = %s\n"
+"        device-id = %s\n"
+
+#: systemv/lpinfo.c:410
+#, c-format
+msgid ""
+"Model:  name = %s\n"
+"        natural_language = %s\n"
+"        make-and-model = %s\n"
+"        device-id = %s\n"
+msgstr ""
+"Modelo:  nombre = %s\n"
+"        natural_language = %s\n"
+"        make-and-model = %s\n"
+"        device-id = %s\n"
+
+#: systemv/lpmove.c:145
+msgid "Usage: lpmove job/src dest\n"
+msgstr "Uso: lpmove trabajo/fuente destino\n"
+
+#: systemv/lpstat.c:144 systemv/lpstat.c:156
+msgid "lpstat: Need \"completed\", \"not-completed\", or \"all\" after -W!\n"
+msgstr ""
+"lpstat: Se necesita \"completed\", \"not completed\", o \"all\" tras -W.\n"
+
+#: systemv/lpstat.c:740 systemv/lpstat.c:768
+#, c-format
+msgid "%s accepting requests since %s\n"
+msgstr "%s aceptando peticiones desde %s\n"
+
+#: systemv/lpstat.c:743 systemv/lpstat.c:771
+#, c-format
+msgid ""
+"%s not accepting requests since %s -\n"
+"\t%s\n"
+msgstr ""
+"%s no acepta peticiones desde %s -\n"
+"\t%s\n"
+
+#: systemv/lpstat.c:752 systemv/lpstat.c:780
+#, c-format
+msgid "%s/%s accepting requests since %s\n"
+msgstr "%s/%s aceptando peticiones desde %s\n"
+
+#: systemv/lpstat.c:755 systemv/lpstat.c:783
+#, c-format
+msgid ""
+"%s/%s not accepting requests since %s -\n"
+"\t%s\n"
+msgstr ""
+"%s/%s no acepta peticiones desde %s -\n"
+"\t%s\n"
+
+#: berkeley/lpc.c:88 berkeley/lpc.c:116 berkeley/lpc.c:152
+msgid "lpc> "
+msgstr "lpc> "
+
+#: berkeley/lpq.c:93 systemv/cancel.c:250 systemv/cancel.c:332
+#: systemv/cancel.c:331
+#, c-format
+msgid "%s: Unable to contact server!\n"
+msgstr "%s: No se ha podido contactar con el servidor.\n"
+
+#: berkeley/lpq.c:138 berkeley/lpr.c:128 berkeley/lprm.c:144
+#: systemv/accept.c:120 systemv/cancel.c:107 systemv/lp.c:150
+#: systemv/lpstat.c:144 berkeley/lpr.c:130 systemv/lp.c:154
+#, c-format
+msgid "%s: Error - expected username after '-U' option!\n"
+msgstr "%s: Error - se esperaba un nombre de usuario tras la opción '-U'.\n"
+
+#: berkeley/lpq.c:173
+#, c-format
+msgid "%s: Error - unknown destination \"%s/%s\"!\n"
+msgstr "%s: Error - destino \"%s/%s\" desconocido.\n"
+
+#: berkeley/lpq.c:177 systemv/lpstat.c:549
+#, c-format
+msgid "%s: Unknown destination \"%s\"!\n"
+msgstr "%s: Destino \"%s\" desconocido.\n"
+
+#: berkeley/lpq.c:201 berkeley/lprm.c:167 systemv/accept.c:146
+#: systemv/cancel.c:135 systemv/lp.c:227 systemv/lpstat.c:300 systemv/lp.c:231
+#, c-format
+msgid "%s: Error - expected hostname after '-h' option!\n"
+msgstr "%s: Error - se esperaba un nombre de ordenador tras la opción '-h'.\n"
+
+#: berkeley/lpq.c:253
+#, c-format
+msgid ""
+"%s: error - %s environment variable names non-existent destination \"%s\"!\n"
+msgstr ""
+"%s: error - %s nombres de variables de entorno no existen en destino \"%s"
+"\".\n"
+
+#: berkeley/lpq.c:258
+#, c-format
+msgid "%s: error - no default destination available.\n"
+msgstr "%s: error - destino predeterminado no disponible.\n"
+
+#: berkeley/lpq.c:647
+msgid ""
+"Usage: lpq [-P dest] [-U username] [-h hostname[:port]] [-l] [+interval]\n"
+msgstr ""
+"Uso: lpq (-P dest) (-U nombre_usuario) (-h nombre_ordenador(:puerto)) (-l) "
+"(+intervalo)\n"
+
+#: berkeley/lpr.c:148 berkeley/lpr.c:150
+#, c-format
+msgid "%s: Error - expected hostname after '-H' option!\n"
+msgstr "%s: Error - se esperaba un nombre de ordenador tras la opción '-H'.\n"
+
+#: berkeley/lpr.c:171 berkeley/lpr.c:173
+#, c-format
+msgid "%s: Error - expected value after '-%c' option!\n"
+msgstr "%s: Error - se esperaba un valor tras la opción '%c'.\n"
+
+#: berkeley/lpr.c:185 berkeley/lpr.c:187
+#, c-format
+msgid ""
+"%s: Warning - '%c' format modifier not supported - output may not be "
+"correct!\n"
+msgstr ""
+"%s: Advertencia - no se admite el uso del modificador de formato '%c' - la "
+"salida puede no ser correcta.\n"
+
+#: berkeley/lpr.c:199 berkeley/lpr.c:201
+#, c-format
+msgid "%s: error - expected option=value after '-o' option!\n"
+msgstr "%s: error - se esperaba opción=valor tras la opción '-o'.\n"
+
+#: berkeley/lpr.c:250 berkeley/lpr.c:258
+#, c-format
+msgid "%s: Error - expected destination after '-P' option!\n"
+msgstr "%s: Error - se esperaba un destino tras la opción '-P'.\n"
+
+#: berkeley/lpr.c:285 berkeley/lpr.c:293
+#, c-format
+msgid "%s: Error - expected copy count after '-#' option!\n"
+msgstr "%s: Error - se esperaba un número de copias tras la opción '-#'.\n"
+
+#: berkeley/lpr.c:309 berkeley/lpr.c:317
+#, c-format
+msgid "%s: Error - expected name after '-%c' option!\n"
+msgstr "%s: Error - se esperaba un nombre tras la opción '%c'.\n"
+
+#: berkeley/lpr.c:320 berkeley/lprm.c:179 systemv/accept.c:176
+#: systemv/cancel.c:169 systemv/lp.c:529 systemv/lpstat.c:461
+#: berkeley/lpr.c:328 systemv/lp.c:545
+#, c-format
+msgid "%s: Error - unknown option '%c'!\n"
+msgstr "%s: Error - opción '%c' desconocida.\n"
+
+#: berkeley/lpr.c:333 systemv/lp.c:554 berkeley/lpr.c:341 systemv/lp.c:570
+#, c-format
+msgid "%s: Error - unable to access \"%s\" - %s\n"
+msgstr "%s: Error - no se ha podido acceder a \"%s\" - %s\n"
+
+#: berkeley/lpr.c:351 systemv/lp.c:571 berkeley/lpr.c:359 systemv/lp.c:587
+#, c-format
+msgid "%s: Error - too many files - \"%s\"\n"
+msgstr "%s: Error - demasiados archivos - \"%s\"\n"
+
+#: berkeley/lpr.c:393 systemv/lp.c:621 berkeley/lpr.c:401 systemv/lp.c:637
+#, c-format
+msgid ""
+"%s: Error - %s environment variable names non-existent destination \"%s\"!\n"
+msgstr ""
+"%s: Error - %s nombres de variables de entorno no existen en destino \"%s"
+"\".\n"
+
+#: berkeley/lpr.c:398 systemv/lp.c:626 berkeley/lpr.c:406 systemv/lp.c:642
+#, c-format
+msgid "%s: Error - no default destination available.\n"
+msgstr "%s: Error - destino predeterminado no disponible.\n"
+
+#: berkeley/lpr.c:402 systemv/lp.c:630 berkeley/lpr.c:410 systemv/lp.c:646
+#, c-format
+msgid "%s: Error - scheduler not responding!\n"
+msgstr "%s: Error - el programa planificador de tareas no responde.\n"
+
+#: berkeley/lpr.c:452 systemv/lp.c:670 berkeley/lpr.c:460 systemv/lp.c:686
+#, c-format
+msgid "%s: Error - unable to create temporary file \"%s\" - %s\n"
+msgstr "%s: Error - no se ha podido crear el archivo temporal \"%s\" - %s\n"
+
+#: berkeley/lpr.c:462 systemv/lp.c:679 berkeley/lpr.c:470 systemv/lp.c:695
+#, c-format
+msgid "%s: Error - unable to write to temporary file \"%s\" - %s\n"
+msgstr "%s: Error - no se ha podido escribir al archivo temporal \"%s\" - %s\n"
+
+#: berkeley/lpr.c:476 systemv/lp.c:693 berkeley/lpr.c:484 systemv/lp.c:709
+#, c-format
+msgid "%s: Error - stdin is empty, so no job has been sent.\n"
+msgstr ""
+"%s: Error - stdin está vacío, por lo tanto no se ha enviado ningún trabajo.\n"
+
+#: berkeley/lprm.c:127 systemv/cancel.c:227
+#, c-format
+msgid "%s: Error - unknown destination \"%s\"!\n"
+msgstr "%s: Error - destino \"%s\" desconocido.\n"
+
+#: systemv/accept.c:165
+#, c-format
+msgid "%s: Error - expected reason text after '-r' option!\n"
+msgstr "%s: Error - se esperaba un texto con una razón tras la opción '-r'.\n"
+
+#: systemv/cancel.c:157
+#, c-format
+msgid "%s: Error - expected username after '-u' option!\n"
+msgstr "%s: Error - se esperaba un nombre de usuario tras la opción '-u'.\n"
+
+#: systemv/cancel.c:308 systemv/cancel.c:373 systemv/cancel.c:372
+#, c-format
+msgid "%s: %s failed: %s\n"
+msgstr "%s: %s ha fallado: %s\n"
+
+#: systemv/lp.c:173 systemv/lp.c:177
+#, c-format
+msgid "%s: Error - expected destination after '-d' option!\n"
+msgstr "%s: Error -  se esperaba un destino tras la opción '-d'.\n"
+
+#: systemv/lp.c:206 systemv/lp.c:210
+#, c-format
+msgid "%s: Error - expected form after '-f' option!\n"
+msgstr "%s: Error - se esperaba un formulario tras la opción '-f'.\n"
+
+#: systemv/lp.c:213 systemv/lp.c:217
+#, c-format
+msgid "%s: Warning - form option ignored!\n"
+msgstr "%s: Advertencia - opción de formulario no tenida en cuenta.\n"
+
+#: systemv/lp.c:247 systemv/lp.c:251
+#, c-format
+msgid "%s: Expected job ID after '-i' option!\n"
+msgstr "%s : Se esperaba una ID de trabajo tras la opción '-i'.\n"
+
+#: systemv/lp.c:258 systemv/lp.c:262
+#, c-format
+msgid "%s: Error - cannot print files and alter jobs simultaneously!\n"
+msgstr ""
+"%s: Error - no se pueden imprimir archivos y alterar trabajos al mismo "
+"tiempo.\n"
+
+#: systemv/lp.c:271 systemv/lp.c:275
+#, c-format
+msgid "%s: Error - bad job ID!\n"
+msgstr "%s: Error - ID de trabajo incorrecta.\n"
+
+#: systemv/lp.c:296 systemv/lp.c:308
+#, c-format
+msgid "%s: Error - expected copies after '-n' option!\n"
+msgstr "%s: Error -  se esperaba número de copias tras la opción '-n'.\n"
+
+#: systemv/lp.c:319 systemv/lp.c:331
+#, c-format
+msgid "%s: Error - expected option string after '-o' option!\n"
+msgstr "%s: Error - se esperaba una cadena de opciones tras la opción '-o'.\n"
+
+#: systemv/lp.c:340 systemv/lp.c:352
+#, c-format
+msgid "%s: Error - expected priority after '-%c' option!\n"
+msgstr "%s: Error - se esperaba un valor de prioridad tras la opción '-%c'.\n"
+
+#: systemv/lp.c:363 systemv/lp.c:375
+#, c-format
+msgid "%s: Error - priority must be between 1 and 100.\n"
+msgstr "%s: Error - la prioridad debe estar entre 1 y 100.\n"
+
+#: systemv/lp.c:387 systemv/lp.c:399
+#, c-format
+msgid "%s: Error - expected title after '-t' option!\n"
+msgstr "%s: Error - se esperaba un título tras la opción '-t'.\n"
+
+#: systemv/lp.c:405 systemv/lp.c:417
+#, c-format
+msgid "%s: Error - expected mode list after '-y' option!\n"
+msgstr "%s: Error - se esperaba una lista de modos tras la opción '-y'.\n"
+
+#: systemv/lp.c:413 systemv/lp.c:425
+#, c-format
+msgid "%s: Warning - mode option ignored!\n"
+msgstr "%s: Advertencia - opción de modo no tenida en cuenta.\n"
+
+#: systemv/lp.c:427 systemv/lp.c:439
+#, c-format
+msgid "%s: Error - expected hold name after '-H' option!\n"
+msgstr "%s: Error - se esperaba un nombre de retención tras la opción '-H'.\n"
+
+#: systemv/lp.c:451 systemv/lp.c:463
+#, c-format
+msgid "%s: Need job ID ('-i jobid') before '-H restart'!\n"
+msgstr ""
+"%s: Se necesita un ID de trabajo ('-i id_trabajo') antes de '-H restart'.\n"
+
+#: systemv/lp.c:475 systemv/lp.c:487
+#, c-format
+msgid "%s: Error - expected page list after '-P' option!\n"
+msgstr "%s: Error - se esperaba una lista de páginas tras la opción '-P'.\n"
+
+#: systemv/lp.c:496 systemv/lp.c:508
+#, c-format
+msgid "%s: Error - expected character set after '-S' option!\n"
+msgstr "%s: Error - se esperaba un juego de caracteres tras la opción '-S'.\n"
+
+#: systemv/lp.c:504 systemv/lp.c:516
+#, c-format
+msgid "%s: Warning - character set option ignored!\n"
+msgstr "%s: Advertencia - opción de juego de caracteres no tenida en cuenta.\n"
+
+#: systemv/lp.c:516 systemv/lp.c:528
+#, c-format
+msgid "%s: Error - expected content type after '-T' option!\n"
+msgstr "%s: Error - se esperaba un tipo de contenido tras la opción '-T'.\n"
+
+#: systemv/lp.c:524 systemv/lp.c:536
+#, c-format
+msgid "%s: Warning - content type option ignored!\n"
+msgstr "%s: Advertencia - opción de tipo de contenido no tenida en cuenta.\n"
+
+#: systemv/lp.c:538 systemv/lp.c:554
+#, c-format
+msgid ""
+"%s: Error - cannot print from stdin if files or a job ID are provided!\n"
+msgstr ""
+"%s: Error - no se puede imprimir desde stdin si se proporcionan archivos o "
+"una ID de trabajo.\n"
+
+#: systemv/lpstat.c:164 systemv/lpstat.c:178
+#, c-format
+msgid ""
+"%s: Error - need \"completed\", \"not-completed\", or \"all\" after '-W' "
+"option!\n"
+msgstr ""
+"%s: Error - se necesita \"completed\", \"not completed\", o \"all\" tras la "
+"opción '-W'.\n"
+
+#: systemv/lpstat.c:237
+#, c-format
+msgid "%s: Error - expected destination after '-b' option!\n"
+msgstr "%s: Error - se esperaba un destino tras la opción '-b'.\n"
+
+#: systemv/lpstat.c:534
+#, c-format
+msgid "%s: Invalid destination name in list \"%s\"!\n"
+msgstr "%s: Nombre de destino no válido en la lista \"%s\".\n"
+
+#: systemv/lpstat.c:571 systemv/cupsaddsmb.c:156 systemv/cupsaddsmb.c:177
+#, c-format
+msgid "%s: Unable to connect to server\n"
+msgstr "%s: No se ha podido conectar al servidor\n"
+
+#: cups/notify.c:91
+msgid "Print Job:"
+msgstr "Imprimir trabajo:"
+
+#: cups/notify.c:96
+msgid "pending"
+msgstr "pendiente"
+
+#: cups/notify.c:99
+msgid "held"
+msgstr "retenido"
+
+#: cups/notify.c:102 cups/notify.c:143
+msgid "processing"
+msgstr "en proceso"
+
+#: cups/notify.c:105 cups/notify.c:146
+msgid "stopped"
+msgstr "parado"
+
+#: cups/notify.c:108
+msgid "canceled"
+msgstr "cancelado"
+
+#: cups/notify.c:111
+msgid "aborted"
+msgstr "cancelado"
+
+#: cups/notify.c:114
+msgid "completed"
+msgstr "completado"
+
+#: cups/notify.c:117 cups/notify.c:149
+msgid "unknown"
+msgstr "desconocido"
+
+#: cups/notify.c:126
+msgid "untitled"
+msgstr "sin título"
+
+#: cups/notify.c:135
+msgid "Printer:"
+msgstr "Impresora:"
+
+#: cups/notify.c:140
+msgid "idle"
+msgstr "inactiva"
+
+#: scheduler/ipp.c:5513 scheduler/ipp.c:5482 scheduler/ipp.c:5498
+msgid "Missing notify-subscription-ids attribute!"
+msgstr "Atributo notify-subscription-ids desaparecido."
+
+#: scheduler/ipp.c:7851 scheduler/ipp.c:7341 scheduler/ipp.c:7357
+msgid "Job subscriptions cannot be renewed!"
+msgstr "Las suscripciones de trabajos no han podido ser renovadas."
+
+#: scheduler/main.c:163
+msgid "cupsd: Expected config filename after \"-c\" option!\n"
+msgstr ""
+"cupsd: Se esperaba un nombre de archivo de configuración tras la opción \"-c"
+"\".\n"
+
+#: scheduler/main.c:218
+msgid "cupsd: launchd(8) support not compiled in, running in normal mode.\n"
+msgstr ""
+"cupsd: el uso de launchd(8) no ha sido compilado, ejecutándose en modo "
+"normal.\n"
+
+#: scheduler/main.c:225
+#, c-format
+msgid "cupsd: Unknown option \"%c\" - aborting!\n"
+msgstr "cupsd: Opción \"%c\" desconocida - cancelando.\n"
+
+#: scheduler/main.c:232
+#, c-format
+msgid "cupsd: Unknown argument \"%s\" - aborting!\n"
+msgstr "cupsd: Argumento \"%s\" desconocido - cancelando.\n"
+
+#: scheduler/main.c:2315 scheduler/main.c:2329 scheduler/main.c:2304
+msgid ""
+"Usage: cupsd [-c config-file] [-f] [-F] [-h] [-l]\n"
+"\n"
+"-c config-file      Load alternate configuration file\n"
+"-f                  Run in the foreground\n"
+"-F                  Run in the foreground but detach\n"
+"-h                  Show this usage message\n"
+"-l                  Run cupsd from launchd(8)\n"
+msgstr ""
+"Uso: cupsd (-c archivo-configuración) (-f) (-F) (-h) (-l)\n"
+"\n"
+"-c archivo-configuración      Carga un archivo de configuración alternativo\n"
+"-f                  Se ejecuta en primer plano\n"
+"-F                  Se ejecuta en primer plano pero separado\n"
+"-h                  Muestra este mensaje de cómo se usa\n"
+"-l                  Ejecuta cupsd desde launchd(8)\n"
+
+#: systemv/cupstestppd.c:1343 systemv/cupstestppd.c:1543
+#, c-format
+msgid "        WARN    Line %d only contains whitespace!\n"
+msgstr "        ADVERTENCIA    La línea %d solo contiene espacios en blanco.\n"
+
+#: systemv/cupstestppd.c:1361 systemv/cupstestppd.c:1561
+msgid ""
+"        WARN    File contains a mix of CR, LF, and CR LF line endings!\n"
+msgstr ""
+"        ADVERTENCIA    El archivo contiene una mezcla de líneas acabadas en "
+"CR, LF y CR LF.\n"
+
+#: systemv/cupstestppd.c:1366 systemv/cupstestppd.c:1566
+msgid ""
+"        WARN    Non-Windows PPD files should use lines ending with only LF, "
+"not CR LF!\n"
+msgstr ""
+"        ADVERTENCIA    Los archivos PPD que no sean de Windows deben tener "
+"líneas que acaben sólo en LF, no en CR LF.\n"
+
+#: cgi-bin/printers.c:218 cgi-bin/printers.c:289 cgi-bin/printers.c:223
+#: cgi-bin/printers.c:294
+msgid "Printer Maintenance"
+msgstr "Mantenimiento de impresora"
+
+#: cgi-bin/printers.c:292 cgi-bin/printers.c:297
+msgid "Unable to send maintenance job:"
+msgstr "No se ha podido enviar el trabajo de mantenimiento:"
+
+#: systemv/cupsaddsmb.c:566 systemv/cupsaddsmb.c:233
+#, c-format
+msgid "cupsaddsmb: No PPD file for printer \"%s\" - %s\n"
+msgstr "cupsaddsmb: No hay archivo PPD para la impresora \"%s\" - %s\n"
+
+#: systemv/cupstestppd.c:346
+#, c-format
+msgid "      **FAIL**  %s %s does not exist!\n"
+msgstr "      **FALLO**  %s %s no existe.\n"
+
+#: systemv/cupstestppd.c:1053
+#, c-format
+msgid "      **FAIL**  Bad language \"%s\"!\n"
+msgstr "      **FALLO**  Idioma incorrecto \"%s\".\n"
+
+#: systemv/cupstestppd.c:1078
+#, c-format
+msgid "      **FAIL**  Missing \"%s\" translation string for option %s!\n"
+msgstr ""
+"      **FALLO**  Cadena de traducción \"%s\" para opción %s desaparecida.\n"
+
+#: systemv/cupstestppd.c:1098
+#, c-format
+msgid ""
+"      **FAIL**  Default translation string for option %s contains 8-bit "
+"characters!\n"
+msgstr ""
+"      **FALLO**  Cadena de traducción predeterminada para opción %s contiene "
+"caracteres de 8-bits.\n"
+
+#: systemv/cupstestppd.c:1119
+#, c-format
+msgid ""
+"      **FAIL**  Missing \"%s\" translation string for option %s, choice %s!\n"
+msgstr ""
+"      **FALLO**  Cadena de traducción \"%s\" para opción %s, preferencia %"
+"s.\n"
+
+#: systemv/cupstestppd.c:1141
+#, c-format
+msgid ""
+"      **FAIL**  Default translation string for option %s choice %s contains "
+"8-bit characters!\n"
+msgstr ""
+"      **FALLO**  Cadena de traducción predeterminada para opción %s "
+"preferencia %s contiene caracteres de 8-bits.\n"
+
+#: systemv/cupstestppd.c:1175
+#, c-format
+msgid "      **FAIL**  Bad cupsFilter value \"%s\"!\n"
+msgstr "      **FALLO**  Valor cupsFilter incorrecto \"%s\".\n"
+
+#: cgi-bin/help.c:98 cgi-bin/help.c:139 cgi-bin/help.c:149 cgi-bin/help.c:179
+msgid "Help"
+msgstr "Ayuda"
+
+#: cups/adminutil.c:233 cups/adminutil.c:246
+#, c-format
+msgid "Missing value on line %d!\n"
+msgstr "Falta un valor en la línea %d.\n"
+
+#: cups/adminutil.c:249 cups/adminutil.c:265
+#, c-format
+msgid "Missing double quote on line %d!\n"
+msgstr "Faltan dobles comillas en línea %d.\n"
+
+#: cups/adminutil.c:266 cups/adminutil.c:284
+#, c-format
+msgid "Bad option + choice on line %d!\n"
+msgstr "Opción incorrecta + preferencia en línea %s.\n"
+
+#: cups/adminutil.c:417
+#, c-format
+msgid "Unable to copy Windows 2000 printer driver files (%d)!\n"
+msgstr ""
+"No se han podido copiar los archivos del controlador de impresora de Windows "
+"2000 (%d).\n"
+
+#: cups/adminutil.c:445
+#, c-format
+msgid "Unable to copy CUPS printer driver files (%d)!\n"
+msgstr ""
+"No se han podido copiar los archivos del controlador de impresora de CUPS (%"
+"d).\n"
+
+#: cups/adminutil.c:480
+#, c-format
+msgid "Unable to install Windows 2000 printer driver files (%d)!\n"
+msgstr ""
+"No se han podido instalar los archivos del controlador de impresora de "
+"Windows 2000 (%d).\n"
+
+#: cups/adminutil.c:514
+#, c-format
+msgid "Unable to copy Windows 9x printer driver files (%d)!\n"
+msgstr ""
+"No se han podido copiar los archivos del controlador de impresora de Windows "
+"9x (%d).\n"
+
+#: cups/adminutil.c:536
+#, c-format
+msgid "Unable to install Windows 9x printer driver files (%d)!\n"
+msgstr ""
+"No se han podido instalar los archivos del controlador de impresora de "
+"Windows 9x (%d).\n"
+
+#: cups/adminutil.c:547
+msgid "No Windows printer drivers are installed!\n"
+msgstr "No está instalado ningún controlador de impresora de Windows.\n"
+
+#: cups/adminutil.c:550
+msgid "Warning, no Windows 2000 printer drivers are installed!\n"
+msgstr ""
+"Advertencia, no está instalado ningún controlador de impresora de Windows "
+"2000.\n"
+
+#: cups/adminutil.c:568 cups/adminutil.c:658
+#, c-format
+msgid "Unable to set Windows printer driver (%d)!\n"
+msgstr ""
+"No se ha podido configurar el controlador de impresora de Windows (%d).\n"
+
+#: systemv/cupsaddsmb.c:278
+msgid ""
+"Usage: cupsaddsmb [options] printer1 ... printerN\n"
+"       cupsaddsmb [options] -a\n"
+"\n"
+"Options:\n"
+"  -E               Encrypt the connection to the server\n"
+"  -H samba-server  Use the named SAMBA server\n"
+"  -U samba-user    Authenticate using the named SAMBA user\n"
+"  -a               Export all printers\n"
+"  -h cups-server   Use the named CUPS server\n"
+"  -v               Be verbose (show commands)\n"
+msgstr ""
+"Uso: cupsaddsmb [opciones] impresora1 ... impresoraN\n"
+"       cupsaddsmb [opciones] -a\n"
+"\n"
+"Opciones:\n"
+"  -E               Hace que se use encriptación en la conexión con el "
+"servidor\n"
+"  -H servidor_samba  Usa el servidor SAMBA especificado\n"
+"  -U usuario_samba    Autentifica usando el usuario SAMBA especificado\n"
+"  -a               Exporta todas las impresoras\n"
+"  -h servidor_cups   Usa el servidor CUPS especificado\n"
+"  -v               Ser detallado (mostrar comandos)\n"
+
+#: cups/adminutil.c:464
+#, c-format
+msgid "Unable to copy Windows 2000 printer driver files (%d)!"
+msgstr ""
+"No se han podido copiar los archivos del controlador de impresora de Windows "
+"2000 (%d)."
+
+#: cups/adminutil.c:499
+#, c-format
+msgid "Unable to copy CUPS printer driver files (%d)!"
+msgstr ""
+"No se han podido copiar los archivos del controlador de impresora de CUPS (%"
+"d)."
+
+#: cups/adminutil.c:542
+#, c-format
+msgid "Unable to install Windows 2000 printer driver files (%d)!"
+msgstr ""
+"No se han podido instalar los archivos del controlador de impresora de "
+"Windows 2000 (%d)."
+
+#: cups/adminutil.c:583
+#, c-format
+msgid "Unable to copy Windows 9x printer driver files (%d)!"
+msgstr ""
+"No se han podido copiar los archivos del controlador de impresora de Windows "
+"9x (%d)."
+
+#: cups/adminutil.c:612
+#, c-format
+msgid "Unable to install Windows 9x printer driver files (%d)!"
+msgstr ""
+"No se han podido instalar los archivos del controlador de impresora de "
+"Windows 9x (%d)."
+
+#: cups/adminutil.c:631
+msgid "No Windows printer drivers are installed!"
+msgstr "No está instalado ningún controlador de impresora de Windows."
+
+#: cups/adminutil.c:636
+msgid "Warning, no Windows 2000 printer drivers are installed!"
+msgstr ""
+"Advertencia, no está instalado ningún controlador de impresora de Windows "
+"2000."
+
+#: cups/adminutil.c:736
+#, c-format
+msgid "open of %s failed: %s"
+msgstr "la apertura de %s ha fallado: %s"
+
+#: cups/adminutil.c:1653
+#, c-format
+msgid "Running command: %s %s -N -A %s -c '%s'\n"
+msgstr "Ejecutando comando: %s %s -N -A '%s -c '%s'\n"
+
+#: cups/adminutil.c:1750
+#, c-format
+msgid "stat of %s failed: %s"
+msgstr "verificación de %s ha fallado: %s"
+
+#: scheduler/ipp.c:3021
+#, c-format
+msgid "Job #%d is already cancelled - can't cancel."
+msgstr "El trabajo #%d ya está cancelado - no se puede cancelar."
+
+#: scheduler/ipp.c:3027
+#, c-format
+msgid "Job #%d is already aborted - can't cancel."
+msgstr "El trabajo #%d ya está anulado - no se puede cancelar."
+
+#: scheduler/ipp.c:3033
+#, c-format
+msgid "Job #%d is already completed - can't cancel."
+msgstr "El trabajo #%d ya ha sido completado - no se puede cancelar."
+
index 9433043760bbb1a9ef9c55c38a4b69478fbc9add..2dffe55d8773375e734466cfee2cb097ce81580e 100644 (file)
@@ -25,8 +25,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: CUPS 1.2\n"
 "Report-Msgid-Bugs-To: http://www.cups.org/str.php\n"
-"POT-Creation-Date: 2006-03-09 19:42-0500\n"
-"PO-Revision-Date: 2006-02-17 11:17+0900\n"
+"POT-Creation-Date: 2006-03-13 08:39-0500\n"
+"PO-Revision-Date: 2006-03-14 09:29+0900\n"
 "Last-Translator: Kenshi Muto <kmuto@debian.org>\n"
 "Language-Team: Japanese <LL@li.org>\n"
 "MIME-Version: 1.0\n"
@@ -53,37 +53,37 @@ msgstr "補助"
 #: cups/ppd.c:656 cups/ppd.c:881 cups/ppd.c:1047 cups/ppd.c:662 cups/ppd.c:996
 #: cups/ppd.c:1169 cups/ppd.c:651 cups/ppd.c:983 cups/ppd.c:1148
 #: cups/ppd.c:972 cups/ppd.c:1137 cups/ppd.c:646 cups/ppd.c:973
-#: cups/ppd.c:1138
+#: cups/ppd.c:1138 cups/ppd.c:970 cups/ppd.c:1135
 msgid "General"
 msgstr "一般"
 
 #: cups/ppd.c:704 cups/ppd.c:1105 cups/ppd.c:710 cups/ppd.c:1224
 #: cups/ppd.c:697 cups/ppd.c:1201 cups/ppd.c:1190 cups/ppd.c:692
-#: cups/ppd.c:1191
+#: cups/ppd.c:1191 cups/ppd.c:1188
 msgid "Media Size"
 msgstr "用紙サイズ"
 
 #: cups/ppd.c:706 cups/ppd.c:1107 cups/ppd.c:712 cups/ppd.c:1226
 #: cups/ppd.c:699 cups/ppd.c:1203 cups/ppd.c:1192 cups/ppd.c:694
-#: cups/ppd.c:1193
+#: cups/ppd.c:1193 cups/ppd.c:1190
 msgid "Media Type"
 msgstr "用紙形式"
 
 #: cups/ppd.c:708 cups/ppd.c:1109 cups/ppd.c:714 cups/ppd.c:1228
 #: cups/ppd.c:701 cups/ppd.c:1205 cups/ppd.c:1194 cups/ppd.c:696
-#: cups/ppd.c:1195
+#: cups/ppd.c:1195 cups/ppd.c:1192
 msgid "Media Source"
 msgstr "給紙"
 
 #: cups/ppd.c:710 cups/ppd.c:1111 cups/ppd.c:716 cups/ppd.c:1230
 #: cups/ppd.c:703 cups/ppd.c:1207 cups/ppd.c:1196 cups/ppd.c:698
-#: cups/ppd.c:1197
+#: cups/ppd.c:1197 cups/ppd.c:1194
 msgid "Output Mode"
 msgstr "出力モード"
 
 #: cups/ppd.c:712 cups/ppd.c:1113 cups/ppd.c:718 cups/ppd.c:1232
 #: cups/ppd.c:705 cups/ppd.c:1209 cups/ppd.c:1198 cups/ppd.c:700
-#: cups/ppd.c:1199
+#: cups/ppd.c:1199 cups/ppd.c:1196
 msgid "Resolution"
 msgstr "解像度"
 
@@ -92,12 +92,12 @@ msgid "Variable"
 msgstr "可変"
 
 #: cups/ppd.c:1535 cups/ppd.c:1650 cups/ppd.c:1627 cups/ppd.c:1616
-#: cups/ppd.c:1622
+#: cups/ppd.c:1622 cups/ppd.c:1619
 msgid "Yes"
 msgstr "はい"
 
 #: cups/ppd.c:1537 cups/ppd.c:1652 cups/ppd.c:1629 cups/ppd.c:1618
-#: cups/ppd.c:1624
+#: cups/ppd.c:1624 cups/ppd.c:1621
 msgid "No"
 msgstr "いいえ"
 
@@ -106,7 +106,7 @@ msgid "Auto"
 msgstr "自動"
 
 #: scheduler/client.c:2247 scheduler/client.c:2251 scheduler/client.c:2274
-#: scheduler/client.c:2308 scheduler/client.c:2349
+#: scheduler/client.c:2308 scheduler/client.c:2349 scheduler/client.c:2350
 msgid ""
 "Enter your username and password or the root username and password to access "
 "this page."
@@ -115,7 +115,7 @@ msgstr ""
 "のユーザ名とパスワードを入力してください。"
 
 #: scheduler/client.c:2252 scheduler/client.c:2256 scheduler/client.c:2279
-#: scheduler/client.c:2313 scheduler/client.c:2354
+#: scheduler/client.c:2313 scheduler/client.c:2354 scheduler/client.c:2355
 msgid "You must use a https: URL to access this page."
 msgstr "このページにアクセスするためには、https: URL を使う必要があります。"
 
@@ -170,7 +170,11 @@ msgstr "%s はサポートされていません!"
 #: scheduler/ipp.c:5326 scheduler/ipp.c:5738 scheduler/ipp.c:6046
 #: scheduler/ipp.c:6337 scheduler/ipp.c:6379 scheduler/ipp.c:7116
 #: scheduler/ipp.c:8081 scheduler/ipp.c:8745 scheduler/ipp.c:8826
-#: scheduler/ipp.c:9001
+#: scheduler/ipp.c:9001 scheduler/ipp.c:4715 scheduler/ipp.c:4958
+#: scheduler/ipp.c:5342 scheduler/ipp.c:5754 scheduler/ipp.c:6062
+#: scheduler/ipp.c:6353 scheduler/ipp.c:6395 scheduler/ipp.c:7132
+#: scheduler/ipp.c:8097 scheduler/ipp.c:8761 scheduler/ipp.c:8842
+#: scheduler/ipp.c:9017
 msgid "The printer or class was not found."
 msgstr "プリンタまたはクラスが見つかりませんでした。"
 
@@ -218,21 +222,21 @@ msgstr "ファイルタイプ用にメモリを割り当てられません!"
 
 #: scheduler/ipp.c:1290 scheduler/ipp.c:4501 scheduler/ipp.c:1316
 #: scheduler/ipp.c:4705 scheduler/ipp.c:1348 scheduler/ipp.c:4804
-#: scheduler/ipp.c:1810 scheduler/ipp.c:4773
+#: scheduler/ipp.c:1810 scheduler/ipp.c:4773 scheduler/ipp.c:4789
 #, c-format
 msgid "Character set \"%s\" not supported!"
 msgstr "文字セット \"%s\" はサポートされていません!"
 
 #: scheduler/ipp.c:1299 scheduler/ipp.c:4510 scheduler/ipp.c:1325
 #: scheduler/ipp.c:4714 scheduler/ipp.c:1357 scheduler/ipp.c:4813
-#: scheduler/ipp.c:1819 scheduler/ipp.c:4782
+#: scheduler/ipp.c:1819 scheduler/ipp.c:4782 scheduler/ipp.c:4798
 #, c-format
 msgid "Language \"%s\" not supported!"
 msgstr "言語 \"%s\" はサポートされていません!"
 
 #: scheduler/ipp.c:1309 scheduler/ipp.c:4520 scheduler/ipp.c:1335
 #: scheduler/ipp.c:4724 scheduler/ipp.c:1367 scheduler/ipp.c:4823
-#: scheduler/ipp.c:1829 scheduler/ipp.c:4792
+#: scheduler/ipp.c:1829 scheduler/ipp.c:4792 scheduler/ipp.c:4808
 #, c-format
 msgid "The notify-user-data value is too large (%d > 63 octets)!"
 msgstr "notify-user-data 値が大きすぎます (%d > 63 オクテット)!"
@@ -288,13 +292,13 @@ msgid "Bad printer-state value %d!"
 msgstr "%d は無効な printer-state 値です!"
 
 #: scheduler/ipp.c:1762 scheduler/ipp.c:1800 scheduler/ipp.c:1842
-#: scheduler/ipp.c:8585
+#: scheduler/ipp.c:8585 scheduler/ipp.c:8601
 #, c-format
 msgid "Unknown printer-op-policy \"%s\"."
 msgstr "\"%s\" は未知の printer-op-policy です。"
 
 #: scheduler/ipp.c:1775 scheduler/ipp.c:1813 scheduler/ipp.c:1855
-#: scheduler/ipp.c:8600
+#: scheduler/ipp.c:8600 scheduler/ipp.c:8616
 #, c-format
 msgid "Unknown printer-error-policy \"%s\"."
 msgstr "\"%s\" は未知の printer-error-policy です。"
@@ -327,6 +331,8 @@ msgstr "PPD ファイルをコピーできません!"
 #: scheduler/ipp.c:8672 scheduler/ipp.c:2613 scheduler/ipp.c:2906
 #: scheduler/ipp.c:5189 scheduler/ipp.c:6179 scheduler/ipp.c:7203
 #: scheduler/ipp.c:7418 scheduler/ipp.c:7657 scheduler/ipp.c:8164
+#: scheduler/ipp.c:5205 scheduler/ipp.c:6195 scheduler/ipp.c:7219
+#: scheduler/ipp.c:7434 scheduler/ipp.c:7673 scheduler/ipp.c:8180
 msgid "Got a printer-uri attribute but no job-id!"
 msgstr "printer-uri 属性を取得しましたが、job-id を取得できませんでした!"
 
@@ -342,6 +348,9 @@ msgstr "printer-uri 属性を取得しましたが、job-id を取得できま
 #: scheduler/ipp.c:2635 scheduler/ipp.c:2978 scheduler/ipp.c:5212
 #: scheduler/ipp.c:6202 scheduler/ipp.c:6425 scheduler/ipp.c:7226
 #: scheduler/ipp.c:7441 scheduler/ipp.c:7680 scheduler/ipp.c:8187
+#: scheduler/ipp.c:5228 scheduler/ipp.c:6218 scheduler/ipp.c:6441
+#: scheduler/ipp.c:7242 scheduler/ipp.c:7457 scheduler/ipp.c:7696
+#: scheduler/ipp.c:8203
 #, c-format
 msgid "Bad job-uri attribute \"%s\"!"
 msgstr "\"%s\" は無効な job-uri 属性です!"
@@ -446,51 +455,52 @@ msgid "Unable to add job for destination \"%s\"!"
 msgstr "宛先 \"%s\" にジョブを追加できません!"
 
 #: scheduler/ipp.c:4469 scheduler/ipp.c:4673 scheduler/ipp.c:4770
-#: scheduler/ipp.c:4739
+#: scheduler/ipp.c:4739 scheduler/ipp.c:4755
 msgid "No subscription attributes in request!"
 msgstr "リクエストにサブスクリプション属性がありません!"
 
 #: scheduler/ipp.c:4559 scheduler/ipp.c:4763 scheduler/ipp.c:4869
-#: scheduler/ipp.c:4838
+#: scheduler/ipp.c:4838 scheduler/ipp.c:4854
 msgid "notify-events not specified!"
 msgstr "notify-events が指定されていません!"
 
 #: scheduler/ipp.c:4577 scheduler/ipp.c:4781 scheduler/ipp.c:4887
-#: scheduler/ipp.c:4856
+#: scheduler/ipp.c:4856 scheduler/ipp.c:4872
 #, c-format
 msgid "Job %d not found!"
 msgstr "ジョブ %d は見つかりません!"
 
 #: scheduler/ipp.c:4827 scheduler/ipp.c:4957 scheduler/ipp.c:5075
-#: scheduler/ipp.c:5044
+#: scheduler/ipp.c:5044 scheduler/ipp.c:5060
 msgid "No default printer"
 msgstr "デフォルトプリンタはありません"
 
 #: scheduler/ipp.c:4930 scheduler/ipp.c:5060 scheduler/ipp.c:5178
-#: scheduler/ipp.c:5147
+#: scheduler/ipp.c:5147 scheduler/ipp.c:5163
 msgid "cups-deviced failed to execute."
 msgstr "cups-deviced の実行に失敗しました。"
 
 #: scheduler/ipp.c:5393 scheduler/ipp.c:5479 scheduler/ipp.c:5722
-#: scheduler/ipp.c:5691
+#: scheduler/ipp.c:5691 scheduler/ipp.c:5707
 msgid "cups-driverd failed to execute."
 msgstr "cups-driverd の実行に失敗しました。"
 
 #: scheduler/ipp.c:5571 scheduler/ipp.c:5594 scheduler/ipp.c:5837
-#: scheduler/ipp.c:5806
+#: scheduler/ipp.c:5806 scheduler/ipp.c:5822
 msgid "No destinations added."
 msgstr "追加された宛先はありません。"
 
 #: scheduler/ipp.c:5794 scheduler/ipp.c:5736 scheduler/ipp.c:2615
 #: scheduler/ipp.c:5530 scheduler/ipp.c:5979 scheduler/ipp.c:7840
 #: scheduler/ipp.c:3070 scheduler/ipp.c:5499 scheduler/ipp.c:5948
-#: scheduler/ipp.c:7330
+#: scheduler/ipp.c:7330 scheduler/ipp.c:3086 scheduler/ipp.c:5515
+#: scheduler/ipp.c:5964 scheduler/ipp.c:7346
 #, c-format
 msgid "notify-subscription-id %d no good!"
 msgstr "notify-subscription-id %d は良くありません!"
 
 #: scheduler/ipp.c:5878 scheduler/ipp.c:5822 scheduler/ipp.c:6065
-#: scheduler/ipp.c:6034
+#: scheduler/ipp.c:6034 scheduler/ipp.c:6050
 #, c-format
 msgid "Job #%s does not exist!"
 msgstr "ジョブ #%s は存在しません!"
@@ -509,13 +519,16 @@ msgstr "ジョブ #%s は存在しません!"
 #: scheduler/ipp.c:2996 scheduler/ipp.c:5230 scheduler/ipp.c:6056
 #: scheduler/ipp.c:6220 scheduler/ipp.c:6398 scheduler/ipp.c:6443
 #: scheduler/ipp.c:7244 scheduler/ipp.c:7459 scheduler/ipp.c:7698
-#: scheduler/ipp.c:8205
+#: scheduler/ipp.c:8205 scheduler/ipp.c:5246 scheduler/ipp.c:6072
+#: scheduler/ipp.c:6236 scheduler/ipp.c:6414 scheduler/ipp.c:6459
+#: scheduler/ipp.c:7260 scheduler/ipp.c:7475 scheduler/ipp.c:7714
+#: scheduler/ipp.c:8221
 #, c-format
 msgid "Job #%d does not exist!"
 msgstr "ジョブ #%d は存在しません!"
 
 #: scheduler/ipp.c:5969 scheduler/ipp.c:5915 scheduler/ipp.c:6150
-#: scheduler/ipp.c:6119
+#: scheduler/ipp.c:6119 scheduler/ipp.c:6135
 msgid "No subscriptions found."
 msgstr "サブスクリプションが見つかりません。"
 
@@ -527,7 +540,8 @@ msgstr ""
 
 #: scheduler/ipp.c:6203 scheduler/ipp.c:8315 scheduler/ipp.c:6250
 #: scheduler/ipp.c:8390 scheduler/ipp.c:6505 scheduler/ipp.c:8728
-#: scheduler/ipp.c:6474 scheduler/ipp.c:8220
+#: scheduler/ipp.c:6474 scheduler/ipp.c:8220 scheduler/ipp.c:6490
+#: scheduler/ipp.c:8236
 #, c-format
 msgid "Job #%d is finished and cannot be altered!"
 msgstr "ジョブ #%d は完了し、変更することはできません!"
@@ -540,32 +554,35 @@ msgstr ""
 "ん!"
 
 #: scheduler/ipp.c:6228 scheduler/ipp.c:6098 scheduler/ipp.c:6353
-#: scheduler/ipp.c:6322
+#: scheduler/ipp.c:6322 scheduler/ipp.c:6338
 msgid "job-printer-uri attribute missing!"
 msgstr "job-printer-uri 属性がありません!"
 
 #: scheduler/ipp.c:6485 scheduler/ipp.c:7847 scheduler/ipp.c:6531
 #: scheduler/ipp.c:7913 scheduler/ipp.c:6783 scheduler/ipp.c:8238
-#: scheduler/ipp.c:6703 scheduler/ipp.c:7728
+#: scheduler/ipp.c:6703 scheduler/ipp.c:7728 scheduler/ipp.c:6719
+#: scheduler/ipp.c:7744
 #, c-format
 msgid "Unsupported compression \"%s\"!"
 msgstr "\"%s\" はサポートされていない圧縮です!"
 
 #: scheduler/ipp.c:6504 scheduler/ipp.c:7866 scheduler/ipp.c:6550
 #: scheduler/ipp.c:7932 scheduler/ipp.c:6802 scheduler/ipp.c:8257
-#: scheduler/ipp.c:6722 scheduler/ipp.c:7747
+#: scheduler/ipp.c:6722 scheduler/ipp.c:7747 scheduler/ipp.c:6738
+#: scheduler/ipp.c:7763
 msgid "No file!?!"
 msgstr "ファイルがありません!?!"
 
 #: scheduler/ipp.c:6522 scheduler/ipp.c:6568 scheduler/ipp.c:6820
-#: scheduler/ipp.c:6740
+#: scheduler/ipp.c:6740 scheduler/ipp.c:6756
 #, c-format
 msgid "Could not scan type \"%s\"!"
 msgstr "タイプ \"%s\" を検査できませんでした!"
 
 #: scheduler/ipp.c:6574 scheduler/ipp.c:7936 scheduler/ipp.c:6620
 #: scheduler/ipp.c:8001 scheduler/ipp.c:6879 scheduler/ipp.c:8332
-#: scheduler/ipp.c:6799 scheduler/ipp.c:7822
+#: scheduler/ipp.c:6799 scheduler/ipp.c:7822 scheduler/ipp.c:6815
+#: scheduler/ipp.c:7838
 #, c-format
 msgid "Unsupported format '%s/%s'!"
 msgstr "'%s/%s' はサポートされていない形式です!"
@@ -580,7 +597,7 @@ msgid "Too many jobs - %d jobs, max jobs is %d."
 msgstr "ジョブが多すぎます - %d ジョブ。最大ジョブ数は %d です。"
 
 #: scheduler/ipp.c:7448 scheduler/ipp.c:7507 scheduler/ipp.c:7768
-#: scheduler/ipp.c:7258
+#: scheduler/ipp.c:7258 scheduler/ipp.c:7274
 #, c-format
 msgid "Job #%d is not held!"
 msgstr "ジョブ #%d はホールドされていません!"
@@ -593,13 +610,13 @@ msgstr ""
 "せん!"
 
 #: scheduler/ipp.c:7592 scheduler/ipp.c:7654 scheduler/ipp.c:7983
-#: scheduler/ipp.c:7473
+#: scheduler/ipp.c:7473 scheduler/ipp.c:7489
 #, c-format
 msgid "Job #%d is not complete!"
 msgstr "ジョブ #%d は完結していません!"
 
 #: scheduler/ipp.c:7608 scheduler/ipp.c:7670 scheduler/ipp.c:8001
-#: scheduler/ipp.c:7491
+#: scheduler/ipp.c:7491 scheduler/ipp.c:7507
 #, c-format
 msgid "Job #%d cannot be restarted - no files!"
 msgstr "ジョブ #%d は再起動できません - ファイルがありません!"
@@ -620,7 +637,8 @@ msgstr ""
 
 #: scheduler/ipp.c:7883 scheduler/ipp.c:8803 scheduler/ipp.c:7949
 #: scheduler/ipp.c:8883 scheduler/ipp.c:8274 scheduler/ipp.c:9225
-#: scheduler/ipp.c:7764 scheduler/ipp.c:8967
+#: scheduler/ipp.c:7764 scheduler/ipp.c:8967 scheduler/ipp.c:7780
+#: scheduler/ipp.c:8983
 #, c-format
 msgid "Bad document-format \"%s\"!"
 msgstr "\"%s\" は不正な document-format です!"
@@ -633,23 +651,23 @@ msgstr ""
 "せん!"
 
 #: scheduler/ipp.c:8371 scheduler/ipp.c:8446 scheduler/ipp.c:8783
-#: scheduler/ipp.c:8275
+#: scheduler/ipp.c:8275 scheduler/ipp.c:8291
 #, c-format
 msgid "%s cannot be changed."
 msgstr "%s は変更できません。"
 
 #: scheduler/ipp.c:8387 scheduler/ipp.c:8462 scheduler/ipp.c:8799
-#: scheduler/ipp.c:8291
+#: scheduler/ipp.c:8291 scheduler/ipp.c:8307
 msgid "Bad job-priority value!"
 msgstr "不正な job-priority 値です!"
 
 #: scheduler/ipp.c:8395 scheduler/ipp.c:8470 scheduler/ipp.c:8807
-#: scheduler/ipp.c:8299
+#: scheduler/ipp.c:8299 scheduler/ipp.c:8315
 msgid "Job is completed and cannot be changed."
 msgstr "ジョブは完結し、変更できません。"
 
 #: scheduler/ipp.c:8409 scheduler/ipp.c:8484 scheduler/ipp.c:8821
-#: scheduler/ipp.c:8313
+#: scheduler/ipp.c:8313 scheduler/ipp.c:8329
 msgid "Bad job-state value!"
 msgstr "不正な job-state 値です!"
 
@@ -657,17 +675,18 @@ msgstr "不正な job-state 値です!"
 #: scheduler/ipp.c:8498 scheduler/ipp.c:8510 scheduler/ipp.c:8521
 #: scheduler/ipp.c:8835 scheduler/ipp.c:8850 scheduler/ipp.c:8861
 #: scheduler/ipp.c:8327 scheduler/ipp.c:8342 scheduler/ipp.c:8353
+#: scheduler/ipp.c:8343 scheduler/ipp.c:8358 scheduler/ipp.c:8369
 msgid "Job state cannot be changed."
 msgstr "ジョブの状態を変更できません。"
 
 #: scheduler/ipp.c:8787 scheduler/ipp.c:8867 scheduler/ipp.c:9209
-#: scheduler/ipp.c:8951
+#: scheduler/ipp.c:8951 scheduler/ipp.c:8967
 #, c-format
 msgid "Unsupported compression attribute %s!"
 msgstr "%s はサポートされていない圧縮属性です!"
 
 #: scheduler/ipp.c:8815 scheduler/ipp.c:8894 scheduler/ipp.c:9236
-#: scheduler/ipp.c:8978
+#: scheduler/ipp.c:8978 scheduler/ipp.c:8994
 #, c-format
 msgid "Unsupported format \"%s\"!"
 msgstr "\"%s\" はサポートされていない形式です!"
@@ -1116,7 +1135,7 @@ msgstr "cupstestppd: -q オプションは -v オプションと両立できま
 
 #: systemv/cupstestppd.c:136 systemv/cupstestppd.c:153
 msgid "cupstestppd: The -v option is incompatible with the -q option.\n"
-msgstr "cupstestppd: -v オプションは -q オプションと両立できません。"
+msgstr "cupstestppd: -v オプションは -q オプションと両立できません。\n"
 
 #: systemv/cupstestppd.c:193 systemv/cupstestppd.c:210
 #, c-format
@@ -3137,10 +3156,12 @@ msgid "Unknown"
 msgstr "未知"
 
 #: cups/ppd.c:1033 cups/ppd.c:1020 cups/ppd.c:1009 cups/ppd.c:1010
+#: cups/ppd.c:1007
 msgid "Custom"
 msgstr "カスタム"
 
 #: cups/ppd.c:1259 cups/ppd.c:1236 cups/ppd.c:1225 cups/ppd.c:1226
+#: cups/ppd.c:1223
 msgid "JCL"
 msgstr "JCL"
 
@@ -3592,11 +3613,11 @@ msgstr "プリンタ:"
 msgid "idle"
 msgstr "待機中"
 
-#: scheduler/ipp.c:5513 scheduler/ipp.c:5482
+#: scheduler/ipp.c:5513 scheduler/ipp.c:5482 scheduler/ipp.c:5498
 msgid "Missing notify-subscription-ids attribute!"
 msgstr "notify-subscription-ids 属性がありません!"
 
-#: scheduler/ipp.c:7851 scheduler/ipp.c:7341
+#: scheduler/ipp.c:7851 scheduler/ipp.c:7341 scheduler/ipp.c:7357
 msgid "Job subscriptions cannot be renewed!"
 msgstr "ジョブサブスクリプションが更新されていません!"
 
@@ -3659,35 +3680,32 @@ msgstr ""
 
 #: cgi-bin/printers.c:218 cgi-bin/printers.c:289 cgi-bin/printers.c:223
 #: cgi-bin/printers.c:294
-#, fuzzy
 msgid "Printer Maintenance"
-msgstr "ã\83\97ã\83ªã\83³ã\82¿ã\81¯å\85±æ\9c\89ã\81\95ã\82\8cã\81¦ã\81\84ã\81¾ã\81\9bã\82\93!"
+msgstr "ã\83\97ã\83ªã\83³ã\82¿ã\81®ã\83¡ã\83³ã\83\86ã\83\8aã\83³ã\82¹"
 
 #: cgi-bin/printers.c:292 cgi-bin/printers.c:297
-#, fuzzy
 msgid "Unable to send maintenance job:"
-msgstr "ã\82¸ã\83§ã\83\96ã\82\92移å\8b\95ã\81§ã\81\8dã\81¾ã\81\9bã\82\93"
+msgstr "ã\83¡ã\83³ã\83\86ã\83\8aã\83³ã\82¹ã\82¸ã\83§ã\83\96ã\82\92é\80\81ã\82\8cã\81¾ã\81\9bã\82\93:"
 
 #: systemv/cupsaddsmb.c:566 systemv/cupsaddsmb.c:233
-#, fuzzy, c-format
+#, c-format
 msgid "cupsaddsmb: No PPD file for printer \"%s\" - %s\n"
-msgstr ""
-"cupsaddsmb: プリンタ \"%s\" の PPD ファイルがありません - スキップします!\n"
+msgstr "cupsaddsmb: プリンタ \"%s\" の PPD ファイルがありません - %s\n"
 
 #: systemv/cupstestppd.c:346
-#, fuzzy, c-format
+#, c-format
 msgid "      **FAIL**  %s %s does not exist!\n"
-msgstr "ジョブ #%s は存在しません!"
+msgstr "      **失敗** %s %s は存在しません!\n"
 
 #: systemv/cupstestppd.c:1053
 #, c-format
 msgid "      **FAIL**  Bad language \"%s\"!\n"
-msgstr ""
+msgstr "      **失敗**  無効な言語 \"%s\" です!\n"
 
 #: systemv/cupstestppd.c:1078
 #, c-format
 msgid "      **FAIL**  Missing \"%s\" translation string for option %s!\n"
-msgstr ""
+msgstr "      **失敗**  \"%s\" 翻訳文字列 (オプション %s 用) がありません!\n"
 
 #: systemv/cupstestppd.c:1098
 #, c-format
@@ -3695,12 +3713,15 @@ msgid ""
 "      **FAIL**  Default translation string for option %s contains 8-bit "
 "characters!\n"
 msgstr ""
+"      **失敗**  オプション %s のデフォルトの翻訳文字列が8ビット文字を含んでい"
+"ます!\n"
 
 #: systemv/cupstestppd.c:1119
 #, c-format
 msgid ""
 "      **FAIL**  Missing \"%s\" translation string for option %s, choice %s!\n"
 msgstr ""
+"      **失敗**  \"%s\" 翻訳文字列 (オプション %s、選択 %s) がありません!\n"
 
 #: systemv/cupstestppd.c:1141
 #, c-format
@@ -3708,75 +3729,72 @@ msgid ""
 "      **FAIL**  Default translation string for option %s choice %s contains "
 "8-bit characters!\n"
 msgstr ""
+"      **失敗**  オプション %s、選択 %s のデフォルトの翻訳文字列が8ビット文字"
+"を含んでいます!\n"
 
 #: systemv/cupstestppd.c:1175
 #, c-format
 msgid "      **FAIL**  Bad cupsFilter value \"%s\"!\n"
-msgstr ""
+msgstr "      **失敗**  \"%s\" は不正な cupsFilter 値です!\n"
 
 #: cgi-bin/help.c:98 cgi-bin/help.c:139 cgi-bin/help.c:149 cgi-bin/help.c:179
 msgid "Help"
-msgstr ""
+msgstr "ヘルプ"
 
 #: cups/adminutil.c:233 cups/adminutil.c:246
-#, fuzzy, c-format
+#, c-format
 msgid "Missing value on line %d!\n"
-msgstr "cupsaddsmb: %d 行に値がありません!\n"
+msgstr "%d 行に値がありません!\n"
 
 #: cups/adminutil.c:249 cups/adminutil.c:265
-#, fuzzy, c-format
+#, c-format
 msgid "Missing double quote on line %d!\n"
-msgstr "cupsaddsmb: %d 行に二重引用符がありません!\n"
+msgstr "%d 行に二重引用符がありません!\n"
 
 #: cups/adminutil.c:266 cups/adminutil.c:284
-#, fuzzy, c-format
+#, c-format
 msgid "Bad option + choice on line %d!\n"
-msgstr "cupsaddsmb: %d 行に不正なオプションと選択があります!\n"
+msgstr "%d 行に不正なオプションと選択があります!\n"
 
 #: cups/adminutil.c:417
-#, fuzzy, c-format
+#, c-format
 msgid "Unable to copy Windows 2000 printer driver files (%d)!\n"
-msgstr "Windows 2000 プリンタドライバファイルをコピーできません!"
+msgstr "Windows 2000 プリンタドライバファイルをコピーできません (%d)!\n"
 
 #: cups/adminutil.c:445
-#, fuzzy, c-format
+#, c-format
 msgid "Unable to copy CUPS printer driver files (%d)!\n"
-msgstr "cupsaddsmb: CUPS プリンタドライバファイルをコピーできません (%d)!\n"
+msgstr "CUPS プリンタドライバファイルをコピーできません (%d)!\n"
 
 #: cups/adminutil.c:480
-#, fuzzy, c-format
+#, c-format
 msgid "Unable to install Windows 2000 printer driver files (%d)!\n"
-msgstr "Windows 2000 プリンタドライバファイルをインストールできません!"
+msgstr "Windows 2000 プリンタドライバファイルをインストールできません (%)!\n"
 
 #: cups/adminutil.c:514
-#, fuzzy, c-format
+#, c-format
 msgid "Unable to copy Windows 9x printer driver files (%d)!\n"
-msgstr "Windows 9x プリンタドライバファイルをコピーできません!"
+msgstr "Windows 9x プリンタドライバファイルをコピーできません (%d)!\n"
 
 #: cups/adminutil.c:536
-#, fuzzy, c-format
+#, c-format
 msgid "Unable to install Windows 9x printer driver files (%d)!\n"
-msgstr "Windows 9x プリンタドライバファイルをインストールできません!"
+msgstr "Windows 9x プリンタドライバファイルをインストールできません (%d)!\n"
 
 #: cups/adminutil.c:547
-#, fuzzy
 msgid "No Windows printer drivers are installed!\n"
-msgstr "cupsaddsmb: Windows プリンタドライバがインストールされていません!\n"
+msgstr "Windows プリンタドライバがインストールされていません!\n"
 
 #: cups/adminutil.c:550
-#, fuzzy
 msgid "Warning, no Windows 2000 printer drivers are installed!\n"
-msgstr ""
-"cupsaddsmb: 警告: Windows 2000 プリンタドライバがインストールされていませ"
-"ん!\n"
+msgstr "警告: Windows 2000 プリンタドライバがインストールされていません!\n"
 
 #: cups/adminutil.c:568 cups/adminutil.c:658
-#, fuzzy, c-format
+#, c-format
 msgid "Unable to set Windows printer driver (%d)!\n"
-msgstr "Windows プリンタドライバを設定できません!"
+msgstr "Windows プリンタドライバを設定できません (%d)!\n"
 
 #: systemv/cupsaddsmb.c:278
-#, fuzzy
 msgid ""
 "Usage: cupsaddsmb [options] printer1 ... printerN\n"
 "       cupsaddsmb [options] -a\n"
@@ -3789,10 +3807,11 @@ msgid ""
 "  -h cups-server   Use the named CUPS server\n"
 "  -v               Be verbose (show commands)\n"
 msgstr ""
-"Usage: cupsaddsmb [オプション] プリンタ1 ... プリンタN\n"
-"       cupsaddsmb [オプション] -a\n"
+"使い方: cupsaddsmb [オプション] プリンタ1 ... プリンタN\n"
+"        cupsaddsmb [オプション] -a\n"
 "\n"
-"Options:\n"
+"オプション:\n"
+"  -E               サーバとの接続を暗号化する\n"
 "  -H sambaサーバ   指定の SAMBA サーバを使う\n"
 "  -U sambaユーザ   指定の SAMBA ユーザ名で認証する\n"
 "  -a               すべてのプリンタをエキスポートする\n"
@@ -3800,53 +3819,64 @@ msgstr ""
 "  -v               冗長にする (コマンドを表示する)\n"
 
 #: cups/adminutil.c:464
-#, fuzzy, c-format
+#, c-format
 msgid "Unable to copy Windows 2000 printer driver files (%d)!"
-msgstr "Windows 2000 プリンタドライバファイルをコピーできません!"
+msgstr "Windows 2000 プリンタドライバファイルをコピーできません (%d)!"
 
 #: cups/adminutil.c:499
-#, fuzzy, c-format
+#, c-format
 msgid "Unable to copy CUPS printer driver files (%d)!"
-msgstr "cupsaddsmb: CUPS プリンタドライバファイルをコピーできません (%d)!\n"
+msgstr "CUPS プリンタドライバファイルをコピーできません (%d)!"
 
 #: cups/adminutil.c:542
-#, fuzzy, c-format
+#, c-format
 msgid "Unable to install Windows 2000 printer driver files (%d)!"
-msgstr "Windows 2000 プリンタドライバファイルをインストールできません!"
+msgstr "Windows 2000 プリンタドライバファイルをインストールできません (%d)!"
 
 #: cups/adminutil.c:583
-#, fuzzy, c-format
+#, c-format
 msgid "Unable to copy Windows 9x printer driver files (%d)!"
-msgstr "Windows 9x プリンタドライバファイルをコピーできません!"
+msgstr "Windows 9x プリンタドライバファイルをコピーできません (%d)!"
 
 #: cups/adminutil.c:612
-#, fuzzy, c-format
+#, c-format
 msgid "Unable to install Windows 9x printer driver files (%d)!"
-msgstr "Windows 9x プリンタドライバファイルをインストールできません!"
+msgstr "Windows 9x プリンタドライバファイルをインストールできません (%d)!"
 
 #: cups/adminutil.c:631
-#, fuzzy
 msgid "No Windows printer drivers are installed!"
-msgstr "cupsaddsmb: Windows プリンタドライバがインストールされていません!\n"
+msgstr "Windows プリンタドライバがインストールされていません!"
 
 #: cups/adminutil.c:636
-#, fuzzy
 msgid "Warning, no Windows 2000 printer drivers are installed!"
-msgstr ""
-"cupsaddsmb: 警告: Windows 2000 プリンタドライバがインストールされていませ"
-"ん!\n"
+msgstr "警告: Windows 2000 プリンタドライバがインストールされていません!"
 
 #: cups/adminutil.c:736
-#, fuzzy, c-format
+#, c-format
 msgid "open of %s failed: %s"
-msgstr "lpadmin: %s 失敗しました: %s\n"
+msgstr "%s のオープンに失敗しました: %s"
 
 #: cups/adminutil.c:1653
-#, fuzzy, c-format
+#, c-format
 msgid "Running command: %s %s -N -A %s -c '%s'\n"
-msgstr "コマンドを実行中: %s %s -N -U '%s%%%s' -c '%s'\n"
+msgstr "コマンドを実行中: %s %s -N -A %s -c '%s'\n"
 
 #: cups/adminutil.c:1750
-#, fuzzy, c-format
+#, c-format
 msgid "stat of %s failed: %s"
-msgstr "%s: %s 失敗しました: %s\n"
+msgstr "%s の状態取得に失敗しました: %s"
+
+#: scheduler/ipp.c:3021
+#, c-format
+msgid "Job #%d is already cancelled - can't cancel."
+msgstr "ジョブ #%d はすでにキャンセルされています - キャンセルできません。"
+
+#: scheduler/ipp.c:3027
+#, c-format
+msgid "Job #%d is already aborted - can't cancel."
+msgstr "ジョブ #%d はすでに停止されています - キャンセルできません。"
+
+#: scheduler/ipp.c:3033
+#, c-format
+msgid "Job #%d is already completed - can't cancel."
+msgstr "ジョブ #%d はすでに完了しています - キャンセルできません。"
index 25e8fab3d5c96e8a8191cc225d7e46eb1f3bbd58..e55890828daf3ddbb32b3edd44782729f517e489 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: translate.c 5023 2006-01-29 14:39:44Z mike $"
+ * "$Id: translate.c 5261 2006-03-09 20:47:49Z mike $"
  *
  *   HTTP-based translation program for the Common UNIX Printing System (CUPS).
  *
  *
  * Contents:
  *
+ *   main()               - Main entry.
+ *   save_messages()      - Save messages to a .po file.
+ *   translate_messages() - Translate messages using Google.
+ *   write_string()       - Write a quoted string to a file.
  */
 
 /*
@@ -237,7 +241,7 @@ translate_messages(cups_array_t *cat,       /* I - Message catalog */
     *bufptr++ = '&';
     *bufptr = '\0';
 
-    sprintf(length, "%d", bufptr - buffer);
+    sprintf(length, "%d", (int)(bufptr - buffer));
 
    /*
     * Send the request...
@@ -444,5 +448,5 @@ write_string(cups_file_t *fp,               /* I - File to write to */
 
 
 /*
- * End of "$Id: translate.c 5023 2006-01-29 14:39:44Z mike $".
+ * End of "$Id: translate.c 5261 2006-03-09 20:47:49Z mike $".
  */
index 25a6e6f4658f0bca9177230518fc2178f9281a34..796a46f56fc5ba8bf12d5251eb797c4ebecab239 100644 (file)
@@ -1,5 +1,5 @@
 .\"
-.\" "$Id: backend.man 5099 2006-02-13 02:46:10Z mike $"
+.\" "$Id: backend.man 5313 2006-03-20 15:29:09Z mike $"
 .\"
 .\"   Backend man page for the Common UNIX Printing System (CUPS).
 .\"
@@ -21,7 +21,7 @@
 .\"       EMail: cups-info@cups.org
 .\"         WWW: http://www.cups.org
 .\"
-.TH backend 7 "Common UNIX Printing System" "11 February 2006" "Easy Software Products"
+.TH backend 7 "Common UNIX Printing System" "20 March 2006" "Easy Software Products"
 
 .SH NAME
 backend \- cups backend transmission interfaces
@@ -122,7 +122,7 @@ driver.
 
 .SH PERMISSIONS
 Backends without world execute permissions are run as the root
-user. Otherwise, the backend is run using the unpriviledged user
+user. Otherwise, the backend is run using the unprivileged user
 account, typically "lp".
 
 .SH EXIT CODES
@@ -184,5 +184,5 @@ http://localhost:631/help
 .SH COPYRIGHT
 Copyright 1997-2006 by Easy Software Products, All Rights Reserved.
 .\"
-.\" End of "$Id: backend.man 5099 2006-02-13 02:46:10Z mike $".
+.\" End of "$Id: backend.man 5313 2006-03-20 15:29:09Z mike $".
 .\"
index 76cf353b6ba96ace080c32d27932a171feea89a5..8bb0fc42d2b07dd6fbd2ed9a879662276390cce3 100644 (file)
@@ -21,7 +21,7 @@
 .\"       EMail: cups-info@cups.org
 .\"         WWW: http://www.cups.org
 .\"
-.TH cancel 1 "Common UNIX Printing System" "12 February 2006" "Easy Software Products"
+.TH cancel 1 "Common UNIX Printing System" "20 March 2006" "Easy Software Products"
 .SH NAME
 cancel - cancel jobs
 .SH SYNOPSIS
@@ -43,7 +43,7 @@ cancel - cancel jobs
 \fIcancel\fR cancels existing print jobs. The \fI-a\fR option will remove
 all jobs from the specified destination.
 .SH OPTIONS
-The following options are recognized by \fIlp\fR:
+The following options are recognized by \fIcancel\fR:
 .TP 5
 -E
 .br
index e16e75eaa7ee73833a723b0d4070567fd423c296..7529f2d9b4bdb638cc49dbd1d01d2db9cb3ec5bd 100644 (file)
@@ -1,5 +1,5 @@
 .\"
-.\" "$Id: cups-lpd.man.in 5099 2006-02-13 02:46:10Z mike $"
+.\" "$Id: cups-lpd.man.in 5279 2006-03-11 13:40:45Z mike $"
 .\"
 .\"   cups-lpd man page for the Common UNIX Printing System (CUPS).
 .\"
@@ -21,7 +21,7 @@
 .\"       EMail: cups-info@cups.org
 .\"         WWW: http://www.cups.org
 .\"
-.TH cups-lpd 8 "Common UNIX Printing System" "12 Febrary 2006" "Easy Software Products"
+.TH cups-lpd 8 "Common UNIX Printing System" "11 March 2006" "Easy Software Products"
 .SH NAME
 cups-lpd \- receive print jobs and report printer status to lpd clients
 .SH SYNOPSIS
@@ -44,6 +44,11 @@ add the following line to the \fIinetd.conf\fR file to enable the
         -o document-format=application/octet-stream
 .fi
 .LP
+.LP
+\fBNote:\fR If you are using Solaris 10 or higher, you must run
+the \fIinetdconv(1m)\fR program to register the changes to the
+inetd.conf file.
+.LP
 If you are using the newer \fIxinetd(8)\fR daemon, create a file
 named \fI/etc/xinetd.d/cups\fR containing the following lines:
 .br
@@ -105,11 +110,12 @@ between LPD and IPP Protocols. Since many LPD implementations
 stray from this definition, remote status reporting to LPD
 clients may be unreliable.
 .SH SEE ALSO
-\fIcups(1)\fR, \fIcupsd(8)\fR, \fIinetd(8)\fR, \fIxinetd(8)\fR,
+\fIcups(1)\fR, \fIcupsd(8)\fR, \fIinetconv(1m)\fR,
+\fIinetd(8)\fR, \fIxinetd(8)\fR,
 .br
 http://localhost:631/help
 .SH COPYRIGHT
 Copyright 1997-2006 by Easy Software Products, All Rights Reserved.
 .\"
-.\" End of "$Id: cups-lpd.man.in 5099 2006-02-13 02:46:10Z mike $".
+.\" End of "$Id: cups-lpd.man.in 5279 2006-03-11 13:40:45Z mike $".
 .\"
index 1f6f3f0e02bf2bff75d4435390aba41ef272b1b1..6b88e737c94f26afa1676e7a6abb2d4581bb0a60 100644 (file)
@@ -1,5 +1,5 @@
 .\"
-.\" "$Id: lpoptions.man.in 5182 2006-02-26 04:10:27Z mike $"
+.\" "$Id: lpoptions.man.in 5313 2006-03-20 15:29:09Z mike $"
 .\"
 .\"   lpoptions man page for the Common UNIX Printing System (CUPS).
 .\"
@@ -21,7 +21,7 @@
 .\"       EMail: cups-info@cups.org
 .\"         WWW: http://www.cups.org
 .\"
-.TH lpoptions 1 "Common UNIX Printing System" "12 February 2006" "Easy Software Products"
+.TH lpoptions 1 "Common UNIX Printing System" "20 March 2006" "Easy Software Products"
 .SH NAME
 lpoptions \- display or set printer options and defaults
 .SH SYNOPSIS
@@ -124,7 +124,7 @@ Options set with the \fIlpoptions\fR command are used by the
 .SH ROOT ACCOUNT OPTIONS
 When run by the root user, \fIlpoptions\fR gets and sets default
 options and instances for \fIall users\fR in the
-/etc/cups/lpoptions file.
+@CUPS_SERVERROOT@/lpoptions file.
 .SH COMPATIBILITY
 The \fIlpoptions\fR command is unique to CUPS.
 .SH FILES
@@ -140,5 +140,5 @@ http://localhost:631/help
 .SH COPYRIGHT
 Copyright 1997-2006 by Easy Software Products, All Rights Reserved.
 .\"
-.\" End of "$Id: lpoptions.man.in 5182 2006-02-26 04:10:27Z mike $".
+.\" End of "$Id: lpoptions.man.in 5313 2006-03-20 15:29:09Z mike $".
 .\"
index 319631ddd3634881a5e0762cecd33739828340cb..f1d8c79c5b7f60488c41b9758b874e7a5cbd6de7 100644 (file)
@@ -1,5 +1,5 @@
 .\"
-.\" "$Id: lppasswd.man 5099 2006-02-13 02:46:10Z mike $"
+.\" "$Id: lppasswd.man 5313 2006-03-20 15:29:09Z mike $"
 .\"
 .\"   lpadmin man page for the Common UNIX Printing System (CUPS).
 .\"
@@ -21,7 +21,7 @@
 .\"       EMail: cups-info@cups.org
 .\"         WWW: http://www.cups.org
 .\"
-.TH lppasswd 1 "Common UNIX Printing System" "12 February 2006" "Easy Software Products"
+.TH lppasswd 1 "Common UNIX Printing System" "20 March 2006" "Easy Software Products"
 .SH NAME
 lppasswd \- add, change, or delete digest passwords.
 .SH SYNOPSIS
@@ -56,7 +56,7 @@ Specifies a group other than the default system group.
 .SH SECURITY ISSUES
 The \fIlppasswd\fR command is installed setuid to root. While
 every attempt has been made to make it secure against exploits
-that could grant super-user priviledges to unprivileged users,
+that could grant super-user privileges to unprivileged users,
 paranoid system administrators may wish to disable or change the
 ownership of the program to an unprivileged account.
 .SH SEE ALSO
@@ -66,5 +66,5 @@ http://localhost:631/help
 .SH COPYRIGHT
 Copyright 1997-2006 by Easy Software Products, All Rights Reserved.
 .\"
-.\" End of "$Id: lppasswd.man 5099 2006-02-13 02:46:10Z mike $".
+.\" End of "$Id: lppasswd.man 5313 2006-03-20 15:29:09Z mike $".
 .\"
index e90071255c1d7d80e0ddab5f224f408ba9e2f03a..37e765cb108e42759ceeab35bcf9cbdc0d0c12c4 100644 (file)
@@ -1,5 +1,5 @@
 .\"
-.\" "$Id: mime.convs.man 5099 2006-02-13 02:46:10Z mike $"
+.\" "$Id: mime.convs.man 5313 2006-03-20 15:29:09Z mike $"
 .\"
 .\"   mime.convs man page for the Common UNIX Printing System (CUPS).
 .\"
@@ -21,7 +21,7 @@
 .\"       EMail: cups-info@cups.org
 .\"         WWW: http://www.cups.org
 .\"
-.TH mime.convs 5 "Common UNIX Printing System" "12 February 2006" "Easy Software Products"
+.TH mime.convs 5 "Common UNIX Printing System" "20 March 2006" "Easy Software Products"
 .SH NAME
 mime.convs \- mime type conversion file for cups
 .SH DESCRIPTION
@@ -33,7 +33,7 @@ image files.
 Additional filters can be added to the \fImime.convs\fR file or
 (preferably) to other files in the CUPS configuration directory.
 .LP
-Each line in the \fImime.types\fR file is a comment, blank, or filter
+Each line in the \fImime.convs\fR file is a comment, blank, or filter
 line. Comment lines start with the # character. Filter lines specify
 the source and destination MIME types along with a relative cost
 associated with the filter and the filter to run:
@@ -51,5 +51,5 @@ http://localhost:631/help
 .SH COPYRIGHT
 Copyright 1997-2006 by Easy Software Products, All Rights Reserved.
 .\"
-.\" End of "$Id: mime.convs.man 5099 2006-02-13 02:46:10Z mike $".
+.\" End of "$Id: mime.convs.man 5313 2006-03-20 15:29:09Z mike $".
 .\"
index aa5fa5fa1f1debc258d4daa089791e08cf842800..a949db828f698416bd602c90951146e33551faf3 100644 (file)
@@ -4,7 +4,7 @@
 \margl1440\margr1440\vieww9000\viewh8400\viewkind0
 \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural\pardirnatural
 
-\f0\fs24 \cf0 This program installs a pre-release version of CUPS 1.2 and replaces the CUPS 1.1.x software that is included with MacOS X.\
+\f0\fs24 \cf0 This program will install CUPS @CUPS_VERSION@, replacing the CUPS 1.1.x software that is included with MacOS X.\
 \
 
 \f1\b WARNING\
@@ -21,4 +21,4 @@ Please report all problems using the Bugs & Features page on the CUPS home page:
 
 \f0\b0 \
 CUPS is provided under the terms of the GNU General Public License and GNU Library General Public License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\
-}
\ No newline at end of file
+}
index a26298856ac794639004b8469a1d0673eec114d1..042df0bbc4a3702a99c539e77cbeae7254d0b4db 100644 (file)
@@ -1,5 +1,5 @@
 #
-# "$Id: cups.list.in 5224 2006-03-04 02:00:43Z mike $"
+# "$Id: cups.list.in 5311 2006-03-19 13:21:42Z mike $"
 #
 #   ESP Package Manager (EPM) file list for the Common UNIX Printing
 #   System (CUPS).
@@ -97,6 +97,9 @@
 %provides cups-lpd 1:@CUPS_VERSION@
 %format all
 
+%subpackage es
+%description Common UNIX Printing System - Spanish support
+
 %subpackage ja
 %description Common UNIX Printing System - Japanese support
 
@@ -148,6 +151,12 @@ $SERVERBIN=@CUPS_SERVERBIN@
 $SERVERROOT=@CUPS_SERVERROOT@
 $STATEDIR=@CUPS_STATEDIR@
 
+$LIB32DIR=@LIB32DIR@
+$LIB64DIR=@LIB64DIR@
+
+$IMGFILTERS=@IMGFILTERS@
+$PDFTOPS=@PDFTOPS@
+
 $CUPS_USER=@CUPS_USER@
 $CUPS_GROUP=@CUPS_GROUP@
 $CUPS_PRIMARY_SYSTEM_GROUP=@CUPS_PRIMARY_SYSTEM_GROUP@
@@ -201,9 +210,13 @@ d 0755 root sys $SERVERBIN/driver -
 d 0755 root sys $SERVERBIN/filter -
 f 0755 root sys $SERVERBIN/filter/gziptoany filter/gziptoany
 f 0755 root sys $SERVERBIN/filter/hpgltops filter/hpgltops
+%if $IMGFILTERS
 f 0755 root sys $SERVERBIN/filter/imagetops filter/imagetops
 f 0755 root sys $SERVERBIN/filter/imagetoraster filter/imagetoraster
+%endif
+%if $PDFTOPS
 f 0755 root sys $SERVERBIN/filter/pdftops pdftops/pdftops
+%endif
 f 0755 root sys $SERVERBIN/filter/pstops filter/pstops
 f 0755 root sys $SERVERBIN/filter/rastertolabel filter/rastertolabel
 l 0755 root sys $SERVERBIN/filter/rastertodymo rastertolabel
@@ -284,6 +297,26 @@ l 0755 root sys $LIBDIR/libcupsimage.so libcupsimage.so.2
 %subpackage
 %endif
 
+%if LIB32DIR
+%subpackage libs
+f 0755 root sys $LIB32DIR/libcups.so.2 cups/libcups.32.so.2
+l 0755 root sys $LIB32DIR/libcups.so libcups.so.2
+f 0755 root sys $LIB32DIR/libcupsimage.so.2 filter/libcupsimage.32.so.2
+l 0755 root sys $LIB32DIR/libcupsimage.so libcupsimage.so.2
+%system all
+%subpackage
+%endif
+
+%if LIB64DIR
+%subpackage libs
+f 0755 root sys $LIB64DIR/libcups.so.2 cups/libcups.64.so.2
+l 0755 root sys $LIB64DIR/libcups.so libcups.so.2
+f 0755 root sys $LIB64DIR/libcupsimage.so.2 filter/libcupsimage.64.so.2
+l 0755 root sys $LIB64DIR/libcupsimage.so libcupsimage.so.2
+%system all
+%subpackage
+%endif
+
 # Directories
 d 0755 root sys $LOGDIR -
 d 0710 root $CUPS_GROUP $REQUESTS -
@@ -294,6 +327,8 @@ d 0755 root $CUPS_GROUP $STATEDIR -
 d 0511 root $CUPS_PRIMARY_SYSTEM_GROUP $STATEDIR/certs -
 
 # Data files
+%subpackage es
+f 0644 root sys $LOCALEDIR/es/cups_es.po locale/cups_es.po
 %subpackage ja
 f 0644 root sys $LOCALEDIR/ja/cups_ja.po locale/cups_ja.po
 %subpackage
@@ -351,6 +386,9 @@ d 0755 root sys $DATADIR/templates -
 c 0644 root sys $DATADIR/templates templates/*.tmpl
 
 # Japanese template files
+%subpackage es
+d 0755 root sys $DATADIR/templates/es
+f 0644 root sys $DATADIR/templates/es templates/es/*.tmpl
 %subpackage ja
 d 0755 root sys $DATADIR/templates/ja
 f 0644 root sys $DATADIR/templates/ja templates/ja/*.tmpl
@@ -413,7 +451,12 @@ f 0644 root sys $DOCDIR/images doc/images/*.gif
 f 0644 root sys $DOCDIR/images doc/images/*.png
 f 0644 root sys $DOCDIR/robots.txt doc/robots.txt
 
-# Japanese documentation files
+# Localized documentation files
+%subpackage es
+d 0755 root sys $DOCDIR/es
+f 0644 root sys $DOCDIR/es doc/es/*.html
+d 0755 root sys $DOCDIR/es/images -
+f 0644 root sys $DOCDIR/es/images doc/es/images/*.gif
 %subpackage ja
 d 0755 root sys $DOCDIR/ja
 f 0644 root sys $DOCDIR/ja doc/ja/*.html
@@ -473,5 +516,5 @@ f 0644 root sys $AMANDIR/man$MAN8DIR/cups-lpd.$MAN8EXT man/cups-lpd.$MAN8EXT
 i 0755 root sys cups init/cups.sh
 
 #
-# End of "$Id: cups.list.in 5224 2006-03-04 02:00:43Z mike $".
+# End of "$Id: cups.list.in 5311 2006-03-19 13:21:42Z mike $".
 #
index 2516be253624db1253d61a6462e14e7db8e422be..aaa63561ea9294eb98aa1cb9872b4fe14d2f237b 100644 (file)
@@ -1,5 +1,5 @@
 #
-# "$Id: cups.spec.in 5224 2006-03-04 02:00:43Z mike $"
+# "$Id: cups.spec.in 5310 2006-03-19 03:23:34Z mike $"
 #
 #   RPM "spec" file for the Common UNIX Printing System (CUPS).
 #
@@ -34,6 +34,8 @@
 %{!?_with_dbus: %define _dbus --disable-dbus}
 
 %{!?_with_php: %{!?_without_php: %define _with_php --with-php}}
+%{?_with_php: %define _php --with-php}
+%{!?_with_php: %define _php --without-php}
 
 Summary: Common UNIX Printing System
 Name: cups
@@ -70,6 +72,11 @@ Summary: Common UNIX Printing System - LPD support
 Group: System Environment/Daemons
 Requires: %{name} = %{epoch}:%{version} xinetd
 
+%package es
+Summary: Common UNIX Printing System - Spanish support
+Group: System Environment/Daemons
+Requires: %{name} = %{epoch}:%{version}
+
 %package ja
 Summary: Common UNIX Printing System - Japanese support
 Group: System Environment/Daemons
@@ -101,6 +108,10 @@ UNIX
 The Common UNIX Printing System provides a portable printing layer for 
 UNIX® operating systems. This package provides LPD client support.
 
+%description es
+The Common UNIX Printing System provides a portable printing layer for 
+UNIX® operating systems. This package provides Spanish support.
+
 %description ja
 The Common UNIX Printing System provides a portable printing layer for 
 UNIX® operating systems. This package provides Japanese support.
@@ -115,8 +126,12 @@ UNIX
 %setup
 
 %build
-CFLAGS="$RPM_OPT_FLAGS" CXXFLAGS="$RPM_OPT_FLAGS" LDFLAGS="$RPM_OPT_FLAGS" ./configure %{_dbus} %{_without_php}
-
+%ifarch x86_64
+./configure --enable-32bit %{_dbus} %{_php}
+%else
+CFLAGS="$RPM_OPT_FLAGS" CXXFLAGS="$RPM_OPT_FLAGS" LDFLAGS="$RPM_OPT_FLAGS" \
+    ./configure %{_dbus} %{_php}
+%endif
 # If we got this far, all prerequisite libraries must be here.
 make
 
@@ -281,6 +296,10 @@ rm -rf $RPM_BUILD_ROOT
 %attr(0710,lp,sys) %dir /var/spool/cups
 %attr(1770,lp,sys) %dir /var/spool/cups/tmp
 
+# Desktop files
+/usr/share/applications/*
+/usr/share/icons/*
+
 %files devel
 %defattr(-,root,root)
 %dir /usr/share/man/man1
@@ -292,7 +311,7 @@ rm -rf $RPM_BUILD_ROOT
 %dir /usr/include/cups
 /usr/include/cups/*
 #/usr/lib/*.a
-/usr/lib/*.so
+/usr/lib*/*.so
 
 %dir /usr/share/doc/cups/help
 /usr/share/doc/cups/help/api*.html
@@ -300,17 +319,27 @@ rm -rf $RPM_BUILD_ROOT
 
 %files libs
 %defattr(-,root,root)
-/usr/lib/*.so.*
+/usr/lib*/*.so.*
 
 %files lpd
 %defattr(-,root,root)
-#/etc/xinetd.d/cups-lpd
+/etc/xinetd.d/cups-lpd
 %dir /usr/lib/cups
 %dir /usr/lib/cups/daemon
 /usr/lib/cups/daemon/cups-lpd
 %dir /usr/share/man/man8
 /usr/share/man/man8/cups-lpd.8.gz
 
+%files es
+%defattr(-,root,root)
+%dir /usr/share/doc/cups/es
+/usr/share/doc/cups/es/index.html
+%dir /usr/share/doc/cups/es/images
+/usr/share/doc/cups/es/images/*
+%dir /usr/share/cups/templates/es
+/usr/share/cups/templates/es/*
+/usr/share/locale/es/cups_es.po
+
 %files ja
 %defattr(-,root,root)
 %dir /usr/share/doc/cups/ja
@@ -324,10 +353,10 @@ rm -rf $RPM_BUILD_ROOT
 %if %{?_with_php:1}%{!?_with_php:0}
 %files php
 # PHP
-/usr/lib/php*
+/usr/lib*/php*
 %endif
 
 
 #
-# End of "$Id: cups.spec.in 5224 2006-03-04 02:00:43Z mike $".
+# End of "$Id: cups.spec.in 5310 2006-03-19 03:23:34Z mike $".
 #
index 6cebc50f9b3fdfccc19c482cb75d4d7774e59c9d..6af0d3c46ccfff3f2f23d01d4e9bb2f9f90d202e 100644 (file)
 *ImageableArea w144h90/Label - 2 x 1.25": "0 0 144 90"
 *ImageableArea w144h144/Label - 2 x 2": "0 0 144 144"
 *ImageableArea w144h216/Label - 2 x 3": "0 0 144 216"
-*ImageableArea w209h72/Label - 2.9 x 1": "0 0 209 72>>"
-*ImageableArea w288h144/Label - 4 x 2": "0 0 288 144"
-*ImageableArea w288h216/Label - 4 x 3": "0 0 288 216"
-*ImageableArea w288h288/Label - 4 x 4": "0 0 288 288"
-*ImageableArea w288h360/Label - 4 x 5": "0 0 288 360"
-*ImageableArea w288h360/Label - 4 x 5": "0 0 288 360"
-*ImageableArea w288h432/Label - 4 x 6": "0 0 288 432"
+*ImageableArea w209h72/Label - 2.9 x 1": "0 0 209 72"
+*ImageableArea w288h144/Label - 4 x 2": "0 0 280.8 144"
+*ImageableArea w288h216/Label - 4 x 3": "0 0 280.8 216"
+*ImageableArea w288h288/Label - 4 x 4": "0 0 280.8 288"
+*ImageableArea w288h360/Label - 4 x 5": "0 0 280.8 360"
+*ImageableArea w288h360/Label - 4 x 5": "0 0 280.8 360"
+*ImageableArea w288h432/Label - 4 x 6": "0 0 280.8 432"
 
 *DefaultPaperDimension: w288h360
 *PaperDimension w144h72/Label - 2 x 1": "144 72"
 *PaperDimension w144h90/Label - 2 x 1.25": "144 90"
 *PaperDimension w144h144/Label - 2 x 2": "144 144"
 *PaperDimension w144h216/Label - 2 x 3": "144 216"
-*PaperDimension w209h72/Label - 2.9 x 1": "209 72>>"
+*PaperDimension w209h72/Label - 2.9 x 1": "209 72"
 *PaperDimension w288h144/Label - 4 x 2": "288 144"
 *PaperDimension w288h216/Label - 4 x 3": "288 216"
 *PaperDimension w288h288/Label - 4 x 4": "288 288"
index 83aa9c113f4d3f3379ef58791aaa1fd51b1ac3ad..e8f24e15c34e164c815b4dcf72c769e70ad4843b 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: auth.c 5232 2006-03-05 17:59:19Z mike $"
+ * "$Id: auth.c 5305 2006-03-18 03:05:12Z mike $"
  *
  *   Authorization routines for the Common UNIX Printing System (CUPS).
  *
  *   cupsdFindBest()           - Find the location entry that best matches the
  *                               resource.
  *   cupsdFindLocation()       - Find the named location.
- *   cupsdGetMD5Passwd()       - Get an MD5 password.
  *   cupsdIsAuthorized()       - Check to see if the user is authorized...
  *   add_allow()               - Add an allow mask to the location.
  *   add_deny()                - Add a deny mask to the location.
  *   compare_locations()       - Compare two locations.
  *   cups_crypt()              - Encrypt the password using the DES or MD5
  *                               algorithms, as needed.
+ *   get_md5_password()        - Get an MD5 password.
  *   pam_func()                - PAM conversation function.
  *   to64()                    - Base64-encode an integer value...
  */
@@ -90,6 +90,8 @@ static int            compare_locations(cupsd_location_t *a,
 #if !HAVE_LIBPAM
 static char            *cups_crypt(const char *pw, const char *salt);
 #endif /* !HAVE_LIBPAM */
+static char            *get_md5_password(const char *username,
+                                         const char *group, char passwd[33]);
 #if HAVE_LIBPAM
 static int             pam_func(int, const struct pam_message **,
                                 struct pam_response **, void *);
@@ -189,7 +191,7 @@ cupsdAddName(cupsd_location_t *loc, /* I - Location to add to */
   if (temp == NULL)
   {
     cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to add name to location %s: %s",
-                    loc->location, strerror(errno));
+                    loc->location ? loc->location : "nil", strerror(errno));
     return;
   }
 
@@ -199,7 +201,7 @@ cupsdAddName(cupsd_location_t *loc, /* I - Location to add to */
   {
     cupsdLogMessage(CUPSD_LOG_ERROR,
                     "Unable to duplicate name for location %s: %s",
-                    loc->location, strerror(errno));
+                    loc->location ? loc->location : "nil", strerror(errno));
     return;
   }
 
@@ -221,7 +223,7 @@ cupsdAllowHost(cupsd_location_t *loc,       /* I - Location to add to */
 
 
   cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdAllowHost(loc=%p(%s), name=\"%s\")",
-                  loc, loc->location, name);
+                  loc, loc->location ? loc->location : "nil", name);
 
   if ((temp = add_allow(loc)) == NULL)
     return;
@@ -284,9 +286,9 @@ cupsdAllowIP(cupsd_location_t *loc, /* I - Location to add to */
 
   cupsdLogMessage(CUPSD_LOG_DEBUG2,
                   "cupsdAllowIP(loc=%p(%s), address=%x:%x:%x:%x, netmask=%x:%x:%x:%x)",
-                 loc, loc->location, address[0], address[1], address[2],
-                 address[3], netmask[0], netmask[1], netmask[2],
-                 netmask[3]);
+                 loc, loc->location ? loc->location : "nil",
+                 address[0], address[1], address[2], address[3],
+                 netmask[0], netmask[1], netmask[2], netmask[3]);
 
   if ((temp = add_allow(loc)) == NULL)
     return;
@@ -478,7 +480,13 @@ cupsdAuthorize(cupsd_client_t *con)        /* I - Client connection */
             strlcpy(data.username, username, sizeof(data.username));
            strlcpy(data.password, password, sizeof(data.password));
 
+#  ifdef __sun
+           pamdata.conv        = (int (*)(int, struct pam_message **,
+                                          struct pam_response **,
+                                          void *))pam_func;
+#  else
            pamdata.conv        = pam_func;
+#  endif /* __sun */
            pamdata.appdata_ptr = &data;
 
 #  ifdef __hpux
@@ -656,7 +664,7 @@ cupsdAuthorize(cupsd_client_t *con) /* I - Client connection */
          * Do Basic authentication with the Digest password file...
          */
 
-         if (!cupsdGetMD5Passwd(username, NULL, md5))
+         if (!get_md5_password(username, NULL, md5))
          {
             cupsdLogMessage(CUPSD_LOG_ERROR,
                            "cupsdAuthorize: Unknown MD5 username \"%s\"!",
@@ -727,7 +735,7 @@ cupsdAuthorize(cupsd_client_t *con) /* I - Client connection */
     * Validate the username and password...
     */
 
-    if (!cupsdGetMD5Passwd(username, NULL, md5))
+    if (!get_md5_password(username, NULL, md5))
     {
       cupsdLogMessage(CUPSD_LOG_ERROR,
                      "cupsdAuthorize: Unknown MD5 username \"%s\"!",
@@ -1012,7 +1020,7 @@ cupsdCheckGroup(
   * file...
   */
 
-  if (cupsdGetMD5Passwd(username, groupname, junk) != NULL)
+  if (get_md5_password(username, groupname, junk) != NULL)
     return (1);
 
  /*
@@ -1248,7 +1256,7 @@ cupsdDenyHost(cupsd_location_t *loc,      /* I - Location to add to */
 
 
   cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdDenyHost(loc=%p(%s), name=\"%s\")",
-                  loc, loc->location, name);
+                  loc, loc->location ? loc->location : "nil", name);
 
   if ((temp = add_deny(loc)) == NULL)
     return;
@@ -1311,9 +1319,9 @@ cupsdDenyIP(cupsd_location_t *loc,        /* I - Location to add to */
 
   cupsdLogMessage(CUPSD_LOG_DEBUG,
                   "cupsdDenyIP(loc=%p(%s), address=%x:%x:%x:%x, netmask=%x:%x:%x:%x)",
-                 loc, loc->location, address[0], address[1], address[2],
-                 address[3], netmask[0], netmask[1], netmask[2],
-                 netmask[3]);
+                 loc, loc->location ? loc->location : "nil",
+                 address[0], address[1], address[2], address[3],
+                 netmask[0], netmask[1], netmask[2], netmask[3]);
 
   if ((temp = add_deny(loc)) == NULL)
     return;
@@ -1394,7 +1402,7 @@ cupsdFindBest(const char   *path, /* I - Resource path */
        loc = (cupsd_location_t *)cupsArrayNext(Locations))
   {
     cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdFindBest: Location %s Limit %x",
-                    loc->location, loc->limit);
+                    loc->location ? loc->location : "nil", loc->limit);
 
     if (!strncmp(uri, "/printers/", 10) || !strncmp(uri, "/classes/", 9))
     {
@@ -1402,7 +1410,7 @@ cupsdFindBest(const char   *path, /* I - Resource path */
       * Use case-insensitive comparison for queue names...
       */
 
-      if (loc->length > bestlen &&
+      if (loc->length > bestlen && loc->location &&
           !strncasecmp(uri, loc->location, loc->length) &&
          loc->location[0] == '/' &&
          (limit & loc->limit) != 0)
@@ -1417,7 +1425,7 @@ cupsdFindBest(const char   *path, /* I - Resource path */
       * Use case-sensitive comparison for other URIs...
       */
 
-      if (loc->length > bestlen &&
+      if (loc->length > bestlen && loc->location &&
           !strncmp(uri, loc->location, loc->length) &&
          loc->location[0] == '/' &&
          (limit & loc->limit) != 0)
@@ -1455,68 +1463,6 @@ cupsdFindLocation(const char *location)  /* I - Connection */
 }
 
 
-/*
- * 'cupsdGetMD5Passwd()' - Get an MD5 password.
- */
-
-char *                                 /* O - MD5 password string */
-cupsdGetMD5Passwd(const char *username,        /* I - Username */
-                  const char *group,   /* I - Group */
-                  char       passwd[33])/* O - MD5 password string */
-{
-  cups_file_t  *fp;                    /* passwd.md5 file */
-  char         filename[1024],         /* passwd.md5 filename */
-               line[256],              /* Line from file */
-               tempuser[33],           /* User from file */
-               tempgroup[33];          /* Group from file */
-
-
-  cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                  "cupsdGetMD5Passwd(username=\"%s\", group=\"%s\", passwd=%p)",
-                  username, group ? group : "(null)", passwd);
-
-  snprintf(filename, sizeof(filename), "%s/passwd.md5", ServerRoot);
-  if ((fp = cupsFileOpen(filename, "r")) == NULL)
-  {
-    if (errno != ENOENT)
-      cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to open %s - %s", filename,
-                      strerror(errno));
-
-    return (NULL);
-  }
-
-  while (cupsFileGets(fp, line, sizeof(line)) != NULL)
-  {
-    if (sscanf(line, "%32[^:]:%32[^:]:%32s", tempuser, tempgroup, passwd) != 3)
-    {
-      cupsdLogMessage(CUPSD_LOG_ERROR, "Bad MD5 password line: %s", line);
-      continue;
-    }
-
-    if (!strcmp(username, tempuser) &&
-        (group == NULL || !strcmp(group, tempgroup)))
-    {
-     /*
-      * Found the password entry!
-      */
-
-      cupsdLogMessage(CUPSD_LOG_DEBUG2, "Found MD5 user %s, group %s...",
-                      username, tempgroup);
-
-      cupsFileClose(fp);
-      return (passwd);
-    }
-  }
-
- /*
-  * Didn't find a password entry - return NULL!
-  */
-
-  cupsFileClose(fp);
-  return (NULL);
-}
-
-
 /*
  * 'cupsdIsAuthorized()' - Check to see if the user is authorized...
  */
@@ -2041,6 +1987,68 @@ cups_crypt(const char *pw,               /* I - Password string */
 #endif /* !HAVE_LIBPAM */
 
 
+/*
+ * 'get_md5_password()' - Get an MD5 password.
+ */
+
+static char *                          /* O - MD5 password string */
+get_md5_password(const char *username, /* I - Username */
+                 const char *group,    /* I - Group */
+                 char       passwd[33])        /* O - MD5 password string */
+{
+  cups_file_t  *fp;                    /* passwd.md5 file */
+  char         filename[1024],         /* passwd.md5 filename */
+               line[256],              /* Line from file */
+               tempuser[33],           /* User from file */
+               tempgroup[33];          /* Group from file */
+
+
+  cupsdLogMessage(CUPSD_LOG_DEBUG2,
+                  "get_md5_password(username=\"%s\", group=\"%s\", passwd=%p)",
+                  username, group ? group : "(null)", passwd);
+
+  snprintf(filename, sizeof(filename), "%s/passwd.md5", ServerRoot);
+  if ((fp = cupsFileOpen(filename, "r")) == NULL)
+  {
+    if (errno != ENOENT)
+      cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to open %s - %s", filename,
+                      strerror(errno));
+
+    return (NULL);
+  }
+
+  while (cupsFileGets(fp, line, sizeof(line)) != NULL)
+  {
+    if (sscanf(line, "%32[^:]:%32[^:]:%32s", tempuser, tempgroup, passwd) != 3)
+    {
+      cupsdLogMessage(CUPSD_LOG_ERROR, "Bad MD5 password line: %s", line);
+      continue;
+    }
+
+    if (!strcmp(username, tempuser) &&
+        (group == NULL || !strcmp(group, tempgroup)))
+    {
+     /*
+      * Found the password entry!
+      */
+
+      cupsdLogMessage(CUPSD_LOG_DEBUG2, "Found MD5 user %s, group %s...",
+                      username, tempgroup);
+
+      cupsFileClose(fp);
+      return (passwd);
+    }
+  }
+
+ /*
+  * Didn't find a password entry - return NULL!
+  */
+
+  cupsFileClose(fp);
+  return (NULL);
+}
+
+
 #if HAVE_LIBPAM
 /*
  * 'pam_func()' - PAM conversation function.
@@ -2156,5 +2164,5 @@ to64(char          *s,                    /* O - Output string */
 
 
 /*
- * End of "$Id: auth.c 5232 2006-03-05 17:59:19Z mike $".
+ * End of "$Id: auth.c 5305 2006-03-18 03:05:12Z mike $".
  */
index e18f8defa6a972fcd24d9119f77703fa94600f25..87bd72cd986e49cf104712b375fa6c512e525239 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: auth.h 5222 2006-03-03 18:57:56Z mike $"
+ * "$Id: auth.h 5305 2006-03-18 03:05:12Z mike $"
  *
  *   Authorization definitions for the Common UNIX Printing System (CUPS)
  *   scheduler.
@@ -154,11 +154,9 @@ extern void                cupsdDenyIP(cupsd_location_t *loc, unsigned address[4],
                                    unsigned netmask[4]);
 extern cupsd_location_t        *cupsdFindBest(const char *path, http_state_t state);
 extern cupsd_location_t        *cupsdFindLocation(const char *location);
-extern char            *cupsdGetMD5Passwd(const char *username, const char *group,
-                                          char passwd[33]);
 extern http_status_t   cupsdIsAuthorized(cupsd_client_t *con, const char *owner);
 
 
 /*
- * End of "$Id: auth.h 5222 2006-03-03 18:57:56Z mike $".
+ * End of "$Id: auth.h 5305 2006-03-18 03:05:12Z mike $".
  */
index 5ce485673efbd9c2965b7f0a91551039a39d4e85..d83540c873a76cd7e338a77d190d3b88fd660cb7 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: banners.c 5062 2006-02-03 16:36:24Z mike $"
+ * "$Id: banners.c 5305 2006-03-18 03:05:12Z mike $"
  *
  *   Banner routines for the Common UNIX Printing System (CUPS).
  *
  *
  * Contents:
  *
- *   cupsdAddBanner()   - Add a banner to the array.
  *   cupsdFindBanner()  - Find a named banner.
  *   cupsdLoadBanners() - Load all available banner files...
+ *   add_banner()       - Add a banner to the array.
  *   compare_banners()  - Compare two banners.
+ *   free_banners()     - Free all banners.
  */
 
 /*
  * Local functions...
  */
 
+static void    add_banner(const char *name, const char *filename);
 static int     compare_banners(const cupsd_banner_t *b0,
                                const cupsd_banner_t *b1);
-
-
-/*
- * 'cupsdAddBanner()' - Add a banner to the array.
- */
-
-void
-cupsdAddBanner(const char *name,       /* I - Name of banner */
-               const char *filename)   /* I - Filename for banner */
-{
-  mime_type_t          *filetype;      /* Filetype */
-  cupsd_banner_t       *temp;          /* New banner data */
-
-
- /*
-  * See what the filetype is...
-  */
-
-  if ((filetype = mimeFileType(MimeDatabase, filename, NULL, NULL)) == NULL)
-  {
-    cupsdLogMessage(CUPSD_LOG_WARN,
-                    "cupsdAddBanner: Banner \"%s\" (\"%s\") is of an unknown file type - skipping!",
-                    name, filename);
-    return;
-  }
-
- /*
-  * Allocate memory...
-  */
-
-  temp = calloc(1, sizeof(cupsd_banner_t));
-
- /*
-  * Copy the new banner data over...
-  */
-
-  temp->name     = strdup(name);
-  temp->filetype = filetype;
-
-  cupsArrayAdd(Banners, temp);
-}
+static void    free_banners(void);
 
 
 /*
@@ -102,29 +64,6 @@ cupsdFindBanner(const char *name)   /* I - Name of banner */
 }
 
 
-/*
- * 'cupsdFreeBanners()' - Free all banners.
- */
-
-void
-cupsdFreeBanners(void)
-{
-  cupsd_banner_t       *temp;          /* Current banner */
-
-
-  for (temp = (cupsd_banner_t *)cupsArrayFirst(Banners);
-       temp;
-       temp = (cupsd_banner_t *)cupsArrayNext(Banners))
-  {
-    free(temp->name);
-    free(temp);
-  }
-
-  cupsArrayDelete(Banners);
-  Banners = NULL;
-}
-
-
 /*
  * 'cupsdLoadBanners()' - Load all available banner files...
  */
@@ -142,7 +81,7 @@ cupsdLoadBanners(const char *d)              /* I - Directory to search */
   * Free old banner info...
   */
 
-  cupsdFreeBanners();
+  free_banners();
 
  /*
   * Try opening the banner directory...
@@ -187,7 +126,7 @@ cupsdLoadBanners(const char *d)             /* I - Directory to search */
     * Must be a valid file; add it!
     */
 
-    cupsdAddBanner(dent->filename, filename);
+    add_banner(dent->filename, filename);
   }
 
  /*
@@ -198,6 +137,47 @@ cupsdLoadBanners(const char *d)            /* I - Directory to search */
 }
 
 
+/*
+ * 'add_banner()' - Add a banner to the array.
+ */
+
+static void
+add_banner(const char *name,           /* I - Name of banner */
+           const char *filename)       /* I - Filename for banner */
+{
+  mime_type_t          *filetype;      /* Filetype */
+  cupsd_banner_t       *temp;          /* New banner data */
+
+
+ /*
+  * See what the filetype is...
+  */
+
+  if ((filetype = mimeFileType(MimeDatabase, filename, NULL, NULL)) == NULL)
+  {
+    cupsdLogMessage(CUPSD_LOG_WARN,
+                    "add_banner: Banner \"%s\" (\"%s\") is of an unknown file type - skipping!",
+                    name, filename);
+    return;
+  }
+
+ /*
+  * Allocate memory...
+  */
+
+  temp = calloc(1, sizeof(cupsd_banner_t));
+
+ /*
+  * Copy the new banner data over...
+  */
+
+  temp->name     = strdup(name);
+  temp->filetype = filetype;
+
+  cupsArrayAdd(Banners, temp);
+}
+
+
 /*
  * 'compare_banners()' - Compare two banners.
  */
@@ -212,5 +192,28 @@ compare_banners(
 
 
 /*
- * End of "$Id: banners.c 5062 2006-02-03 16:36:24Z mike $".
+ * 'free_banners()' - Free all banners.
+ */
+
+void
+free_banners(void)
+{
+  cupsd_banner_t       *temp;          /* Current banner */
+
+
+  for (temp = (cupsd_banner_t *)cupsArrayFirst(Banners);
+       temp;
+       temp = (cupsd_banner_t *)cupsArrayNext(Banners))
+  {
+    free(temp->name);
+    free(temp);
+  }
+
+  cupsArrayDelete(Banners);
+  Banners = NULL;
+}
+
+
+/*
+ * End of "$Id: banners.c 5305 2006-03-18 03:05:12Z mike $".
  */
index 8c99774d89fdc0ba562853a90bb7a6498a1e4782..bff0e333f0ef23a665ea8d51b4b9a8e678b48da5 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: banners.h 5062 2006-02-03 16:36:24Z mike $"
+ * "$Id: banners.h 5305 2006-03-18 03:05:12Z mike $"
  *
  *   Banner definitions for the Common UNIX Printing System (CUPS).
  *
@@ -45,12 +45,10 @@ VAR cups_array_t    *Banners        VALUE(NULL);
  * Prototypes...
  */
 
-extern void            cupsdAddBanner(const char *name, const char *filename);
 extern cupsd_banner_t  *cupsdFindBanner(const char *name);
-extern void            cupsdFreeBanners(void);
 extern void            cupsdLoadBanners(const char *d);
 
 
 /*
- * End of "$Id: banners.h 5062 2006-02-03 16:36:24Z mike $".
+ * End of "$Id: banners.h 5305 2006-03-18 03:05:12Z mike $".
  */
index 91c2af888fb0e6ec35e3f8df104fc42145351b05..0626b446177ff17018af08f4b29c2999235fbd3c 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: cert.c 5213 2006-03-02 00:37:34Z mike $"
+ * "$Id: cert.c 5305 2006-03-18 03:05:12Z mike $"
  *
  *   Authentication certificate routines for the Common UNIX
  *   Printing System (CUPS).
@@ -332,7 +332,8 @@ cupsdDeleteAllCerts(void)
     free(cert);
   }
 
-  Certs = NULL;
+  Certs        = NULL;
+  RootCertTime = 0;
 }
 
 
@@ -415,5 +416,5 @@ cupsdInitCerts(void)
 
 
 /*
- * End of "$Id: cert.c 5213 2006-03-02 00:37:34Z mike $".
+ * End of "$Id: cert.c 5305 2006-03-18 03:05:12Z mike $".
  */
index f9226223d50d631d8acefc65f6bd055d78348ee9..b439dac2d01a0d0a19b15870d5408b7208abf915 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: client.c 5225 2006-03-04 12:28:10Z mike $"
+ * "$Id: client.c 5305 2006-03-18 03:05:12Z mike $"
  *
  *   Client routines for the Common UNIX Printing System (CUPS) scheduler.
  *
  *   cupsdAcceptClient()     - Accept a new client.
  *   cupsdCloseAllClients()  - Close all remote clients immediately.
  *   cupsdCloseClient()      - Close a remote client.
- *   cupsdEncryptClient()    - Enable encryption for the client...
- *   cupsdIsCGI()            - Is the resource a CGI script/program?
  *   cupsdReadClient()       - Read data from a client.
  *   cupsdSendCommand()      - Send output from a command via HTTP.
  *   cupsdSendError()        - Send an error message via HTTP.
- *   cupsdSendFile()         - Send a file via HTTP.
  *   cupsdSendHeader()       - Send an HTTP request.
  *   cupsdUpdateCGI()        - Read status messages from CGI scripts and programs.
  *   cupsdWriteClient()      - Write data to a client as needed.
  *   check_if_modified()     - Decode an "If-Modified-Since" line.
+ *   encrypt_client()        - Enable encryption for the client...
  *   get_cdsa_server_certs() - Convert a keychain name into the CFArrayRef
  *                            required by SSLSetCertificate.
  *   get_file()              - Get a filename and state info.
  *   install_conf_file()     - Install a configuration file.
+ *   is_cgi()                - Is the resource a CGI script/program?
  *   is_path_absolute()      - Is a path absolute and free of relative elements.
  *   make_certificate()      - Make a self-signed SSL/TLS certificate.
  *   pipe_command()          - Pipe the output of a command to the remote client.
+ *   send_file()             - Send a file via HTTP.
  */
 
 /*
 
 static int             check_if_modified(cupsd_client_t *con,
                                          struct stat *filestats);
+static int             encrypt_client(cupsd_client_t *con);
 #ifdef HAVE_CDSASSL
 static CFArrayRef      get_cdsa_server_certs(void);
 #endif /* HAVE_CDSASSL */
 static char            *get_file(cupsd_client_t *con, struct stat *filestats, 
                                  char *filename, int len);
 static http_status_t   install_conf_file(cupsd_client_t *con);
+static int             is_cgi(cupsd_client_t *con, const char *filename,
+                              struct stat *filestats, mime_type_t *type);
 static int             is_path_absolute(const char *path);
 #ifdef HAVE_GNUTLS
 static void            make_certificate(void);
 #endif /* HAVE_GNUTLS */
 static int             pipe_command(cupsd_client_t *con, int infile, int *outfile,
                                     char *command, char *options, int root);
+static int             send_file(cupsd_client_t *con, http_status_t code,
+                                 char *filename, char *type,
+                                 struct stat *filestats);
 
 
 /*
@@ -412,7 +418,7 @@ cupsdAcceptClient(cupsd_listener_t *lis)/* I - Listener socket */
 
     con->http.encryption = HTTP_ENCRYPT_ALWAYS;
 
-    cupsdEncryptClient(con);
+    encrypt_client(con);
   }
   else
     con->auto_ssl = 1;
@@ -651,367 +657,6 @@ cupsdCloseClient(cupsd_client_t *con)     /* I - Client to close */
 }
 
 
-/*
- * 'cupsdEncryptClient()' - Enable encryption for the client...
- */
-
-int                                    /* O - 1 on success, 0 on error */
-cupsdEncryptClient(cupsd_client_t *con)        /* I - Client to encrypt */
-{
-#ifdef HAVE_LIBSSL
-  SSL_CTX      *context;               /* Context for encryption */
-  SSL          *conn;                  /* Connection for encryption */
-  unsigned long        error;                  /* Error code */
-
-
- /*
-  * Create the SSL context and accept the connection...
-  */
-
-  context = SSL_CTX_new(SSLv23_server_method());
-
-  SSL_CTX_set_options(context, SSL_OP_NO_SSLv2); /* Only use SSLv3 or TLS */
-  SSL_CTX_use_PrivateKey_file(context, ServerKey, SSL_FILETYPE_PEM);
-  SSL_CTX_use_certificate_file(context, ServerCertificate, SSL_FILETYPE_PEM);
-
-  conn = SSL_new(context);
-
-  SSL_set_fd(conn, con->http.fd);
-  if (SSL_accept(conn) != 1)
-  {
-    cupsdLogMessage(CUPSD_LOG_ERROR,
-                    "cupsdEncryptClient: Unable to encrypt connection from %s!",
-                    con->http.hostname);
-
-    while ((error = ERR_get_error()) != 0)
-      cupsdLogMessage(CUPSD_LOG_ERROR, "cupsdEncryptClient: %s",
-                      ERR_error_string(error, NULL));
-
-    SSL_CTX_free(context);
-    SSL_free(conn);
-    return (0);
-  }
-
-  cupsdLogMessage(CUPSD_LOG_DEBUG,
-                  "cupsdEncryptClient: %d Connection from %s now encrypted.",
-                  con->http.fd, con->http.hostname);
-
-  con->http.tls = conn;
-  return (1);
-  
-#elif defined(HAVE_GNUTLS)
-  http_tls_t   *conn;                  /* TLS session object */
-  int          error;                  /* Error code */
-  gnutls_certificate_server_credentials *credentials;
-                                       /* TLS credentials */
-
-
- /*
-  * Verify that we have a certificate...
-  */
-
-  if (access(ServerKey, 0) || access(ServerCertificate, 0))
-  {
-   /*
-    * Nope, make a self-signed certificate...
-    */
-
-    make_certificate();
-  }
-
- /*
-  * Create the SSL object and perform the SSL handshake...
-  */
-
-  conn = (http_tls_t *)malloc(sizeof(gnutls_session));
-
-  if (conn == NULL)
-    return (0);
-
-  credentials = (gnutls_certificate_server_credentials *)
-                    malloc(sizeof(gnutls_certificate_server_credentials));
-  if (credentials == NULL)
-  {
-    cupsdLogMessage(CUPSD_LOG_ERROR,
-                    "cupsdEncryptClient: Unable to encrypt connection from %s!",
-                    con->http.hostname);
-    cupsdLogMessage(CUPSD_LOG_ERROR, "cupsdEncryptClient: %s", strerror(errno));
-
-    free(conn);
-    return (0);
-  }
-
-  gnutls_certificate_allocate_credentials(credentials);
-  gnutls_certificate_set_x509_key_file(*credentials, ServerCertificate, 
-                                      ServerKey, GNUTLS_X509_FMT_PEM);
-
-  gnutls_init(&(conn->session), GNUTLS_SERVER);
-  gnutls_set_default_priority(conn->session);
-  gnutls_credentials_set(conn->session, GNUTLS_CRD_CERTIFICATE, *credentials);
-  gnutls_transport_set_ptr(conn->session, (gnutls_transport_ptr)con->http.fd);
-
-  error = gnutls_handshake(conn->session);
-
-  if (error != GNUTLS_E_SUCCESS)
-  {
-    cupsdLogMessage(CUPSD_LOG_ERROR,
-                    "cupsdEncryptClient: Unable to encrypt connection from %s!",
-                    con->http.hostname);
-    cupsdLogMessage(CUPSD_LOG_ERROR, "cupsdEncryptClient: %s",
-                    gnutls_strerror(error));
-
-    gnutls_deinit(conn->session);
-    gnutls_certificate_free_credentials(*credentials);
-    free(conn);
-    free(credentials);
-    return (0);
-  }
-
-  cupsdLogMessage(CUPSD_LOG_DEBUG,
-                  "cupsdEncryptClient: %d Connection from %s now encrypted.",
-                  con->http.fd, con->http.hostname);
-
-  conn->credentials = credentials;
-  con->http.tls = conn;
-  return (1);
-
-#elif defined(HAVE_CDSASSL)
-  OSStatus     error;                  /* Error info */
-  SSLContextRef        conn;                   /* New connection */
-  CFArrayRef   certificatesArray;      /* Array containing certificates */
-  int          allowExpired;           /* Allow expired certificates? */
-  int          allowAnyRoot;           /* Allow any root certificate? */
-
-
-  conn         = NULL;
-  error        = SSLNewContext(true, &conn);
-  allowExpired = 1;
-  allowAnyRoot = 1;
-
-  certificatesArray = get_cdsa_server_certs();
-
-  if (!certificatesArray)
-  {
-    cupsdLogMessage(CUPSD_LOG_ERROR,
-                   "EncryptClient: Could not find signing key in keychain "
-                   "\"%s\"", ServerCertificate);
-    error = errSSLBadCert; /* errSSLBadConfiguration is a better choice, but not available on 10.2.x */
-  }
-
-  if (!error)
-    error = SSLSetIOFuncs(conn, _httpReadCDSA, _httpWriteCDSA);
-
-  if (!error)
-    error = SSLSetProtocolVersion(conn, kSSLProtocol3);
-
-  if (!error)
-    error = SSLSetConnection(conn, (SSLConnectionRef)con->http.fd);
-
-  if (!error)
-    error = SSLSetPeerDomainName(conn, ServerName, strlen(ServerName) + 1);
-
-  /* have to do these options before setting server certs */
-  if (!error && allowExpired)
-    error = SSLSetAllowsExpiredCerts(conn, true);
-
-  if (!error && allowAnyRoot)
-    error = SSLSetAllowsAnyRoot(conn, true);
-
-  if (!error)
-    error = SSLSetCertificate(conn, certificatesArray);
-
-  if (certificatesArray)
-  {
-    CFRelease(certificatesArray);
-    certificatesArray = NULL;
-  }
-
-  if (!error)
-  {
-   /*
-    * Perform SSL/TLS handshake
-    */
-
-    while ((error = SSLHandshake(conn)) == errSSLWouldBlock)
-      usleep(1000);
-  }
-
-  if (error)
-  {
-    cupsdLogMessage(CUPSD_LOG_ERROR,
-                    "cupsdEncryptClient: Unable to encrypt connection from %s!",
-                    con->http.hostname);
-
-    cupsdLogMessage(CUPSD_LOG_ERROR,
-                    "cupsdEncryptClient: CDSA error code is %d", (int)error);
-
-    con->http.error  = error;
-    con->http.status = HTTP_ERROR;
-
-    if (conn != NULL)
-      SSLDisposeContext(conn);
-
-    return (0);
-  }
-
-  cupsdLogMessage(CUPSD_LOG_DEBUG,
-                  "cupsdEncryptClient: %d Connection from %s now encrypted.",
-                  con->http.fd, con->http.hostname);
-
-  con->http.tls = conn;
-  return (1);
-
-#else
-  return (0);
-#endif /* HAVE_LIBSSL */
-}
-
-
-/*
- * 'cupsdIsCGI()' - Is the resource a CGI script/program?
- */
-
-int                                    /* O - 1 = CGI, 0 = file */
-cupsdIsCGI(cupsd_client_t *con,                /* I - Client connection */
-          const char     *filename,    /* I - Real filename */
-          struct stat    *filestats,   /* I - File information */
-          mime_type_t    *type)        /* I - MIME type */
-{
-  const char   *options;               /* Options on URL */
-
-
-  cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                  "cupsdIsCGI(con=%p, filename=\"%s\", filestats=%p, type=%s/%s)\n",
-                 con, filename, filestats, type ? type->super : "unknown",
-                 type ? type->type : "unknown");
-
- /*
-  * Get the options, if any...
-  */
-
-  if ((options = strchr(con->uri, '?')) != NULL)
-    options ++;
-
- /*
-  * Check for known types...
-  */
-
-  if (!type || strcasecmp(type->super, "application"))
-  {
-    cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdIsCGI: Returning 0...");
-    return (0);
-  }
-
-  if (!strcasecmp(type->type, "x-httpd-cgi") &&
-      (filestats->st_mode & 0111))
-  {
-   /*
-    * "application/x-httpd-cgi" is a CGI script.
-    */
-
-    cupsdSetString(&con->command, filename);
-
-    filename = strrchr(filename, '/') + 1; /* Filename always absolute */
-
-    cupsdSetString(&con->options, options);
-
-    cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                    "cupsdIsCGI: Returning 1 with command=\"%s\" and options=\"%s\"",
-                    con->command, con->options);
-
-    return (1);
-  }
-#ifdef HAVE_JAVA
-  else if (!strcasecmp(type->type, "x-httpd-java"))
-  {
-   /*
-    * "application/x-httpd-java" is a Java servlet.
-    */
-
-    cupsdSetString(&con->command, CUPS_JAVA);
-
-    if (options)
-      cupsdSetStringf(&con->options, "%s %s", filename, options);
-    else
-      cupsdSetString(&con->options, filename);
-
-    cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                    "cupsdIsCGI: Returning 1 with command=\"%s\" and options=\"%s\"",
-                    con->command, con->options);
-
-    return (1);
-  }
-#endif /* HAVE_JAVA */
-#ifdef HAVE_PERL
-  else if (!strcasecmp(type->type, "x-httpd-perl"))
-  {
-   /*
-    * "application/x-httpd-perl" is a Perl page.
-    */
-
-    cupsdSetString(&con->command, CUPS_PERL);
-
-    if (options)
-      cupsdSetStringf(&con->options, "%s %s", filename, options);
-    else
-      cupsdSetString(&con->options, filename);
-
-    cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                    "cupsdIsCGI: Returning 1 with command=\"%s\" and options=\"%s\"",
-                    con->command, con->options);
-
-    return (1);
-  }
-#endif /* HAVE_PERL */
-#ifdef HAVE_PHP
-  else if (!strcasecmp(type->type, "x-httpd-php"))
-  {
-   /*
-    * "application/x-httpd-php" is a PHP page.
-    */
-
-    cupsdSetString(&con->command, CUPS_PHP);
-
-    if (options)
-      cupsdSetStringf(&con->options, "%s %s", filename, options);
-    else
-      cupsdSetString(&con->options, filename);
-
-    cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                    "cupsdIsCGI: Returning 1 with command=\"%s\" and options=\"%s\"",
-                    con->command, con->options);
-
-    return (1);
-  }
-#endif /* HAVE_PHP */
-#ifdef HAVE_PYTHON
-  else if (!strcasecmp(type->type, "x-httpd-python"))
-  {
-   /*
-    * "application/x-httpd-python" is a Python page.
-    */
-
-    cupsdSetString(&con->command, CUPS_PYTHON);
-
-    if (options)
-      cupsdSetStringf(&con->options, "%s %s", filename, options);
-    else
-      cupsdSetString(&con->options, filename);
-
-    cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                    "cupsdIsCGI: Returning 1 with command=\"%s\" and options=\"%s\"",
-                    con->command, con->options);
-
-    return (1);
-  }
-#endif /* HAVE_PYTHON */
-
-  cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdIsCGI: Returning 0...");
-
-  return (0);
-}
-
-
 /*
  * 'cupsdReadClient()' - Read data from a client.
  */
@@ -1068,7 +713,7 @@ cupsdReadClient(cupsd_client_t *con)       /* I - Client to read from */
                       "cupsdReadClient: Saw first byte %02X, auto-negotiating SSL/TLS session...",
                       buf[0] & 255);
 
-      cupsdEncryptClient(con);
+      encrypt_client(con);
       return (1);
     }
   }
@@ -1360,7 +1005,7 @@ cupsdReadClient(cupsd_client_t *con)      /* I - Client to read from */
        httpPrintf(HTTP(con), "Content-Length: 0\r\n");
        httpPrintf(HTTP(con), "\r\n");
 
-        cupsdEncryptClient(con);
+        encrypt_client(con);
 #else
        if (!cupsdSendError(con, HTTP_NOT_IMPLEMENTED))
          return (cupsdCloseClient(con));
@@ -1401,7 +1046,7 @@ cupsdReadClient(cupsd_client_t *con)      /* I - Client to read from */
        httpPrintf(HTTP(con), "Content-Length: 0\r\n");
        httpPrintf(HTTP(con), "\r\n");
 
-        cupsdEncryptClient(con);
+        encrypt_client(con);
 #else
        if (!cupsdSendError(con, HTTP_NOT_IMPLEMENTED))
          return (cupsdCloseClient(con));
@@ -1572,11 +1217,11 @@ cupsdReadClient(cupsd_client_t *con)    /* I - Client to read from */
 
              type = mimeFileType(MimeDatabase, filename, NULL, NULL);
 
-              if (cupsdIsCGI(con, filename, &filestats, type))
+              if (is_cgi(con, filename, &filestats, type))
              {
               /*
                * Note: con->command and con->options were set by
-               * cupsdIsCGI()...
+               * is_cgi()...
                */
 
                if (!cupsdSendCommand(con, con->command, con->options, 0))
@@ -1604,7 +1249,7 @@ cupsdReadClient(cupsd_client_t *con)      /* I - Client to read from */
                else
                  snprintf(line, sizeof(line), "%s/%s", type->super, type->type);
 
-               if (!cupsdSendFile(con, HTTP_OK, filename, line, &filestats))
+               if (!send_file(con, HTTP_OK, filename, line, &filestats))
                  return (cupsdCloseClient(con));
              }
            }
@@ -1738,7 +1383,7 @@ cupsdReadClient(cupsd_client_t *con)      /* I - Client to read from */
 
              type = mimeFileType(MimeDatabase, filename, NULL, NULL);
 
-              if (!cupsdIsCGI(con, filename, &filestats, type))
+              if (!is_cgi(con, filename, &filestats, type))
              {
               /*
                * Only POST to CGI's...
@@ -2393,58 +2038,6 @@ cupsdSendError(cupsd_client_t *con,      /* I - Connection */
 }
 
 
-/*
- * 'cupsdSendFile()' - Send a file via HTTP.
- */
-
-int                                    /* O - 0 on failure, 1 on success */
-cupsdSendFile(cupsd_client_t *con,     /* I - Client connection */
-              http_status_t  code,     /* I - HTTP status */
-             char           *filename, /* I - Filename */
-             char           *type,     /* I - File type */
-             struct stat    *filestats)/* O - File information */
-{
-  con->file = open(filename, O_RDONLY);
-
-  cupsdLogMessage(CUPSD_LOG_DEBUG, "cupsdSendFile: %d file=%d", con->http.fd,
-                  con->file);
-
-  if (con->file < 0)
-    return (0);
-
-  fcntl(con->file, F_SETFD, fcntl(con->file, F_GETFD) | FD_CLOEXEC);
-
-  con->pipe_pid = 0;
-
-  if (!cupsdSendHeader(con, code, type))
-    return (0);
-
-  if (httpPrintf(HTTP(con), "Last-Modified: %s\r\n",
-                 httpGetDateString(filestats->st_mtime)) < 0)
-    return (0);
-  if (httpPrintf(HTTP(con), "Content-Length: " CUPS_LLFMT "\r\n",
-                 CUPS_LLCAST filestats->st_size) < 0)
-    return (0);
-  if (httpPrintf(HTTP(con), "\r\n") < 0)
-    return (0);
-
-  con->http.data_encoding  = HTTP_ENCODE_LENGTH;
-  con->http.data_remaining = filestats->st_size;
-
-  if (con->http.data_remaining <= INT_MAX)
-    con->http._data_remaining = con->http.data_remaining;
-  else
-    con->http._data_remaining = INT_MAX;
-
-  cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                  "cupsdSendFile: Adding fd %d to OutputSet...", con->http.fd);
-
-  FD_SET(con->http.fd, OutputSet);
-
-  return (1);
-}
-
-
 /*
  * 'cupsdSendHeader()' - Send an HTTP request.
  */
@@ -2516,14 +2109,14 @@ cupsdSendHeader(cupsd_client_t *con,    /* I - Client to send to */
     }
   }
 
-  if (con->language != NULL)
+  if (con->language && strcmp(con->language->language, "C"))
   {
     if (httpPrintf(HTTP(con), "Content-Language: %s\r\n",
                    con->language->language) < 0)
       return (0);
   }
 
-  if (type != NULL)
+  if (type)
   {
     if (!strcmp(type, "text/html"))
     {
@@ -2813,62 +2406,279 @@ cupsdWriteClient(cupsd_client_t *con)  /* I - Client connection */
 }
 
 
-/*
- * 'check_if_modified()' - Decode an "If-Modified-Since" line.
- */
+/*
+ * 'check_if_modified()' - Decode an "If-Modified-Since" line.
+ */
+
+static int                             /* O - 1 if modified since */
+check_if_modified(
+    cupsd_client_t *con,               /* I - Client connection */
+    struct stat    *filestats)         /* I - File information */
+{
+  char         *ptr;                   /* Pointer into field */
+  time_t       date;                   /* Time/date value */
+  off_t                size;                   /* Size/length value */
+
+
+  size = 0;
+  date = 0;
+  ptr  = con->http.fields[HTTP_FIELD_IF_MODIFIED_SINCE];
+
+  if (*ptr == '\0')
+    return (1);
+
+  cupsdLogMessage(CUPSD_LOG_DEBUG2,
+                  "check_if_modified: %d If-Modified-Since=\"%s\"",
+                  con->http.fd, ptr);
+
+  while (*ptr != '\0')
+  {
+    while (isspace(*ptr) || *ptr == ';')
+      ptr ++;
+
+    if (strncasecmp(ptr, "length=", 7) == 0)
+    {
+      ptr += 7;
+      size = strtoll(ptr, NULL, 10);
+
+      while (isdigit(*ptr))
+        ptr ++;
+    }
+    else if (isalpha(*ptr))
+    {
+      date = httpGetDateTime(ptr);
+      while (*ptr != '\0' && *ptr != ';')
+        ptr ++;
+    }
+  }
+
+  cupsdLogMessage(CUPSD_LOG_DEBUG2,
+                  "check_if_modified: %d sizes=" CUPS_LLFMT ","
+                 CUPS_LLFMT " dates=%d,%d",
+                  con->http.fd, CUPS_LLCAST size,
+                 CUPS_LLCAST filestats->st_size, (int)date,
+                 (int)filestats->st_mtime);
+
+  return ((size != filestats->st_size && size != 0) ||
+          (date < filestats->st_mtime && date != 0) ||
+         (size == 0 && date == 0));
+}
+
+
+/*
+ * 'encrypt_client()' - Enable encryption for the client...
+ */
+
+static int                             /* O - 1 on success, 0 on error */
+encrypt_client(cupsd_client_t *con)    /* I - Client to encrypt */
+{
+#ifdef HAVE_LIBSSL
+  SSL_CTX      *context;               /* Context for encryption */
+  SSL          *conn;                  /* Connection for encryption */
+  unsigned long        error;                  /* Error code */
+
+
+ /*
+  * Create the SSL context and accept the connection...
+  */
+
+  context = SSL_CTX_new(SSLv23_server_method());
+
+  SSL_CTX_set_options(context, SSL_OP_NO_SSLv2); /* Only use SSLv3 or TLS */
+  SSL_CTX_use_PrivateKey_file(context, ServerKey, SSL_FILETYPE_PEM);
+  SSL_CTX_use_certificate_file(context, ServerCertificate, SSL_FILETYPE_PEM);
+
+  conn = SSL_new(context);
+
+  SSL_set_fd(conn, con->http.fd);
+  if (SSL_accept(conn) != 1)
+  {
+    cupsdLogMessage(CUPSD_LOG_ERROR,
+                    "encrypt_client: Unable to encrypt connection from %s!",
+                    con->http.hostname);
+
+    while ((error = ERR_get_error()) != 0)
+      cupsdLogMessage(CUPSD_LOG_ERROR, "encrypt_client: %s",
+                      ERR_error_string(error, NULL));
+
+    SSL_CTX_free(context);
+    SSL_free(conn);
+    return (0);
+  }
+
+  cupsdLogMessage(CUPSD_LOG_DEBUG,
+                  "encrypt_client: %d Connection from %s now encrypted.",
+                  con->http.fd, con->http.hostname);
+
+  con->http.tls = conn;
+  return (1);
+  
+#elif defined(HAVE_GNUTLS)
+  http_tls_t   *conn;                  /* TLS session object */
+  int          error;                  /* Error code */
+  gnutls_certificate_server_credentials *credentials;
+                                       /* TLS credentials */
+
+
+ /*
+  * Verify that we have a certificate...
+  */
+
+  if (access(ServerKey, 0) || access(ServerCertificate, 0))
+  {
+   /*
+    * Nope, make a self-signed certificate...
+    */
+
+    make_certificate();
+  }
+
+ /*
+  * Create the SSL object and perform the SSL handshake...
+  */
+
+  conn = (http_tls_t *)malloc(sizeof(gnutls_session));
+
+  if (conn == NULL)
+    return (0);
+
+  credentials = (gnutls_certificate_server_credentials *)
+                    malloc(sizeof(gnutls_certificate_server_credentials));
+  if (credentials == NULL)
+  {
+    cupsdLogMessage(CUPSD_LOG_ERROR,
+                    "encrypt_client: Unable to encrypt connection from %s!",
+                    con->http.hostname);
+    cupsdLogMessage(CUPSD_LOG_ERROR, "encrypt_client: %s", strerror(errno));
+
+    free(conn);
+    return (0);
+  }
+
+  gnutls_certificate_allocate_credentials(credentials);
+  gnutls_certificate_set_x509_key_file(*credentials, ServerCertificate, 
+                                      ServerKey, GNUTLS_X509_FMT_PEM);
+
+  gnutls_init(&(conn->session), GNUTLS_SERVER);
+  gnutls_set_default_priority(conn->session);
+  gnutls_credentials_set(conn->session, GNUTLS_CRD_CERTIFICATE, *credentials);
+  gnutls_transport_set_ptr(conn->session,
+                           (gnutls_transport_ptr)((long)con->http.fd));
+
+  error = gnutls_handshake(conn->session);
+
+  if (error != GNUTLS_E_SUCCESS)
+  {
+    cupsdLogMessage(CUPSD_LOG_ERROR,
+                    "encrypt_client: Unable to encrypt connection from %s!",
+                    con->http.hostname);
+    cupsdLogMessage(CUPSD_LOG_ERROR, "encrypt_client: %s",
+                    gnutls_strerror(error));
+
+    gnutls_deinit(conn->session);
+    gnutls_certificate_free_credentials(*credentials);
+    free(conn);
+    free(credentials);
+    return (0);
+  }
+
+  cupsdLogMessage(CUPSD_LOG_DEBUG,
+                  "encrypt_client: %d Connection from %s now encrypted.",
+                  con->http.fd, con->http.hostname);
+
+  conn->credentials = credentials;
+  con->http.tls = conn;
+  return (1);
+
+#elif defined(HAVE_CDSASSL)
+  OSStatus     error;                  /* Error info */
+  SSLContextRef        conn;                   /* New connection */
+  CFArrayRef   certificatesArray;      /* Array containing certificates */
+  int          allowExpired;           /* Allow expired certificates? */
+  int          allowAnyRoot;           /* Allow any root certificate? */
+
+
+  conn         = NULL;
+  error        = SSLNewContext(true, &conn);
+  allowExpired = 1;
+  allowAnyRoot = 1;
+
+  certificatesArray = get_cdsa_server_certs();
+
+  if (!certificatesArray)
+  {
+    cupsdLogMessage(CUPSD_LOG_ERROR,
+                   "EncryptClient: Could not find signing key in keychain "
+                   "\"%s\"", ServerCertificate);
+    error = errSSLBadCert; /* errSSLBadConfiguration is a better choice, but not available on 10.2.x */
+  }
+
+  if (!error)
+    error = SSLSetIOFuncs(conn, _httpReadCDSA, _httpWriteCDSA);
+
+  if (!error)
+    error = SSLSetProtocolVersion(conn, kSSLProtocol3);
+
+  if (!error)
+    error = SSLSetConnection(conn, (SSLConnectionRef)con->http.fd);
+
+  if (!error)
+    error = SSLSetPeerDomainName(conn, ServerName, strlen(ServerName) + 1);
+
+  /* have to do these options before setting server certs */
+  if (!error && allowExpired)
+    error = SSLSetAllowsExpiredCerts(conn, true);
+
+  if (!error && allowAnyRoot)
+    error = SSLSetAllowsAnyRoot(conn, true);
+
+  if (!error)
+    error = SSLSetCertificate(conn, certificatesArray);
 
-static int                             /* O - 1 if modified since */
-check_if_modified(
-    cupsd_client_t *con,               /* I - Client connection */
-    struct stat    *filestats)         /* I - File information */
-{
-  char         *ptr;                   /* Pointer into field */
-  time_t       date;                   /* Time/date value */
-  off_t                size;                   /* Size/length value */
+  if (certificatesArray)
+  {
+    CFRelease(certificatesArray);
+    certificatesArray = NULL;
+  }
 
+  if (!error)
+  {
+   /*
+    * Perform SSL/TLS handshake
+    */
 
-  size = 0;
-  date = 0;
-  ptr  = con->http.fields[HTTP_FIELD_IF_MODIFIED_SINCE];
+    while ((error = SSLHandshake(conn)) == errSSLWouldBlock)
+      usleep(1000);
+  }
 
-  if (*ptr == '\0')
-    return (1);
+  if (error)
+  {
+    cupsdLogMessage(CUPSD_LOG_ERROR,
+                    "encrypt_client: Unable to encrypt connection from %s!",
+                    con->http.hostname);
 
-  cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                  "check_if_modified: %d If-Modified-Since=\"%s\"",
-                  con->http.fd, ptr);
+    cupsdLogMessage(CUPSD_LOG_ERROR,
+                    "encrypt_client: CDSA error code is %d", (int)error);
 
-  while (*ptr != '\0')
-  {
-    while (isspace(*ptr) || *ptr == ';')
-      ptr ++;
+    con->http.error  = error;
+    con->http.status = HTTP_ERROR;
 
-    if (strncasecmp(ptr, "length=", 7) == 0)
-    {
-      ptr += 7;
-      size = strtoll(ptr, NULL, 10);
+    if (conn != NULL)
+      SSLDisposeContext(conn);
 
-      while (isdigit(*ptr))
-        ptr ++;
-    }
-    else if (isalpha(*ptr))
-    {
-      date = httpGetDateTime(ptr);
-      while (*ptr != '\0' && *ptr != ';')
-        ptr ++;
-    }
+    return (0);
   }
 
-  cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                  "check_if_modified: %d sizes=" CUPS_LLFMT ","
-                 CUPS_LLFMT " dates=%d,%d",
-                  con->http.fd, CUPS_LLCAST size,
-                 CUPS_LLCAST filestats->st_size, (int)date,
-                 (int)filestats->st_mtime);
+  cupsdLogMessage(CUPSD_LOG_DEBUG,
+                  "encrypt_client: %d Connection from %s now encrypted.",
+                  con->http.fd, con->http.hostname);
 
-  return ((size != filestats->st_size && size != 0) ||
-          (date < filestats->st_mtime && date != 0) ||
-         (size == 0 && date == 0));
+  con->http.tls = conn;
+  return (1);
+
+#else
+  return (0);
+#endif /* HAVE_LIBSSL */
 }
 
 
@@ -3260,6 +3070,151 @@ install_conf_file(cupsd_client_t *con)  /* I - Connection */
 }
 
 
+/*
+ * 'is_cgi()' - Is the resource a CGI script/program?
+ */
+
+static int                             /* O - 1 = CGI, 0 = file */
+is_cgi(cupsd_client_t *con,            /* I - Client connection */
+       const char     *filename,       /* I - Real filename */
+       struct stat    *filestats,      /* I - File information */
+       mime_type_t    *type)           /* I - MIME type */
+{
+  const char   *options;               /* Options on URL */
+
+
+  cupsdLogMessage(CUPSD_LOG_DEBUG2,
+                  "is_cgi(con=%p, filename=\"%s\", filestats=%p, type=%s/%s)\n",
+                 con, filename, filestats, type ? type->super : "unknown",
+                 type ? type->type : "unknown");
+
+ /*
+  * Get the options, if any...
+  */
+
+  if ((options = strchr(con->uri, '?')) != NULL)
+    options ++;
+
+ /*
+  * Check for known types...
+  */
+
+  if (!type || strcasecmp(type->super, "application"))
+  {
+    cupsdLogMessage(CUPSD_LOG_DEBUG2, "is_cgi: Returning 0...");
+    return (0);
+  }
+
+  if (!strcasecmp(type->type, "x-httpd-cgi") &&
+      (filestats->st_mode & 0111))
+  {
+   /*
+    * "application/x-httpd-cgi" is a CGI script.
+    */
+
+    cupsdSetString(&con->command, filename);
+
+    filename = strrchr(filename, '/') + 1; /* Filename always absolute */
+
+    cupsdSetString(&con->options, options);
+
+    cupsdLogMessage(CUPSD_LOG_DEBUG2,
+                    "is_cgi: Returning 1 with command=\"%s\" and options=\"%s\"",
+                    con->command, con->options);
+
+    return (1);
+  }
+#ifdef HAVE_JAVA
+  else if (!strcasecmp(type->type, "x-httpd-java"))
+  {
+   /*
+    * "application/x-httpd-java" is a Java servlet.
+    */
+
+    cupsdSetString(&con->command, CUPS_JAVA);
+
+    if (options)
+      cupsdSetStringf(&con->options, "%s %s", filename, options);
+    else
+      cupsdSetString(&con->options, filename);
+
+    cupsdLogMessage(CUPSD_LOG_DEBUG2,
+                    "is_cgi: Returning 1 with command=\"%s\" and options=\"%s\"",
+                    con->command, con->options);
+
+    return (1);
+  }
+#endif /* HAVE_JAVA */
+#ifdef HAVE_PERL
+  else if (!strcasecmp(type->type, "x-httpd-perl"))
+  {
+   /*
+    * "application/x-httpd-perl" is a Perl page.
+    */
+
+    cupsdSetString(&con->command, CUPS_PERL);
+
+    if (options)
+      cupsdSetStringf(&con->options, "%s %s", filename, options);
+    else
+      cupsdSetString(&con->options, filename);
+
+    cupsdLogMessage(CUPSD_LOG_DEBUG2,
+                    "is_cgi: Returning 1 with command=\"%s\" and options=\"%s\"",
+                    con->command, con->options);
+
+    return (1);
+  }
+#endif /* HAVE_PERL */
+#ifdef HAVE_PHP
+  else if (!strcasecmp(type->type, "x-httpd-php"))
+  {
+   /*
+    * "application/x-httpd-php" is a PHP page.
+    */
+
+    cupsdSetString(&con->command, CUPS_PHP);
+
+    if (options)
+      cupsdSetStringf(&con->options, "%s %s", filename, options);
+    else
+      cupsdSetString(&con->options, filename);
+
+    cupsdLogMessage(CUPSD_LOG_DEBUG2,
+                    "is_cgi: Returning 1 with command=\"%s\" and options=\"%s\"",
+                    con->command, con->options);
+
+    return (1);
+  }
+#endif /* HAVE_PHP */
+#ifdef HAVE_PYTHON
+  else if (!strcasecmp(type->type, "x-httpd-python"))
+  {
+   /*
+    * "application/x-httpd-python" is a Python page.
+    */
+
+    cupsdSetString(&con->command, CUPS_PYTHON);
+
+    if (options)
+      cupsdSetStringf(&con->options, "%s %s", filename, options);
+    else
+      cupsdSetString(&con->options, filename);
+
+    cupsdLogMessage(CUPSD_LOG_DEBUG2,
+                    "is_cgi: Returning 1 with command=\"%s\" and options=\"%s\"",
+                    con->command, con->options);
+
+    return (1);
+  }
+#endif /* HAVE_PYTHON */
+
+  cupsdLogMessage(CUPSD_LOG_DEBUG2, "is_cgi: Returning 0...");
+
+  return (0);
+}
+
+
 /*
  * 'is_path_absolute()' - Is a path absolute and free of relative elements (i.e. "..").
  */
@@ -3675,7 +3630,8 @@ pipe_command(cupsd_client_t *con, /* I - Client connection */
   }
   else
   {
-    sprintf(content_length, "CONTENT_LENGTH=" CUPS_LLFMT, con->bytes);
+    sprintf(content_length, "CONTENT_LENGTH=" CUPS_LLFMT,
+            CUPS_LLCAST con->bytes);
     snprintf(content_type, sizeof(content_type), "CONTENT_TYPE=%s",
              con->http.fields[HTTP_FIELD_CONTENT_TYPE]);
 
@@ -3759,5 +3715,57 @@ pipe_command(cupsd_client_t *con,        /* I - Client connection */
 
 
 /*
- * End of "$Id: client.c 5225 2006-03-04 12:28:10Z mike $".
+ * 'send_file()' - Send a file via HTTP.
+ */
+
+static int                             /* O - 0 on failure, 1 on success */
+send_file(cupsd_client_t *con,         /* I - Client connection */
+          http_status_t  code,         /* I - HTTP status */
+         char           *filename,     /* I - Filename */
+         char           *type,         /* I - File type */
+         struct stat    *filestats)    /* O - File information */
+{
+  con->file = open(filename, O_RDONLY);
+
+  cupsdLogMessage(CUPSD_LOG_DEBUG, "send_file: %d file=%d", con->http.fd,
+                  con->file);
+
+  if (con->file < 0)
+    return (0);
+
+  fcntl(con->file, F_SETFD, fcntl(con->file, F_GETFD) | FD_CLOEXEC);
+
+  con->pipe_pid = 0;
+
+  if (!cupsdSendHeader(con, code, type))
+    return (0);
+
+  if (httpPrintf(HTTP(con), "Last-Modified: %s\r\n",
+                 httpGetDateString(filestats->st_mtime)) < 0)
+    return (0);
+  if (httpPrintf(HTTP(con), "Content-Length: " CUPS_LLFMT "\r\n",
+                 CUPS_LLCAST filestats->st_size) < 0)
+    return (0);
+  if (httpPrintf(HTTP(con), "\r\n") < 0)
+    return (0);
+
+  con->http.data_encoding  = HTTP_ENCODE_LENGTH;
+  con->http.data_remaining = filestats->st_size;
+
+  if (con->http.data_remaining <= INT_MAX)
+    con->http._data_remaining = con->http.data_remaining;
+  else
+    con->http._data_remaining = INT_MAX;
+
+  cupsdLogMessage(CUPSD_LOG_DEBUG2,
+                  "send_file: Adding fd %d to OutputSet...", con->http.fd);
+
+  FD_SET(con->http.fd, OutputSet);
+
+  return (1);
+}
+
+
+/*
+ * End of "$Id: client.c 5305 2006-03-18 03:05:12Z mike $".
  */
index 8f932f00970e91810fdc389fd4c3d4c2f405f788..7a7b70cd70bf4d996c1756615622c7871fbb7bdb 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: client.h 5069 2006-02-04 05:24:35Z mike $"
+ * "$Id: client.h 5305 2006-03-18 03:05:12Z mike $"
  *
  *   Client definitions for the Common UNIX Printing System (CUPS) scheduler.
  *
@@ -104,9 +104,6 @@ extern void cupsdAcceptClient(cupsd_listener_t *lis);
 extern void    cupsdCloseAllClients(void);
 extern int     cupsdCloseClient(cupsd_client_t *con);
 extern void    cupsdDeleteAllListeners(void);
-extern int     cupsdEncryptClient(cupsd_client_t *con);
-extern int     cupsdIsCGI(cupsd_client_t *con, const char *filename,
-                          struct stat *filestats, mime_type_t *type);
 extern void    cupsdPauseListening(void);
 extern int     cupsdProcessIPPRequest(cupsd_client_t *con);
 extern int     cupsdReadClient(cupsd_client_t *con);
@@ -114,9 +111,6 @@ extern void cupsdResumeListening(void);
 extern int     cupsdSendCommand(cupsd_client_t *con, char *command,
                                 char *options, int root);
 extern int     cupsdSendError(cupsd_client_t *con, http_status_t code);
-extern int     cupsdSendFile(cupsd_client_t *con, http_status_t code,
-                             char *filename, char *type,
-                             struct stat *filestats);
 extern int     cupsdSendHeader(cupsd_client_t *con, http_status_t code,
                                char *type);
 extern void    cupsdShutdownClient(cupsd_client_t *con);
@@ -127,5 +121,5 @@ extern int  cupsdWriteClient(cupsd_client_t *con);
 
 
 /*
- * End of "$Id: client.h 5069 2006-02-04 05:24:35Z mike $".
+ * End of "$Id: client.h 5305 2006-03-18 03:05:12Z mike $".
  */
index 7965c70dccbf1b24cee9794e241fcae6338b14e2..e7d64858a37e1fd9b0f667ce88500666109deeb3 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: conf.c 5235 2006-03-06 13:02:23Z mike $"
+ * "$Id: conf.c 5289 2006-03-14 11:54:45Z mike $"
  *
  *   Configuration routines for the Common UNIX Printing System (CUPS).
  *
@@ -785,6 +785,8 @@ cupsdReadConfiguration(void)
       cupsdLogMessage(CUPSD_LOG_ERROR, "Default policy \"%s\" not found!",
                       DefaultPolicy);
 
+    cupsdSetString(&DefaultPolicy, "default");
+
     if ((DefaultPolicyPtr = cupsdFindPolicy("default")) != NULL)
       cupsdLogMessage(CUPSD_LOG_INFO,
                       "Using policy \"default\" as the default!");
@@ -3237,5 +3239,5 @@ read_policy(cups_file_t *fp,              /* I - Configuration file */
 
 
 /*
- * End of "$Id: conf.c 5235 2006-03-06 13:02:23Z mike $".
+ * End of "$Id: conf.c 5289 2006-03-14 11:54:45Z mike $".
  */
index 42f4adae0e3bea9ca9ed8e9c6e0d5456a7ff4521..0a8b4c12aef1778fc2a517e67695a7e974541b5a 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: cups-polld.c 4638 2005-09-15 14:13:19Z mike $"
+ * "$Id: cups-polld.c 5305 2006-03-18 03:05:12Z mike $"
  *
  *   Polling daemon for the Common UNIX Printing System (CUPS).
  *
@@ -43,8 +43,9 @@
  * Local functions...
  */
 
-int    poll_server(http_t *http, cups_lang_t *language, ipp_op_t op,
-                   int sock, int port, int interval, const char *prefix);
+static int     poll_server(http_t *http, cups_lang_t *language, ipp_op_t op,
+                           int sock, int port, int interval,
+                           const char *prefix);
 
 
 /*
@@ -162,7 +163,7 @@ main(int  argc,                             /* I - Number of command-line arguments */
  * 'poll_server()' - Poll the server for the given set of printers or classes.
  */
 
-int                                    /* O - Number of seconds or -1 on error */
+static int                             /* O - Number of seconds or -1 on error */
 poll_server(http_t      *http,         /* I - HTTP connection */
             cups_lang_t *language,     /* I - Language */
            ipp_op_t    op,             /* I - Operation code */
@@ -401,5 +402,5 @@ poll_server(http_t      *http,              /* I - HTTP connection */
 
 
 /*
- * End of "$Id: cups-polld.c 4638 2005-09-15 14:13:19Z mike $".
+ * End of "$Id: cups-polld.c 5305 2006-03-18 03:05:12Z mike $".
  */
index d33ab58005e25842e25eef17169034f12f524067..dbdca8bef2c5b414cd0c93363d46966e1ffbbaa6 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: cupsd.h 5196 2006-02-27 21:23:00Z mike $"
+ * "$Id: cupsd.h 5305 2006-03-18 03:05:12Z mike $"
  *
  *   Main header file for the Common UNIX Printing System (CUPS) scheduler.
  *
@@ -173,10 +173,8 @@ VAR int                    Launchd         VALUE(0);
  * Prototypes...
  */
 
-extern void    cupsdCatchChildSignals(void);
 extern void    cupsdClearString(char **s);
 extern void    cupsdHoldSignals(void);
-extern void    cupsdIgnoreChildSignals(void);
 extern void    cupsdReleaseSignals(void);
 extern void    cupsdSetString(char **s, const char *v);
 extern void    cupsdSetStringf(char **s, const char *f, ...)
@@ -189,7 +187,6 @@ extern void cupsdStopServer(void);
 extern void    cupsdClosePipe(int *fds);
 extern int     cupsdOpenPipe(int *fds);
 
-extern void    cupsdClearEnv(void);
 extern void    cupsdInitEnv(void);
 extern int     cupsdLoadEnv(char *envp[], int envmax);
 extern void    cupsdSetEnv(const char *name, const char *value);
@@ -207,5 +204,5 @@ extern int  cupsdStartProcess(const char *command, char *argv[],
 
 
 /*
- * End of "$Id: cupsd.h 5196 2006-02-27 21:23:00Z mike $".
+ * End of "$Id: cupsd.h 5305 2006-03-18 03:05:12Z mike $".
  */
index 9cb76dfd4bee4eb14ad70f772efc80dd93d9c4b3..1c0be6a3b13ce5f1d85263a8120728cc2bf945e7 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: dirsvc.c 5223 2006-03-04 01:10:17Z mike $"
+ * "$Id: dirsvc.c 5305 2006-03-18 03:05:12Z mike $"
  *
  *   Directory services routines for the Common UNIX Printing System (CUPS).
  *
@@ -28,9 +28,6 @@
  *   cupsdSendBrowseDelete()       - Send a "browse delete" message for a
  *                                   printer.
  *   cupsdSendBrowseList()         - Send new browsing information as necessary.
- *   cupsdSendCUPSBrowse()         - Send new browsing information using the
- *                                   CUPS protocol.
- *   cupsdSendSLPBrowse()          - Register the specified printer with SLP.
  *   cupsdStartBrowsing()          - Start sending and receiving broadcast
  *                                   information.
  *   cupsdStartPolling()           - Start polling servers as needed.
  *   dequote()                     - Remote quotes from a string.
  *   process_browse_data()         - Process new browse data.
  *   process_implicit_classes()    - Create/update implicit classes as needed.
+ *   send_cups_browse()            - Send new browsing information using the
+ *                                   CUPS protocol.
+ *   send_ldap_browse()            - Send LDAP printer registrations.
+ *   send_slp_browse()             - Register the specified printer with SLP.
  *   slp_attr_callback()           - SLP attribute callback 
  *   slp_dereg_printer()           - SLPDereg() the specified printer
  *   slp_get_attr()                - Get an attribute from an SLP registration.
@@ -72,6 +73,11 @@ static void  process_browse_data(const char *uri, const char *host,
                                    const char *info, const char *make_model,
                                    int num_attrs, cups_option_t *attrs);
 static void    process_implicit_classes(void);
+static void    send_cups_browse(cupsd_printer_t *p);
+#ifdef HAVE_LDAP
+static void    send_ldap_browse(cupsd_printer_t *p);
+#endif /* HAVE_LDAP */
+static void    send_slp_browse(cupsd_printer_t *p);
 
 
 #ifdef HAVE_OPENLDAP
@@ -659,7 +665,7 @@ cupsdSendBrowseDelete(
   */
 
   if (BrowseLocalProtocols & BROWSE_CUPS)
-    cupsdSendCUPSBrowse(p);
+    send_cups_browse(p);
 #ifdef HAVE_LIBSLP
   if (BrowseLocalProtocols & BROWSE_SLP)
     slp_dereg_printer(p);
@@ -750,16 +756,16 @@ cupsdSendBrowseList(void)
        p->browse_time = time(NULL);
 
        if (BrowseLocalProtocols & BROWSE_CUPS)
-          cupsdSendCUPSBrowse(p);
+          send_cups_browse(p);
 
 #ifdef HAVE_LIBSLP
        if (BrowseLocalProtocols & BROWSE_SLP)
-          cupsdSendSLPBrowse(p);
+          send_slp_browse(p);
 #endif /* HAVE_LIBSLP */
 
 #ifdef HAVE_LDAP
        if (BrowseLocalProtocols & BROWSE_LDAP)
-          cupsdSendLDAPBrowse(p);
+          send_ldap_browse(p);
 #endif /* HAVE_LDAP */
       }
     }
@@ -807,1591 +813,1108 @@ cupsdSendBrowseList(void)
 
 
 /*
- * 'cupsdSendCUPSBrowse()' - Send new browsing information using the CUPS
- *                           protocol.
+ * 'cupsdStartBrowsing()' - Start sending and receiving broadcast information.
  */
 
 void
-cupsdSendCUPSBrowse(cupsd_printer_t *p)        /* I - Printer to send */
+cupsdStartBrowsing(void)
 {
-  int                  i;              /* Looping var */
-  cups_ptype_t         type;           /* Printer type */
-  cupsd_dirsvc_addr_t  *b;             /* Browse address */
-  int                  bytes;          /* Length of packet */
-  char                 packet[1453],   /* Browse data packet */
-                       uri[1024],      /* Printer URI */
-                       location[1024], /* printer-location */
-                       info[1024],     /* printer-info */
-                       make_model[1024];
-                                       /* printer-make-and-model */
-  cupsd_netif_t                *iface;         /* Network interface */
-
-
- /*
-  * Figure out the printer type value...
-  */
-
-  type = p->type | CUPS_PRINTER_REMOTE;
+  int                  val;            /* Socket option value */
+  struct sockaddr_in   addr;           /* Broadcast address */
 
-  if (!p->accepting)
-    type |= CUPS_PRINTER_REJECTING;
 
-  if (p == DefaultPrinter)
-    type |= CUPS_PRINTER_DEFAULT;
+  BrowseNext = NULL;
 
- /*
-  * Remove quotes from printer-info, printer-location, and
-  * printer-make-and-model attributes...
-  */
+  if (!Browsing || !(BrowseLocalProtocols | BrowseRemoteProtocols))
+    return;
 
-  dequote(location, p->location, sizeof(location));
-  dequote(info, p->info, sizeof(info));
-  dequote(make_model, p->make_model ? p->make_model : "Unknown",
-          sizeof(make_model));
+  if ((BrowseLocalProtocols | BrowseRemoteProtocols) & BROWSE_CUPS)
+  {
+    if (BrowseSocket < 0)
+    {
+     /*
+      * Create the broadcast socket...
+      */
 
- /*
-  * Send a packet to each browse address...
-  */
+      if ((BrowseSocket = socket(AF_INET, SOCK_DGRAM, 0)) < 0)
+      {
+       cupsdLogMessage(CUPSD_LOG_ERROR,
+                       "cupsdStartBrowsing: Unable to create broadcast "
+                       "socket - %s.", strerror(errno));
+       BrowseLocalProtocols &= ~BROWSE_CUPS;
+       BrowseRemoteProtocols &= ~BROWSE_CUPS;
+       return;
+      }
 
-  for (i = NumBrowsers, b = Browsers; i > 0; i --, b ++)
-    if (b->iface[0])
-    {
      /*
-      * Send the browse packet to one or more interfaces...
+      * Bind the socket to browse port...
       */
 
-      if (!strcmp(b->iface, "*"))
+      memset(&addr, 0, sizeof(addr));
+      addr.sin_addr.s_addr = htonl(INADDR_ANY);
+      addr.sin_family      = AF_INET;
+      addr.sin_port        = htons(BrowsePort);
+
+      if (bind(BrowseSocket, (struct sockaddr *)&addr, sizeof(addr)))
       {
-       /*
-        * Send to all local interfaces...
-       */
+       cupsdLogMessage(CUPSD_LOG_ERROR,
+                       "cupsdStartBrowsing: Unable to bind broadcast "
+                       "socket - %s.", strerror(errno));
 
-        cupsdNetIFUpdate();
+#ifdef WIN32
+       closesocket(BrowseSocket);
+#else
+       close(BrowseSocket);
+#endif /* WIN32 */
 
-       for (iface = (cupsd_netif_t *)cupsArrayFirst(NetIFList);
-            iface;
-            iface = (cupsd_netif_t *)cupsArrayNext(NetIFList))
-       {
-        /*
-         * Only send to local, IPv4 interfaces...
-         */
+       BrowseSocket = -1;
+       BrowseLocalProtocols &= ~BROWSE_CUPS;
+       BrowseRemoteProtocols &= ~BROWSE_CUPS;
+       return;
+      }
+    }
 
-         if (!iface->is_local || !iface->port ||
-             iface->address.addr.sa_family != AF_INET)
-           continue;
+   /*
+    * Set the "broadcast" flag...
+    */
 
-         httpAssembleURIf(HTTP_URI_CODING_ALL, uri, sizeof(uri), "ipp", NULL,
-                          iface->hostname, iface->port,
-                          (p->type & CUPS_PRINTER_CLASS) ? "/classes/%s%s" :
-                                                           "/printers/%s",
-                          p->name);
-         snprintf(packet, sizeof(packet), "%x %x %s \"%s\" \"%s\" \"%s\" %s\n",
-                  type, p->state, uri, location, info, make_model,
-                  p->browse_attrs ? p->browse_attrs : "");
+    val = 1;
+    if (setsockopt(BrowseSocket, SOL_SOCKET, SO_BROADCAST, &val, sizeof(val)))
+    {
+      cupsdLogMessage(CUPSD_LOG_ERROR,
+                      "cupsdStartBrowsing: Unable to set broadcast mode - %s.",
+                     strerror(errno));
 
-         bytes = strlen(packet);
+#ifdef WIN32
+      closesocket(BrowseSocket);
+#else
+      close(BrowseSocket);
+#endif /* WIN32 */
 
-         cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                         "cupsdSendBrowseList: (%d bytes to \"%s\") %s", bytes,
-                         iface->name, packet);
+      BrowseSocket = -1;
+      BrowseLocalProtocols &= ~BROWSE_CUPS;
+      BrowseRemoteProtocols &= ~BROWSE_CUPS;
+      return;
+    }
 
-          iface->broadcast.ipv4.sin_port = htons(BrowsePort);
+   /*
+    * Close the socket on exec...
+    */
 
-         sendto(BrowseSocket, packet, bytes, 0,
-                (struct sockaddr *)&(iface->broadcast),
-                sizeof(struct sockaddr_in));
-        }
-      }
-      else if ((iface = cupsdNetIFFind(b->iface)) != NULL)
-      {
-       /*
-        * Send to the named interface using the IPv4 address...
-       */
+    fcntl(BrowseSocket, F_SETFD, fcntl(BrowseSocket, F_GETFD) | FD_CLOEXEC);
 
-        while (iface)
-         if (strcmp(b->iface, iface->name))
-         {
-           iface = NULL;
-           break;
-         }
-         else if (iface->address.addr.sa_family == AF_INET && iface->port)
-           break;
-         else
-            iface = (cupsd_netif_t *)cupsArrayNext(NetIFList);
+   /*
+    * Finally, add the socket to the input selection set...
+    */
 
-        if (iface)
-       {
-         httpAssembleURIf(HTTP_URI_CODING_ALL, uri, sizeof(uri), "ipp", NULL,
-                          iface->hostname, iface->port,
-                          (p->type & CUPS_PRINTER_CLASS) ? "/classes/%s%s" :
-                                                           "/printers/%s",
-                          p->name);
-         snprintf(packet, sizeof(packet), "%x %x %s \"%s\" \"%s\" \"%s\" %s\n",
-                  type, p->state, uri, location, info, make_model,
-                  p->browse_attrs ? p->browse_attrs : "");
+    cupsdLogMessage(CUPSD_LOG_DEBUG2,
+                    "cupsdStartBrowsing: Adding fd %d to InputSet...",
+                    BrowseSocket);
 
-         bytes = strlen(packet);
+    FD_SET(BrowseSocket, InputSet);
+  }
+  else
+    BrowseSocket = -1;
 
-         cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                         "cupsdSendBrowseList: (%d bytes to \"%s\") %s", bytes,
-                         iface->name, packet);
+#ifdef HAVE_LIBSLP
+  if ((BrowseLocalProtocols | BrowseRemoteProtocols) & BROWSE_SLP)
+  {
+   /* 
+    * Open SLP handle...
+    */
 
-          iface->broadcast.ipv4.sin_port = htons(BrowsePort);
+    if (SLPOpen("en", SLP_FALSE, &BrowseSLPHandle) != SLP_OK)
+    {
+      cupsdLogMessage(CUPSD_LOG_ERROR,
+                      "Unable to open an SLP handle; disabling SLP browsing!");
+      BrowseLocalProtocols &= ~BROWSE_SLP;
+      BrowseRemoteProtocols &= ~BROWSE_SLP;
+    }
 
-         sendto(BrowseSocket, packet, bytes, 0,
-                (struct sockaddr *)&(iface->broadcast),
-                sizeof(struct sockaddr_in));
-        }
-      }
+    BrowseSLPRefresh = 0;
+  }
+#endif /* HAVE_LIBSLP */
+
+#ifdef HAVE_OPENLDAP
+  if ((BrowseLocalProtocols | BrowseRemoteProtocols) & BROWSE_LDAP)
+  {
+    if (!BrowseLDAPDN)
+    {
+      cupsdLogMessage(CUPSD_LOG_ERROR,
+                      "Need to set BrowseLDAPDN to use LDAP browsing!");
+      BrowseLocalProtocols &= ~BROWSE_LDAP;
+      BrowseRemoteProtocols &= ~BROWSE_LDAP;
     }
     else
     {
-     /*
-      * Send the browse packet to the indicated address using
-      * the default server name...
+     /* 
+      * Open LDAP handle...
       */
 
-      snprintf(packet, sizeof(packet), "%x %x %s \"%s\" \"%s\" \"%s\" %s\n",
-                      type, p->state, p->uri, location, info, make_model,
-              p->browse_attrs ? p->browse_attrs : "");
-
-      bytes = strlen(packet);
-      cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                      "cupsdSendBrowseList: (%d bytes) %s", bytes, packet);
+      int              rc;             /* LDAP API status */
+      int              version = 3;    /* LDAP version */
+      struct berval    bv = {0, ""};   /* SASL bind value */
 
-      if (sendto(BrowseSocket, packet, bytes, 0,
-                (struct sockaddr *)&(b->to),
-                sizeof(struct sockaddr_in)) <= 0)
-      {
-       /*
-        * Unable to send browse packet, so remove this address from the
-       * list...
-       */
 
-       cupsdLogMessage(CUPSD_LOG_ERROR,
-                       "cupsdSendBrowseList: sendto failed for browser "
-                       "%d - %s.",
-                       b - Browsers + 1, strerror(errno));
+     /*
+      * LDAP stuff currently only supports ldapi EXTERNAL SASL binds...
+      */
 
-        if (i > 1)
-         memmove(b, b + 1, (i - 1) * sizeof(cupsd_dirsvc_addr_t));
+      if (!BrowseLDAPServer || !strcasecmp(BrowseLDAPServer, "localhost")) 
+        rc = ldap_initialize(&BrowseLDAPHandle, "ldapi:///");
+      else     
+       rc = ldap_initialize(&BrowseLDAPHandle, BrowseLDAPServer);
 
-       b --;
-       NumBrowsers --;
+      if (rc != LDAP_SUCCESS)
+      {
+       cupsdLogMessage(CUPSD_LOG_ERROR,
+                       "Unable to initialize LDAP; disabling LDAP browsing!");
+       BrowseLocalProtocols &= ~BROWSE_LDAP;
+       BrowseRemoteProtocols &= ~BROWSE_LDAP;
+      }
+      else if (ldap_set_option(BrowseLDAPHandle, LDAP_OPT_PROTOCOL_VERSION,
+                               (const void *)&version) != LDAP_SUCCESS)
+      {
+       ldap_unbind_ext(BrowseLDAPHandle, NULL, NULL);
+       BrowseLDAPHandle = NULL;
+       cupsdLogMessage(CUPSD_LOG_ERROR,
+                       "Unable to set LDAP protocol version; "
+                       "disabling LDAP browsing!");
+       BrowseLocalProtocols &= ~BROWSE_LDAP;
+       BrowseRemoteProtocols &= ~BROWSE_LDAP;
+      }
+      else
+      {
+       if (!BrowseLDAPServer || !strcasecmp(BrowseLDAPServer, "localhost"))
+         rc = ldap_sasl_bind_s(BrowseLDAPHandle, NULL, "EXTERNAL", &bv, NULL,
+                               NULL, NULL);
+       else
+         rc = ldap_bind_s(BrowseLDAPHandle, BrowseLDAPBindDN,
+                          BrowseLDAPPassword, LDAP_AUTH_SIMPLE);
+
+       if (rc != LDAP_SUCCESS)
+       {
+         cupsdLogMessage(CUPSD_LOG_ERROR,
+                         "Unable to bind to LDAP server; "
+                         "disabling LDAP browsing!");
+         ldap_unbind_ext(BrowseLDAPHandle, NULL, NULL);
+         BrowseLocalProtocols &= ~BROWSE_LDAP;
+         BrowseRemoteProtocols &= ~BROWSE_LDAP;
+       }
       }
     }
+
+    BrowseLDAPRefresh = 0;
+  }
+#endif /* HAVE_OPENLDAP */
 }
 
 
-#ifdef HAVE_OPENLDAP
 /*
- * cupsdSendLDAPBrowse()' - Send LDAP printer registrations.
+ * 'cupsdStartPolling()' - Start polling servers as needed.
  */
 
-void 
-cupsdSendLDAPBrowse(cupsd_printer_t *p)        /* I - Printer to register */
+void
+cupsdStartPolling(void)
 {
-  int          i;                      /* Looping var... */
-  LDAPMod      mods[7];                /* The 7 attributes we will be adding */
-  LDAPMod      *pmods[8];              /* Pointers to the 7 attributes + NULL */
-  LDAPMessage  *res;                   /* Search result token */
-  char         *cn_value[2],           /* Change records */
-               *uri[2],
-               *info[2],
-               *location[2],
-               *make_model[2],
-               *type[2],
-               typestring[255],        /* String to hold printer-type */
-               filter[256],            /* Search filter for possible UPDATEs */
-               dn[1024];               /* DN of the printer we are adding */
-  int          rc;                     /* LDAP status */
-  static const char * const objectClass_values[] =
-               {                       /* The 3 objectClass's we use in */
-                 "top",                /* our LDAP entries              */
-                 "device",
-                 "cupsPrinter",
-                 NULL
-               };
+  int                  i;              /* Looping var */
+  cupsd_dirsvc_poll_t  *pollp;         /* Current polling server */
+  char                 polld[1024];    /* Poll daemon path */
+  char                 sport[10];      /* Server port */
+  char                 bport[10];      /* Browser port */
+  char                 interval[10];   /* Poll interval */
+  int                  statusfds[2];   /* Status pipe */
+  char                 *argv[6];       /* Arguments */
+  char                 *envp[100];     /* Environment */
 
-  cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdSendLDAPBrowse: %s\n", p->name);
 
  /*
-  * Everything in ldap is ** so we fudge around it...
+  * Don't do anything if we aren't polling...
   */
 
-  sprintf(typestring, "%u", p->type);
+  if (NumPolled == 0)
+  {
+    PollPipe         = -1;
+    PollStatusBuffer = NULL;
+    return;
+  }
 
-  cn_value[0]   = p->info;
-  cn_value[1]   = NULL;
-  info[0]       = p->info;
-  info[1]       = NULL;
-  location[0]   = p->location;
-  location[1]   = NULL;
-  make_model[0] = p->make_model;
-  make_model[1] = NULL;
-  type[0]       = typestring;
-  type[1]       = NULL;
-  uri[0]        = p->uri;
-  uri[1]        = NULL;
+ /*
+  * Setup string arguments for polld, port and interval options.
+  */
 
-  snprintf(filter, sizeof(filter),
-           "(&(objectclass=cupsPrinter)(printerDescription~=%s))", p->info);
+  snprintf(polld, sizeof(polld), "%s/daemon/cups-polld", ServerBin);
 
-  ldap_search_s(BrowseLDAPHandle, BrowseLDAPDN, LDAP_SCOPE_SUBTREE,
-                filter, (char **)ldap_attrs, 0, &res);
-  cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdSendLDAPBrowse: Searching \"%s\"",
-                  filter);
+  sprintf(bport, "%d", BrowsePort);
 
-  mods[0].mod_type = "cn";
-  mods[0].mod_values = cn_value;
-  mods[1].mod_type = "printerDescription";
-  mods[1].mod_values = info;
-  mods[2].mod_type = "printerURI";
-  mods[2].mod_values = uri;
-  mods[3].mod_type = "printerLocation";
-  mods[3].mod_values = location;
-  mods[4].mod_type = "printerMakeAndModel";
-  mods[4].mod_values = make_model;
-  mods[5].mod_type = "printerType";
-  mods[5].mod_values = type;
-  mods[6].mod_type = "objectClass";
-  mods[6].mod_values = (char **)objectClass_values;
+  if (BrowseInterval)
+    sprintf(interval, "%d", BrowseInterval);
+  else
+    strcpy(interval, "30");
 
-  snprintf(dn, sizeof(dn), "cn=%s,ou=printers,%s", p->info, BrowseLDAPDN);
-  cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdSendLDAPBrowse: dn=\"%s\"", dn);
+  argv[0] = "cups-polld";
+  argv[2] = sport;
+  argv[3] = interval;
+  argv[4] = bport;
+  argv[5] = NULL;
 
-  if (ldap_count_entries(BrowseLDAPHandle, res) > 0)
+  cupsdLoadEnv(envp, (int)(sizeof(envp) / sizeof(envp[0])));
+
+ /*
+  * Create a pipe that receives the status messages from each
+  * polling daemon...
+  */
+
+  if (cupsdOpenPipe(statusfds))
   {
-   /*
-    * Printer has already been registered, modify the current
-    * registration...
-    */
+    cupsdLogMessage(CUPSD_LOG_ERROR,
+                    "Unable to create polling status pipes - %s.",
+                   strerror(errno));
+    PollPipe         = -1;
+    PollStatusBuffer = NULL;
+    return;
+  }
 
-    cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                    "cupsdSendLDAPBrowse: Replacing entry...");
+  PollPipe         = statusfds[0];
+  PollStatusBuffer = cupsdStatBufNew(PollPipe, "[Poll]");
 
-    for (i = 0; i < 7; i ++)
-    {
-      pmods[i]         = mods + i;
-      pmods[i]->mod_op = LDAP_MOD_REPLACE;
-    }
-    pmods[i] = NULL;
+ /*
+  * Run each polling daemon, redirecting stderr to the polling pipe...
+  */
 
-    if ((rc = ldap_modify_s(BrowseLDAPHandle, dn, pmods)) != LDAP_SUCCESS)
-      cupsdLogMessage(CUPSD_LOG_ERROR,
-                      "LDAP modify for %s failed with status %d: %s",
-                      p->name, rc, ldap_err2string(rc));
-  }
-  else 
+  for (i = 0, pollp = Polled; i < NumPolled; i ++, pollp ++)
   {
-   /*
-    * Printer has already been registered, modify the current
-    * registration...
-    */
+    sprintf(sport, "%d", pollp->port);
 
-    cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                    "cupsdSendLDAPBrowse: Adding entry...");
+    argv[1] = pollp->hostname;
 
-    for (i = 0; i < 7; i ++)
+    if (cupsdStartProcess(polld, argv, envp, -1, -1, statusfds[1], -1,
+                          0, &(pollp->pid)) < 0)
     {
-      pmods[i]         = mods + i;
-      pmods[i]->mod_op = LDAP_MOD_REPLACE;
-    }
-    pmods[i] = NULL;
-
-    if ((rc = ldap_modify_s(BrowseLDAPHandle, dn, pmods)) != LDAP_SUCCESS)
       cupsdLogMessage(CUPSD_LOG_ERROR,
-                      "LDAP add for %s failed with status %d: %s",
-                      p->name, rc, ldap_err2string(rc));
+                      "cupsdStartPolling: Unable to fork polling daemon - %s",
+                      strerror(errno));
+      pollp->pid = 0;
+      break;
+    }
+    else
+      cupsdLogMessage(CUPSD_LOG_DEBUG,
+                      "cupsdStartPolling: Started polling daemon for %s:%d, pid = %d",
+                      pollp->hostname, pollp->port, pollp->pid);
   }
+
+  close(statusfds[1]);
+
+ /*
+  * Finally, add the pipe to the input selection set...
+  */
+
+  cupsdLogMessage(CUPSD_LOG_DEBUG2,
+                  "cupsdStartPolling: Adding fd %d to InputSet...", PollPipe);
+
+  FD_SET(PollPipe, InputSet);
 }
-#endif /* HAVE_OPENLDAP */
 
 
-#ifdef HAVE_LIBSLP
 /*
- * 'cupsdSendSLPBrowse()' - Register the specified printer with SLP.
+ * 'cupsdStopBrowsing()' - Stop sending and receiving broadcast information.
  */
 
-void 
-cupsdSendSLPBrowse(cupsd_printer_t *p) /* I - Printer to register */
+void
+cupsdStopBrowsing(void)
 {
-  char         srvurl[HTTP_MAX_URI],   /* Printer service URI */
-               attrs[8192],            /* Printer attributes */
-               finishings[1024],       /* Finishings to support */
-               make_model[IPP_MAX_NAME * 2],
-                                       /* Make and model, quoted */
-               location[IPP_MAX_NAME * 2],
-                                       /* Location, quoted */
-               info[IPP_MAX_NAME * 2], /* Info, quoted */
-               *src,                   /* Pointer to original string */
-               *dst;                   /* Pointer to destination string */
-  ipp_attribute_t *authentication;     /* uri-authentication-supported value */
-  SLPError     error;                  /* SLP error, if any */
-
+  if (!Browsing || !(BrowseLocalProtocols | BrowseRemoteProtocols))
+    return;
 
-  cupsdLogMessage(CUPSD_LOG_DEBUG, "cupsdSendSLPBrowse(%p = \"%s\")", p,
-                  p->name);
+  if (((BrowseLocalProtocols | BrowseRemoteProtocols) & BROWSE_CUPS) &&
+      BrowseSocket >= 0)
+  {
+   /*
+    * Close the socket and remove it from the input selection set.
+    */
 
- /*
-  * Make the SLP service URL that conforms to the IANA 
-  * 'printer:' template.
-  */
+#ifdef WIN32
+    closesocket(BrowseSocket);
+#else
+    close(BrowseSocket);
+#endif /* WIN32 */
 
-  snprintf(srvurl, sizeof(srvurl), SLP_CUPS_SRVTYPE ":%s", p->uri);
+    cupsdLogMessage(CUPSD_LOG_DEBUG2,
+                   "cupsdStopBrowsing: Removing fd %d from InputSet...",
+                   BrowseSocket);
 
-  cupsdLogMessage(CUPSD_LOG_DEBUG2, "Service URL = \"%s\"", srvurl);
+    FD_CLR(BrowseSocket, InputSet);
+    BrowseSocket = -1;
+  }
 
- /*
-  * Figure out the finishings string...
-  */
+#ifdef HAVE_LIBSLP
+  if (((BrowseLocalProtocols | BrowseRemoteProtocols) & BROWSE_SLP) &&
+      BrowseSLPHandle)
+  {
+   /* 
+    * Close SLP handle...
+    */
 
-  if (p->type & CUPS_PRINTER_STAPLE)
-    strcpy(finishings, "staple");
-  else
-    finishings[0] = '\0';
-
-  if (p->type & CUPS_PRINTER_BIND)
-  {
-    if (finishings[0])
-      strlcat(finishings, ",bind", sizeof(finishings));
-    else
-      strcpy(finishings, "bind");
+    SLPClose(BrowseSLPHandle);
+    BrowseSLPHandle = NULL;
   }
+#endif /* HAVE_LIBSLP */
 
-  if (p->type & CUPS_PRINTER_PUNCH)
+#ifdef HAVE_OPENDAP
+  if (((BrowseLocalProtocols | BrowseRemoteProtocols) & BROWSE_LDAP) &&
+      BrowseLDAPHandle)
   {
-    if (finishings[0])
-      strlcat(finishings, ",punch", sizeof(finishings));
-    else
-      strcpy(finishings, "punch");
+    ldap_unbind(BrowseLDAPHandle);
+    BrowseLDAPHandle = NULL;
   }
+#endif /* HAVE_OPENLDAP */
+}
 
-  if (p->type & CUPS_PRINTER_COVER)
-  {
-    if (finishings[0])
-      strlcat(finishings, ",cover", sizeof(finishings));
-    else
-      strcpy(finishings, "cover");
-  }
 
-  if (p->type & CUPS_PRINTER_SORT)
-  {
-    if (finishings[0])
-      strlcat(finishings, ",sort", sizeof(finishings));
-    else
-      strcpy(finishings, "sort");
-  }
+/*
+ * 'cupsdStopPolling()' - Stop polling servers as needed.
+ */
 
-  if (!finishings[0])
-    strcpy(finishings, "none");
+void
+cupsdStopPolling(void)
+{
+  int                  i;              /* Looping var */
+  cupsd_dirsvc_poll_t  *pollp;         /* Current polling server */
 
- /*
-  * Quote any commas in the make and model, location, and info strings...
-  */
 
-  for (src = p->make_model, dst = make_model;
-       src && *src && dst < (make_model + sizeof(make_model) - 2);)
+  if (PollPipe >= 0)
   {
-    if (*src == ',' || *src == '\\' || *src == ')')
-      *dst++ = '\\';
+    cupsdStatBufDelete(PollStatusBuffer);
+    close(PollPipe);
 
-    *dst++ = *src++;
+    cupsdLogMessage(CUPSD_LOG_DEBUG2,
+                    "cupsdStopPolling: removing fd %d from InputSet.", PollPipe);
+    FD_CLR(PollPipe, InputSet);
+
+    PollPipe         = -1;
+    PollStatusBuffer = NULL;
   }
 
-  *dst = '\0';
+  for (i = 0, pollp = Polled; i < NumPolled; i ++, pollp ++)
+    if (pollp->pid)
+      cupsdEndProcess(pollp->pid, 0);
+}
 
-  if (!make_model[0])
-    strcpy(make_model, "Unknown");
 
-  for (src = p->location, dst = location;
-       src && *src && dst < (location + sizeof(location) - 2);)
-  {
-    if (*src == ',' || *src == '\\' || *src == ')')
-      *dst++ = '\\';
+/*
+ * 'cupsdUpdateCUPSBrowse()' - Update the browse lists using the CUPS protocol.
+ */
 
-    *dst++ = *src++;
-  }
+void
+cupsdUpdateCUPSBrowse(void)
+{
+  int          i;                      /* Looping var */
+  int          auth;                   /* Authorization status */
+  int          len;                    /* Length of name string */
+  int          bytes;                  /* Number of bytes left */
+  char         packet[1541],           /* Broadcast packet */
+               *pptr;                  /* Pointer into packet */
+  socklen_t    srclen;                 /* Length of source address */
+  http_addr_t  srcaddr;                /* Source address */
+  char         srcname[1024];          /* Source hostname */
+  unsigned     address[4];             /* Source address */
+  unsigned     type;                   /* Printer type */
+  unsigned     state;                  /* Printer state */
+  char         uri[HTTP_MAX_URI],      /* Printer URI */
+               host[HTTP_MAX_URI],     /* Host portion of URI */
+               resource[HTTP_MAX_URI], /* Resource portion of URI */
+               info[IPP_MAX_NAME],     /* Information string */
+               location[IPP_MAX_NAME], /* Location string */
+               make_model[IPP_MAX_NAME];/* Make and model string */
+  int          num_attrs;              /* Number of attributes */
+  cups_option_t        *attrs;                 /* Attributes */
 
-  *dst = '\0';
 
-  if (!location[0])
-    strcpy(location, "Unknown");
+ /*
+  * Read a packet from the browse socket...
+  */
 
-  for (src = p->info, dst = info;
-       src && *src && dst < (info + sizeof(info) - 2);)
+  srclen = sizeof(srcaddr);
+  if ((bytes = recvfrom(BrowseSocket, packet, sizeof(packet) - 1, 0, 
+                        (struct sockaddr *)&srcaddr, &srclen)) < 0)
   {
-    if (*src == ',' || *src == '\\' || *src == ')')
-      *dst++ = '\\';
-
-    *dst++ = *src++;
-  }
+   /*
+    * "Connection refused" is returned under Linux if the destination port
+    * or address is unreachable from a previous sendto(); check for the
+    * error here and ignore it for now...
+    */
 
-  *dst = '\0';
+    if (errno != ECONNREFUSED && errno != EAGAIN)
+    {
+      cupsdLogMessage(CUPSD_LOG_ERROR, "Browse recv failed - %s.",
+                      strerror(errno));
+      cupsdLogMessage(CUPSD_LOG_ERROR, "Browsing turned off.");
 
-  if (!info[0])
-    strcpy(info, "Unknown");
+      cupsdStopBrowsing();
+      Browsing = 0;
+    }
 
- /*
-  * Get the authentication value...
-  */
+    return;
+  }
 
-  authentication = ippFindAttribute(p->attrs, "uri-authentication-supported",
-                                    IPP_TAG_KEYWORD);
+  packet[bytes] = '\0';
 
  /*
-  * Make the SLP attribute string list that conforms to
-  * the IANA 'printer:' template.
+  * If we're about to sleep, ignore incoming browse packets.
   */
 
-  snprintf(attrs, sizeof(attrs),
-           "(printer-uri-supported=%s),"
-           "(uri-authentication-supported=%s>),"
-#ifdef HAVE_SSL
-           "(uri-security-supported=tls>),"
-#else
-           "(uri-security-supported=none>),"
-#endif /* HAVE_SSL */
-           "(printer-name=%s),"
-           "(printer-location=%s),"
-           "(printer-info=%s),"
-           "(printer-more-info=%s),"
-           "(printer-make-and-model=%s),"
-          "(printer-type=%d),"
-          "(charset-supported=utf-8),"
-          "(natural-language-configured=%s),"
-          "(natural-language-supported=de,en,es,fr,it),"
-           "(color-supported=%s),"
-           "(finishings-supported=%s),"
-           "(sides-supported=one-sided%s),"
-          "(multiple-document-jobs-supported=true)"
-          "(ipp-versions-supported=1.0,1.1)",
-          p->uri, authentication->values[0].string.text, p->name, location,
-          info, p->uri, make_model, p->type, DefaultLanguage,
-           p->type & CUPS_PRINTER_COLOR ? "true" : "false",
-           finishings,
-           p->type & CUPS_PRINTER_DUPLEX ?
-              ",two-sided-long-edge,two-sided-short-edge" : "");
-
-  cupsdLogMessage(CUPSD_LOG_DEBUG2, "Attributes = \"%s\"", attrs);
+  if (Sleeping)
+    return;
 
  /*
-  * Register the printer with the SLP server...
+  * Figure out where it came from...
   */
 
-  error = SLPReg(BrowseSLPHandle, srvurl, BrowseTimeout,
-                SLP_CUPS_SRVTYPE, attrs, SLP_TRUE, slp_reg_callback, 0);
-
-  if (error != SLP_OK)
-    cupsdLogMessage(CUPSD_LOG_ERROR, "SLPReg of \"%s\" failed with status %d!", p->name,
-                    error);
-}
-#endif /* HAVE_LIBSLP */
-
-
-/*
- * 'cupsdStartBrowsing()' - Start sending and receiving broadcast information.
- */
-
-void
-cupsdStartBrowsing(void)
-{
-  int                  val;            /* Socket option value */
-  struct sockaddr_in   addr;           /* Broadcast address */
+#ifdef AF_INET6
+  if (srcaddr.addr.sa_family == AF_INET6)
+  {
+    address[0] = ntohl(srcaddr.ipv6.sin6_addr.s6_addr32[0]);
+    address[1] = ntohl(srcaddr.ipv6.sin6_addr.s6_addr32[1]);
+    address[2] = ntohl(srcaddr.ipv6.sin6_addr.s6_addr32[2]);
+    address[3] = ntohl(srcaddr.ipv6.sin6_addr.s6_addr32[3]);
+  }
+  else
+#endif /* AF_INET6 */
+  {
+    address[0] = 0;
+    address[1] = 0;
+    address[2] = 0;
+    address[3] = ntohl(srcaddr.ipv4.sin_addr.s_addr);
+  }
 
+  if (HostNameLookups)
+    httpAddrLookup(&srcaddr, srcname, sizeof(srcname));
+  else
+    httpAddrString(&srcaddr, srcname, sizeof(srcname));
 
-  BrowseNext = NULL;
+  len = strlen(srcname);
 
-  if (!Browsing || !(BrowseLocalProtocols | BrowseRemoteProtocols))
-    return;
+ /*
+  * Do ACL stuff...
+  */
 
-  if ((BrowseLocalProtocols | BrowseRemoteProtocols) & BROWSE_CUPS)
+  if (BrowseACL)
   {
-    if (BrowseSocket < 0)
+    if (httpAddrLocalhost(&srcaddr) || !strcasecmp(srcname, "localhost"))
     {
      /*
-      * Create the broadcast socket...
+      * Access from localhost (127.0.0.1) is always allowed...
       */
 
-      if ((BrowseSocket = socket(AF_INET, SOCK_DGRAM, 0)) < 0)
-      {
-       cupsdLogMessage(CUPSD_LOG_ERROR,
-                       "cupsdStartBrowsing: Unable to create broadcast "
-                       "socket - %s.", strerror(errno));
-       BrowseLocalProtocols &= ~BROWSE_CUPS;
-       BrowseRemoteProtocols &= ~BROWSE_CUPS;
-       return;
-      }
-
+      auth = AUTH_ALLOW;
+    }
+    else
+    {
      /*
-      * Bind the socket to browse port...
+      * Do authorization checks on the domain/address...
       */
 
-      memset(&addr, 0, sizeof(addr));
-      addr.sin_addr.s_addr = htonl(INADDR_ANY);
-      addr.sin_family      = AF_INET;
-      addr.sin_port        = htons(BrowsePort);
-
-      if (bind(BrowseSocket, (struct sockaddr *)&addr, sizeof(addr)))
+      switch (BrowseACL->order_type)
       {
-       cupsdLogMessage(CUPSD_LOG_ERROR,
-                       "cupsdStartBrowsing: Unable to bind broadcast "
-                       "socket - %s.", strerror(errno));
+        default :
+           auth = AUTH_DENY;   /* anti-compiler-warning-code */
+           break;
 
-#ifdef WIN32
-       closesocket(BrowseSocket);
-#else
-       close(BrowseSocket);
-#endif /* WIN32 */
+       case AUTH_ALLOW : /* Order Deny,Allow */
+            auth = AUTH_ALLOW;
 
-       BrowseSocket = -1;
-       BrowseLocalProtocols &= ~BROWSE_CUPS;
-       BrowseRemoteProtocols &= ~BROWSE_CUPS;
-       return;
-      }
-    }
+            if (cupsdCheckAuth(address, srcname, len,
+                         BrowseACL->num_deny, BrowseACL->deny))
+             auth = AUTH_DENY;
 
-   /*
-    * Set the "broadcast" flag...
-    */
+            if (cupsdCheckAuth(address, srcname, len,
+                         BrowseACL->num_allow, BrowseACL->allow))
+             auth = AUTH_ALLOW;
+           break;
 
-    val = 1;
-    if (setsockopt(BrowseSocket, SOL_SOCKET, SO_BROADCAST, &val, sizeof(val)))
-    {
-      cupsdLogMessage(CUPSD_LOG_ERROR,
-                      "cupsdStartBrowsing: Unable to set broadcast mode - %s.",
-                     strerror(errno));
+       case AUTH_DENY : /* Order Allow,Deny */
+            auth = AUTH_DENY;
 
-#ifdef WIN32
-      closesocket(BrowseSocket);
-#else
-      close(BrowseSocket);
-#endif /* WIN32 */
+            if (cupsdCheckAuth(address, srcname, len,
+                         BrowseACL->num_allow, BrowseACL->allow))
+             auth = AUTH_ALLOW;
 
-      BrowseSocket = -1;
-      BrowseLocalProtocols &= ~BROWSE_CUPS;
-      BrowseRemoteProtocols &= ~BROWSE_CUPS;
-      return;
+            if (cupsdCheckAuth(address, srcname, len,
+                         BrowseACL->num_deny, BrowseACL->deny))
+             auth = AUTH_DENY;
+           break;
+      }
     }
+  }
+  else
+    auth = AUTH_ALLOW;
 
-   /*
-    * Close the socket on exec...
-    */
-
-    fcntl(BrowseSocket, F_SETFD, fcntl(BrowseSocket, F_GETFD) | FD_CLOEXEC);
+  if (auth == AUTH_DENY)
+  {
+    cupsdLogMessage(CUPSD_LOG_DEBUG,
+                    "cupsdUpdateCUPSBrowse: Refused %d bytes from %s", bytes,
+                    srcname);
+    return;
+  }
 
-   /*
-    * Finally, add the socket to the input selection set...
-    */
+  cupsdLogMessage(CUPSD_LOG_DEBUG2,
+                  "cupsdUpdateCUPSBrowse: (%d bytes from %s) %s", bytes,
+                 srcname, packet);
 
-    cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                    "cupsdStartBrowsing: Adding fd %d to InputSet...",
-                    BrowseSocket);
+ /*
+  * Parse packet...
+  */
 
-    FD_SET(BrowseSocket, InputSet);
+  if (sscanf(packet, "%x%x%1023s", &type, &state, uri) < 3)
+  {
+    cupsdLogMessage(CUPSD_LOG_WARN,
+                    "cupsdUpdateCUPSBrowse: Garbled browse packet - %s", packet);
+    return;
   }
-  else
-    BrowseSocket = -1;
 
-#ifdef HAVE_LIBSLP
-  if ((BrowseLocalProtocols | BrowseRemoteProtocols) & BROWSE_SLP)
+  strcpy(location, "Location Unknown");
+  strcpy(info, "No Information Available");
+  make_model[0] = '\0';
+  num_attrs     = 0;
+  attrs         = NULL;
+
+  if ((pptr = strchr(packet, '\"')) != NULL)
   {
-   /* 
-    * Open SLP handle...
+   /*
+    * Have extended information; can't use sscanf for it because not all
+    * sscanf's allow empty strings with %[^\"]...
     */
 
-    if (SLPOpen("en", SLP_FALSE, &BrowseSLPHandle) != SLP_OK)
-    {
-      cupsdLogMessage(CUPSD_LOG_ERROR,
-                      "Unable to open an SLP handle; disabling SLP browsing!");
-      BrowseLocalProtocols &= ~BROWSE_SLP;
-      BrowseRemoteProtocols &= ~BROWSE_SLP;
-    }
+    for (i = 0, pptr ++;
+         i < (sizeof(location) - 1) && *pptr && *pptr != '\"';
+         i ++, pptr ++)
+      location[i] = *pptr;
 
-    BrowseSLPRefresh = 0;
-  }
-#endif /* HAVE_LIBSLP */
+    if (i)
+      location[i] = '\0';
 
-#ifdef HAVE_OPENLDAP
-  if ((BrowseLocalProtocols | BrowseRemoteProtocols) & BROWSE_LDAP)
-  {
-    if (!BrowseLDAPDN)
-    {
-      cupsdLogMessage(CUPSD_LOG_ERROR,
-                      "Need to set BrowseLDAPDN to use LDAP browsing!");
-      BrowseLocalProtocols &= ~BROWSE_LDAP;
-      BrowseRemoteProtocols &= ~BROWSE_LDAP;
-    }
-    else
-    {
-     /* 
-      * Open LDAP handle...
-      */
+    if (*pptr == '\"')
+      pptr ++;
 
-      int              rc;             /* LDAP API status */
-      int              version = 3;    /* LDAP version */
-      struct berval    bv = {0, ""};   /* SASL bind value */
+    while (*pptr && isspace(*pptr & 255))
+      pptr ++;
 
+    if (*pptr == '\"')
+    {
+      for (i = 0, pptr ++;
+           i < (sizeof(info) - 1) && *pptr && *pptr != '\"';
+           i ++, pptr ++)
+       info[i] = *pptr;
 
-     /*
-      * LDAP stuff currently only supports ldapi EXTERNAL SASL binds...
-      */
+      info[i] = '\0';
 
-      if (!BrowseLDAPServer || !strcasecmp(BrowseLDAPServer, "localhost")) 
-        rc = ldap_initialize(&BrowseLDAPHandle, "ldapi:///");
-      else     
-       rc = ldap_initialize(&BrowseLDAPHandle, BrowseLDAPServer);
+      if (*pptr == '\"')
+       pptr ++;
 
-      if (rc != LDAP_SUCCESS)
-      {
-       cupsdLogMessage(CUPSD_LOG_ERROR,
-                       "Unable to initialize LDAP; disabling LDAP browsing!");
-       BrowseLocalProtocols &= ~BROWSE_LDAP;
-       BrowseRemoteProtocols &= ~BROWSE_LDAP;
-      }
-      else if (ldap_set_option(BrowseLDAPHandle, LDAP_OPT_PROTOCOL_VERSION,
-                               (const void *)&version) != LDAP_SUCCESS)
-      {
-       ldap_unbind_ext(BrowseLDAPHandle, NULL, NULL);
-       BrowseLDAPHandle = NULL;
-       cupsdLogMessage(CUPSD_LOG_ERROR,
-                       "Unable to set LDAP protocol version; "
-                       "disabling LDAP browsing!");
-       BrowseLocalProtocols &= ~BROWSE_LDAP;
-       BrowseRemoteProtocols &= ~BROWSE_LDAP;
-      }
-      else
+      while (*pptr && isspace(*pptr & 255))
+       pptr ++;
+
+      if (*pptr == '\"')
       {
-       if (!BrowseLDAPServer || !strcasecmp(BrowseLDAPServer, "localhost"))
-         rc = ldap_sasl_bind_s(BrowseLDAPHandle, NULL, "EXTERNAL", &bv, NULL,
-                               NULL, NULL);
-       else
-         rc = ldap_bind_s(BrowseLDAPHandle, BrowseLDAPBindDN,
-                          BrowseLDAPPassword, LDAP_AUTH_SIMPLE);
+       for (i = 0, pptr ++;
+             i < (sizeof(make_model) - 1) && *pptr && *pptr != '\"';
+             i ++, pptr ++)
+         make_model[i] = *pptr;
 
-       if (rc != LDAP_SUCCESS)
-       {
-         cupsdLogMessage(CUPSD_LOG_ERROR,
-                         "Unable to bind to LDAP server; "
-                         "disabling LDAP browsing!");
-         ldap_unbind_ext(BrowseLDAPHandle, NULL, NULL);
-         BrowseLocalProtocols &= ~BROWSE_LDAP;
-         BrowseRemoteProtocols &= ~BROWSE_LDAP;
-       }
+       if (*pptr == '\"')
+         pptr ++;
+
+       make_model[i] = '\0';
+
+        if (*pptr)
+         num_attrs = cupsParseOptions(pptr, num_attrs, &attrs);
       }
     }
-
-    BrowseLDAPRefresh = 0;
   }
-#endif /* HAVE_OPENLDAP */
-}
-
-
-/*
- * 'cupsdStartPolling()' - Start polling servers as needed.
- */
-
-void
-cupsdStartPolling(void)
-{
-  int                  i;              /* Looping var */
-  cupsd_dirsvc_poll_t  *pollp;         /* Current polling server */
-  char                 polld[1024];    /* Poll daemon path */
-  char                 sport[10];      /* Server port */
-  char                 bport[10];      /* Browser port */
-  char                 interval[10];   /* Poll interval */
-  int                  statusfds[2];   /* Status pipe */
-  char                 *argv[6];       /* Arguments */
-  char                 *envp[100];     /* Environment */
 
+  DEBUG_puts(packet);
+  DEBUG_printf(("type=%x, state=%x, uri=\"%s\"\n"
+                "location=\"%s\", info=\"%s\", make_model=\"%s\"\n",
+               type, state, uri, location, info, make_model));
 
  /*
-  * Don't do anything if we aren't polling...
+  * Pull the URI apart to see if this is a local or remote printer...
   */
 
-  if (NumPolled == 0)
+  if (is_local_queue(uri, host, sizeof(host), resource, sizeof(resource)))
   {
-    PollPipe         = -1;
-    PollStatusBuffer = NULL;
+    cupsFreeOptions(num_attrs, attrs);
     return;
   }
 
  /*
-  * Setup string arguments for polld, port and interval options.
+  * Do relaying...
   */
 
-  snprintf(polld, sizeof(polld), "%s/daemon/cups-polld", ServerBin);
+  for (i = 0; i < NumRelays; i ++)
+    if (cupsdCheckAuth(address, srcname, len, 1, &(Relays[i].from)))
+      if (sendto(BrowseSocket, packet, bytes, 0,
+                 (struct sockaddr *)&(Relays[i].to),
+                sizeof(http_addr_t)) <= 0)
+      {
+       cupsdLogMessage(CUPSD_LOG_ERROR,
+                       "cupsdUpdateCUPSBrowse: sendto failed for relay %d - %s.",
+                       i + 1, strerror(errno));
+       cupsFreeOptions(num_attrs, attrs);
+       return;
+      }
 
-  sprintf(bport, "%d", BrowsePort);
+ /*
+  * Process the browse data...
+  */
 
-  if (BrowseInterval)
-    sprintf(interval, "%d", BrowseInterval);
-  else
-    strcpy(interval, "30");
+  process_browse_data(uri, host, resource, (cups_ptype_t)type,
+                      (ipp_pstate_t)state, location, info, make_model,
+                     num_attrs, attrs);
+}
 
-  argv[0] = "cups-polld";
-  argv[2] = sport;
-  argv[3] = interval;
-  argv[4] = bport;
-  argv[5] = NULL;
 
-  cupsdLoadEnv(envp, (int)(sizeof(envp) / sizeof(envp[0])));
+#ifdef HAVE_OPENLDAP
+/*
+ * 'cupsdUpdateLDAPBrowse()' - Scan for new printers via LDAP...
+ */
+
+void
+cupsdUpdateLDAPBrowse(void)
+{
+  char         uri[HTTP_MAX_URI],      /* Printer URI */
+               host[HTTP_MAX_URI],     /* Hostname */
+               resource[HTTP_MAX_URI], /* Resource path */
+               location[1024],         /* Printer location */
+               info[1024],             /* Printer information */
+               make_model[1024],       /* Printer make and model */
+               **value;                /* Holds the returned data from LDAP */
+  int          type;                   /* Printer type */
+  int          rc;                     /* LDAP status */
+  int          limit;                  /* Size limit */
+  LDAPMessage  *res,                   /* LDAP search results */
+                 *e;                   /* Current entry from search */
+
 
  /*
-  * Create a pipe that receives the status messages from each
-  * polling daemon...
+  * Search for printers...
   */
 
-  if (cupsdOpenPipe(statusfds))
+  cupsdLogMessage(CUPSD_LOG_DEBUG2, "UpdateLDAPBrowse: %s", ServerName);
+
+  BrowseLDAPRefresh = time(NULL) + BrowseInterval;
+
+  rc = ldap_search_s(BrowseLDAPHandle, BrowseLDAPDN, LDAP_SCOPE_SUBTREE,
+                     "(objectclass=cupsPrinter)", (char **)ldap_attrs, 0, &res);
+  if (rc != LDAP_SUCCESS) 
   {
     cupsdLogMessage(CUPSD_LOG_ERROR,
-                    "Unable to create polling status pipes - %s.",
-                   strerror(errno));
-    PollPipe         = -1;
-    PollStatusBuffer = NULL;
+                    "LDAP search returned error %d: %s", rc,
+                   ldap_err2string(rc));
     return;
   }
 
-  PollPipe         = statusfds[0];
-  PollStatusBuffer = cupsdStatBufNew(PollPipe, "[Poll]");
+  limit = ldap_count_entries(BrowseLDAPHandle, res);
+  cupsdLogMessage(CUPSD_LOG_DEBUG2, "LDAP search returned %d entries", limit);
+  if (limit < 1)
+    return;
 
  /*
-  * Run each polling daemon, redirecting stderr to the polling pipe...
+  * Loop through the available printers...
   */
 
-  for (i = 0, pollp = Polled; i < NumPolled; i ++, pollp ++)
+  if ((e = ldap_first_entry(BrowseLDAPHandle, res)) == NULL)
   {
-    sprintf(sport, "%d", pollp->port);
+    cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to get LDAP printer entry!");
+    return;
+  }
 
-    argv[1] = pollp->hostname;
+  while (e)
+  {
+    value = ldap_get_values(BrowseLDAPHandle, e, "printerDescription");
+    strlcpy(info, *value, sizeof(info));
+    ldap_value_free(value);
 
-    if (cupsdStartProcess(polld, argv, envp, -1, -1, statusfds[1], -1,
-                          0, &(pollp->pid)) < 0)
-    {
-      cupsdLogMessage(CUPSD_LOG_ERROR,
-                      "cupsdStartPolling: Unable to fork polling daemon - %s",
-                      strerror(errno));
-      pollp->pid = 0;
-      break;
-    }
-    else
-      cupsdLogMessage(CUPSD_LOG_DEBUG,
-                      "cupsdStartPolling: Started polling daemon for %s:%d, pid = %d",
-                      pollp->hostname, pollp->port, pollp->pid);
-  }
+    value = ldap_get_values(BrowseLDAPHandle, e, "printerLocation");
+    strlcpy(location, *value, sizeof(location));
+    ldap_value_free(value);
 
-  close(statusfds[1]);
+    value = ldap_get_values(BrowseLDAPHandle, e, "printerMakeAndModel");
+    strlcpy(make_model, *value, sizeof(make_model));
+    ldap_value_free(value);
 
- /*
-  * Finally, add the pipe to the input selection set...
-  */
+    value = ldap_get_values(BrowseLDAPHandle, e, "printerType");
+    type = atoi(*value);
+    ldap_value_free(value);
 
-  cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                  "cupsdStartPolling: Adding fd %d to InputSet...", PollPipe);
+    value = ldap_get_values(BrowseLDAPHandle, e, "printerURI");
+    strlcpy(uri, *value, sizeof(uri));
+    ldap_value_free(value);
 
-  FD_SET(PollPipe, InputSet);
+    if (!is_local_queue(uri, host, sizeof(host), resource, sizeof(resource)))
+      process_browse_data(uri, host, resource, type, IPP_PRINTER_IDLE,
+                          location, info, make_model, 0, NULL);
+
+    e = ldap_next_entry(BrowseLDAPHandle, e);
+  }
 }
+#endif /* HAVE_OPENLDAP */
 
 
 /*
- * 'cupsdStopBrowsing()' - Stop sending and receiving broadcast information.
+ * 'cupsdUpdatePolling()' - Read status messages from the poll daemons.
  */
 
 void
-cupsdStopBrowsing(void)
+cupsdUpdatePolling(void)
 {
-  if (!Browsing || !(BrowseLocalProtocols | BrowseRemoteProtocols))
-    return;
-
-  if (((BrowseLocalProtocols | BrowseRemoteProtocols) & BROWSE_CUPS) &&
-      BrowseSocket >= 0)
-  {
-   /*
-    * Close the socket and remove it from the input selection set.
-    */
-
-#ifdef WIN32
-    closesocket(BrowseSocket);
-#else
-    close(BrowseSocket);
-#endif /* WIN32 */
+  char         *ptr,                   /* Pointer to end of line in buffer */
+               message[1024];          /* Pointer to message text */
+  int          loglevel;               /* Log level for message */
 
-    cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                   "cupsdStopBrowsing: Removing fd %d from InputSet...",
-                   BrowseSocket);
 
-    FD_CLR(BrowseSocket, InputSet);
-    BrowseSocket = -1;
-  }
+  while ((ptr = cupsdStatBufUpdate(PollStatusBuffer, &loglevel,
+                                   message, sizeof(message))) != NULL)
+    if (!strchr(PollStatusBuffer->buffer, '\n'))
+      break;
 
-#ifdef HAVE_LIBSLP
-  if (((BrowseLocalProtocols | BrowseRemoteProtocols) & BROWSE_SLP) &&
-      BrowseSLPHandle)
+  if (ptr == NULL)
   {
-   /* 
-    * Close SLP handle...
+   /*
+    * All polling processes have died; stop polling...
     */
 
-    SLPClose(BrowseSLPHandle);
-    BrowseSLPHandle = NULL;
-  }
-#endif /* HAVE_LIBSLP */
-
-#ifdef HAVE_OPENDAP
-  if (((BrowseLocalProtocols | BrowseRemoteProtocols) & BROWSE_LDAP) &&
-      BrowseLDAPHandle)
-  {
-    ldap_unbind(BrowseLDAPHandle);
-    BrowseLDAPHandle = NULL;
+    cupsdLogMessage(CUPSD_LOG_ERROR,
+                    "cupsdUpdatePolling: all polling processes have exited!");
+    cupsdStopPolling();
   }
-#endif /* HAVE_OPENLDAP */
 }
 
 
+#ifdef HAVE_LIBSLP 
 /*
- * 'cupsdStopPolling()' - Stop polling servers as needed.
+ * 'cupsdUpdateSLPBrowse()' - Get browsing information via SLP.
  */
 
 void
-cupsdStopPolling(void)
+cupsdUpdateSLPBrowse(void)
 {
-  int                  i;              /* Looping var */
-  cupsd_dirsvc_poll_t  *pollp;         /* Current polling server */
-
-
-  if (PollPipe >= 0)
-  {
-    cupsdStatBufDelete(PollStatusBuffer);
-    close(PollPipe);
-
-    cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                    "cupsdStopPolling: removing fd %d from InputSet.", PollPipe);
-    FD_CLR(PollPipe, InputSet);
+  slpsrvurl_t  *s,                     /* Temporary list of service URLs */
+               *next;                  /* Next service in list */
+  cupsd_printer_t p;                   /* Printer information */
+  const char   *uri;                   /* Pointer to printer URI */
+  char         host[HTTP_MAX_URI],     /* Host portion of URI */
+               resource[HTTP_MAX_URI]; /* Resource portion of URI */
 
-    PollPipe         = -1;
-    PollStatusBuffer = NULL;
-  }
 
-  for (i = 0, pollp = Polled; i < NumPolled; i ++, pollp ++)
-    if (pollp->pid)
-      cupsdEndProcess(pollp->pid, 0);
-}
+ /*
+  * Reset the refresh time...
+  */
 
+  BrowseSLPRefresh = time(NULL) + BrowseInterval;
 
-/*
* 'cupsdUpdateCUPSBrowse()' - Update the browse lists using the CUPS protocol.
- */
+ /* 
 * Poll for remote printers using SLP...
 */
 
-void
-cupsdUpdateCUPSBrowse(void)
-{
-  int          i;                      /* Looping var */
-  int          auth;                   /* Authorization status */
-  int          len;                    /* Length of name string */
-  int          bytes;                  /* Number of bytes left */
-  char         packet[1541],           /* Broadcast packet */
-               *pptr;                  /* Pointer into packet */
-  socklen_t    srclen;                 /* Length of source address */
-  http_addr_t  srcaddr;                /* Source address */
-  char         srcname[1024];          /* Source hostname */
-  unsigned     address[4];             /* Source address */
-  unsigned     type;                   /* Printer type */
-  unsigned     state;                  /* Printer state */
-  char         uri[HTTP_MAX_URI],      /* Printer URI */
-               host[HTTP_MAX_URI],     /* Host portion of URI */
-               resource[HTTP_MAX_URI], /* Resource portion of URI */
-               info[IPP_MAX_NAME],     /* Information string */
-               location[IPP_MAX_NAME], /* Location string */
-               make_model[IPP_MAX_NAME];/* Make and model string */
-  int          num_attrs;              /* Number of attributes */
-  cups_option_t        *attrs;                 /* Attributes */
+  s = NULL;
 
+  SLPFindSrvs(BrowseSLPHandle, SLP_CUPS_SRVTYPE, "", "",
+             slp_url_callback, &s);
 
  /*
-  * Read a packet from the browse socket...
+  * Loop through the list of available printers...
   */
 
-  srclen = sizeof(srcaddr);
-  if ((bytes = recvfrom(BrowseSocket, packet, sizeof(packet) - 1, 0, 
-                        (struct sockaddr *)&srcaddr, &srclen)) < 0)
+  for (; s; s = next)
   {
    /*
-    * "Connection refused" is returned under Linux if the destination port
-    * or address is unreachable from a previous sendto(); check for the
-    * error here and ignore it for now...
+    * Save the "next" pointer...
     */
 
-    if (errno != ECONNREFUSED && errno != EAGAIN)
-    {
-      cupsdLogMessage(CUPSD_LOG_ERROR, "Browse recv failed - %s.",
-                      strerror(errno));
-      cupsdLogMessage(CUPSD_LOG_ERROR, "Browsing turned off.");
-
-      cupsdStopBrowsing();
-      Browsing = 0;
-    }
+    next = s->next;
 
-    return;
-  }
-
-  packet[bytes] = '\0';
-
- /*
-  * If we're about to sleep, ignore incoming browse packets.
-  */
-
-  if (Sleeping)
-    return;
-
- /*
-  * Figure out where it came from...
-  */
-
-#ifdef AF_INET6
-  if (srcaddr.addr.sa_family == AF_INET6)
-  {
-    address[0] = ntohl(srcaddr.ipv6.sin6_addr.s6_addr32[0]);
-    address[1] = ntohl(srcaddr.ipv6.sin6_addr.s6_addr32[1]);
-    address[2] = ntohl(srcaddr.ipv6.sin6_addr.s6_addr32[2]);
-    address[3] = ntohl(srcaddr.ipv6.sin6_addr.s6_addr32[3]);
-  }
-  else
-#endif /* AF_INET6 */
-  {
-    address[0] = 0;
-    address[1] = 0;
-    address[2] = 0;
-    address[3] = ntohl(srcaddr.ipv4.sin_addr.s_addr);
-  }
-
-  if (HostNameLookups)
-    httpAddrLookup(&srcaddr, srcname, sizeof(srcname));
-  else
-    httpAddrString(&srcaddr, srcname, sizeof(srcname));
+   /* 
+    * Load a cupsd_printer_t structure with the SLP service attributes...
+    */
 
-  len = strlen(srcname);
+    SLPFindAttrs(BrowseSLPHandle, s->url, "", "", slp_attr_callback, &p);
 
- /*
-  * Do ACL stuff...
-  */
  /*
+    * Process this printer entry...
+    */
 
-  if (BrowseACL)
-  {
-    if (httpAddrLocalhost(&srcaddr) || !strcasecmp(srcname, "localhost"))
-    {
-     /*
-      * Access from localhost (127.0.0.1) is always allowed...
-      */
+    uri = s->url + SLP_CUPS_SRVLEN + 1;
 
-      auth = AUTH_ALLOW;
-    }
-    else
+    if (!strncmp(uri, "http://", 7) || !strncmp(uri, "ipp://", 6))
     {
      /*
-      * Do authorization checks on the domain/address...
+      * Pull the URI apart to see if this is a local or remote printer...
       */
 
-      switch (BrowseACL->order_type)
-      {
-        default :
-           auth = AUTH_DENY;   /* anti-compiler-warning-code */
-           break;
-
-       case AUTH_ALLOW : /* Order Deny,Allow */
-            auth = AUTH_ALLOW;
-
-            if (cupsdCheckAuth(address, srcname, len,
-                         BrowseACL->num_deny, BrowseACL->deny))
-             auth = AUTH_DENY;
-
-            if (cupsdCheckAuth(address, srcname, len,
-                         BrowseACL->num_allow, BrowseACL->allow))
-             auth = AUTH_ALLOW;
-           break;
-
-       case AUTH_DENY : /* Order Allow,Deny */
-            auth = AUTH_DENY;
-
-            if (cupsdCheckAuth(address, srcname, len,
-                         BrowseACL->num_allow, BrowseACL->allow))
-             auth = AUTH_ALLOW;
-
-            if (cupsdCheckAuth(address, srcname, len,
-                         BrowseACL->num_deny, BrowseACL->deny))
-             auth = AUTH_DENY;
-           break;
-      }
+      if (!is_local_queue(uri, host, sizeof(host), resource, sizeof(resource)))
+        process_browse_data(uri, host, resource, p.type, IPP_PRINTER_IDLE,
+                           p.location,  p.info, p.make_model, 0, NULL);
     }
-  }
-  else
-    auth = AUTH_ALLOW;
-
-  if (auth == AUTH_DENY)
-  {
-    cupsdLogMessage(CUPSD_LOG_DEBUG,
-                    "cupsdUpdateCUPSBrowse: Refused %d bytes from %s", bytes,
-                    srcname);
-    return;
-  }
-
-  cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                  "cupsdUpdateCUPSBrowse: (%d bytes from %s) %s", bytes,
-                 srcname, packet);
-
- /*
-  * Parse packet...
-  */
-
-  if (sscanf(packet, "%x%x%1023s", &type, &state, uri) < 3)
-  {
-    cupsdLogMessage(CUPSD_LOG_WARN,
-                    "cupsdUpdateCUPSBrowse: Garbled browse packet - %s", packet);
-    return;
-  }
-
-  strcpy(location, "Location Unknown");
-  strcpy(info, "No Information Available");
-  make_model[0] = '\0';
-  num_attrs     = 0;
-  attrs         = NULL;
 
-  if ((pptr = strchr(packet, '\"')) != NULL)
-  {
    /*
-    * Have extended information; can't use sscanf for it because not all
-    * sscanf's allow empty strings with %[^\"]...
+    * Free this listing...
     */
 
-    for (i = 0, pptr ++;
-         i < (sizeof(location) - 1) && *pptr && *pptr != '\"';
-         i ++, pptr ++)
-      location[i] = *pptr;
+    cupsdClearString(&p.info);
+    cupsdClearString(&p.location);
+    cupsdClearString(&p.make_model);
 
-    if (i)
-      location[i] = '\0';
+    free(s);
+  }       
+}
+#endif /* HAVE_LIBSLP */
 
-    if (*pptr == '\"')
-      pptr ++;
 
-    while (*pptr && isspace(*pptr & 255))
-      pptr ++;
+/*
+ * 'dequote()' - Remote quotes from a string.
+ */
 
-    if (*pptr == '\"')
-    {
-      for (i = 0, pptr ++;
-           i < (sizeof(info) - 1) && *pptr && *pptr != '\"';
-           i ++, pptr ++)
-       info[i] = *pptr;
+static char *                          /* O - Dequoted string */
+dequote(char       *d,                 /* I - Destination string */
+        const char *s,                 /* I - Source string */
+       int        dlen)                /* I - Destination length */
+{
+  char *dptr;                          /* Pointer into destination */
 
-      info[i] = '\0';
 
-      if (*pptr == '\"')
-       pptr ++;
+  if (s)
+  {
+    for (dptr = d, dlen --; *s && dlen > 0; s ++)
+      if (*s != '\"')
+      {
+       *dptr++ = *s;
+       dlen --;
+      }
 
-      while (*pptr && isspace(*pptr & 255))
-       pptr ++;
+    *dptr = '\0';
+  }
+  else
+    *d = '\0';
 
-      if (*pptr == '\"')
-      {
-       for (i = 0, pptr ++;
-             i < (sizeof(make_model) - 1) && *pptr && *pptr != '\"';
-             i ++, pptr ++)
-         make_model[i] = *pptr;
+  return (d);
+}
 
-       if (*pptr == '\"')
-         pptr ++;
 
-       make_model[i] = '\0';
+/*
+ * 'is_local_queue()' - Determine whether the URI points at a local queue.
+ */
 
-        if (*pptr)
-         num_attrs = cupsParseOptions(pptr, num_attrs, &attrs);
-      }
-    }
-  }
+static int                             /* O - 1 = local, 0 = remote, -1 = bad URI */
+is_local_queue(const char *uri,                /* I - Printer URI */
+               char       *host,       /* O - Host string */
+              int        hostlen,      /* I - Length of host buffer */
+               char       *resource,   /* O - Resource string */
+              int        resourcelen)  /* I - Length of resource buffer */
+{
+  char         scheme[32],             /* Scheme portion of URI */
+               username[HTTP_MAX_URI]; /* Username portion of URI */
+  int          port;                   /* Port portion of URI */
+  cupsd_netif_t        *iface;                 /* Network interface */
 
-  DEBUG_puts(packet);
-  DEBUG_printf(("type=%x, state=%x, uri=\"%s\"\n"
-                "location=\"%s\", info=\"%s\", make_model=\"%s\"\n",
-               type, state, uri, location, info, make_model));
 
  /*
   * Pull the URI apart to see if this is a local or remote printer...
   */
 
-  if (is_local_queue(uri, host, sizeof(host), resource, sizeof(resource)))
-  {
-    cupsFreeOptions(num_attrs, attrs);
-    return;
-  }
+  if (httpSeparateURI(HTTP_URI_CODING_ALL, uri, scheme, sizeof(scheme),
+                      username, sizeof(username), host, hostlen, &port,
+                     resource, resourcelen) < HTTP_URI_OK)
+    return (-1);
+
+  DEBUG_printf(("host=\"%s\", ServerName=\"%s\"\n", host, ServerName));
 
  /*
-  * Do relaying...
+  * Check for local server addresses...
   */
 
-  for (i = 0; i < NumRelays; i ++)
-    if (cupsdCheckAuth(address, srcname, len, 1, &(Relays[i].from)))
-      if (sendto(BrowseSocket, packet, bytes, 0,
-                 (struct sockaddr *)&(Relays[i].to),
-                sizeof(http_addr_t)) <= 0)
-      {
-       cupsdLogMessage(CUPSD_LOG_ERROR,
-                       "cupsdUpdateCUPSBrowse: sendto failed for relay %d - %s.",
-                       i + 1, strerror(errno));
-       cupsFreeOptions(num_attrs, attrs);
-       return;
-      }
+  if (!strcasecmp(host, ServerName) && port == LocalPort)
+    return (1);
+
+  cupsdNetIFUpdate();
+
+  for (iface = (cupsd_netif_t *)cupsArrayFirst(NetIFList);
+       iface;
+       iface = (cupsd_netif_t *)cupsArrayNext(NetIFList))
+    if (!strcasecmp(host, iface->hostname) && port == iface->port)
+      return (1);
 
  /*
-  * Process the browse data...
+  * If we get here, the printer is remote...
   */
 
-  process_browse_data(uri, host, resource, (cups_ptype_t)type,
-                      (ipp_pstate_t)state, location, info, make_model,
-                     num_attrs, attrs);
+  return (0);
 }
 
 
-#ifdef HAVE_OPENLDAP
 /*
- * 'cupsdUpdateLDAPBrowse()' - Scan for new printers via LDAP...
+ * 'process_browse_data()' - Process new browse data.
  */
 
-void
-cupsdUpdateLDAPBrowse(void)
+static void
+process_browse_data(
+    const char    *uri,                        /* I - URI of printer/class */
+    const char    *host,               /* I - Hostname */
+    const char    *resource,           /* I - Resource path */
+    cups_ptype_t  type,                        /* I - Printer type */
+    ipp_pstate_t  state,               /* I - Printer state */
+    const char    *location,           /* I - Printer location */
+    const char    *info,               /* I - Printer information */
+    const char    *make_model,         /* I - Printer make and model */
+    int                  num_attrs,            /* I - Number of attributes */
+    cups_option_t *attrs)              /* I - Attributes */
 {
-  char         uri[HTTP_MAX_URI],      /* Printer URI */
-               host[HTTP_MAX_URI],     /* Hostname */
-               resource[HTTP_MAX_URI], /* Resource path */
-               location[1024],         /* Printer location */
-               info[1024],             /* Printer information */
-               make_model[1024],       /* Printer make and model */
-               **value;                /* Holds the returned data from LDAP */
-  int          type;                   /* Printer type */
-  int          rc;                     /* LDAP status */
-  int          limit;                  /* Size limit */
-  LDAPMessage  *res,                   /* LDAP search results */
-                 *e;                   /* Current entry from search */
+  int          i;                      /* Looping var */
+  int          update;                 /* Update printer attributes? */
+  char         finaluri[HTTP_MAX_URI], /* Final URI for printer */
+               name[IPP_MAX_NAME],     /* Name of printer */
+               newname[IPP_MAX_NAME],  /* New name of printer */
+               *hptr,                  /* Pointer into hostname */
+               *sptr;                  /* Pointer into ServerName */
+  char         local_make_model[IPP_MAX_NAME];
+                                       /* Local make and model */
+  cupsd_printer_t *p;                  /* Printer information */
+  const char   *ipp_options,           /* ipp-options value */
+               *lease_duration;        /* lease-duration value */
 
 
  /*
-  * Search for printers...
+  * Determine if the URI contains any illegal characters in it...
   */
 
-  cupsdLogMessage(CUPSD_LOG_DEBUG2, "UpdateLDAPBrowse: %s", ServerName);
-
-  BrowseLDAPRefresh = time(NULL) + BrowseInterval;
-
-  rc = ldap_search_s(BrowseLDAPHandle, BrowseLDAPDN, LDAP_SCOPE_SUBTREE,
-                     "(objectclass=cupsPrinter)", (char **)ldap_attrs, 0, &res);
-  if (rc != LDAP_SUCCESS) 
+  if (strncmp(uri, "ipp://", 6) || !host[0] ||
+      (strncmp(resource, "/printers/", 10) &&
+       strncmp(resource, "/classes/", 9)))
   {
     cupsdLogMessage(CUPSD_LOG_ERROR,
-                    "LDAP search returned error %d: %s", rc,
-                   ldap_err2string(rc));
+                    "process_browse_data: Bad printer URI in browse data: %s",
+                    uri);
     return;
   }
 
-  limit = ldap_count_entries(BrowseLDAPHandle, res);
-  cupsdLogMessage(CUPSD_LOG_DEBUG2, "LDAP search returned %d entries", limit);
-  if (limit < 1)
+  if (strchr(resource, '?') ||
+      (!strncmp(resource, "/printers/", 10) && strchr(resource + 10, '/')) ||
+      (!strncmp(resource, "/classes/", 9) && strchr(resource + 9, '/')))
+  {
+    cupsdLogMessage(CUPSD_LOG_ERROR,
+                    "process_browse_data: Bad resource in browse data: %s",
+                    resource);
     return;
+  }
 
  /*
-  * Loop through the available printers...
+  * OK, this isn't a local printer; add any remote options...
   */
 
-  if ((e = ldap_first_entry(BrowseLDAPHandle, res)) == NULL)
-  {
-    cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to get LDAP printer entry!");
-    return;
-  }
+  ipp_options = cupsGetOption("ipp-options", num_attrs, attrs);
 
-  while (e)
+  if (BrowseRemoteOptions)
   {
-    value = ldap_get_values(BrowseLDAPHandle, e, "printerDescription");
-    strlcpy(info, *value, sizeof(info));
-    ldap_value_free(value);
-
-    value = ldap_get_values(BrowseLDAPHandle, e, "printerLocation");
-    strlcpy(location, *value, sizeof(location));
-    ldap_value_free(value);
-
-    value = ldap_get_values(BrowseLDAPHandle, e, "printerMakeAndModel");
-    strlcpy(make_model, *value, sizeof(make_model));
-    ldap_value_free(value);
+    if (BrowseRemoteOptions[0] == '?')
+    {
+     /*
+      * Override server-supplied options...
+      */
 
-    value = ldap_get_values(BrowseLDAPHandle, e, "printerType");
-    type = atoi(*value);
-    ldap_value_free(value);
+      snprintf(finaluri, sizeof(finaluri), "%s%s", uri, BrowseRemoteOptions);
+    }
+    else if (ipp_options)
+    {
+     /*
+      * Combine the server and local options...
+      */
 
-    value = ldap_get_values(BrowseLDAPHandle, e, "printerURI");
-    strlcpy(uri, *value, sizeof(uri));
-    ldap_value_free(value);
+      snprintf(finaluri, sizeof(finaluri), "%s?%s+%s", uri, ipp_options,
+               BrowseRemoteOptions);
+    }
+    else
+    {
+     /*
+      * Just use the local options...
+      */
 
-    if (!is_local_queue(uri, host, sizeof(host), resource, sizeof(resource)))
-      process_browse_data(uri, host, resource, type, IPP_PRINTER_IDLE,
-                          location, info, make_model, 0, NULL);
+      snprintf(finaluri, sizeof(finaluri), "%s?%s", uri, BrowseRemoteOptions);
+    }
 
-    e = ldap_next_entry(BrowseLDAPHandle, e);
+    uri = finaluri;
   }
-}
-#endif /* HAVE_OPENLDAP */
-
-
-/*
- * 'cupsdUpdatePolling()' - Read status messages from the poll daemons.
- */
-
-void
-cupsdUpdatePolling(void)
-{
-  char         *ptr,                   /* Pointer to end of line in buffer */
-               message[1024];          /* Pointer to message text */
-  int          loglevel;               /* Log level for message */
-
-
-  while ((ptr = cupsdStatBufUpdate(PollStatusBuffer, &loglevel,
-                                   message, sizeof(message))) != NULL)
-    if (!strchr(PollStatusBuffer->buffer, '\n'))
-      break;
-
-  if (ptr == NULL)
+  else if (ipp_options)
   {
    /*
-    * All polling processes have died; stop polling...
+    * Just use the server-supplied options...
     */
 
-    cupsdLogMessage(CUPSD_LOG_ERROR,
-                    "cupsdUpdatePolling: all polling processes have exited!");
-    cupsdStopPolling();
+    snprintf(finaluri, sizeof(finaluri), "%s?%s", uri, ipp_options);
+    uri = finaluri;
   }
-}
-
-
-#ifdef HAVE_LIBSLP 
-/*
- * 'cupsdUpdateSLPBrowse()' - Get browsing information via SLP.
- */
-
-void
-cupsdUpdateSLPBrowse(void)
-{
-  slpsrvurl_t  *s,                     /* Temporary list of service URLs */
-               *next;                  /* Next service in list */
-  cupsd_printer_t p;                   /* Printer information */
-  const char   *uri;                   /* Pointer to printer URI */
-  char         host[HTTP_MAX_URI],     /* Host portion of URI */
-               resource[HTTP_MAX_URI]; /* Resource portion of URI */
-
 
  /*
-  * Reset the refresh time...
-  */
-
-  BrowseSLPRefresh = time(NULL) + BrowseInterval;
-
- /* 
-  * Poll for remote printers using SLP...
+  * See if we already have it listed in the Printers list, and add it if not...
   */
 
-  s = NULL;
-
-  SLPFindSrvs(BrowseSLPHandle, SLP_CUPS_SRVTYPE, "", "",
-             slp_url_callback, &s);
-
- /*
-  * Loop through the list of available printers...
-  */
+  type   |= CUPS_PRINTER_REMOTE;
+  type   &= ~CUPS_PRINTER_IMPLICIT;
+  update = 0;
+  hptr   = strchr(host, '.');
+  sptr   = strchr(ServerName, '.');
 
-  for (; s; s = next)
+  if (sptr != NULL && hptr != NULL)
   {
    /*
-    * Save the "next" pointer...
-    */
-
-    next = s->next;
-
-   /* 
-    * Load a cupsd_printer_t structure with the SLP service attributes...
+    * Strip the common domain name components...
     */
 
-    SLPFindAttrs(BrowseSLPHandle, s->url, "", "", slp_attr_callback, &p);
+    while (hptr != NULL)
+    {
+      if (!strcasecmp(hptr, sptr))
+      {
+        *hptr = '\0';
+       break;
+      }
+      else
+        hptr = strchr(hptr + 1, '.');
+    }
+  }
 
+  if (type & CUPS_PRINTER_CLASS)
+  {
    /*
-    * Process this printer entry...
+    * Remote destination is a class...
     */
 
-    uri = s->url + SLP_CUPS_SRVLEN + 1;
+    if (!strncmp(resource, "/classes/", 9))
+      snprintf(name, sizeof(name), "%s@%s", resource + 9, host);
+    else
+      return;
 
-    if (!strncmp(uri, "http://", 7) || !strncmp(uri, "ipp://", 6))
+    if ((p = cupsdFindClass(name)) == NULL && BrowseShortNames)
     {
-     /*
-      * Pull the URI apart to see if this is a local or remote printer...
-      */
+      if ((p = cupsdFindClass(resource + 9)) != NULL)
+      {
+        if (p->hostname && strcasecmp(p->hostname, host))
+       {
+        /*
+         * Nope, this isn't the same host; if the hostname isn't the local host,
+         * add it to the other class and then find a class using the full host
+         * name...
+         */
 
-      if (!is_local_queue(uri, host, sizeof(host), resource, sizeof(resource)))
-        process_browse_data(uri, host, resource, p.type, IPP_PRINTER_IDLE,
-                           p.location,  p.info, p.make_model, 0, NULL);
-    }
+         if (p->type & CUPS_PRINTER_REMOTE)
+         {
+           cupsdLogMessage(CUPSD_LOG_INFO,
+                           "Renamed remote class \"%s\" to \"%s@%s\"...",
+                           p->name, p->name, p->hostname);
+           cupsdAddEvent(CUPSD_EVENT_PRINTER_DELETED, p, NULL,
+                         "Class \'%s\' deleted by directory services.",
+                         p->name);
 
-   /*
-    * Free this listing...
-    */
-
-    cupsdClearString(&p.info);
-    cupsdClearString(&p.location);
-    cupsdClearString(&p.make_model);
-
-    free(s);
-  }       
-}
-#endif /* HAVE_LIBSLP */
-
-
-/*
- * 'dequote()' - Remote quotes from a string.
- */
-
-static char *                          /* O - Dequoted string */
-dequote(char       *d,                 /* I - Destination string */
-        const char *s,                 /* I - Source string */
-       int        dlen)                /* I - Destination length */
-{
-  char *dptr;                          /* Pointer into destination */
-
-
-  if (s)
-  {
-    for (dptr = d, dlen --; *s && dlen > 0; s ++)
-      if (*s != '\"')
-      {
-       *dptr++ = *s;
-       dlen --;
-      }
-
-    *dptr = '\0';
-  }
-  else
-    *d = '\0';
-
-  return (d);
-}
-
-
-/*
- * 'is_local_queue()' - Determine whether the URI points at a local queue.
- */
-
-static int                             /* O - 1 = local, 0 = remote, -1 = bad URI */
-is_local_queue(const char *uri,                /* I - Printer URI */
-               char       *host,       /* O - Host string */
-              int        hostlen,      /* I - Length of host buffer */
-               char       *resource,   /* O - Resource string */
-              int        resourcelen)  /* I - Length of resource buffer */
-{
-  char         scheme[32],             /* Scheme portion of URI */
-               username[HTTP_MAX_URI]; /* Username portion of URI */
-  int          port;                   /* Port portion of URI */
-  cupsd_netif_t        *iface;                 /* Network interface */
-
-
- /*
-  * Pull the URI apart to see if this is a local or remote printer...
-  */
-
-  if (httpSeparateURI(HTTP_URI_CODING_ALL, uri, scheme, sizeof(scheme),
-                      username, sizeof(username), host, hostlen, &port,
-                     resource, resourcelen) < HTTP_URI_OK)
-    return (-1);
-
-  DEBUG_printf(("host=\"%s\", ServerName=\"%s\"\n", host, ServerName));
-
- /*
-  * Check for local server addresses...
-  */
-
-  if (!strcasecmp(host, ServerName) && port == LocalPort)
-    return (1);
-
-  cupsdNetIFUpdate();
-
-  for (iface = (cupsd_netif_t *)cupsArrayFirst(NetIFList);
-       iface;
-       iface = (cupsd_netif_t *)cupsArrayNext(NetIFList))
-    if (!strcasecmp(host, iface->hostname) && port == iface->port)
-      return (1);
-
- /*
-  * If we get here, the printer is remote...
-  */
-
-  return (0);
-}
-
-
-/*
- * 'process_browse_data()' - Process new browse data.
- */
-
-static void
-process_browse_data(
-    const char    *uri,                        /* I - URI of printer/class */
-    const char    *host,               /* I - Hostname */
-    const char    *resource,           /* I - Resource path */
-    cups_ptype_t  type,                        /* I - Printer type */
-    ipp_pstate_t  state,               /* I - Printer state */
-    const char    *location,           /* I - Printer location */
-    const char    *info,               /* I - Printer information */
-    const char    *make_model,         /* I - Printer make and model */
-    int                  num_attrs,            /* I - Number of attributes */
-    cups_option_t *attrs)              /* I - Attributes */
-{
-  int          i;                      /* Looping var */
-  int          update;                 /* Update printer attributes? */
-  char         finaluri[HTTP_MAX_URI], /* Final URI for printer */
-               name[IPP_MAX_NAME],     /* Name of printer */
-               newname[IPP_MAX_NAME],  /* New name of printer */
-               *hptr,                  /* Pointer into hostname */
-               *sptr;                  /* Pointer into ServerName */
-  char         local_make_model[IPP_MAX_NAME];
-                                       /* Local make and model */
-  cupsd_printer_t *p;                  /* Printer information */
-  const char   *ipp_options,           /* ipp-options value */
-               *lease_duration;        /* lease-duration value */
-
-
- /*
-  * Determine if the URI contains any illegal characters in it...
-  */
-
-  if (strncmp(uri, "ipp://", 6) || !host[0] ||
-      (strncmp(resource, "/printers/", 10) &&
-       strncmp(resource, "/classes/", 9)))
-  {
-    cupsdLogMessage(CUPSD_LOG_ERROR,
-                    "process_browse_data: Bad printer URI in browse data: %s",
-                    uri);
-    return;
-  }
-
-  if (strchr(resource, '?') ||
-      (!strncmp(resource, "/printers/", 10) && strchr(resource + 10, '/')) ||
-      (!strncmp(resource, "/classes/", 9) && strchr(resource + 9, '/')))
-  {
-    cupsdLogMessage(CUPSD_LOG_ERROR,
-                    "process_browse_data: Bad resource in browse data: %s",
-                    resource);
-    return;
-  }
-
- /*
-  * OK, this isn't a local printer; add any remote options...
-  */
-
-  ipp_options = cupsGetOption("ipp-options", num_attrs, attrs);
-
-  if (BrowseRemoteOptions)
-  {
-    if (BrowseRemoteOptions[0] == '?')
-    {
-     /*
-      * Override server-supplied options...
-      */
-
-      snprintf(finaluri, sizeof(finaluri), "%s%s", uri, BrowseRemoteOptions);
-    }
-    else if (ipp_options)
-    {
-     /*
-      * Combine the server and local options...
-      */
-
-      snprintf(finaluri, sizeof(finaluri), "%s?%s+%s", uri, ipp_options,
-               BrowseRemoteOptions);
-    }
-    else
-    {
-     /*
-      * Just use the local options...
-      */
-
-      snprintf(finaluri, sizeof(finaluri), "%s?%s", uri, BrowseRemoteOptions);
-    }
-
-    uri = finaluri;
-  }
-  else if (ipp_options)
-  {
-   /*
-    * Just use the server-supplied options...
-    */
-
-    snprintf(finaluri, sizeof(finaluri), "%s?%s", uri, ipp_options);
-    uri = finaluri;
-  }
-
- /*
-  * See if we already have it listed in the Printers list, and add it if not...
-  */
-
-  type   |= CUPS_PRINTER_REMOTE;
-  type   &= ~CUPS_PRINTER_IMPLICIT;
-  update = 0;
-  hptr   = strchr(host, '.');
-  sptr   = strchr(ServerName, '.');
-
-  if (sptr != NULL && hptr != NULL)
-  {
-   /*
-    * Strip the common domain name components...
-    */
-
-    while (hptr != NULL)
-    {
-      if (!strcasecmp(hptr, sptr))
-      {
-        *hptr = '\0';
-       break;
-      }
-      else
-        hptr = strchr(hptr + 1, '.');
-    }
-  }
-
-  if (type & CUPS_PRINTER_CLASS)
-  {
-   /*
-    * Remote destination is a class...
-    */
-
-    if (!strncmp(resource, "/classes/", 9))
-      snprintf(name, sizeof(name), "%s@%s", resource + 9, host);
-    else
-      return;
-
-    if ((p = cupsdFindClass(name)) == NULL && BrowseShortNames)
-    {
-      if ((p = cupsdFindClass(resource + 9)) != NULL)
-      {
-        if (p->hostname && strcasecmp(p->hostname, host))
-       {
-        /*
-         * Nope, this isn't the same host; if the hostname isn't the local host,
-         * add it to the other class and then find a class using the full host
-         * name...
-         */
-
-         if (p->type & CUPS_PRINTER_REMOTE)
-         {
-           cupsdLogMessage(CUPSD_LOG_INFO,
-                           "Renamed remote class \"%s\" to \"%s@%s\"...",
-                           p->name, p->name, p->hostname);
-           cupsdAddEvent(CUPSD_EVENT_PRINTER_DELETED, p, NULL,
-                         "Class \'%s\' deleted by directory services.",
-                         p->name);
-
-            snprintf(newname, sizeof(newname), "%s@%s", p->name, p->hostname);
-            cupsdRenamePrinter(p, newname);
+            snprintf(newname, sizeof(newname), "%s@%s", p->name, p->hostname);
+            cupsdRenamePrinter(p, newname);
 
            cupsdAddEvent(CUPSD_EVENT_PRINTER_ADDED, p, NULL,
                          "Class \'%s\' added by directory services.",
@@ -2907,7 +2430,488 @@ process_implicit_classes(void)
 }
 
 
-#ifdef HAVE_LIBSLP
+/*
+ * 'send_cups_browse()' - Send new browsing information using the CUPS
+ *                           protocol.
+ */
+
+static void
+send_cups_browse(cupsd_printer_t *p)   /* I - Printer to send */
+{
+  int                  i;              /* Looping var */
+  cups_ptype_t         type;           /* Printer type */
+  cupsd_dirsvc_addr_t  *b;             /* Browse address */
+  int                  bytes;          /* Length of packet */
+  char                 packet[1453],   /* Browse data packet */
+                       uri[1024],      /* Printer URI */
+                       location[1024], /* printer-location */
+                       info[1024],     /* printer-info */
+                       make_model[1024];
+                                       /* printer-make-and-model */
+  cupsd_netif_t                *iface;         /* Network interface */
+
+
+ /*
+  * Figure out the printer type value...
+  */
+
+  type = p->type | CUPS_PRINTER_REMOTE;
+
+  if (!p->accepting)
+    type |= CUPS_PRINTER_REJECTING;
+
+  if (p == DefaultPrinter)
+    type |= CUPS_PRINTER_DEFAULT;
+
+ /*
+  * Remove quotes from printer-info, printer-location, and
+  * printer-make-and-model attributes...
+  */
+
+  dequote(location, p->location, sizeof(location));
+  dequote(info, p->info, sizeof(info));
+  dequote(make_model, p->make_model ? p->make_model : "Unknown",
+          sizeof(make_model));
+
+ /*
+  * Send a packet to each browse address...
+  */
+
+  for (i = NumBrowsers, b = Browsers; i > 0; i --, b ++)
+    if (b->iface[0])
+    {
+     /*
+      * Send the browse packet to one or more interfaces...
+      */
+
+      if (!strcmp(b->iface, "*"))
+      {
+       /*
+        * Send to all local interfaces...
+       */
+
+        cupsdNetIFUpdate();
+
+       for (iface = (cupsd_netif_t *)cupsArrayFirst(NetIFList);
+            iface;
+            iface = (cupsd_netif_t *)cupsArrayNext(NetIFList))
+       {
+        /*
+         * Only send to local, IPv4 interfaces...
+         */
+
+         if (!iface->is_local || !iface->port ||
+             iface->address.addr.sa_family != AF_INET)
+           continue;
+
+         httpAssembleURIf(HTTP_URI_CODING_ALL, uri, sizeof(uri), "ipp", NULL,
+                          iface->hostname, iface->port,
+                          (p->type & CUPS_PRINTER_CLASS) ? "/classes/%s%s" :
+                                                           "/printers/%s",
+                          p->name);
+         snprintf(packet, sizeof(packet), "%x %x %s \"%s\" \"%s\" \"%s\" %s\n",
+                  type, p->state, uri, location, info, make_model,
+                  p->browse_attrs ? p->browse_attrs : "");
+
+         bytes = strlen(packet);
+
+         cupsdLogMessage(CUPSD_LOG_DEBUG2,
+                         "cupsdSendBrowseList: (%d bytes to \"%s\") %s", bytes,
+                         iface->name, packet);
+
+          iface->broadcast.ipv4.sin_port = htons(BrowsePort);
+
+         sendto(BrowseSocket, packet, bytes, 0,
+                (struct sockaddr *)&(iface->broadcast),
+                sizeof(struct sockaddr_in));
+        }
+      }
+      else if ((iface = cupsdNetIFFind(b->iface)) != NULL)
+      {
+       /*
+        * Send to the named interface using the IPv4 address...
+       */
+
+        while (iface)
+         if (strcmp(b->iface, iface->name))
+         {
+           iface = NULL;
+           break;
+         }
+         else if (iface->address.addr.sa_family == AF_INET && iface->port)
+           break;
+         else
+            iface = (cupsd_netif_t *)cupsArrayNext(NetIFList);
+
+        if (iface)
+       {
+         httpAssembleURIf(HTTP_URI_CODING_ALL, uri, sizeof(uri), "ipp", NULL,
+                          iface->hostname, iface->port,
+                          (p->type & CUPS_PRINTER_CLASS) ? "/classes/%s%s" :
+                                                           "/printers/%s",
+                          p->name);
+         snprintf(packet, sizeof(packet), "%x %x %s \"%s\" \"%s\" \"%s\" %s\n",
+                  type, p->state, uri, location, info, make_model,
+                  p->browse_attrs ? p->browse_attrs : "");
+
+         bytes = strlen(packet);
+
+         cupsdLogMessage(CUPSD_LOG_DEBUG2,
+                         "cupsdSendBrowseList: (%d bytes to \"%s\") %s", bytes,
+                         iface->name, packet);
+
+          iface->broadcast.ipv4.sin_port = htons(BrowsePort);
+
+         sendto(BrowseSocket, packet, bytes, 0,
+                (struct sockaddr *)&(iface->broadcast),
+                sizeof(struct sockaddr_in));
+        }
+      }
+    }
+    else
+    {
+     /*
+      * Send the browse packet to the indicated address using
+      * the default server name...
+      */
+
+      snprintf(packet, sizeof(packet), "%x %x %s \"%s\" \"%s\" \"%s\" %s\n",
+                      type, p->state, p->uri, location, info, make_model,
+              p->browse_attrs ? p->browse_attrs : "");
+
+      bytes = strlen(packet);
+      cupsdLogMessage(CUPSD_LOG_DEBUG2,
+                      "cupsdSendBrowseList: (%d bytes) %s", bytes, packet);
+
+      if (sendto(BrowseSocket, packet, bytes, 0,
+                (struct sockaddr *)&(b->to),
+                sizeof(struct sockaddr_in)) <= 0)
+      {
+       /*
+        * Unable to send browse packet, so remove this address from the
+       * list...
+       */
+
+       cupsdLogMessage(CUPSD_LOG_ERROR,
+                       "cupsdSendBrowseList: sendto failed for browser "
+                       "%d - %s.",
+                       (int)(b - Browsers + 1), strerror(errno));
+
+        if (i > 1)
+         memmove(b, b + 1, (i - 1) * sizeof(cupsd_dirsvc_addr_t));
+
+       b --;
+       NumBrowsers --;
+      }
+    }
+}
+
+
+#ifdef HAVE_OPENLDAP
+/*
+ * 'send_ldap_browse()' - Send LDAP printer registrations.
+ */
+
+static void
+send_ldap_browse(cupsd_printer_t *p)   /* I - Printer to register */
+{
+  int          i;                      /* Looping var... */
+  LDAPMod      mods[7];                /* The 7 attributes we will be adding */
+  LDAPMod      *pmods[8];              /* Pointers to the 7 attributes + NULL */
+  LDAPMessage  *res;                   /* Search result token */
+  char         *cn_value[2],           /* Change records */
+               *uri[2],
+               *info[2],
+               *location[2],
+               *make_model[2],
+               *type[2],
+               typestring[255],        /* String to hold printer-type */
+               filter[256],            /* Search filter for possible UPDATEs */
+               dn[1024];               /* DN of the printer we are adding */
+  int          rc;                     /* LDAP status */
+  static const char * const objectClass_values[] =
+               {                       /* The 3 objectClass's we use in */
+                 "top",                /* our LDAP entries              */
+                 "device",
+                 "cupsPrinter",
+                 NULL
+               };
+
+  cupsdLogMessage(CUPSD_LOG_DEBUG2, "send_ldap_browse: %s\n", p->name);
+
+ /*
+  * Everything in ldap is ** so we fudge around it...
+  */
+
+  sprintf(typestring, "%u", p->type);
+
+  cn_value[0]   = p->info;
+  cn_value[1]   = NULL;
+  info[0]       = p->info;
+  info[1]       = NULL;
+  location[0]   = p->location;
+  location[1]   = NULL;
+  make_model[0] = p->make_model;
+  make_model[1] = NULL;
+  type[0]       = typestring;
+  type[1]       = NULL;
+  uri[0]        = p->uri;
+  uri[1]        = NULL;
+
+  snprintf(filter, sizeof(filter),
+           "(&(objectclass=cupsPrinter)(printerDescription~=%s))", p->info);
+
+  ldap_search_s(BrowseLDAPHandle, BrowseLDAPDN, LDAP_SCOPE_SUBTREE,
+                filter, (char **)ldap_attrs, 0, &res);
+  cupsdLogMessage(CUPSD_LOG_DEBUG2, "send_ldap_browse: Searching \"%s\"",
+                  filter);
+
+  mods[0].mod_type = "cn";
+  mods[0].mod_values = cn_value;
+  mods[1].mod_type = "printerDescription";
+  mods[1].mod_values = info;
+  mods[2].mod_type = "printerURI";
+  mods[2].mod_values = uri;
+  mods[3].mod_type = "printerLocation";
+  mods[3].mod_values = location;
+  mods[4].mod_type = "printerMakeAndModel";
+  mods[4].mod_values = make_model;
+  mods[5].mod_type = "printerType";
+  mods[5].mod_values = type;
+  mods[6].mod_type = "objectClass";
+  mods[6].mod_values = (char **)objectClass_values;
+
+  snprintf(dn, sizeof(dn), "cn=%s,ou=printers,%s", p->info, BrowseLDAPDN);
+  cupsdLogMessage(CUPSD_LOG_DEBUG2, "send_ldap_browse: dn=\"%s\"", dn);
+
+  if (ldap_count_entries(BrowseLDAPHandle, res) > 0)
+  {
+   /*
+    * Printer has already been registered, modify the current
+    * registration...
+    */
+
+    cupsdLogMessage(CUPSD_LOG_DEBUG2,
+                    "send_ldap_browse: Replacing entry...");
+
+    for (i = 0; i < 7; i ++)
+    {
+      pmods[i]         = mods + i;
+      pmods[i]->mod_op = LDAP_MOD_REPLACE;
+    }
+    pmods[i] = NULL;
+
+    if ((rc = ldap_modify_s(BrowseLDAPHandle, dn, pmods)) != LDAP_SUCCESS)
+      cupsdLogMessage(CUPSD_LOG_ERROR,
+                      "LDAP modify for %s failed with status %d: %s",
+                      p->name, rc, ldap_err2string(rc));
+  }
+  else 
+  {
+   /*
+    * Printer has already been registered, modify the current
+    * registration...
+    */
+
+    cupsdLogMessage(CUPSD_LOG_DEBUG2,
+                    "send_ldap_browse: Adding entry...");
+
+    for (i = 0; i < 7; i ++)
+    {
+      pmods[i]         = mods + i;
+      pmods[i]->mod_op = LDAP_MOD_REPLACE;
+    }
+    pmods[i] = NULL;
+
+    if ((rc = ldap_modify_s(BrowseLDAPHandle, dn, pmods)) != LDAP_SUCCESS)
+      cupsdLogMessage(CUPSD_LOG_ERROR,
+                      "LDAP add for %s failed with status %d: %s",
+                      p->name, rc, ldap_err2string(rc));
+  }
+}
+#endif /* HAVE_OPENLDAP */
+
+
+#ifdef HAVE_LIBSLP
+/*
+ * 'send_slp_browse()' - Register the specified printer with SLP.
+ */
+
+static void
+send_slp_browse(cupsd_printer_t *p)    /* I - Printer to register */
+{
+  char         srvurl[HTTP_MAX_URI],   /* Printer service URI */
+               attrs[8192],            /* Printer attributes */
+               finishings[1024],       /* Finishings to support */
+               make_model[IPP_MAX_NAME * 2],
+                                       /* Make and model, quoted */
+               location[IPP_MAX_NAME * 2],
+                                       /* Location, quoted */
+               info[IPP_MAX_NAME * 2], /* Info, quoted */
+               *src,                   /* Pointer to original string */
+               *dst;                   /* Pointer to destination string */
+  ipp_attribute_t *authentication;     /* uri-authentication-supported value */
+  SLPError     error;                  /* SLP error, if any */
+
+
+  cupsdLogMessage(CUPSD_LOG_DEBUG, "send_slp_browse(%p = \"%s\")", p,
+                  p->name);
+
+ /*
+  * Make the SLP service URL that conforms to the IANA 
+  * 'printer:' template.
+  */
+
+  snprintf(srvurl, sizeof(srvurl), SLP_CUPS_SRVTYPE ":%s", p->uri);
+
+  cupsdLogMessage(CUPSD_LOG_DEBUG2, "Service URL = \"%s\"", srvurl);
+
+ /*
+  * Figure out the finishings string...
+  */
+
+  if (p->type & CUPS_PRINTER_STAPLE)
+    strcpy(finishings, "staple");
+  else
+    finishings[0] = '\0';
+
+  if (p->type & CUPS_PRINTER_BIND)
+  {
+    if (finishings[0])
+      strlcat(finishings, ",bind", sizeof(finishings));
+    else
+      strcpy(finishings, "bind");
+  }
+
+  if (p->type & CUPS_PRINTER_PUNCH)
+  {
+    if (finishings[0])
+      strlcat(finishings, ",punch", sizeof(finishings));
+    else
+      strcpy(finishings, "punch");
+  }
+
+  if (p->type & CUPS_PRINTER_COVER)
+  {
+    if (finishings[0])
+      strlcat(finishings, ",cover", sizeof(finishings));
+    else
+      strcpy(finishings, "cover");
+  }
+
+  if (p->type & CUPS_PRINTER_SORT)
+  {
+    if (finishings[0])
+      strlcat(finishings, ",sort", sizeof(finishings));
+    else
+      strcpy(finishings, "sort");
+  }
+
+  if (!finishings[0])
+    strcpy(finishings, "none");
+
+ /*
+  * Quote any commas in the make and model, location, and info strings...
+  */
+
+  for (src = p->make_model, dst = make_model;
+       src && *src && dst < (make_model + sizeof(make_model) - 2);)
+  {
+    if (*src == ',' || *src == '\\' || *src == ')')
+      *dst++ = '\\';
+
+    *dst++ = *src++;
+  }
+
+  *dst = '\0';
+
+  if (!make_model[0])
+    strcpy(make_model, "Unknown");
+
+  for (src = p->location, dst = location;
+       src && *src && dst < (location + sizeof(location) - 2);)
+  {
+    if (*src == ',' || *src == '\\' || *src == ')')
+      *dst++ = '\\';
+
+    *dst++ = *src++;
+  }
+
+  *dst = '\0';
+
+  if (!location[0])
+    strcpy(location, "Unknown");
+
+  for (src = p->info, dst = info;
+       src && *src && dst < (info + sizeof(info) - 2);)
+  {
+    if (*src == ',' || *src == '\\' || *src == ')')
+      *dst++ = '\\';
+
+    *dst++ = *src++;
+  }
+
+  *dst = '\0';
+
+  if (!info[0])
+    strcpy(info, "Unknown");
+
+ /*
+  * Get the authentication value...
+  */
+
+  authentication = ippFindAttribute(p->attrs, "uri-authentication-supported",
+                                    IPP_TAG_KEYWORD);
+
+ /*
+  * Make the SLP attribute string list that conforms to
+  * the IANA 'printer:' template.
+  */
+
+  snprintf(attrs, sizeof(attrs),
+           "(printer-uri-supported=%s),"
+           "(uri-authentication-supported=%s>),"
+#ifdef HAVE_SSL
+           "(uri-security-supported=tls>),"
+#else
+           "(uri-security-supported=none>),"
+#endif /* HAVE_SSL */
+           "(printer-name=%s),"
+           "(printer-location=%s),"
+           "(printer-info=%s),"
+           "(printer-more-info=%s),"
+           "(printer-make-and-model=%s),"
+          "(printer-type=%d),"
+          "(charset-supported=utf-8),"
+          "(natural-language-configured=%s),"
+          "(natural-language-supported=de,en,es,fr,it),"
+           "(color-supported=%s),"
+           "(finishings-supported=%s),"
+           "(sides-supported=one-sided%s),"
+          "(multiple-document-jobs-supported=true)"
+          "(ipp-versions-supported=1.0,1.1)",
+          p->uri, authentication->values[0].string.text, p->name, location,
+          info, p->uri, make_model, p->type, DefaultLanguage,
+           p->type & CUPS_PRINTER_COLOR ? "true" : "false",
+           finishings,
+           p->type & CUPS_PRINTER_DUPLEX ?
+              ",two-sided-long-edge,two-sided-short-edge" : "");
+
+  cupsdLogMessage(CUPSD_LOG_DEBUG2, "Attributes = \"%s\"", attrs);
+
+ /*
+  * Register the printer with the SLP server...
+  */
+
+  error = SLPReg(BrowseSLPHandle, srvurl, BrowseTimeout,
+                SLP_CUPS_SRVTYPE, attrs, SLP_TRUE, slp_reg_callback, 0);
+
+  if (error != SLP_OK)
+    cupsdLogMessage(CUPSD_LOG_ERROR, "SLPReg of \"%s\" failed with status %d!", p->name,
+                    error);
+}
+
+
 /*
  * 'slp_attr_callback()' - SLP attribute callback 
  */
@@ -3111,5 +3115,5 @@ slp_url_callback(
 
 
 /*
- * End of "$Id: dirsvc.c 5223 2006-03-04 01:10:17Z mike $".
+ * End of "$Id: dirsvc.c 5305 2006-03-18 03:05:12Z mike $".
  */
index ac8eccd66b427023d0ab8def02fa6eaf29c5b47e..171933f936884344168ae3a69231dcb89555c692 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: dirsvc.h 5198 2006-02-27 21:58:43Z mike $"
+ * "$Id: dirsvc.h 5305 2006-03-18 03:05:12Z mike $"
  *
  *   Directory services definitions for the Common UNIX Printing System
  *   (CUPS) scheduler.
@@ -167,11 +167,6 @@ extern void        cupsdLoadRemoteCache(void);
 extern void    cupsdSaveRemoteCache(void);
 extern void    cupsdSendBrowseDelete(cupsd_printer_t *p);
 extern void    cupsdSendBrowseList(void);
-extern void    cupsdSendCUPSBrowse(cupsd_printer_t *p);
-#ifdef HAVE_LDAP
-extern void    cupsdSendLDAPBrowse(cupsd_printer_t *p);
-#endif /* HAVE_LDAP */
-extern void    cupsdSendSLPBrowse(cupsd_printer_t *p);
 extern void    cupsdStartBrowsing(void);
 extern void    cupsdStartPolling(void);
 extern void    cupsdStopBrowsing(void);
@@ -185,5 +180,5 @@ extern void cupsdUpdateSLPBrowse(void);
 
 
 /*
- * End of "$Id: dirsvc.h 5198 2006-02-27 21:58:43Z mike $".
+ * End of "$Id: dirsvc.h 5305 2006-03-18 03:05:12Z mike $".
  */
index f055b3a21c125f662db3e8d53b673f7885d9ba2c..b9c49dc3fabd5ab16821c9a3db2c29acdd2fd2b7 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: env.c 5245 2006-03-08 13:09:49Z mike $"
+ * "$Id: env.c 5305 2006-03-18 03:05:12Z mike $"
  *
  *   Environment management routines for the Common UNIX Printing System (CUPS).
  *
  *
  * Contents:
  *
- *   cupsdClearEnv() - Clear common environment variables.
  *   cupsdInitEnv()  - Initialize the current environment with standard
  *                     variables.
  *   cupsdLoadEnv()  - Copy common environment variables into an array.
  *   cupsdSetEnv()   - Set a common environment variable.
  *   cupsdSetEnvf()  - Set a formatted common environment variable.
+ *   clear_env()     - Clear common environment variables.
  */
 
 /*
@@ -47,20 +47,10 @@ static char *common_env[MAX_ENV];   /* Common env vars */
 
 
 /*
- * 'cupsdClearEnv()' - Clear common environment variables.
+ * Local functions...
  */
 
-void
-cupsdClearEnv(void)
-{
-  int  i;                              /* Looping var */
-
-
-  for (i = 0; i < num_common_env; i ++)
-    cupsdClearString(common_env + i);
-
-  num_common_env = 0;
-}
+static void    clear_env(void);
 
 
 /*
@@ -74,7 +64,7 @@ cupsdInitEnv(void)
   * Clear existing environment variables...
   */
 
-  cupsdClearEnv();
+  clear_env();
 
 #if defined(__APPLE__)
  /*
@@ -239,5 +229,22 @@ cupsdSetEnvf(const char *name,             /* I - Name of variable */
 
 
 /*
- * End of "$Id: env.c 5245 2006-03-08 13:09:49Z mike $".
+ * 'clear_env()' - Clear common environment variables.
+ */
+
+static void
+clear_env(void)
+{
+  int  i;                              /* Looping var */
+
+
+  for (i = 0; i < num_common_env; i ++)
+    cupsdClearString(common_env + i);
+
+  num_common_env = 0;
+}
+
+
+/*
+ * End of "$Id: env.c 5305 2006-03-18 03:05:12Z mike $".
  */
index db9e0652934152888474c0d9885e7ee68ca45bd2..9f39ab2b31dad5f6221354117dce5f62f505d803 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: ipp.c 5232 2006-03-05 17:59:19Z mike $"
+ * "$Id: ipp.c 5284 2006-03-13 13:34:24Z mike $"
  *
  *   IPP routines for the Common UNIX Printing System (CUPS) scheduler.
  *
@@ -3014,11 +3014,27 @@ cancel_job(cupsd_client_t  *con,        /* I - Client connection */
 
   if (job->state_value >= IPP_JOB_CANCELLED)
   {
-    send_ipp_status(con, IPP_NOT_POSSIBLE,
-                    _("Job #%d is already %s - can\'t cancel."), jobid,
-                   job->state_value == IPP_JOB_CANCELLED ? "cancelled" :
-                   job->state_value == IPP_JOB_ABORTED ? "aborted" :
-                   "completed");
+    switch (job->state_value)
+    {
+      case IPP_JOB_CANCELLED :
+         send_ipp_status(con, IPP_NOT_POSSIBLE,
+                         _("Job #%d is already cancelled - can\'t cancel."),
+                         jobid);
+          break;
+
+      case IPP_JOB_ABORTED :
+         send_ipp_status(con, IPP_NOT_POSSIBLE,
+                         _("Job #%d is already aborted - can\'t cancel."),
+                         jobid);
+          break;
+
+      default :
+         send_ipp_status(con, IPP_NOT_POSSIBLE,
+                         _("Job #%d is already completed - can\'t cancel."),
+                         jobid);
+          break;
+    }
+
     return;
   }
 
@@ -5124,7 +5140,7 @@ get_devices(cupsd_client_t *con)  /* I - Client connection */
   snprintf(options, sizeof(options),
            "%d+%d+%d+requested-attributes=%s",
            con->request->request.op.request_id,
-           limit ? limit->values[0].integer : 0, User,
+           limit ? limit->values[0].integer : 0, (int)User,
           attrs);
 
   if (cupsdSendCommand(con, command, options, 1))
@@ -9094,5 +9110,5 @@ validate_user(cupsd_job_t    *job,        /* I - Job */
 
 
 /*
- * End of "$Id: ipp.c 5232 2006-03-05 17:59:19Z mike $".
+ * End of "$Id: ipp.c 5284 2006-03-13 13:34:24Z mike $".
  */
index 3fbc59f92b77e83e09cf862000e4ca3dc877ac6b..4860b1326ee4190d2828610f3be56788ab4116a5 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: job.c 5196 2006-02-27 21:23:00Z mike $"
+ * "$Id: job.c 5305 2006-03-18 03:05:12Z mike $"
  *
  *   Job management routines for the Common UNIX Printing System (CUPS).
  *
  *   cupsdSetJobHoldUntil()     - Set the hold time for a job...
  *   cupsdSetJobPriority()      - Set the priority of a job, moving it
  *                                up/down in the list as needed.
- *   cupsdStartJob()            - Start a print job.
  *   cupsdStopAllJobs()         - Stop all print jobs.
  *   cupsdStopJob()             - Stop a print job.
  *   cupsdUnloadCompletedJobs() - Flush completed job history from memory.
- *   cupsdUnloadJob()           - Unload a job from memory.
  *   cupsdUpdateJob()           - Read a status update from a jobs filters.
  *   compare_active_jobs()      - Compare the job IDs and priorities of two
  *                                jobs.
@@ -66,6 +64,8 @@
  *   set_time()                 - Set one of the "time-at-xyz" attributes...
  *   set_hold_until()           - Set the hold time and update job-hold-until
  *                                attribute...
+ *   start_job()                - Start a print job.
+ *   unload_job()               - Unload a job from memory.
  */
 
 /*
@@ -104,6 +104,8 @@ static void load_next_job_id(const char *filename);
 static void    load_request_root(void);
 static void    set_time(cupsd_job_t *job, const char *name);
 static void    set_hold_until(cupsd_job_t *job, time_t holdtime);
+static void    start_job(cupsd_job_t *job, cupsd_printer_t *printer);
+static void    unload_job(cupsd_job_t *job);
 
 
 /*
@@ -387,7 +389,7 @@ cupsdCheckJobs(void)
         if (printer->state == IPP_PRINTER_IDLE ||      /* Printer is idle */
            ((printer->type & CUPS_PRINTER_REMOTE) &&   /* Printer is remote */
             !printer->job))                            /* and not printing */
-         cupsdStartJob(job, printer);
+         start_job(job, printer);
       }
     }
   }
@@ -593,7 +595,7 @@ cupsdFinishJob(cupsd_job_t *job)    /* I - Job */
       */
 
       FilterLevel -= job->cost;
-      cupsdStartJob(job, printer);
+      start_job(job, printer);
     }
     else
     {
@@ -1431,1998 +1433,1945 @@ cupsdSetJobPriority(
 
 
 /*
- * 'cupsdStartJob()' - Start a print job.
+ * 'cupsdStopAllJobs()' - Stop all print jobs.
  */
 
 void
-cupsdStartJob(cupsd_job_t     *job,    /* I - Job ID */
-              cupsd_printer_t *printer)        /* I - Printer to print job */
+cupsdStopAllJobs(void)
 {
-  int                  i;              /* Looping var */
-  int                  slot;           /* Pipe slot */
-  cups_array_t         *filters;       /* Filters for job */
-  mime_filter_t                *filter,        /* Current filter */
-                       port_monitor;   /* Port monitor filter */
-  char                 method[255],    /* Method for output */
-                       *optptr,        /* Pointer to options */
-                       *valptr;        /* Pointer in value string */
-  ipp_attribute_t      *attr;          /* Current attribute */
-  struct stat          backinfo;       /* Backend file information */
-  int                  backroot;       /* Run backend as root? */
-  int                  pid;            /* Process ID of new filter process */
-  int                  banner_page;    /* 1 if banner page, 0 otherwise */
-  int                  statusfds[2],   /* Pipes used with the scheduler */
-                       filterfds[2][2];/* Pipes used between filters */
-  int                  envc;           /* Number of environment variables */
-  char                 **argv,         /* Filter command-line arguments */
-                       sani_uri[1024], /* Sanitized DEVICE_URI env var */
-                       filename[1024], /* Job filename */
-                       command[1024],  /* Full path to command */
-                       jobid[255],     /* Job ID string */
-                       title[IPP_MAX_NAME],
-                                       /* Job title string */
-                       copies[255],    /* # copies string */
-                       *envp[MAX_ENV + 11],
-                                       /* Environment variables */
-                       charset[255],   /* CHARSET env variable */
-                       class_name[255],/* CLASS env variable */
-                       classification[1024],
-                                       /* CLASSIFICATION env variable */
-                       content_type[1024],
-                                       /* CONTENT_TYPE env variable */
-                       device_uri[1024],
-                                       /* DEVICE_URI env variable */
-                       final_content_type[1024],
-                                       /* FINAL_CONTENT_TYPE env variable */
-                       lang[255],      /* LANG env variable */
-                       ppd[1024],      /* PPD env variable */
-                       printer_name[255],
-                                       /* PRINTER env variable */
-                       rip_max_cache[255];
-                                       /* RIP_MAX_CACHE env variable */
-  int                  remote_job;     /* Remote print job? */
-  static char          *options = NULL;/* Full list of options */
-  static int           optlength = 0;  /* Length of option buffer */
-
-
-  cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdStartJob: id = %d, file = %d/%d",
-                  job->id, job->current_file, job->num_files);
-
-  if (job->num_files == 0)
-  {
-    cupsdLogMessage(CUPSD_LOG_ERROR, "Job ID %d has no files!  Cancelling it!",
-                    job->id);
-
-    cupsdAddEvent(CUPSD_EVENT_JOB_COMPLETED, job->printer, job,
-                  "Job canceled because it has no files.");
-
-    cupsdCancelJob(job, 0);
-    return;
-  }
+  cupsd_job_t  *job;                   /* Current job */
 
- /*
-  * Figure out what filters are required to convert from
-  * the source to the destination type...
-  */
 
-  filters   = NULL;
-  job->cost = 0;
+  DEBUG_puts("cupsdStopAllJobs()");
 
-  if (printer->raw)
-  {
-   /*
-    * Remote jobs and raw queues go directly to the printer without
-    * filtering...
-    */
+  for (job = (cupsd_job_t *)cupsArrayFirst(ActiveJobs);
+       job;
+       job = (cupsd_job_t *)cupsArrayNext(ActiveJobs))
+    if (job->state_value == IPP_JOB_PROCESSING)
+    {
+      cupsdStopJob(job, 1);
+      job->state->values[0].integer = IPP_JOB_PENDING;
+      job->state_value              = IPP_JOB_PENDING;
+    }
+}
 
-    cupsdLogMessage(CUPSD_LOG_DEBUG,
-                    "[Job %d] Sending job to queue tagged as raw...", job->id);
 
-    filters = NULL;
-  }
-  else
-  {
-   /*
-    * Local jobs get filtered...
-    */
+/*
+ * 'cupsdStopJob()' - Stop a print job.
+ */
 
-    filters = mimeFilter(MimeDatabase, job->filetypes[job->current_file],
-                         printer->filetype, &(job->cost));
+void
+cupsdStopJob(cupsd_job_t *job,         /* I - Job */
+             int         force)                /* I - 1 = Force all filters to stop */
+{
+  int  i;                              /* Looping var */
 
-    if (!filters)
-    {
-      cupsdLogMessage(CUPSD_LOG_ERROR,
-                      "Unable to convert file %d to printable format for "
-                     "job %d!",
-                     job->current_file, job->id);
-      cupsdLogMessage(CUPSD_LOG_INFO,
-                      "Hint: Do you have ESP Ghostscript installed?");
 
-      if (LogLevel < CUPSD_LOG_DEBUG)
-        cupsdLogMessage(CUPSD_LOG_INFO,
-                       "Hint: Try setting the LogLevel to \"debug\".");
+  cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdStopJob: id = %d, force = %d",
+                  job->id, force);
 
-      job->current_file ++;
+  if (job->state_value != IPP_JOB_PROCESSING)
+    return;
 
-      if (job->current_file == job->num_files)
-      {
-       cupsdAddEvent(CUPSD_EVENT_JOB_COMPLETED, job->printer, job,
-                      "Job canceled because it has no files that can be "
-                     "printed.");
+  FilterLevel -= job->cost;
 
-        cupsdCancelJob(job, 0);
-      }
+  if (job->status < 0 &&
+      !(job->dtype & (CUPS_PRINTER_CLASS | CUPS_PRINTER_IMPLICIT)) &&
+      !(job->printer->type & CUPS_PRINTER_FAX) &&
+      !strcmp(job->printer->error_policy, "stop-printer"))
+    cupsdSetPrinterState(job->printer, IPP_PRINTER_STOPPED, 1);
+  else if (job->printer->state != IPP_PRINTER_STOPPED)
+    cupsdSetPrinterState(job->printer, IPP_PRINTER_IDLE, 0);
 
-      return;
-    }
+  cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdStopJob: printer state is %d",
+                  job->printer->state);
 
-   /*
-    * Remove NULL ("-") filters...
-    */
+  job->state->values[0].integer = IPP_JOB_STOPPED;
+  job->state_value              = IPP_JOB_STOPPED;
+  job->printer->job = NULL;
+  job->printer      = NULL;
 
-    for (filter = (mime_filter_t *)cupsArrayFirst(filters);
-         filter;
-        filter = (mime_filter_t *)cupsArrayNext(filters))
-      if (!strcmp(filter->filter, "-"))
-        cupsArrayRemove(filters, filter);
+  job->current_file --;
 
-    if (cupsArrayCount(filters) == 0)
+  for (i = 0; job->filters[i]; i ++)
+    if (job->filters[i] > 0)
     {
-      cupsArrayDelete(filters);
-      filters = NULL;
+      cupsdEndProcess(job->filters[i], force);
+      job->filters[i] = 0;
     }
-  }
-
- /*
-  * See if the filter cost is too high...
-  */
 
-  if ((FilterLevel + job->cost) > FilterLimit && FilterLevel > 0 &&
-      FilterLimit > 0)
+  if (job->backend > 0)
   {
-   /*
-    * Don't print this job quite yet...
-    */
-
-    cupsArrayDelete(filters);
-
-    cupsdLogMessage(CUPSD_LOG_INFO,
-                    "Holding job %d because filter limit has been reached.",
-                    job->id);
-    cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                    "cupsdStartJob: id=%d, file=%d, cost=%d, level=%d, "
-                   "limit=%d",
-                    job->id, job->current_file, job->cost, FilterLevel,
-                   FilterLimit);
-    return;
+    cupsdEndProcess(job->backend, force);
+    job->backend = 0;
   }
 
-  FilterLevel += job->cost;
+  cupsdLogMessage(CUPSD_LOG_DEBUG2,
+                  "cupsdStopJob: Closing print pipes [ %d %d ]...",
+                  job->print_pipes[0], job->print_pipes[1]);
 
- /*
-  * Determine if we are printing to a remote printer...
-  */
+  cupsdClosePipe(job->print_pipes);
 
-  remote_job = printer->raw && job->num_files > 1 &&
-               !strncmp(printer->device_uri, "ipp://", 6);
+  cupsdLogMessage(CUPSD_LOG_DEBUG2,
+                  "cupsdStopJob: Closing back pipes [ %d %d ]...",
+                  job->back_pipes[0], job->back_pipes[1]);
 
- /*
-  * Add decompression filters, if any...
-  */
+  cupsdClosePipe(job->back_pipes);
 
-  if (!remote_job && job->compressions[job->current_file])
+  if (job->status_buffer)
   {
    /*
-    * Add gziptoany filter to the front of the list...
+    * Close the pipe and clear the input bit.
     */
 
-    if (!cupsArrayInsert(filters, &gziptoany_filter))
-    {
-      cupsdLogMessage(CUPSD_LOG_ERROR,
-                      "Unable to add decompression filter - %s",
-                     strerror(errno));
-
-      cupsArrayDelete(filters);
+    cupsdLogMessage(CUPSD_LOG_DEBUG2,
+                    "cupsdStopJob: Removing fd %d from InputSet...",
+                   job->status_buffer->fd);
 
-      job->current_file ++;
+    FD_CLR(job->status_buffer->fd, InputSet);
 
-      if (job->current_file == job->num_files)
-      {
-       cupsdAddEvent(CUPSD_EVENT_JOB_COMPLETED, job->printer, job,
-                      "Job canceled because the print file could not be "
-                     "decompressed.");
+    cupsdLogMessage(CUPSD_LOG_DEBUG2,
+                    "cupsdStopJob: Closing status input pipe %d...",
+                    job->status_buffer->fd);
 
-        cupsdCancelJob(job, 0);
-      }
+    cupsdStatBufDelete(job->status_buffer);
 
-      return;
-    }
+    job->status_buffer = NULL;
   }
+}
 
- /*
-  * Add port monitor, if any...
-  */
 
-  if (printer->port_monitor)
-  {
-   /*
-    * Add port monitor to the end of the list...
-    */
+/*
+ * 'cupsdUnloadCompletedJobs()' - Flush completed job history from memory.
+ */
 
-    if (!cupsArrayAdd(filters, &port_monitor))
-    {
-      cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to add port monitor - %s",
-                      strerror(errno));
+void
+cupsdUnloadCompletedJobs(void)
+{
+  cupsd_job_t  *job;                   /* Current job */
+  time_t       expire;                 /* Expiration time */
 
-      cupsArrayDelete(filters);
 
-      job->current_file ++;
+  expire = time(NULL) - 60;
 
-      if (job->current_file == job->num_files)
-      {
-       cupsdAddEvent(CUPSD_EVENT_JOB_COMPLETED, job->printer, job,
-                      "Job canceled because the port monitor could not be "
-                     "added.");
-
-        cupsdCancelJob(job, 0);
-      }
-
-      return;
-    }
-
-    snprintf(port_monitor.filter, sizeof(port_monitor.filter),
-             "%s/monitor/%s", ServerBin, printer->port_monitor);
-  }
+  for (job = (cupsd_job_t *)cupsArrayFirst(Jobs);
+       job;
+       job = (cupsd_job_t *)cupsArrayNext(Jobs))
+    if (job->attrs && job->state_value >= IPP_JOB_STOPPED &&
+        job->access_time < expire)
+      unload_job(job);
+}
 
- /*
-  * Update the printer and job state to "processing"...
-  */
 
-  job->state->values[0].integer = IPP_JOB_PROCESSING;
-  job->state_value              = IPP_JOB_PROCESSING;
-  job->status  = 0;
-  job->printer = printer;
-  printer->job = job;
-  cupsdSetPrinterState(printer, IPP_PRINTER_PROCESSING, 0);
+/*
+ * 'cupsdUpdateJob()' - Read a status update from a job's filters.
+ */
 
-  if (job->current_file == 0)
-  {
-    set_time(job, "time-at-processing");
-    cupsdOpenPipe(job->back_pipes);
-  }
+void
+cupsdUpdateJob(cupsd_job_t *job)       /* I - Job to check */
+{
+  int          i;                      /* Looping var */
+  int          copies;                 /* Number of copies printed */
+  char         message[1024],          /* Message text */
+               *ptr;                   /* Pointer update... */
+  int          loglevel;               /* Log level for message */
 
- /*
-  * Determine if we are printing a banner page or not...
-  */
 
-  if (job->job_sheets == NULL)
+  while ((ptr = cupsdStatBufUpdate(job->status_buffer, &loglevel,
+                                   message, sizeof(message))) != NULL)
   {
-    cupsdLogMessage(CUPSD_LOG_DEBUG, "No job-sheets attribute.");
-    if ((job->job_sheets =
-         ippFindAttribute(job->attrs, "job-sheets", IPP_TAG_ZERO)) != NULL)
-      cupsdLogMessage(CUPSD_LOG_DEBUG,
-                      "... but someone added one without setting job_sheets!");
-  }
-  else if (job->job_sheets->num_values == 1)
-    cupsdLogMessage(CUPSD_LOG_DEBUG, "job-sheets=%s",
-               job->job_sheets->values[0].string.text);
-  else
-    cupsdLogMessage(CUPSD_LOG_DEBUG, "job-sheets=%s,%s",
-               job->job_sheets->values[0].string.text,
-               job->job_sheets->values[1].string.text);
+   /*
+    * Process page and printer state messages as needed...
+    */
 
-  if (printer->type & (CUPS_PRINTER_REMOTE | CUPS_PRINTER_IMPLICIT))
-    banner_page = 0;
-  else if (job->job_sheets == NULL)
-    banner_page = 0;
-  else if (strcasecmp(job->job_sheets->values[0].string.text, "none") != 0 &&
-          job->current_file == 0)
-    banner_page = 1;
-  else if (job->job_sheets->num_values > 1 &&
-          strcasecmp(job->job_sheets->values[1].string.text, "none") != 0 &&
-          job->current_file == (job->num_files - 1))
-    banner_page = 1;
-  else
-    banner_page = 0;
+    if (loglevel == CUPSD_LOG_PAGE)
+    {
+     /*
+      * Page message; send the message to the page_log file and update the
+      * job sheet count...
+      */
 
-  cupsdLogMessage(CUPSD_LOG_DEBUG, "banner_page = %d", banner_page);
+      if (job->sheets != NULL)
+      {
+        if (!strncasecmp(message, "total ", 6))
+       {
+        /*
+         * Got a total count of pages from a backend or filter...
+         */
 
- /*
-  * Building the options string is harder than it needs to be, but
-  * for the moment we need to pass strings for command-line args and
-  * not IPP attribute pointers... :)
-  *
-  * First allocate/reallocate the option buffer as needed...
-  */
+         copies = atoi(message + 6);
+         copies -= job->sheets->values[0].integer; /* Just track the delta */
+       }
+       else if (!sscanf(message, "%*d%d", &copies))
+         copies = 1;
+         
+        job->sheets->values[0].integer += copies;
 
-  i = ipp_length(job->attrs);
+       if (job->printer->page_limit)
+         cupsdUpdateQuota(job->printer, job->username, copies, 0);
+      }
 
-  if (i > optlength)
-  {
-    if (optlength == 0)
-      optptr = malloc(i);
-    else
-      optptr = realloc(options, i);
+      cupsdLogPage(job, message);
 
-    if (optptr == NULL)
+      cupsdAddEvent(CUPSD_EVENT_JOB_PROGRESS, job->printer, job,
+                    "Printed %d page(s).", job->sheets->values[0].integer);
+    }
+    else if (loglevel == CUPSD_LOG_STATE)
     {
-      cupsdLogMessage(CUPSD_LOG_CRIT,
-                      "Unable to allocate %d bytes for option buffer for "
-                     "job %d!", i, job->id);
-
-      cupsArrayDelete(filters);
-
-      FilterLevel -= job->cost;
-
-      cupsdAddEvent(CUPSD_EVENT_JOB_COMPLETED, job->printer, job,
-                    "Job canceled because the server ran out of memory.");
-
-      cupsdCancelJob(job, 0);
-      return;
+      cupsdSetPrinterReasons(job->printer, message);
+      cupsdAddPrinterHistory(job->printer);
     }
+    else if (loglevel == CUPSD_LOG_ATTR)
+    {
+     /*
+      * Set attribute(s)...
+      */
 
-    options   = optptr;
-    optlength = i;
-  }
+      /**** TODO ****/
+    }
+#ifdef __APPLE__
+    else if (!strncmp(message, "recoverable:", 12))
+    {
+      cupsdSetPrinterReasons(job->printer,
+                             "+com.apple.print.recoverable-warning");
 
- /*
-  * Now loop through the attributes and convert them to the textual
-  * representation used by the filters...
-  */
+      ptr = message + 12;
+      while (isspace(*ptr & 255))
+        ptr ++;
 
-  optptr  = options;
-  *optptr = '\0';
+      cupsdSetString(&job->printer->recoverable, ptr);
+      cupsdAddPrinterHistory(job->printer);
+    }
+    else if (!strncmp(message, "recovered:", 10))
+    {
+      cupsdSetPrinterReasons(job->printer,
+                             "-com.apple.print.recoverable-warning");
 
-  snprintf(title, sizeof(title), "%s-%d", printer->name, job->id);
-  strcpy(copies, "1");
+      ptr = message + 10;
+      while (isspace(*ptr & 255))
+        ptr ++;
 
-  for (attr = job->attrs->attrs; attr != NULL; attr = attr->next)
-  {
-    if (!strcmp(attr->name, "copies") &&
-       attr->value_tag == IPP_TAG_INTEGER)
+      cupsdSetString(&job->printer->recoverable, ptr);
+      cupsdAddPrinterHistory(job->printer);
+    }
+#endif /* __APPLE__ */
+    else if (loglevel <= CUPSD_LOG_INFO)
     {
      /*
-      * Don't use the # copies attribute if we are printing the job sheets...
+      * Some message to show in the printer-state-message attribute...
       */
 
-      if (!banner_page)
-        sprintf(copies, "%d", attr->values[0].integer);
+      strlcpy(job->printer->state_message, message,
+              sizeof(job->printer->state_message));
+      cupsdAddPrinterHistory(job->printer);
     }
-    else if (!strcmp(attr->name, "job-name") &&
-            (attr->value_tag == IPP_TAG_NAME ||
-             attr->value_tag == IPP_TAG_NAMELANG))
-      strlcpy(title, attr->values[0].string.text, sizeof(title));
-    else if (attr->group_tag == IPP_TAG_JOB)
-    {
-     /*
-      * Filter out other unwanted attributes...
-      */
 
-      if (attr->value_tag == IPP_TAG_MIMETYPE ||
-         attr->value_tag == IPP_TAG_NAMELANG ||
-         attr->value_tag == IPP_TAG_TEXTLANG ||
-         (attr->value_tag == IPP_TAG_URI && strcmp(attr->name, "job-uuid")) ||
-         attr->value_tag == IPP_TAG_URISCHEME ||
-         attr->value_tag == IPP_TAG_BEGIN_COLLECTION) /* Not yet supported */
-       continue;
+    if (!strchr(job->status_buffer->buffer, '\n'))
+      break;
+  }
 
-      if (!strncmp(attr->name, "time-", 5))
-       continue;
+  if (ptr == NULL)
+  {
+   /*
+    * See if all of the filters and the backend have returned their
+    * exit statuses.
+    */
 
-      if (!strncmp(attr->name, "job-", 4) && strcmp(attr->name, "job-uuid") &&
-          !(printer->type & CUPS_PRINTER_REMOTE))
-       continue;
+    for (i = 0; job->filters[i] < 0; i ++);
 
-      if (!strncmp(attr->name, "job-", 4) &&
-          strcmp(attr->name, "job-uuid") &&
-          strcmp(attr->name, "job-billing") &&
-          strcmp(attr->name, "job-sheets") &&
-          strcmp(attr->name, "job-hold-until") &&
-         strcmp(attr->name, "job-priority"))
-       continue;
+    if (job->filters[i])
+      return;
 
-      if ((!strcmp(attr->name, "page-label") ||
-           !strcmp(attr->name, "page-border") ||
-           !strncmp(attr->name, "number-up", 9) ||
-          !strcmp(attr->name, "page-set") ||
-          !strcasecmp(attr->name, "AP_FIRSTPAGE_InputSlot") ||
-          !strcasecmp(attr->name, "AP_FIRSTPAGE_ManualFeed")) &&
-         banner_page)
-        continue;
+    if (job->current_file >= job->num_files && job->backend > 0)
+      return;
 
-     /*
-      * Otherwise add them to the list...
-      */
+   /*
+    * Handle the end of job stuff...
+    */
 
-      if (optptr > options)
-       strlcat(optptr, " ", optlength - (optptr - options));
+    cupsdFinishJob(job);
+  }
+}
 
-      if (attr->value_tag != IPP_TAG_BOOLEAN)
-      {
-       strlcat(optptr, attr->name, optlength - (optptr - options));
-       strlcat(optptr, "=", optlength - (optptr - options));
-      }
 
-      for (i = 0; i < attr->num_values; i ++)
-      {
-       if (i)
-         strlcat(optptr, ",", optlength - (optptr - options));
+/*
+ * 'compare_active_jobs()' - Compare the job IDs and priorities of two jobs.
+ */
 
-       optptr += strlen(optptr);
+static int                             /* O - Difference */
+compare_active_jobs(void *first,       /* I - First job */
+                    void *second,      /* I - Second job */
+                   void *data)         /* I - App data (not used) */
+{
+  int  diff;                           /* Difference */
 
-       switch (attr->value_tag)
-       {
-         case IPP_TAG_INTEGER :
-         case IPP_TAG_ENUM :
-             snprintf(optptr, optlength - (optptr - options),
-                      "%d", attr->values[i].integer);
-             break;
 
-         case IPP_TAG_BOOLEAN :
-             if (!attr->values[i].boolean)
-               strlcat(optptr, "no", optlength - (optptr - options));
+  if ((diff = ((cupsd_job_t *)first)->priority -
+              ((cupsd_job_t *)second)->priority) != 0)
+    return (diff);
+  else
+    return (((cupsd_job_t *)first)->id - ((cupsd_job_t *)second)->id);
+}
 
-         case IPP_TAG_NOVALUE :
-             strlcat(optptr, attr->name,
-                     optlength - (optptr - options));
-             break;
 
-         case IPP_TAG_RANGE :
-             if (attr->values[i].range.lower == attr->values[i].range.upper)
-               snprintf(optptr, optlength - (optptr - options) - 1,
-                        "%d", attr->values[i].range.lower);
-              else
-               snprintf(optptr, optlength - (optptr - options) - 1,
-                        "%d-%d", attr->values[i].range.lower,
-                        attr->values[i].range.upper);
-             break;
+/*
+ * 'compare_jobs()' - Compare the job IDs of two jobs.
+ */
 
-         case IPP_TAG_RESOLUTION :
-             snprintf(optptr, optlength - (optptr - options) - 1,
-                      "%dx%d%s", attr->values[i].resolution.xres,
-                      attr->values[i].resolution.yres,
-                      attr->values[i].resolution.units == IPP_RES_PER_INCH ?
-                          "dpi" : "dpc");
-             break;
+static int                             /* O - Difference */
+compare_jobs(void *first,              /* I - First job */
+             void *second,             /* I - Second job */
+            void *data)                /* I - App data (not used) */
+{
+  return (((cupsd_job_t *)first)->id - ((cupsd_job_t *)second)->id);
+}
 
-          case IPP_TAG_STRING :
-         case IPP_TAG_TEXT :
-         case IPP_TAG_NAME :
-         case IPP_TAG_KEYWORD :
-         case IPP_TAG_CHARSET :
-         case IPP_TAG_LANGUAGE :
-         case IPP_TAG_URI :
-             for (valptr = attr->values[i].string.text; *valptr;)
-             {
-               if (strchr(" \t\n\\\'\"", *valptr))
-                 *optptr++ = '\\';
-               *optptr++ = *valptr++;
-             }
 
-             *optptr = '\0';
-             break;
+/*
+ * 'free_job()' - Free all memory used by a job.
+ */
 
-          default :
-             break; /* anti-compiler-warning-code */
-       }
-      }
+static void
+free_job(cupsd_job_t *job)             /* I - Job */
+{
+  cupsdClearString(&job->username);
+  cupsdClearString(&job->dest);
 
-      optptr += strlen(optptr);
-    }
+  if (job->num_files > 0)
+  {
+    free(job->compressions);
+    free(job->filetypes);
   }
 
- /*
-  * Build the command-line arguments for the filters.  Each filter
-  * has 6 or 7 arguments:
-  *
-  *     argv[0] = printer
-  *     argv[1] = job ID
-  *     argv[2] = username
-  *     argv[3] = title
-  *     argv[4] = # copies
-  *     argv[5] = options
-  *     argv[6] = filename (optional; normally stdin)
-  *
-  * This allows legacy printer drivers that use the old System V
-  * printing interface to be used by CUPS.
-  *
-  * For remote jobs, we send all of the files in the argument list.
-  */
+  ippDelete(job->attrs);
 
-  if (remote_job)
-    argv = calloc(7 + job->num_files, sizeof(char *));
-  else
-    argv = calloc(8, sizeof(char *));
+  free(job);
+}
 
-  sprintf(jobid, "%d", job->id);
 
-  argv[0] = printer->name;
-  argv[1] = jobid;
-  argv[2] = job->username;
-  argv[3] = title;
-  argv[4] = copies;
-  argv[5] = options;
+/*
+ * 'ipp_length()' - Compute the size of the buffer needed to hold 
+ *                 the textual IPP attributes.
+ */
 
-  if (remote_job)
-  {
-    for (i = 0; i < job->num_files; i ++)
-    {
-      snprintf(filename, sizeof(filename), "%s/d%05d-%03d", RequestRoot,
-               job->id, i + 1);
-      argv[6 + i] = strdup(filename);
-    }
-  }
-  else
-  {
-    snprintf(filename, sizeof(filename), "%s/d%05d-%03d", RequestRoot,
-             job->id, job->current_file + 1);
-    argv[6] = filename;
-  }
+static int                             /* O - Size of attribute buffer */
+ipp_length(ipp_t *ipp)                 /* I - IPP request */
+{
+  int                  bytes;          /* Number of bytes */
+  int                  i;              /* Looping var */
+  ipp_attribute_t      *attr;          /* Current attribute */
 
-  for (i = 0; argv[i]; i ++)
-    cupsdLogMessage(CUPSD_LOG_DEBUG,
-                    "[Job %d] argv[%d]=\"%s\"", job->id, i, argv[i]);
 
  /*
-  * Create environment variable strings for the filters...
+  * Loop through all attributes...
   */
 
-  attr = ippFindAttribute(job->attrs, "attributes-natural-language",
-                          IPP_TAG_LANGUAGE);
+  bytes = 0;
 
-  switch (strlen(attr->values[0].string.text))
+  for (attr = ipp->attrs; attr != NULL; attr = attr->next)
   {
-    default :
-       /*
-        * This is an unknown or badly formatted language code; use
-       * the POSIX locale...
-       */
+   /*
+    * Skip attributes that won't be sent to filters...
+    */
 
-       strcpy(lang, "LANG=C");
-       break;
+    if (attr->value_tag == IPP_TAG_MIMETYPE ||
+       attr->value_tag == IPP_TAG_NAMELANG ||
+       attr->value_tag == IPP_TAG_TEXTLANG ||
+       attr->value_tag == IPP_TAG_URI ||
+       attr->value_tag == IPP_TAG_URISCHEME)
+      continue;
 
-    case 2 :
-       /*
-        * Just the language code (ll)...
-       */
+    if (strncmp(attr->name, "time-", 5) == 0)
+      continue;
 
-        snprintf(lang, sizeof(lang), "LANG=%s",
-                attr->values[0].string.text);
-        break;
+   /*
+    * Add space for a leading space and commas between each value.
+    * For the first attribute, the leading space isn't used, so the
+    * extra byte can be used as the nul terminator...
+    */
 
-    case 5 :
-       /*
-        * Language and country code (ll-cc)...
-       */
+    bytes ++;                          /* " " separator */
+    bytes += attr->num_values;         /* "," separators */
 
-        snprintf(lang, sizeof(lang), "LANG=%c%c_%c%c",
-                attr->values[0].string.text[0],
-                attr->values[0].string.text[1],
-                toupper(attr->values[0].string.text[3] & 255),
-                toupper(attr->values[0].string.text[4] & 255));
-        break;
-  }
+   /*
+    * Boolean attributes appear as "foo,nofoo,foo,nofoo", while
+    * other attributes appear as "foo=value1,value2,...,valueN".
+    */
 
-  attr = ippFindAttribute(job->attrs, "document-format",
-                          IPP_TAG_MIMETYPE);
-  if (attr != NULL &&
-      (optptr = strstr(attr->values[0].string.text, "charset=")) != NULL)
-    snprintf(charset, sizeof(charset), "CHARSET=%s", optptr + 8);
-  else
-  {
-    attr = ippFindAttribute(job->attrs, "attributes-charset",
-                           IPP_TAG_CHARSET);
-    snprintf(charset, sizeof(charset), "CHARSET=%s",
-             attr->values[0].string.text);
-  }
+    if (attr->value_tag != IPP_TAG_BOOLEAN)
+      bytes += strlen(attr->name);
+    else
+      bytes += attr->num_values * strlen(attr->name);
 
-  snprintf(content_type, sizeof(content_type), "CONTENT_TYPE=%s/%s",
-           job->filetypes[job->current_file]->super,
-           job->filetypes[job->current_file]->type);
-  snprintf(device_uri, sizeof(device_uri), "DEVICE_URI=%s",
-           printer->device_uri);
-  cupsdSanitizeURI(printer->device_uri, sani_uri, sizeof(sani_uri));
-  snprintf(ppd, sizeof(ppd), "PPD=%s/ppd/%s.ppd", ServerRoot, printer->name);
-  snprintf(printer_name, sizeof(printer_name), "PRINTER=%s", printer->name);
-  snprintf(rip_max_cache, sizeof(rip_max_cache), "RIP_MAX_CACHE=%s", RIPCache);
+   /*
+    * Now add the size required for each value in the attribute...
+    */
 
-  envc = cupsdLoadEnv(envp, (int)(sizeof(envp) / sizeof(envp[0])));
+    switch (attr->value_tag)
+    {
+      case IPP_TAG_INTEGER :
+      case IPP_TAG_ENUM :
+         /*
+         * Minimum value of a signed integer is -2147483647, or 11 digits.
+         */
 
-  envp[envc ++] = charset;
-  envp[envc ++] = lang;
-  envp[envc ++] = ppd;
-  envp[envc ++] = rip_max_cache;
-  envp[envc ++] = content_type;
-  envp[envc ++] = device_uri;
-  envp[envc ++] = printer_name;
+         bytes += attr->num_values * 11;
+         break;
 
-  if ((filter = (mime_filter_t *)cupsArrayLast(filters)) != NULL)
-  {
-    snprintf(final_content_type, sizeof(final_content_type),
-             "FINAL_CONTENT_TYPE=%s/%s",
-            filter->dst->super, filter->dst->type);
-    envp[envc ++] = final_content_type;
-  }
-
-  if (Classification && !banner_page)
-  {
-    if ((attr = ippFindAttribute(job->attrs, "job-sheets",
-                                 IPP_TAG_NAME)) == NULL)
-      snprintf(classification, sizeof(classification), "CLASSIFICATION=%s",
-               Classification);
-    else if (attr->num_values > 1 &&
-             strcmp(attr->values[1].string.text, "none") != 0)
-      snprintf(classification, sizeof(classification), "CLASSIFICATION=%s",
-               attr->values[1].string.text);
-    else
-      snprintf(classification, sizeof(classification), "CLASSIFICATION=%s",
-               attr->values[0].string.text);
-
-    envp[envc ++] = classification;
-  }
-
-  if (job->dtype & (CUPS_PRINTER_CLASS | CUPS_PRINTER_IMPLICIT))
-  {
-    snprintf(class_name, sizeof(class_name), "CLASS=%s", job->dest);
-    envp[envc ++] = class_name;
-  }
-
-  envp[envc] = NULL;
+      case IPP_TAG_BOOLEAN :
+         /*
+         * Add two bytes for each false ("no") value...
+         */
 
-  for (i = 0; i < envc; i ++)
-    if (strncmp(envp[i], "DEVICE_URI=", 11))
-      cupsdLogMessage(CUPSD_LOG_DEBUG, "[Job %d] envp[%d]=\"%s\"",
-                      job->id, i, envp[i]);
-    else
-      cupsdLogMessage(CUPSD_LOG_DEBUG, "[Job %d] envp[%d]=\"DEVICE_URI=%s\"",
-                      job->id, i, sani_uri);
+          for (i = 0; i < attr->num_values; i ++)
+           if (!attr->values[i].boolean)
+             bytes += 2;
+         break;
 
-  if (remote_job)
-    job->current_file = job->num_files;
-  else
-    job->current_file ++;
+      case IPP_TAG_RANGE :
+         /*
+         * A range is two signed integers separated by a hyphen, or
+         * 23 characters max.
+         */
 
- /*
-  * Now create processes for all of the filters...
-  */
+         bytes += attr->num_values * 23;
+         break;
 
-  if (cupsdOpenPipe(statusfds))
-  {
-    cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to create job status pipes - %s.",
-                   strerror(errno));
-    snprintf(printer->state_message, sizeof(printer->state_message),
-             "Unable to create status pipes - %s.", strerror(errno));
+      case IPP_TAG_RESOLUTION :
+         /*
+         * A resolution is two signed integers separated by an "x" and
+         * suffixed by the units, or 26 characters max.
+         */
 
-    cupsdAddPrinterHistory(printer);
+         bytes += attr->num_values * 26;
+         break;
 
-    cupsArrayDelete(filters);
+      case IPP_TAG_STRING :
+      case IPP_TAG_TEXT :
+      case IPP_TAG_NAME :
+      case IPP_TAG_KEYWORD :
+      case IPP_TAG_CHARSET :
+      case IPP_TAG_LANGUAGE :
+      case IPP_TAG_URI :
+         /*
+         * Strings can contain characters that need quoting.  We need
+         * at least 2 * len + 2 characters to cover the quotes and
+         * any backslashes in the string.
+         */
 
-    cupsdAddEvent(CUPSD_EVENT_JOB_COMPLETED, job->printer, job,
-                  "Job canceled because the server could not create the job "
-                 "status pipes.");
+          for (i = 0; i < attr->num_values; i ++)
+           bytes += 2 * strlen(attr->values[i].string.text) + 2;
+         break;
 
-    if (remote_job)
-    {
-      for (i = 0; i < job->num_files; i ++)
-        free(argv[i + 6]);
+       default :
+         break; /* anti-compiler-warning-code */
     }
-
-    free(argv);
-
-    cupsdCancelJob(job, 0);
-    return;
   }
 
-  cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdStartJob: statusfds = [ %d %d ]",
-                  statusfds[0], statusfds[1]);
-
-#ifdef FD_CLOEXEC
-  fcntl(statusfds[0], F_SETFD, FD_CLOEXEC);
-  fcntl(statusfds[1], F_SETFD, FD_CLOEXEC);
-#endif /* FD_CLOEXEC */
-
-  job->status_buffer = cupsdStatBufNew(statusfds[0], "[Job %d]",
-                                           job->id);
-  job->status        = 0;
-  memset(job->filters, 0, sizeof(job->filters));
+  return (bytes);
+}
 
-  filterfds[1][0] = open("/dev/null", O_RDONLY);
-  filterfds[1][1] = -1;
 
-  if (filterfds[1][0] < 0)
-  {
-    cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to open \"/dev/null\" - %s.",
-                    strerror(errno));
-    snprintf(printer->state_message, sizeof(printer->state_message),
-             "Unable to open \"/dev/null\" - %s.", strerror(errno));
+/*
+ * 'load_job_cache()' - Load jobs from the job.cache file.
+ */
 
-    cupsdAddPrinterHistory(printer);
+static void
+load_job_cache(const char *filename)   /* I - job.cache filename */
+{
+  cups_file_t  *fp;                    /* job.cache file */
+  char         line[1024],             /* Line buffer */
+               *value;                 /* Value on line */
+  int          linenum;                /* Line number in file */
+  cupsd_job_t  *job;                   /* Current job */
+  int          jobid;                  /* Job ID */
+  char         jobfile[1024];          /* Job filename */
 
-    cupsArrayDelete(filters);
 
-    cupsdClosePipe(statusfds);
+ /*
+  * Open the job.cache file...
+  */
 
-    if (remote_job)
-    {
-      for (i = 0; i < job->num_files; i ++)
-        free(argv[i + 6]);
-    }
+  if ((fp = cupsFileOpen(filename, "r")) == NULL)
+  {
+    if (errno != ENOENT)
+      cupsdLogMessage(CUPSD_LOG_ERROR,
+                      "Unable to open job cache file \"%s\": %s",
+                      filename, strerror(errno));
 
-    free(argv);
+    load_request_root();
 
-    cupsdCancelJob(job, 0);
     return;
   }
 
-  fcntl(filterfds[1][0], F_SETFD, fcntl(filterfds[1][0], F_GETFD) | FD_CLOEXEC);
+ /*
+  * Read entries from the job cache file and create jobs as needed.
+  */
 
-  cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdStartJob: filterfds[%d] = [ %d %d ]",
-                  1, filterfds[1][0], filterfds[1][1]);
+  cupsdLogMessage(CUPSD_LOG_INFO, "Loading job cache file \"%s\"...",
+                  filename);
 
-  for (i = 0, slot = 0, filter = (mime_filter_t *)cupsArrayFirst(filters);
-       filter;
-       i ++, filter = (mime_filter_t *)cupsArrayNext(filters))
-  {
-    if (filter->filter[0] != '/')
-      snprintf(command, sizeof(command), "%s/filter/%s", ServerBin,
-               filter->filter);
-    else
-      strlcpy(command, filter->filter, sizeof(command));
+  linenum = 0;
+  job     = NULL;
 
-    if (i < (cupsArrayCount(filters) - 1))
+  while (cupsFileGetConf(fp, line, sizeof(line), &value, &linenum))
+  {
+    if (!strcasecmp(line, "NextJobId"))
     {
-      if (cupsdOpenPipe(filterfds[slot]))
+      if (value)
+        NextJobId = atoi(value);
+    }
+    else if (!strcasecmp(line, "<Job"))
+    {
+      if (job)
       {
-       cupsdLogMessage(CUPSD_LOG_ERROR,
-                       "Unable to create job filter pipes - %s.",
-                       strerror(errno));
-       snprintf(printer->state_message, sizeof(printer->state_message),
-               "Unable to create filter pipes - %s.", strerror(errno));
-       cupsdAddPrinterHistory(printer);
-
-       cupsArrayDelete(filters);
-
-       cupsdClosePipe(statusfds);
-       cupsdClosePipe(filterfds[!slot]);
+        cupsdLogMessage(CUPSD_LOG_ERROR, "Missing </Job> directive on line %d!",
+                       linenum);
+        continue;
+      }
 
-       cupsdAddEvent(CUPSD_EVENT_JOB_COMPLETED, job->printer, job,
-                      "Job canceled because the server could not create the "
-                     "filter pipes.");
+      if (!value)
+      {
+        cupsdLogMessage(CUPSD_LOG_ERROR, "Missing job ID on line %d!", linenum);
+       continue;
+      }
 
-        if (remote_job)
-       {
-         for (i = 0; i < job->num_files; i ++)
-            free(argv[i + 6]);
-       }
+      jobid = atoi(value);
 
-       free(argv);
+      if (jobid < 1)
+      {
+        cupsdLogMessage(CUPSD_LOG_ERROR, "Bad job ID %d on line %d!", jobid,
+                       linenum);
+        continue;
+      }
 
-       cupsdCancelJob(job, 0);
-       return;
+      snprintf(jobfile, sizeof(jobfile), "%s/c%05d", RequestRoot, jobid);
+      if (access(jobfile, 0))
+      {
+        cupsdLogMessage(CUPSD_LOG_ERROR, "Job %d files have gone away!", jobid);
+        continue;
       }
-    }
-    else
-    {
-      if (job->current_file == 1)
+
+      job = calloc(1, sizeof(cupsd_job_t));
+      if (!job)
       {
-       if (strncmp(printer->device_uri, "file:", 5) != 0)
-       {
-         if (cupsdOpenPipe(job->print_pipes))
-         {
-           cupsdLogMessage(CUPSD_LOG_ERROR,
-                           "Unable to create job backend pipes - %s.",
-                           strerror(errno));
-           snprintf(printer->state_message, sizeof(printer->state_message),
-                   "Unable to create backend pipes - %s.", strerror(errno));
-           cupsdAddPrinterHistory(printer);
+        cupsdLogMessage(CUPSD_LOG_EMERG,
+                       "Unable to allocate memory for job %d!", jobid);
+        break;
+      }
 
-           cupsArrayDelete(filters);
+      job->id             = jobid;
+      job->back_pipes[0]  = -1;
+      job->back_pipes[1]  = -1;
+      job->print_pipes[0] = -1;
+      job->print_pipes[1] = -1;
 
-           cupsdClosePipe(statusfds);
-           cupsdClosePipe(filterfds[!slot]);
+      cupsdLogMessage(CUPSD_LOG_DEBUG, "Loading job %d from cache...", job->id);
+    }
+    else if (!job)
+    {
+      cupsdLogMessage(CUPSD_LOG_ERROR,
+                     "Missing <Job #> directive on line %d!", linenum);
+      continue;
+    }
+    else if (!strcasecmp(line, "</Job>"))
+    {
+      cupsArrayAdd(Jobs, job);
 
-           cupsdAddEvent(CUPSD_EVENT_JOB_COMPLETED, job->printer, job,
-                         "Job canceled because the server could not create "
-                         "the backend pipes.");
+      if (job->state_value < IPP_JOB_STOPPED)
+      {
+        cupsArrayAdd(ActiveJobs, job);
+       cupsdLoadJob(job);
+      }
 
-            if (remote_job)
-           {
-             for (i = 0; i < job->num_files; i ++)
-               free(argv[i + 6]);
-           }
+      job = NULL;
+    }
+    else if (!value)
+    {
+      cupsdLogMessage(CUPSD_LOG_ERROR, "Missing value on line %d!", linenum);
+      continue;
+    }
+    else if (!strcasecmp(line, "State"))
+    {
+      job->state_value = atoi(value);
+
+      if (job->state_value < IPP_JOB_PENDING)
+        job->state_value = IPP_JOB_PENDING;
+      else if (job->state_value > IPP_JOB_COMPLETED)
+        job->state_value = IPP_JOB_COMPLETED;
+    }
+    else if (!strcasecmp(line, "Priority"))
+    {
+      job->priority = atoi(value);
+    }
+    else if (!strcasecmp(line, "Username"))
+    {
+      cupsdSetString(&job->username, value);
+    }
+    else if (!strcasecmp(line, "Destination"))
+    {
+      cupsdSetString(&job->dest, value);
+    }
+    else if (!strcasecmp(line, "DestType"))
+    {
+      job->dtype = (cups_ptype_t)atoi(value);
+    }
+    else if (!strcasecmp(line, "NumFiles"))
+    {
+      job->num_files = atoi(value);
 
-           free(argv);
+      if (job->num_files < 0)
+      {
+       cupsdLogMessage(CUPSD_LOG_ERROR, "Bad NumFiles value %d on line %d!",
+                       job->num_files, linenum);
+        job->num_files = 0;
+       continue;
+      }
 
-           cupsdCancelJob(job, 0);
-           return;
-         }
+      if (job->num_files > 0)
+      {
+        snprintf(jobfile, sizeof(jobfile), "%s/d%05d-001", RequestRoot,
+                job->id);
+        if (access(jobfile, 0))
+       {
+         cupsdLogMessage(CUPSD_LOG_INFO,
+                         "Data files for job %d have gone away!", job->id);
+          job->num_files = 0;
+         continue;
        }
-       else
+
+        job->filetypes    = calloc(job->num_files, sizeof(mime_type_t *));
+       job->compressions = calloc(job->num_files, sizeof(int));
+
+        if (!job->filetypes || !job->compressions)
        {
-         job->print_pipes[0] = -1;
-         if (!strncmp(printer->device_uri, "file:/dev/", 10) &&
-             strcmp(printer->device_uri, "file:/dev/null"))
-           job->print_pipes[1] = open(printer->device_uri + 5,
-                                      O_WRONLY | O_EXCL);
-         else if (!strncmp(printer->device_uri, "file:///dev/", 12) &&
-                  strcmp(printer->device_uri, "file:///dev/null"))
-           job->print_pipes[1] = open(printer->device_uri + 7,
-                                      O_WRONLY | O_EXCL);
-         else
-           job->print_pipes[1] = open(printer->device_uri + 5,
-                                      O_WRONLY | O_CREAT | O_TRUNC, 0600);
+         cupsdLogMessage(CUPSD_LOG_EMERG,
+                         "Unable to allocate memory for %d files!",
+                         job->num_files);
+          break;
+       }
+      }
+    }
+    else if (!strcasecmp(line, "File"))
+    {
+      int      number,                 /* File number */
+               compression;            /* Compression value */
+      char     super[MIME_MAX_SUPER],  /* MIME super type */
+               type[MIME_MAX_TYPE];    /* MIME type */
 
-         if (job->print_pipes[1] < 0)
-         {
-            cupsdLogMessage(CUPSD_LOG_ERROR,
-                           "Unable to open output file \"%s\" - %s.",
-                           printer->device_uri, strerror(errno));
-            snprintf(printer->state_message, sizeof(printer->state_message),
-                    "Unable to open output file \"%s\" - %s.",
-                    printer->device_uri, strerror(errno));
 
-           cupsdAddPrinterHistory(printer);
+      if (sscanf(value, "%d%*[ \t]%15[^/]/%255s%d", &number, super, type,
+                 &compression) != 4)
+      {
+        cupsdLogMessage(CUPSD_LOG_ERROR, "Bad File on line %d!", linenum);
+       continue;
+      }
 
-           cupsArrayDelete(filters);
+      if (number < 1 || number > job->num_files)
+      {
+        cupsdLogMessage(CUPSD_LOG_ERROR, "Bad File number %d on line %d!",
+                       number, linenum);
+        continue;
+      }
 
-           cupsdClosePipe(statusfds);
-           cupsdClosePipe(filterfds[!slot]);
+      number --;
 
-           cupsdAddEvent(CUPSD_EVENT_JOB_COMPLETED, job->printer, job,
-                         "Job canceled because the server could not open the "
-                         "output file.");
+      job->compressions[number] = compression;
+      job->filetypes[number]    = mimeType(MimeDatabase, super, type);
 
-            if (remote_job)
-           {
-             for (i = 0; i < job->num_files; i ++)
-               free(argv[i + 6]);
-           }
+      if (!job->filetypes[number])
+      {
+       /*
+        * If the original MIME type is unknown, auto-type it!
+       */
 
-           free(argv);
+        cupsdLogMessage(CUPSD_LOG_ERROR,
+                       "Unknown MIME type %s/%s for file %d of job %d!",
+                       super, type, number + 1, job->id);
 
-           cupsdCancelJob(job, 0);
-           return;
-         }
+        snprintf(jobfile, sizeof(jobfile), "%s/d%05d-%03d", RequestRoot,
+                job->id, number + 1);
+        job->filetypes[number] = mimeFileType(MimeDatabase, jobfile, NULL,
+                                             job->compressions + number);
 
-         fcntl(job->print_pipes[1], F_SETFD,
-               fcntl(job->print_pipes[1], F_GETFD) | FD_CLOEXEC);
-       }
+       /*
+        * If that didn't work, assume it is raw...
+       */
 
-       cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                       "cupsdStartJob: print_pipes = [ %d %d ]",
-                        job->print_pipes[0], job->print_pipes[1]);
+        if (!job->filetypes[number])
+         job->filetypes[number] = mimeType(MimeDatabase, "application",
+                                           "vnd.cups-raw");
       }
-
-      filterfds[slot][0] = job->print_pipes[0];
-      filterfds[slot][1] = job->print_pipes[1];
     }
+    else
+      cupsdLogMessage(CUPSD_LOG_ERROR, "Unknown %s directive on line %d!",
+                      line, linenum);
+  }
 
-    cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdStartJob: filter=\"%s\"",
-                    command);
-    cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                    "cupsdStartJob: filterfds[%d]=[ %d %d ]",
-                    slot, filterfds[slot][0], filterfds[slot][1]);
+  cupsFileClose(fp);
+}
 
-    pid = cupsdStartProcess(command, argv, envp, filterfds[!slot][0],
-                            filterfds[slot][1], statusfds[1],
-                           job->back_pipes[0], 0, job->filters + i);
 
-    cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                    "cupsdStartJob: Closing filter pipes for slot %d "
-                   "[ %d %d ]...",
-                    !slot, filterfds[!slot][0], filterfds[!slot][1]);
+/*
+ * 'load_next_job_id()' - Load the NextJobId value from the job.cache file.
+ */
 
-    cupsdClosePipe(filterfds[!slot]);
+static void
+load_next_job_id(const char *filename) /* I - job.cache filename */
+{
+  cups_file_t  *fp;                    /* job.cache file */
+  char         line[1024],             /* Line buffer */
+               *value;                 /* Value on line */
+  int          linenum;                /* Line number in file */
 
-    if (pid == 0)
-    {
-      cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to start filter \"%s\" - %s.",
-                      filter->filter, strerror(errno));
-      snprintf(printer->state_message, sizeof(printer->state_message),
-               "Unable to start filter \"%s\" - %s.",
-               filter->filter, strerror(errno));
 
-      cupsdAddPrinterHistory(printer);
+ /*
+  * Read the NextJobId directive from the job.cache file and use
+  * the value (if any).
+  */
 
-      cupsArrayDelete(filters);
+  if ((fp = cupsFileOpen(filename, "r")) == NULL)
+  {
+    if (errno != ENOENT)
+      cupsdLogMessage(CUPSD_LOG_ERROR,
+                      "Unable to open job cache file \"%s\": %s",
+                      filename, strerror(errno));
 
-      cupsdAddPrinterHistory(printer);
+    return;
+  }
 
-      cupsdAddEvent(CUPSD_EVENT_JOB_COMPLETED, job->printer, job,
-                    "Job canceled because the server could not execute a "
-                   "filter.");
+  cupsdLogMessage(CUPSD_LOG_INFO,
+                  "Loading NextJobId from job cache file \"%s\"...", filename);
 
-      if (remote_job)
-      {
-       for (i = 0; i < job->num_files; i ++)
-          free(argv[i + 6]);
-      }
+  linenum = 0;
 
-      free(argv);
+  while (cupsFileGetConf(fp, line, sizeof(line), &value, &linenum))
+  {
+    if (!strcasecmp(line, "NextJobId"))
+    {
+      if (value)
+        NextJobId = atoi(value);
 
-      cupsdCancelJob(job, 0);
-      return;
+      break;
     }
+  }
 
-    cupsdLogMessage(CUPSD_LOG_INFO, "Started filter %s (PID %d) for job %d.",
-                    command, pid, job->id);
+  cupsFileClose(fp);
+}
 
-    argv[6] = NULL;
-    slot    = !slot;
-  }
 
-  cupsArrayDelete(filters);
+/*
+ * 'load_request_root()' - Load jobs from the RequestRoot directory.
+ */
+
+static void
+load_request_root(void)
+{
+  cups_dir_t           *dir;           /* Directory */
+  cups_dentry_t                *dent;          /* Directory entry */
+  cupsd_job_t          *job;           /* New job */
+
 
  /*
-  * Finally, pipe the final output into a backend process if needed...
+  * Open the requests directory...
   */
 
-  if (strncmp(printer->device_uri, "file:", 5) != 0)
+  cupsdLogMessage(CUPSD_LOG_DEBUG, "Scanning %s for jobs...", RequestRoot);
+
+  if ((dir = cupsDirOpen(RequestRoot)) == NULL)
   {
-    if (job->current_file == 1)
-    {
-      sscanf(printer->device_uri, "%254[^:]", method);
-      snprintf(command, sizeof(command), "%s/backend/%s", ServerBin, method);
+    cupsdLogMessage(CUPSD_LOG_ERROR,
+                    "Unable to open spool directory \"%s\": %s",
+                    RequestRoot, strerror(errno));
+    return;
+  }
+
+ /*
+  * Read all the c##### files...
+  */
 
+  while ((dent = cupsDirRead(dir)) != NULL)
+    if (strlen(dent->filename) >= 6 && dent->filename[0] == 'c')
+    {
      /*
-      * See if the backend needs to run as root...
+      * Allocate memory for the job...
       */
 
-      if (RunUser)
-        backroot = 0;
-      else if (lstat(command, &backinfo))
-       backroot = 0;
-      else
-        backroot = !(backinfo.st_mode & (S_IRWXG | S_IRWXO));
-
-      argv[0] = sani_uri;
-
-      filterfds[slot][0] = -1;
-      filterfds[slot][1] = open("/dev/null", O_WRONLY);
-
-      if (filterfds[slot][1] < 0)
+      if ((job = calloc(sizeof(cupsd_job_t), 1)) == NULL)
       {
-       cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to open \"/dev/null\" - %s.",
-                       strerror(errno));
-       snprintf(printer->state_message, sizeof(printer->state_message),
-                "Unable to open \"/dev/null\" - %s.", strerror(errno));
-
-       cupsdAddPrinterHistory(printer);
-
-       cupsdClosePipe(statusfds);
-
-       cupsdAddEvent(CUPSD_EVENT_JOB_COMPLETED, job->printer, job,
-                      "Job canceled because the server could not open a file.");
-
-        if (remote_job)
-       {
-         for (i = 0; i < job->num_files; i ++)
-            free(argv[i + 6]);
-       }
-
-       free(argv);
-
-       cupsdCancelJob(job, 0);
+        cupsdLogMessage(CUPSD_LOG_ERROR, "Ran out of memory for jobs!");
+       cupsDirClose(dir);
        return;
       }
 
-      fcntl(filterfds[slot][1], F_SETFD,
-            fcntl(filterfds[slot][1], F_GETFD) | FD_CLOEXEC);
-
-      cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdStartJob: backend=\"%s\"",
-                      command);
-      cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                      "cupsdStartJob: filterfds[%d] = [ %d %d ]",
-                     slot, filterfds[slot][0], filterfds[slot][1]);
-
-      pid = cupsdStartProcess(command, argv, envp, filterfds[!slot][0],
-                             filterfds[slot][1], statusfds[1],
-                             job->back_pipes[1], backroot,
-                             &(job->backend));
-
-      if (pid == 0)
-      {
-       cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to start backend \"%s\" - %s.",
-                        method, strerror(errno));
-       snprintf(printer->state_message, sizeof(printer->state_message),
-                "Unable to start backend \"%s\" - %s.", method,
-                strerror(errno));
-
-       cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                       "cupsdStartJob: Closing print pipes [ %d %d ]...",
-                       job->print_pipes[0], job->print_pipes[1]);
+     /*
+      * Assign the job ID...
+      */
 
-        cupsdClosePipe(job->print_pipes);
+      job->id             = atoi(dent->filename + 1);
+      job->back_pipes[0]  = -1;
+      job->back_pipes[1]  = -1;
+      job->print_pipes[0] = -1;
+      job->print_pipes[1] = -1;
 
-       cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                       "cupsdStartJob: Closing back pipes [ %d %d ]...",
-                       job->back_pipes[0], job->back_pipes[1]);
+      if (job->id >= NextJobId)
+        NextJobId = job->id + 1;
 
-        cupsdClosePipe(job->back_pipes);
+     /*
+      * Load the job...
+      */
 
-       cupsdAddEvent(CUPSD_EVENT_JOB_COMPLETED, job->printer, job,
-                      "Job canceled because the server could not execute "
-                     "the backend.");
+      cupsdLoadJob(job);
 
-        if (remote_job)
-       {
-         for (i = 0; i < job->num_files; i ++)
-            free(argv[i + 6]);
-       }
+     /*
+      * Insert the job into the array, sorting by job priority and ID...
+      */
 
-       free(argv);
+      cupsArrayAdd(Jobs, job);
 
-        cupsdCancelJob(job, 0);
-       return;
-      }
+      if (job->state_value < IPP_JOB_STOPPED)
+        cupsArrayAdd(ActiveJobs,job);
       else
-      {
-       cupsdLogMessage(CUPSD_LOG_INFO,
-                       "Started backend %s (PID %d) for job %d.",
-                       command, pid, job->id);
-      }
+        unload_job(job);
     }
 
-    if (job->current_file == job->num_files)
-    {
-      cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                      "cupsdStartJob: Closing print pipes [ %d %d ]...",
-                     job->print_pipes[0], job->print_pipes[1]);
-
-      cupsdClosePipe(job->print_pipes);
+  cupsDirClose(dir);
+}
 
-      cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                      "cupsdStartJob: Closing back pipes [ %d %d ]...",
-                     job->back_pipes[0], job->back_pipes[1]);
 
-      cupsdClosePipe(job->back_pipes);
-    }
-  }
-  else
-  {
-    filterfds[slot][0] = -1;
-    filterfds[slot][1] = -1;
+/*
+ * 'set_time()' - Set one of the "time-at-xyz" attributes...
+ */
 
-    if (job->current_file == job->num_files)
-    {
-      cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                      "cupsdStartJob: Closing print pipes [ %d %d ]...",
-                     job->print_pipes[0], job->print_pipes[1]);
+static void
+set_time(cupsd_job_t *job,             /* I - Job to update */
+         const char  *name)            /* I - Name of attribute */
+{
+  ipp_attribute_t      *attr;          /* Time attribute */
 
-      cupsdClosePipe(job->print_pipes);
-    }
-  }
 
-  if (remote_job)
+  if ((attr = ippFindAttribute(job->attrs, name, IPP_TAG_ZERO)) != NULL)
   {
-    for (i = 0; i < job->num_files; i ++)
-      free(argv[i + 6]);
+    attr->value_tag         = IPP_TAG_INTEGER;
+    attr->values[0].integer = time(NULL);
   }
+}
 
-  free(argv);
-
-  cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                  "cupsdStartJob: Closing filter pipes for slot %d "
-                 "[ %d %d ]...",
-                  slot, filterfds[slot][0], filterfds[slot][1]);
 
-  cupsdClosePipe(filterfds[slot]);
+/*
+ * 'set_hold_until()' - Set the hold time and update job-hold-until attribute...
+ */
 
-  cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                  "cupsdStartJob: Closing status output pipe %d...",
-                  statusfds[1]);
+static void 
+set_hold_until(cupsd_job_t *job,       /* I - Job to update */
+              time_t      holdtime)    /* I - Hold until time */
+{
+  ipp_attribute_t      *attr;          /* job-hold-until attribute */
+  struct tm            *holddate;      /* Hold date */
+  char                 holdstr[64];    /* Hold time */
 
-  close(statusfds[1]);
 
-  cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                  "cupsdStartJob: Adding fd %d to InputSet...",
-                  job->status_buffer->fd);
+ /*
+  * Set the hold_until value and hold the job...
+  */
 
-  FD_SET(job->status_buffer->fd, InputSet);
+  cupsdLogMessage(CUPSD_LOG_DEBUG, "set_hold_until: hold_until = %d",
+                  (int)holdtime);
 
-  cupsdAddEvent(CUPSD_EVENT_JOB_STATE, job->printer, job, "Job #%d started.",
-                job->id);
-}
+  job->state->values[0].integer = IPP_JOB_HELD;
+  job->state_value              = IPP_JOB_HELD;
+  job->hold_until               = holdtime;
 
+ /*
+  * Update the job-hold-until attribute with a string representing GMT
+  * time (HH:MM:SS)...
+  */
 
-/*
- * 'cupsdStopAllJobs()' - Stop all print jobs.
- */
+  holddate = gmtime(&holdtime);
+  snprintf(holdstr, sizeof(holdstr), "%d:%d:%d", holddate->tm_hour, 
+          holddate->tm_min, holddate->tm_sec);
 
-void
-cupsdStopAllJobs(void)
-{
-  cupsd_job_t  *job;                   /* Current job */
+  if ((attr = ippFindAttribute(job->attrs, "job-hold-until",
+                               IPP_TAG_KEYWORD)) == NULL)
+    attr = ippFindAttribute(job->attrs, "job-hold-until", IPP_TAG_NAME);
 
+ /*
+  * Either add the attribute or update the value of the existing one
+  */
 
-  DEBUG_puts("cupsdStopAllJobs()");
+  if (attr == NULL)
+    attr = ippAddString(job->attrs, IPP_TAG_JOB, IPP_TAG_KEYWORD,
+                        "job-hold-until", NULL, holdstr);
+  else
+    cupsdSetString(&attr->values[0].string.text, holdstr);
 
-  for (job = (cupsd_job_t *)cupsArrayFirst(ActiveJobs);
-       job;
-       job = (cupsd_job_t *)cupsArrayNext(ActiveJobs))
-    if (job->state_value == IPP_JOB_PROCESSING)
-    {
-      cupsdStopJob(job, 1);
-      job->state->values[0].integer = IPP_JOB_PENDING;
-      job->state_value              = IPP_JOB_PENDING;
-    }
+  cupsdSaveJob(job);
 }
 
 
 /*
- * 'cupsdStopJob()' - Stop a print job.
+ * 'start_job()' - Start a print job.
  */
 
-void
-cupsdStopJob(cupsd_job_t *job,         /* I - Job */
-             int         force)                /* I - 1 = Force all filters to stop */
+static void
+start_job(cupsd_job_t     *job,                /* I - Job ID */
+          cupsd_printer_t *printer)    /* I - Printer to print job */
 {
-  int  i;                              /* Looping var */
+  int                  i;              /* Looping var */
+  int                  slot;           /* Pipe slot */
+  cups_array_t         *filters;       /* Filters for job */
+  mime_filter_t                *filter,        /* Current filter */
+                       port_monitor;   /* Port monitor filter */
+  char                 method[255],    /* Method for output */
+                       *optptr,        /* Pointer to options */
+                       *valptr;        /* Pointer in value string */
+  ipp_attribute_t      *attr;          /* Current attribute */
+  struct stat          backinfo;       /* Backend file information */
+  int                  backroot;       /* Run backend as root? */
+  int                  pid;            /* Process ID of new filter process */
+  int                  banner_page;    /* 1 if banner page, 0 otherwise */
+  int                  statusfds[2],   /* Pipes used with the scheduler */
+                       filterfds[2][2];/* Pipes used between filters */
+  int                  envc;           /* Number of environment variables */
+  char                 **argv,         /* Filter command-line arguments */
+                       sani_uri[1024], /* Sanitized DEVICE_URI env var */
+                       filename[1024], /* Job filename */
+                       command[1024],  /* Full path to command */
+                       jobid[255],     /* Job ID string */
+                       title[IPP_MAX_NAME],
+                                       /* Job title string */
+                       copies[255],    /* # copies string */
+                       *envp[MAX_ENV + 11],
+                                       /* Environment variables */
+                       charset[255],   /* CHARSET env variable */
+                       class_name[255],/* CLASS env variable */
+                       classification[1024],
+                                       /* CLASSIFICATION env variable */
+                       content_type[1024],
+                                       /* CONTENT_TYPE env variable */
+                       device_uri[1024],
+                                       /* DEVICE_URI env variable */
+                       final_content_type[1024],
+                                       /* FINAL_CONTENT_TYPE env variable */
+                       lang[255],      /* LANG env variable */
+                       ppd[1024],      /* PPD env variable */
+                       printer_name[255],
+                                       /* PRINTER env variable */
+                       rip_max_cache[255];
+                                       /* RIP_MAX_CACHE env variable */
+  int                  remote_job;     /* Remote print job? */
+  static char          *options = NULL;/* Full list of options */
+  static int           optlength = 0;  /* Length of option buffer */
 
 
-  cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdStopJob: id = %d, force = %d",
-                  job->id, force);
+  cupsdLogMessage(CUPSD_LOG_DEBUG2, "start_job: id = %d, file = %d/%d",
+                  job->id, job->current_file, job->num_files);
 
-  if (job->state_value != IPP_JOB_PROCESSING)
+  if (job->num_files == 0)
+  {
+    cupsdLogMessage(CUPSD_LOG_ERROR, "Job ID %d has no files!  Cancelling it!",
+                    job->id);
+
+    cupsdAddEvent(CUPSD_EVENT_JOB_COMPLETED, job->printer, job,
+                  "Job canceled because it has no files.");
+
+    cupsdCancelJob(job, 0);
     return;
+  }
 
-  FilterLevel -= job->cost;
+ /*
+  * Figure out what filters are required to convert from
+  * the source to the destination type...
+  */
 
-  if (job->status < 0 &&
-      !(job->dtype & (CUPS_PRINTER_CLASS | CUPS_PRINTER_IMPLICIT)) &&
-      !(job->printer->type & CUPS_PRINTER_FAX) &&
-      !strcmp(job->printer->error_policy, "stop-printer"))
-    cupsdSetPrinterState(job->printer, IPP_PRINTER_STOPPED, 1);
-  else if (job->printer->state != IPP_PRINTER_STOPPED)
-    cupsdSetPrinterState(job->printer, IPP_PRINTER_IDLE, 0);
+  filters   = NULL;
+  job->cost = 0;
 
-  cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdStopJob: printer state is %d",
-                  job->printer->state);
+  if (printer->raw)
+  {
+   /*
+    * Remote jobs and raw queues go directly to the printer without
+    * filtering...
+    */
 
-  job->state->values[0].integer = IPP_JOB_STOPPED;
-  job->state_value              = IPP_JOB_STOPPED;
-  job->printer->job = NULL;
-  job->printer      = NULL;
+    cupsdLogMessage(CUPSD_LOG_DEBUG,
+                    "[Job %d] Sending job to queue tagged as raw...", job->id);
 
-  job->current_file --;
+    filters = NULL;
+  }
+  else
+  {
+   /*
+    * Local jobs get filtered...
+    */
 
-  for (i = 0; job->filters[i]; i ++)
-    if (job->filters[i] > 0)
+    filters = mimeFilter(MimeDatabase, job->filetypes[job->current_file],
+                         printer->filetype, &(job->cost));
+
+    if (!filters)
     {
-      cupsdEndProcess(job->filters[i], force);
-      job->filters[i] = 0;
-    }
+      cupsdLogMessage(CUPSD_LOG_ERROR,
+                      "Unable to convert file %d to printable format for "
+                     "job %d!",
+                     job->current_file, job->id);
+      cupsdLogMessage(CUPSD_LOG_INFO,
+                      "Hint: Do you have ESP Ghostscript installed?");
 
-  if (job->backend > 0)
-  {
-    cupsdEndProcess(job->backend, force);
-    job->backend = 0;
-  }
+      if (LogLevel < CUPSD_LOG_DEBUG)
+        cupsdLogMessage(CUPSD_LOG_INFO,
+                       "Hint: Try setting the LogLevel to \"debug\".");
 
-  cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                  "cupsdStopJob: Closing print pipes [ %d %d ]...",
-                  job->print_pipes[0], job->print_pipes[1]);
+      job->current_file ++;
 
-  cupsdClosePipe(job->print_pipes);
+      if (job->current_file == job->num_files)
+      {
+       cupsdAddEvent(CUPSD_EVENT_JOB_COMPLETED, job->printer, job,
+                      "Job canceled because it has no files that can be "
+                     "printed.");
 
-  cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                  "cupsdStopJob: Closing back pipes [ %d %d ]...",
-                  job->back_pipes[0], job->back_pipes[1]);
+        cupsdCancelJob(job, 0);
+      }
 
-  cupsdClosePipe(job->back_pipes);
+      return;
+    }
 
-  if (job->status_buffer)
-  {
    /*
-    * Close the pipe and clear the input bit.
+    * Remove NULL ("-") filters...
     */
 
-    cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                    "cupsdStopJob: Removing fd %d from InputSet...",
-                   job->status_buffer->fd);
-
-    FD_CLR(job->status_buffer->fd, InputSet);
+    for (filter = (mime_filter_t *)cupsArrayFirst(filters);
+         filter;
+        filter = (mime_filter_t *)cupsArrayNext(filters))
+      if (!strcmp(filter->filter, "-"))
+        cupsArrayRemove(filters, filter);
 
-    cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                    "cupsdStopJob: Closing status input pipe %d...",
-                    job->status_buffer->fd);
+    if (cupsArrayCount(filters) == 0)
+    {
+      cupsArrayDelete(filters);
+      filters = NULL;
+    }
+  }
 
-    cupsdStatBufDelete(job->status_buffer);
+ /*
+  * Set a minimum cost of 100 for all jobs so that FilterLimit
+  * works with raw queues and other low-cost paths.
+  */
 
-    job->status_buffer = NULL;
-  }
-}
+  if (job->cost < 100)
+    job->cost = 100;
 
+ /*
+  * See if the filter cost is too high...
+  */
 
-/*
- * 'cupsdUnloadCompletedJobs()' - Flush completed job history from memory.
- */
+  if ((FilterLevel + job->cost) > FilterLimit && FilterLevel > 0 &&
+      FilterLimit > 0)
+  {
+   /*
+    * Don't print this job quite yet...
+    */
 
-void
-cupsdUnloadCompletedJobs(void)
-{
-  cupsd_job_t  *job;                   /* Current job */
-  time_t       expire;                 /* Expiration time */
+    cupsArrayDelete(filters);
 
+    cupsdLogMessage(CUPSD_LOG_INFO,
+                    "Holding job %d because filter limit has been reached.",
+                    job->id);
+    cupsdLogMessage(CUPSD_LOG_DEBUG2,
+                    "start_job: id=%d, file=%d, cost=%d, level=%d, "
+                   "limit=%d",
+                    job->id, job->current_file, job->cost, FilterLevel,
+                   FilterLimit);
+    return;
+  }
 
-  expire = time(NULL) - 60;
+  FilterLevel += job->cost;
 
-  for (job = (cupsd_job_t *)cupsArrayFirst(Jobs);
-       job;
-       job = (cupsd_job_t *)cupsArrayNext(Jobs))
-    if (job->attrs && job->state_value >= IPP_JOB_STOPPED &&
-        job->access_time < expire)
-      cupsdUnloadJob(job);
-}
+ /*
+  * Determine if we are printing to a remote printer...
+  */
 
+  remote_job = printer->raw && job->num_files > 1 &&
+               !strncmp(printer->device_uri, "ipp://", 6);
 
-/*
* 'cupsdUnloadJob()' - Unload a job from memory.
- */
+ /*
 * Add decompression filters, if any...
 */
 
-void
-cupsdUnloadJob(cupsd_job_t *job)       /* I - Job */
-{
-  if (!job->attrs)
-    return;
+  if (!remote_job && job->compressions[job->current_file])
+  {
+   /*
+    * Add gziptoany filter to the front of the list...
+    */
 
-  cupsdLogMessage(CUPSD_LOG_DEBUG, "Unloading job %d...", job->id);
+    if (!cupsArrayInsert(filters, &gziptoany_filter))
+    {
+      cupsdLogMessage(CUPSD_LOG_ERROR,
+                      "Unable to add decompression filter - %s",
+                     strerror(errno));
 
-  ippDelete(job->attrs);
+      cupsArrayDelete(filters);
 
-  job->attrs      = NULL;
-  job->state      = NULL;
-  job->sheets     = NULL;
-  job->job_sheets = NULL;
-}
+      job->current_file ++;
 
+      if (job->current_file == job->num_files)
+      {
+       cupsdAddEvent(CUPSD_EVENT_JOB_COMPLETED, job->printer, job,
+                      "Job canceled because the print file could not be "
+                     "decompressed.");
 
-/*
- * 'cupsdUpdateJob()' - Read a status update from a job's filters.
- */
+        cupsdCancelJob(job, 0);
+      }
 
-void
-cupsdUpdateJob(cupsd_job_t *job)       /* I - Job to check */
-{
-  int          i;                      /* Looping var */
-  int          copies;                 /* Number of copies printed */
-  char         message[1024],          /* Message text */
-               *ptr;                   /* Pointer update... */
-  int          loglevel;               /* Log level for message */
+      return;
+    }
+  }
 
+ /*
+  * Add port monitor, if any...
+  */
 
-  while ((ptr = cupsdStatBufUpdate(job->status_buffer, &loglevel,
-                                   message, sizeof(message))) != NULL)
+  if (printer->port_monitor)
   {
    /*
-    * Process page and printer state messages as needed...
+    * Add port monitor to the end of the list...
     */
 
-    if (loglevel == CUPSD_LOG_PAGE)
+    if (!cupsArrayAdd(filters, &port_monitor))
     {
-     /*
-      * Page message; send the message to the page_log file and update the
-      * job sheet count...
-      */
+      cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to add port monitor - %s",
+                      strerror(errno));
 
-      if (job->sheets != NULL)
-      {
-        if (!strncasecmp(message, "total ", 6))
-       {
-        /*
-         * Got a total count of pages from a backend or filter...
-         */
+      cupsArrayDelete(filters);
 
-         copies = atoi(message + 6);
-         copies -= job->sheets->values[0].integer; /* Just track the delta */
-       }
-       else if (!sscanf(message, "%*d%d", &copies))
-         copies = 1;
-         
-        job->sheets->values[0].integer += copies;
+      job->current_file ++;
 
-       if (job->printer->page_limit)
-         cupsdUpdateQuota(job->printer, job->username, copies, 0);
-      }
+      if (job->current_file == job->num_files)
+      {
+       cupsdAddEvent(CUPSD_EVENT_JOB_COMPLETED, job->printer, job,
+                      "Job canceled because the port monitor could not be "
+                     "added.");
 
-      cupsdLogPage(job, message);
+        cupsdCancelJob(job, 0);
+      }
 
-      cupsdAddEvent(CUPSD_EVENT_JOB_PROGRESS, job->printer, job,
-                    "Printed %d page(s).", job->sheets->values[0].integer);
-    }
-    else if (loglevel == CUPSD_LOG_STATE)
-    {
-      cupsdSetPrinterReasons(job->printer, message);
-      cupsdAddPrinterHistory(job->printer);
+      return;
     }
-    else if (loglevel == CUPSD_LOG_ATTR)
-    {
-     /*
-      * Set attribute(s)...
-      */
 
-      /**** TODO ****/
-    }
-#ifdef __APPLE__
-    else if (!strncmp(message, "recoverable:", 12))
-    {
-      cupsdSetPrinterReasons(job->printer,
-                             "+com.apple.print.recoverable-warning");
+    snprintf(port_monitor.filter, sizeof(port_monitor.filter),
+             "%s/monitor/%s", ServerBin, printer->port_monitor);
+  }
 
-      ptr = message + 12;
-      while (isspace(*ptr & 255))
-        ptr ++;
-
-      cupsdSetString(&job->printer->recoverable, ptr);
-      cupsdAddPrinterHistory(job->printer);
-    }
-    else if (!strncmp(message, "recovered:", 10))
-    {
-      cupsdSetPrinterReasons(job->printer,
-                             "-com.apple.print.recoverable-warning");
-
-      ptr = message + 10;
-      while (isspace(*ptr & 255))
-        ptr ++;
-
-      cupsdSetString(&job->printer->recoverable, ptr);
-      cupsdAddPrinterHistory(job->printer);
-    }
-#endif /* __APPLE__ */
-    else if (loglevel <= CUPSD_LOG_INFO)
-    {
-     /*
-      * Some message to show in the printer-state-message attribute...
-      */
-
-      strlcpy(job->printer->state_message, message,
-              sizeof(job->printer->state_message));
-      cupsdAddPrinterHistory(job->printer);
-    }
+ /*
+  * Update the printer and job state to "processing"...
+  */
 
-    if (!strchr(job->status_buffer->buffer, '\n'))
-      break;
-  }
+  job->state->values[0].integer = IPP_JOB_PROCESSING;
+  job->state_value              = IPP_JOB_PROCESSING;
+  job->status  = 0;
+  job->printer = printer;
+  printer->job = job;
+  cupsdSetPrinterState(printer, IPP_PRINTER_PROCESSING, 0);
 
-  if (ptr == NULL)
+  if (job->current_file == 0)
   {
-   /*
-    * See if all of the filters and the backend have returned their
-    * exit statuses.
-    */
+    set_time(job, "time-at-processing");
+    cupsdOpenPipe(job->back_pipes);
+  }
 
-    for (i = 0; job->filters[i] < 0; i ++);
+ /*
+  * Determine if we are printing a banner page or not...
+  */
 
-    if (job->filters[i])
-      return;
+  if (job->job_sheets == NULL)
+  {
+    cupsdLogMessage(CUPSD_LOG_DEBUG, "No job-sheets attribute.");
+    if ((job->job_sheets =
+         ippFindAttribute(job->attrs, "job-sheets", IPP_TAG_ZERO)) != NULL)
+      cupsdLogMessage(CUPSD_LOG_DEBUG,
+                      "... but someone added one without setting job_sheets!");
+  }
+  else if (job->job_sheets->num_values == 1)
+    cupsdLogMessage(CUPSD_LOG_DEBUG, "job-sheets=%s",
+               job->job_sheets->values[0].string.text);
+  else
+    cupsdLogMessage(CUPSD_LOG_DEBUG, "job-sheets=%s,%s",
+               job->job_sheets->values[0].string.text,
+               job->job_sheets->values[1].string.text);
 
-    if (job->current_file >= job->num_files && job->backend > 0)
-      return;
+  if (printer->type & (CUPS_PRINTER_REMOTE | CUPS_PRINTER_IMPLICIT))
+    banner_page = 0;
+  else if (job->job_sheets == NULL)
+    banner_page = 0;
+  else if (strcasecmp(job->job_sheets->values[0].string.text, "none") != 0 &&
+          job->current_file == 0)
+    banner_page = 1;
+  else if (job->job_sheets->num_values > 1 &&
+          strcasecmp(job->job_sheets->values[1].string.text, "none") != 0 &&
+          job->current_file == (job->num_files - 1))
+    banner_page = 1;
+  else
+    banner_page = 0;
 
-   /*
-    * Handle the end of job stuff...
-    */
+  cupsdLogMessage(CUPSD_LOG_DEBUG, "banner_page = %d", banner_page);
 
-    cupsdFinishJob(job);
-  }
-}
+ /*
+  * Building the options string is harder than it needs to be, but
+  * for the moment we need to pass strings for command-line args and
+  * not IPP attribute pointers... :)
+  *
+  * First allocate/reallocate the option buffer as needed...
+  */
 
+  i = ipp_length(job->attrs);
 
-/*
- * 'compare_active_jobs()' - Compare the job IDs and priorities of two jobs.
- */
+  if (i > optlength)
+  {
+    if (optlength == 0)
+      optptr = malloc(i);
+    else
+      optptr = realloc(options, i);
 
-static int                             /* O - Difference */
-compare_active_jobs(void *first,       /* I - First job */
-                    void *second,      /* I - Second job */
-                   void *data)         /* I - App data (not used) */
-{
-  int  diff;                           /* Difference */
+    if (optptr == NULL)
+    {
+      cupsdLogMessage(CUPSD_LOG_CRIT,
+                      "Unable to allocate %d bytes for option buffer for "
+                     "job %d!", i, job->id);
 
+      cupsArrayDelete(filters);
 
-  if ((diff = ((cupsd_job_t *)first)->priority -
-              ((cupsd_job_t *)second)->priority) != 0)
-    return (diff);
-  else
-    return (((cupsd_job_t *)first)->id - ((cupsd_job_t *)second)->id);
-}
+      FilterLevel -= job->cost;
 
+      cupsdAddEvent(CUPSD_EVENT_JOB_COMPLETED, job->printer, job,
+                    "Job canceled because the server ran out of memory.");
 
-/*
- * 'compare_jobs()' - Compare the job IDs of two jobs.
- */
+      cupsdCancelJob(job, 0);
+      return;
+    }
 
-static int                             /* O - Difference */
-compare_jobs(void *first,              /* I - First job */
-             void *second,             /* I - Second job */
-            void *data)                /* I - App data (not used) */
-{
-  return (((cupsd_job_t *)first)->id - ((cupsd_job_t *)second)->id);
-}
+    options   = optptr;
+    optlength = i;
+  }
 
+ /*
+  * Now loop through the attributes and convert them to the textual
+  * representation used by the filters...
+  */
 
-/*
- * 'free_job()' - Free all memory used by a job.
- */
+  optptr  = options;
+  *optptr = '\0';
 
-static void
-free_job(cupsd_job_t *job)             /* I - Job */
-{
-  cupsdClearString(&job->username);
-  cupsdClearString(&job->dest);
+  snprintf(title, sizeof(title), "%s-%d", printer->name, job->id);
+  strcpy(copies, "1");
 
-  if (job->num_files > 0)
+  for (attr = job->attrs->attrs; attr != NULL; attr = attr->next)
   {
-    free(job->compressions);
-    free(job->filetypes);
-  }
+    if (!strcmp(attr->name, "copies") &&
+       attr->value_tag == IPP_TAG_INTEGER)
+    {
+     /*
+      * Don't use the # copies attribute if we are printing the job sheets...
+      */
 
-  ippDelete(job->attrs);
+      if (!banner_page)
+        sprintf(copies, "%d", attr->values[0].integer);
+    }
+    else if (!strcmp(attr->name, "job-name") &&
+            (attr->value_tag == IPP_TAG_NAME ||
+             attr->value_tag == IPP_TAG_NAMELANG))
+      strlcpy(title, attr->values[0].string.text, sizeof(title));
+    else if (attr->group_tag == IPP_TAG_JOB)
+    {
+     /*
+      * Filter out other unwanted attributes...
+      */
 
-  free(job);
-}
+      if (attr->value_tag == IPP_TAG_MIMETYPE ||
+         attr->value_tag == IPP_TAG_NAMELANG ||
+         attr->value_tag == IPP_TAG_TEXTLANG ||
+         (attr->value_tag == IPP_TAG_URI && strcmp(attr->name, "job-uuid")) ||
+         attr->value_tag == IPP_TAG_URISCHEME ||
+         attr->value_tag == IPP_TAG_BEGIN_COLLECTION) /* Not yet supported */
+       continue;
 
+      if (!strncmp(attr->name, "time-", 5))
+       continue;
 
-/*
- * 'ipp_length()' - Compute the size of the buffer needed to hold 
- *                 the textual IPP attributes.
- */
+      if (!strncmp(attr->name, "job-", 4) && strcmp(attr->name, "job-uuid") &&
+          !(printer->type & CUPS_PRINTER_REMOTE))
+       continue;
 
-static int                             /* O - Size of attribute buffer */
-ipp_length(ipp_t *ipp)                 /* I - IPP request */
-{
-  int                  bytes;          /* Number of bytes */
-  int                  i;              /* Looping var */
-  ipp_attribute_t      *attr;          /* Current attribute */
+      if (!strncmp(attr->name, "job-", 4) &&
+          strcmp(attr->name, "job-uuid") &&
+          strcmp(attr->name, "job-billing") &&
+          strcmp(attr->name, "job-sheets") &&
+          strcmp(attr->name, "job-hold-until") &&
+         strcmp(attr->name, "job-priority"))
+       continue;
 
+      if ((!strcmp(attr->name, "page-label") ||
+           !strcmp(attr->name, "page-border") ||
+           !strncmp(attr->name, "number-up", 9) ||
+          !strcmp(attr->name, "page-set") ||
+          !strcasecmp(attr->name, "AP_FIRSTPAGE_InputSlot") ||
+          !strcasecmp(attr->name, "AP_FIRSTPAGE_ManualFeed")) &&
+         banner_page)
+        continue;
 
- /*
-  * Loop through all attributes...
-  */
    /*
+      * Otherwise add them to the list...
+      */
 
-  bytes = 0;
+      if (optptr > options)
+       strlcat(optptr, " ", optlength - (optptr - options));
 
-  for (attr = ipp->attrs; attr != NULL; attr = attr->next)
-  {
-   /*
-    * Skip attributes that won't be sent to filters...
-    */
+      if (attr->value_tag != IPP_TAG_BOOLEAN)
+      {
+       strlcat(optptr, attr->name, optlength - (optptr - options));
+       strlcat(optptr, "=", optlength - (optptr - options));
+      }
 
-    if (attr->value_tag == IPP_TAG_MIMETYPE ||
-       attr->value_tag == IPP_TAG_NAMELANG ||
-       attr->value_tag == IPP_TAG_TEXTLANG ||
-       attr->value_tag == IPP_TAG_URI ||
-       attr->value_tag == IPP_TAG_URISCHEME)
-      continue;
+      for (i = 0; i < attr->num_values; i ++)
+      {
+       if (i)
+         strlcat(optptr, ",", optlength - (optptr - options));
 
-    if (strncmp(attr->name, "time-", 5) == 0)
-      continue;
+       optptr += strlen(optptr);
 
-   /*
-    * Add space for a leading space and commas between each value.
-    * For the first attribute, the leading space isn't used, so the
-    * extra byte can be used as the nul terminator...
-    */
+       switch (attr->value_tag)
+       {
+         case IPP_TAG_INTEGER :
+         case IPP_TAG_ENUM :
+             snprintf(optptr, optlength - (optptr - options),
+                      "%d", attr->values[i].integer);
+             break;
 
-    bytes ++;                          /* " " separator */
-    bytes += attr->num_values;         /* "," separators */
+         case IPP_TAG_BOOLEAN :
+             if (!attr->values[i].boolean)
+               strlcat(optptr, "no", optlength - (optptr - options));
 
-   /*
-    * Boolean attributes appear as "foo,nofoo,foo,nofoo", while
-    * other attributes appear as "foo=value1,value2,...,valueN".
-    */
+         case IPP_TAG_NOVALUE :
+             strlcat(optptr, attr->name,
+                     optlength - (optptr - options));
+             break;
 
-    if (attr->value_tag != IPP_TAG_BOOLEAN)
-      bytes += strlen(attr->name);
-    else
-      bytes += attr->num_values * strlen(attr->name);
+         case IPP_TAG_RANGE :
+             if (attr->values[i].range.lower == attr->values[i].range.upper)
+               snprintf(optptr, optlength - (optptr - options) - 1,
+                        "%d", attr->values[i].range.lower);
+              else
+               snprintf(optptr, optlength - (optptr - options) - 1,
+                        "%d-%d", attr->values[i].range.lower,
+                        attr->values[i].range.upper);
+             break;
 
-   /*
-    * Now add the size required for each value in the attribute...
-    */
+         case IPP_TAG_RESOLUTION :
+             snprintf(optptr, optlength - (optptr - options) - 1,
+                      "%dx%d%s", attr->values[i].resolution.xres,
+                      attr->values[i].resolution.yres,
+                      attr->values[i].resolution.units == IPP_RES_PER_INCH ?
+                          "dpi" : "dpc");
+             break;
 
-    switch (attr->value_tag)
+          case IPP_TAG_STRING :
+         case IPP_TAG_TEXT :
+         case IPP_TAG_NAME :
+         case IPP_TAG_KEYWORD :
+         case IPP_TAG_CHARSET :
+         case IPP_TAG_LANGUAGE :
+         case IPP_TAG_URI :
+             for (valptr = attr->values[i].string.text; *valptr;)
+             {
+               if (strchr(" \t\n\\\'\"", *valptr))
+                 *optptr++ = '\\';
+               *optptr++ = *valptr++;
+             }
+
+             *optptr = '\0';
+             break;
+
+          default :
+             break; /* anti-compiler-warning-code */
+       }
+      }
+
+      optptr += strlen(optptr);
+    }
+  }
+
+ /*
+  * Build the command-line arguments for the filters.  Each filter
+  * has 6 or 7 arguments:
+  *
+  *     argv[0] = printer
+  *     argv[1] = job ID
+  *     argv[2] = username
+  *     argv[3] = title
+  *     argv[4] = # copies
+  *     argv[5] = options
+  *     argv[6] = filename (optional; normally stdin)
+  *
+  * This allows legacy printer drivers that use the old System V
+  * printing interface to be used by CUPS.
+  *
+  * For remote jobs, we send all of the files in the argument list.
+  */
+
+  if (remote_job)
+    argv = calloc(7 + job->num_files, sizeof(char *));
+  else
+    argv = calloc(8, sizeof(char *));
+
+  sprintf(jobid, "%d", job->id);
+
+  argv[0] = printer->name;
+  argv[1] = jobid;
+  argv[2] = job->username;
+  argv[3] = title;
+  argv[4] = copies;
+  argv[5] = options;
+
+  if (remote_job)
+  {
+    for (i = 0; i < job->num_files; i ++)
     {
-      case IPP_TAG_INTEGER :
-      case IPP_TAG_ENUM :
-         /*
-         * Minimum value of a signed integer is -2147483647, or 11 digits.
-         */
+      snprintf(filename, sizeof(filename), "%s/d%05d-%03d", RequestRoot,
+               job->id, i + 1);
+      argv[6 + i] = strdup(filename);
+    }
+  }
+  else
+  {
+    snprintf(filename, sizeof(filename), "%s/d%05d-%03d", RequestRoot,
+             job->id, job->current_file + 1);
+    argv[6] = filename;
+  }
 
-         bytes += attr->num_values * 11;
-         break;
+  for (i = 0; argv[i]; i ++)
+    cupsdLogMessage(CUPSD_LOG_DEBUG,
+                    "[Job %d] argv[%d]=\"%s\"", job->id, i, argv[i]);
 
-      case IPP_TAG_BOOLEAN :
-         /*
-         * Add two bytes for each false ("no") value...
-         */
+ /*
+  * Create environment variable strings for the filters...
+  */
 
-          for (i = 0; i < attr->num_values; i ++)
-           if (!attr->values[i].boolean)
-             bytes += 2;
-         break;
+  attr = ippFindAttribute(job->attrs, "attributes-natural-language",
+                          IPP_TAG_LANGUAGE);
 
-      case IPP_TAG_RANGE :
-         /*
-         * A range is two signed integers separated by a hyphen, or
-         * 23 characters max.
-         */
+  switch (strlen(attr->values[0].string.text))
+  {
+    default :
+       /*
+        * This is an unknown or badly formatted language code; use
+       * the POSIX locale...
+       */
 
-         bytes += attr->num_values * 23;
-         break;
+       strcpy(lang, "LANG=C");
+       break;
 
-      case IPP_TAG_RESOLUTION :
-         /*
-         * A resolution is two signed integers separated by an "x" and
-         * suffixed by the units, or 26 characters max.
-         */
+    case 2 :
+       /*
+        * Just the language code (ll)...
+       */
 
-         bytes += attr->num_values * 26;
-         break;
+        snprintf(lang, sizeof(lang), "LANG=%s",
+                attr->values[0].string.text);
+        break;
 
-      case IPP_TAG_STRING :
-      case IPP_TAG_TEXT :
-      case IPP_TAG_NAME :
-      case IPP_TAG_KEYWORD :
-      case IPP_TAG_CHARSET :
-      case IPP_TAG_LANGUAGE :
-      case IPP_TAG_URI :
-         /*
-         * Strings can contain characters that need quoting.  We need
-         * at least 2 * len + 2 characters to cover the quotes and
-         * any backslashes in the string.
-         */
+    case 5 :
+       /*
+        * Language and country code (ll-cc)...
+       */
 
-          for (i = 0; i < attr->num_values; i ++)
-           bytes += 2 * strlen(attr->values[i].string.text) + 2;
-         break;
+        snprintf(lang, sizeof(lang), "LANG=%c%c_%c%c",
+                attr->values[0].string.text[0],
+                attr->values[0].string.text[1],
+                toupper(attr->values[0].string.text[3] & 255),
+                toupper(attr->values[0].string.text[4] & 255));
+        break;
+  }
 
-       default :
-         break; /* anti-compiler-warning-code */
-    }
+  attr = ippFindAttribute(job->attrs, "document-format",
+                          IPP_TAG_MIMETYPE);
+  if (attr != NULL &&
+      (optptr = strstr(attr->values[0].string.text, "charset=")) != NULL)
+    snprintf(charset, sizeof(charset), "CHARSET=%s", optptr + 8);
+  else
+  {
+    attr = ippFindAttribute(job->attrs, "attributes-charset",
+                           IPP_TAG_CHARSET);
+    snprintf(charset, sizeof(charset), "CHARSET=%s",
+             attr->values[0].string.text);
   }
 
-  return (bytes);
-}
+  snprintf(content_type, sizeof(content_type), "CONTENT_TYPE=%s/%s",
+           job->filetypes[job->current_file]->super,
+           job->filetypes[job->current_file]->type);
+  snprintf(device_uri, sizeof(device_uri), "DEVICE_URI=%s",
+           printer->device_uri);
+  cupsdSanitizeURI(printer->device_uri, sani_uri, sizeof(sani_uri));
+  snprintf(ppd, sizeof(ppd), "PPD=%s/ppd/%s.ppd", ServerRoot, printer->name);
+  snprintf(printer_name, sizeof(printer_name), "PRINTER=%s", printer->name);
+  snprintf(rip_max_cache, sizeof(rip_max_cache), "RIP_MAX_CACHE=%s", RIPCache);
 
+  envc = cupsdLoadEnv(envp, (int)(sizeof(envp) / sizeof(envp[0])));
 
-/*
- * 'load_job_cache()' - Load jobs from the job.cache file.
- */
+  envp[envc ++] = charset;
+  envp[envc ++] = lang;
+  envp[envc ++] = ppd;
+  envp[envc ++] = rip_max_cache;
+  envp[envc ++] = content_type;
+  envp[envc ++] = device_uri;
+  envp[envc ++] = printer_name;
 
-static void
-load_job_cache(const char *filename)   /* I - job.cache filename */
-{
-  cups_file_t  *fp;                    /* job.cache file */
-  char         line[1024],             /* Line buffer */
-               *value;                 /* Value on line */
-  int          linenum;                /* Line number in file */
-  cupsd_job_t  *job;                   /* Current job */
-  int          jobid;                  /* Job ID */
-  char         jobfile[1024];          /* Job filename */
+  if ((filter = (mime_filter_t *)cupsArrayLast(filters)) != NULL)
+  {
+    snprintf(final_content_type, sizeof(final_content_type),
+             "FINAL_CONTENT_TYPE=%s/%s",
+            filter->dst->super, filter->dst->type);
+    envp[envc ++] = final_content_type;
+  }
 
+  if (Classification && !banner_page)
+  {
+    if ((attr = ippFindAttribute(job->attrs, "job-sheets",
+                                 IPP_TAG_NAME)) == NULL)
+      snprintf(classification, sizeof(classification), "CLASSIFICATION=%s",
+               Classification);
+    else if (attr->num_values > 1 &&
+             strcmp(attr->values[1].string.text, "none") != 0)
+      snprintf(classification, sizeof(classification), "CLASSIFICATION=%s",
+               attr->values[1].string.text);
+    else
+      snprintf(classification, sizeof(classification), "CLASSIFICATION=%s",
+               attr->values[0].string.text);
 
- /*
-  * Open the job.cache file...
-  */
+    envp[envc ++] = classification;
+  }
 
-  if ((fp = cupsFileOpen(filename, "r")) == NULL)
+  if (job->dtype & (CUPS_PRINTER_CLASS | CUPS_PRINTER_IMPLICIT))
   {
-    if (errno != ENOENT)
-      cupsdLogMessage(CUPSD_LOG_ERROR,
-                      "Unable to open job cache file \"%s\": %s",
-                      filename, strerror(errno));
+    snprintf(class_name, sizeof(class_name), "CLASS=%s", job->dest);
+    envp[envc ++] = class_name;
+  }
 
-    load_request_root();
+  envp[envc] = NULL;
 
-    return;
-  }
+  for (i = 0; i < envc; i ++)
+    if (strncmp(envp[i], "DEVICE_URI=", 11))
+      cupsdLogMessage(CUPSD_LOG_DEBUG, "[Job %d] envp[%d]=\"%s\"",
+                      job->id, i, envp[i]);
+    else
+      cupsdLogMessage(CUPSD_LOG_DEBUG, "[Job %d] envp[%d]=\"DEVICE_URI=%s\"",
+                      job->id, i, sani_uri);
+
+  if (remote_job)
+    job->current_file = job->num_files;
+  else
+    job->current_file ++;
 
  /*
-  * Read entries from the job cache file and create jobs as needed.
+  * Now create processes for all of the filters...
   */
 
-  cupsdLogMessage(CUPSD_LOG_INFO, "Loading job cache file \"%s\"...",
-                  filename);
-
-  linenum = 0;
-  job     = NULL;
+  filterfds[0][0] = -1;
+  filterfds[0][1] = -1;
+  filterfds[1][0] = -1;
+  filterfds[1][1] = -1;
 
-  while (cupsFileGetConf(fp, line, sizeof(line), &value, &linenum))
+  if (cupsdOpenPipe(statusfds))
   {
-    if (!strcasecmp(line, "NextJobId"))
-    {
-      if (value)
-        NextJobId = atoi(value);
-    }
-    else if (!strcasecmp(line, "<Job"))
-    {
-      if (job)
-      {
-        cupsdLogMessage(CUPSD_LOG_ERROR, "Missing </Job> directive on line %d!",
-                       linenum);
-        continue;
-      }
+    cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to create job status pipes - %s.",
+                   strerror(errno));
+    snprintf(printer->state_message, sizeof(printer->state_message),
+             "Unable to create status pipes - %s.", strerror(errno));
 
-      if (!value)
-      {
-        cupsdLogMessage(CUPSD_LOG_ERROR, "Missing job ID on line %d!", linenum);
-       continue;
-      }
+    cupsdAddPrinterHistory(printer);
 
-      jobid = atoi(value);
+    cupsdAddEvent(CUPSD_EVENT_JOB_COMPLETED, job->printer, job,
+                  "Job canceled because the server could not create the job "
+                 "status pipes.");
 
-      if (jobid < 1)
-      {
-        cupsdLogMessage(CUPSD_LOG_ERROR, "Bad job ID %d on line %d!", jobid,
-                       linenum);
-        continue;
-      }
+    goto abort_job;
+  }
 
-      snprintf(jobfile, sizeof(jobfile), "%s/c%05d", RequestRoot, jobid);
-      if (access(jobfile, 0))
-      {
-        cupsdLogMessage(CUPSD_LOG_ERROR, "Job %d files have gone away!", jobid);
-        continue;
-      }
+  cupsdLogMessage(CUPSD_LOG_DEBUG2, "start_job: statusfds = [ %d %d ]",
+                  statusfds[0], statusfds[1]);
 
-      job = calloc(1, sizeof(cupsd_job_t));
-      if (!job)
-      {
-        cupsdLogMessage(CUPSD_LOG_EMERG,
-                       "Unable to allocate memory for job %d!", jobid);
-        break;
-      }
+#ifdef FD_CLOEXEC
+  fcntl(statusfds[0], F_SETFD, FD_CLOEXEC);
+  fcntl(statusfds[1], F_SETFD, FD_CLOEXEC);
+#endif /* FD_CLOEXEC */
+
+  job->status_buffer = cupsdStatBufNew(statusfds[0], "[Job %d]",
+                                           job->id);
+  job->status        = 0;
+  memset(job->filters, 0, sizeof(job->filters));
 
-      job->id             = jobid;
-      job->back_pipes[0]  = -1;
-      job->back_pipes[1]  = -1;
-      job->print_pipes[0] = -1;
-      job->print_pipes[1] = -1;
+  filterfds[1][0] = open("/dev/null", O_RDONLY);
 
-      cupsdLogMessage(CUPSD_LOG_DEBUG, "Loading job %d from cache...", job->id);
-    }
-    else if (!job)
-    {
-      cupsdLogMessage(CUPSD_LOG_ERROR,
-                     "Missing <Job #> directive on line %d!", linenum);
-      continue;
-    }
-    else if (!strcasecmp(line, "</Job>"))
-    {
-      cupsArrayAdd(Jobs, job);
+  if (filterfds[1][0] < 0)
+  {
+    cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to open \"/dev/null\" - %s.",
+                    strerror(errno));
+    snprintf(printer->state_message, sizeof(printer->state_message),
+             "Unable to open \"/dev/null\" - %s.", strerror(errno));
 
-      if (job->state_value < IPP_JOB_STOPPED)
-      {
-        cupsArrayAdd(ActiveJobs, job);
-       cupsdLoadJob(job);
-      }
+    cupsdAddPrinterHistory(printer);
 
-      job = NULL;
-    }
-    else if (!value)
-    {
-      cupsdLogMessage(CUPSD_LOG_ERROR, "Missing value on line %d!", linenum);
-      continue;
-    }
-    else if (!strcasecmp(line, "State"))
-    {
-      job->state_value = atoi(value);
+    cupsdAddEvent(CUPSD_EVENT_JOB_COMPLETED, job->printer, job,
+                  "Job canceled because the server could not open /dev/null.");
 
-      if (job->state_value < IPP_JOB_PENDING)
-        job->state_value = IPP_JOB_PENDING;
-      else if (job->state_value > IPP_JOB_COMPLETED)
-        job->state_value = IPP_JOB_COMPLETED;
-    }
-    else if (!strcasecmp(line, "Priority"))
-    {
-      job->priority = atoi(value);
-    }
-    else if (!strcasecmp(line, "Username"))
-    {
-      cupsdSetString(&job->username, value);
-    }
-    else if (!strcasecmp(line, "Destination"))
-    {
-      cupsdSetString(&job->dest, value);
-    }
-    else if (!strcasecmp(line, "DestType"))
-    {
-      job->dtype = (cups_ptype_t)atoi(value);
-    }
-    else if (!strcasecmp(line, "NumFiles"))
-    {
-      job->num_files = atoi(value);
+    goto abort_job;
+  }
 
-      if (job->num_files < 0)
-      {
-       cupsdLogMessage(CUPSD_LOG_ERROR, "Bad NumFiles value %d on line %d!",
-                       job->num_files, linenum);
-        job->num_files = 0;
-       continue;
-      }
+  fcntl(filterfds[1][0], F_SETFD, fcntl(filterfds[1][0], F_GETFD) | FD_CLOEXEC);
 
-      if (job->num_files > 0)
-      {
-        snprintf(jobfile, sizeof(jobfile), "%s/d%05d-001", RequestRoot,
-                job->id);
-        if (access(jobfile, 0))
-       {
-         cupsdLogMessage(CUPSD_LOG_INFO,
-                         "Data files for job %d have gone away!", job->id);
-          job->num_files = 0;
-         continue;
-       }
+  cupsdLogMessage(CUPSD_LOG_DEBUG2, "start_job: filterfds[%d] = [ %d %d ]",
+                  1, filterfds[1][0], filterfds[1][1]);
 
-        job->filetypes    = calloc(job->num_files, sizeof(mime_type_t *));
-       job->compressions = calloc(job->num_files, sizeof(int));
+  for (i = 0, slot = 0, filter = (mime_filter_t *)cupsArrayFirst(filters);
+       filter;
+       i ++, filter = (mime_filter_t *)cupsArrayNext(filters))
+  {
+    if (filter->filter[0] != '/')
+      snprintf(command, sizeof(command), "%s/filter/%s", ServerBin,
+               filter->filter);
+    else
+      strlcpy(command, filter->filter, sizeof(command));
 
-        if (!job->filetypes || !job->compressions)
-       {
-         cupsdLogMessage(CUPSD_LOG_EMERG,
-                         "Unable to allocate memory for %d files!",
-                         job->num_files);
-          break;
-       }
-      }
-    }
-    else if (!strcasecmp(line, "File"))
+    if (i < (cupsArrayCount(filters) - 1))
     {
-      int      number,                 /* File number */
-               compression;            /* Compression value */
-      char     super[MIME_MAX_SUPER],  /* MIME super type */
-               type[MIME_MAX_TYPE];    /* MIME type */
+      if (cupsdOpenPipe(filterfds[slot]))
+      {
+       cupsdLogMessage(CUPSD_LOG_ERROR,
+                       "Unable to create job filter pipes - %s.",
+                       strerror(errno));
+       snprintf(printer->state_message, sizeof(printer->state_message),
+               "Unable to create filter pipes - %s.", strerror(errno));
+       cupsdAddPrinterHistory(printer);
 
+       cupsdAddEvent(CUPSD_EVENT_JOB_COMPLETED, job->printer, job,
+                      "Job canceled because the server could not create the "
+                     "filter pipes.");
 
-      if (sscanf(value, "%d%*[ \t]%15[^/]/%255s%d", &number, super, type,
-                 &compression) != 4)
-      {
-        cupsdLogMessage(CUPSD_LOG_ERROR, "Bad File on line %d!", linenum);
-       continue;
+        goto abort_job;
       }
-
-      if (number < 1 || number > job->num_files)
+    }
+    else
+    {
+      if (job->current_file == 1)
       {
-        cupsdLogMessage(CUPSD_LOG_ERROR, "Bad File number %d on line %d!",
-                       number, linenum);
-        continue;
-      }
+       if (strncmp(printer->device_uri, "file:", 5) != 0)
+       {
+         if (cupsdOpenPipe(job->print_pipes))
+         {
+           cupsdLogMessage(CUPSD_LOG_ERROR,
+                           "Unable to create job backend pipes - %s.",
+                           strerror(errno));
+           snprintf(printer->state_message, sizeof(printer->state_message),
+                   "Unable to create backend pipes - %s.", strerror(errno));
+           cupsdAddPrinterHistory(printer);
 
-      number --;
+           cupsdAddEvent(CUPSD_EVENT_JOB_COMPLETED, job->printer, job,
+                         "Job canceled because the server could not create "
+                         "the backend pipes.");
 
-      job->compressions[number] = compression;
-      job->filetypes[number]    = mimeType(MimeDatabase, super, type);
+            goto abort_job;
+         }
+       }
+       else
+       {
+         job->print_pipes[0] = -1;
+         if (!strncmp(printer->device_uri, "file:/dev/", 10) &&
+             strcmp(printer->device_uri, "file:/dev/null"))
+           job->print_pipes[1] = open(printer->device_uri + 5,
+                                      O_WRONLY | O_EXCL);
+         else if (!strncmp(printer->device_uri, "file:///dev/", 12) &&
+                  strcmp(printer->device_uri, "file:///dev/null"))
+           job->print_pipes[1] = open(printer->device_uri + 7,
+                                      O_WRONLY | O_EXCL);
+         else
+           job->print_pipes[1] = open(printer->device_uri + 5,
+                                      O_WRONLY | O_CREAT | O_TRUNC, 0600);
 
-      if (!job->filetypes[number])
-      {
-       /*
-        * If the original MIME type is unknown, auto-type it!
-       */
+         if (job->print_pipes[1] < 0)
+         {
+            cupsdLogMessage(CUPSD_LOG_ERROR,
+                           "Unable to open output file \"%s\" - %s.",
+                           printer->device_uri, strerror(errno));
+            snprintf(printer->state_message, sizeof(printer->state_message),
+                    "Unable to open output file \"%s\" - %s.",
+                    printer->device_uri, strerror(errno));
 
-        cupsdLogMessage(CUPSD_LOG_ERROR,
-                       "Unknown MIME type %s/%s for file %d of job %d!",
-                       super, type, number + 1, job->id);
+           cupsdAddEvent(CUPSD_EVENT_JOB_COMPLETED, job->printer, job,
+                         "Job canceled because the server could not open the "
+                         "output file.");
 
-        snprintf(jobfile, sizeof(jobfile), "%s/d%05d-%03d", RequestRoot,
-                job->id, number + 1);
-        job->filetypes[number] = mimeFileType(MimeDatabase, jobfile, NULL,
-                                             job->compressions + number);
+            goto abort_job;
+         }
 
-       /*
-        * If that didn't work, assume it is raw...
-       */
+         fcntl(job->print_pipes[1], F_SETFD,
+               fcntl(job->print_pipes[1], F_GETFD) | FD_CLOEXEC);
+       }
 
-        if (!job->filetypes[number])
-         job->filetypes[number] = mimeType(MimeDatabase, "application",
-                                           "vnd.cups-raw");
+       cupsdLogMessage(CUPSD_LOG_DEBUG2,
+                       "start_job: print_pipes = [ %d %d ]",
+                        job->print_pipes[0], job->print_pipes[1]);
       }
+
+      filterfds[slot][0] = job->print_pipes[0];
+      filterfds[slot][1] = job->print_pipes[1];
     }
-    else
-      cupsdLogMessage(CUPSD_LOG_ERROR, "Unknown %s directive on line %d!",
-                      line, linenum);
-  }
 
-  cupsFileClose(fp);
-}
+    cupsdLogMessage(CUPSD_LOG_DEBUG2, "start_job: filter=\"%s\"",
+                    command);
+    cupsdLogMessage(CUPSD_LOG_DEBUG2,
+                    "start_job: filterfds[%d]=[ %d %d ]",
+                    slot, filterfds[slot][0], filterfds[slot][1]);
 
+    pid = cupsdStartProcess(command, argv, envp, filterfds[!slot][0],
+                            filterfds[slot][1], statusfds[1],
+                           job->back_pipes[0], 0, job->filters + i);
 
-/*
- * 'load_next_job_id()' - Load the NextJobId value from the job.cache file.
- */
+    cupsdLogMessage(CUPSD_LOG_DEBUG2,
+                    "start_job: Closing filter pipes for slot %d "
+                   "[ %d %d ]...",
+                    !slot, filterfds[!slot][0], filterfds[!slot][1]);
 
-static void
-load_next_job_id(const char *filename) /* I - job.cache filename */
-{
-  cups_file_t  *fp;                    /* job.cache file */
-  char         line[1024],             /* Line buffer */
-               *value;                 /* Value on line */
-  int          linenum;                /* Line number in file */
+    cupsdClosePipe(filterfds[!slot]);
 
+    if (pid == 0)
+    {
+      cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to start filter \"%s\" - %s.",
+                      filter->filter, strerror(errno));
+      snprintf(printer->state_message, sizeof(printer->state_message),
+               "Unable to start filter \"%s\" - %s.",
+               filter->filter, strerror(errno));
 
- /*
-  * Read the NextJobId directive from the job.cache file and use
-  * the value (if any).
-  */
+      cupsdAddPrinterHistory(printer);
 
-  if ((fp = cupsFileOpen(filename, "r")) == NULL)
-  {
-    if (errno != ENOENT)
-      cupsdLogMessage(CUPSD_LOG_ERROR,
-                      "Unable to open job cache file \"%s\": %s",
-                      filename, strerror(errno));
+      cupsdAddEvent(CUPSD_EVENT_JOB_COMPLETED, job->printer, job,
+                    "Job canceled because the server could not execute a "
+                   "filter.");
 
-    return;
+      goto abort_job;
+    }
+
+    cupsdLogMessage(CUPSD_LOG_INFO, "Started filter %s (PID %d) for job %d.",
+                    command, pid, job->id);
+
+    argv[6] = NULL;
+    slot    = !slot;
   }
 
-  cupsdLogMessage(CUPSD_LOG_INFO,
-                  "Loading NextJobId from job cache file \"%s\"...", filename);
+  cupsArrayDelete(filters);
 
-  linenum = 0;
+ /*
+  * Finally, pipe the final output into a backend process if needed...
+  */
 
-  while (cupsFileGetConf(fp, line, sizeof(line), &value, &linenum))
+  if (strncmp(printer->device_uri, "file:", 5) != 0)
   {
-    if (!strcasecmp(line, "NextJobId"))
+    if (job->current_file == 1)
     {
-      if (value)
-        NextJobId = atoi(value);
+      sscanf(printer->device_uri, "%254[^:]", method);
+      snprintf(command, sizeof(command), "%s/backend/%s", ServerBin, method);
 
-      break;
-    }
-  }
+     /*
+      * See if the backend needs to run as root...
+      */
 
-  cupsFileClose(fp);
-}
+      if (RunUser)
+        backroot = 0;
+      else if (stat(command, &backinfo))
+       backroot = 0;
+      else
+        backroot = !(backinfo.st_mode & (S_IRWXG | S_IRWXO));
 
+      argv[0] = sani_uri;
 
-/*
- * 'load_request_root()' - Load jobs from the RequestRoot directory.
- */
+      filterfds[slot][0] = -1;
+      filterfds[slot][1] = open("/dev/null", O_WRONLY);
 
-static void
-load_request_root(void)
-{
-  cups_dir_t           *dir;           /* Directory */
-  cups_dentry_t                *dent;          /* Directory entry */
-  cupsd_job_t          *job;           /* New job */
+      if (filterfds[slot][1] < 0)
+      {
+       cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to open \"/dev/null\" - %s.",
+                       strerror(errno));
+       snprintf(printer->state_message, sizeof(printer->state_message),
+                "Unable to open \"/dev/null\" - %s.", strerror(errno));
 
+       cupsdAddPrinterHistory(printer);
 
- /*
-  * Open the requests directory...
-  */
+       cupsdAddEvent(CUPSD_EVENT_JOB_COMPLETED, job->printer, job,
+                      "Job canceled because the server could not open a file.");
 
-  cupsdLogMessage(CUPSD_LOG_DEBUG, "Scanning %s for jobs...", RequestRoot);
+        goto abort_job;
+      }
 
-  if ((dir = cupsDirOpen(RequestRoot)) == NULL)
-  {
-    cupsdLogMessage(CUPSD_LOG_ERROR,
-                    "Unable to open spool directory \"%s\": %s",
-                    RequestRoot, strerror(errno));
-    return;
-  }
+      fcntl(filterfds[slot][1], F_SETFD,
+            fcntl(filterfds[slot][1], F_GETFD) | FD_CLOEXEC);
 
- /*
-  * Read all the c##### files...
-  */
+      cupsdLogMessage(CUPSD_LOG_DEBUG2, "start_job: backend=\"%s\"",
+                      command);
+      cupsdLogMessage(CUPSD_LOG_DEBUG2,
+                      "start_job: filterfds[%d] = [ %d %d ]",
+                     slot, filterfds[slot][0], filterfds[slot][1]);
 
-  while ((dent = cupsDirRead(dir)) != NULL)
-    if (strlen(dent->filename) >= 6 && dent->filename[0] == 'c')
-    {
-     /*
-      * Allocate memory for the job...
-      */
+      pid = cupsdStartProcess(command, argv, envp, filterfds[!slot][0],
+                             filterfds[slot][1], statusfds[1],
+                             job->back_pipes[1], backroot,
+                             &(job->backend));
 
-      if ((job = calloc(sizeof(cupsd_job_t), 1)) == NULL)
+      if (pid == 0)
       {
-        cupsdLogMessage(CUPSD_LOG_ERROR, "Ran out of memory for jobs!");
-       cupsDirClose(dir);
-       return;
+       cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to start backend \"%s\" - %s.",
+                        method, strerror(errno));
+       snprintf(printer->state_message, sizeof(printer->state_message),
+                "Unable to start backend \"%s\" - %s.", method,
+                strerror(errno));
+
+       cupsdAddEvent(CUPSD_EVENT_JOB_COMPLETED, job->printer, job,
+                      "Job canceled because the server could not execute "
+                     "the backend.");
+
+        goto abort_job;
+      }
+      else
+      {
+       cupsdLogMessage(CUPSD_LOG_INFO,
+                       "Started backend %s (PID %d) for job %d.",
+                       command, pid, job->id);
       }
+    }
 
-     /*
-      * Assign the job ID...
-      */
+    if (job->current_file == job->num_files)
+    {
+      cupsdLogMessage(CUPSD_LOG_DEBUG2,
+                      "start_job: Closing print pipes [ %d %d ]...",
+                     job->print_pipes[0], job->print_pipes[1]);
 
-      job->id             = atoi(dent->filename + 1);
-      job->back_pipes[0]  = -1;
-      job->back_pipes[1]  = -1;
-      job->print_pipes[0] = -1;
-      job->print_pipes[1] = -1;
+      cupsdClosePipe(job->print_pipes);
 
-      if (job->id >= NextJobId)
-        NextJobId = job->id + 1;
+      cupsdLogMessage(CUPSD_LOG_DEBUG2,
+                      "start_job: Closing back pipes [ %d %d ]...",
+                     job->back_pipes[0], job->back_pipes[1]);
 
-     /*
-      * Load the job...
-      */
+      cupsdClosePipe(job->back_pipes);
+    }
+  }
+  else
+  {
+    filterfds[slot][0] = -1;
+    filterfds[slot][1] = -1;
 
-      cupsdLoadJob(job);
+    cupsdLogMessage(CUPSD_LOG_DEBUG2,
+                    "start_job: Closing filter pipes for slot %d "
+                   "[ %d %d ]...",
+                    !slot, filterfds[!slot][0], filterfds[!slot][1]);
 
-     /*
-      * Insert the job into the array, sorting by job priority and ID...
-      */
+    cupsdClosePipe(filterfds[!slot]);
 
-      cupsArrayAdd(Jobs, job);
+    if (job->current_file == job->num_files)
+    {
+      cupsdLogMessage(CUPSD_LOG_DEBUG2,
+                      "start_job: Closing print pipes [ %d %d ]...",
+                     job->print_pipes[0], job->print_pipes[1]);
 
-      if (job->state_value < IPP_JOB_STOPPED)
-        cupsArrayAdd(ActiveJobs,job);
-      else
-        cupsdUnloadJob(job);
+      cupsdClosePipe(job->print_pipes);
     }
+  }
 
-  cupsDirClose(dir);
-}
+  for (slot = 0; slot < 2; slot ++)
+  {
+    cupsdLogMessage(CUPSD_LOG_DEBUG2,
+                    "start_job: Closing filter pipes for slot %d "
+                   "[ %d %d ]...",
+                    slot, filterfds[slot][0], filterfds[slot][1]);
+    cupsdClosePipe(filterfds[slot]);
+  }
 
+  if (remote_job)
+  {
+    for (i = 0; i < job->num_files; i ++)
+      free(argv[i + 6]);
+  }
 
-/*
- * 'set_time()' - Set one of the "time-at-xyz" attributes...
- */
+  free(argv);
 
-static void
-set_time(cupsd_job_t *job,             /* I - Job to update */
-         const char  *name)            /* I - Name of attribute */
-{
-  ipp_attribute_t      *attr;          /* Time attribute */
+  cupsdLogMessage(CUPSD_LOG_DEBUG2,
+                  "start_job: Closing status output pipe %d...",
+                  statusfds[1]);
 
+  close(statusfds[1]);
 
-  if ((attr = ippFindAttribute(job->attrs, name, IPP_TAG_ZERO)) != NULL)
-  {
-    attr->value_tag         = IPP_TAG_INTEGER;
-    attr->values[0].integer = time(NULL);
-  }
-}
+  cupsdLogMessage(CUPSD_LOG_DEBUG2,
+                  "start_job: Adding fd %d to InputSet...",
+                  job->status_buffer->fd);
 
+  FD_SET(job->status_buffer->fd, InputSet);
 
-/*
- * 'set_hold_until()' - Set the hold time and update job-hold-until attribute...
- */
+  cupsdAddEvent(CUPSD_EVENT_JOB_STATE, job->printer, job, "Job #%d started.",
+                job->id);
 
-static void 
-set_hold_until(cupsd_job_t *job,       /* I - Job to update */
-              time_t      holdtime)    /* I - Hold until time */
-{
-  ipp_attribute_t      *attr;          /* job-hold-until attribute */
-  struct tm            *holddate;      /* Hold date */
-  char                 holdstr[64];    /* Hold time */
+  return;
 
 
  /*
-  * Set the hold_until value and hold the job...
+  * If we get here, we need to abort the current job and close out all
+  * files and pipes...
   */
 
-  cupsdLogMessage(CUPSD_LOG_DEBUG, "set_hold_until: hold_until = %d",
-                  (int)holdtime);
+  abort_job:
 
-  job->state->values[0].integer = IPP_JOB_HELD;
-  job->state_value              = IPP_JOB_HELD;
-  job->hold_until               = holdtime;
+  for (slot = 0; slot < 2; slot ++)
+  {
+    cupsdLogMessage(CUPSD_LOG_DEBUG2,
+                    "start_job: Closing filter pipes for slot %d "
+                   "[ %d %d ]...",
+                    slot, filterfds[slot][0], filterfds[slot][1]);
+    cupsdClosePipe(filterfds[slot]);
+  }
 
- /*
-  * Update the job-hold-until attribute with a string representing GMT
-  * time (HH:MM:SS)...
-  */
+  cupsdLogMessage(CUPSD_LOG_DEBUG2,
+                  "start_job: Closing status pipes [ %d %d ]...",
+                  statusfds[0], statusfds[1]);
+  cupsdClosePipe(statusfds);
 
-  holddate = gmtime(&holdtime);
-  snprintf(holdstr, sizeof(holdstr), "%d:%d:%d", holddate->tm_hour, 
-          holddate->tm_min, holddate->tm_sec);
+  cupsArrayDelete(filters);
 
-  if ((attr = ippFindAttribute(job->attrs, "job-hold-until",
-                               IPP_TAG_KEYWORD)) == NULL)
-    attr = ippFindAttribute(job->attrs, "job-hold-until", IPP_TAG_NAME);
+  if (remote_job)
+  {
+    for (i = 0; i < job->num_files; i ++)
+      free(argv[i + 6]);
+  }
 
- /*
-  * Either add the attribute or update the value of the existing one
-  */
+  free(argv);
 
-  if (attr == NULL)
-    attr = ippAddString(job->attrs, IPP_TAG_JOB, IPP_TAG_KEYWORD,
-                        "job-hold-until", NULL, holdstr);
-  else
-    cupsdSetString(&attr->values[0].string.text, holdstr);
+  cupsdStopJob(job, 0);
+}
 
-  cupsdSaveJob(job);
+
+/*
+ * 'unload_job()' - Unload a job from memory.
+ */
+
+static void
+unload_job(cupsd_job_t *job)           /* I - Job */
+{
+  if (!job->attrs)
+    return;
+
+  cupsdLogMessage(CUPSD_LOG_DEBUG, "Unloading job %d...", job->id);
+
+  ippDelete(job->attrs);
+
+  job->attrs      = NULL;
+  job->state      = NULL;
+  job->sheets     = NULL;
+  job->job_sheets = NULL;
 }
 
 
 /*
- * End of "$Id: job.c 5196 2006-02-27 21:23:00Z mike $".
+ * End of "$Id: job.c 5305 2006-03-18 03:05:12Z mike $".
  */
index d6c7aa5d186f3137cd09654b82837d2db97b09c5..4b13d65f52ac5c95391023d716b6edeedf57adde 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: job.h 5095 2006-02-09 16:22:48Z mike $"
+ * "$Id: job.h 5305 2006-03-18 03:05:12Z mike $"
  *
  *   Print job definitions for the Common UNIX Printing System (CUPS) scheduler.
  *
@@ -114,13 +114,11 @@ extern void               cupsdSaveAllJobs(void);
 extern void            cupsdSaveJob(cupsd_job_t *job);
 extern void            cupsdSetJobHoldUntil(cupsd_job_t *job, const char *when);
 extern void            cupsdSetJobPriority(cupsd_job_t *job, int priority);
-extern void            cupsdStartJob(cupsd_job_t *job, cupsd_printer_t *printer);
 extern void            cupsdStopAllJobs(void);
 extern void            cupsdStopJob(cupsd_job_t *job, int force);
-extern void            cupsdUnloadJob(cupsd_job_t *job);
 extern void            cupsdUpdateJob(cupsd_job_t *job);
 
 
 /*
- * End of "$Id: job.h 5095 2006-02-09 16:22:48Z mike $".
+ * End of "$Id: job.h 5305 2006-03-18 03:05:12Z mike $".
  */
index b325a413916c837837c237c79b3b1f59c6cf56af..f244526e5796f0e888042cf77010edf46ba0ea59 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: main.c 5231 2006-03-05 17:22:27Z mike $"
+ * "$Id: main.c 5305 2006-03-18 03:05:12Z mike $"
  *
  *   Scheduler main loop for the Common UNIX Printing System (CUPS).
  *
@@ -26,9 +26,7 @@
  *   main()                    - Main entry for the CUPS scheduler.
  *   cupsdClosePipe()          - Close a pipe as necessary.
  *   cupsdOpenPipe()           - Create a pipe which is closed on exec.
- *   cupsdCatchChildSignals()  - Catch SIGCHLD signals...
  *   cupsdHoldSignals()        - Hold child and termination signals.
- *   cupsdIgnoreChildSignals() - Ignore SIGCHLD signals...
  *   cupsdReleaseSignals()     - Release signals for delivery.
  *   cupsdSetString()          - Set a string value.
  *   cupsdSetStringf()         - Set a formatted string value.
@@ -428,12 +426,19 @@ main(int  argc,                           /* I - Number of command-line args */
   */
 
 #ifdef HAVE_SIGSET /* Use System V signals over POSIX to avoid bugs */
+  sigset(SIGCHLD, sigchld_handler);
   sigset(SIGHUP, sighup_handler);
   sigset(SIGPIPE, SIG_IGN);
   sigset(SIGTERM, sigterm_handler);
 #elif defined(HAVE_SIGACTION)
   memset(&action, 0, sizeof(action));
 
+  sigemptyset(&action.sa_mask);
+  sigaddset(&action.sa_mask, SIGTERM);
+  sigaddset(&action.sa_mask, SIGCHLD);
+  action.sa_handler = sigchld_handler;
+  sigaction(SIGCHLD, &action, NULL);
+
   sigemptyset(&action.sa_mask);
   sigaddset(&action.sa_mask, SIGHUP);
   action.sa_handler = sighup_handler;
@@ -449,6 +454,7 @@ main(int  argc,                             /* I - Number of command-line args */
   action.sa_handler = sigterm_handler;
   sigaction(SIGTERM, &action, NULL);
 #else
+  signal(SIGCLD, sigchld_handler);     /* No, SIGCLD isn't a typo... */
   signal(SIGHUP, sighup_handler);
   signal(SIGPIPE, SIG_IGN);
   signal(SIGTERM, sigterm_handler);
@@ -501,17 +507,13 @@ main(int  argc,                           /* I - Number of command-line args */
       kill(i, SIGUSR1);
   }
 
+#ifdef __APPLE__
  /*
   * Start power management framework...
   */
 
   cupsdStartSystemMonitor();
-
- /*
-  * Catch signals...
-  */
-
-  cupsdCatchChildSignals();
+#endif /* __APPLE__ */
 
  /*
   * Start any pending print jobs...
@@ -1064,7 +1066,9 @@ main(int  argc,                           /* I - Number of command-line args */
 
   cupsdFreeAllJobs();
 
+#ifdef __APPLE__
   cupsdStopSystemMonitor();
+#endif /* __APPLE__ */
 
 #ifdef HAVE_LAUNCHD
  /*
@@ -1136,7 +1140,12 @@ cupsdOpenPipe(int *fds)                  /* O - Pipe file descriptors (2) */
   */
 
   if (pipe(fds))
+  {
+    fds[0] = -1;
+    fds[1] = -1;
+
     return (-1);
+  }
 
  /*
   * Set the "close on exec" flag on each end of the pipe...
@@ -1146,6 +1155,10 @@ cupsdOpenPipe(int *fds)                  /* O - Pipe file descriptors (2) */
   {
     close(fds[0]);
     close(fds[1]);
+
+    fds[0] = -1;
+    fds[1] = -1;
+
     return (-1);
   }
 
@@ -1153,6 +1166,10 @@ cupsdOpenPipe(int *fds)                  /* O - Pipe file descriptors (2) */
   {
     close(fds[0]);
     close(fds[1]);
+
+    fds[0] = -1;
+    fds[1] = -1;
+
     return (-1);
   }
 
@@ -1164,34 +1181,6 @@ cupsdOpenPipe(int *fds)                  /* O - Pipe file descriptors (2) */
 }
 
 
-/*
- * 'cupsdCatchChildSignals()' - Catch SIGCHLD signals...
- */
-
-void
-cupsdCatchChildSignals(void)
-{
-#if defined(HAVE_SIGACTION) && !defined(HAVE_SIGSET)
-  struct sigaction     action;         /* Actions for POSIX signals */
-#endif /* HAVE_SIGACTION && !HAVE_SIGSET */
-
-
-#ifdef HAVE_SIGSET /* Use System V signals over POSIX to avoid bugs */
-  sigset(SIGCHLD, sigchld_handler);
-#elif defined(HAVE_SIGACTION)
-  memset(&action, 0, sizeof(action));
-
-  sigemptyset(&action.sa_mask);
-  sigaddset(&action.sa_mask, SIGTERM);
-  sigaddset(&action.sa_mask, SIGCHLD);
-  action.sa_handler = sigchld_handler;
-  sigaction(SIGCHLD, &action, NULL);
-#else
-  signal(SIGCLD, sigchld_handler);     /* No, SIGCLD isn't a typo... */
-#endif /* HAVE_SIGSET */
-}
-
-
 /*
  * 'cupsdClearString()' - Clear a string.
  */
@@ -1235,36 +1224,6 @@ cupsdHoldSignals(void)
 }
 
 
-/*
- * 'cupsdIgnoreChildSignals()' - Ignore SIGCHLD signals...
- *
- * We don't really ignore them, we set the signal handler to SIG_DFL,
- * since some OS's rely on signals for the wait4() function to work.
- */
-
-void
-cupsdIgnoreChildSignals(void)
-{
-#if defined(HAVE_SIGACTION) && !defined(HAVE_SIGSET)
-  struct sigaction     action;         /* Actions for POSIX signals */
-#endif /* HAVE_SIGACTION && !HAVE_SIGSET */
-
-
-#ifdef HAVE_SIGSET /* Use System V signals over POSIX to avoid bugs */
-  sigset(SIGCHLD, SIG_DFL);
-#elif defined(HAVE_SIGACTION)
-  memset(&action, 0, sizeof(action));
-
-  sigemptyset(&action.sa_mask);
-  sigaddset(&action.sa_mask, SIGCHLD);
-  action.sa_handler = SIG_DFL;
-  sigaction(SIGCHLD, &action, NULL);
-#else
-  signal(SIGCLD, SIG_DFL);     /* No, SIGCLD isn't a typo... */
-#endif /* HAVE_SIGSET */
-}
-
-
 /*
  * 'cupsdReleaseSignals()' - Release signals for delivery.
  */
@@ -2313,5 +2272,5 @@ usage(int status)                 /* O - Exit status */
 
 
 /*
- * End of "$Id: main.c 5231 2006-03-05 17:22:27Z mike $".
+ * End of "$Id: main.c 5305 2006-03-18 03:05:12Z mike $".
  */
index 8efd1396a9c55d1f7b55256cf38bf8eeee2d4749..2ec838a3ee7d57c6ff7dd31269ff1b7ec796111d 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: printers.c 5231 2006-03-05 17:22:27Z mike $"
+ * "$Id: printers.c 5305 2006-03-18 03:05:12Z mike $"
  *
  *   Printer routines for the Common UNIX Printing System (CUPS).
  *
@@ -28,7 +28,6 @@
  *   cupsdAddPrinterUser()       - Add a user to the ACL.
  *   cupsdDeleteAllPrinters()    - Delete all printers from the system.
  *   cupsdDeletePrinter()        - Delete a printer from the system.
- *   cupsdDeletePrinterFilters() - Delete all MIME filters for a printer.
  *   cupsdFindPrinter()          - Find a printer in the list.
  *   cupsdFreePrinterUsers()     - Free allow/deny users.
  *   cupsdLoadAllPrinters()      - Load printers from the printers.conf file.
@@ -51,7 +50,7 @@
  *   add_printer_formats()       - Add document-format-supported values for
  *                                 a printer.
  *   compare_printers()          - Compare two printers.
- *   transcode_nickname()        - Convert the PPD NickName to UTF-8...
+ *   delete_printer_filters()    - Delete all MIME filters for a printer.
  *   write_irix_config()         - Update the config files used by the IRIX
  *                                 desktop tools.
  *   write_irix_state()          - Update the status files used by IRIX
@@ -63,7 +62,6 @@
  */
 
 #include "cupsd.h"
-#include <cups/transcode.h>
 
 
 /*
@@ -74,7 +72,7 @@ static void   add_printer_defaults(cupsd_printer_t *p);
 static void    add_printer_filter(cupsd_printer_t *p, const char *filter);
 static void    add_printer_formats(cupsd_printer_t *p);
 static int     compare_printers(void *first, void *second, void *data);
-static void    transcode_nickname(cupsd_printer_t *p, ppd_file_t *ppd);
+static void    delete_printer_filters(cupsd_printer_t *p);
 #ifdef __sgi
 static void    write_irix_config(cupsd_printer_t *p);
 static void    write_irix_state(cupsd_printer_t *p);
@@ -703,7 +701,7 @@ cupsdDeletePrinter(
 
   ippDelete(p->attrs);
 
-  cupsdDeletePrinterFilters(p);
+  delete_printer_filters(p);
 
   mimeDeleteType(MimeDatabase, p->filetype);
 
@@ -742,43 +740,6 @@ cupsdDeletePrinter(
 }
 
 
-/*
- * 'cupsdDeletePrinterFilters()' - Delete all MIME filters for a printer.
- */
-
-void
-cupsdDeletePrinterFilters(
-    cupsd_printer_t *p)                        /* I - Printer to remove from */
-{
-  mime_filter_t        *filter;                /* MIME filter looping var */
-
-
- /*
-  * Range check input...
-  */
-
-  if (p == NULL)
-    return;
-
- /*
-  * Remove all filters from the MIME database that have a destination
-  * type == printer...
-  */
-
-  for (filter = mimeFirstFilter(MimeDatabase);
-       filter;
-       filter = mimeNextFilter(MimeDatabase))
-    if (filter->dst == p->filetype)
-    {
-     /*
-      * Delete the current filter...
-      */
-
-      mimeDeleteFilter(MimeDatabase, filter);
-    }
-}
-
-
 /*
  * 'cupsdFindDest()' - Find a destination in the list.
  */
@@ -1483,7 +1444,7 @@ cupsdSetPrinterAttrs(cupsd_printer_t *p)/* I - Printer to setup */
   * Clear out old filters, if any...
   */
 
-  cupsdDeletePrinterFilters(p);
+  delete_printer_filters(p);
 
  /*
   * Figure out the authentication that is required for the printer.
@@ -1719,14 +1680,21 @@ cupsdSetPrinterAttrs(cupsd_printer_t *p)/* I - Printer to setup */
        {
         /*
          * The NickName can be localized in the character set specified
-         * by the LanugageEncoding attribute.  Convert as needed to
-         * UTF-8...
+         * by the LanugageEncoding attribute.  However, ppdOpen2() has
+         * already converted the ppd->nickname member to UTF-8 for us
+         * (the original attribute value is available separately)
          */
 
-          transcode_nickname(p, ppd);
+          cupsdSetString(&p->make_model, ppd->nickname);
        }
        else if (ppd->modelname)
+       {
+        /*
+         * Model name can only contain specific characters...
+         */
+
           cupsdSetString(&p->make_model, ppd->modelname);
+       }
        else
          cupsdSetString(&p->make_model, "Bad PPD File");
 
@@ -3014,84 +2982,39 @@ compare_printers(void *first,           /* I - First printer */
 
 
 /*
- * 'transcode_nickname()' - Convert the PPD NickName to UTF-8...
+ * 'delete_printer_filters()' - Delete all MIME filters for a printer.
  */
 
 static void
-transcode_nickname(cupsd_printer_t *p, /* I - Printer */
-                   ppd_file_t      *ppd)/* I - PPD file */
+delete_printer_filters(
+    cupsd_printer_t *p)                        /* I - Printer to remove from */
 {
-  cups_utf8_t          utf8[256];      /* UTF-8 version of nickname */
-  cups_encoding_t      encoding;       /* Encoding of PPD file */
-  const char           *nickptr;       /* Pointer into nickname */
-
-
- /*
-  * See if we need to convert to UTF-8...
-  */
-
-  if (!ppd->lang_encoding || !strcasecmp(ppd->lang_encoding, "UTF-8"))
-  {
-   /*
-    * No language encoding, or encoding uses the non-standard UTF-8
-    * value, so no transcoding is required...
-    */
-
-    goto no_transcode;
-  }
-
-  for (nickptr = ppd->nickname; *nickptr; nickptr ++)
-    if (*nickptr & 0x80)
-      break;
-
-  if (!*nickptr)
-  {
-   /*
-    * No non-ASCII characters, so no transcoding is required...
-    */
+  mime_filter_t        *filter;                /* MIME filter looping var */
 
-    goto no_transcode;
-  }
 
  /*
-  * OK, we need to transcode...
+  * Range check input...
   */
 
-  if (!strcasecmp(ppd->lang_encoding, "ISOLatin1"))
-    encoding = CUPS_ISO8859_1;
-  else if (!strcasecmp(ppd->lang_encoding, "ISOLatin2"))
-    encoding = CUPS_ISO8859_2;
-  else if (!strcasecmp(ppd->lang_encoding, "ISOLatin5"))
-    encoding = CUPS_ISO8859_5;
-  else if (!strcasecmp(ppd->lang_encoding, "JIS83-RKSJ"))
-    encoding = CUPS_WINDOWS_932;
-  else if (!strcasecmp(ppd->lang_encoding, "MacStandard"))
-    encoding = CUPS_MAC_ROMAN;
-  else if (!strcasecmp(ppd->lang_encoding, "WindowsANSI"))
-    encoding = CUPS_WINDOWS_1252;
-  else
-  {
-   /*
-    * Unknown encoding, treat as UTF-8...
-    */
-
-    goto no_transcode;
-  }
-
-  cupsCharsetToUTF8(utf8, ppd->nickname, sizeof(utf8), encoding);
-
-  cupsdSetString(&p->make_model, (char *)utf8);
-
-  return;
+  if (p == NULL)
+    return;
 
  /*
-  * Yeah, yeah, gotos are evil, but code bloat is more evil...
+  * Remove all filters from the MIME database that have a destination
+  * type == printer...
   */
 
-  no_transcode:
+  for (filter = mimeFirstFilter(MimeDatabase);
+       filter;
+       filter = mimeNextFilter(MimeDatabase))
+    if (filter->dst == p->filetype)
+    {
+     /*
+      * Delete the current filter...
+      */
 
-  cupsdSetString(&p->make_model, ppd->nickname);
-  return;
+      mimeDeleteFilter(MimeDatabase, filter);
+    }
 }
 
 
@@ -3351,5 +3274,5 @@ write_irix_state(cupsd_printer_t *p)      /* I - Printer to update */
 
 
 /*
- * End of "$Id: printers.c 5231 2006-03-05 17:22:27Z mike $".
+ * End of "$Id: printers.c 5305 2006-03-18 03:05:12Z mike $".
  */
index cdc5756d27611e41dbffc9c0bb54a8a2274699c6..2fb47407cf7958e4b9cf33b42b053ecb74a230e8 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: printers.h 5178 2006-02-26 00:24:23Z mike $"
+ * "$Id: printers.h 5305 2006-03-18 03:05:12Z mike $"
  *
  *   Printer definitions for the Common UNIX Printing System (CUPS) scheduler.
  *
@@ -116,14 +116,11 @@ VAR cupsd_policy_t        *DefaultPolicyPtr
 extern cupsd_printer_t *cupsdAddPrinter(const char *name);
 extern void            cupsdAddPrinterHistory(cupsd_printer_t *p);
 extern void            cupsdAddPrinterUser(cupsd_printer_t *p, const char *username);
-extern cupsd_quota_t   *cupsdAddQuota(cupsd_printer_t *p, const char *username);
 extern void            cupsdCreateCommonData(void);
 extern void            cupsdDeleteAllPrinters(void);
 extern void            cupsdDeletePrinter(cupsd_printer_t *p, int update);
-extern void            cupsdDeletePrinterFilters(cupsd_printer_t *p);
 extern cupsd_printer_t *cupsdFindDest(const char *name);
 extern cupsd_printer_t *cupsdFindPrinter(const char *name);
-extern cupsd_quota_t   *cupsdFindQuota(cupsd_printer_t *p, const char *username);
 extern void            cupsdFreePrinterUsers(cupsd_printer_t *p);
 extern void            cupsdFreeQuotas(cupsd_printer_t *p);
 extern void            cupsdLoadAllPrinters(void);
@@ -148,5 +145,5 @@ extern char         *cupsdSanitizeURI(const char *uri, char *buffer,
 
 
 /*
- * End of "$Id: printers.h 5178 2006-02-26 00:24:23Z mike $".
+ * End of "$Id: printers.h 5305 2006-03-18 03:05:12Z mike $".
  */
index 8cd8fc9c21a8bc25dbe40f0c038bf8c78837a7fb..db10d8677397f084ec9a3c087cb3e7b82b55d040 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: quotas.c 4970 2006-01-24 14:05:45Z mike $"
+ * "$Id: quotas.c 5305 2006-03-18 03:05:12Z mike $"
  *
  *   Quota routines for the Common UNIX Printing System (CUPS).
  *
  *
  * Contents:
  *
- *   cupsdAddQuota()    - Add a quota record for this printer and user.
- *   cupsdFindQuota()   - Find a quota record.
  *   cupsdFreeQuotas()  - Free quotas for a printer.
  *   cupsdUpdateQuota() - Update quota data for the specified printer and user.
+ *   add_quota()        - Add a quota record for this printer and user.
  *   compare_quotas()   - Compare two quota records...
+ *   find_quota()       - Find a quota record.
  */
 
 /*
  * Local functions...
  */
 
-static int     compare_quotas(const cupsd_quota_t *q1,
-                              const cupsd_quota_t *q2);
-
-
-/*
- * 'cupsdAddQuota()' - Add a quota record for this printer and user.
- */
-
-cupsd_quota_t *                                /* O - Quota data */
-cupsdAddQuota(cupsd_printer_t *p,      /* I - Printer */
-              const char      *username)/* I - User */
-{
-  cupsd_quota_t        *q;                     /* New quota data */
-
-
-  if (!p || !username)
-    return (NULL);
-
-  if (!p->quotas)
-    p->quotas = cupsArrayNew((cups_array_func_t)compare_quotas, NULL);
-
-  if (!p->quotas)
-    return (NULL);
-
-  if ((q = calloc(1, sizeof(cupsd_quota_t))) == NULL)
-    return (NULL);
-
-  strlcpy(q->username, username, sizeof(q->username));
-
-  cupsArrayAdd(p->quotas, q);
-
-  return (q);
-}
-
-
-/*
- * 'cupsdFindQuota()' - Find a quota record.
- */
-
-cupsd_quota_t *                                /* O - Quota data */
-cupsdFindQuota(
-    cupsd_printer_t *p,                        /* I - Printer */
-    const char      *username)         /* I - User */
-{
-  cupsd_quota_t        *q,                     /* Quota data pointer */
-               match;                  /* Search data */
-
-
-  if (!p || !username)
-    return (NULL);
-
-  strlcpy(match.username, username, sizeof(match.username));
-
-  if ((q = (cupsd_quota_t *)cupsArrayFind(p->quotas, &match)) != NULL)
-    return (q);
-  else
-    return (cupsdAddQuota(p, username));
-}
+static cupsd_quota_t   *add_quota(cupsd_printer_t *p, const char *username);
+static int             compare_quotas(const cupsd_quota_t *q1,
+                                      const cupsd_quota_t *q2);
+static cupsd_quota_t   *find_quota(cupsd_printer_t *p, const char *username);
 
 
 /*
@@ -148,7 +94,7 @@ cupsdUpdateQuota(
   if (!p->k_limit && !p->page_limit)
     return (NULL);
 
-  if ((q = cupsdFindQuota(p, username)) == NULL)
+  if ((q = find_quota(p, username)) == NULL)
     return (NULL);
 
   cupsdLogMessage(CUPSD_LOG_DEBUG,
@@ -216,6 +162,37 @@ cupsdUpdateQuota(
 }
 
 
+/*
+ * 'add_quota()' - Add a quota record for this printer and user.
+ */
+
+cupsd_quota_t *                                /* O - Quota data */
+add_quota(cupsd_printer_t *p,          /* I - Printer */
+          const char      *username)   /* I - User */
+{
+  cupsd_quota_t        *q;                     /* New quota data */
+
+
+  if (!p || !username)
+    return (NULL);
+
+  if (!p->quotas)
+    p->quotas = cupsArrayNew((cups_array_func_t)compare_quotas, NULL);
+
+  if (!p->quotas)
+    return (NULL);
+
+  if ((q = calloc(1, sizeof(cupsd_quota_t))) == NULL)
+    return (NULL);
+
+  strlcpy(q->username, username, sizeof(q->username));
+
+  cupsArrayAdd(p->quotas, q);
+
+  return (q);
+}
+
+
 /*
  * 'compare_quotas()' - Compare two quota records...
  */
@@ -229,5 +206,29 @@ compare_quotas(const cupsd_quota_t *q1,    /* I - First quota record */
 
 
 /*
- * End of "$Id: quotas.c 4970 2006-01-24 14:05:45Z mike $".
+ * 'find_quota()' - Find a quota record.
+ */
+
+cupsd_quota_t *                                /* O - Quota data */
+find_quota(cupsd_printer_t *p,         /* I - Printer */
+           const char      *username)  /* I - User */
+{
+  cupsd_quota_t        *q,                     /* Quota data pointer */
+               match;                  /* Search data */
+
+
+  if (!p || !username)
+    return (NULL);
+
+  strlcpy(match.username, username, sizeof(match.username));
+
+  if ((q = (cupsd_quota_t *)cupsArrayFind(p->quotas, &match)) != NULL)
+    return (q);
+  else
+    return (add_quota(p, username));
+}
+
+
+/*
+ * End of "$Id: quotas.c 5305 2006-03-18 03:05:12Z mike $".
  */
index 79a393a820ba0a633b3c399e577f17cd141ba8e4..55645746aa516a9a01bdca3253a4ce565e464992 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: server.c 5200 2006-02-28 00:10:32Z mike $"
+ * "$Id: server.c 5305 2006-03-18 03:05:12Z mike $"
  *
  *   Server start/stop routines for the Common UNIX Printing System (CUPS).
  *
@@ -145,6 +145,7 @@ cupsdStopServer(void)
   cupsdStopBrowsing();
   cupsdStopAllNotifiers();
   cupsdSaveRemoteCache();
+  cupsdDeleteAllCerts();
 
   if (Clients != NULL)
   {
@@ -211,5 +212,5 @@ cupsdStopServer(void)
 
 
 /*
- * End of "$Id: server.c 5200 2006-02-28 00:10:32Z mike $".
+ * End of "$Id: server.c 5305 2006-03-18 03:05:12Z mike $".
  */
index 2d94eececb601f631bf0ba030e064731bb1246e0..4841020c70437b60e3d29a936a0024a81e0f60d3 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: subscriptions.c 5249 2006-03-08 16:45:28Z mike $"
+ * "$Id: subscriptions.c 5305 2006-03-18 03:05:12Z mike $"
  *
  *   Subscription routines for the Common UNIX Printing System (CUPS) scheduler.
  *
@@ -25,7 +25,6 @@
  *
  *   cupsdAddEvent()               - Add an event to the global event cache.
  *   cupsdAddSubscription()        - Add a new subscription object.
- *   cupsdDeleteAllEvents()        - Delete all cached events.
  *   cupsdDeleteAllSubscriptions() - Delete all subscriptions.
  *   cupsdDeleteSubscription()     - Delete a subscription object.
  *   cupsdEventName()              - Return a single event name.
  *   cupsdFindSubscription()       - Find a subscription by ID.
  *   cupsdLoadAllSubscriptions()   - Load all subscriptions from the .conf file.
  *   cupsdSaveAllSubscriptions()   - Save all subscriptions to the .conf file.
- *   cupsdSendNotification()       - Send a notification for the specified event.
  *   cupsdStopAllNotifiers()       - Stop all notifier processes.
  *   cupsdUpdateNotifierStatus()   - Read messages from notifiers.
  *   cupsd_compare_subscriptions() - Compare two subscriptions.
+ *   cupsd_delete_all_events()     - Delete all cached events.
  *   cupsd_delete_event()          - Delete a single event...
  *   cupsd_send_dbus()             - Send a DBUS notification...
+ *   cupsd_send_notification()     - Send a notification for the specified
+ *                                   event.
  *   cupsd_start_notifier()        - Start a notifier subprocess...
  */
 
 static int     cupsd_compare_subscriptions(cupsd_subscription_t *first,
                                            cupsd_subscription_t *second,
                                            void *unused);
+static void    cupsd_delete_all_events(void);
 static void    cupsd_delete_event(cupsd_event_t *event);
 #ifdef HAVE_DBUS
 static void    cupsd_send_dbus(cupsd_eventmask_t event, cupsd_printer_t *dest,
                                cupsd_job_t *job);
 #endif /* HAVE_DBUS */
+static void    cupsd_send_notification(cupsd_subscription_t *sub,
+                                       cupsd_event_t *event);
 static void    cupsd_start_notifier(cupsd_subscription_t *sub);
 
 
@@ -226,7 +230,7 @@ cupsdAddEvent(
          ippAddInteger(temp->attrs, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_INTEGER,
                        "notify-job-id", job->id);
          ippAddInteger(temp->attrs, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_ENUM,
-                       "job-state", (int)job->state);
+                       "job-state", job->state_value);
 
           if ((attr = ippFindAttribute(job->attrs, "job-name",
                                       IPP_TAG_NAME)) != NULL)
@@ -323,7 +327,7 @@ cupsdAddEvent(
       * Send the notification for this subscription...
       */
 
-      cupsdSendNotification(sub, temp);
+      cupsd_send_notification(sub, temp);
     }
   }
 
@@ -351,9 +355,10 @@ cupsdAddSubscription(
 
 
   cupsdLogMessage(CUPSD_LOG_DEBUG,
-                  "cupsdAddSubscription(mask=%x(%s), dest=%p(%s), job=%p(%d), uri=\"%s\")",
-                  mask, cupsdEventName(mask), dest, dest ? dest->name : "",
-                 job, job ? job->id : 0, uri);
+                  "cupsdAddSubscription(mask=%x, dest=%p(%s), job=%p(%d), "
+                 "uri=\"%s\")",
+                  mask, dest, dest ? dest->name : "", job, job ? job->id : 0,
+                 uri);
 
   if (!Subscriptions)
     Subscriptions = cupsArrayNew((cups_array_func_t)cupsd_compare_subscriptions,
@@ -423,27 +428,6 @@ cupsdAddSubscription(
 }
 
 
-/*
- * 'cupsdDeleteAllEvents()' - Delete all cached events.
- */
-
-void
-cupsdDeleteAllEvents(void)
-{
-  int  i;                              /* Looping var */
-
-
-  if (MaxEvents <= 0 || !Events)
-    return;
-
-  for (i = 0; i < NumEvents; i ++)
-    cupsd_delete_event(Events[i]);
-
-  free(Events);
-  Events = NULL;
-}
-
-
 /*
  * 'cupsdDeleteAllSubscriptions()' - Delete all subscriptions.
  */
@@ -454,6 +438,8 @@ cupsdDeleteAllSubscriptions(void)
   cupsd_subscription_t *sub;           /* Subscription */
 
 
+  cupsd_delete_all_events();
+
   if (!Subscriptions)
     return;
 
@@ -571,6 +557,9 @@ cupsdEventName(
     case CUPSD_EVENT_JOB_PROGRESS :
         return ("job-progress");
 
+    case CUPSD_EVENT_JOB_STATE :
+        return ("job-state");
+
     case CUPSD_EVENT_JOB_STATE_CHANGED :
         return ("job-state-changed");
 
@@ -623,6 +612,8 @@ cupsdEventValue(const char *name)   /* I - Name of event */
     return (CUPSD_EVENT_PRINTER_CONFIG_CHANGED);
   else if (!strcmp(name, "printer-changed"))
     return (CUPSD_EVENT_PRINTER_CHANGED);
+  else if (!strcmp(name, "job-state"))
+    return (CUPSD_EVENT_JOB_STATE);
   else if (!strcmp(name, "job-created"))
     return (CUPSD_EVENT_JOB_CREATED);
   else if (!strcmp(name, "job-completed"))
@@ -1218,83 +1209,6 @@ cupsdSaveAllSubscriptions(void)
 }
 
 
-/*
- * 'cupsdSendNotification()' - Send a notification for the specified event.
- */
-
-void
-cupsdSendNotification(
-    cupsd_subscription_t *sub,         /* I - Subscription object */
-    cupsd_event_t        *event)       /* I - Event to send */
-{
-  ipp_state_t  state;                  /* IPP event state */
-
-
-  cupsdLogMessage(CUPSD_LOG_DEBUG,
-                  "cupsdSendNotification(sub=%p(%d), event=%p(%s))\n",
-                  sub, sub->id, event, cupsdEventName(event->event));
-
- /*
-  * Allocate the events array as needed...
-  */
-
-  if (!sub->events)
-  {
-    sub->events = calloc(MaxEvents, sizeof(cupsd_event_t *));
-
-    if (!sub->events)
-    {
-      cupsdLogMessage(CUPSD_LOG_CRIT,
-                      "Unable to allocate memory for subscription #%d!",
-                      sub->id);
-      return;
-    }
-  }
-
- /*
-  * Add the event to the subscription.  Since the events array is
-  * always MaxEvents in length, and since we will have already
-  * removed an event from the subscription cache if we hit the
-  * event cache limit, we don't need to check for overflow here...
-  */
-
-  sub->events[sub->num_events] = event;
-  sub->num_events ++;
-
- /*
-  * Deliver the event...
-  */
-
-  if (sub->recipient)
-  {
-    if (sub->pipe < 0)
-      cupsd_start_notifier(sub);
-
-    cupsdLogMessage(CUPSD_LOG_DEBUG, "sub->pipe=%d", sub->pipe);
-
-    if (sub->pipe >= 0)
-    {
-      event->attrs->state = IPP_IDLE;
-
-      while ((state = ippWriteFile(sub->pipe, event->attrs)) != IPP_DATA)
-        if (state == IPP_ERROR)
-         break;
-
-      if (state == IPP_ERROR)
-        cupsdLogMessage(CUPSD_LOG_ERROR,
-                       "Unable to send event for subscription %d (%s)!",
-                       sub->id, sub->recipient);
-    }
-  }
-
- /*
-  * Bump the event sequence number...
-  */
-
-  sub->next_event_id ++;
-}
-
-
 /*
  * 'cupsdStopAllNotifiers()' - Stop all notifier processes.
  */
@@ -1385,6 +1299,27 @@ cupsd_compare_subscriptions(
 }
 
 
+/*
+ * 'cupsd_delete_all_events()' - Delete all cached events.
+ */
+
+static void
+cupsd_delete_all_events(void)
+{
+  int  i;                              /* Looping var */
+
+
+  if (MaxEvents <= 0 || !Events)
+    return;
+
+  for (i = 0; i < NumEvents; i ++)
+    cupsd_delete_event(Events[i]);
+
+  free(Events);
+  Events = NULL;
+}
+
+
 /*
  * 'cupsd_delete_event()' - Delete a single event...
  *
@@ -1521,6 +1456,83 @@ cupsd_send_dbus(cupsd_eventmask_t event,/* I - Event to send */
 #endif /* HAVE_DBUS */
 
 
+/*
+ * 'cupsd_send_notification()' - Send a notification for the specified event.
+ */
+
+static void
+cupsd_send_notification(
+    cupsd_subscription_t *sub,         /* I - Subscription object */
+    cupsd_event_t        *event)       /* I - Event to send */
+{
+  ipp_state_t  state;                  /* IPP event state */
+
+
+  cupsdLogMessage(CUPSD_LOG_DEBUG,
+                  "cupsd_send_notification(sub=%p(%d), event=%p(%s))\n",
+                  sub, sub->id, event, cupsdEventName(event->event));
+
+ /*
+  * Allocate the events array as needed...
+  */
+
+  if (!sub->events)
+  {
+    sub->events = calloc(MaxEvents, sizeof(cupsd_event_t *));
+
+    if (!sub->events)
+    {
+      cupsdLogMessage(CUPSD_LOG_CRIT,
+                      "Unable to allocate memory for subscription #%d!",
+                      sub->id);
+      return;
+    }
+  }
+
+ /*
+  * Add the event to the subscription.  Since the events array is
+  * always MaxEvents in length, and since we will have already
+  * removed an event from the subscription cache if we hit the
+  * event cache limit, we don't need to check for overflow here...
+  */
+
+  sub->events[sub->num_events] = event;
+  sub->num_events ++;
+
+ /*
+  * Deliver the event...
+  */
+
+  if (sub->recipient)
+  {
+    if (sub->pipe < 0)
+      cupsd_start_notifier(sub);
+
+    cupsdLogMessage(CUPSD_LOG_DEBUG, "sub->pipe=%d", sub->pipe);
+
+    if (sub->pipe >= 0)
+    {
+      event->attrs->state = IPP_IDLE;
+
+      while ((state = ippWriteFile(sub->pipe, event->attrs)) != IPP_DATA)
+        if (state == IPP_ERROR)
+         break;
+
+      if (state == IPP_ERROR)
+        cupsdLogMessage(CUPSD_LOG_ERROR,
+                       "Unable to send event for subscription %d (%s)!",
+                       sub->id, sub->recipient);
+    }
+  }
+
+ /*
+  * Bump the event sequence number...
+  */
+
+  sub->next_event_id ++;
+}
+
+
 /*
  * 'cupsd_start_notifier()' - Start a notifier subprocess...
  */
@@ -1649,5 +1661,5 @@ cupsd_start_notifier(
 
 
 /*
- * End of "$Id: subscriptions.c 5249 2006-03-08 16:45:28Z mike $".
+ * End of "$Id: subscriptions.c 5305 2006-03-18 03:05:12Z mike $".
  */
index fb6308ceafa9d57e4d6dc33c624893f11c9b5d86..646757120798e71f76900999040b1c289704de8b 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: subscriptions.h 5025 2006-01-30 03:49:12Z mike $"
+ * "$Id: subscriptions.h 5305 2006-03-18 03:05:12Z mike $"
  *
  *   Subscription definitions for the Common UNIX Printing System (CUPS) scheduler.
  *
@@ -154,7 +154,6 @@ extern cupsd_subscription_t *
                cupsdAddSubscription(unsigned mask, cupsd_printer_t *dest,
                                     cupsd_job_t *job, const char *uri,
                                     int sub_id);
-extern void    cupsdDeleteAllEvents(void);
 extern void    cupsdDeleteAllSubscriptions(void);
 extern void    cupsdDeleteSubscription(cupsd_subscription_t *sub, int update);
 extern const char *
@@ -168,12 +167,10 @@ extern void       cupsdExpireSubscriptions(cupsd_printer_t *dest,
                                         cupsd_job_t *job);
 extern void    cupsdLoadAllSubscriptions(void);
 extern void    cupsdSaveAllSubscriptions(void);
-extern void    cupsdSendNotification(cupsd_subscription_t *sub,
-                                     cupsd_event_t *event);
 extern void    cupsdStopAllNotifiers(void);
 extern void    cupsdUpdateNotifierStatus(void);
 
 
 /*
- * End of "$Id: subscriptions.h 5025 2006-01-30 03:49:12Z mike $".
+ * End of "$Id: subscriptions.h 5305 2006-03-18 03:05:12Z mike $".
  */
index a0edfbd315bd7a79837bd0e0eae4b238bf5ee421..f833198534f50fd7447a24efb896153aadb3b1c5 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: sysman.c 5241 2006-03-07 22:07:44Z mike $"
+ * "$Id: sysman.c 5305 2006-03-18 03:05:12Z mike $"
  *
  *   System management definitions for the Common UNIX Printing System (CUPS).
  *
  * common to wake up in a new location.
  */
 
-#ifndef __APPLE__
-/*
- * 'cupsdStartSystemMonitor()' - Start monitoring for system change.
- */
-
-void
-cupsdStartSystemMonitor(void)
-{
-}
-
-
-/*
- * 'cupsdStopSystemMonitor()' - Stop monitoring for system change.
- */
-
-void
-cupsdStopSystemMonitor(void)
-{
-}
-
-
-/*
- * 'cupsdUpdateSystemMonitor()' - Update the current system state.
- */
-
-void
-cupsdUpdateSystemMonitor(void)
-{
-}
-#endif /* !__APPLE__ */
-
-
 #ifdef __APPLE__
 /*
  * This is the Apple-specific system event code.  It works by creating
@@ -759,5 +727,5 @@ sysEventTimerNotifier(
 
 
 /*
- * End of "$Id: sysman.c 5241 2006-03-07 22:07:44Z mike $".
+ * End of "$Id: sysman.c 5305 2006-03-18 03:05:12Z mike $".
  */
index c38d0c21e40e948c3bebb634c8e4add805fef2f5..60378ebbebb8d4ebd7a7f87eb0866b37aceeda59 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: testdirsvc.c 5178 2006-02-26 00:24:23Z mike $"
+ * "$Id: testdirsvc.c 5301 2006-03-17 23:44:33Z mike $"
  *
  *   Browsing test program for the Common UNIX Printing System (CUPS).
  *
@@ -129,6 +129,8 @@ main(int  argc,                             /* I - Number of command-line arguments */
         interval = atoi(argv[i]);
       else
         usage();
+
+      continuous = 1;
     }
     else if (!strcmp(argv[i], "-l"))
     {
@@ -329,5 +331,5 @@ usage(void)
 
 
 /*
- * End of "$Id: testdirsvc.c 5178 2006-02-26 00:24:23Z mike $".
+ * End of "$Id: testdirsvc.c 5301 2006-03-17 23:44:33Z mike $".
  */
index 376ae1a03711cb3e8408a867088814416128ab0f..559dfa8e45d494bf66b469e3dcb204966dd2a7db 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: testspeed.c 4800 2005-10-18 18:06:20Z mike $"
+ * "$Id: testspeed.c 5305 2006-03-18 03:05:12Z mike $"
  *
  *   Scheduler speed test for the Common UNIX Printing System (CUPS).
  *
  *
  * Contents:
  *
- *   main() - Send multiple IPP requests and report on the average response
- *            time.
+ *   main()    - Send multiple IPP requests and report on the average response
+ *               time.
+ *   do_test() - Run a test on a specific host...
+ *   usage()   - Show program usage...
  */
 
 /*
@@ -47,9 +49,9 @@
  * Local functions...
  */
 
-int    do_test(const char *server, http_encryption_t encryption,
-               int requests, int verbose);
-void   usage(void);
+static int     do_test(const char *server, http_encryption_t encryption,
+                       int requests, int verbose);
+static void    usage(void);
 
 
 /*
@@ -181,7 +183,7 @@ main(int  argc,                             /* I - Number of command-line arguments */
  * 'do_test()' - Run a test on a specific host...
  */
 
-int                                    /* O - Exit status */
+static int                             /* O - Exit status */
 do_test(const char        *server,     /* I - Server to use */
         http_encryption_t encryption,  /* I - Encryption to use */
        int               requests,     /* I - Number of requests to send */
@@ -291,7 +293,7 @@ do_test(const char        *server,  /* I - Server to use */
  * 'usage()' - Show program usage...
  */
 
-void
+static void
 usage(void)
 {
   puts("Usage: testspeed [-c children] [-h] [-r requests] [-v] [-E] hostname");
@@ -301,5 +303,5 @@ usage(void)
 
 
 /*
- * End of "$Id: testspeed.c 4800 2005-10-18 18:06:20Z mike $".
+ * End of "$Id: testspeed.c 5305 2006-03-18 03:05:12Z mike $".
  */
index b76826f0ad1123829fa856bab4d4d874348d9600..966c682505d9179a043163908afb54f8689da1a8 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: util.c 4719 2005-09-28 21:12:44Z mike $"
+ * "$Id: util.c 5305 2006-03-18 03:05:12Z mike $"
  *
  *   Mini-daemon utility functions for the Common UNIX Printing System (CUPS).
  *
@@ -194,6 +194,7 @@ cupsdSendIPPHeader(
 }
 
 
+#if 0 /* Not currently used */
 /*
  * 'cupsdSendIPPInteger()' - Send an integer attribute.
  */
@@ -225,6 +226,7 @@ cupsdSendIPPInteger(
   putchar(value >> 8);
   putchar(value);
 }
+#endif /* 0 */
 
 
 /*
@@ -275,5 +277,5 @@ cupsdSendIPPTrailer(void)
 
 
 /*
- * End of "$Id: util.c 4719 2005-09-28 21:12:44Z mike $".
+ * End of "$Id: util.c 5305 2006-03-18 03:05:12Z mike $".
  */
index b374ddda35f2d6805be8c90a9c50c4c5ed8c69e4..35fd4db4acce2340eeac73189885f32acf3d516b 100644 (file)
@@ -1,5 +1,5 @@
 #
-# "$Id: Makefile 5229 2006-03-05 16:48:12Z mike $"
+# "$Id: Makefile 5308 2006-03-18 13:18:18Z mike $"
 #
 #   Template makefile for the Common UNIX Printing System (CUPS).
 #
@@ -28,7 +28,6 @@ include ../Makedefs
 # Template files...
 #
 
-LANGUAGES =    ja
 FILES  =       \
                add-class.tmpl \
                add-printer.tmpl \
@@ -152,5 +151,5 @@ uninstall:
 
 
 #
-# End of "$Id: Makefile 5229 2006-03-05 16:48:12Z mike $".
+# End of "$Id: Makefile 5308 2006-03-18 13:18:18Z mike $".
 #
index 5124c4ddda1759b3d1a9c8a223ca57a75031ac9f..8ab85636fc3d00743b583a1bf07082dc91b123fa 100644 (file)
 <TD></TD>
 <TD>Examples:
 <PRE>
-    file:/path/to/filename.prn
     http://hostname:631/ipp/
     http://hostname:631/ipp/port1
+
     ipp://hostname/ipp/
     ipp://hostname/ipp/port1
+
     lpd://hostname/queue
+
     socket://hostname
     socket://hostname:9100
 </PRE>
diff --git a/templates/es/add-class.tmpl b/templates/es/add-class.tmpl
new file mode 100644 (file)
index 0000000..98401d7
--- /dev/null
@@ -0,0 +1,33 @@
+<FORM METHOD="POST" ACTION="/admin">
+<INPUT TYPE="HIDDEN" NAME="OP" VALUE="{op}">
+
+<H2 CLASS="title">A&ntilde;adir clase</H2>
+
+<TABLE>
+<TR>
+<TH CLASS="label">Nombre:</TH>
+<TD><INPUT TYPE="TEXT" NAME="PRINTER_NAME" SIZE="40" MAXLENGTH="127"></TD>
+</TR>
+<TR>
+<TH CLASS="label">Ubicaci&oacute;n:</TH>
+<TD><INPUT TYPE="TEXT" NAME="PRINTER_LOCATION" SIZE="40" MAXLENGTH="127"></TD>
+</TR>
+<TR>
+<TH CLASS="label">Descripci&oacute;n:</TH>
+<TD><INPUT TYPE="TEXT" NAME="PRINTER_INFO" SIZE="40" MAXLENGTH="127"></TD>
+</TR>
+<TR>
+<TH CLASS="label">Miembros:</TH>
+<TD>
+<SELECT NAME="MEMBER_URIS" SIZE="10" MULTIPLE>
+{[member_uris]<OPTION VALUE="{member_uris}" {?member_selected}>{member_names}}
+</SELECT>
+</TD>
+</TR>
+<TR>
+<TD></TD>
+<TD><INPUT TYPE="IMAGE" SRC="/images/button-add-class.gif" ALT="A&ntilde;adir clase"></TD>
+</TR>
+</TABLE>
+
+</FORM>
diff --git a/templates/es/add-printer.tmpl b/templates/es/add-printer.tmpl
new file mode 100644 (file)
index 0000000..66c06e9
--- /dev/null
@@ -0,0 +1,28 @@
+<FORM METHOD="POST" ACTION="/admin">
+<INPUT TYPE="HIDDEN" NAME="OP" VALUE="{op}">
+
+<H2 CLASS="title">A&ntilde;adir impresora nueva</H2>
+
+<TABLE>
+<TR>
+<TH CLASS="label">Nombre:</TH>
+<TD><INPUT TYPE="TEXT" NAME="PRINTER_NAME" SIZE="40" MAXLENGTH="127"><BR>
+<SMALL>(Puede contener cualquier car&aacute;cter imprimible excepto "/", "#", y espacio)</SMALL></TD>
+</TR>
+<TR>
+<TH CLASS="label">Ubicaci&oacute;n:</TH>
+<TD><INPUT TYPE="TEXT" NAME="PRINTER_LOCATION" SIZE="40" MAXLENGTH="127"><BR>
+<SMALL>(Ubicaci&oacute;n f&aacute;cilmente le&iacute;ble tal como "Lab 1")</SMALL></TD>
+</TR>
+<TR>
+<TH CLASS="label">Descripci&oacute;n:</TH>
+<TD><INPUT TYPE="TEXT" NAME="PRINTER_INFO" SIZE="40" MAXLENGTH="127"><BR>
+<SMALL>(Descripci&oacute;n f&aacute;cilmente le&iacute;ble tal como "HP LaserJet de doble cara")</SMALL></TD>
+</TR>
+<TR>
+<TD></TD>
+<TD><INPUT TYPE="IMAGE" SRC="/images/button-continue.gif" ALT="Siguiente"></TD>
+</TR>
+</TABLE>
+
+</FORM>
diff --git a/templates/es/admin.tmpl b/templates/es/admin.tmpl
new file mode 100644 (file)
index 0000000..29816e7
--- /dev/null
@@ -0,0 +1,77 @@
+<TABLE CELLPADDING="0" CELLSPACING="0" WIDTH="100%" SUMMARY="Tareas de administraci&oacute;n">
+<TR><TD VALIGN="TOP" NOWRAP>
+
+<H2 CLASS="title">Impresoras</H2>
+
+<P>
+<A HREF="/admin?op=add-printer"><IMG
+SRC="/images/button-add-printer.gif" ALT="A&ntilde;adir impresora" CLASS="button"></A>
+<A HREF="/printers/"><IMG SRC="/images/button-manage-printers.gif"
+ALT="Administrar impresoras" CLASS="button"></A>
+{have_samba?<A HREF="/admin/?op=export-samba"><IMG
+SRC="/images/button-export-samba.gif" ALT="Exportar impresoras a Samba"
+CLASS="button"></A>:}
+</P>
+
+{#device_uri=0?:<P><B>Encontradas nuevas impresoras:</B></P><UL>{[device_uri]
+<LI>{device_make_and_model} ({device_info})
+<A HREF="/admin?op=add-printer&amp;{device_options}"><IMG
+SRC="/images/button-add-this-printer.gif" ALT="A&ntilde;adir esta impresora" CLASS="button"
+ALIGN="MIDDLE"></A></LI>
+}</UL>}
+
+<H2 CLASS="title">Clases</H2>
+
+<P>
+<A HREF="/admin?op=add-class"><IMG SRC="/images/button-add-class.gif"
+ALT="A&ntilde;adir clase" CLASS="button"></A>
+<A HREF="/classes/"><IMG SRC="/images/button-manage-classes.gif"
+ALT="Administrar clases" CLASS="button"></A>
+</P>
+
+<H2 CLASS="title">Trabajos</H2>
+
+<P>
+<A HREF="/jobs/"><IMG SRC="/images/button-manage-jobs.gif" ALT="Administrar
+trabajos" CLASS="button"></A>
+</P>
+
+</TD><TD>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD><TD VALIGN="TOP">
+
+<H2 CLASS="title">Servidor</H2>
+
+<P>
+<A HREF="/admin?op=config-server"><IMG
+SRC="/images/button-edit-configuration-file.gif" ALT="Editar archivo
+configuraci&oacute;n" CLASS="button"></A>
+<A HREF="/admin/log/access_log" TARGET="_blank"><IMG
+SRC="/images/button-view-access-log.gif" ALT="Ver archivo de registro de accesos"
+CLASS="button"></A>
+<A HREF="/admin/log/error_log" TARGET="_blank"><IMG
+SRC="/images/button-view-error-log.gif" ALT="Ver archivo de registro de errores"
+CLASS="button"></A>
+<A HREF="/admin/log/page_log" TARGET="_blank"><IMG
+SRC="/images/button-view-page-log.gif" ALT="Ver archivo de registro de p&aacute;ginas"
+CLASS="button"></A>
+</P>
+
+{SETTINGS_ERROR?<P>{SETTINGS_MESSAGE}</P>
+<BLOCKQUOTE>{SETTINGS_ERROR}</BLOCKQUOTE>:
+
+<FORM METHOD="POST" ACTION="/admin">
+
+<P><B>Configuraci&oacute;n b&aacute;sica del servidor:</B></P>
+
+<P><INPUT TYPE="HIDDEN" NAME="OP" VALUE="config-server">
+<INPUT TYPE="CHECKBOX" NAME="REMOTE_PRINTERS" {?remote_printers}> Mostrar impresoras compartidas por otros sistemas<BR>
+<INPUT TYPE="CHECKBOX" NAME="SHARE_PRINTERS" {?share_printers}> Compartir impresoras p&uacute;blicas conectadas a este sistema<BR>
+<INPUT TYPE="CHECKBOX" NAME="REMOTE_ADMIN" {?remote_admin}> Permitir administraci&oacute;n remota<BR>
+<INPUT TYPE="CHECKBOX" NAME="USER_CANCEL_ANY" {?user_cancel_any}> Permitir a los usuarios cancelar cualquier trabajo (no s&oacute;lo los suyos propios)<BR>
+<INPUT TYPE="CHECKBOX" NAME="DEBUG_LOGGING" {?debug_logging}> Guardar informaci&oacute;n de depuraci&oacute;n para b&uacute;squeda de problemas</P>
+
+<P><INPUT TYPE="IMAGE" SRC="/images/button-change-settings.gif" ALT="Cambiar especificaciones"></P>
+
+</FORM>}
+
+</TD></TR>
+</TABLE>
diff --git a/templates/es/choose-device.tmpl b/templates/es/choose-device.tmpl
new file mode 100644 (file)
index 0000000..fbfb83d
--- /dev/null
@@ -0,0 +1,26 @@
+<FORM METHOD="POST" ACTION="/admin">
+<INPUT TYPE="HIDDEN" NAME="OP" VALUE="{op}">
+<INPUT TYPE="HIDDEN" NAME="PRINTER_NAME" VALUE="{printer_name}">
+<INPUT TYPE="HIDDEN" NAME="PRINTER_LOCATION" VALUE="{?printer_location}">
+<INPUT TYPE="HIDDEN" NAME="PRINTER_INFO" VALUE="{?printer_info}">
+<INPUT TYPE="HIDDEN" NAME="CURRENT_MAKE_AND_MODEL" VALUE="{?current_make_and_model}">
+
+<H2 CLASS="title">Tipo de conexi&oacute;n de {printer_name}</H2>
+
+<TABLE>
+<TR>
+<TH CLASS="label">Conexi&oacute;n:</TH>
+<TD>
+<SELECT NAME="DEVICE_URI">
+{[device_uri]<OPTION VALUE="{device_uri}{?device_make_and_model!Unknown?|{device_make_and_model}:}" {?current_device_uri={device_uri}?SELECTED:{current_device_scheme={device_uri}?SELECTED:}}>
+{device_info} {?device_make_and_model!Unknown?({device_make_and_model}):}</OPTION>
+}</SELECT>
+</TD>
+</TR>
+<TR>
+<TD></TD>
+<TD><INPUT TYPE="IMAGE" SRC="/images/button-continue.gif" ALT="Siguiente"></TD>
+</TR>
+</TABLE>
+
+</FORM>
diff --git a/templates/es/choose-make.tmpl b/templates/es/choose-make.tmpl
new file mode 100644 (file)
index 0000000..2358dfe
--- /dev/null
@@ -0,0 +1,42 @@
+<FORM METHOD="POST" ACTION="/admin" ENCTYPE="multipart/form-data">
+<INPUT TYPE="HIDDEN" NAME="OP" VALUE="{op}">
+<INPUT TYPE="HIDDEN" NAME="PRINTER_NAME" VALUE="{printer_name}">
+<INPUT TYPE="HIDDEN" NAME="PRINTER_LOCATION" VALUE="{?printer_location}">
+<INPUT TYPE="HIDDEN" NAME="PRINTER_INFO" VALUE="{?printer_info}">
+<INPUT TYPE="HIDDEN" NAME="DEVICE_URI" VALUE="{device_uri}">
+<INPUT TYPE="HIDDEN" NAME="BAUDRATE" VALUE="{?baudrate}">
+<INPUT TYPE="HIDDEN" NAME="BITS" VALUE="{?bits}">
+<INPUT TYPE="HIDDEN" NAME="PARITY" VALUE="{?parity}">
+<INPUT TYPE="HIDDEN" NAME="FLOW" VALUE="{?flow}">
+
+<H2 CLASS="title">Marca/Fabricante de {printer_name}</H2>
+
+<TABLE>
+<TR>
+<TH CLASS="label">Marca:</TH>
+<TD>
+<SELECT NAME="PPD_MAKE" SIZE="10">
+{[ppd_make]<OPTION VALUE="{ppd_make}" {?current_make={ppd_make}?SELECTED:}>{ppd_make}}
+</SELECT>
+</TD>
+</TR>
+<TR>
+<TD></TD>
+<TD><INPUT TYPE="IMAGE" SRC="/images/button-continue.gif" ALT="Siguiente"></TD>
+</TR>
+<TR>
+<TD></TD>
+<TD>&nbsp;</TD>
+</TR>
+<TR>
+<TH CLASS="label">O proporcione un archivo PPD:</TH>
+<TD><INPUT TYPE="HIDDEN" NAME="MAX_FILE_SIZE" VALUE="262144"><INPUT
+TYPE="FILE" NAME="PPD_FILE"></TD>
+</TR>
+<TR>
+<TD></TD>
+<TD><INPUT TYPE="IMAGE" SRC="/images/button-{op}.gif" ALT="{op=add-printer?A&ntilde;adir impresora:Modificar impresora}"></TD>
+</TR>
+</TABLE>
+
+</FORM>
diff --git a/templates/es/choose-model.tmpl b/templates/es/choose-model.tmpl
new file mode 100644 (file)
index 0000000..3362a67
--- /dev/null
@@ -0,0 +1,34 @@
+<FORM METHOD="POST" ACTION="/admin" ENCTYPE="multipart/form-data">
+<INPUT TYPE="HIDDEN" NAME="OP" VALUE="{op}">
+<INPUT TYPE="HIDDEN" NAME="PRINTER_NAME" VALUE="{printer_name}">
+<INPUT TYPE="HIDDEN" NAME="PRINTER_LOCATION" VALUE="{?printer_location}">
+<INPUT TYPE="HIDDEN" NAME="PRINTER_INFO" VALUE="{?printer_info}">
+<INPUT TYPE="HIDDEN" NAME="DEVICE_URI" VALUE="{device_uri}">
+<INPUT TYPE="HIDDEN" NAME="BAUDRATE" VALUE="{?baudrate}">
+<INPUT TYPE="HIDDEN" NAME="BITS" VALUE="{?bits}">
+<INPUT TYPE="HIDDEN" NAME="PARITY" VALUE="{?parity}">
+<INPUT TYPE="HIDDEN" NAME="FLOW" VALUE="{?flow}">
+
+<H2 CLASS="title">Modelo/Controlador para {printer_name}</H2>
+
+<TABLE>
+<TR>
+<TH CLASS="label">Modelo:</TH>
+<TD>
+<SELECT NAME="PPD_NAME" SIZE="10">
+{[ppd_name]<OPTION VALUE="{ppd_name}" {?current_make_and_model={ppd_make_and_model}?SELECTED:}>{ppd_make_and_model} ({ppd_natural_language})
+}</SELECT>
+</TD>
+</TR>
+<TR>
+<TH CLASS="label">O proporcione un archivo PPD:</TH>
+<TD><INPUT TYPE="HIDDEN" NAME="MAX_FILE_SIZE" VALUE="262144"><INPUT
+TYPE="FILE" NAME="PPD_FILE"></TD>
+</TR>
+<TR>
+<TD></TD>
+<TD><INPUT TYPE="IMAGE" SRC="/images/button-{op}.gif" ALT="{op=add-printer?A&ntilde;adir impresora:Modificar impresora}"></TD>
+</TR>
+</TABLE>
+
+</FORM>
diff --git a/templates/es/choose-serial.tmpl b/templates/es/choose-serial.tmpl
new file mode 100644 (file)
index 0000000..4b6508b
--- /dev/null
@@ -0,0 +1,47 @@
+<FORM METHOD="POST" ACTION="/admin">
+<INPUT TYPE="HIDDEN" NAME="OP" VALUE="{op}">
+<INPUT TYPE="HIDDEN" NAME="PRINTER_NAME" VALUE="{printer_name}">
+<INPUT TYPE="HIDDEN" NAME="PRINTER_LOCATION" VALUE="{?printer_location}">
+<INPUT TYPE="HIDDEN" NAME="PRINTER_INFO" VALUE="{?printer_info}">
+<INPUT TYPE="HIDDEN" NAME="DEVICE_URI" VALUE="{device_uri}">
+
+<H2 CLASS="title">Par&aacute;metros puerto serie para {printer_name}</H2>
+
+<TABLE>
+<TR>
+<TH CLASS="label">Baudios:</TH>
+<TD><SELECT NAME="BAUDRATE">
+{[baudrates]<OPTION {?baudrate={baudrates}?SELECTED:}>{baudrates}}
+</SELECT></TD>
+</TR>
+<TR>
+<TH CLASS="label">Paridad:</TH>
+<TD><SELECT NAME="PARITY">
+<OPTION VALUE="none" {?parity=none?SELECTED:}>Sin paridad
+<OPTION VALUE="even" {?parity=even?SELECTED:}>Par
+<OPTION VALUE="odd" {?parity=odd?SELECTED:}>Impar
+</SELECT></TD>
+</TR>
+<TR>
+<TH CLASS="label">Bits de datos:</TH>
+<TD><SELECT NAME="BITS">
+<OPTION {?bits=8?SELECTED:}>8
+<OPTION {?bits=7?SELECTED:}>7
+</SELECT></TD>
+</TR>
+<TR>
+<TH CLASS="label">Control de flujo:</TH>
+<TD><SELECT NAME="FLOW">
+<OPTION VALUE="none" {?flow=none?SELECTED:}>Ninguno
+<OPTION VALUE="soft" {?flow=soft?SELECTED:}>XON/XOFF (Software)
+<OPTION VALUE="hard" {?flow=hard?SELECTED:}>RTS/CTS (Hardware)
+<OPTION VALUE="dtrdsr" {?flow=dtrdsr?SELECTED:}>DTR/DSR (Hardware)
+</SELECT></TD>
+</TR>
+<TR>
+<TD></TD>
+<TD><INPUT TYPE="IMAGE" SRC="/images/button-continue.gif" ALT="Siguiente"></TD>
+</TR>
+</TABLE>
+
+</FORM>
diff --git a/templates/es/choose-uri.tmpl b/templates/es/choose-uri.tmpl
new file mode 100644 (file)
index 0000000..12b71fc
--- /dev/null
@@ -0,0 +1,42 @@
+<FORM METHOD="POST" ACTION="/admin">
+<INPUT TYPE="HIDDEN" NAME="OP" VALUE="{op}">
+<INPUT TYPE="HIDDEN" NAME="PRINTER_NAME" VALUE="{printer_name}">
+<INPUT TYPE="HIDDEN" NAME="PRINTER_LOCATION" VALUE="{?printer_location}">
+<INPUT TYPE="HIDDEN" NAME="PRINTER_INFO" VALUE="{?printer_info}">
+<INPUT TYPE="HIDDEN" NAME="CURRENT_MAKE_AND_MODEL" VALUE="{?current_make_and_model}">
+
+<H2 CLASS="title">URI de la conexi&oacute;n para {printer_name}</H2>
+
+<TABLE>
+<TR>
+<TH CLASS="label">URI de la conexi&oacute;n:</TH>
+<TD><INPUT TYPE="TEXT" SIZE="60" MAXLENGTH="1024" NAME="DEVICE_URI" VALUE="{device_uri}"></TD>
+</TR>
+<TR>
+<TD></TD>
+<TD>Ejemplos:
+<PRE>
+    http://nombre_ordenador:631/ipp/
+    http://nombre_ordenador:631/ipp/puerto1
+
+    ipp://nombre_ordenador/ipp/
+    ipp://nombre_ordenador/ipp/puerto1
+
+    lpd://nombre_ordenador/cola
+
+    socket://nombre_ordenador
+    socket://nombre_ordenador:9100
+</PRE>
+
+<P>Vea <A HREF="/help/network.html" TARGET="_blank">"Impresoras
+en red"</A> para escoger el URI adecuado a usar con su impresora.</P>
+
+</TD>
+</TR>
+<TR>
+<TD></TD>
+<TD><INPUT TYPE="IMAGE" SRC="/images/button-continue.gif" ALT="Siguiente"></TD>
+</TR>
+</TABLE>
+
+</FORM>
diff --git a/templates/es/class-added.tmpl b/templates/es/class-added.tmpl
new file mode 100644 (file)
index 0000000..faf659a
--- /dev/null
@@ -0,0 +1 @@
+<P>Se ha a&ntilde;adido con &eacute;xito la clase <A HREF="/classes/{printer_name}">{printer_name}</A>.
diff --git a/templates/es/class-confirm.tmpl b/templates/es/class-confirm.tmpl
new file mode 100644 (file)
index 0000000..ee7d2be
--- /dev/null
@@ -0,0 +1,7 @@
+<P><B>Advertencia:</B> &iquest;Est&aacute; seguro de querer borrar la clase
+{printer_name}?</P>
+
+<P ALIGN="CENTER"><A
+HREF="/admin?op=delete-class&printer_name={printer_name}&confirm=yes"><IMG
+SRC="/images/button-delete-class.gif" ALT="Borrar clase"
+CLASS="button"></A></P>
diff --git a/templates/es/class-deleted.tmpl b/templates/es/class-deleted.tmpl
new file mode 100644 (file)
index 0000000..c73465f
--- /dev/null
@@ -0,0 +1 @@
+<P>Se ha borrado con &eacute;xito la clase {printer_name}.
diff --git a/templates/es/class-jobs-header.tmpl b/templates/es/class-jobs-header.tmpl
new file mode 100644 (file)
index 0000000..f571813
--- /dev/null
@@ -0,0 +1 @@
+<H3 CLASS="title">Trabajos</H3>
diff --git a/templates/es/class-modified.tmpl b/templates/es/class-modified.tmpl
new file mode 100644 (file)
index 0000000..959c151
--- /dev/null
@@ -0,0 +1 @@
+<P>Se ha modificado con &eacute;xito la clase <A HREF="/classes/{printer_name}">{printer_name}</A>.
\ No newline at end of file
diff --git a/templates/es/classes-header.tmpl b/templates/es/classes-header.tmpl
new file mode 100644 (file)
index 0000000..714ab89
--- /dev/null
@@ -0,0 +1 @@
+<P ALIGN="CENTER">{total=0?No hay clases:Mostrando {#printer_name} de {total} clase{total=1?:s}}.</P>
diff --git a/templates/es/classes.tmpl b/templates/es/classes.tmpl
new file mode 100644 (file)
index 0000000..1173b53
--- /dev/null
@@ -0,0 +1,54 @@
+{#printer_name=0?:
+{[printer_name]
+<H2 CLASS="title"><A HREF="{printer_uri_supported}">{printer_name}</A>{default_name={printer_name}? (Impresora predeterminada):}
+{?printer_state_message=?:<SPAN CLASS="message">"{printer_state_message}"</SPAN>}</H2>
+
+<TABLE WIDTH="100%" CLASS="button" CELLSPACING="0" CELLPADDING="0" SUMMARY="{printer_name}">
+<TR>
+<TD VALIGN=TOP><A HREF="{printer_uri_supported}">
+<IMG SRC="/images/classes.gif" CLASS="button" ALT=""></A></TD>
+<TD VALIGN=TOP><B>Descripci&oacute;n:</B> {printer_info}<BR>
+<B>Ubicaci&oacute;n:</B> {printer_location}<BR>
+<B>Estado de la clase:</B> {printer_state=3?inactiva:{printer_state=4?procesando:parada}},
+{printer_is_accepting_jobs=0?rechazando trabajos:aceptando trabajos}, {printer_is_shared=0?no:} p&uacute;blica.
+{?member_uris=?:<BR>Miembros: {member_uris}}
+
+<P>
+<A HREF="{printer_uri_supported}?op=print-test-page">
+<IMG SRC="/images/button-print-test-page.gif" ALT="Imprimir p&aacute;gina de prueba" CLASS="button"></A>
+{printer_state=5?
+<A HREF="{admin_uri}?op=start-class&amp;printer_name={printer_name}&amp;is_class=Y">
+<IMG SRC="/images/button-start-class.gif" ALT="Iniciar clase" CLASS="button"></A>
+:
+<A HREF="{admin_uri}?op=stop-class&amp;printer_name={printer_name}&amp;is_class=Y">
+<IMG SRC="/images/button-stop-class.gif" ALT="Detener clase" CLASS="button"></A>
+}
+{printer_is_accepting_jobs=0?
+<A HREF="{admin_uri}?op=accept-jobs&amp;printer_name={printer_name}&amp;is_class=Y">
+<IMG SRC="/images/button-accept-jobs.gif" ALT="Aceptar trabajos" CLASS="button"></A>
+:
+<A HREF="{admin_uri}?op=reject-jobs&amp;printer_name={printer_name}&amp;is_class=Y">
+<IMG SRC="/images/button-reject-jobs.gif" ALT="Rechazar trabajos" CLASS="button"></A>
+}
+<A HREF="{admin_uri}?op=purge-jobs&amp;printer_name={printer_name}&amp;is_class=Y">
+<IMG SRC="/images/button-cancel-all-jobs.gif" ALT="Cancelar todos los trabajos" CLASS="button"></A>
+{printer_is_shared=0?
+<A HREF="{admin_uri}?op=set-sharing&amp;printer_name={printer_name}&amp;shared=1&amp;is_class=Y">
+<IMG SRC="/images/button-publish-printer.gif" ALT="Publicar impresora" CLASS="button"></A>
+:
+<A HREF="{admin_uri}?op=set-sharing&amp;printer_name={printer_name}&amp;shared=0&amp;is_class=Y">
+<IMG SRC="/images/button-unpublish-printer.gif" ALT="No publicar impresora" CLASS="button"></A>
+}
+<A HREF="{admin_uri}?op=modify-class&amp;printer_name={printer_name}">
+<IMG SRC="/images/button-modify-class.gif" ALT="Modificar clase" CLASS="button"></A>
+<A HREF="{admin_uri}?op=delete-class&amp;printer_name={printer_name}">
+<IMG SRC="/images/button-delete-class.gif" ALT="Borrar clase" CLASS="button"></A>
+<A HREF="{admin_uri}?op=set-as-default&amp;printer_name={printer_name}&amp;is_class=Y">
+<IMG SRC="/images/button-set-as-default.gif" ALT="Poner como predeterminada" CLASS="button"></A>
+<A HREF="{admin_uri}?op=set-allowed-users&amp;printer_name={printer_name}&amp;is_class=Y">
+<IMG SRC="/images/button-set-allowed-users.gif" ALT="Establecer usuarios permitidos" CLASS="button"></A>
+</P>
+</TD>
+</TR>
+</TABLE>
+}}
diff --git a/templates/es/edit-config.tmpl.in b/templates/es/edit-config.tmpl.in
new file mode 100644 (file)
index 0000000..71579b5
--- /dev/null
@@ -0,0 +1,90 @@
+<SCRIPT TYPE="text/javascript">
+function reset_config()
+{
+  document.cups.CUPSDCONF.value =
+"# Guarda información general en error_log - cambie \\"info\\" por \\"debug\\" para\\n" +
+"# búsqueda de problemas...\\n" +
+"LogLevel info\\n" +
+"\\n" +
+"\\n" +
+"# Grupo de usuario del Administrador...\\n" +
+"SystemGroup @CUPS_SYSTEM_GROUPS@\\n" +
+"\\n" +
+"\\n" +
+"# Sólo escucha conexiones que provengan de la máquina local.\\n" +
+"Listen 127.0.0.1:@DEFAULT_IPP_PORT@\\n" +
+"@CUPS_LISTEN_DOMAINSOCKET@\\n" +
+"\\n" +
+"\\n" +
+"# Muestra impresoras compartidas en la red local.\\n" +
+"Browsing On\\n" +
+"BrowseOrder allow,deny\\n" +
+"BrowseAllow @LOCAL\\n" +
+"\\n" +
+"\\n" +
+"# De forma predeterminada, la autentificación se hace contra las cuentas del sistema...\\n" +
+"DefaultAuthType Basic\\n" +
+"\\n" +
+"# Limita el acceso al servidor...\\n" +
+"<Location />\\n" +
+"  Order allow,deny\\n" +
+"  Allow localhost\\n" +
+"</Location>\\n" +
+"\\n" +
+"# Limita el acceso a las páginas de administración...\\n" +
+"<Location /admin>\\n" +
+"  Order allow,deny\\n" +
+"  Allow localhost\\n" +
+"</Location>\\n" +
+"\\n" +
+"# Limita el acceso a los archivos de configuración...\\n" +
+"<Location /admin/conf>\\n" +
+"  AuthType Basic\\n" +
+"  Require user @SYSTEM\\n" +
+"  Order allow,deny\\n" +
+"  Allow localhost\\n" +
+"</Location>\\n" +
+"\\n" +
+"# Establece la impresora predeterminada/reglas de trabajos...\\n" +
+"<Policy default>\\n" +
+"  # Las operaciones con trabajos las debe hacer el propietario o un administrador...\\n" +
+"  <Limit Send-Document Send-URI Hold-Job Release-Job Restart-Job Purge-Jobs Set-Job-Attributes Create-Job-Subscription Renew-Subscription Cancel-Subscription Get-Notifications Reprocess-Job Cancel-Current-Job Suspend-Current-Job Resume-Job CUPS-Move-Job>\\n" +
+"    Require user @OWNER @SYSTEM\\n" +
+"    Order deny,allow\\n" +
+"  </Limit>\\n" +
+"\\n" +
+"  # Todas las operaciones de administración requieren la autentificación de un administrador...\\n" +
+"  <Limit Pause-Printer Resume-Printer Set-Printer-Attributes Enable-Printer Disable-Printer Pause-Printer-After-Current-Job Hold-New-Jobs Release-Held-New-Jobs Deactivate-Printer Activate-Printer Restart-Printer Shutdown-Printer Startup-Printer Promote-Job Schedule-Job-After CUPS-Add-Printer CUPS-Delete-Printer CUPS-Add-Class CUPS-Delete-Class CUPS-Accept-Jobs CUPS-Reject-Jobs CUPS-Set-Default>\\n" +
+"    AuthType Basic\\n" +
+"    Require user @SYSTEM\\n" +
+"    Order deny,allow\\n" +
+"  </Limit>\\n" +
+"\\n" +
+"  # Sólo el propietario o un administrador pueden cancelar autenticar un trabajo...\\n" +
+"  <Limit Cancel-Job CUPS-Authenticate-Job>\\n" +
+"    Require user @OWNER @SYSTEM\\n" +
+"    Order deny,allow\\n" +
+"  </Limit>\\n" +
+"\\n" +
+"  <Limit All>\\n" +
+"    Order deny,allow\\n" +
+"  </Limit>\\n" +
+"</Policy>\\n";
+}
+</SCRIPT>
+
+<H2 CLASS="title">Archivo de configuraci&oacute;n del servidor</H2>
+
+<FORM NAME="cups" METHOD="POST" ACTION="/admin/">
+
+<INPUT TYPE="HIDDEN" NAME="OP" VALUE="config-server">
+
+<TEXTAREA NAME="CUPSDCONF" COLS="80" ROWS="25">{CUPSDCONF}</TEXTAREA>
+
+<P><INPUT TYPE="IMAGE" SRC="/images/button-save-changes.gif"
+ALT="Guardar cambios"> <A
+HREF="javascript:reset_config();"><IMG
+SRC="/images/button-use-default-config.gif" CLASS="button"
+ALT="Usar archivo de configuraci&oacute;n predeterminado"></A></P>
+
+</FORM>
diff --git a/templates/es/error-op.tmpl b/templates/es/error-op.tmpl
new file mode 100644 (file)
index 0000000..9a33a1f
--- /dev/null
@@ -0,0 +1,3 @@
+<P>Error:</P>
+
+<BLOCKQUOTE>Operaci&oacute; desconocida "{op}"!</BLOCKQUOTE>
diff --git a/templates/es/error.tmpl b/templates/es/error.tmpl
new file mode 100644 (file)
index 0000000..bf0530c
--- /dev/null
@@ -0,0 +1,3 @@
+<P>{?message?{message}:Error:}</P>
+
+<BLOCKQUOTE>{error}</BLOCKQUOTE>
diff --git a/templates/es/header.tmpl.in b/templates/es/header.tmpl.in
new file mode 100644 (file)
index 0000000..eaf19b5
--- /dev/null
@@ -0,0 +1,63 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
+<HTML>
+<HEAD>
+       <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8">
+       <TITLE>{title} - CUPS @CUPS_VERSION@@CUPS_REVISION@</TITLE>
+       <!-- Prevent caching of CGI content -->
+       <META HTTP-EQUIV="Expires" CONTENT="now">
+       <META HTTP-EQUIV="Pragma" CONTENT="no-cache"> 
+       {refresh_page?<META HTTP-EQUIV="Refresh" CONTENT="{refresh_page}">:}
+       <LINK REL="STYLESHEET" TYPE="text/css" HREF="/cups.css">
+       <LINK REL="SHORTCUT ICON" HREF="/favicon.ico" TYPE="image/x-icon">
+</HEAD>
+<BODY>
+<TABLE WIDTH="100%" STYLE="height: 100%;" BORDER="0" CELLSPACING="0" CELLPADDING="0" SUMMARY="{title}">
+<TR CLASS="HEADER">
+<TD VALIGN="TOP" WIDTH="15" ROWSPAN="2"><IMG SRC="/images/top-left.gif" WIDTH="15" HEIGHT="80" ALT=""></TD>
+<TD VALIGN="TOP" WIDTH="55" ROWSPAN="2"><IMG SRC="/images/top-middle.gif" WIDTH="55" HEIGHT="80" ALT=""></TD>
+<TD WIDTH="100%" HEIGHT="60"><H1>{title}</H1></TD>
+<TD ALIGN="RIGHT" VALIGN="TOP" WIDTH="15" ROWSPAN="2"><IMG
+SRC="/images/top-right.gif" WIDTH="15" HEIGHT="15" ALT=""></TD>
+</TR>
+<TR CLASS="HEADER"><TD WIDTH="100%" VALIGN="BOTTOM" NOWRAP>
+
+<A CLASS="unsel" HREF="/"><IMG SRC="/images/tab-left.gif"
+WIDTH="4" HEIGHT="4" ALIGN="TOP" BORDER="0"
+ALT="">&nbsp;&nbsp;Inicio&nbsp;&nbsp;<IMG
+SRC="/images/tab-right.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP"
+BORDER="0" ALT=""></A>
+
+&nbsp;<A CLASS="{SECTION=admin?:un}sel" HREF="/admin"><IMG
+SRC="/images/tab-left.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP"
+BORDER="0" ALT="">&nbsp;&nbsp;Administraci&oacute;n&nbsp;&nbsp;<IMG
+SRC="/images/tab-right.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP"
+BORDER="0" ALT=""></A>
+
+&nbsp;<A CLASS="{SECTION=classes?:un}sel" HREF="/classes/"><IMG
+SRC="/images/tab-left.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP"
+BORDER="0" ALT="">&nbsp;&nbsp;Clases&nbsp;&nbsp;<IMG
+SRC="/images/tab-right.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP"
+BORDER="0" ALT=""></A>
+
+&nbsp;<A CLASS="{SECTION=help?:un}sel" HREF="/help/"><IMG
+SRC="/images/tab-left.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP"
+BORDER="0" ALT="">&nbsp;&nbsp;Documentaci&oacute;n/Ayuda&nbsp;&nbsp;<IMG
+SRC="/images/tab-right.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP"
+BORDER="0" ALT=""></A>
+
+&nbsp;<A CLASS="{SECTION=jobs?:un}sel" HREF="/jobs/"><IMG
+SRC="/images/tab-left.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP"
+BORDER="0" ALT="">&nbsp;&nbsp;Trabajos&nbsp;&nbsp;<IMG
+SRC="/images/tab-right.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP"
+BORDER="0" ALT=""></A>
+
+&nbsp;<A CLASS="{SECTION=printers?:un}sel" HREF="/printers/"><IMG
+SRC="/images/tab-left.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP"
+BORDER="0" ALT="">&nbsp;&nbsp;Impresoras&nbsp;&nbsp;<IMG
+SRC="/images/tab-right.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP"
+BORDER="0" ALT=""></A>
+
+</TD></TR>
+<TR CLASS="page">
+<TD WIDTH="15">&nbsp;</TD>
+<TD COLSPAN="2" WIDTH="100%" STYLE="height: 100%;" VALIGN="TOP" CLASS="page">
diff --git a/templates/es/help-header.tmpl b/templates/es/help-header.tmpl
new file mode 100644 (file)
index 0000000..051d5d3
--- /dev/null
@@ -0,0 +1,47 @@
+<FORM ACTION="/help/{?HELPFILE}" METHOD="GET">
+{TOPIC?<INPUT TYPE="HIDDEN" NAME="TOPIC" VALUE="{TOPIC}">:}
+
+<P ALIGN="CENTER"><B>Buscar en
+{HELPTITLE?{HELPTITLE}:{TOPIC?{TOPIC}:todos los documentos}}:</B> <INPUT
+TYPE="TEXT" NAME="QUERY" VALUE="{?QUERY}" SIZE="60"> <INPUT
+TYPE="IMAGE" SRC="/images/button-search.gif" ALT="Buscar">
+<A HREF="/help/{?HELPFILE}{QUERY?{TOPIC??TOPIC={TOPIC}:}:}"><IMG
+SRC="/images/button-clear.gif" ALT="Borrar" CLASS="button"></A></P>
+
+</FORM>
+
+<!-- Bookmarks -->
+<DIV CLASS="sidebar">
+<H3 CLASS="title">Documentos de ayuda en línea</H3>
+
+<P CLASS="l0"><A HREF="/help{QUERY??QUERY={QUERY}:}">Todos los documentos</A></P>
+<HR>
+
+{[BMTEXT]<P CLASS="l{BMINDENT}"><A HREF="{BMLINK}">{BMTEXT}</A></P>
+}
+</DIV>
+
+{QUERY?<P>Buscar resultados en {HELPFILE?{HELPTITLE}:{TOPIC?{TOPIC}:todos los documentos}}\:</P>
+{QTEXT?<UL>
+{[QTEXT]<LI><A HREF="{QLINK}">{QTEXT}</A>{QPTEXT? (in <I><A HREF="{QPLINK}">{QPTEXT}</A></I>):}</LI>}
+{QTEXT?</UL>:}
+:<P>No hay coincidencias.</P>}
+<HR NOSHADE>:}
+{HELPTITLE?<H1>{HELPTITLE}
+<A HREF="/help/{HELPFILE}?PRINTABLE=YES" TARGET="_blank"><IMG
+SRC="/images/button-view-printable-version.gif" ALT="Ver versi&oacute;n imprimible"
+CLASS="button"></A></H1>:<H1>P&aacute;ginas de ayuda de CUPS</H1>
+
+<P>Esta es la interfaz de ayuda en l&iacute;nea de CUPS. Introduzca las palabras
+a buscar aqu&iacute; encima o haga clic en cualquiera de los enlaces de la
+documentaci&oacute;n para visualizar la informaci&oacute;n de ayuda en l&iacute;nea.</P>
+
+<P>Si es nuevo en CUPS, lea la p&aacute;gina "<a
+href="overview.html">Informaci&oacute;n general de CUPS</a>". Los usuarios veteranos
+deber&iacute;an leer la p&aacute;gina "<a href="whatsnew.html">Qu&eacute; hay de nuevo en CUPS
+1.2</a>".</P>
+
+<P>La <A HREF="http://www.cups.org/">p&aacute;gina de inicio de CUPS</A> tambi&eacute;n
+proporciona muchos recursos, incluyendo foros de discusi&oacute;n de usuarios, respuestas
+a preguntas frecuentes, y un formulario para el env&iacute;o de informes de errores y
+peticiones de mejoras.</P>}
diff --git a/templates/es/help-printable.tmpl b/templates/es/help-printable.tmpl
new file mode 100644 (file)
index 0000000..305112a
--- /dev/null
@@ -0,0 +1,11 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
+<HTML>
+<HEAD>
+       <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8">
+       <TITLE>{HELPTITLE}</TITLE>
+       <LINK REL="STYLESHEET" TYPE="text/css" HREF="/cups-printable.css">
+       <LINK REL="SHORTCUT ICON" HREF="/favicon.ico" TYPE="image/x-icon">
+</HEAD>
+<BODY>
+
+<H1>{HELPTITLE}</H1>
diff --git a/templates/es/job-cancel.tmpl b/templates/es/job-cancel.tmpl
new file mode 100644 (file)
index 0000000..84d65e5
--- /dev/null
@@ -0,0 +1 @@
+<P>Se ha cancelado el <A HREF="{job_printer_uri}">Trabajo {job_id}</A>.
diff --git a/templates/es/job-hold.tmpl b/templates/es/job-hold.tmpl
new file mode 100644 (file)
index 0000000..f424bca
--- /dev/null
@@ -0,0 +1 @@
+<P>Se ha retenido el <A HREF="{job_printer_uri}">Trabajo {job_id}</A>.
diff --git a/templates/es/job-move.tmpl b/templates/es/job-move.tmpl
new file mode 100644 (file)
index 0000000..2f8992b
--- /dev/null
@@ -0,0 +1,22 @@
+<FORM METHOD="POST" ACTION="/{SECTION}/{job_id?:{printer_name}}">
+<INPUT TYPE="HIDDEN" NAME="OP" VALUE="{op}">
+{job_id?<INPUT TYPE="HIDDEN" NAME="JOB_ID" VALUE="{job_id}">:}
+
+<H2 CLASS="title">{job_id?Mover trabajo {job_id}:Mover todos los trabajos}</H2>
+
+<TABLE>
+<TR>
+<TH CLASS="label">Nuevo destino:</TH>
+<TD>
+<SELECT NAME="JOB_PRINTER_URI" SIZE="10">
+{[job_printer_uri]<OPTION VALUE="{job_printer_uri}">{job_printer_name}}
+</SELECT>
+</TD>
+</TR>
+<TR>
+<TD></TD>
+<TD><INPUT TYPE="IMAGE" SRC="/images/button-move-job{job_id?:s}.gif" ALT="Mover trabajo{job_id?:s}"></TD>
+</TR>
+</TABLE>
+
+</FORM>
diff --git a/templates/es/job-moved.tmpl b/templates/es/job-moved.tmpl
new file mode 100644 (file)
index 0000000..806d2bc
--- /dev/null
@@ -0,0 +1,2 @@
+<P>Se {job_id?ha movido el <A HREF="/jobs/{job_id}">Trabajo {job_id}</A>:han movido todos los trabajos} a
+<A HREF="{job_printer_uri}">{job_printer_name}</A>.</P>
diff --git a/templates/es/job-release.tmpl b/templates/es/job-release.tmpl
new file mode 100644 (file)
index 0000000..14e2d02
--- /dev/null
@@ -0,0 +1 @@
+<P>Se ha liberado el <A HREF="{job_printer_uri}">Trabajo {job_id}</A>.
diff --git a/templates/es/job-restart.tmpl b/templates/es/job-restart.tmpl
new file mode 100644 (file)
index 0000000..d35dfb4
--- /dev/null
@@ -0,0 +1 @@
+<P>Se ha reiniciado el <A HREF="{job_printer_uri}">Trabajo {job_id}</A>.
diff --git a/templates/es/jobs-header.tmpl b/templates/es/jobs-header.tmpl
new file mode 100644 (file)
index 0000000..ca78fab
--- /dev/null
@@ -0,0 +1,15 @@
+<P>{?which_jobs=?<A
+HREF="{?printer_name=?/jobs:{printer_uri_supported}}?which_jobs=completed"><IMG
+SRC="/images/button-show-completed.gif" CLASS="button" ALT="Mostrar trabajos completados"></A>
+<A HREF="{?printer_name=?/jobs:{printer_uri_supported}}?which_jobs=all"><IMG
+SRC="/images/button-show-all.gif" CLASS="button" ALT="Mostrar todos los trabajos">:{which_jobs=all?<A
+HREF="{?printer_name=?/jobs:{printer_uri_supported}}?which_jobs=completed"><IMG
+SRC="/images/button-show-completed.gif" CLASS="button" ALT="Mostrar trabajos completados"></A>
+<A HREF="{?printer_name=?/jobs:{printer_uri_supported}}"><IMG
+SRC="/images/button-show-active.gif" CLASS="button" ALT="Mostrar trabajos activos">:<A
+HREF="{?printer_name=?/jobs:{printer_uri_supported}}"><IMG
+SRC="/images/button-show-active.gif" CLASS="button" ALT="Mostrar trabajos activos"></A>
+<A HREF="{?printer_name=?/jobs:{printer_uri_supported}}?which_jobs=all"><IMG
+SRC="/images/button-show-all.gif" CLASS="button" ALT="Mostrar todos los trabajos">}}</A></P>
+
+<P ALIGN="CENTER">{total=0?No hay trabajos:Mostrando {#job_id} de {total} trabajo{total=1?:s}{?which_jobs=? activo{total=1?:s}:{which_jobs=all?: completado{total=1?:s}}}}.</P>
diff --git a/templates/es/jobs.tmpl b/templates/es/jobs.tmpl
new file mode 100644 (file)
index 0000000..9e36def
--- /dev/null
@@ -0,0 +1,42 @@
+{#job_id=0?:
+<TABLE CELLPADDING="0" CELLSPACING="0" CLASS="button" WIDTH="100%" SUMMARY="Job List">
+<TR CLASS="data">
+<TH>ID&nbsp;</TH>
+<TH>Nombre&nbsp;</TH>
+<TH>Usuario&nbsp;</TH>
+<TH>Tama&ntilde;o&nbsp;</TH>
+<TH>P&aacute;ginas&nbsp;</TH>
+<TH>Estado&nbsp;</TH>
+<TH>Control&nbsp;</TH>
+</TR>
+
+{[job_id]
+<TR CLASS="data" VALIGN="TOP">
+<TD><A HREF="{job_printer_uri}">{job_printer_name}</A>-{job_id}&nbsp;</TD>
+<TD>{?job_name=?Desconocido:{job_name}}&nbsp;</TD>
+<TD>{job_originating_user_name}&nbsp;</TD>
+<TD>{job_k_octets}k&nbsp;</TD>
+<TD>{job_media_sheets_completed=0?Desconocido:{?job_media_sheets_completed}}</TD>
+<TD>{job_state=3?pendiente desde<BR>{time_at_creation}:{job_state=4?retenido desde<BR>{time_at_creation}:
+{job_state=5?en proceso desde<BR>{time_at_processing}:{job_state=6?parado el<BR>{time_at_completed}:
+{job_state=7?cancelado el<BR>{time_at_completed}:{job_state=8?abandonado:completado el<BR>{time_at_completed}}}}}}}&nbsp;</TD>
+<TD>
+{job_preserved>0?
+<A HREF="/jobs/?op=restart-job&amp;job_id={job_id}&amp;job_printer_uri={job_printer_uri}">
+<IMG SRC="/images/button-restart-job.gif" ALT="Reimprimir trabajo" CLASS="button"></A>:}
+{job_state=4?
+<A HREF="/jobs/?op=release-job&amp;job_id={job_id}&amp;job_printer_uri={job_printer_uri}">
+<IMG SRC="/images/button-release-job.gif" ALT="Liberar trabajo" CLASS="button"></A>:}
+{job_state=3?
+<A HREF="/jobs/?op=hold-job&amp;job_id={job_id}&amp;job_printer_uri={job_printer_uri}">
+<IMG SRC="/images/button-hold-job.gif" ALT="Retener trabajo" CLASS="button"></A>:}
+{job_state<7?
+<A HREF="/jobs/?op=cancel-job&amp;job_id={job_id}&amp;job_printer_uri={job_printer_uri}">
+<IMG SRC="/images/button-cancel-job.gif" ALT="Cancelar trabajo" CLASS="button"></A>
+<A HREF="/jobs/?op=move-job&amp;job_id={job_id}"><IMG
+SRC="/images/button-move-job.gif" ALT="Mover trabajo" CLASS="button"></A>:}
+&nbsp;</TD>
+</TR>
+}
+</TABLE>
+}
diff --git a/templates/es/maintenance.tmpl b/templates/es/maintenance.tmpl
new file mode 100644 (file)
index 0000000..6672071
--- /dev/null
@@ -0,0 +1,2 @@
+<P>Se han enviado los comandos de mantenimiento; la ID del trabajo es <A HREF="/printers/{printer_name}">
+{printer_name}-{job_id}</A>.</P>
diff --git a/templates/es/modify-class.tmpl b/templates/es/modify-class.tmpl
new file mode 100644 (file)
index 0000000..6f7526a
--- /dev/null
@@ -0,0 +1,34 @@
+<FORM METHOD="POST" ACTION="/admin">
+<INPUT TYPE="HIDDEN" NAME="OP" VALUE="{op}">
+
+<H2 CLASS="title">Modificar clase {printer_name}</H2>
+
+<TABLE>
+<TR>
+<TH CLASS="label">Nombre:</TH>
+<TD><INPUT TYPE="HIDDEN" NAME="PRINTER_NAME" VALUE="{printer_name}">
+{printer_name}</TD>
+</TR>
+<TR>
+<TH CLASS="label">Ubicaci&oacute;n:</TH>
+<TD><INPUT TYPE="TEXT" NAME="PRINTER_LOCATION" VALUE="{?printer_location}" SIZE="40" MAXLENGTH="127"></TD>
+</TR>
+<TR>
+<TH CLASS="label">Descripci&oacute;n:</TH>
+<TD><INPUT TYPE="TEXT" NAME="PRINTER_INFO" VALUE="{?printer_info}" SIZE="40" MAXLENGTH="127"></TD>
+</TR>
+<TR>
+<TH CLASS="label">Miembros:</TH>
+<TD>
+<SELECT NAME="MEMBER_URIS" SIZE="10" MULTIPLE>
+{[member_uris]<OPTION VALUE="{member_uris}" {?member_selected}>{member_names}}
+</SELECT>
+</TD>
+</TR>
+<TR>
+<TD></TD>
+<TD><INPUT TYPE="IMAGE" SRC="/images/button-modify-class.gif" ALT="Modificar clase"></TD>
+</TR>
+</TABLE>
+
+</FORM>
diff --git a/templates/es/modify-printer.tmpl b/templates/es/modify-printer.tmpl
new file mode 100644 (file)
index 0000000..f52de7c
--- /dev/null
@@ -0,0 +1,29 @@
+<FORM METHOD="POST" ACTION="/admin">
+<INPUT TYPE="HIDDEN" NAME="OP" VALUE="{op}">
+{?device_uri=?:<INPUT TYPE="HIDDEN" NAME="CURRENT_DEVICE_URI" VALUE="{device_uri}">}
+{?printer_make_and_model=?:<INPUT TYPE="HIDDEN" NAME="CURRENT_MAKE_AND_MODEL" VALUE="{printer_make_and_model}">}
+
+<H2 CLASS="title">Modificar impresora {printer_name}</H2>
+
+<TABLE>
+<TR>
+<TH CLASS="label">Nombre:</TH>
+<TD><INPUT TYPE="HIDDEN" NAME="PRINTER_NAME" VALUE="{printer_name}">{printer_name}</TD>
+</TR>
+<TR>
+<TH CLASS="label">Ubicaci&oacute;n:</TH>
+<TD><INPUT TYPE="TEXT" NAME="PRINTER_LOCATION" VALUE="{?printer_location}" SIZE="40" MAXLENGTH="127"><BR>
+<SMALL>(Ubicaci&oacute;n f&aacute;cilmente le&iacute;ble tal como "Lab 1")</SMALL></TD>
+</TR>
+<TR>
+<TH CLASS="label">Descripci&oacute;n:</TH>
+<TD><INPUT TYPE="TEXT" NAME="PRINTER_INFO" VALUE="{?printer_info}" SIZE="40" MAXLENGTH="127"><BR>
+<SMALL>(Descripci&oacute;n f&aacute;cilmente le&iacute;ble tal como "HP LaserJet de doble cara")</SMALL></TD>
+</TR>
+<TR>
+<TD></TD>
+<TD><INPUT TYPE="IMAGE" SRC="/images/button-continue.gif" ALT="Siguiente"></TD>
+</TR>
+</TABLE>
+
+</FORM>
diff --git a/templates/es/option-boolean.tmpl b/templates/es/option-boolean.tmpl
new file mode 100644 (file)
index 0000000..72c8518
--- /dev/null
@@ -0,0 +1,6 @@
+<TR>
+<TH CLASS="label"{conflicted=1? CLASS="conflict":}><A NAME="{keyword}">{keytext}</A>:</TH>
+<TD>
+{[choices]<INPUT TYPE="RADIO" NAME="{keyword}" {choices={defchoice}?CHECKED:} VALUE="{choices}">{text}}
+</TD>
+</TR>
diff --git a/templates/es/option-conflict.tmpl b/templates/es/option-conflict.tmpl
new file mode 100644 (file)
index 0000000..6db0267
--- /dev/null
@@ -0,0 +1,7 @@
+<P><B>Error:</B> Las siguientes opciones est&aacute;n en conflicto:</P>
+
+<UL>
+{[ckeyword]<LI><A HREF="#{ckeyword}">{ckeytext}</A></LI>
+}</UL>
+
+<P>Cambie una o m&aacute;s de las opciones para resolver el problema.</P>
diff --git a/templates/es/option-header.tmpl b/templates/es/option-header.tmpl
new file mode 100644 (file)
index 0000000..cafc9f9
--- /dev/null
@@ -0,0 +1,3 @@
+<H2 CLASS="title">{printer_name}: {group}</H2>
+
+<TABLE>
diff --git a/templates/es/option-pickmany.tmpl b/templates/es/option-pickmany.tmpl
new file mode 100644 (file)
index 0000000..d2534af
--- /dev/null
@@ -0,0 +1,6 @@
+<TR>
+<TH CLASS="label"{conflicted=1? CLASS="conflict":}><A NAME="{keyword}">{keytext}</A>:</TH>
+<TD><SELECT NAME="{keyword}" MULTIPLE SIZE="10">
+{[choices]<OPTION {choices={defchoice}?SELECTED:} VALUE="{choices}">{text}}
+</SELECT></TD>
+</TR>
diff --git a/templates/es/option-pickone.tmpl b/templates/es/option-pickone.tmpl
new file mode 100644 (file)
index 0000000..08342d0
--- /dev/null
@@ -0,0 +1,6 @@
+<TR>
+<TH CLASS="label"{conflicted=1? CLASS="conflict":}><A NAME="{keyword}">{keytext}</A>:</TH>
+<TD><SELECT NAME="{keyword}">
+{[choices]<OPTION {choices={defchoice}?SELECTED:} VALUE="{choices}">{text}}
+</SELECT></TD>
+</TR>
diff --git a/templates/es/option-trailer.tmpl b/templates/es/option-trailer.tmpl
new file mode 100644 (file)
index 0000000..df397bb
--- /dev/null
@@ -0,0 +1,5 @@
+<TR>
+<TD></TD>
+<TD><INPUT TYPE="IMAGE" SRC="/images/button-set-printer-options.gif" ALT="Cambiar opciones impresora"></TD>
+</TR>
+</TABLE>
diff --git a/templates/es/pager.tmpl b/templates/es/pager.tmpl
new file mode 100644 (file)
index 0000000..5fd2aa9
--- /dev/null
@@ -0,0 +1,7 @@
+<TABLE WIDTH="100%" CLASS="pager" SUMMARY="Barra de paginaci&oacute;n">
+<TR>
+       <TD WIDTH="33%">{PREVURL?<A HREF="{PREVURL}"><IMG SRC="/images/button-show-previous.gif" ALT="Mostrar anterior" CLASS="button"></A>:&nbsp;}</TD>
+       <TD WIDTH="34%" ALIGN="CENTER">{ORDER=dec?<A HREF="{THISURL}&amp;ORDER=asc"><IMG SRC="/images/button-sort-ascending.gif" ALT="Orden ascendente" CLASS="button"></A>:<A HREF="{THISURL}&amp;ORDER=dec"><IMG SRC="/images/button-sort-descending.gif" ALT="Orden descendente" CLASS="button"></A>}</TD>
+       <TD WIDTH="33%" ALIGN="RIGHT">{NEXTURL?<A HREF="{NEXTURL}"><IMG SRC="/images/button-show-next.gif" ALT="Mostrar siguiente" CLASS="button"></A>:&nbsp;}</TD>
+</TR>
+</TABLE>
diff --git a/templates/es/printer-accept.tmpl b/templates/es/printer-accept.tmpl
new file mode 100644 (file)
index 0000000..d6d4d54
--- /dev/null
@@ -0,0 +1,3 @@
+<P>La {is_class?clase:impresora} <A
+HREF="/{is_class?classes:printers}/{printer_name}">{printer_name}</A>
+ahora acepta trabajos.</P>
diff --git a/templates/es/printer-added.tmpl b/templates/es/printer-added.tmpl
new file mode 100644 (file)
index 0000000..f0825b1
--- /dev/null
@@ -0,0 +1 @@
+<P>Se ha a&ntilde;adido con &eacute;xito la impresora <A HREF="/printers/{printer_name}">{printer_name}</A>.
diff --git a/templates/es/printer-configured.tmpl b/templates/es/printer-configured.tmpl
new file mode 100644 (file)
index 0000000..db65cae
--- /dev/null
@@ -0,0 +1 @@
+<P>Se ha configurado con &eacute;xito la impresora <A HREF="/printers/{printer_name}">{printer_name}</A>.
diff --git a/templates/es/printer-confirm.tmpl b/templates/es/printer-confirm.tmpl
new file mode 100644 (file)
index 0000000..82bbc03
--- /dev/null
@@ -0,0 +1,7 @@
+<P><B>Advertencia:</B> &iquest;Est&aacute; seguro de querer borrar la impresora
+{printer_name}?</P>
+
+<P ALIGN="CENTER"><A
+HREF="/admin?op=delete-printer&printer_name={printer_name}&confirm=yes"><IMG
+SRC="/images/button-delete-printer.gif" ALT="Borrar impresora"
+CLASS="button"></A></P>
diff --git a/templates/es/printer-default.tmpl b/templates/es/printer-default.tmpl
new file mode 100644 (file)
index 0000000..3efbf67
--- /dev/null
@@ -0,0 +1,7 @@
+<P>Se ha puesto como predeterminada en el servidor la {is_class?clase:impresora} <A
+HREF="/{is_class?classes:printers}/{printer_name}">{printer_name}</A>.</P>
+
+<BLOCKQUOTE><B>Nota:</B> cualquier opci&oacute;n de usuario
+que haya sido activada por mediaci&oacute;n del comando
+<TT>lpoptions</TT> tiene mayor preferencia que este ajuste 
+predeterminado.</BLOCKQUOTE>
diff --git a/templates/es/printer-deleted.tmpl b/templates/es/printer-deleted.tmpl
new file mode 100644 (file)
index 0000000..ca8ed01
--- /dev/null
@@ -0,0 +1 @@
+<P>Se ha borrado con &eacute;xito la impresora {printer_name}.
diff --git a/templates/es/printer-jobs-header.tmpl b/templates/es/printer-jobs-header.tmpl
new file mode 100644 (file)
index 0000000..f571813
--- /dev/null
@@ -0,0 +1 @@
+<H3 CLASS="title">Trabajos</H3>
diff --git a/templates/es/printer-modified.tmpl b/templates/es/printer-modified.tmpl
new file mode 100644 (file)
index 0000000..515d9ee
--- /dev/null
@@ -0,0 +1 @@
+<P>Se ha modificado con &eacute;xito la impresora <A HREF="/printers/{printer_name}">{printer_name}</A>.
diff --git a/templates/es/printer-purge.tmpl b/templates/es/printer-purge.tmpl
new file mode 100644 (file)
index 0000000..10fa0e4
--- /dev/null
@@ -0,0 +1,2 @@
+<P>Se han cancelado todos los trabajos de la {is_class?clase:impresora} <A
+HREF="/{is_class?classes:printers}/{printer_name}">{printer_name}</A>.</P>
diff --git a/templates/es/printer-reject.tmpl b/templates/es/printer-reject.tmpl
new file mode 100644 (file)
index 0000000..7f143ed
--- /dev/null
@@ -0,0 +1,3 @@
+<P>La {is_class?clase:impresora} <A
+HREF="/{is_class?classes:printers}/{printer_name}">{printer_name}</A>
+ya no acepta trabajos.</P>
diff --git a/templates/es/printer-start.tmpl b/templates/es/printer-start.tmpl
new file mode 100644 (file)
index 0000000..cf7fe4f
--- /dev/null
@@ -0,0 +1,3 @@
+<P>La {is_class?clase:impresora} <A
+HREF="/{is_class?classes:printers}/{printer_name}">{printer_name}</A>
+ha sido iniciada.</P>
diff --git a/templates/es/printer-stop.tmpl b/templates/es/printer-stop.tmpl
new file mode 100644 (file)
index 0000000..973644c
--- /dev/null
@@ -0,0 +1,3 @@
+<P>La {is_class?clase:impresora} <A
+HREF="/{is_class?classes:printers}/{printer_name}">{printer_name}</A>
+ha sido parada.</P>
diff --git a/templates/es/printers-header.tmpl b/templates/es/printers-header.tmpl
new file mode 100644 (file)
index 0000000..7280687
--- /dev/null
@@ -0,0 +1 @@
+<P ALIGN="CENTER">{total=0?No hay impresoras:Mostrando {#printer_name} de {total} impresora{total=1?:s}}.</P>
diff --git a/templates/es/printers.tmpl b/templates/es/printers.tmpl
new file mode 100644 (file)
index 0000000..67984f5
--- /dev/null
@@ -0,0 +1,64 @@
+{printer_type?:}{#printer_name=0?:
+{[printer_name]
+<H2 CLASS="title"><A HREF="{printer_uri_supported}">{printer_name}</A>{default_name={printer_name}? (Impresora predeterminada):}
+{?printer_state_message=?:<SPAN CLASS="message">"{printer_state_message}"</SPAN>}</H2>
+
+<TABLE WIDTH="100%" CLASS="button" CELLSPACING="0" CELLPADDING="0" SUMMARY="{printer_name}">
+<TR>
+<TD VALIGN="TOP"><A HREF="{printer_uri_supported}">
+<IMG SRC="/images/printer-{printer_state=3?idle:{printer_state=4?processing:stopped}}.gif" CLASS="button" ALT=""></A>
+</TD>
+<TD VALIGN="TOP"><B>Descripci&oacute;n:</B> {printer_info}<BR>
+<B>Ubicaci&oacute;n:</B> {printer_location}<BR>
+<B>Fabricante y modelo:</B> {printer_make_and_model}<BR>
+<B>Estado de la impresora:</B> {printer_state=3?inactiva:{printer_state=4?procesando:parada}},
+{printer_is_accepting_jobs=0?rechazando trabajos:aceptando trabajos}, {printer_is_shared=0?no:} p&uacute;blica.
+{?device_uri=?:<BR><B>URI de la conexi&oacute;n:</B> {device_uri}}
+
+<P>
+<A HREF="{printer_uri_supported}?op=print-test-page">
+<IMG SRC="/images/button-print-test-page.gif" ALT="Imprimir p&aacute;gina de prueba" CLASS="button"></A>
+{?cupscommand=1?<A HREF="{printer_uri_supported}?op=clean-print-heads">
+<IMG SRC="/images/button-clean-print-heads.gif" ALT="Limpiar cabezales de impresi&oacute;n" CLASS="button"></A>
+<A HREF="{printer_uri_supported}?op=print-self-test-page">
+<IMG SRC="/images/button-print-self-test-page.gif" ALT="Imprimir p&aacute;gina de auto-prueba" CLASS="button"></A>:}
+{printer_state=5?
+<A HREF="{admin_uri}?op=start-printer&amp;printer_name={printer_name}">
+<IMG SRC="/images/button-start-printer.gif" ALT="Iniciar impresora" CLASS="button"></A>
+:
+<A HREF="{admin_uri}?op=stop-printer&amp;printer_name={printer_name}">
+<IMG SRC="/images/button-stop-printer.gif" ALT="Detener impresora" CLASS="button"></A>
+}
+{printer_is_accepting_jobs=0?
+<A HREF="{admin_uri}?op=accept-jobs&amp;printer_name={printer_name}">
+<IMG SRC="/images/button-accept-jobs.gif" ALT="Aceptar trabajos" CLASS="button"></A>
+:
+<A HREF="{admin_uri}?op=reject-jobs&amp;printer_name={printer_name}">
+<IMG SRC="/images/button-reject-jobs.gif" ALT="Rechazar trabajos" CLASS="button"></A>
+}
+<A HREF="{printer_uri_supported}?op=move-jobs&amp;printer_name={printer_name}">
+<IMG SRC="/images/button-move-jobs.gif" ALT="Mover todos los trabajos" CLASS="button"></A>
+<A HREF="{admin_uri}?op=purge-jobs&amp;printer_name={printer_name}">
+<IMG SRC="/images/button-cancel-all-jobs.gif" ALT="Cancelar todos los trabajos" CLASS="button"></A>
+{printer_is_shared=0?
+<A HREF="{admin_uri}?op=set-sharing&amp;printer_name={printer_name}&amp;shared=1">
+<IMG SRC="/images/button-publish-printer.gif" ALT="Publicar impresora" CLASS="button"></A>
+:
+<A HREF="{admin_uri}?op=set-sharing&amp;printer_name={printer_name}&amp;shared=0">
+<IMG SRC="/images/button-unpublish-printer.gif" ALT="No publicar impresora" CLASS="button"></A>
+}
+<A HREF="{admin_uri}?op=modify-printer&amp;printer_name={printer_name}">
+<IMG SRC="/images/button-modify-printer.gif" ALT="Modificar impresora" CLASS="button"></A>
+<A HREF="{admin_uri}?op=set-printer-options&amp;printer_name={printer_name}">
+<IMG SRC="/images/button-set-printer-options.gif" ALT="Cambiar opciones impresora" CLASS="button"></A>
+<A HREF="{admin_uri}?op=delete-printer&amp;printer_name={printer_name}">
+<IMG SRC="/images/button-delete-printer.gif" ALT="Borrar impresora" CLASS="button"></A>
+<A HREF="{admin_uri}?op=set-as-default&amp;printer_name={printer_name}">
+<IMG SRC="/images/button-set-as-default.gif" ALT="Poner como predeterminada" CLASS="button"></A>
+<A HREF="{admin_uri}?op=set-allowed-users&amp;printer_name={printer_name}">
+<IMG SRC="/images/button-set-allowed-users.gif" ALT="Establecer usuarios permitidos" CLASS="button"></A>
+</P>
+</TD>
+</TR>
+</TABLE>
+}}
diff --git a/templates/es/restart.tmpl b/templates/es/restart.tmpl
new file mode 100644 (file)
index 0000000..b9b0e74
--- /dev/null
@@ -0,0 +1 @@
+<p>Por favor espere mientras se reinicia el servidor...</p>
diff --git a/templates/es/samba-export.tmpl b/templates/es/samba-export.tmpl
new file mode 100644 (file)
index 0000000..eca4767
--- /dev/null
@@ -0,0 +1,55 @@
+<SCRIPT TYPE="text/javascript"><!--
+function select_printers() {
+  var list = document.export_samba.EXPORT_NAME;
+  var sel = document.export_samba.EXPORT_ALL.checked;
+
+  for (i = 0; i < list.length; i ++) {
+    list.options[i].selected = sel;
+  }
+}
+--></SCRIPT>
+
+<FORM METHOD="POST" ACTION="/admin/" NAME="export_samba">
+<INPUT TYPE="HIDDEN" NAME="OP" VALUE="export-samba">
+
+<H2 CLASS="title">Exportar impresoras a Samba</H2>
+
+{error?<P>No se han podido exportar las impresoras a Samba\:</P>
+<BLOCKQUOTE>{error}</BLOCKQUOTE>
+<P>Consulte el archivo <A HREF="/admin/log/error_log"
+TARGET="_blank">error_log</A> para m&aacute;s informaci&oacute;n.</P>:
+<P>Esta p&aacute;gina le permite exportar las impresoras a Samba para que
+los clientes Windows puedan acceder a ellas por el icono de su
+escritorio <VAR>Sitios de red</VAR>. Debe haber instalado
+previamente el controlador de impresora PostScript de Windows
+como se describe en la p&aacute;gina del manual
+<A HREF="/help/man-cupsaddsmb.html"
+TARGET="_blank">cupsaddsmb(8)</A>.</P>}
+
+<TABLE>
+<TR>
+<TH CLASS="label">Impresoras:</TH>
+<TD>
+<SELECT NAME="EXPORT_NAME" SIZE="10" MULTIPLE>
+{[printer_name]<OPTION VALUE="{printer_name}"{export_all? SELECTED:{printer_export? SELECTED:}}>{printer_name}}
+</SELECT><BR>
+<INPUT TYPE="CHECKBOX" NAME="EXPORT_ALL"{export_all? CHECKED:}
+onChange="select_printers()"> Exportar todas las impresoras
+</TD>
+</TR>
+<TR>
+<TH CLASS="label">Nombre de usuario Samba:</TH>
+<TD><INPUT TYPE="TEXT" NAME="USERNAME" VALUE="{?USERNAME}"> (necesario)</TD>
+</TR>
+<TR>
+<TH CLASS="label">Contrase&ntilde;a Samba:</TH>
+<TD><INPUT TYPE="PASSWORD" NAME="PASSWORD" VALUE=""> (necesario)</TD>
+</TR>
+<TR>
+<TD></TD>
+<TD><INPUT TYPE="IMAGE" SRC="/images/button-export-samba.gif"
+ALT="Exportar impresoras a Samba"></TD>
+</TR>
+</TABLE>
+
+</FORM>
diff --git a/templates/es/samba-exported.tmpl b/templates/es/samba-exported.tmpl
new file mode 100644 (file)
index 0000000..a54925d
--- /dev/null
@@ -0,0 +1 @@
+<P>Se han exportado las impresoras a samba con &eacute;xito.</P>
diff --git a/templates/es/search.tmpl b/templates/es/search.tmpl
new file mode 100644 (file)
index 0000000..4001b33
--- /dev/null
@@ -0,0 +1,13 @@
+<FORM ACTION="/{SECTION}/{?SEARCH_DEST}" METHOD="GET">
+{WHICH_JOBS?<INPUT TYPE="HIDDEN" NAME="WHICH_JOBS" VALUE="{WHICH_JOBS}">:}
+{ORDER?<INPUT TYPE="HIDDEN" NAME="ORDER" VALUE="{ORDER}">:}
+
+<P ALIGN="CENTER"><B>Buscar en
+{SEARCH_DEST?{SEARCH_DEST}:{SECTION=classes?clases:{SECTION=jobs?trabajos:impresoras}}}:</B>
+<INPUT TYPE="TEXT" NAME="QUERY" VALUE="{?QUERY}" SIZE="60"> <INPUT
+TYPE="IMAGE" SRC="/images/button-search.gif" ALT="Buscar">
+<A
+HREF="/{SECTION}/{?SEARCH_DEST}{WHICH_JOBS??WHICH_JOBS={WHICH_JOBS}{ORDER?&amp;ORDER={ORDER}:}:{ORDER??ORDER={ORDER}:}}"><IMG
+SRC="/images/button-clear.gif" ALT="Borrar" CLASS="button"></A></P>
+
+</FORM>
diff --git a/templates/es/set-printer-options-header.tmpl b/templates/es/set-printer-options-header.tmpl
new file mode 100644 (file)
index 0000000..864f9f0
--- /dev/null
@@ -0,0 +1,3 @@
+<FORM METHOD="POST" ACTION="/admin">
+<INPUT TYPE="HIDDEN" NAME="PRINTER_NAME" VALUE="{printer_name}">
+<INPUT TYPE="HIDDEN" NAME="OP" VALUE="{op}">
diff --git a/templates/es/set-printer-options-trailer.tmpl b/templates/es/set-printer-options-trailer.tmpl
new file mode 100644 (file)
index 0000000..a3d1e1f
--- /dev/null
@@ -0,0 +1 @@
+</FORM>
diff --git a/templates/es/test-page.tmpl b/templates/es/test-page.tmpl
new file mode 100644 (file)
index 0000000..7670f98
--- /dev/null
@@ -0,0 +1,2 @@
+<P>P&aacute;gina de prueba enviada; el n&uacute;mero del trabajo es el <A HREF="/{SECTION}/{printer_name}">
+{printer_name}-{job_id}</A>.</P>
diff --git a/templates/es/trailer.tmpl b/templates/es/trailer.tmpl
new file mode 100644 (file)
index 0000000..47ba506
--- /dev/null
@@ -0,0 +1,21 @@
+</TD>
+<TD WIDTH="15">&nbsp;</TD>
+</TR>
+<TR CLASS="trailer">
+<TD VALIGN="BOTTOM" WIDTH="15"><IMG SRC="/images/bottom-left.gif"
+WIDTH="15" HEIGHT="15" ALT=""></TD>
+<TD COLSPAN="2" WIDTH="100%" STYLE="padding: 5;">
+
+<P><SMALL>Common UNIX Printing System, CUPS, y el logo de CUPS son
+marcas registradas de <A HREF="http://www.easysw.com">Easy Software
+Products</A>. Los derechos de copia de CUPS 1997-2006 son de Easy Software Products,
+Todos los derechos reservados.</SMALL></P>
+
+</TD>
+
+<TD ALIGN="RIGHT" VALIGN="BOTTOM" WIDTH="15"><IMG SRC="/images/bottom-right.gif"
+WIDTH="15" HEIGHT="15" ALT=""></TD>
+</TR>
+</TABLE>
+</BODY>
+</HTML>
diff --git a/templates/es/users.tmpl b/templates/es/users.tmpl
new file mode 100644 (file)
index 0000000..c4ff1a5
--- /dev/null
@@ -0,0 +1,26 @@
+<FORM METHOD="POST" ACTION="/admin">
+<INPUT TYPE="HIDDEN" NAME="OP" VALUE="{OP}">
+<INPUT TYPE="HIDDEN" NAME="PRINTER_NAME" VALUE="{printer_name}">
+{IS_CLASS?<INPUT TYPE="HIDDEN" NAME="IS_CLASS" VALUE="{IS_CLASS}">:}
+
+<H2 CLASS="title">Usuarios permitidos para {printer_name}</H2>
+
+<TABLE>
+<TR>
+<TH CLASS="label">Usuarios:</TH>
+<TD>
+<INPUT TYPE='TEXT' NAME='users' SIZE='60' VALUE='{?requesting_user_name_allowed}{?requesting_user_name_denied}'>
+<BR>
+<INPUT TYPE='RADIO' NAME='type' VALUE='requesting-user-name-allowed' {requesting_user_name_allowed?checked:}>Permitir a estos usuarios imprimir
+<INPUT TYPE='RADIO' NAME='type' VALUE='requesting-user-name-denied' {requesting_user_name_denied?checked:}>Evitar que estos usuarios impriman
+</TD>
+</TR>
+<TR>
+<TD></TD>
+<TD>
+<INPUT TYPE="IMAGE" SRC="/images/button-set-allowed-users.gif" ALT="Establecer usuarios permitidos">
+</TD>
+</TR>
+</TABLE>
+
+</FORM>
index 3d1efb014dd6a7175470832d5d870a82f14ee964..7e8b5099b237d16f778a17571161fe285aa34c6b 100644 (file)
@@ -1,4 +1,4 @@
-<TABLE CELLPADDING="0" CELLSPACING="0" CLASS="button" WIDTH="100%">
+<TABLE CELLPADDING="0" CELLSPACING="0" CLASS="button" WIDTH="100%" SUMMARY="Administration Tasks">
 <TR><TD VALIGN="TOP" NOWRAP>
 
 <H2 CLASS="title">プリンタ</H2>
@@ -53,6 +53,9 @@ SRC="/images/button-view-page-log.gif" ALT="ページログの表示"
 CLASS="button"></A>
 </P>
 
+{SETTINGS_ERROR?<P>{SETTINGS_MESSAGE}</P>
+<BLOCKQUOTE>{SETTINGS_ERROR}</BLOCKQUOTE>:
+
 <FORM METHOD="POST" ACTION="/admin">
 
 <P><B>基本サーバ設定:</B></P>
@@ -66,7 +69,7 @@ CLASS="button"></A>
 
 <P><INPUT TYPE="IMAGE" SRC="/images/button-change-settings.gif" ALT="設定の変更"></P>
 
-</FORM>
+</FORM>}
 
 </TD></TR>
 </TABLE>
index 33dd2f7fdfeea30b7ba7f60eefeaf1acfd757ccd..990ecfaafe56c0cac404850364efb7b51310a4c9 100644 (file)
 <TD></TD>
 <TD>例:
 <PRE>
-    file:/path/to/filename.prn
     http://hostname:631/ipp/
     http://hostname:631/ipp/port1
+
     ipp://hostname/ipp/
     ipp://hostname/ipp/port1
+
     lpd://hostname/queue
+
     socket://hostname
     socket://hostname:9100
 </PRE>
diff --git a/templates/ja/maintenance.tmpl b/templates/ja/maintenance.tmpl
new file mode 100644 (file)
index 0000000..78fc9bc
--- /dev/null
@@ -0,0 +1,2 @@
+<P>メンテナンスコマンドを送りました; ジョブ ID は <A HREF="/printers/{printer_name}">
+{printer_name}-{job_id}</A> です。</P>
index 87f648b99e8864cc7ae8e643cef7e932735365ce..06b7564a091919c66667e8bfc48b367a84795f1b 100755 (executable)
@@ -1,6 +1,6 @@
 #!/bin/sh
 #
-# "$Id: run-stp-tests.sh 5091 2006-02-08 18:39:56Z mike $"
+# "$Id: run-stp-tests.sh 5262 2006-03-09 21:26:27Z mike $"
 #
 #   Perform the complete set of IPP compliance tests specified in the
 #   CUPS Software Test Plan.
@@ -149,7 +149,19 @@ esac
 # Information for the server/tests...
 #
 
-user=`whoami`
+user="$USER"
+if test -z "$user"; then
+       if test -x /usr/ucb/whoami; then
+               user=`/usr/ucb/whoami`
+       else
+               user=`whoami`
+       fi
+
+       if test -z "$user"; then
+               user="unknown"
+       fi
+fi
+
 port=8631
 cwd=`pwd`
 root=`dirname $cwd`
@@ -421,7 +433,7 @@ done
 # Create the test report source file...
 #
 
-strfile=cups-str-1.2-`date +%Y-%m-%d`-`whoami`.html
+strfile=cups-str-1.2-`date +%Y-%m-%d`-$user.html
 
 rm -f $strfile
 cat str-header.html >$strfile
@@ -435,7 +447,7 @@ echo "Running IPP compliance tests..."
 echo "<H1>1 - IPP Compliance Tests</H1>" >>$strfile
 echo "<P>This section provides the results to the IPP compliance tests" >>$strfile
 echo "outlined in the CUPS Software Test Plan. These tests were run on" >>$strfile
-echo `date "+%Y-%m-%d"` by `whoami` on `hostname`. >>$strfile
+echo `date "+%Y-%m-%d"` by $user on `hostname`. >>$strfile
 echo "<PRE>" >>$strfile
 
 fail=0
@@ -463,7 +475,7 @@ echo "Running command tests..."
 echo "<H1>2 - Command Tests</H1>" >>$strfile
 echo "<P>This section provides the results to the command tests" >>$strfile
 echo "outlined in the CUPS Software Test Plan. These tests were run on" >>$strfile
-echo `date "+%Y-%m-%d"` by `whoami` on `hostname`. >>$strfile
+echo `date "+%Y-%m-%d"` by $user on `hostname`. >>$strfile
 echo "<PRE>" >>$strfile
 
 for file in 5*.sh; do
@@ -557,5 +569,5 @@ echo "    $strfile"
 echo ""
 
 #
-# End of "$Id: run-stp-tests.sh 5091 2006-02-08 18:39:56Z mike $"
+# End of "$Id: run-stp-tests.sh 5262 2006-03-09 21:26:27Z mike $"
 #
index ff961efd78ae32cd0b7c105044a70a79baf32a48..a72fef4b5644d66a868f76da1aca25c1d242b986 100755 (executable)
@@ -1,6 +1,6 @@
 #!/bin/sh
 #
-# "$Id$"
+# "$Id: makesrcdist 5304 2006-03-18 01:21:37Z mike $"
 #
 # makesrcdist - make a source distribution of CUPS.
 #
@@ -21,7 +21,7 @@ if test $# = 0; then
        version="1.2svn"
        revision="-r$rev"
        fileversion="1.2svn-r$rev"
-       fileurl="ftp://ftp.easysw.com/pub/cups/test/cups-$fileversion-source.tar.bz2"
+       fileurl="ftp://ftp.easysw.com/pub/cups/test/cups-$fileversion-source.tar."
        url="."
 else
        echo Creating tag for release...
@@ -29,13 +29,15 @@ else
        version=$1
        revision=""
        fileversion=$1
-       fileurl="ftp://ftp.easysw.com/pub/cups/$version/cups-$fileversion-source.tar.bz2"
+       fileurl="ftp://ftp.easysw.com/pub/cups/$version/cups-$fileversion-source.tar."
        url="https://svn.easysw.com/public/cups/tags/release-$version"
 
        svn copy https://svn.easysw.com/public/cups/trunk "$url" \
                -m "Tag $version" || exit 1
 fi
 
+fileurl=`echo $fileurl | sed -e '1,$s/\\//\\\\\\//g'`
+
 echo Exporting $fileversion...
 rm -rf /tmp/cups-$version
 svn export $url /tmp/cups-$version
@@ -48,11 +50,6 @@ sed -e '1,$s/^CUPS_VERSION=.*/CUPS_VERSION='$version'/' \
        <cups-common.m4 >cups-common.m4.new
 mv cups-common.m4.new cups-common.m4
 cd ..
-fileurl=`echo $fileurl | sed -e '1,$s/\\//\\\\\\//g'`
-sed -e '1,$s/@CUPS_VERSION@/'$version'/' \
-       -e '1,$s/^Release:.*/Release: '$rev'/' \
-       -e '1,$s/^Source:.*/Source: '$fileurl'/' \
-       <packaging/cups.spec.in >packaging/cups.spec
 
 echo Configuring...
 autoconf -f
@@ -62,8 +59,19 @@ rm -rf tools
 cd ..
 
 echo -n Archiving...gz
+sed -e '1,$s/@CUPS_VERSION@/'$version'/' \
+       -e '1,$s/^Release:.*/Release: '$rev'/' \
+       -e '1,$s/^Source:.*/Source: '$fileurl'gz/' \
+       <cups-$version/packaging/cups.spec.in \
+       >cups-$version/packaging/cups.spec
 tar czf cups-$fileversion-source.tar.gz cups-$version
+
 echo -n ...bz2
+sed -e '1,$s/@CUPS_VERSION@/'$version'/' \
+       -e '1,$s/^Release:.*/Release: '$rev'/' \
+       -e '1,$s/^Source:.*/Source: '$fileurl'bz2/' \
+       <cups-$version/packaging/cups.spec.in \
+       >cups-$version/packaging/cups.spec
 tar cjf cups-$fileversion-source.tar.bz2 cups-$version
 echo "..."
 
@@ -73,5 +81,5 @@ rm -rf cups-$version
 echo "Done!"
 
 #
-# End of "$Id$".
+# End of "$Id: makesrcdist 5304 2006-03-18 01:21:37Z mike $".
 #
index 9193b8a3de4a69df6f6119d346d9d57ac1ec3c59..655853a3b38fa042abcca39620f091d352f9b826 100755 (executable)
@@ -30,7 +30,8 @@ mkdir -p $pkgdir/Resources
 # Install resource files into the Resources directory...
 echo Installing resource files...
 cp packaging/LICENSE.rtf $pkgdir/Resources/ReadMe.rtf
-cp packaging/WELCOME.rtf $pkgdir/Resources/Welcome.rtf
+sed -e '1,$s/@CUPS_VERSION@/'$version'/g' \
+       <packaging/WELCOME.rtf >$pkgdir/Resources/Welcome.rtf
 cp packaging/installer.tif $pkgdir/Resources/background.tif
 
 cat >$pkgdir/Resources/preflight <<EOF
@@ -63,12 +64,14 @@ fi
 chmod 755 $pkgdir/Resources/postflight
 
 # Tag the current revision in the plist and web interface files...
-sed -e '1,$s/@CUPS_VERSION@/'$version'/g' \
-       -e '1,$s/@CUPS_RELEASE@/1.2.'$rev'/g' \
-       <packaging/cups-desc.plist.in >packaging/cups-desc.plist
-sed -e '1,$s/@CUPS_VERSION@/'$version'/g' \
-       -e '1,$s/@CUPS_RELEASE@/1.2.'$rev'/g' \
-       <packaging/cups-info.plist.in >packaging/cups-info.plist
+for file in packaging/cups-desc.plist packaging/cups-info.plist \
+               doc/index.html doc/ja/index.html templates/header.tmpl; do
+       echo Updating $file...
+       sed -e '1,$s/@CUPS_VERSION@/'$version'/g' \
+               -e '1,$s/@CUPS_REVISION@//g' \
+               -e '1,$s/@CUPS_RELEASE@/1.2.'$rev'/g' \
+               <$file.in >$file
+done
 
 # Install CUPS into the Package directory...
 #make INSTALL=$topdir/install-sh BUILDROOT=$pkgdir/Package install
index 74d1449e4af0fdfc79cc1255f8156075be28e46e..7d4e9e4a3c7183d1c9a965b071f279f0abab101b 100755 (executable)
@@ -1,6 +1,6 @@
 #!/bin/sh
 #
-# "$Id$"
+# "$Id: testrpm 5304 2006-03-18 01:21:37Z mike $"
 #
 # Test script for making RPMs...
 #
@@ -28,5 +28,5 @@ rm -f /usr/src/redhat/SRPMS/cups*.rpm
 rpmbuild -ta $args cups-$fileversion-source.tar.bz2
 
 #
-# End of "$Id$".
+# End of "$Id: testrpm 5304 2006-03-18 01:21:37Z mike $".
 #